Built motion from commit 4253e76.|0.0.66
authorDaniele Cinti <daniele.cinti@xcally.com>
Tue, 15 Mar 2016 17:56:28 +0000 (18:56 +0100)
committerDaniele Cinti <daniele.cinti@xcally.com>
Tue, 15 Mar 2016 17:56:28 +0000 (18:56 +0100)
561 files changed:
public/assets/plugins/jscripty/js/Actions.js
public/assets/plugins/jscripty/js/Dialogs.js
public/assets/plugins/jscripty/js/Editor.js
public/assets/plugins/jscripty/js/EditorUi.js
public/assets/plugins/jscripty/js/Graph.js
public/assets/plugins/jscripty/js/Menus.js
public/assets/plugins/jscripty/js/Shapes.js
public/assets/plugins/jscripty/js/Sidebar.js
public/assets/plugins/jscripty/js/Toolbar.js
public/assets/plugins/jscripty/js/custom.js
public/assets/plugins/mxgraph/js/mxClient.js
public/assets/plugins/square/js/Actions.js
public/assets/plugins/square/js/Dialogs.js
public/assets/plugins/square/js/Editor.js
public/assets/plugins/square/js/EditorUi.js
public/assets/plugins/square/js/Graph.js
public/assets/plugins/square/js/Menus.js
public/assets/plugins/square/js/Shapes.js
public/assets/plugins/square/js/Sidebar.js
public/assets/plugins/square/js/Toolbar.js
public/assets/plugins/square/js/custom.js
server/api/action/action.controller.js
server/api/action/action.socket.js
server/api/action/index.js
server/api/agent/agent.controller.js
server/api/agent/agent.socket.js
server/api/agent/index.js
server/api/ami/ami.ami.js
server/api/ami/ami.controller.js
server/api/ami/ami.socket.js
server/api/ami/ami.spec.js
server/api/ami/index.js
server/api/automation/automation.controller.js
server/api/automation/automation.socket.js
server/api/automation/automation.spec.js
server/api/automation/index.js
server/api/canned_answer/canned_answer.controller.js
server/api/canned_answer/canned_answer.socket.js
server/api/canned_answer/index.js
server/api/chanspy/chanspy.controller.js
server/api/chanspy/chanspy.socket.js
server/api/chanspy/index.js
server/api/chat_application/chat_application.controller.js
server/api/chat_application/chat_application.socket.js
server/api/chat_application/chat_application.spec.js
server/api/chat_application/index.js
server/api/chat_enquiry/enquiry.controller.js
server/api/chat_enquiry/enquiry.socket.js
server/api/chat_enquiry/index.js
server/api/chat_message/chat_message.controller.js
server/api/chat_message/chat_message.socket.js
server/api/chat_message/chat_message.spec.js
server/api/chat_message/index.js
server/api/chat_proactive_action/chat_proactive_action.controller.js
server/api/chat_proactive_action/chat_proactive_action.socket.js
server/api/chat_proactive_action/index.js
server/api/chat_proactive_action/index.spec.js
server/api/chat_queue/chat_queue.controller.js
server/api/chat_queue/chat_queue.socket.js
server/api/chat_queue/index.js
server/api/chat_room/chat_room.controller.js
server/api/chat_room/chat_room.socket.js
server/api/chat_room/index.js
server/api/chat_visitor/chat_visitor.controller.js
server/api/chat_visitor/chat_visitor.socket.js
server/api/chat_visitor/index.js
server/api/chat_website/chat_website.controller.js
server/api/chat_website/chat_website.socket.js
server/api/chat_website/index.js
server/api/chat_websites_field/chat_websites_field.controller.js
server/api/chat_websites_field/chat_websites_field.socket.js
server/api/chat_websites_field/index.js
server/api/chat_websites_field/index.spec.js
server/api/company/company.controller.js
server/api/company/company.socket.js
server/api/company/company.spec.js
server/api/company/index.js
server/api/contact_manager/contact_manager.controller.js
server/api/contact_manager/contact_manager.socket.js
server/api/contact_manager/contact_manager.spec.js
server/api/contact_manager/index.js
server/api/custom_report/custom_report.controller.js
server/api/custom_report/custom_report.socket.js
server/api/custom_report/custom_report.spec.js
server/api/custom_report/index.js
server/api/dashboard/dashboard.controller.js
server/api/dashboard/dashboard.socket.js
server/api/dashboard/dashboard.spec.js
server/api/dashboard/index.js
server/api/default_report/default_report.controller.js
server/api/default_report/default_report.socket.js
server/api/default_report/default_report.spec.js
server/api/default_report/index.js
server/api/desk_account/desk_account.controller.js
server/api/desk_account/desk_account.socket.js
server/api/desk_account/desk_account.spec.js
server/api/desk_account/index.js
server/api/desk_configuration/desk_configuration.controller.js
server/api/desk_configuration/desk_configuration.socket.js
server/api/desk_configuration/index.js
server/api/desk_configuration/index.spec.js
server/api/desk_field/desk_field.controller.js
server/api/desk_field/desk_field.socket.js
server/api/desk_field/index.js
server/api/desk_field/index.spec.js
server/api/extracted_report/extracted_report.controller.js
server/api/extracted_report/extracted_report.socket.js
server/api/extracted_report/extracted_report.spec.js
server/api/extracted_report/index.js
server/api/fax_account/fax_account.controller.js
server/api/fax_account/fax_account.socket.js
server/api/fax_account/fax_account.spec.js
server/api/fax_account/index.js
server/api/fax_application/fax_application.controller.js
server/api/fax_application/fax_application.socket.js
server/api/fax_application/fax_application.spec.js
server/api/fax_application/index.js
server/api/fax_message/fax_message.ami.js
server/api/fax_message/fax_message.controller.js
server/api/fax_message/fax_message.socket.js
server/api/fax_message/fax_message.spec.js
server/api/fax_message/index.js
server/api/fax_queue/fax_queue.controller.js
server/api/fax_queue/fax_queue.socket.js
server/api/fax_queue/fax_queue.spec.js
server/api/fax_queue/index.js
server/api/fax_room/fax_room.controller.js
server/api/fax_room/fax_room.kue.js
server/api/fax_room/fax_room.socket.js
server/api/fax_room/fax_room.spec.js
server/api/fax_room/index.js
server/api/freshdesk_account/freshdesk_account.controller.js
server/api/freshdesk_account/freshdesk_account.socket.js
server/api/freshdesk_account/index.js
server/api/freshdesk_account/index.spec.js
server/api/freshdesk_configuration/freshdesk_configuration.controller.js
server/api/freshdesk_configuration/freshdesk_configuration.socket.js
server/api/freshdesk_configuration/index.js
server/api/freshdesk_configuration/index.spec.js
server/api/freshdesk_field/freshdesk_field.controller.js
server/api/freshdesk_field/freshdesk_field.socket.js
server/api/freshdesk_field/index.js
server/api/freshdesk_field/index.spec.js
server/api/integration/index.js
server/api/integration/integration.controller.js
server/api/integration/integration.socket.js
server/api/integration/integration.spec.js
server/api/interval/index.js
server/api/interval/interval.controller.js
server/api/interval/interval.socket.js
server/api/interval/interval.spec.js
server/api/jscripty_project/index.js
server/api/jscripty_project/index.spec.js
server/api/jscripty_project/jscripty_project.controller.js
server/api/jscripty_project/jscripty_project.socket.js
server/api/license/index.js
server/api/license/license.controller.js
server/api/license/license.socket.js
server/api/mail_account/index.js
server/api/mail_account/mail_account.controller.js
server/api/mail_account/mail_account.socket.js
server/api/mail_application/index.js
server/api/mail_application/mail_application.controller.js
server/api/mail_application/mail_application.socket.js
server/api/mail_application/mail_application.spec.js
server/api/mail_attachment/index.js
server/api/mail_attachment/mail_attachment.controller.js
server/api/mail_attachment/mail_attachment.socket.js
server/api/mail_message/index.js
server/api/mail_message/mail_message.controller.js
server/api/mail_message/mail_message.socket.js
server/api/mail_queue/index.js
server/api/mail_queue/mail_queue.controller.js
server/api/mail_queue/mail_queue.socket.js
server/api/mail_room/index.js
server/api/mail_room/mail_room.controller.js
server/api/mail_room/mail_room.socket.js
server/api/mail_server_in/index.js
server/api/mail_server_in/mail_server_in.controller.js
server/api/mail_server_in/mail_server_in.socket.js
server/api/mail_server_out/index.js
server/api/mail_server_out/mail_server_out.controller.js
server/api/mail_server_out/mail_server_out.socket.js
server/api/mail_template/index.js
server/api/mail_template/mail_template.controller.js
server/api/mail_template/mail_template.socket.js
server/api/metric/index.js
server/api/metric/metric.controller.js
server/api/metric/metric.socket.js
server/api/metric/metric.spec.js
server/api/module/index.js
server/api/module/module.controller.js
server/api/module/module.socket.js
server/api/module/module.spec.js
server/api/module/setting/index.js
server/api/module/setting/setting.controller.js
server/api/module/setting/setting.socket.js
server/api/module/setting/setting.spec.js
server/api/motionbar/index.js
server/api/motionbar/motionbar.controller.js
server/api/motionbar/motionbar.socket.js
server/api/motionbar/motionbar.spec.js
server/api/pause/index.js
server/api/pause/pause.controller.js
server/api/pause/pause.socket.js
server/api/report_agent/index.js
server/api/report_agent/report_agent.controller.js
server/api/report_agent/report_agent.socket.js
server/api/report_chat/index.js
server/api/report_chat/report_chat.controller.js
server/api/report_chat/report_chat.socket.js
server/api/report_chat_session/index.js
server/api/report_chat_session/report_chat_session.controller.js
server/api/report_chat_session/report_chat_session.socket.js
server/api/report_integration/index.js
server/api/report_integration/report_integration.controller.js
server/api/report_integration/report_integration.socket.js
server/api/report_mail/index.js
server/api/report_mail/report_mail.controller.js
server/api/report_mail/report_mail.socket.js
server/api/report_mail_session/index.js
server/api/report_mail_session/report_mail_session.controller.js
server/api/report_mail_session/report_mail_session.socket.js
server/api/report_queue/index.js
server/api/report_queue/report_queue.controller.js
server/api/report_queue/report_queue.socket.js
server/api/report_tree/index.js
server/api/report_tree/report_tree.controller.js
server/api/report_tree/report_tree.socket.js
server/api/report_tree/report_tree.spec.js
server/api/salesforce_account/index.js
server/api/salesforce_account/index.spec.js
server/api/salesforce_account/salesforce_account.controller.js
server/api/salesforce_account/salesforce_account.socket.js
server/api/salesforce_configuration/index.js
server/api/salesforce_configuration/index.spec.js
server/api/salesforce_configuration/salesforce_configuration.controller.js
server/api/salesforce_configuration/salesforce_configuration.socket.js
server/api/salesforce_field/index.js
server/api/salesforce_field/index.spec.js
server/api/salesforce_field/salesforce_field.controller.js
server/api/salesforce_field/salesforce_field.socket.js
server/api/service/index.js
server/api/service/service.controller.js
server/api/service/service.socket.js
server/api/service/service.spec.js
server/api/setting/index.js
server/api/setting/setting.controller.js
server/api/setting/setting.socket.js
server/api/sound/index.js
server/api/sound/sound.controller.js
server/api/sound/sound.socket.js
server/api/sound/sound.spec.js
server/api/square_odbc/index.js
server/api/square_odbc/square_odbc.controller.js
server/api/square_odbc/square_odbc.socket.js
server/api/square_odbc/square_odbc.spec.js
server/api/square_project/index.js
server/api/square_project/square_project.controller.js
server/api/square_project/square_project.socket.js
server/api/sugarcrm_account/index.js
server/api/sugarcrm_account/index.spec.js
server/api/sugarcrm_account/sugarcrm_account.controller.js
server/api/sugarcrm_account/sugarcrm_account.socket.js
server/api/sugarcrm_configuration/index.js
server/api/sugarcrm_configuration/index.spec.js
server/api/sugarcrm_configuration/sugarcrm_configuration.controller.js
server/api/sugarcrm_configuration/sugarcrm_configuration.socket.js
server/api/sugarcrm_field/index.js
server/api/sugarcrm_field/index.spec.js
server/api/sugarcrm_field/sugarcrm_field.controller.js
server/api/sugarcrm_field/sugarcrm_field.socket.js
server/api/tag/index.js
server/api/tag/tag.controller.js
server/api/tag/tag.socket.js
server/api/tag/tag.spec.js
server/api/team/index.js
server/api/team/team.controller.js
server/api/team/team.socket.js
server/api/team/team.spec.js
server/api/telephone/index.js
server/api/telephone/telephone.controller.js
server/api/telephone/telephone.socket.js
server/api/trigger/index.js
server/api/trigger/trigger.controller.js
server/api/trigger/trigger.socket.js
server/api/trigger/trigger.spec.js
server/api/trunk/index.js
server/api/trunk/trunk.controller.js
server/api/trunk/trunk.socket.js
server/api/update/index.js
server/api/update/update.controller.js
server/api/user/index.js
server/api/user/user.controller.js
server/api/user/user.socket.js
server/api/user_has_chat_queue/index.js
server/api/user_has_chat_queue/user_has_chat_queue.controller.js
server/api/user_has_chat_queue/user_has_chat_queue.socket.js
server/api/user_has_chat_queue/user_has_chat_queue.spec.js
server/api/user_has_chat_room/index.js
server/api/user_has_chat_room/user_has_chat_room.controller.js
server/api/user_has_chat_room/user_has_chat_room.socket.js
server/api/user_has_chat_room/user_has_chat_room.spec.js
server/api/user_has_fax_queue/index.js
server/api/user_has_fax_queue/user_has_fax_queue.controller.js
server/api/user_has_fax_queue/user_has_fax_queue.socket.js
server/api/user_has_fax_queue/user_has_fax_queue.spec.js
server/api/user_has_mail_queue/index.js
server/api/user_has_mail_queue/user_has_mail_queue.controller.js
server/api/user_has_mail_queue/user_has_mail_queue.socket.js
server/api/user_has_service/index.js
server/api/user_has_service/user_has_service.controller.js
server/api/user_has_service/user_has_service.socket.js
server/api/user_has_service/user_has_service.spec.js
server/api/user_has_team/index.js
server/api/user_has_team/user_has_team.controller.js
server/api/user_has_team/user_has_team.model.js
server/api/user_has_team/user_has_team.socket.js
server/api/user_has_team/user_has_team.spec.js
server/api/user_has_voice_queue/index.js
server/api/user_has_voice_queue/user_has_voice_queue.controller.js
server/api/user_has_voice_queue/user_has_voice_queue.socket.js
server/api/user_has_voice_queue/user_has_voice_queue.spec.js
server/api/variable/index.js
server/api/variable/variable.controller.js
server/api/variable/variable.socket.js
server/api/voice_context/index.js
server/api/voice_context/voice_context.controller.js
server/api/voice_context/voice_context.socket.js
server/api/voice_context/voice_context.spec.js
server/api/voice_extension/index.js
server/api/voice_extension/voice_extension.controller.js
server/api/voice_extension/voice_extension.socket.js
server/api/voice_extension/voice_extension.spec.js
server/api/voice_musiconhold/index.js
server/api/voice_musiconhold/voice_musiconhold.controller.js
server/api/voice_musiconhold/voice_musiconhold.socket.js
server/api/voice_musiconhold/voice_musiconhold.spec.js
server/api/voice_queue/index.js
server/api/voice_queue/voice_queue.controller.js
server/api/voice_queue/voice_queue.socket.js
server/api/voice_recording/index.js
server/api/voice_recording/voice_recording.controller.js
server/api/voice_recording/voice_recording.socket.js
server/api/voice_voicemail/index.js
server/api/voice_voicemail/voice_voicemail.controller.js
server/api/voice_voicemail/voice_voicemail.socket.js
server/api/voice_voicemail/voice_voicemail.spec.js
server/api/voice_voicemail_messages/index.js
server/api/voice_voicemail_messages/voice_voicemail_messages.controller.js
server/api/voice_voicemail_messages/voice_voicemail_messages.socket.js
server/api/widget/index.js
server/api/widget/widget.controller.js
server/api/widget/widget.spec.js
server/api/xchatty/index.js
server/api/xchatty/xchatty.controller.js
server/api/xchatty/xchatty.socket.js
server/api/zendesk_account/index.js
server/api/zendesk_account/zendesk_account.controller.js
server/api/zendesk_account/zendesk_account.socket.js
server/api/zendesk_account/zendesk_account.spec.js
server/api/zendesk_configuration/index.js
server/api/zendesk_configuration/zendesk_configuration.controller.js
server/api/zendesk_configuration/zendesk_configuration.socket.js
server/api/zendesk_configuration/zendesk_configuration.spec.js
server/api/zendesk_field/index.js
server/api/zendesk_field/zendesk_field.controller.js
server/api/zendesk_field/zendesk_field.socket.js
server/api/zendesk_field/zendesk_field.spec.js
server/app.js
server/app.json
server/auth/auth.service.js
server/auth/facebook/index.js
server/auth/facebook/passport.js
server/auth/google/index.js
server/auth/google/passport.js
server/auth/index.js
server/auth/local/index.js
server/auth/local/local.ami.js
server/auth/local/passport.js
server/auth/twitter/index.js
server/auth/twitter/passport.js
server/config/agi.js
server/config/ami/action.js
server/config/ami/acw.js
server/config/ami/agent.js
server/config/ami/call.js
server/config/ami/index.js
server/config/ami/member.js
server/config/ami/queue_caller.js
server/config/ami/queue_member.js
server/config/ami/recording.js
server/config/ami/socket.js
server/config/ami/transfer.js
server/config/ami/trunk.js
server/config/ami/user.js
server/config/ami/voice_context.js
server/config/analytics.js
server/config/autodialer/index.js
server/config/autodialer/process.js
server/config/automations/fax.js
server/config/automations/mail.js
server/config/express.js
server/config/fax.js
server/config/history.js
server/config/imap/imap.js
server/config/imap/index.js
server/config/integration.js
server/config/integrations/index.js
server/config/integrations/zendesk.js
server/config/license/index.js
server/config/license/license.service.js
server/config/local.env.sample.js
server/config/logger.js
server/config/routing/chat/index.js
server/config/routing/chat/session.js
server/config/routing/mail/index.js
server/config/routing/mail/session.js
server/config/seed.js
server/config/seedp.js
server/config/smtp/index.js
server/config/smtp/smtp.js
server/config/socketio.js
server/config/tools/chanspy.js
server/config/tools/chatRoom.js
server/config/tools/index.js
server/config/tools/interval.js
server/config/tools/user.js
server/config/triggers/chat.js
server/config/triggers/cm.js
server/config/triggers/index.js
server/config/triggers/mail.js
server/config/triggers/util.js
server/config/triggers/voice.js
server/config/util/error.js
server/config/util/index.js
server/migrations/20160315183016-motion.js
server/models/action.js
server/models/asterisk_manager.js
server/models/asterisk_manager_interface.js
server/models/autodialer_contact.js
server/models/autodialer_process.js
server/models/automation.js
server/models/canned_answer.js
server/models/channel.js
server/models/chanspy.js
server/models/chat_application.js
server/models/chat_enquiry.js
server/models/chat_message.js
server/models/chat_proactive_action.js
server/models/chat_queue.js
server/models/chat_room.js
server/models/chat_visitor.js
server/models/chat_website.js
server/models/chat_websites_field.js
server/models/company.js
server/models/contact.js
server/models/contact_email.js
server/models/contact_has_custom_field.js
server/models/contact_phone.js
server/models/custom_field.js
server/models/custom_report.js
server/models/dashboard.js
server/models/default_report.js
server/models/desk_account.js
server/models/desk_configuration.js
server/models/desk_field.js
server/models/event.js
server/models/extracted_report.js
server/models/fax_account.js
server/models/fax_application.js
server/models/fax_message.js
server/models/fax_queue.js
server/models/fax_room.js
server/models/freshdesk_account.js
server/models/freshdesk_configuration.js
server/models/freshdesk_field.js
server/models/history/report_agent_history.js
server/models/history/report_call_history.js
server/models/history/report_integration_history.js
server/models/history/report_mail_session_history.js
server/models/history/report_member_history.js
server/models/history/report_queue_history.js
server/models/index.js
server/models/integration.js
server/models/interval.js
server/models/jscripty_project.js
server/models/mail_account.js
server/models/mail_application.js
server/models/mail_attachment.js
server/models/mail_automation.js
server/models/mail_message.js
server/models/mail_queue.js
server/models/mail_room.js
server/models/mail_room_status.js
server/models/mail_server_in.js
server/models/mail_server_out.js
server/models/mail_template.js
server/models/mail_trigger.js
server/models/metric.js
server/models/module.js
server/models/motionbar.js
server/models/pause.js
server/models/report_agent.js
server/models/report_call.js
server/models/report_chat.js
server/models/report_chat_session.js
server/models/report_field.js
server/models/report_integration.js
server/models/report_jscripty_input.js
server/models/report_jscripty_question.js
server/models/report_jscripty_session.js
server/models/report_mail.js
server/models/report_mail_session.js
server/models/report_member.js
server/models/report_queue.js
server/models/report_square.js
server/models/report_square_detail.js
server/models/report_tranfer.js
server/models/report_tree.js
server/models/salesforce_account.js
server/models/salesforce_configuration.js
server/models/salesforce_field.js
server/models/service.js
server/models/settings.js
server/models/sound.js
server/models/square_odbc.js
server/models/square_project.js
server/models/sugarcrm_account.js
server/models/sugarcrm_configuration.js
server/models/sugarcrm_field.js
server/models/tag.js
server/models/team.js
server/models/telephone.js
server/models/tools_action.js
server/models/tools_condition.js
server/models/trigger.js
server/models/trunk.js
server/models/user.js
server/models/user_has_chat_queue.js
server/models/user_has_chat_room.js
server/models/user_has_fax_queue.js
server/models/user_has_mail_queue.js
server/models/user_has_service.js
server/models/user_has_team.js
server/models/user_has_voice_queue.js
server/models/variable.js
server/models/voice_context.js
server/models/voice_extension.js
server/models/voice_musiconhold.js
server/models/voice_queue.js
server/models/voice_recording.js
server/models/voice_voicemail.js
server/models/voice_voicemail_messages.js
server/models/zendesk_account.js
server/models/zendesk_configuration.js
server/models/zendesk_field.js
server/routes.js
server/utils/report_build.js
server/utils/report_extraction.js
server/utils/voice_extension.js

index dbf8254..aeaa420 100644 (file)
@@ -1 +1,634 @@
-var _0x48db=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x64\x69\x74\x6F\x72\x55\x69","\x61\x63\x74\x69\x6F\x6E\x73","\x69\x6E\x69\x74","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x65\x64\x69\x74\x6F\x72","\x67\x72\x61\x70\x68","\x6E\x65\x77","\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x73\x68\x6F\x77\x44\x69\x61\x6C\x6F\x67","\x61\x64\x64\x41\x63\x74\x69\x6F\x6E","\x6F\x70\x65\x6E","\x73\x61\x76\x65","\x73\x61\x76\x65\x46\x69\x6C\x65","\x43\x74\x72\x6C\x2B\x53","\x73\x61\x76\x65\x41\x73","\x43\x74\x72\x6C\x2B\x53\x68\x69\x66\x74\x2D\x53","\x70\x75\x62\x6C\x69\x73\x68","\x70\x75\x62\x6C\x69\x73\x68\x46\x69\x6C\x65","\x43\x74\x72\x6C\x2B\x53\x68\x69\x66\x74\x2B\x50","\x76\x61\x72\x69\x61\x62\x6C\x65","\x69\x6D\x70\x6F\x72\x74","\x65\x78\x70\x6F\x72\x74","\x43\x74\x72\x6C\x2B\x45","\x65\x64\x69\x74\x46\x69\x6C\x65","\x65\x64\x69\x74","\x67\x65\x74","\x62\x69\x6E\x64","\x70\x75\x74","\x72\x65\x6E\x61\x6D\x65","\x70\x72\x69\x6E\x74","\x70\x72\x69\x6E\x74\x53\x63\x72\x65\x65\x6E","\x73\x70\x72\x69\x74\x65\x2D\x70\x72\x69\x6E\x74","\x43\x74\x72\x6C\x2B\x50","\x70\x72\x65\x76\x69\x65\x77","\x73\x68\x6F\x77","\x75\x6E\x64\x6F","\x75\x6E\x64\x6F\x4D\x61\x6E\x61\x67\x65\x72","\x73\x70\x72\x69\x74\x65\x2D\x75\x6E\x64\x6F","\x43\x74\x72\x6C\x2B\x5A","\x72\x65\x64\x6F","\x73\x70\x72\x69\x74\x65\x2D\x72\x65\x64\x6F","\x43\x74\x72\x6C\x2B\x59","\x63\x75\x74","\x73\x70\x72\x69\x74\x65\x2D\x63\x75\x74","\x43\x74\x72\x6C\x2B\x58","\x63\x6F\x70\x79","\x73\x70\x72\x69\x74\x65\x2D\x63\x6F\x70\x79","\x43\x74\x72\x6C\x2B\x43","\x70\x61\x73\x74\x65","\x73\x70\x72\x69\x74\x65\x2D\x70\x61\x73\x74\x65","\x43\x74\x72\x6C\x2B\x56","\x64\x65\x6C\x65\x74\x65","\x72\x65\x6D\x6F\x76\x65\x43\x65\x6C\x6C\x73","\x44\x65\x6C\x65\x74\x65","\x64\x75\x70\x6C\x69\x63\x61\x74\x65","\x67\x72\x69\x64\x53\x69\x7A\x65","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73","\x6D\x6F\x76\x65\x43\x65\x6C\x6C\x73","\x73\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73","\x43\x74\x72\x6C\x2B\x44","\x73\x65\x6C\x65\x63\x74\x56\x65\x72\x74\x69\x63\x65\x73","\x43\x74\x72\x6C\x2B\x53\x68\x69\x66\x74\x2B\x56","\x73\x65\x6C\x65\x63\x74\x45\x64\x67\x65\x73","\x43\x74\x72\x6C\x2B\x53\x68\x69\x66\x74\x2B\x45","\x73\x65\x6C\x65\x63\x74\x41\x6C\x6C","\x43\x74\x72\x6C\x2B\x41","\x68\x6F\x6D\x65","\x48\x6F\x6D\x65","\x65\x78\x69\x74\x47\x72\x6F\x75\x70","\x50\x61\x67\x65\x20\x55\x70","\x65\x6E\x74\x65\x72\x47\x72\x6F\x75\x70","\x50\x61\x67\x65\x20\x44\x6F\x77\x6E","\x65\x78\x70\x61\x6E\x64","\x66\x6F\x6C\x64\x43\x65\x6C\x6C\x73","\x45\x6E\x74\x65\x72","\x63\x6F\x6C\x6C\x61\x70\x73\x65","\x42\x61\x63\x6B\x73\x70\x61\x63\x65","\x74\x6F\x46\x72\x6F\x6E\x74","\x6F\x72\x64\x65\x72\x43\x65\x6C\x6C\x73","\x43\x74\x72\x6C\x2B\x46","\x74\x6F\x42\x61\x63\x6B","\x43\x74\x72\x6C\x2B\x42","\x67\x72\x6F\x75\x70","\x67\x72\x6F\x75\x70\x43\x65\x6C\x6C\x73","\x73\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x43\x74\x72\x6C\x2B\x47","\x75\x6E\x67\x72\x6F\x75\x70","\x75\x6E\x67\x72\x6F\x75\x70\x43\x65\x6C\x6C\x73","\x43\x74\x72\x6C\x2B\x55","\x72\x65\x6D\x6F\x76\x65\x46\x72\x6F\x6D\x47\x72\x6F\x75\x70","\x72\x65\x6D\x6F\x76\x65\x43\x65\x6C\x6C\x73\x46\x72\x6F\x6D\x50\x61\x72\x65\x6E\x74","\x65\x64\x69\x74\x4C\x69\x6E\x6B","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x67\x65\x74\x4C\x69\x6E\x6B\x46\x6F\x72\x43\x65\x6C\x6C","","\x65\x6E\x74\x65\x72\x56\x61\x6C\x75\x65","\x70\x72\x6F\x6D\x70\x74","\x73\x65\x74\x4C\x69\x6E\x6B\x46\x6F\x72\x43\x65\x6C\x6C","\x6F\x70\x65\x6E\x4C\x69\x6E\x6B","\x61\x75\x74\x6F\x73\x69\x7A\x65","\x62\x65\x67\x69\x6E\x55\x70\x64\x61\x74\x65","\x67\x65\x74\x4D\x6F\x64\x65\x6C","\x6C\x65\x6E\x67\x74\x68","\x67\x65\x74\x43\x68\x69\x6C\x64\x43\x6F\x75\x6E\x74","\x75\x70\x64\x61\x74\x65\x47\x72\x6F\x75\x70\x42\x6F\x75\x6E\x64\x73","\x75\x70\x64\x61\x74\x65\x43\x65\x6C\x6C\x53\x69\x7A\x65","\x65\x6E\x64\x55\x70\x64\x61\x74\x65","\x77\x6F\x72\x64\x57\x72\x61\x70","\x67\x65\x74\x53\x74\x61\x74\x65","\x67\x65\x74\x56\x69\x65\x77","\x77\x72\x61\x70","\x53\x54\x59\x4C\x45\x5F\x57\x48\x49\x54\x45\x5F\x53\x50\x41\x43\x45","\x73\x74\x79\x6C\x65","\x73\x65\x74\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65\x73","\x72\x6F\x74\x61\x74\x69\x6F\x6E","\x30","\x53\x54\x59\x4C\x45\x5F\x52\x4F\x54\x41\x54\x49\x4F\x4E","\x20\x28","\x20\x30\x2D\x33\x36\x30\x29","\x74\x69\x6C\x74","\x69\x73\x56\x65\x72\x74\x65\x78","\x67\x65\x74\x43\x65\x6C\x6C\x47\x65\x6F\x6D\x65\x74\x72\x79","\x63\x6C\x6F\x6E\x65","\x78","\x77\x69\x64\x74\x68","\x68\x65\x69\x67\x68\x74","\x79","\x73\x65\x74\x47\x65\x6F\x6D\x65\x74\x72\x79","\x76\x69\x65\x77","\x53\x54\x59\x4C\x45\x5F\x44\x49\x52\x45\x43\x54\x49\x4F\x4E","\x65\x61\x73\x74","\x73\x6F\x75\x74\x68","\x77\x65\x73\x74","\x6E\x6F\x72\x74\x68","\x43\x74\x72\x6C\x2B\x52","\x61\x63\x74\x75\x61\x6C\x53\x69\x7A\x65","\x7A\x6F\x6F\x6D\x54\x6F","\x7A\x6F\x6F\x6D\x49\x6E","\x41\x64\x64","\x7A\x6F\x6F\x6D\x4F\x75\x74","\x53\x75\x62\x74\x72\x61\x63\x74","\x66\x69\x74\x57\x69\x6E\x64\x6F\x77","\x66\x69\x74","\x66\x69\x74\x50\x61\x67\x65","\x70\x61\x67\x65\x56\x69\x73\x69\x62\x6C\x65","\x66\x75\x6E\x63\x74","\x70\x61\x67\x65\x56\x69\x65\x77","\x70\x61\x67\x65\x46\x6F\x72\x6D\x61\x74","\x70\x61\x67\x65\x53\x63\x61\x6C\x65","\x63\x6C\x69\x65\x6E\x74\x57\x69\x64\x74\x68","\x63\x6C\x69\x65\x6E\x74\x48\x65\x69\x67\x68\x74","\x6D\x69\x6E","\x66\x6C\x6F\x6F\x72","\x73\x63\x72\x6F\x6C\x6C\x4C\x65\x66\x74","\x74\x72\x61\x6E\x73\x6C\x61\x74\x65","\x6D\x61\x78","\x72\x6F\x75\x6E\x64","\x73\x63\x72\x6F\x6C\x6C\x54\x6F\x70","\x66\x69\x74\x50\x61\x67\x65\x57\x69\x64\x74\x68","\x63\x75\x73\x74\x6F\x6D\x5A\x6F\x6F\x6D","\x63\x75\x73\x74\x6F\x6D","\x20\x28\x25\x29","\x67\x65\x74\x53\x63\x61\x6C\x65","\x67\x72\x69\x64","\x69\x73\x47\x72\x69\x64\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x47\x72\x69\x64\x45\x6E\x61\x62\x6C\x65\x64","\x75\x70\x64\x61\x74\x65\x47\x72\x61\x70\x68\x43\x6F\x6D\x70\x6F\x6E\x65\x6E\x74\x73","\x43\x74\x72\x6C\x2B\x53\x68\x69\x66\x74\x2B\x47","\x73\x65\x74\x54\x6F\x67\x67\x6C\x65\x41\x63\x74\x69\x6F\x6E","\x73\x65\x74\x53\x65\x6C\x65\x63\x74\x65\x64\x43\x61\x6C\x6C\x62\x61\x63\x6B","\x67\x75\x69\x64\x65\x73","\x67\x75\x69\x64\x65\x73\x45\x6E\x61\x62\x6C\x65\x64","\x67\x72\x61\x70\x68\x48\x61\x6E\x64\x6C\x65\x72","\x74\x6F\x6F\x6C\x74\x69\x70\x73","\x69\x73\x45\x6E\x61\x62\x6C\x65\x64","\x74\x6F\x6F\x6C\x74\x69\x70\x48\x61\x6E\x64\x6C\x65\x72","\x73\x65\x74\x45\x6E\x61\x62\x6C\x65\x64","\x6E\x61\x76\x69\x67\x61\x74\x69\x6F\x6E","\x66\x6F\x6C\x64\x69\x6E\x67\x45\x6E\x61\x62\x6C\x65\x64","\x72\x65\x76\x61\x6C\x69\x64\x61\x74\x65","\x73\x63\x72\x6F\x6C\x6C\x62\x61\x72\x73","\x73\x63\x61\x6C\x65","\x73\x65\x74\x54\x72\x61\x6E\x73\x6C\x61\x74\x65","\x73\x69\x7A\x65\x44\x69\x64\x43\x68\x61\x6E\x67\x65","\x6F\x76\x65\x72\x66\x6C\x6F\x77","\x61\x75\x74\x6F","\x70\x61\x67\x65\x42\x72\x65\x61\x6B\x73\x56\x69\x73\x69\x62\x6C\x65","\x70\x72\x65\x66\x65\x72\x50\x61\x67\x65\x53\x69\x7A\x65","\x76\x61\x6C\x69\x64\x61\x74\x65","\x75\x70\x64\x61\x74\x65","\x6F\x75\x74\x6C\x69\x6E\x65","\x68\x61\x73\x53\x63\x72\x6F\x6C\x6C\x62\x61\x72\x73","\x63\x6F\x6E\x6E\x65\x63\x74","\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x48\x61\x6E\x64\x6C\x65\x72","\x73\x65\x74\x43\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65","\x43\x74\x72\x6C\x2B\x51","\x63\x6F\x70\x79\x43\x6F\x6E\x6E\x65\x63\x74","\x69\x73\x43\x72\x65\x61\x74\x65\x54\x61\x72\x67\x65\x74","\x73\x65\x74\x43\x72\x65\x61\x74\x65\x54\x61\x72\x67\x65\x74","\x68\x65\x6C\x70","\x6C\x61\x6E\x67\x75\x61\x67\x65","\x69\x73\x4C\x61\x6E\x67\x75\x61\x67\x65\x53\x75\x70\x70\x6F\x72\x74\x65\x64","\x5F","\x2F\x68\x65\x6C\x70","\x2E\x68\x74\x6D\x6C","\x61\x62\x6F\x75\x74","\x20\x43\x61\x6C\x6C\x79\x20\x53\x71\x75\x61\x72\x65","\x46\x31","\x74\x6F\x67\x67\x6C\x65\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65\x46\x6C\x61\x67\x73","\x62\x6F\x6C\x64","\x69\x74\x61\x6C\x69\x63","\x75\x6E\x64\x65\x72\x6C\x69\x6E\x65","\x73\x68\x61\x64\x6F\x77","\x74\x6F\x67\x67\x6C\x65\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65\x73","\x64\x61\x73\x68\x65\x64","\x72\x6F\x75\x6E\x64\x65\x64","\x63\x75\x72\x76\x65\x64","\x29","\x67\x65\x74\x53\x74\x79\x6C\x65","\x73\x65\x74\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65","\x73\x65\x74\x41\x73\x44\x65\x66\x61\x75\x6C\x74\x45\x64\x67\x65","\x73\x65\x74\x44\x65\x66\x61\x75\x6C\x74\x45\x64\x67\x65","\x61\x64\x64\x57\x61\x79\x70\x6F\x69\x6E\x74","\x69\x73\x45\x64\x67\x65","\x67\x65\x74\x48\x61\x6E\x64\x6C\x65\x72","\x73\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73\x48\x61\x6E\x64\x6C\x65\x72","\x67\x65\x74\x50\x61\x72\x65\x6E\x74","\x73\x74\x61\x74\x65","\x74\x72\x69\x67\x67\x65\x72\x58","\x70\x61\x6E\x6E\x69\x6E\x67\x48\x61\x6E\x64\x6C\x65\x72","\x74\x72\x69\x67\x67\x65\x72\x59","\x61\x64\x64\x50\x6F\x69\x6E\x74\x41\x74","\x72\x65\x6D\x6F\x76\x65\x57\x61\x79\x70\x6F\x69\x6E\x74","\x68\x61\x6E\x64\x6C\x65\x72","\x69\x6E\x64\x65\x78","\x72\x65\x6D\x6F\x76\x65\x50\x6F\x69\x6E\x74","\x69\x6D\x61\x67\x65","\x67\x65\x74\x47\x72\x69\x64\x53\x69\x7A\x65","\x67\x65\x74\x44\x65\x66\x61\x75\x6C\x74\x50\x61\x72\x65\x6E\x74","\x69\x6E\x73\x65\x72\x74\x56\x65\x72\x74\x65\x78","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x6F\x75\x6E\x74","\x67\x65\x74\x47\x65\x6F\x6D\x65\x74\x72\x79","\x73\x63\x72\x6F\x6C\x6C\x43\x65\x6C\x6C\x54\x6F\x56\x69\x73\x69\x62\x6C\x65","\x53\x54\x59\x4C\x45\x5F\x49\x4D\x41\x47\x45","\x75\x72\x6C","\x6F\x6E\x6C\x6F\x61\x64","\x6F\x6E\x65\x72\x72\x6F\x72","\x66\x69\x6C\x65\x4E\x6F\x74\x46\x6F\x75\x6E\x64","\x61\x6C\x65\x72\x74","\x73\x72\x63","\x63\x61\x6C\x6C","\x6C\x61\x62\x65\x6C","\x65\x6E\x61\x62\x6C\x65\x64","\x69\x63\x6F\x6E\x43\x6C\x73","\x73\x68\x6F\x72\x74\x63\x75\x74","\x65\x78\x74\x65\x6E\x64","\x73\x74\x61\x74\x65\x43\x68\x61\x6E\x67\x65\x64","\x66\x69\x72\x65\x45\x76\x65\x6E\x74","\x74\x6F\x67\x67\x6C\x65\x41\x63\x74\x69\x6F\x6E","\x73\x65\x6C\x65\x63\x74\x65\x64\x43\x61\x6C\x6C\x62\x61\x63\x6B","\x69\x73\x53\x65\x6C\x65\x63\x74\x65\x64"];_0x48db[0];function Actions(_0x8e79x2){this[_0x48db[1]]=_0x8e79x2;this[_0x48db[2]]= new Object();this[_0x48db[3]]()}Actions[_0x48db[4]][_0x48db[3]]=function(){var _0x8e79x3=this[_0x48db[1]];var _0x8e79x4=_0x8e79x3[_0x48db[5]];var _0x8e79x5=_0x8e79x4[_0x48db[6]];this[_0x48db[10]](_0x48db[7],function(){_0x8e79x3[_0x48db[9]]( new NewDialog(_0x8e79x3)[_0x48db[8]],300,180,true,true)});this[_0x48db[10]](_0x48db[11],function(){_0x8e79x3[_0x48db[9]]( new OpenDialog(_0x8e79x3)[_0x48db[8]],300,180,true,true)});this[_0x48db[10]](_0x48db[12],function(){_0x8e79x3[_0x48db[13]](false)},null,null,_0x48db[14]);this[_0x48db[10]](_0x48db[15],function(){_0x8e79x3[_0x48db[13]](true)},null,null,_0x48db[16]);this[_0x48db[10]](_0x48db[17],function(){_0x8e79x3[_0x48db[18]](false)},null,null,_0x48db[19]);this[_0x48db[10]](_0x48db[20],function(){_0x8e79x3[_0x48db[9]]( new VariableDialog(_0x8e79x3)[_0x48db[8]],300,180,true,true)});this[_0x48db[10]](_0x48db[21],function(){_0x8e79x3[_0x48db[9]]( new ImportDialog(_0x8e79x3)[_0x48db[8]],300,200,true,true)});this[_0x48db[10]](_0x48db[22],function(){_0x8e79x3[_0x48db[9]]( new ExportDialog(_0x8e79x3)[_0x48db[8]],300,200,true,true)},null,null,_0x48db[23]);this[_0x48db[28]](_0x48db[24], new Action(mxResources[_0x48db[26]](_0x48db[25]),mxUtils[_0x48db[27]](this,function(){this[_0x48db[1]][_0x48db[9]]( new EditFileDialog(_0x8e79x3)[_0x48db[8]],620,420,true,true)})));this[_0x48db[10]](_0x48db[29],function(){_0x8e79x3[_0x48db[9]]( new RenameDialog(_0x8e79x3)[_0x48db[8]],300,180,true,true)});this[_0x48db[10]](_0x48db[30],function(){mxUtils[_0x48db[31]](_0x8e79x5)},null,_0x48db[32],_0x48db[33]);this[_0x48db[10]](_0x48db[34],function(){mxUtils[_0x48db[35]](_0x8e79x5,null,10,10)});this[_0x48db[10]](_0x48db[36],function(){_0x8e79x4[_0x48db[37]][_0x48db[36]]()},null,_0x48db[38],_0x48db[39]);this[_0x48db[10]](_0x48db[40],function(){_0x8e79x4[_0x48db[37]][_0x48db[40]]()},null,_0x48db[41],_0x48db[42]);this[_0x48db[10]](_0x48db[43],function(){mxClipboard[_0x48db[43]](_0x8e79x5)},null,_0x48db[44],_0x48db[45]);this[_0x48db[10]](_0x48db[46],function(){mxClipboard[_0x48db[46]](_0x8e79x5)},null,_0x48db[47],_0x48db[48]);this[_0x48db[10]](_0x48db[49],function(){mxClipboard[_0x48db[49]](_0x8e79x5)},false,_0x48db[50],_0x48db[51]);this[_0x48db[10]](_0x48db[52],function(){_0x8e79x5[_0x48db[53]]()},null,null,_0x48db[54]);this[_0x48db[10]](_0x48db[55],function(){var _0x8e79x6=_0x8e79x5[_0x48db[56]];_0x8e79x5[_0x48db[59]](_0x8e79x5[_0x48db[58]](_0x8e79x5[_0x48db[57]](),_0x8e79x6,_0x8e79x6,true))},null,null,_0x48db[60]);this[_0x48db[10]](_0x48db[61],function(){_0x8e79x5[_0x48db[61]]()},null,null,_0x48db[62]);this[_0x48db[10]](_0x48db[63],function(){_0x8e79x5[_0x48db[63]]()},null,null,_0x48db[64]);this[_0x48db[10]](_0x48db[65],function(){_0x8e79x5[_0x48db[65]]()},null,null,_0x48db[66]);this[_0x48db[10]](_0x48db[67],function(){_0x8e79x5[_0x48db[67]]()},null,null,_0x48db[68]);this[_0x48db[10]](_0x48db[69],function(){_0x8e79x5[_0x48db[69]]()},null,null,_0x48db[70]);this[_0x48db[10]](_0x48db[71],function(){_0x8e79x5[_0x48db[71]]()},null,null,_0x48db[72]);this[_0x48db[10]](_0x48db[73],function(){_0x8e79x5[_0x48db[74]](false)},null,null,_0x48db[75]);this[_0x48db[10]](_0x48db[76],function(){_0x8e79x5[_0x48db[74]](true)},null,null,_0x48db[77]);this[_0x48db[10]](_0x48db[78],function(){_0x8e79x5[_0x48db[79]](false)},null,null,_0x48db[80]);this[_0x48db[10]](_0x48db[81],function(){_0x8e79x5[_0x48db[79]](true)},null,null,_0x48db[82]);this[_0x48db[10]](_0x48db[83],function(){_0x8e79x5[_0x48db[85]](_0x8e79x5[_0x48db[84]](null,0))},null,null,_0x48db[86]);this[_0x48db[10]](_0x48db[87],function(){_0x8e79x5[_0x48db[59]](_0x8e79x5[_0x48db[88]]())},null,null,_0x48db[89]);this[_0x48db[10]](_0x48db[90],function(){_0x8e79x5[_0x48db[91]]()});this[_0x48db[10]](_0x48db[92],function(){var _0x8e79x7=_0x8e79x5[_0x48db[93]]();var _0x8e79x8=_0x8e79x5[_0x48db[94]](_0x8e79x7);if(_0x8e79x8==null){_0x8e79x8=_0x48db[95]};_0x8e79x8=mxUtils[_0x48db[97]](mxResources[_0x48db[26]](_0x48db[96]),_0x8e79x8);if(_0x8e79x8!=null){_0x8e79x5[_0x48db[98]](_0x8e79x7,_0x8e79x8)}});this[_0x48db[10]](_0x48db[99],function(){var _0x8e79x7=_0x8e79x5[_0x48db[93]]();var _0x8e79x8=_0x8e79x5[_0x48db[94]](_0x8e79x7);if(_0x8e79x8!=null){window[_0x48db[11]](_0x8e79x8)}});this[_0x48db[10]](_0x48db[100],function(){var _0x8e79x9=_0x8e79x5[_0x48db[57]]();if(_0x8e79x9!=null){_0x8e79x5[_0x48db[102]]()[_0x48db[101]]();try{for(var _0x8e79xa=0;_0x8e79xa<_0x8e79x9[_0x48db[103]];_0x8e79xa++){var _0x8e79x7=_0x8e79x9[_0x8e79xa];if(_0x8e79x5[_0x48db[102]]()[_0x48db[104]](_0x8e79x7)){_0x8e79x5[_0x48db[105]]([_0x8e79x7],20)}else {_0x8e79x5[_0x48db[106]](_0x8e79x7)}}}finally{_0x8e79x5[_0x48db[102]]()[_0x48db[107]]()}}});this[_0x48db[10]](_0x48db[108],function(){var _0x8e79xb=_0x8e79x5[_0x48db[110]]()[_0x48db[109]](_0x8e79x5[_0x48db[93]]());var _0x8e79xc=_0x48db[111];if(_0x8e79xb!=null&&_0x8e79xb[_0x48db[113]][mxConstants[_0x48db[112]]]==_0x48db[111]){_0x8e79xc=null};_0x8e79x5[_0x48db[114]](mxConstants.STYLE_WHITE_SPACE,_0x8e79xc)});this[_0x48db[10]](_0x48db[115],function(){var _0x8e79xc=_0x48db[116];var _0x8e79xb=_0x8e79x5[_0x48db[110]]()[_0x48db[109]](_0x8e79x5[_0x48db[93]]());if(_0x8e79xb!=null){_0x8e79xc=_0x8e79xb[_0x48db[113]][mxConstants[_0x48db[117]]]||_0x8e79xc};_0x8e79xc=mxUtils[_0x48db[97]](mxResources[_0x48db[26]](_0x48db[96])+_0x48db[118]+mxResources[_0x48db[26]](_0x48db[115])+_0x48db[119],_0x8e79xc);if(_0x8e79xc!=null){_0x8e79x5[_0x48db[114]](mxConstants.STYLE_ROTATION,_0x8e79xc)}});this[_0x48db[10]](_0x48db[120],function(){var _0x8e79x9=_0x8e79x5[_0x48db[57]]();if(_0x8e79x9!=null){_0x8e79x5[_0x48db[102]]()[_0x48db[101]]();try{for(var _0x8e79xa=0;_0x8e79xa<_0x8e79x9[_0x48db[103]];_0x8e79xa++){var _0x8e79x7=_0x8e79x9[_0x8e79xa];if(_0x8e79x5[_0x48db[102]]()[_0x48db[121]](_0x8e79x7)&&_0x8e79x5[_0x48db[102]]()[_0x48db[104]](_0x8e79x7)==0){var _0x8e79xd=_0x8e79x5[_0x48db[122]](_0x8e79x7);if(_0x8e79xd!=null){_0x8e79xd=_0x8e79xd[_0x48db[123]]();_0x8e79xd[_0x48db[124]]+=_0x8e79xd[_0x48db[125]]/2-_0x8e79xd[_0x48db[126]]/2;_0x8e79xd[_0x48db[127]]+=_0x8e79xd[_0x48db[126]]/2-_0x8e79xd[_0x48db[125]]/2;var _0x8e79xe=_0x8e79xd[_0x48db[125]];_0x8e79xd[_0x48db[125]]=_0x8e79xd[_0x48db[126]];_0x8e79xd[_0x48db[126]]=_0x8e79xe;_0x8e79x5[_0x48db[102]]()[_0x48db[128]](_0x8e79x7,_0x8e79xd);var _0x8e79xb=_0x8e79x5[_0x48db[129]][_0x48db[109]](_0x8e79x7);if(_0x8e79xb!=null){var _0x8e79xf=_0x8e79xb[_0x48db[113]][mxConstants[_0x48db[130]]]||_0x48db[131];if(_0x8e79xf==_0x48db[131]){_0x8e79xf=_0x48db[132]}else {if(_0x8e79xf==_0x48db[132]){_0x8e79xf=_0x48db[133]}else {if(_0x8e79xf==_0x48db[133]){_0x8e79xf=_0x48db[134]}else {if(_0x8e79xf==_0x48db[134]){_0x8e79xf=_0x48db[131]}}}};_0x8e79x5[_0x48db[114]](mxConstants.STYLE_DIRECTION,_0x8e79xf,[_0x8e79x7])}}}}}finally{_0x8e79x5[_0x48db[102]]()[_0x48db[107]]()}}},null,null,_0x48db[135]);this[_0x48db[10]](_0x48db[136],function(){_0x8e79x5[_0x48db[137]](1)});this[_0x48db[10]](_0x48db[138],function(){_0x8e79x5[_0x48db[138]]()},null,null,_0x48db[139]);this[_0x48db[10]](_0x48db[140],function(){_0x8e79x5[_0x48db[140]]()},null,null,_0x48db[141]);this[_0x48db[10]](_0x48db[142],function(){_0x8e79x5[_0x48db[143]]()});this[_0x48db[10]](_0x48db[144],mxUtils[_0x48db[27]](this,function(){if(!_0x8e79x5[_0x48db[145]]){this[_0x48db[26]](_0x48db[147])[_0x48db[146]]()};var _0x8e79x10=_0x8e79x5[_0x48db[148]];var _0x8e79x11=_0x8e79x5[_0x48db[149]];var _0x8e79x12=_0x8e79x5[_0x48db[8]][_0x48db[150]]-20;var _0x8e79x13=_0x8e79x5[_0x48db[8]][_0x48db[151]]-20;var _0x8e79x14=Math[_0x48db[153]](100*Math[_0x48db[152]](_0x8e79x12/_0x8e79x10[_0x48db[125]]/_0x8e79x11,_0x8e79x13/_0x8e79x10[_0x48db[126]]/_0x8e79x11))/100;_0x8e79x5[_0x48db[137]](_0x8e79x14);_0x8e79x5[_0x48db[8]][_0x48db[154]]=Math[_0x48db[157]](_0x8e79x5[_0x48db[129]][_0x48db[155]][_0x48db[124]]*_0x8e79x14-Math[_0x48db[156]](10,(_0x8e79x5[_0x48db[8]][_0x48db[150]]-_0x8e79x10[_0x48db[125]]*_0x8e79x11*_0x8e79x14)/2));_0x8e79x5[_0x48db[8]][_0x48db[158]]=Math[_0x48db[157]](_0x8e79x5[_0x48db[129]][_0x48db[155]][_0x48db[127]]*_0x8e79x14-Math[_0x48db[156]](10,(_0x8e79x5[_0x48db[8]][_0x48db[151]]-_0x8e79x10[_0x48db[126]]*_0x8e79x11*_0x8e79x14)/2))}));this[_0x48db[10]](_0x48db[159],mxUtils[_0x48db[27]](this,function(){if(!_0x8e79x5[_0x48db[145]]){this[_0x48db[26]](_0x48db[147])[_0x48db[146]]()};var _0x8e79x10=_0x8e79x5[_0x48db[148]];var _0x8e79x11=_0x8e79x5[_0x48db[149]];var _0x8e79x12=_0x8e79x5[_0x48db[8]][_0x48db[150]]-20;var _0x8e79x14=Math[_0x48db[153]](100*_0x8e79x12/_0x8e79x10[_0x48db[125]]/_0x8e79x11)/100;_0x8e79x5[_0x48db[137]](_0x8e79x14);_0x8e79x5[_0x48db[8]][_0x48db[154]]=Math[_0x48db[157]](_0x8e79x5[_0x48db[129]][_0x48db[155]][_0x48db[124]]*_0x8e79x14-Math[_0x48db[156]](10,(_0x8e79x5[_0x48db[8]][_0x48db[150]]-_0x8e79x10[_0x48db[125]]*_0x8e79x11*_0x8e79x14)/2));_0x8e79x5[_0x48db[8]][_0x48db[158]]=Math[_0x48db[157]](_0x8e79x5[_0x48db[129]][_0x48db[155]][_0x48db[127]]*_0x8e79x14-Math[_0x48db[156]](10,(_0x8e79x5[_0x48db[8]][_0x48db[151]]-_0x8e79x10[_0x48db[126]]*_0x8e79x11*_0x8e79x14)/2))}));this[_0x48db[28]](_0x48db[160], new Action(mxResources[_0x48db[26]](_0x48db[161]),function(){var _0x8e79xc=mxUtils[_0x48db[97]](mxResources[_0x48db[26]](_0x48db[96])+_0x48db[162],parseInt(_0x8e79x5[_0x48db[110]]()[_0x48db[163]]()*100));if(_0x8e79xc!=null&&_0x8e79xc[_0x48db[103]]>0&&!isNaN(parseInt(_0x8e79xc))){_0x8e79x5[_0x48db[137]](parseInt(_0x8e79xc)/100)}}));var _0x8e79x15=null;_0x8e79x15=this[_0x48db[10]](_0x48db[164],function(){_0x8e79x5[_0x48db[166]](!_0x8e79x5[_0x48db[165]]());_0x8e79x4[_0x48db[167]]()},null,null,_0x48db[168]);_0x8e79x15[_0x48db[169]](true);_0x8e79x15[_0x48db[170]](function(){return _0x8e79x5[_0x48db[165]]()});_0x8e79x15=this[_0x48db[10]](_0x48db[171],function(){_0x8e79x5[_0x48db[173]][_0x48db[172]]=!_0x8e79x5[_0x48db[173]][_0x48db[172]]});_0x8e79x15[_0x48db[169]](true);_0x8e79x15[_0x48db[170]](function(){return _0x8e79x5[_0x48db[173]][_0x48db[172]]});_0x8e79x15=this[_0x48db[10]](_0x48db[174],function(){_0x8e79x5[_0x48db[176]][_0x48db[177]](!_0x8e79x5[_0x48db[176]][_0x48db[175]]())});_0x8e79x15[_0x48db[169]](true);_0x8e79x15[_0x48db[170]](function(){return _0x8e79x5[_0x48db[176]][_0x48db[175]]()});_0x8e79x15=this[_0x48db[10]](_0x48db[178],function(){_0x8e79x5[_0x48db[179]]=!_0x8e79x5[_0x48db[179]];_0x8e79x5[_0x48db[129]][_0x48db[180]]()});_0x8e79x15[_0x48db[169]](true);_0x8e79x15[_0x48db[170]](function(){return _0x8e79x5[_0x48db[179]]});_0x8e79x15=this[_0x48db[10]](_0x48db[181],function(){_0x8e79x5[_0x48db[181]]=!_0x8e79x5[_0x48db[181]];_0x8e79x4[_0x48db[167]]();if(!_0x8e79x5[_0x48db[181]]){var _0x8e79x16=_0x8e79x5[_0x48db[129]][_0x48db[155]];_0x8e79x5[_0x48db[129]][_0x48db[183]](_0x8e79x16[_0x48db[124]]-_0x8e79x5[_0x48db[8]][_0x48db[154]]/_0x8e79x5[_0x48db[129]][_0x48db[182]],_0x8e79x16[_0x48db[127]]-_0x8e79x5[_0x48db[8]][_0x48db[158]]/_0x8e79x5[_0x48db[129]][_0x48db[182]]);_0x8e79x5[_0x48db[8]][_0x48db[154]]=0;_0x8e79x5[_0x48db[8]][_0x48db[158]]=0;_0x8e79x5[_0x48db[184]]()}else {var _0x8e79x17=_0x8e79x5[_0x48db[129]][_0x48db[155]][_0x48db[124]];var _0x8e79x18=_0x8e79x5[_0x48db[129]][_0x48db[155]][_0x48db[127]];_0x8e79x5[_0x48db[129]][_0x48db[155]][_0x48db[124]]=0;_0x8e79x5[_0x48db[129]][_0x48db[155]][_0x48db[127]]=0;_0x8e79x5[_0x48db[184]]();_0x8e79x5[_0x48db[8]][_0x48db[154]]-=Math[_0x48db[157]](_0x8e79x17*_0x8e79x5[_0x48db[129]][_0x48db[182]]);_0x8e79x5[_0x48db[8]][_0x48db[158]]-=Math[_0x48db[157]](_0x8e79x18*_0x8e79x5[_0x48db[129]][_0x48db[182]])}},!mxClient.IS_TOUCH);_0x8e79x15[_0x48db[169]](true);_0x8e79x15[_0x48db[170]](function(){return _0x8e79x5[_0x48db[8]][_0x48db[113]][_0x48db[185]]==_0x48db[186]});_0x8e79x15=this[_0x48db[10]](_0x48db[147],mxUtils[_0x48db[27]](this,function(){_0x8e79x5[_0x48db[145]]=!_0x8e79x5[_0x48db[145]];_0x8e79x5[_0x48db[187]]=_0x8e79x5[_0x48db[145]];_0x8e79x5[_0x48db[188]]=_0x8e79x5[_0x48db[187]];_0x8e79x5[_0x48db[129]][_0x48db[189]]();_0x8e79x5[_0x48db[184]]();_0x8e79x4[_0x48db[167]]();_0x8e79x4[_0x48db[191]][_0x48db[190]]();if(mxUtils[_0x48db[192]](_0x8e79x5[_0x48db[8]])){if(_0x8e79x5[_0x48db[145]]){_0x8e79x5[_0x48db[8]][_0x48db[154]]-=20;_0x8e79x5[_0x48db[8]][_0x48db[158]]-=20}else {_0x8e79x5[_0x48db[8]][_0x48db[154]]+=20;_0x8e79x5[_0x48db[8]][_0x48db[158]]+=20}}}));_0x8e79x15[_0x48db[169]](true);_0x8e79x15[_0x48db[170]](function(){return _0x8e79x5[_0x48db[145]]});_0x8e79x15=this[_0x48db[10]](_0x48db[193],function(){_0x8e79x5[_0x48db[195]](!_0x8e79x5[_0x48db[194]][_0x48db[175]]())},null,null,_0x48db[196]);_0x8e79x15[_0x48db[169]](true);_0x8e79x15[_0x48db[170]](function(){return _0x8e79x5[_0x48db[194]][_0x48db[175]]()});_0x8e79x15=this[_0x48db[10]](_0x48db[197],function(){_0x8e79x5[_0x48db[194]][_0x48db[199]](!_0x8e79x5[_0x48db[194]][_0x48db[198]]())});_0x8e79x15[_0x48db[169]](true);_0x8e79x15[_0x48db[170]](function(){return _0x8e79x5[_0x48db[194]][_0x48db[198]]()});this[_0x48db[10]](_0x48db[200],function(){var _0x8e79x19=_0x48db[95];if(mxResources[_0x48db[202]](mxClient[_0x48db[201]])){_0x8e79x19=_0x48db[203]+mxClient[_0x48db[201]]};window[_0x48db[11]](RESOURCES_PATH+_0x48db[204]+_0x8e79x19+_0x48db[205])});this[_0x48db[28]](_0x48db[206], new Action(mxResources[_0x48db[26]](_0x48db[206])+_0x48db[207],function(){_0x8e79x3[_0x48db[9]]( new AboutDialog(_0x8e79x3)[_0x48db[8]],320,280,true,true)},null,null,_0x48db[208]));var _0x8e79x1a=mxUtils[_0x48db[27]](this,function(_0x8e79x1b,_0x8e79x1c){this[_0x48db[10]](_0x8e79x1b,function(){_0x8e79x5[_0x48db[209]](mxConstants.STYLE_FONTSTYLE,_0x8e79x1c)})});_0x8e79x1a(_0x48db[210],mxConstants.FONT_BOLD);_0x8e79x1a(_0x48db[211],mxConstants.FONT_ITALIC);_0x8e79x1a(_0x48db[212],mxConstants.FONT_UNDERLINE);this[_0x48db[10]](_0x48db[213],function(){_0x8e79x5[_0x48db[214]](mxConstants.STYLE_SHADOW)});this[_0x48db[10]](_0x48db[215],function(){_0x8e79x5[_0x48db[214]](mxConstants.STYLE_DASHED)});this[_0x48db[10]](_0x48db[216],function(){_0x8e79x5[_0x48db[214]](mxConstants.STYLE_ROUNDED)});this[_0x48db[10]](_0x48db[217],function(){_0x8e79x5[_0x48db[214]](mxConstants.STYLE_CURVED)});this[_0x48db[10]](_0x48db[113],function(){var _0x8e79x9=_0x8e79x5[_0x48db[57]]();if(_0x8e79x9!=null&&_0x8e79x9[_0x48db[103]]>0){var _0x8e79x1d=_0x8e79x5[_0x48db[102]]();var _0x8e79x1c=mxUtils[_0x48db[97]](mxResources[_0x48db[26]](_0x48db[96])+_0x48db[118]+mxResources[_0x48db[26]](_0x48db[113])+_0x48db[218],_0x8e79x1d[_0x48db[219]](_0x8e79x9[0])||_0x48db[95]);if(_0x8e79x1c!=null){_0x8e79x5[_0x48db[220]](_0x8e79x1c,_0x8e79x9)}}});this[_0x48db[10]](_0x48db[221],function(){_0x8e79x5[_0x48db[222]](_0x8e79x5[_0x48db[93]]())});this[_0x48db[10]](_0x48db[223],function(){var _0x8e79x7=_0x8e79x5[_0x48db[93]]();if(_0x8e79x7!=null&&_0x8e79x5[_0x48db[102]]()[_0x48db[224]](_0x8e79x7)){var _0x8e79x1e=_0x8e79x4[_0x48db[6]][_0x48db[226]][_0x48db[225]](_0x8e79x7);if(_0x8e79x1e instanceof mxEdgeHandler){var _0x8e79x16=_0x8e79x5[_0x48db[129]][_0x48db[155]];var _0x8e79x6=_0x8e79x5[_0x48db[129]][_0x48db[182]];var _0x8e79x17=_0x8e79x16[_0x48db[124]];var _0x8e79x18=_0x8e79x16[_0x48db[127]];var _0x8e79x1f=_0x8e79x5[_0x48db[102]]()[_0x48db[227]](_0x8e79x7);var _0x8e79x20=_0x8e79x5[_0x48db[122]](_0x8e79x1f);if(_0x8e79x5[_0x48db[102]]()[_0x48db[121]](_0x8e79x1f)&&_0x8e79x20!=null){_0x8e79x17+=_0x8e79x20[_0x48db[124]];_0x8e79x18+=_0x8e79x20[_0x48db[127]]};_0x8e79x1e[_0x48db[232]](_0x8e79x1e[_0x48db[228]],_0x8e79x5[_0x48db[230]][_0x48db[229]]/_0x8e79x6-_0x8e79x17,_0x8e79x5[_0x48db[230]][_0x48db[231]]/_0x8e79x6-_0x8e79x18)}}});this[_0x48db[10]](_0x48db[233],function(){var _0x8e79x21=_0x8e79x3[_0x48db[2]][_0x48db[26]](_0x48db[233]);if(_0x8e79x21[_0x48db[234]]!=null){_0x8e79x21[_0x48db[234]][_0x48db[236]](_0x8e79x21[_0x48db[234]][_0x48db[228]],_0x8e79x21[_0x48db[235]])}});this[_0x48db[10]](_0x48db[237],function(){function _0x8e79x22(_0x8e79xc,_0x8e79x23,_0x8e79x24){var _0x8e79x25=null;var _0x8e79x9=_0x8e79x5[_0x48db[57]]();_0x8e79x5[_0x48db[102]]()[_0x48db[101]]();try{if(_0x8e79x9[_0x48db[103]]==0){var _0x8e79x26=_0x8e79x5[_0x48db[238]]();_0x8e79x9=[_0x8e79x5[_0x48db[240]](_0x8e79x5[_0x48db[239]](),null,_0x48db[95],_0x8e79x26,_0x8e79x26,_0x8e79x23,_0x8e79x24)];_0x8e79x25=_0x8e79x9};_0x8e79x5[_0x48db[114]](mxConstants.STYLE_IMAGE,_0x8e79xc,_0x8e79x9);_0x8e79x5[_0x48db[114]](mxConstants.STYLE_SHAPE,_0x48db[237],_0x8e79x9);if(_0x8e79x5[_0x48db[241]]()==1){if(_0x8e79x23!=null&&_0x8e79x24!=null){var _0x8e79x7=_0x8e79x9[0];var _0x8e79xd=_0x8e79x5[_0x48db[102]]()[_0x48db[242]](_0x8e79x7);if(_0x8e79xd!=null){_0x8e79xd=_0x8e79xd[_0x48db[123]]();_0x8e79xd[_0x48db[125]]=_0x8e79x23;_0x8e79xd[_0x48db[126]]=_0x8e79x24;_0x8e79x5[_0x48db[102]]()[_0x48db[128]](_0x8e79x7,_0x8e79xd)}}}}finally{_0x8e79x5[_0x48db[102]]()[_0x48db[107]]()};if(_0x8e79x25!=null){_0x8e79x5[_0x48db[59]](_0x8e79x25);_0x8e79x5[_0x48db[243]](_0x8e79x25[0])}}var _0x8e79xc=_0x48db[95];var _0x8e79xb=_0x8e79x5[_0x48db[110]]()[_0x48db[109]](_0x8e79x5[_0x48db[93]]());if(_0x8e79xb!=null){_0x8e79xc=_0x8e79xb[_0x48db[113]][mxConstants[_0x48db[244]]]||_0x8e79xc};_0x8e79xc=mxUtils[_0x48db[97]](mxResources[_0x48db[26]](_0x48db[96])+_0x48db[118]+mxResources[_0x48db[26]](_0x48db[245])+_0x48db[218],_0x8e79xc);if(_0x8e79xc!=null){if(_0x8e79xc[_0x48db[103]]>0){var _0x8e79x27= new Image();_0x8e79x27[_0x48db[246]]=function(){_0x8e79x22(_0x8e79xc,_0x8e79x27[_0x48db[125]],_0x8e79x27[_0x48db[126]])};_0x8e79x27[_0x48db[247]]=function(){mxUtils[_0x48db[249]](mxResources[_0x48db[26]](_0x48db[248]))};_0x8e79x27[_0x48db[250]]=_0x8e79xc}}})};Actions[_0x48db[4]][_0x48db[10]]=function(_0x8e79x1b,_0x8e79x28,_0x8e79x29,_0x8e79x2a,_0x8e79x2b){return this[_0x48db[28]](_0x8e79x1b, new Action(mxResources[_0x48db[26]](_0x8e79x1b),_0x8e79x28,_0x8e79x29,_0x8e79x2a,_0x8e79x2b))};Actions[_0x48db[4]][_0x48db[28]]=function(_0x8e79x2c,_0x8e79x15){this[_0x48db[2]][_0x8e79x2c]=_0x8e79x15;return _0x8e79x15};Actions[_0x48db[4]][_0x48db[26]]=function(_0x8e79x2c){return this[_0x48db[2]][_0x8e79x2c]};function Action(_0x8e79x2e,_0x8e79x28,_0x8e79x29,_0x8e79x2a,_0x8e79x2b){mxEventSource[_0x48db[251]](this);this[_0x48db[252]]=_0x8e79x2e;this[_0x48db[146]]=_0x8e79x28;this[_0x48db[253]]=(_0x8e79x29!=null)?_0x8e79x29:true;this[_0x48db[254]]=_0x8e79x2a;this[_0x48db[255]]=_0x8e79x2b}mxUtils[_0x48db[256]](Action,mxEventSource);Action[_0x48db[4]][_0x48db[177]]=function(_0x8e79xc){if(this[_0x48db[253]]!=_0x8e79xc){this[_0x48db[253]]=_0x8e79xc;this[_0x48db[258]]( new mxEventObject(_0x48db[257]))}};Action[_0x48db[4]][_0x48db[169]]=function(_0x8e79xc){this[_0x48db[259]]=_0x8e79xc};Action[_0x48db[4]][_0x48db[170]]=function(_0x8e79x28){this[_0x48db[260]]=_0x8e79x28};Action[_0x48db[4]][_0x48db[261]]=function(){return this[_0x48db[260]]()}
\ No newline at end of file
+'use strict';
+/**
+ * $Id: Actions.js,v 1.7 2013-02-14 07:48:01 gaudenz Exp $
+ * Copyright (c) 2006-2012, JGraph Ltd
+ */
+/**
+ * Constructs the actions object for the given UI.
+ */
+function Actions(editorUi) {
+       this.editorUi = editorUi;
+       this.actions = new Object();
+       this.init();
+};
+
+/**
+ * Adds the default actions.
+ */
+Actions.prototype.init = function() {
+       var ui = this.editorUi;
+       var editor = ui.editor;
+       var graph = editor.graph;
+
+       // File actions
+       this.addAction('new', function() {
+               ui.showDialog(new NewDialog(ui).container, 300, 180, true, true);
+       });
+       this.addAction('open', function() {
+               ui.showDialog(new OpenDialog(ui).container, 300, 180, true, true);
+       });
+       this.addAction('save', function() {
+               ui.saveFile(false);
+       }, null, null, 'Ctrl+S');
+       this.addAction('saveAs', function() {
+               ui.saveFile(true);
+       }, null, null, 'Ctrl+Shift-S');
+       this.addAction('publish', function() {
+               ui.publishFile(false);
+       }, null, null, 'Ctrl+Shift+P');
+       this.addAction('variable', function() {
+               ui.showDialog(new VariableDialog(ui).container, 300, 180, true, true);
+       });
+       this.addAction('import', function() {
+               ui.showDialog(new ImportDialog(ui).container, 300, 200, true, true);
+       });
+       this.addAction('export', function() {
+               ui.showDialog(new ExportDialog(ui).container, 300, 200, true, true);
+       }, null, null, 'Ctrl+E');
+       this.put('editFile', new Action(mxResources.get('edit'), mxUtils.bind(this,
+               function() {
+                       this.editorUi.showDialog(new EditFileDialog(ui).container, 620, 420,
+                               true, true);
+               })));
+       this.addAction('rename', function() {
+               ui.showDialog(new RenameDialog(ui).container, 300, 180, true, true);
+       });
+       this.addAction('print', function() {
+               mxUtils.printScreen(graph);
+       }, null, 'sprite-print', 'Ctrl+P');
+       this.addAction('preview', function() {
+               mxUtils.show(graph, null, 10, 10);
+       });
+
+       // Edit actions
+       this.addAction('undo', function() {
+               editor.undoManager.undo();
+       }, null, 'sprite-undo', 'Ctrl+Z');
+       this.addAction('redo', function() {
+               editor.undoManager.redo();
+       }, null, 'sprite-redo', 'Ctrl+Y');
+       this.addAction('cut', function() {
+               mxClipboard.cut(graph);
+       }, null, 'sprite-cut', 'Ctrl+X');
+       this.addAction('copy', function() {
+               mxClipboard.copy(graph);
+       }, null, 'sprite-copy', 'Ctrl+C');
+       this.addAction('paste', function() {
+               mxClipboard.paste(graph);
+       }, false, 'sprite-paste', 'Ctrl+V');
+       this.addAction('delete', function() {
+               graph.removeCells();
+       }, null, null, 'Delete');
+       this.addAction('duplicate', function() {
+               var s = graph.gridSize;
+               graph.setSelectionCells(graph.moveCells(graph.getSelectionCells(), s, s,
+                       true));
+       }, null, null, 'Ctrl+D');
+       this.addAction('selectVertices', function() {
+               graph.selectVertices();
+       }, null, null, 'Ctrl+Shift+V');
+       this.addAction('selectEdges', function() {
+               graph.selectEdges();
+       }, null, null, 'Ctrl+Shift+E');
+       this.addAction('selectAll', function() {
+               graph.selectAll();
+       }, null, null, 'Ctrl+A');
+
+       // Navigation actions
+       this.addAction('home', function() {
+               graph.home();
+       }, null, null, 'Home');
+       this.addAction('exitGroup', function() {
+               graph.exitGroup();
+       }, null, null, 'Page Up');
+       this.addAction('enterGroup', function() {
+               graph.enterGroup();
+       }, null, null, 'Page Down');
+       this.addAction('expand', function() {
+               graph.foldCells(false);
+       }, null, null, 'Enter');
+       this.addAction('collapse', function() {
+               graph.foldCells(true);
+       }, null, null, 'Backspace');
+
+       // Arrange actions
+       this.addAction('toFront', function() {
+               graph.orderCells(false);
+       }, null, null, 'Ctrl+F');
+       this.addAction('toBack', function() {
+               graph.orderCells(true);
+       }, null, null, 'Ctrl+B');
+       this.addAction('group', function() {
+               graph.setSelectionCell(graph.groupCells(null, 0));
+       }, null, null, 'Ctrl+G');
+       this.addAction('ungroup', function() {
+               graph.setSelectionCells(graph.ungroupCells());
+       }, null, null, 'Ctrl+U');
+       this.addAction('removeFromGroup', function() {
+               graph.removeCellsFromParent();
+       });
+       this.addAction('editLink', function() {
+               var cell = graph.getSelectionCell();
+               var link = graph.getLinkForCell(cell);
+
+               if (link == null) {
+                       link = '';
+               }
+
+               link = mxUtils.prompt(mxResources.get('enterValue'), link);
+
+               if (link != null) {
+                       graph.setLinkForCell(cell, link);
+               }
+       });
+       this.addAction('openLink', function() {
+               var cell = graph.getSelectionCell();
+               var link = graph.getLinkForCell(cell);
+
+               if (link != null) {
+                       window.open(link);
+               }
+       });
+       this.addAction('autosize', function() {
+               var cells = graph.getSelectionCells();
+
+               if (cells != null) {
+                       graph.getModel().beginUpdate();
+                       try {
+                               for (var i = 0; i < cells.length; i++) {
+                                       var cell = cells[i];
+
+                                       if (graph.getModel().getChildCount(cell)) {
+                                               graph.updateGroupBounds([cell], 20);
+                                       } else {
+                                               graph.updateCellSize(cell);
+                                       }
+                               }
+                       } finally {
+                               graph.getModel().endUpdate();
+                       }
+               }
+       });
+       this.addAction('wordWrap', function() {
+               var state = graph.getView().getState(graph.getSelectionCell());
+               var value = 'wrap';
+
+               if (state != null && state.style[mxConstants.STYLE_WHITE_SPACE] == 'wrap') {
+                       value = null;
+               }
+
+               graph.setCellStyles(mxConstants.STYLE_WHITE_SPACE, value);
+       });
+       this.addAction('rotation', function() {
+               var value = '0';
+               var state = graph.getView().getState(graph.getSelectionCell());
+
+               if (state != null) {
+                       value = state.style[mxConstants.STYLE_ROTATION] || value;
+               }
+
+               value = mxUtils.prompt(mxResources.get('enterValue') + ' (' +
+                       mxResources.get('rotation') + ' 0-360)', value);
+
+               if (value != null) {
+                       graph.setCellStyles(mxConstants.STYLE_ROTATION, value);
+               }
+       });
+       this.addAction('tilt', function() {
+               var cells = graph.getSelectionCells();
+
+               if (cells != null) {
+                       graph.getModel().beginUpdate();
+                       try {
+                               for (var i = 0; i < cells.length; i++) {
+                                       var cell = cells[i];
+
+                                       if (graph.getModel().isVertex(cell) && graph.getModel().getChildCount(
+                                                       cell) == 0) {
+                                               var geo = graph.getCellGeometry(cell);
+
+                                               if (geo != null) {
+                                                       // Rotates the size and position in the geometry
+                                                       geo = geo.clone();
+                                                       geo.x += geo.width / 2 - geo.height / 2;
+                                                       geo.y += geo.height / 2 - geo.width / 2;
+                                                       var tmp = geo.width;
+                                                       geo.width = geo.height;
+                                                       geo.height = tmp;
+                                                       graph.getModel().setGeometry(cell, geo);
+
+                                                       // Reads the current direction and advances by 90 degrees
+                                                       var state = graph.view.getState(cell);
+
+                                                       if (state != null) {
+                                                               var dir = state.style[mxConstants.STYLE_DIRECTION] || 'east' /*default*/ ;
+
+                                                               if (dir == 'east') {
+                                                                       dir = 'south';
+                                                               } else if (dir == 'south') {
+                                                                       dir = 'west';
+                                                               } else if (dir == 'west') {
+                                                                       dir = 'north';
+                                                               } else if (dir == 'north') {
+                                                                       dir = 'east';
+                                                               }
+
+                                                               graph.setCellStyles(mxConstants.STYLE_DIRECTION, dir, [cell]);
+                                                       }
+                                               }
+                                       }
+                               }
+                       } finally {
+                               graph.getModel().endUpdate();
+                       }
+               }
+       }, null, null, 'Ctrl+R');
+
+       // View actions
+       this.addAction('actualSize', function() {
+               graph.zoomTo(1);
+       });
+       this.addAction('zoomIn', function() {
+               graph.zoomIn();
+       }, null, null, 'Add');
+       this.addAction('zoomOut', function() {
+               graph.zoomOut();
+       }, null, null, 'Subtract');
+       this.addAction('fitWindow', function() {
+               graph.fit();
+       });
+
+       this.addAction('fitPage', mxUtils.bind(this, function() {
+               if (!graph.pageVisible) {
+                       this.get('pageView').funct();
+               }
+
+               var fmt = graph.pageFormat;
+               var ps = graph.pageScale;
+               var cw = graph.container.clientWidth - 20;
+               var ch = graph.container.clientHeight - 20;
+
+               var scale = Math.floor(100 * Math.min(cw / fmt.width / ps, ch / fmt.height /
+                       ps)) / 100;
+               graph.zoomTo(scale);
+
+               graph.container.scrollLeft = Math.round(graph.view.translate.x * scale -
+                       Math.max(10, (graph.container.clientWidth - fmt.width * ps * scale) / 2)
+               );
+               graph.container.scrollTop = Math.round(graph.view.translate.y * scale -
+                       Math.max(10, (graph.container.clientHeight - fmt.height * ps * scale) /
+                               2));
+       }));
+       this.addAction('fitPageWidth', mxUtils.bind(this, function() {
+               if (!graph.pageVisible) {
+                       this.get('pageView').funct();
+               }
+
+               var fmt = graph.pageFormat;
+               var ps = graph.pageScale;
+               var cw = graph.container.clientWidth - 20;
+
+               var scale = Math.floor(100 * cw / fmt.width / ps) / 100;
+               graph.zoomTo(scale);
+
+               graph.container.scrollLeft = Math.round(graph.view.translate.x * scale -
+                       Math.max(10, (graph.container.clientWidth - fmt.width * ps * scale) / 2)
+               );
+               graph.container.scrollTop = Math.round(graph.view.translate.y * scale -
+                       Math.max(10, (graph.container.clientHeight - fmt.height * ps * scale) /
+                               2));
+       }));
+       this.put('customZoom', new Action(mxResources.get('custom'), function() {
+               var value = mxUtils.prompt(mxResources.get('enterValue') + ' (%)',
+                       parseInt(graph.getView().getScale() * 100));
+
+               if (value != null && value.length > 0 && !isNaN(parseInt(value))) {
+                       graph.zoomTo(parseInt(value) / 100);
+               }
+       }));
+
+       // Option actions
+       var action = null;
+       action = this.addAction('grid', function() {
+               graph.setGridEnabled(!graph.isGridEnabled());
+               editor.updateGraphComponents();
+       }, null, null, 'Ctrl+Shift+G');
+       action.setToggleAction(true);
+       action.setSelectedCallback(function() {
+               return graph.isGridEnabled();
+       });
+       action = this.addAction('guides', function() {
+               graph.graphHandler.guidesEnabled = !graph.graphHandler.guidesEnabled;
+       });
+       action.setToggleAction(true);
+       action.setSelectedCallback(function() {
+               return graph.graphHandler.guidesEnabled;
+       });
+       action = this.addAction('tooltips', function() {
+               graph.tooltipHandler.setEnabled(!graph.tooltipHandler.isEnabled());
+       });
+       action.setToggleAction(true);
+       action.setSelectedCallback(function() {
+               return graph.tooltipHandler.isEnabled();
+       });
+       action = this.addAction('navigation', function() {
+               graph.foldingEnabled = !graph.foldingEnabled;
+               graph.view.revalidate();
+       });
+       action.setToggleAction(true);
+       action.setSelectedCallback(function() {
+               return graph.foldingEnabled;
+       });
+       action = this.addAction('scrollbars', function() {
+               graph.scrollbars = !graph.scrollbars;
+               editor.updateGraphComponents();
+
+               if (!graph.scrollbars) {
+                       var t = graph.view.translate;
+                       graph.view.setTranslate(t.x - graph.container.scrollLeft / graph.view.scale,
+                               t.y - graph.container.scrollTop / graph.view.scale);
+                       graph.container.scrollLeft = 0;
+                       graph.container.scrollTop = 0;
+                       graph.sizeDidChange();
+               } else {
+                       var dx = graph.view.translate.x;
+                       var dy = graph.view.translate.y;
+
+                       graph.view.translate.x = 0;
+                       graph.view.translate.y = 0;
+                       graph.sizeDidChange();
+                       graph.container.scrollLeft -= Math.round(dx * graph.view.scale);
+                       graph.container.scrollTop -= Math.round(dy * graph.view.scale);
+               }
+       }, !mxClient.IS_TOUCH);
+       action.setToggleAction(true);
+       action.setSelectedCallback(function() {
+               return graph.container.style.overflow == 'auto';
+       });
+       action = this.addAction('pageView', mxUtils.bind(this, function() {
+               graph.pageVisible = !graph.pageVisible;
+               graph.pageBreaksVisible = graph.pageVisible;
+               graph.preferPageSize = graph.pageBreaksVisible;
+               graph.view.validate();
+               graph.sizeDidChange();
+
+               editor.updateGraphComponents();
+               editor.outline.update();
+
+               if (mxUtils.hasScrollbars(graph.container)) {
+                       if (graph.pageVisible) {
+                               graph.container.scrollLeft -= 20;
+                               graph.container.scrollTop -= 20;
+                       } else {
+                               graph.container.scrollLeft += 20;
+                               graph.container.scrollTop += 20;
+                       }
+               }
+       }));
+       action.setToggleAction(true);
+       action.setSelectedCallback(function() {
+               return graph.pageVisible;
+       });
+       action = this.addAction('connect', function() {
+               graph.setConnectable(!graph.connectionHandler.isEnabled());
+       }, null, null, 'Ctrl+Q');
+       action.setToggleAction(true);
+       action.setSelectedCallback(function() {
+               return graph.connectionHandler.isEnabled();
+       });
+       action = this.addAction('copyConnect', function() {
+               graph.connectionHandler.setCreateTarget(!graph.connectionHandler.isCreateTarget());
+       });
+       action.setToggleAction(true);
+       action.setSelectedCallback(function() {
+               return graph.connectionHandler.isCreateTarget();
+       });
+
+       // Help actions
+       this.addAction('help', function() {
+               var ext = '';
+
+               if (mxResources.isLanguageSupported(mxClient.language)) {
+                       ext = '_' + mxClient.language;
+               }
+
+               window.open(RESOURCES_PATH + '/help' + ext + '.html');
+       });
+       this.put('about', new Action(mxResources.get('about') + ' Cally Square',
+               function() {
+                       ui.showDialog(new AboutDialog(ui).container, 320, 280, true, true);
+               }, null, null, 'F1'));
+
+       // Font style actions
+       var toggleFontStyle = mxUtils.bind(this, function(key, style) {
+               this.addAction(key, function() {
+                       graph.toggleCellStyleFlags(mxConstants.STYLE_FONTSTYLE, style);
+               });
+       });
+
+       toggleFontStyle('bold', mxConstants.FONT_BOLD);
+       toggleFontStyle('italic', mxConstants.FONT_ITALIC);
+       toggleFontStyle('underline', mxConstants.FONT_UNDERLINE);
+
+       // Format actions
+       this.addAction('shadow', function() {
+               graph.toggleCellStyles(mxConstants.STYLE_SHADOW);
+       });
+       this.addAction('dashed', function() {
+               graph.toggleCellStyles(mxConstants.STYLE_DASHED);
+       });
+       this.addAction('rounded', function() {
+               graph.toggleCellStyles(mxConstants.STYLE_ROUNDED);
+       });
+       this.addAction('curved', function() {
+               graph.toggleCellStyles(mxConstants.STYLE_CURVED);
+       });
+       this.addAction('style', function() {
+               var cells = graph.getSelectionCells();
+
+               if (cells != null && cells.length > 0) {
+                       var model = graph.getModel();
+                       var style = mxUtils.prompt(mxResources.get('enterValue') + ' (' +
+                               mxResources.get('style') + ')',
+                               model.getStyle(cells[0]) || '');
+
+                       if (style != null) {
+                               graph.setCellStyle(style, cells);
+                       }
+               }
+       });
+       this.addAction('setAsDefaultEdge', function() {
+               graph.setDefaultEdge(graph.getSelectionCell());
+       });
+       this.addAction('addWaypoint', function() {
+               var cell = graph.getSelectionCell();
+
+               if (cell != null && graph.getModel().isEdge(cell)) {
+                       var handler = editor.graph.selectionCellsHandler.getHandler(cell);
+
+                       if (handler instanceof mxEdgeHandler) {
+                               var t = graph.view.translate;
+                               var s = graph.view.scale;
+                               var dx = t.x;
+                               var dy = t.y;
+
+                               var parent = graph.getModel().getParent(cell);
+                               var pgeo = graph.getCellGeometry(parent);
+
+                               if (graph.getModel().isVertex(parent) && pgeo != null) {
+                                       dx += pgeo.x;
+                                       dy += pgeo.y;
+                               }
+
+                               handler.addPointAt(handler.state, graph.panningHandler.triggerX / s - dx,
+                                       graph.panningHandler.triggerY / s - dy);
+                       }
+               }
+       });
+       this.addAction('removeWaypoint', function() {
+               // TODO: Action should run with "this" set to action
+               var rmWaypointAction = ui.actions.get('removeWaypoint');
+
+               if (rmWaypointAction.handler != null) {
+                       // NOTE: Popupevent handled and action updated in Menus.createPopupMenu
+                       rmWaypointAction.handler.removePoint(rmWaypointAction.handler.state,
+                               rmWaypointAction.index);
+               }
+       });
+       this.addAction('image', function() {
+               function updateImage(value, w, h) {
+                       var select = null;
+                       var cells = graph.getSelectionCells();
+
+                       graph.getModel().beginUpdate();
+                       try {
+                               // Inserts new cell if no cell is selected
+                               if (cells.length == 0) {
+                                       var gs = graph.getGridSize();
+                                       cells = [graph.insertVertex(graph.getDefaultParent(), null, '', gs, gs,
+                                               w, h)];
+                                       select = cells;
+                               }
+
+                               graph.setCellStyles(mxConstants.STYLE_IMAGE, value, cells);
+                               graph.setCellStyles(mxConstants.STYLE_SHAPE, 'image', cells);
+
+                               if (graph.getSelectionCount() == 1) {
+                                       if (w != null && h != null) {
+                                               var cell = cells[0];
+                                               var geo = graph.getModel().getGeometry(cell);
+
+                                               if (geo != null) {
+                                                       geo = geo.clone();
+                                                       geo.width = w;
+                                                       geo.height = h;
+                                                       graph.getModel().setGeometry(cell, geo);
+                                               }
+                                       }
+                               }
+                       } finally {
+                               graph.getModel().endUpdate();
+                       }
+
+                       if (select != null) {
+                               graph.setSelectionCells(select);
+                               graph.scrollCellToVisible(select[0]);
+                       }
+               };
+
+               var value = '';
+               var state = graph.getView().getState(graph.getSelectionCell());
+
+               if (state != null) {
+                       value = state.style[mxConstants.STYLE_IMAGE] || value;
+               }
+
+               value = mxUtils.prompt(mxResources.get('enterValue') + ' (' + mxResources.get(
+                       'url') + ')', value);
+
+               if (value != null) {
+                       if (value.length > 0) {
+                               var img = new Image();
+
+                               img.onload = function() {
+                                       updateImage(value, img.width, img.height);
+                               };
+                               img.onerror = function() {
+                                       mxUtils.alert(mxResources.get('fileNotFound'));
+                               };
+
+                               img.src = value;
+                       }
+               }
+       });
+};
+
+/**
+ * Registers the given action under the given name.
+ */
+Actions.prototype.addAction = function(key, funct, enabled, iconCls, shortcut) {
+       return this.put(key, new Action(mxResources.get(key), funct, enabled, iconCls,
+               shortcut));
+};
+
+/**
+ * Registers the given action under the given name.
+ */
+Actions.prototype.put = function(name, action) {
+       this.actions[name] = action;
+
+       return action;
+};
+
+/**
+ * Returns the action for the given name or null if no such action exists.
+ */
+Actions.prototype.get = function(name) {
+       return this.actions[name];
+};
+
+/**
+ * Constructs a new action for the given parameters.
+ */
+function Action(label, funct, enabled, iconCls, shortcut) {
+       mxEventSource.call(this);
+       this.label = label;
+       this.funct = funct;
+       this.enabled = (enabled != null) ? enabled : true;
+       this.iconCls = iconCls;
+       this.shortcut = shortcut;
+};
+
+// Action inherits from mxEventSource
+mxUtils.extend(Action, mxEventSource);
+
+/**
+ * Sets the enabled state of the action and fires a stateChanged event.
+ */
+Action.prototype.setEnabled = function(value) {
+       if (this.enabled != value) {
+               this.enabled = value;
+               this.fireEvent(new mxEventObject('stateChanged'));
+       }
+};
+
+/**
+ * Sets the enabled state of the action and fires a stateChanged event.
+ */
+Action.prototype.setToggleAction = function(value) {
+       this.toggleAction = value;
+};
+
+/**
+ * Sets the enabled state of the action and fires a stateChanged event.
+ */
+Action.prototype.setSelectedCallback = function(funct) {
+       this.selectedCallback = funct;
+};
+
+/**
+ * Sets the enabled state of the action and fires a stateChanged event.
+ */
+Action.prototype.isSelected = function() {
+       return this.selectedCallback();
+};
index f68ae35..11d6772 100644 (file)
@@ -1 +1,1152 @@
-var _0x58ae=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x69\x6E\x70\x75\x74","\x63\x72\x65\x61\x74\x65\x45\x6C\x65\x6D\x65\x6E\x74","\x74\x79\x70\x65","\x63\x68\x65\x63\x6B\x62\x6F\x78","\x73\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x63\x68\x65\x63\x6B\x65\x64","\x47\x45\x54","\x6F\x70\x65\x6E","\x41\x75\x74\x68\x6F\x72\x69\x7A\x61\x74\x69\x6F\x6E","\x42\x65\x61\x72\x65\x72\x20","\x74\x6F\x6B\x65\x6E","\x64\x61\x74\x61","\x65\x64\x69\x74\x6F\x72","\x73\x65\x74\x52\x65\x71\x75\x65\x73\x74\x48\x65\x61\x64\x65\x72","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x72\x65\x73\x70\x6F\x6E\x73\x65","\x70\x61\x72\x73\x65","\x73\x65\x6C\x65\x63\x74","\x6F\x70\x74\x69\x6F\x6E","\x74\x65\x78\x74","\x2D\x2D\x20\x4E\x6F\x6E\x65\x20\x2D\x2D","\x76\x61\x6C\x75\x65","\x30","\x61\x70\x70\x65\x6E\x64\x43\x68\x69\x6C\x64","\x72\x6F\x77\x73","\x73\x65\x6C\x65\x63\x74\x65\x64","\x66\x6F\x72\x45\x61\x63\x68","\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65","\x66\x6F\x72\x6D\x2D\x63\x6F\x6E\x74\x72\x6F\x6C\x20\x73\x65\x6C\x65\x63\x74\x32","\x66\x69\x6C\x74\x65\x72","\x73\x65\x6C\x65\x63\x74\x2D\x67\x72\x6F\x75\x70\x2D\x66\x61\x74\x68\x65\x72","\x74\x6F\x55\x70\x70\x65\x72\x43\x61\x73\x65","\x73\x65\x6C\x65\x63\x74\x2D\x67\x72\x6F\x75\x70\x2D\x73\x6F\x6E","\x2D","\x63\x61\x70\x69\x74\x61\x6C\x69\x7A\x65","","\x49\x53\x5F\x49\x45","\x64\x6F\x63\x75\x6D\x65\x6E\x74\x4D\x6F\x64\x65","\x73\x63\x72\x6F\x6C\x6C\x57\x69\x64\x74\x68","\x62\x6F\x64\x79","\x72\x6F\x75\x6E\x64","\x6D\x61\x78","\x73\x63\x72\x6F\x6C\x6C\x48\x65\x69\x67\x68\x74","\x64\x6F\x63\x75\x6D\x65\x6E\x74\x45\x6C\x65\x6D\x65\x6E\x74","\x67\x65\x44\x69\x61\x6C\x6F\x67","\x63\x72\x65\x61\x74\x65\x44\x69\x76","\x6D\x6F\x64\x61\x6C\x20\x66\x61\x64\x65\x20\x69\x6E\x20\x63\x65\x6E\x74\x65\x72","\x64\x69\x73\x70\x6C\x61\x79","\x73\x74\x79\x6C\x65","\x62\x6C\x6F\x63\x6B","\x70\x61\x64\x64\x69\x6E\x67\x52\x69\x67\x68\x74","\x31\x32\x70\x78","\x67\x65\x4D\x6F\x64\x61\x6C\x44\x69\x61\x6C\x6F\x67","\x6D\x6F\x64\x61\x6C\x2D\x64\x69\x61\x6C\x6F\x67","\x62\x67","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64","\x6D\x6F\x64\x61\x6C\x2D\x62\x61\x63\x6B\x64\x72\x6F\x70\x20\x66\x61\x64\x65\x20\x69\x6E","\x49\x53\x5F\x51\x55\x49\x52\x4B\x53","\x6F\x6E\x44\x69\x61\x6C\x6F\x67\x43\x6C\x6F\x73\x65","\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x63\x6C\x6F\x73\x65","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x72\x65\x6D\x6F\x76\x65\x43\x68\x69\x6C\x64","\x70\x61\x72\x65\x6E\x74\x4E\x6F\x64\x65","\x6D\x6F\x64\x61\x6C\x2D\x63\x6F\x6E\x74\x65\x6E\x74","\x6D\x6F\x64\x61\x6C\x2D\x68\x65\x61\x64\x65\x72","\x6D\x6F\x64\x61\x6C\x2D\x62\x6F\x64\x79","\x6D\x6F\x64\x61\x6C\x2D\x66\x6F\x6F\x74\x65\x72","\x68\x34","\x63\x72\x65\x61\x74\x65\x48\x65\x61\x64\x65\x72","\x69\x6D\x70\x6F\x72\x74","\x67\x65\x74","\x20\x58\x4D\x4C","\x77\x72\x69\x74\x65","\x68\x69\x64\x65\x44\x69\x61\x6C\x6F\x67","\x62\x75\x74\x74\x6F\x6E","\x72\x6F\x77","\x63\x6F\x6C\x2D\x6D\x64\x2D\x31\x32","\x74\x65\x78\x74\x61\x72\x65\x61","\x77\x69\x64\x74\x68","\x31\x30\x30\x25","\x68\x65\x69\x67\x68\x74","\x33\x37\x34\x70\x78","\x66\x69\x6C\x65","\x61\x63\x63\x65\x70\x74","\x74\x65\x78\x74\x2F\x78\x6D\x6C","\x63\x68\x61\x6E\x67\x65","\x66\x69\x6C\x65\x73","\x74\x61\x72\x67\x65\x74","\x6C\x6F\x67","\x6F\x6E\x6C\x6F\x61\x64","\x72\x65\x73\x75\x6C\x74","\x72\x65\x61\x64\x41\x73\x54\x65\x78\x74","\x46\x61\x69\x6C\x65\x64\x20\x74\x6F\x20\x6C\x6F\x61\x64\x20\x66\x6F\x72\x6D\x61\x74\x20\x66\x69\x6C\x65","\x46\x61\x69\x6C\x65\x64\x20\x74\x6F\x20\x6C\x6F\x61\x64\x20\x66\x69\x6C\x65","\x61\x64\x64\x45\x76\x65\x6E\x74\x4C\x69\x73\x74\x65\x6E\x65\x72","\x70\x61\x72\x73\x65\x58\x6D\x6C","\x73\x65\x74\x47\x72\x61\x70\x68\x58\x6D\x6C","\x62\x69\x6E\x64","\x62\x74\x6E\x20\x62\x6C\x75\x65","\x63\x61\x6E\x63\x65\x6C","\x62\x74\x6E\x20\x64\x65\x66\x61\x75\x6C\x74","\x61\x62\x6F\x75\x74","\x20\x43\x61\x6C\x6C\x79\x20\x53\x71\x75\x61\x72\x65","\x69\x6D\x67","\x62\x6F\x72\x64\x65\x72","\x30\x70\x78","\x31\x37\x36","\x31\x35\x31","\x73\x72\x63","\x2F\x6C\x6F\x67\x6F\x2E\x70\x6E\x67","\x62\x72","\x50\x6F\x77\x65\x72\x65\x64\x20\x62\x79\x20\x58\x65\x6E\x69\x61\x6C\x61\x62\x20","\x56\x45\x52\x53\x49\x4F\x4E","\x61","\x68\x72\x65\x66","\x68\x74\x74\x70\x3A\x2F\x2F\x77\x77\x77\x2E\x63\x61\x6C\x6C\x79\x73\x71\x75\x61\x72\x65\x2E\x63\x6F\x6D\x2F","\x5F\x62\x6C\x61\x6E\x6B","\x77\x77\x77\x2E\x63\x61\x6C\x6C\x79\x73\x71\x75\x61\x72\x65\x2E\x63\x6F\x6D","\x73\x61\x76\x65\x41\x73","\x6E\x61\x6D\x65","\x5F","\x67\x65\x74\x4F\x72\x43\x72\x65\x61\x74\x65\x46\x69\x6C\x65\x6E\x61\x6D\x65","\x63\x6F\x6C\x2D\x6D\x64\x2D\x34","\x63\x6F\x6C\x2D\x6D\x64\x2D\x38","\x6C\x61\x62\x65\x6C","\x63\x6F\x6E\x74\x72\x6F\x6C\x2D\x6C\x61\x62\x65\x6C\x20\x70\x75\x6C\x6C\x2D\x72\x69\x67\x68\x74","\x5F\x63\x6F\x70\x79","\x69\x64","\x66\x6F\x72\x6D\x2D\x63\x6F\x6E\x74\x72\x6F\x6C","\x73\x61\x76\x65","\x6E\x65\x77","\x5F\x6E\x65\x77","\x76\x61\x72\x69\x61\x62\x6C\x65","\x76\x61\x72\x69\x61\x62\x6C\x65\x20\x6E\x61\x6D\x65","\x2F\x61\x70\x69\x2F\x6A\x73\x63\x72\x69\x70\x74\x79\x2F\x70\x72\x6F\x6A\x65\x63\x74\x73","\x6C\x65\x6E\x67\x74\x68","\x6A\x73\x63\x72\x69\x70\x74\x79\x2F\x70\x72\x6F\x6A\x65\x63\x74\x2F","\x72\x65\x6E\x61\x6D\x65","\x66\x69\x6C\x65\x6E\x61\x6D\x65","\x50\x55\x54","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2F\x78\x2D\x77\x77\x77\x2D\x66\x6F\x72\x6D\x2D\x75\x72\x6C\x65\x6E\x63\x6F\x64\x65\x64","\x6E\x61\x6D\x65\x3D","\x50\x72\x6F\x6A\x65\x63\x74\x20\x73\x75\x63\x63\x65\x73\x73\x66\x75\x6C\x6C\x79\x20\x72\x65\x6E\x61\x6D\x65\x64","\x73\x65\x74\x53\x74\x61\x74\x75\x73","\x6D\x65\x73\x73\x61\x67\x65","\x65\x72\x72\x6F\x72\x73","\x6F\x6E\x65\x72\x72\x6F\x72","\x73\x74\x61\x74\x75\x73\x54\x65\x78\x74","\x61\x6C\x65\x72\x74","\x65\x64\x69\x74","\x67\x65\x74\x47\x72\x61\x70\x68\x58\x6D\x6C","\x67\x65\x74\x50\x72\x65\x74\x74\x79\x58\x6D\x6C","\x73\x74\x6F\x70\x50\x72\x6F\x70\x61\x67\x61\x74\x69\x6F\x6E","\x70\x72\x65\x76\x65\x6E\x74\x44\x65\x66\x61\x75\x6C\x74","\x64\x61\x74\x61\x54\x72\x61\x6E\x73\x66\x65\x72","\x64\x72\x61\x67\x6F\x76\x65\x72","\x64\x72\x6F\x70","\x6D\x6F\x64\x61\x6C\x2D\x62\x6F\x64\x79\x20\x66\x6F\x72\x6D","\x65\x78\x70\x6F\x72\x74","\x66\x6F\x72\x6D\x2D\x68\x6F\x72\x69\x7A\x6F\x6E\x74\x61\x6C\x20\x66\x6F\x72\x6D\x2D\x72\x6F\x77\x2D\x73\x65\x70\x65\x72\x61\x74\x65\x64","\x66\x6F\x72\x6D\x2D\x67\x72\x6F\x75\x70\x20\x6C\x61\x73\x74","\x63\x6F\x6C\x2D\x73\x6D\x2D\x34\x20\x63\x6F\x6E\x74\x72\x6F\x6C\x2D\x6C\x61\x62\x65\x6C","\x63\x6F\x6C\x2D\x73\x6D\x2D\x38","\x67\x65\x74\x58\x6D\x6C","\x73\x69\x6D\x75\x6C\x61\x74\x65","\x2F\x64\x6F\x77\x6E\x6C\x6F\x61\x64","\x66\x69\x6C\x65\x6E\x61\x6D\x65\x3D","\x67\x72\x61\x70\x68","\x6D\x6F\x64\x61\x6C\x2D\x62\x6F\x64\x79\x20\x66\x6F\x72\x6D\x20\x6D\x6F\x64\x61\x6C\x2D\x62\x6F\x64\x79\x2D\x73\x63\x72\x6F\x6C\x6C","\x20","\x6E\x6F\x64\x65\x4E\x61\x6D\x65","\x69\x6E\x70\x75\x74\x47\x72\x6F\x75\x70","\x61\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x66\x6F\x72\x6D\x2D\x67\x72\x6F\x75\x70","\x69\x6E\x6E\x65\x72\x48\x54\x4D\x4C","\x54\x65\x78\x74","\x42\x6F\x64\x79","\x71\x75\x65\x73\x74\x69\x6F\x6E","\x70\x6C\x61\x63\x65\x68\x6F\x6C\x64\x65\x72","\x49\x6E\x73\x65\x72\x74\x20\x6C\x61\x62\x65\x6C\x20\x66\x6F\x72\x20\x22\x4F\x74\x68\x65\x72\x22\x20\x61\x6E\x73\x77\x65\x72\x20\x6F\x70\x74\x69\x6F\x6E","\x6F\x74\x68\x65\x72","\x2B","\x62\x74\x6E\x20\x67\x72\x65\x65\x6E","\x61\x64\x64","\x68\x65\x6C\x70\x5F","\x70","\x68\x65\x6C\x70\x2D\x62\x6C\x6F\x63\x6B","\x63\x68\x69\x6C\x64\x72\x65\x6E","\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x42\x79\x49\x64","\x67\x65\x74\x43\x68\x69\x6C\x64\x43\x6F\x75\x6E\x74","\x6D\x6F\x64\x65\x6C","\x63\x72\x65\x61\x74\x65\x58\x6D\x6C\x44\x6F\x63\x75\x6D\x65\x6E\x74","\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x73\x42\x79\x54\x61\x67\x4E\x61\x6D\x65","\x72\x65\x66\x72\x65\x73\x68","\x63\x6F\x6C\x2D\x6D\x64\x2D\x35","\x63\x6F\x6C\x2D\x6D\x64\x2D\x32","\x49\x6E\x73\x65\x72\x74\x20\x6C\x61\x62\x65\x6C","\x6E\x75\x6D\x62\x65\x72","\x78","\x70\x61\x72\x65\x6E\x74\x45\x6C\x65\x6D\x65\x6E\x74","\x62\x74\x6E\x20\x72\x65\x64"];_0x58ae[0];function createCheckbox(_0xcfe0x2){var _0xcfe0x3=document[_0x58ae[2]](_0x58ae[1]);_0xcfe0x3[_0x58ae[5]](_0x58ae[3],_0x58ae[4]);if(_0xcfe0x2){_0xcfe0x3[_0x58ae[5]](_0x58ae[6],true)};return _0xcfe0x3}function createDropdownFromApi(_0xcfe0x5,_0xcfe0x2,_0xcfe0x6,_0xcfe0x7,_0xcfe0x8,_0xcfe0x9){var _0xcfe0xa= new XMLHttpRequest();_0xcfe0xa[_0x58ae[8]](_0x58ae[7],_0xcfe0x5,false);_0xcfe0xa[_0x58ae[14]](_0x58ae[9],_0x58ae[10]+_0xcfe0x8[_0x58ae[13]][_0x58ae[12]][_0x58ae[11]]);_0xcfe0xa[_0x58ae[15]](null);var _0xcfe0xb=[];if(_0xcfe0xa[_0x58ae[16]]===200){_0xcfe0xb=JSON[_0x58ae[18]](_0xcfe0xa[_0x58ae[17]])};var _0xcfe0x3=document[_0x58ae[2]](_0x58ae[19]);var _0xcfe0xc=document[_0x58ae[2]](_0x58ae[20]);_0xcfe0xc[_0x58ae[21]]=_0x58ae[22];_0xcfe0xc[_0x58ae[23]]=_0x58ae[24];_0xcfe0x3[_0x58ae[25]](_0xcfe0xc);var _0xcfe0xd=_0xcfe0x9?_0xcfe0xb[_0x58ae[26]]:_0xcfe0xb;_0xcfe0xd[_0x58ae[28]](function(_0xcfe0xe){_0xcfe0xc=document[_0x58ae[2]](_0x58ae[20]);_0xcfe0xc[_0x58ae[21]]=_0xcfe0xe[_0xcfe0x6];_0xcfe0xc[_0x58ae[23]]=_0xcfe0xe[_0xcfe0x7];_0xcfe0xc[_0x58ae[27]]=(_0xcfe0xe[_0xcfe0x7]==_0xcfe0x2);_0xcfe0x3[_0x58ae[25]](_0xcfe0xc)});_0xcfe0x3[_0x58ae[29]]=_0x58ae[30];return _0xcfe0x3}function createGroupedDropdownFromApi(_0xcfe0x5,_0xcfe0x2,_0xcfe0x6,_0xcfe0x7,_0xcfe0x8,_0xcfe0x9,_0xcfe0x10){var _0xcfe0xa= new XMLHttpRequest();_0xcfe0xa[_0x58ae[8]](_0x58ae[7],_0xcfe0x5,false);_0xcfe0xa[_0x58ae[14]](_0x58ae[9],_0x58ae[10]+_0xcfe0x8[_0x58ae[13]][_0x58ae[12]][_0x58ae[11]]);_0xcfe0xa[_0x58ae[15]](null);var _0xcfe0xb=[];if(_0xcfe0xa[_0x58ae[16]]===200){_0xcfe0xb=JSON[_0x58ae[18]](_0xcfe0xa[_0x58ae[17]])};var _0xcfe0x3=document[_0x58ae[2]](_0x58ae[19]);var _0xcfe0xc=document[_0x58ae[2]](_0x58ae[20]);_0xcfe0xc[_0x58ae[21]]=_0x58ae[22];_0xcfe0xc[_0x58ae[23]]=_0x58ae[24];_0xcfe0x3[_0x58ae[25]](_0xcfe0xc);var _0xcfe0xd=_0xcfe0x9?_0xcfe0xb[_0x58ae[26]]:_0xcfe0xb;var _0xcfe0x11={};var _0xcfe0x12={};_0xcfe0x11[_0xcfe0x10]=null;var _0xcfe0x13=_[_0x58ae[31]](_0xcfe0xd,_0xcfe0x11);var _0xcfe0x14={};_0xcfe0x13[_0x58ae[28]](function(_0xcfe0xe){_0xcfe0xc=document[_0x58ae[2]](_0x58ae[20]);_0xcfe0xc[_0x58ae[29]]=_0x58ae[32];_0xcfe0xc[_0x58ae[21]]=_0xcfe0xe[_0xcfe0x6][_0x58ae[33]]();_0xcfe0xc[_0x58ae[23]]=_0xcfe0xe[_0xcfe0x7];_0xcfe0xc[_0x58ae[27]]=(_0xcfe0xe[_0xcfe0x7]==_0xcfe0x2);_0xcfe0x3[_0x58ae[25]](_0xcfe0xc);_0xcfe0x12[_0xcfe0x10]=_0xcfe0xe[_0xcfe0x7];_0xcfe0x14=_[_0x58ae[31]](_0xcfe0xd,_0xcfe0x12);_0xcfe0x14[_0x58ae[28]](function(_0xcfe0xe){_0xcfe0xc=document[_0x58ae[2]](_0x58ae[20]);_0xcfe0xc[_0x58ae[29]]=_0x58ae[34];_0xcfe0xc[_0x58ae[21]]=_0x58ae[35]+_[_0x58ae[36]](_0xcfe0xe[_0xcfe0x6]);_0xcfe0xc[_0x58ae[23]]=_0xcfe0xe[_0xcfe0x7];_0xcfe0xc[_0x58ae[27]]=(_0xcfe0xe[_0xcfe0x7]==_0xcfe0x2);_0xcfe0x3[_0x58ae[25]](_0xcfe0xc)})});_0xcfe0x3[_0x58ae[29]]=_0x58ae[30];return _0xcfe0x3}function createDropdownFromArray(_0xcfe0x16,_0xcfe0x2){var _0xcfe0x3=document[_0x58ae[2]](_0x58ae[19]);for(var _0xcfe0x17 in _0xcfe0x16){var _0xcfe0xc=document[_0x58ae[2]](_0x58ae[20]);_0xcfe0xc[_0x58ae[21]]=_0xcfe0x16[_0xcfe0x17];_0xcfe0xc[_0x58ae[23]]=_0xcfe0x17;if(_0xcfe0x2>0||_0xcfe0x2!=_0x58ae[37]){_0xcfe0xc[_0x58ae[27]]=(_0xcfe0x2===_0xcfe0x17)?true:false};_0xcfe0x3[_0x58ae[25]](_0xcfe0xc)};_0xcfe0x3[_0x58ae[29]]=_0x58ae[30];return _0xcfe0x3}function Dialog(_0xcfe0x8,_0xcfe0x19,_0xcfe0x1a,_0xcfe0x1b,_0xcfe0x1c,_0xcfe0x1d,_0xcfe0x1e){var _0xcfe0x1f=0;if(mxClient[_0x58ae[38]]&&document[_0x58ae[39]]!=9){_0xcfe0x1f=60};_0xcfe0x1a+=_0xcfe0x1f;_0xcfe0x1b+=_0xcfe0x1f;var _0xcfe0x20=Math[_0x58ae[43]](0,Math[_0x58ae[42]]((document[_0x58ae[41]][_0x58ae[40]]-_0xcfe0x1a)/2));var _0xcfe0x21=Math[_0x58ae[43]](0,Math[_0x58ae[42]]((Math[_0x58ae[43]](document[_0x58ae[41]][_0x58ae[44]],document[_0x58ae[45]][_0x58ae[44]])-_0xcfe0x1b)/3));var _0xcfe0x22=_0xcfe0x8[_0x58ae[47]](_0x58ae[46]);_0xcfe0x22[_0x58ae[29]]=_0x58ae[48];_0xcfe0x22[_0x58ae[50]][_0x58ae[49]]=_0x58ae[51];_0xcfe0x22[_0x58ae[50]][_0x58ae[52]]=_0x58ae[53];var _0xcfe0x23=_0xcfe0x8[_0x58ae[47]](_0x58ae[54]);_0xcfe0x23[_0x58ae[29]]=_0x58ae[55];_0xcfe0x23[_0x58ae[25]](_0xcfe0x19);_0xcfe0x22[_0x58ae[25]](_0xcfe0x23);if(this[_0x58ae[56]]==null){this[_0x58ae[56]]=_0xcfe0x8[_0x58ae[47]](_0x58ae[57]);this[_0x58ae[56]][_0x58ae[29]]=_0x58ae[58];if(mxClient[_0x58ae[59]]){ new mxDivResizer(this[_0x58ae[56]])}};if(_0xcfe0x1c){document[_0x58ae[41]][_0x58ae[25]](this[_0x58ae[56]])};document[_0x58ae[41]][_0x58ae[25]](_0xcfe0x22);this[_0x58ae[60]]=_0xcfe0x1e;this[_0x58ae[61]]=_0xcfe0x22}Dialog[_0x58ae[63]][_0x58ae[62]]=function(){if(this[_0x58ae[60]]!=null){this[_0x58ae[60]]();this[_0x58ae[60]]=null};this[_0x58ae[61]][_0x58ae[65]][_0x58ae[64]](this[_0x58ae[61]]);this[_0x58ae[56]][_0x58ae[65]][_0x58ae[64]](this[_0x58ae[56]])};function ImportDialog(_0xcfe0x8){var _0xcfe0x25=_0xcfe0x8[_0x58ae[47]](_0x58ae[66]);var _0xcfe0x26=_0xcfe0x8[_0x58ae[47]](_0x58ae[67]);var _0xcfe0x27=_0xcfe0x8[_0x58ae[47]](_0x58ae[68]);var _0xcfe0x28=_0xcfe0x8[_0x58ae[47]](_0x58ae[69]);var _0xcfe0x29=_0xcfe0x8[_0x58ae[71]](_0x58ae[70]);mxUtils[_0x58ae[75]](_0xcfe0x29,mxResources[_0x58ae[73]](_0x58ae[72])+_0x58ae[74]);var _0xcfe0x2a=mxUtils[_0x58ae[77]](_0x58ae[37],function(){_0xcfe0x8[_0x58ae[76]]()});_0xcfe0x2a[_0x58ae[29]]=_0x58ae[62];_0xcfe0x26[_0x58ae[25]](_0xcfe0x2a);_0xcfe0x26[_0x58ae[25]](_0xcfe0x29);var _0xcfe0x2b=_0xcfe0x8[_0x58ae[47]](_0x58ae[78]);var _0xcfe0x2c=_0xcfe0x8[_0x58ae[47]](_0x58ae[79]);var _0xcfe0x2d=document[_0x58ae[2]](_0x58ae[80]);_0xcfe0x2d[_0x58ae[50]][_0x58ae[81]]=_0x58ae[82];_0xcfe0x2d[_0x58ae[50]][_0x58ae[83]]=_0x58ae[84];var _0xcfe0x3=document[_0x58ae[2]](_0x58ae[1]);_0xcfe0x3[_0x58ae[3]]=_0x58ae[85];_0xcfe0x3[_0x58ae[5]](_0x58ae[86],_0x58ae[87]);_0xcfe0x3[_0x58ae[97]](_0x58ae[88],function _0xcfe0x2e(_0xcfe0x2f){var _0xcfe0x30=_0xcfe0x2f[_0x58ae[90]][_0x58ae[89]][0];console[_0x58ae[91]](_0xcfe0x30);if(_0xcfe0x30){if(_0xcfe0x30[_0x58ae[3]]===_0x58ae[87]){var _0xcfe0x31= new FileReader();_0xcfe0x31[_0x58ae[92]]=function(_0xcfe0x32){var _0xcfe0x33=_0xcfe0x32[_0x58ae[90]][_0x58ae[93]];mxUtils[_0x58ae[75]](_0xcfe0x2d,_0xcfe0x33)};_0xcfe0x31[_0x58ae[94]](_0xcfe0x30)}else {alert(_0x58ae[95])}}else {alert(_0x58ae[96])}},false);_0xcfe0x2c[_0x58ae[25]](_0xcfe0x3);_0xcfe0x2c[_0x58ae[25]](_0xcfe0x2d);_0xcfe0x2b[_0x58ae[25]](_0xcfe0x2c);_0xcfe0x27[_0x58ae[25]](_0xcfe0x2b);var _0xcfe0x34=mxUtils[_0x58ae[77]](mxResources[_0x58ae[73]](_0x58ae[72]),mxUtils[_0x58ae[100]](this,function(_0xcfe0x35){var _0xcfe0x36=mxUtils[_0x58ae[98]](_0xcfe0x2d[_0x58ae[23]]);_0xcfe0x8[_0x58ae[13]][_0x58ae[99]](_0xcfe0x36[_0x58ae[45]]);_0xcfe0x8[_0x58ae[76]]()}));_0xcfe0x34[_0x58ae[29]]=_0x58ae[101];var _0xcfe0x37=mxUtils[_0x58ae[77]](mxResources[_0x58ae[73]](_0x58ae[102]),function(){_0xcfe0x8[_0x58ae[76]]()});_0xcfe0x37[_0x58ae[29]]=_0x58ae[103];_0xcfe0x28[_0x58ae[25]](_0xcfe0x34);_0xcfe0x28[_0x58ae[25]](_0xcfe0x37);_0xcfe0x25[_0x58ae[25]](_0xcfe0x26);_0xcfe0x25[_0x58ae[25]](_0xcfe0x27);_0xcfe0x25[_0x58ae[25]](_0xcfe0x28);this[_0x58ae[61]]=_0xcfe0x25}function AboutDialog(_0xcfe0x8){var _0xcfe0x25=_0xcfe0x8[_0x58ae[47]](_0x58ae[66]);var _0xcfe0x26=_0xcfe0x8[_0x58ae[47]](_0x58ae[67]);var _0xcfe0x27=_0xcfe0x8[_0x58ae[47]](_0x58ae[68]);var _0xcfe0x28=_0xcfe0x8[_0x58ae[47]](_0x58ae[69]);var _0xcfe0x29=_0xcfe0x8[_0x58ae[71]](_0x58ae[70]);mxUtils[_0x58ae[75]](_0xcfe0x29,mxResources[_0x58ae[73]](_0x58ae[104])+_0x58ae[105]);var _0xcfe0x2a=mxUtils[_0x58ae[77]](_0x58ae[37],function(){_0xcfe0x8[_0x58ae[76]]()});_0xcfe0x2a[_0x58ae[29]]=_0x58ae[62];_0xcfe0x26[_0x58ae[25]](_0xcfe0x2a);_0xcfe0x26[_0x58ae[25]](_0xcfe0x29);var _0xcfe0x39=document[_0x58ae[2]](_0x58ae[106]);_0xcfe0x39[_0x58ae[50]][_0x58ae[107]]=_0x58ae[108];_0xcfe0x39[_0x58ae[5]](_0x58ae[81],_0x58ae[109]);_0xcfe0x39[_0x58ae[5]](_0x58ae[81],_0x58ae[110]);_0xcfe0x39[_0x58ae[5]](_0x58ae[111],IMAGE_PATH+_0x58ae[112]);_0xcfe0x27[_0x58ae[25]](_0xcfe0x39);mxUtils[_0x58ae[113]](_0xcfe0x27);mxUtils[_0x58ae[75]](_0xcfe0x27,_0x58ae[114]+mxClient[_0x58ae[115]]);mxUtils[_0x58ae[113]](_0xcfe0x27);var _0xcfe0x3a=document[_0x58ae[2]](_0x58ae[116]);_0xcfe0x3a[_0x58ae[5]](_0x58ae[117],_0x58ae[118]);_0xcfe0x3a[_0x58ae[5]](_0x58ae[90],_0x58ae[119]);mxUtils[_0x58ae[75]](_0xcfe0x3a,_0x58ae[120]);_0xcfe0x27[_0x58ae[25]](_0xcfe0x3a);mxUtils[_0x58ae[113]](_0xcfe0x27);mxUtils[_0x58ae[113]](_0xcfe0x27);var _0xcfe0x37=mxUtils[_0x58ae[77]](mxResources[_0x58ae[73]](_0x58ae[62]),function(){_0xcfe0x8[_0x58ae[76]]()});_0xcfe0x37[_0x58ae[29]]=_0x58ae[103];_0xcfe0x28[_0x58ae[25]](_0xcfe0x37);_0xcfe0x25[_0x58ae[25]](_0xcfe0x26);_0xcfe0x25[_0x58ae[25]](_0xcfe0x27);_0xcfe0x25[_0x58ae[25]](_0xcfe0x28);this[_0x58ae[61]]=_0xcfe0x25}function SaveDialog(_0xcfe0x8){var _0xcfe0x25=_0xcfe0x8[_0x58ae[47]](_0x58ae[66]);var _0xcfe0x26=_0xcfe0x8[_0x58ae[47]](_0x58ae[67]);var _0xcfe0x27=_0xcfe0x8[_0x58ae[47]](_0x58ae[68]);var _0xcfe0x28=_0xcfe0x8[_0x58ae[47]](_0x58ae[69]);var _0xcfe0x29=_0xcfe0x8[_0x58ae[71]](_0x58ae[70]);mxUtils[_0x58ae[75]](_0xcfe0x29,mxResources[_0x58ae[73]](_0x58ae[121]));var _0xcfe0x2a=mxUtils[_0x58ae[77]](_0x58ae[37],function(){_0xcfe0x8[_0x58ae[76]]()});_0xcfe0x2a[_0x58ae[29]]=_0x58ae[62];_0xcfe0x26[_0x58ae[25]](_0xcfe0x2a);_0xcfe0x26[_0x58ae[25]](_0xcfe0x29);var _0xcfe0x3c=_0x58ae[122];var _0xcfe0x3d=_0x58ae[123]+_0xcfe0x3c;var _0xcfe0x2=_0xcfe0x8[_0x58ae[13]][_0x58ae[124]]();var _0xcfe0x2b=_0xcfe0x8[_0x58ae[47]](_0x58ae[78]);var _0xcfe0x2c=_0xcfe0x8[_0x58ae[47]](_0x58ae[125]);var _0xcfe0x3e=_0xcfe0x8[_0x58ae[47]](_0x58ae[126]);var _0xcfe0x3f=document[_0x58ae[2]](_0x58ae[127]);_0xcfe0x3f[_0x58ae[29]]=_0x58ae[128];mxUtils[_0x58ae[75]](_0xcfe0x3f,mxResources[_0x58ae[73]](_0xcfe0x3c));_0xcfe0x2c[_0x58ae[25]](_0xcfe0x3f);var _0xcfe0x40=document[_0x58ae[2]](_0x58ae[1]);_0xcfe0x40[_0x58ae[5]](_0x58ae[23],_0xcfe0x2+_0x58ae[129]);_0xcfe0x40[_0x58ae[5]](_0x58ae[130],_0xcfe0x3d);_0xcfe0x40[_0x58ae[29]]=_0x58ae[131];_0xcfe0x3e[_0x58ae[25]](_0xcfe0x40);_0xcfe0x2b[_0x58ae[25]](_0xcfe0x2c);_0xcfe0x2b[_0x58ae[25]](_0xcfe0x3e);_0xcfe0x27[_0x58ae[25]](_0xcfe0x2b);var _0xcfe0x34=mxUtils[_0x58ae[77]](mxResources[_0x58ae[73]](_0x58ae[132]),function(){_0xcfe0x8[_0x58ae[121]](_0xcfe0x40[_0x58ae[23]]);_0xcfe0x8[_0x58ae[76]]()});_0xcfe0x34[_0x58ae[29]]=_0x58ae[101];var _0xcfe0x37=mxUtils[_0x58ae[77]](mxResources[_0x58ae[73]](_0x58ae[102]),function(){_0xcfe0x8[_0x58ae[76]]()});_0xcfe0x37[_0x58ae[29]]=_0x58ae[103];_0xcfe0x28[_0x58ae[25]](_0xcfe0x34);_0xcfe0x28[_0x58ae[25]](_0xcfe0x37);_0xcfe0x25[_0x58ae[25]](_0xcfe0x26);_0xcfe0x25[_0x58ae[25]](_0xcfe0x27);_0xcfe0x25[_0x58ae[25]](_0xcfe0x28);this[_0x58ae[61]]=_0xcfe0x25}function NewDialog(_0xcfe0x8){var _0xcfe0x25=_0xcfe0x8[_0x58ae[47]](_0x58ae[66]);var _0xcfe0x26=_0xcfe0x8[_0x58ae[47]](_0x58ae[67]);var _0xcfe0x27=_0xcfe0x8[_0x58ae[47]](_0x58ae[68]);var _0xcfe0x28=_0xcfe0x8[_0x58ae[47]](_0x58ae[69]);var _0xcfe0x29=_0xcfe0x8[_0x58ae[71]](_0x58ae[70]);mxUtils[_0x58ae[75]](_0xcfe0x29,mxResources[_0x58ae[73]](_0x58ae[133]));var _0xcfe0x2a=mxUtils[_0x58ae[77]](_0x58ae[37],function(){_0xcfe0x8[_0x58ae[76]]()});_0xcfe0x2a[_0x58ae[29]]=_0x58ae[62];_0xcfe0x26[_0x58ae[25]](_0xcfe0x2a);_0xcfe0x26[_0x58ae[25]](_0xcfe0x29);var _0xcfe0x3c=_0x58ae[122];var _0xcfe0x3d=_0x58ae[123]+_0xcfe0x3c;var _0xcfe0x2=_0xcfe0x8[_0x58ae[13]][_0x58ae[124]]();var _0xcfe0x2b=_0xcfe0x8[_0x58ae[47]](_0x58ae[78]);var _0xcfe0x2c=_0xcfe0x8[_0x58ae[47]](_0x58ae[125]);var _0xcfe0x3e=_0xcfe0x8[_0x58ae[47]](_0x58ae[126]);var _0xcfe0x3f=document[_0x58ae[2]](_0x58ae[127]);_0xcfe0x3f[_0x58ae[29]]=_0x58ae[128];mxUtils[_0x58ae[75]](_0xcfe0x3f,mxResources[_0x58ae[73]](_0xcfe0x3c));_0xcfe0x2c[_0x58ae[25]](_0xcfe0x3f);var _0xcfe0x40=document[_0x58ae[2]](_0x58ae[1]);_0xcfe0x40[_0x58ae[5]](_0x58ae[23],_0xcfe0x2+_0x58ae[134]);_0xcfe0x40[_0x58ae[5]](_0x58ae[130],_0xcfe0x3d);_0xcfe0x40[_0x58ae[29]]=_0x58ae[131];_0xcfe0x3e[_0x58ae[25]](_0xcfe0x40);_0xcfe0x2b[_0x58ae[25]](_0xcfe0x2c);_0xcfe0x2b[_0x58ae[25]](_0xcfe0x3e);_0xcfe0x27[_0x58ae[25]](_0xcfe0x2b);var _0xcfe0x34=mxUtils[_0x58ae[77]](mxResources[_0x58ae[73]](_0x58ae[133]),function(){_0xcfe0x8[_0x58ae[133]](_0xcfe0x40[_0x58ae[23]]);_0xcfe0x8[_0x58ae[76]]()});_0xcfe0x34[_0x58ae[29]]=_0x58ae[101];var _0xcfe0x37=mxUtils[_0x58ae[77]](mxResources[_0x58ae[73]](_0x58ae[102]),function(){_0xcfe0x8[_0x58ae[76]]()});_0xcfe0x37[_0x58ae[29]]=_0x58ae[103];_0xcfe0x28[_0x58ae[25]](_0xcfe0x34);_0xcfe0x28[_0x58ae[25]](_0xcfe0x37);_0xcfe0x25[_0x58ae[25]](_0xcfe0x26);_0xcfe0x25[_0x58ae[25]](_0xcfe0x27);_0xcfe0x25[_0x58ae[25]](_0xcfe0x28);this[_0x58ae[61]]=_0xcfe0x25}function VariableDialog(_0xcfe0x8){var _0xcfe0x25=_0xcfe0x8[_0x58ae[47]](_0x58ae[66]);var _0xcfe0x26=_0xcfe0x8[_0x58ae[47]](_0x58ae[67]);var _0xcfe0x27=_0xcfe0x8[_0x58ae[47]](_0x58ae[68]);var _0xcfe0x28=_0xcfe0x8[_0x58ae[47]](_0x58ae[69]);var _0xcfe0x29=_0xcfe0x8[_0x58ae[71]](_0x58ae[70]);mxUtils[_0x58ae[75]](_0xcfe0x29,mxResources[_0x58ae[73]](_0x58ae[135]));var _0xcfe0x2a=mxUtils[_0x58ae[77]](_0x58ae[37],function(){_0xcfe0x8[_0x58ae[76]]()});_0xcfe0x2a[_0x58ae[29]]=_0x58ae[62];_0xcfe0x26[_0x58ae[25]](_0xcfe0x2a);_0xcfe0x26[_0x58ae[25]](_0xcfe0x29);var _0xcfe0x3c=_0x58ae[122];var _0xcfe0x3d=_0x58ae[123]+_0xcfe0x3c;var _0xcfe0x2=_0xcfe0x8[_0x58ae[13]][_0x58ae[124]]();var _0xcfe0x2b=_0xcfe0x8[_0x58ae[47]](_0x58ae[78]);var _0xcfe0x2c=_0xcfe0x8[_0x58ae[47]](_0x58ae[125]);var _0xcfe0x3e=_0xcfe0x8[_0x58ae[47]](_0x58ae[126]);var _0xcfe0x3f=document[_0x58ae[2]](_0x58ae[127]);_0xcfe0x3f[_0x58ae[29]]=_0x58ae[128];mxUtils[_0x58ae[75]](_0xcfe0x3f,mxResources[_0x58ae[73]](_0xcfe0x3c));_0xcfe0x2c[_0x58ae[25]](_0xcfe0x3f);var _0xcfe0x40=document[_0x58ae[2]](_0x58ae[1]);_0xcfe0x40[_0x58ae[5]](_0x58ae[23],_0x58ae[136]);_0xcfe0x40[_0x58ae[5]](_0x58ae[130],_0xcfe0x3d);_0xcfe0x40[_0x58ae[29]]=_0x58ae[131];_0xcfe0x3e[_0x58ae[25]](_0xcfe0x40);_0xcfe0x2b[_0x58ae[25]](_0xcfe0x2c);_0xcfe0x2b[_0x58ae[25]](_0xcfe0x3e);_0xcfe0x27[_0x58ae[25]](_0xcfe0x2b);var _0xcfe0x34=mxUtils[_0x58ae[77]](mxResources[_0x58ae[73]](_0x58ae[133]),function(){_0xcfe0x8[_0x58ae[135]](_0xcfe0x40[_0x58ae[23]]);_0xcfe0x8[_0x58ae[76]]()});_0xcfe0x34[_0x58ae[29]]=_0x58ae[101];var _0xcfe0x37=mxUtils[_0x58ae[77]](mxResources[_0x58ae[73]](_0x58ae[102]),function(){_0xcfe0x8[_0x58ae[76]]()});_0xcfe0x37[_0x58ae[29]]=_0x58ae[103];_0xcfe0x28[_0x58ae[25]](_0xcfe0x34);_0xcfe0x28[_0x58ae[25]](_0xcfe0x37);_0xcfe0x25[_0x58ae[25]](_0xcfe0x26);_0xcfe0x25[_0x58ae[25]](_0xcfe0x27);_0xcfe0x25[_0x58ae[25]](_0xcfe0x28);this[_0x58ae[61]]=_0xcfe0x25}function OpenDialog(_0xcfe0x8){var _0xcfe0x25=_0xcfe0x8[_0x58ae[47]](_0x58ae[66]);var _0xcfe0x26=_0xcfe0x8[_0x58ae[47]](_0x58ae[67]);var _0xcfe0x27=_0xcfe0x8[_0x58ae[47]](_0x58ae[68]);var _0xcfe0x28=_0xcfe0x8[_0x58ae[47]](_0x58ae[69]);var _0xcfe0x29=_0xcfe0x8[_0x58ae[71]](_0x58ae[70]);mxUtils[_0x58ae[75]](_0xcfe0x29,mxResources[_0x58ae[73]](_0x58ae[8]));var _0xcfe0x2a=mxUtils[_0x58ae[77]](_0x58ae[37],function(){_0xcfe0x8[_0x58ae[76]]()});_0xcfe0x2a[_0x58ae[29]]=_0x58ae[62];_0xcfe0x26[_0x58ae[25]](_0xcfe0x2a);_0xcfe0x26[_0x58ae[25]](_0xcfe0x29);var _0xcfe0x2b=_0xcfe0x8[_0x58ae[47]](_0x58ae[78]);var _0xcfe0x2c=_0xcfe0x8[_0x58ae[47]](_0x58ae[125]);var _0xcfe0x3e=_0xcfe0x8[_0x58ae[47]](_0x58ae[126]);var _0xcfe0x3f=document[_0x58ae[2]](_0x58ae[127]);_0xcfe0x3f[_0x58ae[29]]=_0x58ae[128];mxUtils[_0x58ae[75]](_0xcfe0x3f,mxResources[_0x58ae[73]](_0x58ae[122]));_0xcfe0x2c[_0x58ae[25]](_0xcfe0x3f);var _0xcfe0xa= new XMLHttpRequest();_0xcfe0xa[_0x58ae[8]](_0x58ae[7],_0x58ae[137],false);_0xcfe0xa[_0x58ae[14]](_0x58ae[9],_0x58ae[10]+_0xcfe0x8[_0x58ae[13]][_0x58ae[12]][_0x58ae[11]]);_0xcfe0xa[_0x58ae[15]](null);var _0xcfe0xb=[];if(_0xcfe0xa[_0x58ae[16]]===200){_0xcfe0xb=JSON[_0x58ae[18]](_0xcfe0xa[_0x58ae[17]])};var _0xcfe0x40=document[_0x58ae[2]](_0x58ae[19]);for(var _0xcfe0x44=0;_0xcfe0x44<_0xcfe0xb[_0x58ae[138]];_0xcfe0x44++){var _0xcfe0xc=document[_0x58ae[2]](_0x58ae[20]);_0xcfe0xc[_0x58ae[21]]=_0xcfe0xb[_0xcfe0x44][_0x58ae[122]];_0xcfe0xc[_0x58ae[23]]=_0xcfe0xb[_0xcfe0x44][_0x58ae[130]];_0xcfe0x40[_0x58ae[25]](_0xcfe0xc)};_0xcfe0x40[_0x58ae[29]]=_0x58ae[131];_0xcfe0x3e[_0x58ae[25]](_0xcfe0x40);_0xcfe0x2b[_0x58ae[25]](_0xcfe0x2c);_0xcfe0x2b[_0x58ae[25]](_0xcfe0x3e);_0xcfe0x27[_0x58ae[25]](_0xcfe0x2b);var _0xcfe0x34=mxUtils[_0x58ae[77]](mxResources[_0x58ae[73]](_0x58ae[8]),function(){console[_0x58ae[91]](_0xcfe0x40);console[_0x58ae[91]](_0xcfe0x40[_0x58ae[23]]);window[_0x58ae[8]](_0x58ae[139]+_0xcfe0x40[_0x58ae[23]],_0x58ae[119]);_0xcfe0x8[_0x58ae[76]]()});_0xcfe0x34[_0x58ae[29]]=_0x58ae[101];var _0xcfe0x37=mxUtils[_0x58ae[77]](mxResources[_0x58ae[73]](_0x58ae[102]),function(){_0xcfe0x8[_0x58ae[76]]()});_0xcfe0x37[_0x58ae[29]]=_0x58ae[103];_0xcfe0x28[_0x58ae[25]](_0xcfe0x34);_0xcfe0x28[_0x58ae[25]](_0xcfe0x37);_0xcfe0x25[_0x58ae[25]](_0xcfe0x26);_0xcfe0x25[_0x58ae[25]](_0xcfe0x27);_0xcfe0x25[_0x58ae[25]](_0xcfe0x28);this[_0x58ae[61]]=_0xcfe0x25}function RenameDialog(_0xcfe0x8){var _0xcfe0x25=_0xcfe0x8[_0x58ae[47]](_0x58ae[66]);var _0xcfe0x26=_0xcfe0x8[_0x58ae[47]](_0x58ae[67]);var _0xcfe0x27=_0xcfe0x8[_0x58ae[47]](_0x58ae[68]);var _0xcfe0x28=_0xcfe0x8[_0x58ae[47]](_0x58ae[69]);var _0xcfe0x29=_0xcfe0x8[_0x58ae[71]](_0x58ae[70]);mxUtils[_0x58ae[75]](_0xcfe0x29,mxResources[_0x58ae[73]](_0x58ae[140]));var _0xcfe0x2a=mxUtils[_0x58ae[77]](_0x58ae[37],function(){_0xcfe0x8[_0x58ae[76]]()});_0xcfe0x2a[_0x58ae[29]]=_0x58ae[62];_0xcfe0x26[_0x58ae[25]](_0xcfe0x2a);_0xcfe0x26[_0x58ae[25]](_0xcfe0x29);var _0xcfe0x2b=_0xcfe0x8[_0x58ae[47]](_0x58ae[78]);var _0xcfe0x2c=_0xcfe0x8[_0x58ae[47]](_0x58ae[125]);var _0xcfe0x3e=_0xcfe0x8[_0x58ae[47]](_0x58ae[126]);var _0xcfe0x3f=document[_0x58ae[2]](_0x58ae[127]);_0xcfe0x3f[_0x58ae[29]]=_0x58ae[128];mxUtils[_0x58ae[75]](_0xcfe0x3f,mxResources[_0x58ae[73]](_0x58ae[122]));_0xcfe0x2c[_0x58ae[25]](_0xcfe0x3f);var _0xcfe0x3c=_0xcfe0x8[_0x58ae[13]][_0x58ae[141]];var _0xcfe0x3=document[_0x58ae[2]](_0x58ae[1]);_0xcfe0x3[_0x58ae[5]](_0x58ae[23],_0xcfe0x3c);_0xcfe0x3[_0x58ae[29]]=_0x58ae[131];_0xcfe0x3e[_0x58ae[25]](_0xcfe0x3);_0xcfe0x2b[_0x58ae[25]](_0xcfe0x2c);_0xcfe0x2b[_0x58ae[25]](_0xcfe0x3e);_0xcfe0x27[_0x58ae[25]](_0xcfe0x2b);var _0xcfe0x34=mxUtils[_0x58ae[77]](mxResources[_0x58ae[73]](_0x58ae[132]),function(){var _0xcfe0xa= new XMLHttpRequest();_0xcfe0xa[_0x58ae[8]](_0x58ae[142],SAVE_URL+_0xcfe0x8[_0x58ae[13]][_0x58ae[12]][_0x58ae[130]],true);_0xcfe0xa[_0x58ae[14]](_0x58ae[143],_0x58ae[144]);_0xcfe0xa[_0x58ae[14]](_0x58ae[9],_0x58ae[10]+_0xcfe0x8[_0x58ae[13]][_0x58ae[12]][_0x58ae[11]]);_0xcfe0xa[_0x58ae[15]](_0x58ae[145]+_0xcfe0x3[_0x58ae[23]]);_0xcfe0xa[_0x58ae[92]]=function(_0xcfe0x32){if(_0xcfe0xa[_0x58ae[16]]===200){_0xcfe0x8[_0x58ae[13]][_0x58ae[147]](_0x58ae[146]);_0xcfe0x8[_0x58ae[13]][_0x58ae[141]]=_0xcfe0x3[_0x58ae[23]]}else {_0xcfe0x8[_0x58ae[13]][_0x58ae[147]](JSON[_0x58ae[18]](_0xcfe0xa[_0x58ae[17]])[_0x58ae[149]][0][_0x58ae[148]])}};_0xcfe0xa[_0x58ae[150]]=function(_0xcfe0x32){mxUtils[_0x58ae[152]](_0xcfe0xa[_0x58ae[151]])};_0xcfe0x8[_0x58ae[76]]()});_0xcfe0x34[_0x58ae[29]]=_0x58ae[101];var _0xcfe0x37=mxUtils[_0x58ae[77]](mxResources[_0x58ae[73]](_0x58ae[102]),function(){_0xcfe0x8[_0x58ae[76]]()});_0xcfe0x37[_0x58ae[29]]=_0x58ae[103];_0xcfe0x28[_0x58ae[25]](_0xcfe0x34);_0xcfe0x28[_0x58ae[25]](_0xcfe0x37);_0xcfe0x25[_0x58ae[25]](_0xcfe0x26);_0xcfe0x25[_0x58ae[25]](_0xcfe0x27);_0xcfe0x25[_0x58ae[25]](_0xcfe0x28);this[_0x58ae[61]]=_0xcfe0x25}function EditFileDialog(_0xcfe0x8){var _0xcfe0x25=_0xcfe0x8[_0x58ae[47]](_0x58ae[66]);var _0xcfe0x26=_0xcfe0x8[_0x58ae[47]](_0x58ae[67]);var _0xcfe0x27=_0xcfe0x8[_0x58ae[47]](_0x58ae[68]);var _0xcfe0x28=_0xcfe0x8[_0x58ae[47]](_0x58ae[69]);var _0xcfe0x29=_0xcfe0x8[_0x58ae[71]](_0x58ae[70]);mxUtils[_0x58ae[75]](_0xcfe0x29,mxResources[_0x58ae[73]](_0x58ae[153]));var _0xcfe0x2a=mxUtils[_0x58ae[77]](_0x58ae[37],function(){_0xcfe0x8[_0x58ae[76]]()});_0xcfe0x2a[_0x58ae[29]]=_0x58ae[62];_0xcfe0x26[_0x58ae[25]](_0xcfe0x2a);_0xcfe0x26[_0x58ae[25]](_0xcfe0x29);var _0xcfe0x2b=_0xcfe0x8[_0x58ae[47]](_0x58ae[78]);var _0xcfe0x2c=_0xcfe0x8[_0x58ae[47]](_0x58ae[79]);var _0xcfe0x2d=document[_0x58ae[2]](_0x58ae[80]);_0xcfe0x2d[_0x58ae[50]][_0x58ae[81]]=_0x58ae[82];_0xcfe0x2d[_0x58ae[50]][_0x58ae[83]]=_0x58ae[84];_0xcfe0x2d[_0x58ae[23]]=mxUtils[_0x58ae[155]](_0xcfe0x8[_0x58ae[13]][_0x58ae[154]]());if(fileSupport){function _0xcfe0x47(_0xcfe0x2f){_0xcfe0x2f[_0x58ae[156]]();_0xcfe0x2f[_0x58ae[157]]();if(_0xcfe0x2f[_0x58ae[158]][_0x58ae[89]][_0x58ae[138]]>0){var _0xcfe0x48=_0xcfe0x2f[_0x58ae[158]][_0x58ae[89]][0];var _0xcfe0x49= new FileReader();_0xcfe0x49[_0x58ae[92]]=function(_0xcfe0x32){_0xcfe0x2d[_0x58ae[23]]=_0xcfe0x32[_0x58ae[90]][_0x58ae[93]]};_0xcfe0x49[_0x58ae[94]](_0xcfe0x48)}}function _0xcfe0x4a(_0xcfe0x2f){_0xcfe0x2f[_0x58ae[156]]();_0xcfe0x2f[_0x58ae[157]]()}_0xcfe0x2d[_0x58ae[97]](_0x58ae[159],_0xcfe0x4a,false);_0xcfe0x2d[_0x58ae[97]](_0x58ae[160],_0xcfe0x47,false)};_0xcfe0x2c[_0x58ae[25]](_0xcfe0x2d);_0xcfe0x2b[_0x58ae[25]](_0xcfe0x2c);_0xcfe0x27[_0x58ae[25]](_0xcfe0x2b);var _0xcfe0x34=mxUtils[_0x58ae[77]](mxResources[_0x58ae[73]](_0x58ae[132]),function(){var _0xcfe0x36=mxUtils[_0x58ae[98]](_0xcfe0x2d[_0x58ae[23]]);_0xcfe0x8[_0x58ae[13]][_0x58ae[99]](_0xcfe0x36[_0x58ae[45]]);_0xcfe0x8[_0x58ae[76]]()});_0xcfe0x34[_0x58ae[29]]=_0x58ae[101];var _0xcfe0x37=mxUtils[_0x58ae[77]](mxResources[_0x58ae[73]](_0x58ae[102]),function(){_0xcfe0x8[_0x58ae[76]]()});_0xcfe0x37[_0x58ae[29]]=_0x58ae[103];_0xcfe0x28[_0x58ae[25]](_0xcfe0x34);_0xcfe0x28[_0x58ae[25]](_0xcfe0x37);_0xcfe0x25[_0x58ae[25]](_0xcfe0x26);_0xcfe0x25[_0x58ae[25]](_0xcfe0x27);_0xcfe0x25[_0x58ae[25]](_0xcfe0x28);this[_0x58ae[61]]=_0xcfe0x25}function ExportDialog(_0xcfe0x8){var _0xcfe0x25=_0xcfe0x8[_0x58ae[47]](_0x58ae[66]);var _0xcfe0x26=_0xcfe0x8[_0x58ae[47]](_0x58ae[67]);var _0xcfe0x27=_0xcfe0x8[_0x58ae[47]](_0x58ae[161]);var _0xcfe0x28=_0xcfe0x8[_0x58ae[47]](_0x58ae[69]);var _0xcfe0x29=_0xcfe0x8[_0x58ae[71]](_0x58ae[70]);mxUtils[_0x58ae[75]](_0xcfe0x29,mxResources[_0x58ae[73]](_0x58ae[162])+_0x58ae[74]);var _0xcfe0x2a=mxUtils[_0x58ae[77]](_0x58ae[37],function(){_0xcfe0x8[_0x58ae[76]]()});_0xcfe0x2a[_0x58ae[29]]=_0x58ae[62];_0xcfe0x26[_0x58ae[25]](_0xcfe0x2a);_0xcfe0x26[_0x58ae[25]](_0xcfe0x29);var _0xcfe0x4c=_0xcfe0x8[_0x58ae[47]](_0x58ae[163]);var _0xcfe0x4d=_0xcfe0x8[_0x58ae[47]](_0x58ae[164]);var _0xcfe0x3f=document[_0x58ae[2]](_0x58ae[127]);_0xcfe0x3f[_0x58ae[29]]=_0x58ae[165];mxUtils[_0x58ae[75]](_0xcfe0x3f,mxResources[_0x58ae[73]](_0x58ae[141]));var _0xcfe0x3=document[_0x58ae[2]](_0x58ae[1]);_0xcfe0x3[_0x58ae[5]](_0x58ae[23],_0xcfe0x8[_0x58ae[13]][_0x58ae[124]]());_0xcfe0x3[_0x58ae[29]]=_0x58ae[131];var _0xcfe0x22=_0xcfe0x8[_0x58ae[47]](_0x58ae[166]);_0xcfe0x22[_0x58ae[25]](_0xcfe0x3);_0xcfe0x4d[_0x58ae[25]](_0xcfe0x3f);_0xcfe0x4d[_0x58ae[25]](_0xcfe0x22);_0xcfe0x4c[_0x58ae[25]](_0xcfe0x4d);_0xcfe0x27[_0x58ae[25]](_0xcfe0x4c);var _0xcfe0x34=mxUtils[_0x58ae[77]](mxResources[_0x58ae[73]](_0x58ae[162]),mxUtils[_0x58ae[100]](this,function(_0xcfe0x35){_0xcfe0x8[_0x58ae[132]](false);var _0xcfe0x4e=encodeURIComponent(mxUtils[_0x58ae[167]](_0xcfe0x8[_0x58ae[13]][_0x58ae[154]]())); new mxXmlRequest(SAVE_URL+_0xcfe0x8[_0x58ae[13]][_0x58ae[12]][_0x58ae[130]]+_0x58ae[169],_0x58ae[170]+_0xcfe0x3[_0x58ae[23]],_0x58ae[7])[_0x58ae[168]](document,_0x58ae[119]);_0xcfe0x8[_0x58ae[76]]()}));_0xcfe0x34[_0x58ae[29]]=_0x58ae[101];var _0xcfe0x37=mxUtils[_0x58ae[77]](mxResources[_0x58ae[73]](_0x58ae[102]),function(){_0xcfe0x8[_0x58ae[76]]()});_0xcfe0x37[_0x58ae[29]]=_0x58ae[103];_0xcfe0x28[_0x58ae[25]](_0xcfe0x34);_0xcfe0x28[_0x58ae[25]](_0xcfe0x37);_0xcfe0x25[_0x58ae[25]](_0xcfe0x26);_0xcfe0x25[_0x58ae[25]](_0xcfe0x27);_0xcfe0x25[_0x58ae[25]](_0xcfe0x28);this[_0x58ae[61]]=_0xcfe0x25}function GeneralDialog(_0xcfe0x8,_0xcfe0x50){var _0xcfe0x51=_0xcfe0x8[_0x58ae[13]][_0x58ae[171]];var _0xcfe0x25=_0xcfe0x8[_0x58ae[47]](_0x58ae[66]);var _0xcfe0x26=_0xcfe0x8[_0x58ae[47]](_0x58ae[67]);var _0xcfe0x27=_0xcfe0x8[_0x58ae[47]](_0x58ae[172]);var _0xcfe0x28=_0xcfe0x8[_0x58ae[47]](_0x58ae[69]);var _0xcfe0x29=_0xcfe0x8[_0x58ae[71]](_0x58ae[70]);mxUtils[_0x58ae[75]](_0xcfe0x29,mxResources[_0x58ae[73]](_0x58ae[153])+_0x58ae[173]+mxResources[_0x58ae[73]](_0xcfe0x50[_0x58ae[23]][_0x58ae[174]]));var _0xcfe0x2a=mxUtils[_0x58ae[77]](_0x58ae[37],function(){_0xcfe0x8[_0x58ae[76]]()});_0xcfe0x2a[_0x58ae[29]]=_0x58ae[62];_0xcfe0x26[_0x58ae[25]](_0xcfe0x2a);_0xcfe0x26[_0x58ae[25]](_0xcfe0x29);var _0xcfe0x52=_0xcfe0x8[_0x58ae[47]](_0x58ae[163]);_0xcfe0x52[_0x58ae[5]](_0x58ae[130],_0x58ae[175]);var _0xcfe0x53=_0xcfe0x50[_0x58ae[23]][_0x58ae[176]][_0x58ae[138]];var _0xcfe0x4c=_0xcfe0x8[_0x58ae[47]](_0x58ae[163]);for(var _0xcfe0x54=0;_0xcfe0x54<_0xcfe0x53;_0xcfe0x54++){var _0xcfe0x3c=_0xcfe0x50[_0x58ae[23]][_0x58ae[176]][_0xcfe0x54][_0x58ae[122]];var _0xcfe0x3d=_0x58ae[123]+_0xcfe0x3c;var _0xcfe0x2=_0xcfe0x50[_0x58ae[23]][_0x58ae[176]][_0xcfe0x54][_0x58ae[23]];var _0xcfe0x4d=_0xcfe0x8[_0x58ae[47]]((_0xcfe0x54==_0xcfe0x53-1)?_0x58ae[164]:_0x58ae[177]);var _0xcfe0x3f=document[_0x58ae[2]](_0x58ae[127]);_0xcfe0x3f[_0x58ae[29]]=_0x58ae[165];mxUtils[_0x58ae[75]](_0xcfe0x3f,mxResources[_0x58ae[73]](_0xcfe0x3c));_0xcfe0x4d[_0x58ae[25]](_0xcfe0x3f);var _0xcfe0x3;switch(_0xcfe0x3c){case _0x58ae[179]:_0xcfe0x3=document[_0x58ae[2]](_0x58ae[80]);_0xcfe0x3[_0x58ae[178]]=_0xcfe0x2;_0xcfe0x3[_0x58ae[29]]=_0x58ae[131];break;case _0x58ae[180]:_0xcfe0x3=document[_0x58ae[2]](_0x58ae[80]);_0xcfe0x3[_0x58ae[178]]=_0xcfe0x2;_0xcfe0x3[_0x58ae[29]]=_0x58ae[131];break;case _0x58ae[181]:_0xcfe0x3=document[_0x58ae[2]](_0x58ae[80]);_0xcfe0x3[_0x58ae[178]]=_0xcfe0x2;_0xcfe0x3[_0x58ae[29]]=_0x58ae[131];break;case _0x58ae[184]:_0xcfe0x3=document[_0x58ae[2]](_0x58ae[1]);_0xcfe0x3[_0x58ae[5]](_0x58ae[23],_0xcfe0x2);_0xcfe0x3[_0x58ae[5]](_0x58ae[182],_0x58ae[183]);_0xcfe0x3[_0x58ae[29]]=_0x58ae[131];break;case _0x58ae[187]:var _0xcfe0x3=mxUtils[_0x58ae[77]](_0x58ae[185],function(){var _0xcfe0x55=createDynamicInput(null,null,_0xcfe0x8);_0xcfe0x52[_0x58ae[25]](_0xcfe0x55);_0xcfe0x27[_0x58ae[25]](_0xcfe0x52)});_0xcfe0x3[_0x58ae[29]]=_0x58ae[186];break;default:_0xcfe0x3=document[_0x58ae[2]](_0x58ae[1]);_0xcfe0x3[_0x58ae[5]](_0x58ae[23],_0xcfe0x2);_0xcfe0x3[_0x58ae[29]]=_0x58ae[131];break};_0xcfe0x3[_0x58ae[5]](_0x58ae[130],_0xcfe0x3d);var _0xcfe0x22=_0xcfe0x8[_0x58ae[47]](_0x58ae[166]);_0xcfe0x22[_0x58ae[25]](_0xcfe0x3);if(mxResources[_0x58ae[73]](_0x58ae[188]+_0xcfe0x3c)){var _0xcfe0x56=_0xcfe0x8[_0x58ae[47]](_0x58ae[189]);_0xcfe0x56[_0x58ae[29]]=_0x58ae[190];mxUtils[_0x58ae[75]](_0xcfe0x56,mxResources[_0x58ae[73]](_0x58ae[188]+_0xcfe0x3c));_0xcfe0x22[_0x58ae[25]](_0xcfe0x56)};_0xcfe0x4d[_0x58ae[25]](_0xcfe0x22);_0xcfe0x4c[_0x58ae[25]](_0xcfe0x4d)};_0xcfe0x27[_0x58ae[25]](_0xcfe0x4c);if(_0xcfe0x50[_0x58ae[23]][_0x58ae[174]]==_0x58ae[1]){if(_0xcfe0x50[_0x58ae[191]]){for(var _0xcfe0x44=0;_0xcfe0x44<_0xcfe0x50[_0x58ae[191]][_0x58ae[138]];_0xcfe0x44++){var _0xcfe0x57=_0x58ae[37];var _0xcfe0x58=_0x58ae[37];_[_0x58ae[28]](_0xcfe0x50[_0x58ae[191]][_0xcfe0x44][_0x58ae[23]][_0x58ae[176]],function(_0xcfe0x59){if(_0xcfe0x59[_0x58ae[122]]==_0x58ae[3]){_0xcfe0x57=_0xcfe0x59[_0x58ae[23]]}else {if(_0xcfe0x59[_0x58ae[122]]==_0x58ae[127]){_0xcfe0x58=_0xcfe0x59[_0x58ae[23]]}}});var _0xcfe0x55=createDynamicInput(_0xcfe0x57,_0xcfe0x58,_0xcfe0x8);_0xcfe0x52[_0x58ae[25]](_0xcfe0x55)}}};_0xcfe0x27[_0x58ae[25]](_0xcfe0x52);var _0xcfe0x34=mxUtils[_0x58ae[77]](mxResources[_0x58ae[73]](_0x58ae[132]),mxUtils[_0x58ae[100]](this,function(_0xcfe0x35){for(var _0xcfe0x54=0;_0xcfe0x54<_0xcfe0x50[_0x58ae[23]][_0x58ae[176]][_0x58ae[138]];_0xcfe0x54++){var _0xcfe0x3d=_0x58ae[123]+_0xcfe0x50[_0x58ae[23]][_0x58ae[176]][_0xcfe0x54][_0x58ae[122]];var _0xcfe0x3c=_0xcfe0x50[_0x58ae[23]][_0x58ae[176]][_0xcfe0x54][_0x58ae[122]];console[_0x58ae[91]](_0xcfe0x3c);_0xcfe0x50[_0x58ae[5]](_0xcfe0x3c,document[_0x58ae[192]](_0xcfe0x3d)[_0x58ae[23]]);console[_0x58ae[91]](document[_0x58ae[192]](_0xcfe0x3d)[_0x58ae[23]])};if(_0xcfe0x50[_0x58ae[23]][_0x58ae[174]]==_0x58ae[1]){if(_0xcfe0x51[_0x58ae[194]][_0x58ae[193]](_0xcfe0x50)){_0xcfe0x50[_0x58ae[191]]=[]};if(document[_0x58ae[192]](_0x58ae[175])){var _0xcfe0x52=document[_0x58ae[192]](_0x58ae[175])[_0x58ae[191]];for(var _0xcfe0x44=0;_0xcfe0x44<_0xcfe0x52[_0x58ae[138]];_0xcfe0x44++){var _0xcfe0x5a=_0xcfe0x52[_0xcfe0x44][_0x58ae[191]][1];var _0xcfe0x5b=_0xcfe0x52[_0xcfe0x44][_0x58ae[191]][0];var _0xcfe0x36=mxUtils[_0x58ae[195]]();var _0xcfe0x5c=_0xcfe0x36[_0x58ae[2]](_0x58ae[175]);_0xcfe0x5c[_0x58ae[5]](_0x58ae[3],_0xcfe0x52[_0xcfe0x44][_0x58ae[196]](_0x58ae[19])[0][_0x58ae[23]]);_0xcfe0x5c[_0x58ae[5]](_0x58ae[127],_0xcfe0x52[_0xcfe0x44][_0x58ae[196]](_0x58ae[1])[0][_0x58ae[23]]);var _0xcfe0x5d= new mxCell(_0xcfe0x5c);_0xcfe0x51[_0x58ae[194]][_0x58ae[187]](_0xcfe0x50,_0xcfe0x5d)}}};_0xcfe0x51[_0x58ae[197]](_0xcfe0x50);_0xcfe0x8[_0x58ae[76]]()}));_0xcfe0x34[_0x58ae[29]]=_0x58ae[101];var _0xcfe0x37=mxUtils[_0x58ae[77]](mxResources[_0x58ae[73]](_0x58ae[102]),function(){_0xcfe0x8[_0x58ae[76]]()});_0xcfe0x37[_0x58ae[29]]=_0x58ae[103];_0xcfe0x28[_0x58ae[25]](_0xcfe0x34);_0xcfe0x28[_0x58ae[25]](_0xcfe0x37);_0xcfe0x25[_0x58ae[25]](_0xcfe0x26);_0xcfe0x25[_0x58ae[25]](_0xcfe0x27);_0xcfe0x25[_0x58ae[25]](_0xcfe0x28);this[_0x58ae[61]]=_0xcfe0x25}function createDynamicInput(_0xcfe0x57,_0xcfe0x58,_0xcfe0x8){var _0xcfe0x55=_0xcfe0x8[_0x58ae[47]](_0x58ae[177]);var _0xcfe0x2c=_0xcfe0x8[_0x58ae[47]](_0x58ae[198]);var _0xcfe0x3e=_0xcfe0x8[_0x58ae[47]](_0x58ae[198]);var _0xcfe0x5f=_0xcfe0x8[_0x58ae[47]](_0x58ae[199]);var _0xcfe0x3=document[_0x58ae[2]](_0x58ae[1]);_0xcfe0x3[_0x58ae[5]](_0x58ae[182],_0x58ae[200]);_0xcfe0x3[_0x58ae[23]]=_0xcfe0x58;_0xcfe0x3[_0x58ae[29]]=_0x58ae[131];_0xcfe0x2c[_0x58ae[25]](_0xcfe0x3);var _0xcfe0x40=document[_0x58ae[2]](_0x58ae[19]);var _0xcfe0xc=document[_0x58ae[2]](_0x58ae[20]);_0xcfe0xc[_0x58ae[21]]=_0x58ae[22];_0xcfe0xc[_0x58ae[23]]=_0x58ae[37];_0xcfe0x40[_0x58ae[25]](_0xcfe0xc);var _0xcfe0xd=[_0x58ae[21],_0x58ae[201],_0x58ae[80],_0x58ae[4]];_0xcfe0xd[_0x58ae[28]](function(_0xcfe0xe){_0xcfe0xc=document[_0x58ae[2]](_0x58ae[20]);_0xcfe0xc[_0x58ae[21]]=_0xcfe0xe;_0xcfe0xc[_0x58ae[23]]=_0xcfe0xe;_0xcfe0xc[_0x58ae[27]]=(_0xcfe0xe==_0xcfe0x57);_0xcfe0x40[_0x58ae[25]](_0xcfe0xc)});_0xcfe0x40[_0x58ae[29]]=_0x58ae[131];_0xcfe0x3e[_0x58ae[25]](_0xcfe0x40);var _0xcfe0x60=mxUtils[_0x58ae[77]](_0x58ae[202],function(){var _0xcfe0x61=_0xcfe0x60[_0x58ae[203]];var _0xcfe0x62=_0xcfe0x61[_0x58ae[203]];document[_0x58ae[192]](_0x58ae[175])[_0x58ae[64]](_0xcfe0x62)});_0xcfe0x60[_0x58ae[29]]=_0x58ae[204];_0xcfe0x5f[_0x58ae[25]](_0xcfe0x60);_0xcfe0x55[_0x58ae[25]](_0xcfe0x2c);_0xcfe0x55[_0x58ae[25]](_0xcfe0x3e);_0xcfe0x55[_0x58ae[25]](_0xcfe0x5f);return _0xcfe0x55}
\ No newline at end of file
+'use strict';
+/**
+ * $Id: Dialogs.js,v 1.5 2013-01-29 17:23:31 gaudenz Exp $
+ * Copyright (c) 2006-2012, JGraph Ltd
+ */
+/**
+ * Constructs a new dialog.
+ */
+
+function createCheckbox(value) {
+       var input = document.createElement('input');
+       input.setAttribute('type', 'checkbox');
+       if (value) {
+               input.setAttribute('checked', true);
+       }
+       return input;
+}
+
+function createDropdownFromApi(path, value, option_name, option_value, editorUi, paginated) {
+       var req = new XMLHttpRequest();
+       req.open('GET', path, false); // `false` makes the request synchronous
+       req.setRequestHeader('Authorization', 'Bearer ' + editorUi.editor.data.token);
+       req.send(null);
+       var res = [];
+       if (req.status === 200) {
+               res = JSON.parse(req.response);
+       }
+       var input = document.createElement('select');
+       var option = document.createElement('option');
+       option.text = '-- None --';
+       option.value = '0';
+       input.appendChild(option);
+       var selectValues = paginated ? res.rows : res;
+       selectValues.forEach(function(elem) {
+               option = document.createElement('option');
+               option.text = elem[option_name];
+               option.value = elem[option_value];
+               option.selected = (elem[option_value] == value);
+               input.appendChild(option);
+       });
+       input.className = 'form-control select2';
+
+       return input;
+}
+
+function createGroupedDropdownFromApi(path, value, option_name, option_value, editorUi, paginated, associationField) {
+       var req = new XMLHttpRequest();
+       req.open('GET', path, false); // `false` makes the request synchronous
+       req.setRequestHeader('Authorization', 'Bearer ' + editorUi.editor.data.token);
+       req.send(null);
+       var res = [];
+       if (req.status === 200) {
+               res = JSON.parse(req.response);
+       }
+       var input = document.createElement('select');
+       var option = document.createElement('option');
+       option.text = '-- None --';
+       option.value = '0';
+       input.appendChild(option);
+       var selectValues = paginated ? res.rows : res;
+       var mainFilter = {};
+       var groupFilter = {};
+       mainFilter[associationField] = null;
+       var mainValues = _.filter(selectValues, mainFilter);
+       var groupValues = {};
+       mainValues.forEach(function(elem) {
+               option = document.createElement('option');
+               option.className = 'select-group-father';
+               option.text = elem[option_name].toUpperCase();
+               option.value = elem[option_value];
+               option.selected = (elem[option_value] == value);
+               input.appendChild(option);
+               groupFilter[associationField] = elem[option_value];
+               groupValues = _.filter(selectValues, groupFilter);
+               groupValues.forEach(function(elem) {
+                       option = document.createElement('option');
+                       option.className = 'select-group-son';
+                       option.text = '-' + _.capitalize(elem[option_name]);
+                       option.value = elem[option_value];
+                       option.selected = (elem[option_value] == value);
+                       input.appendChild(option);
+               });
+       })
+       input.className = 'form-control select2';
+
+       return input;
+}
+
+function createDropdownFromArray(array, value) {
+       var input = document.createElement('select');
+
+       for (var item in array) {
+               var option = document.createElement('option');
+               option.text = array[item];
+               option.value = item;
+               if (value > 0 || value != '')
+                       option.selected = (value === item) ? true : false;
+
+               input.appendChild(option);
+       }
+
+       input.className = 'form-control select2';
+
+       return input;
+}
+
+function Dialog(editorUi, elt, w, h, modal, closable, onClose) {
+       var dx = 0;
+
+       if (mxClient.IS_IE && document.documentMode != 9) {
+               dx = 60;
+       }
+
+       w += dx;
+       h += dx;
+
+       var left = Math.max(0, Math.round((document.body.scrollWidth - w) / 2));
+       var top = Math.max(0, Math.round((Math.max(document.body.scrollHeight,
+               document.documentElement.scrollHeight) - h) / 3));
+
+       var div = editorUi.createDiv('geDialog');
+       div.className = 'modal fade in center';
+       div.style.display = 'block';
+       div.style.paddingRight = '12px';
+       // div.style.width = w + 'px';
+       // div.style.height = h + 'px';
+       // div.style.left = left + 'px';
+       // div.style.top = top + 'px';
+
+       var divModalDialog = editorUi.createDiv('geModalDialog');
+       divModalDialog.className = 'modal-dialog';
+       divModalDialog.appendChild(elt);
+       div.appendChild(divModalDialog);
+
+       if (this.bg == null) {
+               this.bg = editorUi.createDiv('background');
+               this.bg.className = 'modal-backdrop fade in';
+
+               if (mxClient.IS_QUIRKS) {
+                       new mxDivResizer(this.bg);
+               }
+       }
+
+       if (modal) {
+               document.body.appendChild(this.bg);
+       }
+
+       document.body.appendChild(div);
+
+       this.onDialogClose = onClose;
+       this.container = div;
+};
+
+/**
+ * Removes the dialog from the DOM.
+ */
+Dialog.prototype.close = function() {
+       if (this.onDialogClose != null) {
+               this.onDialogClose();
+               this.onDialogClose = null;
+       }
+
+       this.container.parentNode.removeChild(this.container);
+       this.bg.parentNode.removeChild(this.bg);
+};
+
+/**
+ * Constructs a new open dialog.
+ */
+function ImportDialog(editorUi) {
+
+       var content = editorUi.createDiv('modal-content');
+       var header = editorUi.createDiv('modal-header');
+       var body = editorUi.createDiv('modal-body');
+       var footer = editorUi.createDiv('modal-footer');
+
+       //--- START HEADER
+       var title = editorUi.createHeader('h4');
+       mxUtils.write(title, mxResources.get('import') + ' XML');
+
+       var x = mxUtils.button('', function() {
+               editorUi.hideDialog();
+       });
+       x.className = 'close';
+
+       header.appendChild(x);
+       header.appendChild(title);
+       //--- END HEADER
+
+       //--- START BODY
+       var row = editorUi.createDiv('row');
+       var col1 = editorUi.createDiv('col-md-12');
+
+       var textarea = document.createElement('textarea');
+       textarea.style.width = '100%';
+       textarea.style.height = '374px';
+
+       var input = document.createElement('input');
+       input.type = 'file';
+       input.setAttribute('accept', 'text/xml');
+
+       input.addEventListener('change', function readSingleFile(evt) {
+               //Retrieve the first (and only!) File from the FileList object
+               var f = evt.target.files[0];
+               console.log(f);
+               if (f) {
+                       if (f.type === 'text/xml') {
+                               var r = new FileReader();
+                               r.onload = function(e) {
+                                       var contents = e.target.result;
+                                       mxUtils.write(textarea, contents);
+                               };
+                               r.readAsText(f);
+                       } else {
+                               alert('Failed to load format file');
+                       }
+               } else {
+                       alert('Failed to load file');
+               }
+       }, false);
+
+       col1.appendChild(input);
+       col1.appendChild(textarea);
+
+       row.appendChild(col1);
+       body.appendChild(row);
+       //--- END BODY
+
+       //--- START FOOTER
+       var save = mxUtils.button(mxResources.get('import'), mxUtils.bind(this,
+               function(data) {
+                       var doc = mxUtils.parseXml(textarea.value);
+                       editorUi.editor.setGraphXml(doc.documentElement);
+                       editorUi.hideDialog();
+               }));
+       save.className = 'btn blue';
+
+       var close = mxUtils.button(mxResources.get('cancel'), function() {
+               editorUi.hideDialog();
+       });
+       close.className = 'btn default';
+
+       footer.appendChild(save);
+       footer.appendChild(close);
+       //--- END FOOTER
+
+       //--- START CONTENT
+       content.appendChild(header);
+       content.appendChild(body);
+       content.appendChild(footer);
+       //--- END CONTENT
+
+       this.container = content;
+
+};
+
+/**
+ * Constructs a new about dialog.
+ */
+function AboutDialog(editorUi) {
+       var content = editorUi.createDiv('modal-content');
+       var header = editorUi.createDiv('modal-header');
+       var body = editorUi.createDiv('modal-body');
+       var footer = editorUi.createDiv('modal-footer');
+
+       //--- START HEADER
+       var title = editorUi.createHeader('h4');
+       mxUtils.write(title, mxResources.get('about') + ' Cally Square');
+
+       var x = mxUtils.button('', function() {
+               editorUi.hideDialog();
+       });
+       x.className = 'close';
+
+       header.appendChild(x);
+       header.appendChild(title);
+       //--- END HEADER
+
+       //--- START BODY
+       var img = document.createElement('img');
+       img.style.border = '0px';
+       img.setAttribute('width', '176');
+       img.setAttribute('width', '151');
+       img.setAttribute('src', IMAGE_PATH + '/logo.png');
+       body.appendChild(img);
+       mxUtils.br(body);
+       mxUtils.write(body, 'Powered by Xenialab ' + mxClient.VERSION);
+       mxUtils.br(body);
+       var link = document.createElement('a');
+       link.setAttribute('href', 'http://www.callysquare.com/');
+       link.setAttribute('target', '_blank');
+       mxUtils.write(link, 'www.callysquare.com');
+       body.appendChild(link);
+       mxUtils.br(body);
+       mxUtils.br(body);
+       //--- END BODY
+
+       var close = mxUtils.button(mxResources.get('close'), function() {
+               editorUi.hideDialog();
+       });
+       close.className = 'btn default';
+
+       footer.appendChild(close);
+       //--- END FOOTER
+
+       //--- START CONTENT
+       content.appendChild(header);
+       content.appendChild(body);
+       content.appendChild(footer);
+       //--- END CONTENT
+
+       this.container = content;
+};
+
+/**
+ * Constructs a new save dialog.
+ */
+function SaveDialog(editorUi) {
+
+       var content = editorUi.createDiv('modal-content');
+       var header = editorUi.createDiv('modal-header');
+       var body = editorUi.createDiv('modal-body');
+       var footer = editorUi.createDiv('modal-footer');
+
+       //--- START HEADER
+       var title = editorUi.createHeader('h4');
+       mxUtils.write(title, mxResources.get('saveAs'));
+
+       var x = mxUtils.button('', function() {
+               editorUi.hideDialog();
+       });
+       x.className = 'close';
+
+       header.appendChild(x);
+       header.appendChild(title);
+       //--- END HEADER
+
+       //--- START BODY
+       var name = 'name';
+       var id = '_' + name;
+       var value = editorUi.editor.getOrCreateFilename();
+
+       var row = editorUi.createDiv('row');
+       var col1 = editorUi.createDiv('col-md-4');
+       var col2 = editorUi.createDiv('col-md-8');
+
+       var label = document.createElement('label');
+       label.className = 'control-label pull-right';
+       mxUtils.write(label, mxResources.get(name));
+       col1.appendChild(label);
+
+       var select = document.createElement('input');
+       select.setAttribute('value', value + '_copy');
+       select.setAttribute('id', id)
+       select.className = 'form-control';
+       col2.appendChild(select);
+
+       row.appendChild(col1);
+       row.appendChild(col2);
+       body.appendChild(row);
+       //--- END BODY
+
+       //--- START FOOTER
+       var save = mxUtils.button(mxResources.get('save'), function() {
+               editorUi.saveAs(select.value);
+               editorUi.hideDialog();
+       });
+       save.className = 'btn blue';
+
+       var close = mxUtils.button(mxResources.get('cancel'), function() {
+               editorUi.hideDialog();
+       });
+       close.className = 'btn default';
+
+       footer.appendChild(save);
+       footer.appendChild(close);
+       //--- END FOOTER
+
+       //--- START CONTENT
+       content.appendChild(header);
+       content.appendChild(body);
+       content.appendChild(footer);
+       //--- END CONTENT
+
+       this.container = content;
+       //nameInput.setAttribute('value', editorUi.editor.getOrCreateFilename());
+};
+
+/**
+ * Constructs a new save dialog.
+ */
+function NewDialog(editorUi) {
+
+       var content = editorUi.createDiv('modal-content');
+       var header = editorUi.createDiv('modal-header');
+       var body = editorUi.createDiv('modal-body');
+       var footer = editorUi.createDiv('modal-footer');
+
+       //--- START HEADER
+       var title = editorUi.createHeader('h4');
+       mxUtils.write(title, mxResources.get('new'));
+
+       var x = mxUtils.button('', function() {
+               editorUi.hideDialog();
+       });
+       x.className = 'close';
+
+       header.appendChild(x);
+       header.appendChild(title);
+       //--- END HEADER
+
+       //--- START BODY
+       var name = 'name';
+       var id = '_' + name;
+       var value = editorUi.editor.getOrCreateFilename();
+
+       var row = editorUi.createDiv('row');
+       var col1 = editorUi.createDiv('col-md-4');
+       var col2 = editorUi.createDiv('col-md-8');
+
+       var label = document.createElement('label');
+       label.className = 'control-label pull-right';
+       mxUtils.write(label, mxResources.get(name));
+       col1.appendChild(label);
+
+       var select = document.createElement('input');
+       select.setAttribute('value', value + '_new');
+       select.setAttribute('id', id)
+       select.className = 'form-control';
+       col2.appendChild(select);
+
+       row.appendChild(col1);
+       row.appendChild(col2);
+       body.appendChild(row);
+       //--- END BODY
+
+       //--- START FOOTER
+       var save = mxUtils.button(mxResources.get('new'), function() {
+               editorUi.new(select.value);
+               editorUi.hideDialog();
+       });
+       save.className = 'btn blue';
+
+       var close = mxUtils.button(mxResources.get('cancel'), function() {
+               editorUi.hideDialog();
+       });
+       close.className = 'btn default';
+
+       footer.appendChild(save);
+       footer.appendChild(close);
+       //--- END FOOTER
+
+       //--- START CONTENT
+       content.appendChild(header);
+       content.appendChild(body);
+       content.appendChild(footer);
+       //--- END CONTENT
+
+       this.container = content;
+       //nameInput.setAttribute('value', editorUi.editor.getOrCreateFilename());
+};
+
+/**
+ * Constructs a new save dialog.
+ */
+function VariableDialog(editorUi) {
+
+       var content = editorUi.createDiv('modal-content');
+       var header = editorUi.createDiv('modal-header');
+       var body = editorUi.createDiv('modal-body');
+       var footer = editorUi.createDiv('modal-footer');
+
+       //--- START HEADER
+       var title = editorUi.createHeader('h4');
+       mxUtils.write(title, mxResources.get('variable'));
+
+       var x = mxUtils.button('', function() {
+               editorUi.hideDialog();
+       });
+       x.className = 'close';
+
+       header.appendChild(x);
+       header.appendChild(title);
+       //--- END HEADER
+
+       //--- START BODY
+       var name = 'name';
+       var id = '_' + name;
+       var value = editorUi.editor.getOrCreateFilename();
+
+       var row = editorUi.createDiv('row');
+       var col1 = editorUi.createDiv('col-md-4');
+       var col2 = editorUi.createDiv('col-md-8');
+
+       var label = document.createElement('label');
+       label.className = 'control-label pull-right';
+       mxUtils.write(label, mxResources.get(name));
+       col1.appendChild(label);
+
+       var select = document.createElement('input');
+       select.setAttribute('value', 'variable name');
+       select.setAttribute('id', id)
+       select.className = 'form-control';
+       col2.appendChild(select);
+
+       row.appendChild(col1);
+       row.appendChild(col2);
+       body.appendChild(row);
+       //--- END BODY
+
+       //--- START FOOTER
+       var save = mxUtils.button(mxResources.get('new'), function() {
+               editorUi.variable(select.value);
+               editorUi.hideDialog();
+       });
+       save.className = 'btn blue';
+
+       var close = mxUtils.button(mxResources.get('cancel'), function() {
+               editorUi.hideDialog();
+       });
+       close.className = 'btn default';
+
+       footer.appendChild(save);
+       footer.appendChild(close);
+       //--- END FOOTER
+
+       //--- START CONTENT
+       content.appendChild(header);
+       content.appendChild(body);
+       content.appendChild(footer);
+       //--- END CONTENT
+
+       this.container = content;
+       //nameInput.setAttribute('value', editorUi.editor.getOrCreateFilename());
+};
+
+/**
+ * Constructs a new save dialog.
+ */
+function OpenDialog(editorUi) {
+
+       var content = editorUi.createDiv('modal-content');
+       var header = editorUi.createDiv('modal-header');
+       var body = editorUi.createDiv('modal-body');
+       var footer = editorUi.createDiv('modal-footer');
+
+       //--- START HEADER
+       var title = editorUi.createHeader('h4');
+       mxUtils.write(title, mxResources.get('open'));
+
+       var x = mxUtils.button('', function() {
+               editorUi.hideDialog();
+       });
+       x.className = 'close';
+
+       header.appendChild(x);
+       header.appendChild(title);
+       //--- END HEADER
+
+       //--- START BODY
+       var row = editorUi.createDiv('row');
+       var col1 = editorUi.createDiv('col-md-4');
+       var col2 = editorUi.createDiv('col-md-8');
+
+       var label = document.createElement('label');
+       label.className = 'control-label pull-right';
+       mxUtils.write(label, mxResources.get('name'));
+       col1.appendChild(label);
+
+       var req = new XMLHttpRequest();
+       req.open('GET', '/api/jscripty/projects', false); // `false` makes the request synchronous
+       req.setRequestHeader('Authorization', 'Bearer ' + editorUi.editor.data.token);
+       req.send(null);
+       var res = [];
+       if (req.status === 200) {
+               res = JSON.parse(req.response);
+       }
+
+       var select = document.createElement('select');
+
+       for (var j = 0; j < res.length; j++) {
+               var option = document.createElement('option');
+               option.text = res[j].name;
+               option.value = res[j].id;
+               select.appendChild(option);
+       }
+       select.className = 'form-control';
+       col2.appendChild(select);
+
+       row.appendChild(col1);
+       row.appendChild(col2);
+       body.appendChild(row);
+       //--- END BODY
+
+       //--- START FOOTER
+       var save = mxUtils.button(mxResources.get('open'), function() {
+               console.log(select);
+               console.log(select.value);
+               window.open('jscripty/project/' + select.value, '_blank');
+               editorUi.hideDialog();
+       });
+       save.className = 'btn blue';
+
+       var close = mxUtils.button(mxResources.get('cancel'), function() {
+               editorUi.hideDialog();
+       });
+       close.className = 'btn default';
+
+       footer.appendChild(save);
+       footer.appendChild(close);
+       //--- END FOOTER
+
+       //--- START CONTENT
+       content.appendChild(header);
+       content.appendChild(body);
+       content.appendChild(footer);
+       //--- END CONTENT
+
+       this.container = content;
+       //nameInput.setAttribute('value', editorUi.editor.getOrCreateFilename());
+};
+
+/**
+ * Constructs a new rename dialog.
+ */
+function RenameDialog(editorUi) {
+
+       var content = editorUi.createDiv('modal-content');
+       var header = editorUi.createDiv('modal-header');
+       var body = editorUi.createDiv('modal-body');
+       var footer = editorUi.createDiv('modal-footer');
+
+       //--- START HEADER
+       var title = editorUi.createHeader('h4');
+       mxUtils.write(title, mxResources.get('rename'));
+
+       var x = mxUtils.button('', function() {
+               editorUi.hideDialog();
+       });
+       x.className = 'close';
+
+       header.appendChild(x);
+       header.appendChild(title);
+       //--- END HEADER
+
+       //--- START BODY
+       var row = editorUi.createDiv('row');
+       var col1 = editorUi.createDiv('col-md-4');
+       var col2 = editorUi.createDiv('col-md-8');
+
+       var label = document.createElement('label');
+       label.className = 'control-label pull-right';
+       mxUtils.write(label, mxResources.get('name'));
+       col1.appendChild(label);
+       var name = editorUi.editor.filename;
+       var input = document.createElement('input');
+       input.setAttribute('value', name);
+       input.className = 'form-control';
+
+       col2.appendChild(input);
+
+       row.appendChild(col1);
+       row.appendChild(col2);
+       body.appendChild(row);
+       //--- END BODY
+
+       //--- START FOOTER
+       var save = mxUtils.button(mxResources.get('save'), function() {
+               var req = new XMLHttpRequest();
+
+               req.open("PUT", SAVE_URL + editorUi.editor.data.id, true);
+               req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
+               req.setRequestHeader('Authorization', 'Bearer ' + editorUi.editor.data.token);
+               req.send('name=' + input.value);
+
+               req.onload = function(e) {
+                       if (req.status === 200) {
+                               editorUi.editor.setStatus('Project successfully renamed');
+                               editorUi.editor.filename = input.value;
+
+                       } else {
+                               editorUi.editor.setStatus(JSON.parse(req.response).errors[0].message)
+                       }
+               }
+               req.onerror = function(e) {
+                       mxUtils.alert(req.statusText);
+               };
+               editorUi.hideDialog();
+       });
+       save.className = 'btn blue';
+
+       var close = mxUtils.button(mxResources.get('cancel'), function() {
+               editorUi.hideDialog();
+       });
+       close.className = 'btn default';
+
+       footer.appendChild(save);
+       footer.appendChild(close);
+       //--- END FOOTER
+
+       //--- START CONTENT
+       content.appendChild(header);
+       content.appendChild(body);
+       content.appendChild(footer);
+       //--- END CONTENT
+
+       this.container = content;
+       //nameInput.setAttribute('value', editorUi.editor.getOrCreateFilename());
+};
+/**
+ * Constructs a new edit file dialog.
+ */
+function EditFileDialog(editorUi) {
+
+       var content = editorUi.createDiv('modal-content');
+       var header = editorUi.createDiv('modal-header');
+       var body = editorUi.createDiv('modal-body');
+       var footer = editorUi.createDiv('modal-footer');
+
+       //--- START HEADER
+       var title = editorUi.createHeader('h4');
+       mxUtils.write(title, mxResources.get('edit'));
+
+       var x = mxUtils.button('', function() {
+               editorUi.hideDialog();
+       });
+       x.className = 'close';
+
+       header.appendChild(x);
+       header.appendChild(title);
+       //--- END HEADER
+
+       //--- START BODY
+       var row = editorUi.createDiv('row');
+       var col1 = editorUi.createDiv('col-md-12');
+
+       var textarea = document.createElement('textarea');
+       textarea.style.width = '100%';
+       textarea.style.height = '374px';
+       textarea.value = mxUtils.getPrettyXml(editorUi.editor.getGraphXml());
+
+       // Enables dropping files
+       if (fileSupport) {
+               function handleDrop(evt) {
+                       evt.stopPropagation();
+                       evt.preventDefault();
+
+                       if (evt.dataTransfer.files.length > 0) {
+                               var file = evt.dataTransfer.files[0];
+
+                               var reader = new FileReader();
+                               reader.onload = function(e) {
+                                       textarea.value = e.target.result;
+                               };
+                               reader.readAsText(file);
+                       }
+               };
+
+               function handleDragOver(evt) {
+                       evt.stopPropagation();
+                       evt.preventDefault();
+               };
+
+               // Setup the dnd listeners.
+               textarea.addEventListener('dragover', handleDragOver, false);
+               textarea.addEventListener('drop', handleDrop, false);
+       }
+       col1.appendChild(textarea);
+
+       row.appendChild(col1);
+       body.appendChild(row);
+       //--- END BODY
+
+       //--- START FOOTER
+       var save = mxUtils.button(mxResources.get('save'), function() {
+               var doc = mxUtils.parseXml(textarea.value);
+               editorUi.editor.setGraphXml(doc.documentElement);
+               editorUi.hideDialog();
+       });
+       save.className = 'btn blue';
+
+       var close = mxUtils.button(mxResources.get('cancel'), function() {
+               editorUi.hideDialog();
+       });
+       close.className = 'btn default';
+
+       footer.appendChild(save);
+       footer.appendChild(close);
+       //--- END FOOTER
+
+       //--- START CONTENT
+       content.appendChild(header);
+       content.appendChild(body);
+       content.appendChild(footer);
+       //--- END CONTENT
+
+       this.container = content;
+};
+
+/**
+ * Constructs a new export dialog.
+ */
+function ExportDialog(editorUi) {
+       var content = editorUi.createDiv('modal-content');
+       var header = editorUi.createDiv('modal-header');
+       var body = editorUi.createDiv('modal-body form');
+       var footer = editorUi.createDiv('modal-footer');
+
+       //--- START HEADER
+       var title = editorUi.createHeader('h4');
+       mxUtils.write(title, mxResources.get('export') + ' XML');
+
+       var x = mxUtils.button('', function() {
+               editorUi.hideDialog();
+       });
+       x.className = 'close';
+
+       header.appendChild(x);
+       header.appendChild(title);
+       //--- END HEADER
+
+       //--- START BODY
+       var form = editorUi.createDiv('form-horizontal form-row-seperated');
+       var group = editorUi.createDiv('form-group last');
+
+       var label = document.createElement('label');
+       label.className = 'col-sm-4 control-label';
+       mxUtils.write(label, mxResources.get('filename'));
+
+       var input = document.createElement('input');
+       input.setAttribute('value', editorUi.editor.getOrCreateFilename());
+       input.className = 'form-control';
+
+       var div = editorUi.createDiv('col-sm-8');
+       div.appendChild(input);
+
+       group.appendChild(label);
+       group.appendChild(div);
+       form.appendChild(group);
+
+       body.appendChild(form);
+       //--- END BODY
+
+       //--- START FOOTER
+       var save = mxUtils.button(mxResources.get('export'), mxUtils.bind(this,
+               function(data) {
+                       editorUi.save(false);
+
+                       var xml = encodeURIComponent(mxUtils.getXml(editorUi.editor.getGraphXml()));
+                       new mxXmlRequest(SAVE_URL + editorUi.editor.data.id + '/download',
+                               'filename=' + input.value, 'GET').simulate(document, "_blank");
+                       editorUi.hideDialog();
+               }));
+       save.className = 'btn blue';
+
+       var close = mxUtils.button(mxResources.get('cancel'), function() {
+               editorUi.hideDialog();
+       });
+       close.className = 'btn default';
+
+       footer.appendChild(save);
+       footer.appendChild(close);
+       //--- END FOOTER
+
+       //--- START CONTENT
+       content.appendChild(header);
+       content.appendChild(body);
+       content.appendChild(footer);
+       //--- END CONTENT
+
+       this.container = content;
+};
+
+/**
+ * Giuseppe Careri
+ * Constructs a new general dialog.
+ */
+
+function GeneralDialog(editorUi, cell) {
+       var graph = editorUi.editor.graph;
+
+       var content = editorUi.createDiv('modal-content');
+       var header = editorUi.createDiv('modal-header');
+       var body = editorUi.createDiv('modal-body form modal-body-scroll');
+       var footer = editorUi.createDiv('modal-footer');
+       //--- START HEADER
+       var title = editorUi.createHeader('h4');
+       mxUtils.write(title, mxResources.get('edit') + ' ' + mxResources.get(cell.value
+               .nodeName));
+
+       var x = mxUtils.button('', function() {
+               editorUi.hideDialog();
+       });
+       x.className = 'close';
+
+       header.appendChild(x);
+       header.appendChild(title);
+       //--- END HEADER
+
+       //--- START BODY
+       var inputGroup = editorUi.createDiv('form-horizontal form-row-seperated');
+       inputGroup.setAttribute('id', 'inputGroup');
+       var length = cell.value.attributes.length;
+       var form = editorUi.createDiv('form-horizontal form-row-seperated');
+
+       for (var i = 0; i < length; i++) {
+               var name = cell.value.attributes[i].name;
+               var id = '_' + name;
+               var value = cell.value.attributes[i].value;
+
+               var group = editorUi.createDiv((i == length - 1) ? 'form-group last' :
+                       'form-group');
+
+               var label = document.createElement('label');
+               label.className = 'col-sm-4 control-label';
+               mxUtils.write(label, mxResources.get(name));
+               group.appendChild(label);
+
+               var input;
+
+               switch (name) {
+
+                       case 'Text':
+                               input = document.createElement('textarea');
+                               input.innerHTML = value;
+                               input.className = 'form-control';
+                               break;
+                       case 'Body':
+                               input = document.createElement('textarea');
+                               input.innerHTML = value;
+                               input.className = 'form-control';
+                               break;
+                       case 'question':
+                               input = document.createElement('textarea');
+                               input.innerHTML = value;
+                               input.className = 'form-control';
+
+                               break;
+                       case 'other':
+                               input = document.createElement('input');
+                               input.setAttribute('value', value);
+                               input.setAttribute('placeholder', 'Insert label for "Other" answer option');
+                               input.className = 'form-control';
+                               break;
+                               // case 'addtext':
+                               //      var input = document.createElement('input');
+                               //      input.setAttribute('type', 'checkbox');
+                               //      console.log('value', value);
+                               //      if (value == 'true') {
+                               //              input.setAttribute('checked', true);
+                               //
+                               //      } else {
+                               //              input.removeAttribute("checked");
+                               //
+                               //      }
+                               //      // input.value = input.checked;
+                               //
+                               //      input.onclick = function() {
+                               //              this.value = this.checked;
+                               //
+                               //              console.log(input);
+                               //              if (this.checked) {
+                               //                      console.log(this.checked);
+                               //                      var rowdiv = editorUi.createDiv('form-group');
+                               //                      rowdiv.setAttribute('id', 'rowdiv');
+                               //                      var col1 = editorUi.createDiv('col-md-4');
+                               //                      var col2 = editorUi.createDiv('col-md-8');
+                               //                      var label = document.createElement('label');
+                               //                      // input.setAttribute('placeholder', 'Insert label');
+                               //                      label.className = 'pull-right control-label';
+                               //                      mxUtils.write(label, 'Texarea Label');
+                               //                      col1.appendChild(label);
+                               //                      var input = document.createElement('input');
+                               //                      // input.setAttribute('placeholder', 'Insert label');
+                               //                      // input.value = inputValue;
+                               //                      input.className = 'form-control';
+                               //                      col2.appendChild(input);
+                               //                      rowdiv.appendChild(col1);
+                               //                      rowdiv.appendChild(col2);
+                               //                      inputGroup.appendChild(rowdiv);
+                               //                      body.appendChild(inputGroup);
+                               //              } else {
+                               //                      console.log(this.checked);
+                               //                      document.getElementById('inputGroup').removeChild(document.getElementById('rowdiv'));
+                               //              }
+                               //      };
+                               //
+                               //
+                               //      input.className = 'btn green';
+                               //      break;
+                       case 'add':
+                               var input = mxUtils.button('+', function() {
+                                       var rowdiv = createDynamicInput(null, null, editorUi);
+                                       inputGroup.appendChild(rowdiv);
+                                       body.appendChild(inputGroup);
+                               })
+
+                               input.className = 'btn green';
+                               break;
+                       default:
+                               input = document.createElement('input');
+                               input.setAttribute('value', value);
+                               input.className = 'form-control';
+                               break;
+               }
+
+               input.setAttribute('id', id)
+               var div = editorUi.createDiv('col-sm-8');
+               div.appendChild(input);
+               // Help
+               if (mxResources.get('help_' + name)) {
+                       var help = editorUi.createDiv('p');
+                       help.className = 'help-block';
+                       mxUtils.write(help, mxResources.get('help_' + name));
+                       div.appendChild(help);
+               }
+
+               group.appendChild(div);
+               form.appendChild(group);
+       }
+       body.appendChild(form);
+       // console.log(cell);
+       if (cell.value.nodeName == 'input') {
+
+               if (cell.children) {
+                       for (var j = 0; j < cell.children.length; j++) {
+                               var selectValue = '';
+                               var inputValue = '';
+                               _.forEach(cell.children[j].value.attributes, function(element) {
+                                       // console.log(element);
+                                       if (element.name == 'type') {
+                                               selectValue = element.value;
+
+                                       } else if (element.name == 'label') {
+                                               inputValue = element.value;
+
+                                       }
+                               })
+                               var rowdiv = createDynamicInput(selectValue, inputValue, editorUi);
+                               inputGroup.appendChild(rowdiv);
+
+                       }
+               }
+
+       }
+       body.appendChild(inputGroup);
+
+       //--- END BODY
+
+       //--- START FOOTER
+       var save = mxUtils.button(mxResources.get('save'), mxUtils.bind(this,
+               function(data) {
+                       for (var i = 0; i < cell.value.attributes.length; i++) {
+                               var id = '_' + cell.value.attributes[i].name;
+                               var name = cell.value.attributes[i].name;
+                               console.log(name);
+
+                               cell.setAttribute(name, document.getElementById(id).value);
+                               console.log(document.getElementById(id).value);
+
+
+                       };
+
+                       if (cell.value.nodeName == 'input') {
+                               if (graph.model.getChildCount(cell)) {
+                                       cell.children = [];
+                               }
+                               if (document.getElementById('inputGroup')) {
+                                       var inputGroup = document.getElementById('inputGroup').children;
+                                       for (var j = 0; j < inputGroup.length; j++) {
+
+                                               var divSelect = inputGroup[j].children[1];
+                                               var divInput = inputGroup[j].children[0];
+                                               var doc = mxUtils.createXmlDocument();
+                                               var node = doc.createElement('inputGroup');
+                                               node.setAttribute('type', inputGroup[j].getElementsByTagName('select')[0].value);
+                                               node.setAttribute('label', inputGroup[j].getElementsByTagName('input')[0].value);
+                                               var cells = new mxCell(node);
+                                               graph.model.add(cell, cells);
+                                       }
+                               }
+                       }
+
+                       graph.refresh(cell);
+                       editorUi.hideDialog();
+               }));
+       save.className = 'btn blue';
+
+       var close = mxUtils.button(mxResources.get('cancel'), function() {
+               editorUi.hideDialog();
+       });
+       close.className = 'btn default';
+
+       footer.appendChild(save);
+       footer.appendChild(close);
+       //--- END FOOTER
+
+       //--- START CONTENT
+       content.appendChild(header);
+       content.appendChild(body);
+       content.appendChild(footer);
+       //--- END CONTENT
+
+       this.container = content;
+};
+
+
+
+function createDynamicInput(selectValue, inputValue, editorUi) {
+
+       var rowdiv = editorUi.createDiv('form-group');
+       var col1 = editorUi.createDiv('col-md-5');
+       var col2 = editorUi.createDiv('col-md-5');
+       var col3 = editorUi.createDiv('col-md-2');
+
+       var input = document.createElement('input');
+       input.setAttribute('placeholder', 'Insert label');
+       input.value = inputValue;
+       input.className = 'form-control';
+       col1.appendChild(input);
+
+       var select = document.createElement('select');
+       var option = document.createElement('option');
+       option.text = '-- None --';
+       option.value = '';
+       select.appendChild(option);
+
+       var selectValues = ['text', 'number', 'textarea', 'checkbox'];
+       selectValues.forEach(function(elem) {
+               option = document.createElement('option');
+               option.text = elem;
+               option.value = elem;
+               option.selected = (elem == selectValue);
+               select.appendChild(option);
+       })
+       select.className = 'form-control';
+       col2.appendChild(select);
+       var button = mxUtils.button('x', function() {
+               var buttonParent = button.parentElement;
+               var divParent = buttonParent.parentElement;
+               document.getElementById('inputGroup').removeChild(divParent);
+       })
+
+       button.className = 'btn red';
+       col3.appendChild(button);
+       rowdiv.appendChild(col1);
+       rowdiv.appendChild(col2);
+       rowdiv.appendChild(col3);
+       return rowdiv;
+
+
+}
index d69ea21..9858989 100644 (file)
@@ -1 +1,888 @@
-var _0xa55e=["\x49\x53\x5F\x54\x4F\x55\x43\x48","\x73\x74\x6F\x72\x61\x67\x65","\x6C\x6F\x63\x61\x6C","\x75\x6E\x64\x65\x66\x69\x6E\x65\x64","\x46\x69\x6C\x65","\x46\x69\x6C\x65\x52\x65\x61\x64\x65\x72","\x46\x69\x6C\x65\x4C\x69\x73\x74","\x74\x6F\x75\x63\x68","\x31","\x6F\x70\x65\x6E\x65\x72","\x63\x6F\x75\x6E\x74\x65\x72","\x63\x61\x6C\x6C","\x69\x6E\x69\x74","\x69\x6E\x69\x74\x53\x74\x65\x6E\x63\x69\x6C\x52\x65\x67\x69\x73\x74\x72\x79","\x67\x72\x61\x70\x68","\x6F\x75\x74\x6C\x69\x6E\x65","\x75\x70\x64\x61\x74\x65\x4F\x6E\x50\x61\x6E","\x75\x6E\x64\x6F\x4D\x61\x6E\x61\x67\x65\x72","\x63\x72\x65\x61\x74\x65\x55\x6E\x64\x6F\x4D\x61\x6E\x61\x67\x65\x72","\x73\x74\x61\x74\x75\x73","","\x66\x69\x6C\x65\x6E\x61\x6D\x65","\x67\x65\x74\x4F\x72\x43\x72\x65\x61\x74\x65\x46\x69\x6C\x65\x6E\x61\x6D\x65","\x64\x72\x61\x77\x69\x6E\x67","\x67\x65\x74","\x2E\x78\x6D\x6C","\x67\x65\x74\x46\x69\x6C\x65\x6E\x61\x6D\x65","\x73\x65\x74\x53\x74\x61\x74\x75\x73","\x73\x74\x61\x74\x75\x73\x43\x68\x61\x6E\x67\x65\x64","\x66\x69\x72\x65\x45\x76\x65\x6E\x74","\x67\x65\x74\x53\x74\x61\x74\x75\x73","\x6D\x6F\x64\x69\x66\x69\x65\x64","\x67\x72\x61\x70\x68\x43\x68\x61\x6E\x67\x65\x4C\x69\x73\x74\x65\x6E\x65\x72","\x61\x70\x70\x6C\x79","\x62\x69\x6E\x64","\x61\x64\x64\x4C\x69\x73\x74\x65\x6E\x65\x72","\x67\x65\x74\x4D\x6F\x64\x65\x6C","\x6F\x6E\x62\x65\x66\x6F\x72\x65\x75\x6E\x6C\x6F\x61\x64","\x61\x6C\x6C\x43\x68\x61\x6E\x67\x65\x73\x4C\x6F\x73\x74","\x72\x65\x73\x65\x74\x56\x69\x65\x77\x4F\x6E\x52\x6F\x6F\x74\x43\x68\x61\x6E\x67\x65","\x73\x63\x72\x6F\x6C\x6C\x62\x61\x72\x73","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64","\x65\x78\x74\x65\x6E\x64","\x67\x72\x69\x64\x49\x6D\x61\x67\x65","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x2F\x67\x72\x69\x64\x2E\x67\x69\x66","\x74\x72\x61\x6E\x73\x70\x61\x72\x65\x6E\x74\x49\x6D\x61\x67\x65","\x2F\x74\x72\x61\x6E\x73\x70\x61\x72\x65\x6E\x74\x2E\x67\x69\x66","\x73\x65\x74\x47\x72\x61\x70\x68\x58\x6D\x6C","\x6F\x77\x6E\x65\x72\x44\x6F\x63\x75\x6D\x65\x6E\x74","\x6E\x6F\x64\x65\x4E\x61\x6D\x65","\x6D\x78\x47\x72\x61\x70\x68\x4D\x6F\x64\x65\x6C","\x73\x63\x61\x6C\x65","\x76\x69\x65\x77","\x67\x72\x69\x64\x45\x6E\x61\x62\x6C\x65\x64","\x67\x72\x69\x64","\x67\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x30","\x67\x75\x69\x64\x65\x73\x45\x6E\x61\x62\x6C\x65\x64","\x67\x72\x61\x70\x68\x48\x61\x6E\x64\x6C\x65\x72","\x67\x75\x69\x64\x65\x73","\x74\x6F\x6F\x6C\x74\x69\x70\x73","\x73\x65\x74\x54\x6F\x6F\x6C\x74\x69\x70\x73","\x63\x6F\x6E\x6E\x65\x63\x74","\x73\x65\x74\x43\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65","\x66\x6F\x6C\x64\x69\x6E\x67\x45\x6E\x61\x62\x6C\x65\x64","\x66\x6F\x6C\x64","\x73\x63\x72\x6F\x6C\x6C\x4C\x65\x66\x74","\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x73\x63\x72\x6F\x6C\x6C\x54\x6F\x70","\x78","\x74\x72\x61\x6E\x73\x6C\x61\x74\x65","\x64\x78","\x79","\x64\x79","\x70\x61\x67\x65\x56\x69\x73\x69\x62\x6C\x65","\x70\x61\x67\x65","\x70\x61\x67\x65\x42\x72\x65\x61\x6B\x73\x56\x69\x73\x69\x62\x6C\x65","\x70\x72\x65\x66\x65\x72\x50\x61\x67\x65\x53\x69\x7A\x65","\x70\x61\x67\x65\x53\x63\x61\x6C\x65","\x70\x61\x67\x65\x57\x69\x64\x74\x68","\x70\x61\x67\x65\x48\x65\x69\x67\x68\x74","\x70\x61\x67\x65\x46\x6F\x72\x6D\x61\x74","\x6C\x65\x6E\x67\x74\x68","\x64\x65\x63\x6F\x64\x65","\x75\x70\x64\x61\x74\x65\x47\x72\x61\x70\x68\x43\x6F\x6D\x70\x6F\x6E\x65\x6E\x74\x73","\x67\x65\x74\x47\x72\x61\x70\x68\x58\x6D\x6C","\x63\x72\x65\x61\x74\x65\x58\x6D\x6C\x44\x6F\x63\x75\x6D\x65\x6E\x74","\x65\x6E\x63\x6F\x64\x65","\x72\x6F\x75\x6E\x64","\x73\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x69\x73\x47\x72\x69\x64\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x45\x6E\x61\x62\x6C\x65\x64","\x74\x6F\x6F\x6C\x74\x69\x70\x48\x61\x6E\x64\x6C\x65\x72","\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x48\x61\x6E\x64\x6C\x65\x72","\x77\x69\x64\x74\x68","\x68\x65\x69\x67\x68\x74","\x6E\x6F\x6E\x65","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x43\x6F\x6C\x6F\x72","\x73\x74\x79\x6C\x65","\x74\x72\x61\x6E\x73\x70\x61\x72\x65\x6E\x74","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x61\x67\x65\x53\x68\x61\x70\x65","\x66\x69\x6C\x6C","\x72\x65\x63\x6F\x6E\x66\x69\x67\x75\x72\x65","\x23\x65\x62\x65\x62\x65\x62","\x62\x6F\x72\x64\x65\x72\x53\x74\x79\x6C\x65","\x73\x6F\x6C\x69\x64","\x62\x6F\x72\x64\x65\x72\x43\x6F\x6C\x6F\x72","\x23\x65\x35\x65\x35\x65\x35","\x62\x6F\x72\x64\x65\x72\x54\x6F\x70\x57\x69\x64\x74\x68","\x31\x70\x78","\x62\x6F\x72\x64\x65\x72\x4C\x65\x66\x74\x57\x69\x64\x74\x68","\x62\x6F\x72\x64\x65\x72\x52\x69\x67\x68\x74\x57\x69\x64\x74\x68","\x30\x70\x78","\x62\x6F\x72\x64\x65\x72\x42\x6F\x74\x74\x6F\x6D\x57\x69\x64\x74\x68","\x62\x6F\x72\x64\x65\x72","\x76\x61\x6C\x69\x64\x61\x74\x65","\x6F\x76\x65\x72\x66\x6C\x6F\x77","\x68\x69\x64\x64\x65\x6E","\x61\x75\x74\x6F","\x49\x53\x5F\x49\x45","\x64\x6F\x63\x75\x6D\x65\x6E\x74\x4D\x6F\x64\x65","\x75\x72\x6C\x28","\x29","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x6E\x6F\x64\x65","\x49\x53\x5F\x49\x45\x36","\x73\x74\x79\x6C\x65\x73\x68\x65\x65\x74","\x2F\x67\x72\x61\x70\x68\x65\x64\x69\x74\x6F\x72\x2D\x69\x65\x36\x2E\x63\x73\x73","\x6C\x69\x6E\x6B","\x6C\x6F\x61\x64\x44\x65\x66\x61\x75\x6C\x74\x42\x75\x6E\x64\x6C\x65","\x61\x64\x64","\x44\x45\x46\x41\x55\x4C\x54\x5F\x48\x4F\x54\x53\x50\x4F\x54","\x63\x72\x65\x61\x74\x65\x4D\x61\x72\x6B\x65\x72","\x69\x6E\x74\x65\x72\x73\x65\x63\x74\x73","\x69\x73\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6E\x67","\x53\x48\x41\x44\x4F\x57\x43\x4F\x4C\x4F\x52","\x23\x64\x30\x64\x30\x64\x30","\x48\x41\x4E\x44\x4C\x45\x5F\x46\x49\x4C\x4C\x43\x4F\x4C\x4F\x52","\x23\x39\x39\x63\x63\x66\x66","\x48\x41\x4E\x44\x4C\x45\x5F\x53\x54\x52\x4F\x4B\x45\x43\x4F\x4C\x4F\x52","\x23\x30\x30\x38\x38\x63\x66","\x56\x45\x52\x54\x45\x58\x5F\x53\x45\x4C\x45\x43\x54\x49\x4F\x4E\x5F\x43\x4F\x4C\x4F\x52","\x23\x30\x30\x61\x38\x66\x66","\x4F\x55\x54\x4C\x49\x4E\x45\x5F\x43\x4F\x4C\x4F\x52","\x4F\x55\x54\x4C\x49\x4E\x45\x5F\x48\x41\x4E\x44\x4C\x45\x5F\x46\x49\x4C\x4C\x43\x4F\x4C\x4F\x52","\x4F\x55\x54\x4C\x49\x4E\x45\x5F\x48\x41\x4E\x44\x4C\x45\x5F\x53\x54\x52\x4F\x4B\x45\x43\x4F\x4C\x4F\x52","\x43\x4F\x4E\x4E\x45\x43\x54\x5F\x48\x41\x4E\x44\x4C\x45\x5F\x46\x49\x4C\x4C\x43\x4F\x4C\x4F\x52","\x23\x63\x65\x65\x37\x66\x66","\x45\x44\x47\x45\x5F\x53\x45\x4C\x45\x43\x54\x49\x4F\x4E\x5F\x43\x4F\x4C\x4F\x52","\x44\x45\x46\x41\x55\x4C\x54\x5F\x56\x41\x4C\x49\x44\x5F\x43\x4F\x4C\x4F\x52","\x4C\x41\x42\x45\x4C\x5F\x48\x41\x4E\x44\x4C\x45\x5F\x46\x49\x4C\x4C\x43\x4F\x4C\x4F\x52","\x47\x55\x49\x44\x45\x5F\x43\x4F\x4C\x4F\x52","\x70\x61\x67\x65\x42\x72\x65\x61\x6B\x43\x6F\x6C\x6F\x72","\x23\x63\x30\x63\x30\x63\x30","\x64\x65\x66\x61\x75\x6C\x74\x4F\x70\x61\x63\x69\x74\x79","\x63\x72\x65\x61\x74\x65\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x61\x67\x65\x53\x68\x61\x70\x65","\x77\x68\x69\x74\x65","\x23\x63\x61\x63\x61\x63\x61","\x67\x65\x74\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x61\x67\x65\x42\x6F\x75\x6E\x64\x73","\x67\x65\x74\x47\x72\x61\x70\x68\x42\x6F\x75\x6E\x64\x73","\x6D\x69\x6E","\x66\x6C\x6F\x6F\x72","\x6D\x61\x78","\x63\x65\x69\x6C","\x70\x61\x6E\x47\x72\x61\x70\x68","\x64\x69\x61\x6C\x65\x63\x74","\x44\x49\x41\x4C\x45\x43\x54\x5F\x53\x56\x47","\x75\x73\x65\x53\x63\x72\x6F\x6C\x6C\x62\x61\x72\x73\x46\x6F\x72\x50\x61\x6E\x6E\x69\x6E\x67","\x68\x61\x73\x53\x63\x72\x6F\x6C\x6C\x62\x61\x72\x73","\x6D\x61\x72\x67\x69\x6E\x4C\x65\x66\x74","\x70\x78","\x6D\x61\x72\x67\x69\x6E\x54\x6F\x70","\x76\x61\x6C\x69\x64\x61\x74\x65\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64","\x67\x65\x74\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x69\x6D\x61\x67\x65","\x73\x72\x63","\x64\x65\x73\x74\x72\x6F\x79","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x61\x6E\x65","\x72\x65\x64\x72\x61\x77","\x72\x65\x64\x72\x61\x77\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x69\x73\x53\x68\x61\x64\x6F\x77","\x44\x49\x41\x4C\x45\x43\x54\x5F\x53\x54\x52\x49\x43\x54\x48\x54\x4D\x4C","\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x66\x69\x72\x73\x74\x43\x68\x69\x6C\x64","\x61\x62\x73\x6F\x6C\x75\x74\x65","\x69\x6E\x73\x65\x72\x74\x42\x65\x66\x6F\x72\x65","\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65","\x67\x65\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x61\x67\x65","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x2D\x31\x70\x78\x20\x2D\x31\x70\x78","\x64\x62\x6C\x63\x6C\x69\x63\x6B","\x64\x62\x6C\x43\x6C\x69\x63\x6B","\x66\x69\x72\x65\x4D\x6F\x75\x73\x65\x45\x76\x65\x6E\x74","\x69\x73\x48\x69\x64\x65\x4F\x6E\x48\x6F\x76\x65\x72","\x68\x69\x64\x65","\x69\x73\x4D\x6F\x75\x73\x65\x44\x6F\x77\x6E","\x69\x73\x43\x6F\x6E\x73\x75\x6D\x65\x64","\x61\x64\x64\x47\x65\x73\x74\x75\x72\x65\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x62\x6F\x75\x6E\x64\x73","\x75\x70\x64\x61\x74\x65\x50\x61\x67\x65\x42\x72\x65\x61\x6B\x73","\x6D\x69\x6E\x50\x61\x67\x65\x42\x72\x65\x61\x6B\x44\x69\x73\x74","\x68\x6F\x72\x69\x7A\x6F\x6E\x74\x61\x6C\x50\x61\x67\x65\x42\x72\x65\x61\x6B\x73","\x70\x6F\x69\x6E\x74\x73","\x69\x73\x44\x61\x73\x68\x65\x64","\x70\x61\x67\x65\x42\x72\x65\x61\x6B\x44\x61\x73\x68\x65\x64","\x61\x64\x64\x50\x69\x70\x65","\x73\x70\x6C\x69\x63\x65","\x76\x65\x72\x74\x69\x63\x61\x6C\x50\x61\x67\x65\x42\x72\x65\x61\x6B\x73","\x73\x6E\x61\x70\x54\x6F\x54\x65\x72\x6D\x69\x6E\x61\x6C\x73","\x73\x68\x6F\x75\x6C\x64\x52\x65\x6D\x6F\x76\x65\x43\x65\x6C\x6C\x73\x46\x72\x6F\x6D\x50\x61\x72\x65\x6E\x74","\x69\x73\x56\x65\x72\x74\x65\x78","\x67\x65\x74\x43\x65\x6C\x6C\x47\x65\x6F\x6D\x65\x74\x72\x79","\x72\x65\x6C\x61\x74\x69\x76\x65","\x69\x73\x45\x6E\x61\x62\x6C\x65\x64\x46\x6F\x72\x45\x76\x65\x6E\x74","\x69\x73\x41\x6C\x74\x44\x6F\x77\x6E","\x61\x64\x64\x49\x74\x65\x6D","\x6D\x6F\x75\x73\x65\x64\x6F\x77\x6E","\x63\x6F\x6E\x73\x75\x6D\x65","\x67\x65\x74\x49\x6E\x69\x74\x69\x61\x6C\x43\x65\x6C\x6C\x46\x6F\x72\x45\x76\x65\x6E\x74","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x67\x65\x74\x50\x61\x72\x65\x6E\x74","\x69\x73\x43\x65\x6C\x6C\x53\x65\x6C\x65\x63\x74\x65\x64","\x69\x73\x56\x61\x6C\x69\x64\x52\x6F\x6F\x74","\x69\x73\x44\x65\x6C\x61\x79\x65\x64\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E","\x73\x65\x6C\x65\x63\x74\x44\x65\x6C\x61\x79\x65\x64","\x67\x65\x74\x43\x65\x6C\x6C","\x63\x65\x6C\x6C","\x67\x65\x74\x45\x76\x65\x6E\x74","\x73\x65\x6C\x65\x63\x74\x43\x65\x6C\x6C\x46\x6F\x72\x45\x76\x65\x6E\x74","\x67\x65\x74\x43\x65\x6C\x6C\x46\x6F\x72\x50\x6F\x70\x75\x70\x45\x76\x65\x6E\x74","\x65\x64\x69\x74","\x67\x65\x74\x50\x72\x6F\x70\x65\x72\x74\x79","\x75\x6E\x64\x6F\x61\x62\x6C\x65\x45\x64\x69\x74\x48\x61\x70\x70\x65\x6E\x65\x64","\x67\x65\x74\x56\x69\x65\x77","\x63\x68\x61\x6E\x67\x65\x73","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73\x46\x6F\x72\x43\x68\x61\x6E\x67\x65\x73","\x67\x65\x74\x53\x74\x61\x74\x65","\x70\x75\x73\x68","\x73\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73","\x2F\x67\x65\x6E\x65\x72\x61\x6C\x2E\x78\x6D\x6C","\x6C\x6F\x61\x64\x53\x74\x65\x6E\x63\x69\x6C\x53\x65\x74","\x6C\x69\x62\x72\x61\x72\x69\x65\x73","\x70\x61\x63\x6B\x61\x67\x65\x73","\x67\x65\x74\x53\x74\x65\x6E\x63\x69\x6C","\x73\x74\x65\x6E\x63\x69\x6C\x73","\x67\x65\x74\x42\x61\x73\x65\x6E\x61\x6D\x65\x46\x6F\x72\x53\x74\x65\x6E\x63\x69\x6C","\x73\x75\x62\x73\x74\x72\x69\x6E\x67","\x74\x6F\x4C\x6F\x77\x65\x72\x43\x61\x73\x65","\x2E\x6A\x73","\x6C\x6F\x61\x64","\x67\x65\x74\x54\x65\x78\x74","\x2F","\x2E","\x73\x70\x6C\x69\x74","\x6D\x78\x67\x72\x61\x70\x68","\x67\x65\x74\x58\x6D\x6C","\x70\x61\x72\x73\x65\x53\x74\x65\x6E\x63\x69\x6C\x53\x65\x74","\x64\x6F\x63\x75\x6D\x65\x6E\x74\x45\x6C\x65\x6D\x65\x6E\x74","\x6E\x61\x6D\x65","\x6E\x6F\x64\x65\x54\x79\x70\x65","\x4E\x4F\x44\x45\x54\x59\x50\x45\x5F\x45\x4C\x45\x4D\x45\x4E\x54","\x5F","\x72\x65\x70\x6C\x61\x63\x65","\x61\x64\x64\x53\x74\x65\x6E\x63\x69\x6C","\x77","\x68","\x6E\x65\x78\x74\x53\x69\x62\x6C\x69\x6E\x67","\x70\x72\x6F\x64\x75\x63\x65\x72","\x63\x6F\x6E\x73\x75\x6D\x65\x72","\x64\x6F\x6E\x65","\x73\x65\x74\x43\x6F\x6E\x73\x75\x6D\x65\x72","\x65\x78\x65\x63\x75\x74\x65","\x73\x65\x74\x44\x61\x74\x61","\x64\x61\x74\x61","\x65\x72\x72\x6F\x72","\x63\x61\x6E\x63\x65\x6C","\x61\x6C\x65\x72\x74"];var useLocalStorage=(mxClient[_0xa55e[0]]||urlParams[_0xa55e[1]]==_0xa55e[2])&& typeof (localStorage)!=_0xa55e[3];var fileSupport=window[_0xa55e[4]]!=null&&window[_0xa55e[5]]!=null&&window[_0xa55e[6]]!=null;var touchStyle=mxClient[_0xa55e[0]]||urlParams[_0xa55e[7]]==_0xa55e[8];var counter=0;try{var op=window;while(op[_0xa55e[9]]!=null&&!isNaN(op[_0xa55e[9]][_0xa55e[10]])){op=op[_0xa55e[9]]};if(op!=null){op[_0xa55e[10]]++;counter=op[_0xa55e[10]]}}catch(e){};Editor=function(){mxEventSource[_0xa55e[11]](this);this[_0xa55e[12]]();this[_0xa55e[13]]();this[_0xa55e[14]]= new Graph();this[_0xa55e[15]]= new mxOutline(this[_0xa55e[14]]);this[_0xa55e[15]][_0xa55e[16]]=true;this[_0xa55e[17]]=this[_0xa55e[18]]();this[_0xa55e[19]]=_0xa55e[20];this[_0xa55e[21]]=null;this[_0xa55e[22]]=function(){return this[_0xa55e[21]]||mxResources[_0xa55e[24]](_0xa55e[23],[counter])+_0xa55e[25]};this[_0xa55e[26]]=function(){return this[_0xa55e[21]]};this[_0xa55e[27]]=function(_0x3b7cx6){this[_0xa55e[19]]=_0x3b7cx6;this[_0xa55e[29]]( new mxEventObject(_0xa55e[28]))};this[_0xa55e[30]]=function(){return this[_0xa55e[19]]};this[_0xa55e[31]]=false;this[_0xa55e[32]]=function(){this[_0xa55e[31]]=true};this[_0xa55e[14]][_0xa55e[36]]()[_0xa55e[35]](mxEvent.CHANGE,mxUtils[_0xa55e[34]](this,function(){this[_0xa55e[32]][_0xa55e[33]](this,arguments)}));window[_0xa55e[37]]=mxUtils[_0xa55e[34]](this,function(){if(this[_0xa55e[31]]){return mxResources[_0xa55e[24]](_0xa55e[38])}});this[_0xa55e[14]][_0xa55e[39]]=false;this[_0xa55e[14]][_0xa55e[40]]=true;this[_0xa55e[14]][_0xa55e[41]]=null};mxUtils[_0xa55e[42]](Editor,mxEventSource);Editor[_0xa55e[44]][_0xa55e[43]]=IMAGE_PATH+_0xa55e[45];Editor[_0xa55e[44]][_0xa55e[46]]=IMAGE_PATH+_0xa55e[47];Editor[_0xa55e[44]][_0xa55e[48]]=function(_0x3b7cx7){var _0x3b7cx8= new mxCodec(_0x3b7cx7[_0xa55e[49]]);if(_0x3b7cx7[_0xa55e[50]]==_0xa55e[51]){this[_0xa55e[14]][_0xa55e[53]][_0xa55e[52]]=1;this[_0xa55e[14]][_0xa55e[54]]=_0x3b7cx7[_0xa55e[56]](_0xa55e[55])!=_0xa55e[57];this[_0xa55e[14]][_0xa55e[59]][_0xa55e[58]]=_0x3b7cx7[_0xa55e[56]](_0xa55e[60])!=_0xa55e[57];this[_0xa55e[14]][_0xa55e[62]](_0x3b7cx7[_0xa55e[56]](_0xa55e[61])!=_0xa55e[57]);this[_0xa55e[14]][_0xa55e[64]](_0x3b7cx7[_0xa55e[56]](_0xa55e[63])!=_0xa55e[57]);this[_0xa55e[14]][_0xa55e[65]]=_0x3b7cx7[_0xa55e[56]](_0xa55e[66])!=_0xa55e[57];this[_0xa55e[14]][_0xa55e[40]]=_0x3b7cx7[_0xa55e[56]](_0xa55e[40])!=_0xa55e[57];if(!this[_0xa55e[14]][_0xa55e[40]]){this[_0xa55e[14]][_0xa55e[68]][_0xa55e[67]]=0;this[_0xa55e[14]][_0xa55e[68]][_0xa55e[69]]=0;this[_0xa55e[14]][_0xa55e[53]][_0xa55e[71]][_0xa55e[70]]=Number(_0x3b7cx7[_0xa55e[56]](_0xa55e[72])||0);this[_0xa55e[14]][_0xa55e[53]][_0xa55e[71]][_0xa55e[73]]=Number(_0x3b7cx7[_0xa55e[56]](_0xa55e[74])||0)};this[_0xa55e[14]][_0xa55e[75]]=_0x3b7cx7[_0xa55e[56]](_0xa55e[76])==_0xa55e[8];this[_0xa55e[14]][_0xa55e[77]]=this[_0xa55e[14]][_0xa55e[75]];this[_0xa55e[14]][_0xa55e[78]]=this[_0xa55e[14]][_0xa55e[77]];var _0x3b7cx9=_0x3b7cx7[_0xa55e[56]](_0xa55e[79]);if(_0x3b7cx9!=null){this[_0xa55e[14]][_0xa55e[79]]=_0x3b7cx9}else {this[_0xa55e[14]][_0xa55e[79]]=1.5};var _0x3b7cxa=_0x3b7cx7[_0xa55e[56]](_0xa55e[80]);var _0x3b7cxb=_0x3b7cx7[_0xa55e[56]](_0xa55e[81]);if(_0x3b7cxa!=null&&_0x3b7cxb!=null){this[_0xa55e[14]][_0xa55e[82]]= new mxRectangle(0,0,parseFloat(_0x3b7cxa),parseFloat(_0x3b7cxb));this[_0xa55e[15]][_0xa55e[15]][_0xa55e[82]]=this[_0xa55e[14]][_0xa55e[82]]};var _0x3b7cxc=_0x3b7cx7[_0xa55e[56]](_0xa55e[41]);if(_0x3b7cxc!=null&&_0x3b7cxc[_0xa55e[83]]>0){this[_0xa55e[14]][_0xa55e[41]]=_0x3b7cxc};_0x3b7cx8[_0xa55e[84]](_0x3b7cx7,this[_0xa55e[14]][_0xa55e[36]]());this[_0xa55e[85]]()}};Editor[_0xa55e[44]][_0xa55e[86]]=function(){var _0x3b7cxd= new mxCodec(mxUtils[_0xa55e[87]]());var _0x3b7cx7=_0x3b7cxd[_0xa55e[88]](this[_0xa55e[14]][_0xa55e[36]]());if(this[_0xa55e[14]][_0xa55e[53]][_0xa55e[71]][_0xa55e[70]]!=0||this[_0xa55e[14]][_0xa55e[53]][_0xa55e[71]][_0xa55e[73]]!=0){_0x3b7cx7[_0xa55e[90]](_0xa55e[72],Math[_0xa55e[89]](this[_0xa55e[14]][_0xa55e[53]][_0xa55e[71]][_0xa55e[70]]*100)/100);_0x3b7cx7[_0xa55e[90]](_0xa55e[74],Math[_0xa55e[89]](this[_0xa55e[14]][_0xa55e[53]][_0xa55e[71]][_0xa55e[73]]*100)/100)};_0x3b7cx7[_0xa55e[90]](_0xa55e[55],(this[_0xa55e[14]][_0xa55e[91]]())?_0xa55e[8]:_0xa55e[57]);_0x3b7cx7[_0xa55e[90]](_0xa55e[60],(this[_0xa55e[14]][_0xa55e[59]][_0xa55e[58]])?_0xa55e[8]:_0xa55e[57]);_0x3b7cx7[_0xa55e[90]](_0xa55e[60],(this[_0xa55e[14]][_0xa55e[59]][_0xa55e[58]])?_0xa55e[8]:_0xa55e[57]);_0x3b7cx7[_0xa55e[90]](_0xa55e[61],(this[_0xa55e[14]][_0xa55e[93]][_0xa55e[92]]())?_0xa55e[8]:_0xa55e[57]);_0x3b7cx7[_0xa55e[90]](_0xa55e[63],(this[_0xa55e[14]][_0xa55e[94]][_0xa55e[92]]())?_0xa55e[8]:_0xa55e[57]);_0x3b7cx7[_0xa55e[90]](_0xa55e[66],(this[_0xa55e[14]][_0xa55e[65]])?_0xa55e[8]:_0xa55e[57]);_0x3b7cx7[_0xa55e[90]](_0xa55e[76],(this[_0xa55e[14]][_0xa55e[75]])?_0xa55e[8]:_0xa55e[57]);_0x3b7cx7[_0xa55e[90]](_0xa55e[79],this[_0xa55e[14]][_0xa55e[79]]);_0x3b7cx7[_0xa55e[90]](_0xa55e[80],this[_0xa55e[14]][_0xa55e[82]][_0xa55e[95]]);_0x3b7cx7[_0xa55e[90]](_0xa55e[81],this[_0xa55e[14]][_0xa55e[82]][_0xa55e[96]]);if(!this[_0xa55e[14]][_0xa55e[40]]){_0x3b7cx7[_0xa55e[90]](_0xa55e[40],_0xa55e[57])};if(this[_0xa55e[14]][_0xa55e[41]]!=null){_0x3b7cx7[_0xa55e[90]](_0xa55e[41],this[_0xa55e[14]][_0xa55e[41]])};return _0x3b7cx7};Editor[_0xa55e[44]][_0xa55e[85]]=function(){var _0x3b7cxe=this[_0xa55e[14]];var _0x3b7cxf=this[_0xa55e[15]];if(_0x3b7cxe[_0xa55e[68]]!=null&&_0x3b7cxf[_0xa55e[15]][_0xa55e[68]]!=null){if(_0x3b7cxe[_0xa55e[41]]!=null){if(_0x3b7cxe[_0xa55e[41]]==_0xa55e[97]){_0x3b7cxe[_0xa55e[68]][_0xa55e[99]][_0xa55e[98]]=_0xa55e[100]}else {if(_0x3b7cxe[_0xa55e[53]][_0xa55e[101]]!=null){_0x3b7cxe[_0xa55e[53]][_0xa55e[101]][_0xa55e[102]]=_0x3b7cxe[_0xa55e[41]];_0x3b7cxe[_0xa55e[53]][_0xa55e[101]][_0xa55e[103]]()};_0x3b7cxe[_0xa55e[68]][_0xa55e[99]][_0xa55e[98]]=_0x3b7cxe[_0xa55e[41]]}}else {_0x3b7cxe[_0xa55e[68]][_0xa55e[99]][_0xa55e[98]]=_0xa55e[20]};if(_0x3b7cxe[_0xa55e[75]]){_0x3b7cxe[_0xa55e[68]][_0xa55e[99]][_0xa55e[98]]=_0xa55e[104];_0x3b7cxe[_0xa55e[68]][_0xa55e[99]][_0xa55e[105]]=_0xa55e[106];_0x3b7cxe[_0xa55e[68]][_0xa55e[99]][_0xa55e[107]]=_0xa55e[108];_0x3b7cxe[_0xa55e[68]][_0xa55e[99]][_0xa55e[109]]=_0xa55e[110];_0x3b7cxe[_0xa55e[68]][_0xa55e[99]][_0xa55e[111]]=_0xa55e[110];_0x3b7cxe[_0xa55e[68]][_0xa55e[99]][_0xa55e[112]]=_0xa55e[113];_0x3b7cxe[_0xa55e[68]][_0xa55e[99]][_0xa55e[114]]=_0xa55e[113]}else {_0x3b7cxe[_0xa55e[68]][_0xa55e[99]][_0xa55e[115]]=_0xa55e[20]};_0x3b7cxf[_0xa55e[15]][_0xa55e[68]][_0xa55e[99]][_0xa55e[98]]=_0x3b7cxe[_0xa55e[68]][_0xa55e[99]][_0xa55e[98]];if(_0x3b7cxf[_0xa55e[15]][_0xa55e[75]]!=_0x3b7cxe[_0xa55e[75]]||_0x3b7cxf[_0xa55e[15]][_0xa55e[79]]!=_0x3b7cxe[_0xa55e[79]]){_0x3b7cxf[_0xa55e[15]][_0xa55e[79]]=_0x3b7cxe[_0xa55e[79]];_0x3b7cxf[_0xa55e[15]][_0xa55e[75]]=_0x3b7cxe[_0xa55e[75]];_0x3b7cxf[_0xa55e[15]][_0xa55e[53]][_0xa55e[116]]()};if(_0x3b7cxe[_0xa55e[40]]&&_0x3b7cxe[_0xa55e[68]][_0xa55e[99]][_0xa55e[117]]==_0xa55e[118]&& !touchStyle){_0x3b7cxe[_0xa55e[68]][_0xa55e[99]][_0xa55e[117]]=_0xa55e[119]}else {if(!_0x3b7cxe[_0xa55e[40]]||touchStyle){_0x3b7cxe[_0xa55e[68]][_0xa55e[99]][_0xa55e[117]]=_0xa55e[118]}};var _0x3b7cx10=(mxClient[_0xa55e[120]]&&document[_0xa55e[121]]>=9)?_0xa55e[122]+this[_0xa55e[46]]+_0xa55e[123]:_0xa55e[97];_0x3b7cxe[_0xa55e[68]][_0xa55e[99]][_0xa55e[124]]=(!_0x3b7cxe[_0xa55e[75]]&&_0x3b7cxe[_0xa55e[91]]())?_0xa55e[122]+this[_0xa55e[43]]+_0xa55e[123]:_0x3b7cx10;if(_0x3b7cxe[_0xa55e[53]][_0xa55e[101]]!=null){_0x3b7cxe[_0xa55e[53]][_0xa55e[101]][_0xa55e[125]][_0xa55e[99]][_0xa55e[124]]=(this[_0xa55e[14]][_0xa55e[91]]())?_0xa55e[122]+this[_0xa55e[43]]+_0xa55e[123]:_0xa55e[97]}}};Editor[_0xa55e[44]][_0xa55e[12]]=function(){if(mxClient[_0xa55e[126]]){mxClient[_0xa55e[129]](_0xa55e[127],CSS_PATH+_0xa55e[128])};mxResources[_0xa55e[130]]=false;mxResources[_0xa55e[131]](RESOURCE_BASE);mxConstants[_0xa55e[132]]=0.3;var _0x3b7cx11=mxConnectionHandler[_0xa55e[44]][_0xa55e[133]];mxConnectionHandler[_0xa55e[44]][_0xa55e[133]]=function(){var _0x3b7cx12=_0x3b7cx11[_0xa55e[33]](this,arguments);_0x3b7cx12[_0xa55e[134]]=mxUtils[_0xa55e[34]](this,function(_0x3b7cx13,_0x3b7cx14){if(this[_0xa55e[135]]()){return true};return mxCellMarker[_0xa55e[44]][_0xa55e[134]][_0xa55e[33]](_0x3b7cx12,arguments)});return _0x3b7cx12};mxConstants[_0xa55e[136]]=_0xa55e[137];mxConstants[_0xa55e[138]]=_0xa55e[139];mxConstants[_0xa55e[140]]=_0xa55e[141];mxConstants[_0xa55e[142]]=_0xa55e[143];mxConstants[_0xa55e[144]]=_0xa55e[143];mxConstants[_0xa55e[145]]=_0xa55e[139];mxConstants[_0xa55e[146]]=_0xa55e[143];mxConstants[_0xa55e[147]]=_0xa55e[148];mxConstants[_0xa55e[149]]=_0xa55e[143];mxConstants[_0xa55e[150]]=_0xa55e[143];mxConstants[_0xa55e[151]]=_0xa55e[148];mxConstants[_0xa55e[152]]=_0xa55e[141];mxGraph[_0xa55e[44]][_0xa55e[153]]=_0xa55e[154];mxGraph[_0xa55e[44]][_0xa55e[79]]=1;mxRubberband[_0xa55e[44]][_0xa55e[155]]=30;mxGraphView[_0xa55e[44]][_0xa55e[156]]=function(_0x3b7cx15){return  new mxRectangleShape(_0x3b7cx15,this[_0xa55e[14]][_0xa55e[41]]||_0xa55e[157],_0xa55e[158])};mxGraphView[_0xa55e[44]][_0xa55e[159]]=function(){var _0x3b7cx16=this[_0xa55e[160]]();var _0x3b7cx17=(_0x3b7cx16[_0xa55e[95]]>0)?_0x3b7cx16[_0xa55e[70]]/this[_0xa55e[52]]-this[_0xa55e[71]][_0xa55e[70]]:0;var _0x3b7cx18=(_0x3b7cx16[_0xa55e[96]]>0)?_0x3b7cx16[_0xa55e[73]]/this[_0xa55e[52]]-this[_0xa55e[71]][_0xa55e[73]]:0;var _0x3b7cx19=_0x3b7cx16[_0xa55e[95]]/this[_0xa55e[52]];var _0x3b7cx1a=_0x3b7cx16[_0xa55e[96]]/this[_0xa55e[52]];var _0x3b7cx1b=this[_0xa55e[14]][_0xa55e[82]];var _0x3b7cx9=this[_0xa55e[14]][_0xa55e[79]];var _0x3b7cxa=_0x3b7cx1b[_0xa55e[95]]*_0x3b7cx9;var _0x3b7cxb=_0x3b7cx1b[_0xa55e[96]]*_0x3b7cx9;var _0x3b7cx1c=Math[_0xa55e[162]](Math[_0xa55e[161]](0,_0x3b7cx17)/_0x3b7cxa);var _0x3b7cx1d=Math[_0xa55e[162]](Math[_0xa55e[161]](0,_0x3b7cx18)/_0x3b7cxb);var _0x3b7cx1e=Math[_0xa55e[164]](Math[_0xa55e[163]](1,_0x3b7cx17+_0x3b7cx19)/_0x3b7cxa);var _0x3b7cx1f=Math[_0xa55e[164]](Math[_0xa55e[163]](1,_0x3b7cx18+_0x3b7cx1a)/_0x3b7cxb);var _0x3b7cx20=_0x3b7cx1e-_0x3b7cx1c;var _0x3b7cx21=_0x3b7cx1f-_0x3b7cx1d;var _0x3b7cx15= new mxRectangle(this[_0xa55e[52]]*(this[_0xa55e[71]][_0xa55e[70]]+_0x3b7cx1c*_0x3b7cxa),this[_0xa55e[52]]*(this[_0xa55e[71]][_0xa55e[73]]+_0x3b7cx1d*_0x3b7cxb),this[_0xa55e[52]]*_0x3b7cx20*_0x3b7cxa,this[_0xa55e[52]]*_0x3b7cx21*_0x3b7cxb);return _0x3b7cx15};var _0x3b7cx22=mxGraph[_0xa55e[44]][_0xa55e[165]];mxGraph[_0xa55e[44]][_0xa55e[165]]=function(_0x3b7cx23,_0x3b7cx24){_0x3b7cx22[_0xa55e[33]](this,arguments);if((this[_0xa55e[166]]!=mxConstants[_0xa55e[167]]&&this[_0xa55e[53]][_0xa55e[101]]!=null)&&(!this[_0xa55e[168]]||!mxUtils[_0xa55e[169]](this[_0xa55e[68]]))){this[_0xa55e[53]][_0xa55e[101]][_0xa55e[125]][_0xa55e[99]][_0xa55e[170]]=_0x3b7cx23+_0xa55e[171];this[_0xa55e[53]][_0xa55e[101]][_0xa55e[125]][_0xa55e[99]][_0xa55e[172]]=_0x3b7cx24+_0xa55e[171]}};var _0x3b7cx25=this;mxGraphView[_0xa55e[44]][_0xa55e[173]]=function(){var _0x3b7cxc=this[_0xa55e[14]][_0xa55e[174]]();if(_0x3b7cxc!=null){if(this[_0xa55e[124]]==null||this[_0xa55e[124]][_0xa55e[175]]!=_0x3b7cxc[_0xa55e[176]]){if(this[_0xa55e[124]]!=null){this[_0xa55e[124]][_0xa55e[177]]()};var _0x3b7cx15= new mxRectangle(0,0,1,1);this[_0xa55e[124]]= new mxImageShape(_0x3b7cx15,_0x3b7cxc[_0xa55e[176]]);this[_0xa55e[124]][_0xa55e[166]]=this[_0xa55e[14]][_0xa55e[166]];this[_0xa55e[124]][_0xa55e[12]](this[_0xa55e[178]]);this[_0xa55e[124]][_0xa55e[179]]()};this[_0xa55e[180]](this[_0xa55e[124]],_0x3b7cxc)}else {if(this[_0xa55e[124]]!=null){this[_0xa55e[124]][_0xa55e[177]]();this[_0xa55e[124]]=null}};if(this[_0xa55e[14]][_0xa55e[75]]){var _0x3b7cx15=this[_0xa55e[159]]();if(this[_0xa55e[101]]==null){this[_0xa55e[101]]=this[_0xa55e[156]](_0x3b7cx15);this[_0xa55e[101]][_0xa55e[52]]=1;this[_0xa55e[101]][_0xa55e[181]]=true;this[_0xa55e[101]][_0xa55e[166]]=mxConstants[_0xa55e[182]];this[_0xa55e[101]][_0xa55e[12]](this[_0xa55e[14]][_0xa55e[68]]);this[_0xa55e[14]][_0xa55e[68]][_0xa55e[184]][_0xa55e[99]][_0xa55e[183]]=_0xa55e[185];this[_0xa55e[14]][_0xa55e[68]][_0xa55e[186]](this[_0xa55e[101]][_0xa55e[125]],this[_0xa55e[14]][_0xa55e[68]][_0xa55e[184]]);this[_0xa55e[101]][_0xa55e[179]]();this[_0xa55e[101]][_0xa55e[125]][_0xa55e[187]]=_0xa55e[188];this[_0xa55e[101]][_0xa55e[125]][_0xa55e[99]][_0xa55e[189]]=_0xa55e[190];mxEvent[_0xa55e[35]](this[_0xa55e[101]][_0xa55e[125]],_0xa55e[191],mxUtils[_0xa55e[34]](this,function(_0x3b7cx14){this[_0xa55e[14]][_0xa55e[192]](_0x3b7cx14)}));mxEvent[_0xa55e[198]](this[_0xa55e[101]][_0xa55e[125]],mxUtils[_0xa55e[34]](this,function(_0x3b7cx14){this[_0xa55e[14]][_0xa55e[193]](mxEvent.MOUSE_DOWN, new mxMouseEvent(_0x3b7cx14))}),mxUtils[_0xa55e[34]](this,function(_0x3b7cx14){if(this[_0xa55e[14]][_0xa55e[93]]!=null&&this[_0xa55e[14]][_0xa55e[93]][_0xa55e[194]]()){this[_0xa55e[14]][_0xa55e[93]][_0xa55e[195]]()};if(this[_0xa55e[14]][_0xa55e[196]]&&!mxEvent[_0xa55e[197]](_0x3b7cx14)){this[_0xa55e[14]][_0xa55e[193]](mxEvent.MOUSE_MOVE, new mxMouseEvent(_0x3b7cx14))}}),mxUtils[_0xa55e[34]](this,function(_0x3b7cx14){this[_0xa55e[14]][_0xa55e[193]](mxEvent.MOUSE_UP, new mxMouseEvent(_0x3b7cx14))}))}else {this[_0xa55e[101]][_0xa55e[52]]=1;this[_0xa55e[101]][_0xa55e[199]]=_0x3b7cx15;this[_0xa55e[101]][_0xa55e[179]]()};this[_0xa55e[101]][_0xa55e[125]][_0xa55e[99]][_0xa55e[124]]=(this[_0xa55e[14]][_0xa55e[91]]())?_0xa55e[122]+_0x3b7cx25[_0xa55e[43]]+_0xa55e[123]:_0xa55e[97]}else {if(this[_0xa55e[101]]!=null){this[_0xa55e[101]][_0xa55e[177]]();this[_0xa55e[101]]=null}}};mxGraph[_0xa55e[44]][_0xa55e[200]]=function(_0x3b7cx26,_0x3b7cx27,_0x3b7cx28){var _0x3b7cx29=this[_0xa55e[53]][_0xa55e[52]];var _0x3b7cx2a=this[_0xa55e[53]][_0xa55e[71]];var _0x3b7cx1b=this[_0xa55e[82]];var _0x3b7cx9=_0x3b7cx29*this[_0xa55e[79]];var _0x3b7cx2b=this[_0xa55e[53]][_0xa55e[159]]();_0x3b7cx27=_0x3b7cx2b[_0xa55e[95]];_0x3b7cx28=_0x3b7cx2b[_0xa55e[96]];var _0x3b7cx15= new mxRectangle(_0x3b7cx29*_0x3b7cx2a[_0xa55e[70]],_0x3b7cx29*_0x3b7cx2a[_0xa55e[73]],_0x3b7cx1b[_0xa55e[95]]*_0x3b7cx9,_0x3b7cx1b[_0xa55e[96]]*_0x3b7cx9);_0x3b7cx26=_0x3b7cx26&&Math[_0xa55e[161]](_0x3b7cx15[_0xa55e[95]],_0x3b7cx15[_0xa55e[96]])>this[_0xa55e[201]];var _0x3b7cx2c=(_0x3b7cx26)?Math[_0xa55e[164]](_0x3b7cx27/_0x3b7cx15[_0xa55e[95]])-1:0;var _0x3b7cx2d=(_0x3b7cx26)?Math[_0xa55e[164]](_0x3b7cx28/_0x3b7cx15[_0xa55e[96]])-1:0;var _0x3b7cx2e=_0x3b7cx2b[_0xa55e[70]]+_0x3b7cx27;var _0x3b7cx2f=_0x3b7cx2b[_0xa55e[73]]+_0x3b7cx28;if(this[_0xa55e[202]]==null&&_0x3b7cx2c>0){this[_0xa55e[202]]=[]};if(this[_0xa55e[202]]!=null){for(var _0x3b7cx30=0;_0x3b7cx30<=_0x3b7cx2c;_0x3b7cx30++){var _0x3b7cx31=[ new mxPoint(_0x3b7cx2b[_0xa55e[70]]+(_0x3b7cx30+1)*_0x3b7cx15[_0xa55e[95]],_0x3b7cx2b[_0xa55e[73]]), new mxPoint(_0x3b7cx2b[_0xa55e[70]]+(_0x3b7cx30+1)*_0x3b7cx15[_0xa55e[95]],_0x3b7cx2f)];if(this[_0xa55e[202]][_0x3b7cx30]!=null){this[_0xa55e[202]][_0x3b7cx30][_0xa55e[52]]=1;this[_0xa55e[202]][_0x3b7cx30][_0xa55e[203]]=_0x3b7cx31;this[_0xa55e[202]][_0x3b7cx30][_0xa55e[179]]()}else {var _0x3b7cx32= new mxPolyline(_0x3b7cx31,this[_0xa55e[153]],this[_0xa55e[52]]);_0x3b7cx32[_0xa55e[166]]=this[_0xa55e[166]];_0x3b7cx32[_0xa55e[204]]=this[_0xa55e[205]];_0x3b7cx32[_0xa55e[206]]=false;_0x3b7cx32[_0xa55e[52]]=_0x3b7cx29;_0x3b7cx32[_0xa55e[12]](this[_0xa55e[53]][_0xa55e[178]]);_0x3b7cx32[_0xa55e[179]]();this[_0xa55e[202]][_0x3b7cx30]=_0x3b7cx32}};for(var _0x3b7cx30=_0x3b7cx2c;_0x3b7cx30<this[_0xa55e[202]][_0xa55e[83]];_0x3b7cx30++){this[_0xa55e[202]][_0x3b7cx30][_0xa55e[177]]()};this[_0xa55e[202]][_0xa55e[207]](_0x3b7cx2c,this[_0xa55e[202]][_0xa55e[83]]-_0x3b7cx2c)};if(this[_0xa55e[208]]==null&&_0x3b7cx2d>0){this[_0xa55e[208]]=[]};if(this[_0xa55e[208]]!=null){for(var _0x3b7cx30=0;_0x3b7cx30<=_0x3b7cx2d;_0x3b7cx30++){var _0x3b7cx31=[ new mxPoint(_0x3b7cx2b[_0xa55e[70]],_0x3b7cx2b[_0xa55e[73]]+(_0x3b7cx30+1)*_0x3b7cx15[_0xa55e[96]]), new mxPoint(_0x3b7cx2e,_0x3b7cx2b[_0xa55e[73]]+(_0x3b7cx30+1)*_0x3b7cx15[_0xa55e[96]])];if(this[_0xa55e[208]][_0x3b7cx30]!=null){this[_0xa55e[208]][_0x3b7cx30][_0xa55e[52]]=1;this[_0xa55e[208]][_0x3b7cx30][_0xa55e[203]]=_0x3b7cx31;this[_0xa55e[208]][_0x3b7cx30][_0xa55e[179]]()}else {var _0x3b7cx32= new mxPolyline(_0x3b7cx31,this[_0xa55e[153]],_0x3b7cx29);_0x3b7cx32[_0xa55e[166]]=this[_0xa55e[166]];_0x3b7cx32[_0xa55e[204]]=this[_0xa55e[205]];_0x3b7cx32[_0xa55e[206]]=false;_0x3b7cx32[_0xa55e[52]]=_0x3b7cx29;_0x3b7cx32[_0xa55e[12]](this[_0xa55e[53]][_0xa55e[178]]);_0x3b7cx32[_0xa55e[179]]();this[_0xa55e[208]][_0x3b7cx30]=_0x3b7cx32}};for(var _0x3b7cx30=_0x3b7cx2d;_0x3b7cx30<this[_0xa55e[208]][_0xa55e[83]];_0x3b7cx30++){this[_0xa55e[208]][_0x3b7cx30][_0xa55e[177]]()};this[_0xa55e[208]][_0xa55e[207]](_0x3b7cx2d,this[_0xa55e[208]][_0xa55e[83]]-_0x3b7cx2d)}};mxEdgeHandler[_0xa55e[44]][_0xa55e[209]]=true;mxGraphHandler[_0xa55e[44]][_0xa55e[58]]=true;var _0x3b7cx33=mxGraphHandler[_0xa55e[44]][_0xa55e[210]];mxGraphHandler[_0xa55e[44]][_0xa55e[210]]=function(_0x3b7cx34,_0x3b7cx35,_0x3b7cx14){for(var _0x3b7cx30=0;_0x3b7cx30<_0x3b7cx35[_0xa55e[83]];_0x3b7cx30++){if(this[_0xa55e[14]][_0xa55e[36]]()[_0xa55e[211]](_0x3b7cx35[_0x3b7cx30])){var _0x3b7cx36=this[_0xa55e[14]][_0xa55e[212]](_0x3b7cx35[_0x3b7cx30]);if(_0x3b7cx36!=null&&_0x3b7cx36[_0xa55e[213]]){return false}}};return _0x3b7cx33[_0xa55e[33]](this,arguments)};mxGuide[_0xa55e[44]][_0xa55e[214]]=function(_0x3b7cx14){return !mxEvent[_0xa55e[215]](_0x3b7cx14)};mxPopupMenuAddItem=mxPopupMenu[_0xa55e[44]][_0xa55e[216]];mxPopupMenu[_0xa55e[44]][_0xa55e[216]]=function(_0x3b7cx37,_0x3b7cx38,_0x3b7cx39,_0x3b7cx34,_0x3b7cx3a,_0x3b7cx3b){var _0x3b7cx3c=mxPopupMenuAddItem[_0xa55e[33]](this,arguments);if(_0x3b7cx3b!=null&& !_0x3b7cx3b){mxEvent[_0xa55e[35]](_0x3b7cx3c,_0xa55e[217],function(_0x3b7cx14){mxEvent[_0xa55e[218]](_0x3b7cx14)})};return _0x3b7cx3c};var _0x3b7cx3d=mxGraphHandler[_0xa55e[44]][_0xa55e[219]];mxGraphHandler[_0xa55e[44]][_0xa55e[219]]=function(_0x3b7cx3e){var _0x3b7cx3f=this[_0xa55e[14]][_0xa55e[36]]();var _0x3b7cx40=_0x3b7cx3f[_0xa55e[221]](this[_0xa55e[14]][_0xa55e[220]]());var _0x3b7cx41=_0x3b7cx3d[_0xa55e[33]](this,arguments);var _0x3b7cx34=_0x3b7cx3f[_0xa55e[221]](_0x3b7cx41);if(_0x3b7cx40==null||(_0x3b7cx40!=_0x3b7cx41&&_0x3b7cx40!=_0x3b7cx34)){while(!this[_0xa55e[14]][_0xa55e[222]](_0x3b7cx41)&&!this[_0xa55e[14]][_0xa55e[222]](_0x3b7cx34)&&_0x3b7cx3f[_0xa55e[211]](_0x3b7cx34)&&!this[_0xa55e[14]][_0xa55e[223]](_0x3b7cx34)){_0x3b7cx41=_0x3b7cx34;_0x3b7cx34=this[_0xa55e[14]][_0xa55e[36]]()[_0xa55e[221]](_0x3b7cx41)}};return _0x3b7cx41};var _0x3b7cx42=mxGraphHandler[_0xa55e[44]][_0xa55e[224]];mxGraphHandler[_0xa55e[44]][_0xa55e[224]]=function(_0x3b7cx41){var _0x3b7cx3c=_0x3b7cx42[_0xa55e[33]](this,arguments);var _0x3b7cx3f=this[_0xa55e[14]][_0xa55e[36]]();var _0x3b7cx40=_0x3b7cx3f[_0xa55e[221]](this[_0xa55e[14]][_0xa55e[220]]());var _0x3b7cx34=_0x3b7cx3f[_0xa55e[221]](_0x3b7cx41);if(_0x3b7cx40==null||(_0x3b7cx40!=_0x3b7cx41&&_0x3b7cx40!=_0x3b7cx34)){if(!this[_0xa55e[14]][_0xa55e[222]](_0x3b7cx41)&&_0x3b7cx3f[_0xa55e[211]](_0x3b7cx34)&&!this[_0xa55e[14]][_0xa55e[223]](_0x3b7cx34)){_0x3b7cx3c=true}};return _0x3b7cx3c};mxGraphHandler[_0xa55e[44]][_0xa55e[225]]=function(_0x3b7cx3e){var _0x3b7cx41=_0x3b7cx3e[_0xa55e[226]]();if(_0x3b7cx41==null){_0x3b7cx41=this[_0xa55e[227]]};var _0x3b7cx3f=this[_0xa55e[14]][_0xa55e[36]]();var _0x3b7cx34=_0x3b7cx3f[_0xa55e[221]](_0x3b7cx41);while(this[_0xa55e[14]][_0xa55e[222]](_0x3b7cx41)&&_0x3b7cx3f[_0xa55e[211]](_0x3b7cx34)&&!this[_0xa55e[14]][_0xa55e[223]](_0x3b7cx34)){_0x3b7cx41=_0x3b7cx34;_0x3b7cx34=_0x3b7cx3f[_0xa55e[221]](_0x3b7cx41)};this[_0xa55e[14]][_0xa55e[229]](_0x3b7cx41,_0x3b7cx3e[_0xa55e[228]]())};mxPanningHandler[_0xa55e[44]][_0xa55e[230]]=function(_0x3b7cx3e){var _0x3b7cx41=_0x3b7cx3e[_0xa55e[226]]();var _0x3b7cx3f=this[_0xa55e[14]][_0xa55e[36]]();var _0x3b7cx34=_0x3b7cx3f[_0xa55e[221]](_0x3b7cx41);while(_0x3b7cx3f[_0xa55e[211]](_0x3b7cx34)&&!this[_0xa55e[14]][_0xa55e[223]](_0x3b7cx34)){if(this[_0xa55e[14]][_0xa55e[222]](_0x3b7cx34)){_0x3b7cx41=_0x3b7cx34};_0x3b7cx34=_0x3b7cx3f[_0xa55e[221]](_0x3b7cx34)};return _0x3b7cx41}};Editor[_0xa55e[44]][_0xa55e[18]]=function(){var _0x3b7cxe=this[_0xa55e[14]];var _0x3b7cx43= new mxUndoManager();var _0x3b7cx44=function(_0x3b7cx45,_0x3b7cx14){_0x3b7cx43[_0xa55e[233]](_0x3b7cx14[_0xa55e[232]](_0xa55e[231]))};_0x3b7cxe[_0xa55e[36]]()[_0xa55e[35]](mxEvent.UNDO,_0x3b7cx44);_0x3b7cxe[_0xa55e[234]]()[_0xa55e[35]](mxEvent.UNDO,_0x3b7cx44);var _0x3b7cx46=function(_0x3b7cx45,_0x3b7cx14){var _0x3b7cx47=_0x3b7cxe[_0xa55e[236]](_0x3b7cx14[_0xa55e[232]](_0xa55e[231])[_0xa55e[235]]);var _0x3b7cx35=[];for(var _0x3b7cx30=1;_0x3b7cx30<_0x3b7cx47[_0xa55e[83]];_0x3b7cx30++){if(_0x3b7cxe[_0xa55e[53]][_0xa55e[237]](_0x3b7cx47[_0x3b7cx30])!=null){_0x3b7cx35[_0xa55e[238]](_0x3b7cx47[_0x3b7cx30])}};_0x3b7cxe[_0xa55e[239]](_0x3b7cx35)};_0x3b7cx43[_0xa55e[35]](mxEvent.UNDO,_0x3b7cx46);_0x3b7cx43[_0xa55e[35]](mxEvent.REDO,_0x3b7cx46);return _0x3b7cx43};Editor[_0xa55e[44]][_0xa55e[13]]=function(){mxStencilRegistry[_0xa55e[241]](STENCIL_PATH+_0xa55e[240])};(function(){mxStencilRegistry[_0xa55e[242]]={};mxStencilRegistry[_0xa55e[243]]=[];mxStencilRegistry[_0xa55e[244]]=function(_0x3b7cx48){var _0x3b7cx3c=mxStencilRegistry[_0xa55e[245]][_0x3b7cx48];if(_0x3b7cx3c==null){var _0x3b7cx49=mxStencilRegistry[_0xa55e[246]](_0x3b7cx48);if(_0x3b7cx49!=null){var _0x3b7cx4a=mxStencilRegistry[_0xa55e[242]][_0x3b7cx49];if(_0x3b7cx4a!=null){if(mxStencilRegistry[_0xa55e[243]][_0x3b7cx49]==null){mxStencilRegistry[_0xa55e[243]][_0x3b7cx49]=1;for(var _0x3b7cx30=0;_0x3b7cx30<_0x3b7cx4a[_0xa55e[83]];_0x3b7cx30++){var _0x3b7cx4b=_0x3b7cx4a[_0x3b7cx30];if(_0x3b7cx4b[_0xa55e[248]]()[_0xa55e[247]](_0x3b7cx4b[_0xa55e[83]]-4,_0x3b7cx4b[_0xa55e[83]])==_0xa55e[25]){mxStencilRegistry[_0xa55e[241]](_0x3b7cx4b,null)}else {if(_0x3b7cx4b[_0xa55e[248]]()[_0xa55e[247]](_0x3b7cx4b[_0xa55e[83]]-3,_0x3b7cx4b[_0xa55e[83]])==_0xa55e[249]){var _0x3b7cx4c=mxUtils[_0xa55e[250]](_0x3b7cx4b);if(_0x3b7cx4c!=null){eval[_0xa55e[11]](window,_0x3b7cx4c[_0xa55e[251]]())}}else {}}}}}else {mxStencilRegistry[_0xa55e[241]](STENCIL_PATH+_0xa55e[252]+_0x3b7cx49+_0xa55e[25],null)};_0x3b7cx3c=mxStencilRegistry[_0xa55e[245]][_0x3b7cx48]}};return _0x3b7cx3c};mxStencilRegistry[_0xa55e[246]]=function(_0x3b7cx48){var _0x3b7cx4d=_0x3b7cx48[_0xa55e[254]](_0xa55e[253]);var _0x3b7cx4e=null;if(_0x3b7cx4d[_0xa55e[83]]>0&&_0x3b7cx4d[0]==_0xa55e[255]){_0x3b7cx4e=_0x3b7cx4d[1];for(var _0x3b7cx30=2;_0x3b7cx30<_0x3b7cx4d[_0xa55e[83]]-1;_0x3b7cx30++){_0x3b7cx4e+=_0xa55e[252]+_0x3b7cx4d[_0x3b7cx30]}};return _0x3b7cx4e};mxStencilRegistry[_0xa55e[241]]=function(_0x3b7cx4f,_0x3b7cx50,_0x3b7cx51){_0x3b7cx51=(_0x3b7cx51!=null)?_0x3b7cx51:false;var _0x3b7cx52=mxStencilRegistry[_0xa55e[243]][_0x3b7cx4f];if(_0x3b7cx51||_0x3b7cx52==null){var _0x3b7cx53=false;if(_0x3b7cx52==null){var _0x3b7cx4c=mxUtils[_0xa55e[250]](_0x3b7cx4f);_0x3b7cx52=_0x3b7cx4c[_0xa55e[256]]();mxStencilRegistry[_0xa55e[243]][_0x3b7cx4f]=_0x3b7cx52;_0x3b7cx53=true};mxStencilRegistry[_0xa55e[257]](_0x3b7cx52,_0x3b7cx50,_0x3b7cx53)}};mxStencilRegistry[_0xa55e[257]]=function(_0x3b7cx54,_0x3b7cx50,_0x3b7cx53){_0x3b7cx53=(_0x3b7cx53!=null)?_0x3b7cx53:true;var _0x3b7cx55=_0x3b7cx54[_0xa55e[258]];var _0x3b7cx56=_0x3b7cx55[_0xa55e[184]];var _0x3b7cx57=_0xa55e[20];var _0x3b7cx48=_0x3b7cx55[_0xa55e[56]](_0xa55e[259]);if(_0x3b7cx48!=null){_0x3b7cx57=_0x3b7cx48+_0xa55e[253]};while(_0x3b7cx56!=null){if(_0x3b7cx56[_0xa55e[260]]==mxConstants[_0xa55e[261]]){_0x3b7cx48=_0x3b7cx56[_0xa55e[56]](_0xa55e[259]);if(_0x3b7cx48!=null){_0x3b7cx57=_0x3b7cx57[_0xa55e[248]]();var _0x3b7cx58=_0x3b7cx48[_0xa55e[263]](/ /g,_0xa55e[262]);if(_0x3b7cx53){mxStencilRegistry[_0xa55e[264]](_0x3b7cx57+_0x3b7cx58[_0xa55e[248]](), new mxStencil(_0x3b7cx56))};if(_0x3b7cx50!=null){var _0x3b7cx19=_0x3b7cx56[_0xa55e[56]](_0xa55e[265]);var _0x3b7cx1a=_0x3b7cx56[_0xa55e[56]](_0xa55e[266]);_0x3b7cx19=(_0x3b7cx19==null)?80:parseInt(_0x3b7cx19,10);_0x3b7cx1a=(_0x3b7cx1a==null)?80:parseInt(_0x3b7cx1a,10);_0x3b7cx50(_0x3b7cx57,_0x3b7cx58,_0x3b7cx48,_0x3b7cx19,_0x3b7cx1a)}}};_0x3b7cx56=_0x3b7cx56[_0xa55e[267]]}}})();OpenFile=function(_0x3b7cx59){this[_0xa55e[268]]=null;this[_0xa55e[269]]=null;this[_0xa55e[270]]=_0x3b7cx59};OpenFile[_0xa55e[44]][_0xa55e[271]]=function(_0x3b7cx6){this[_0xa55e[269]]=_0x3b7cx6;this[_0xa55e[272]]()};OpenFile[_0xa55e[44]][_0xa55e[273]]=function(_0x3b7cx6,_0x3b7cx5a){this[_0xa55e[274]]=_0x3b7cx6;this[_0xa55e[21]]=_0x3b7cx5a;this[_0xa55e[272]]()};OpenFile[_0xa55e[44]][_0xa55e[275]]=function(_0x3b7cx5b){this[_0xa55e[276]]();mxUtils[_0xa55e[277]](_0x3b7cx5b)};OpenFile[_0xa55e[44]][_0xa55e[272]]=function(){if(this[_0xa55e[269]]!=null&&this[_0xa55e[274]]!=null){this[_0xa55e[269]](this[_0xa55e[274]],this[_0xa55e[21]]);this[_0xa55e[276]]()}};OpenFile[_0xa55e[44]][_0xa55e[276]]=function(){if(this[_0xa55e[270]]!=null){this[_0xa55e[270]]()}}
\ No newline at end of file
+/**
+ * $Id: Editor.js,v 1.14 2013/03/06 17:57:10 boris Exp $
+ * Copyright (c) 2006-2012, JGraph Ltd
+ */
+// Specifies if local storage should be used (eg. on the iPad which has no filesystem)
+var useLocalStorage = (mxClient.IS_TOUCH || urlParams['storage'] == 'local') && typeof(localStorage) != 'undefined';
+var fileSupport = window.File != null && window.FileReader != null && window.FileList != null;
+
+// Specifies if connector should be shown on selected cells
+var touchStyle = mxClient.IS_TOUCH || urlParams['touch'] == '1';
+
+// Counts open editor tabs (must be global for cross-window access)
+var counter = 0;
+
+// Cross-domain window access is not allowed in FF, so if we
+// were opened from another domain then this will fail.
+try {
+       var op = window;
+
+       while (op.opener != null && !isNaN(op.opener.counter)) {
+               op = op.opener;
+       }
+
+       // Increments the counter in the first opener in the chain
+       if (op != null) {
+               op.counter++;
+               counter = op.counter;
+       }
+} catch (e) {
+       // ignore
+}
+
+/**
+ * Editor constructor executed on page load.
+ */
+Editor = function() {
+       mxEventSource.call(this);
+       this.init();
+       this.initStencilRegistry();
+       this.graph = new Graph();
+       this.outline = new mxOutline(this.graph);
+       this.outline.updateOnPan = true;
+       this.undoManager = this.createUndoManager();
+       this.status = '';
+
+       // Contains the name which was used for the last save. Default value is null.
+       this.filename = null;
+
+       this.getOrCreateFilename = function() {
+               return this.filename || mxResources.get('drawing', [counter]) + '.xml';
+       };
+
+       this.getFilename = function() {
+               return this.filename;
+       };
+
+       // Sets the status and fires a statusChanged event
+       this.setStatus = function(value) {
+               this.status = value;
+               this.fireEvent(new mxEventObject('statusChanged'));
+       };
+
+       // Returns the current status
+       this.getStatus = function() {
+               return this.status;
+       };
+
+       // Contains the current modified state of the diagram. This is false for
+       // new diagrams and after the diagram was saved.
+       this.modified = false;
+
+       // Updates modified state if graph changes
+       this.graphChangeListener = function() {
+               this.modified = true;
+       };
+       this.graph.getModel().addListener(mxEvent.CHANGE, mxUtils.bind(this, function() {
+               this.graphChangeListener.apply(this, arguments);
+       }));
+
+       // Installs dialog if browser window is closed without saving
+       // This must be disabled during save and image export
+       window.onbeforeunload = mxUtils.bind(this, function() {
+               if (this.modified) {
+                       return mxResources.get('allChangesLost');
+               }
+       });
+
+       // Sets persistent graph state defaults
+       this.graph.resetViewOnRootChange = false;
+       this.graph.scrollbars = true;
+       this.graph.background = null;
+};
+
+// Editor inherits from mxEventSource
+mxUtils.extend(Editor, mxEventSource);
+
+/**
+ * Specifies the image URL to be used for the grid.
+ */
+Editor.prototype.gridImage = IMAGE_PATH + '/grid.gif';
+
+/**
+ * Specifies the image URL to be used for the transparent background.
+ */
+Editor.prototype.transparentImage = IMAGE_PATH + '/transparent.gif';
+
+/**
+ * Sets the XML node for the current diagram.
+ */
+Editor.prototype.setGraphXml = function(node) {
+       var dec = new mxCodec(node.ownerDocument);
+
+       if (node.nodeName == 'mxGraphModel') {
+               this.graph.view.scale = 1;
+               this.graph.gridEnabled = node.getAttribute('grid') != '0';
+               this.graph.graphHandler.guidesEnabled = node.getAttribute('guides') != '0';
+               this.graph.setTooltips(node.getAttribute('tooltips') != '0');
+               this.graph.setConnectable(node.getAttribute('connect') != '0');
+               this.graph.foldingEnabled = node.getAttribute('fold') != '0';
+               this.graph.scrollbars = node.getAttribute('scrollbars') != '0';
+
+               if (!this.graph.scrollbars) {
+                       this.graph.container.scrollLeft = 0;
+                       this.graph.container.scrollTop = 0;
+                       this.graph.view.translate.x = Number(node.getAttribute('dx') || 0);
+                       this.graph.view.translate.y = Number(node.getAttribute('dy') || 0);
+               }
+
+               this.graph.pageVisible = node.getAttribute('page') == '1';
+               this.graph.pageBreaksVisible = this.graph.pageVisible;
+               this.graph.preferPageSize = this.graph.pageBreaksVisible;
+
+               // Loads the persistent state settings
+               var ps = node.getAttribute('pageScale');
+
+               if (ps != null) {
+                       this.graph.pageScale = ps;
+               } else {
+                       this.graph.pageScale = 1.5;
+               }
+
+               var pw = node.getAttribute('pageWidth');
+               var ph = node.getAttribute('pageHeight');
+
+               if (pw != null && ph != null) {
+                       this.graph.pageFormat = new mxRectangle(0, 0, parseFloat(pw), parseFloat(ph));
+                       this.outline.outline.pageFormat = this.graph.pageFormat;
+               }
+
+               // Loads the persistent state settings
+               var bg = node.getAttribute('background');
+
+               if (bg != null && bg.length > 0) {
+                       this.graph.background = bg;
+               }
+
+               dec.decode(node, this.graph.getModel());
+               this.updateGraphComponents();
+       }
+};
+
+/**
+ * Returns the XML node that represents the current diagram.
+ */
+Editor.prototype.getGraphXml = function() {
+       var enc = new mxCodec(mxUtils.createXmlDocument());
+       var node = enc.encode(this.graph.getModel());
+
+       if (this.graph.view.translate.x != 0 || this.graph.view.translate.y != 0) {
+               node.setAttribute('dx', Math.round(this.graph.view.translate.x * 100) / 100);
+               node.setAttribute('dy', Math.round(this.graph.view.translate.y * 100) / 100);
+       }
+
+       node.setAttribute('grid', (this.graph.isGridEnabled()) ? '1' : '0');
+       node.setAttribute('guides', (this.graph.graphHandler.guidesEnabled) ? '1' : '0');
+       node.setAttribute('guides', (this.graph.graphHandler.guidesEnabled) ? '1' : '0');
+       node.setAttribute('tooltips', (this.graph.tooltipHandler.isEnabled()) ? '1' : '0');
+       node.setAttribute('connect', (this.graph.connectionHandler.isEnabled()) ? '1' : '0');
+       node.setAttribute('fold', (this.graph.foldingEnabled) ? '1' : '0');
+       node.setAttribute('page', (this.graph.pageVisible) ? '1' : '0');
+       node.setAttribute('pageScale', this.graph.pageScale);
+       node.setAttribute('pageWidth', this.graph.pageFormat.width);
+       node.setAttribute('pageHeight', this.graph.pageFormat.height);
+
+       if (!this.graph.scrollbars) {
+               node.setAttribute('scrollbars', '0');
+       }
+
+       if (this.graph.background != null) {
+               node.setAttribute('background', this.graph.background);
+       }
+
+       return node;
+};
+
+/**
+ * Keeps the graph container in sync with the persistent graph state
+ */
+Editor.prototype.updateGraphComponents = function() {
+       var graph = this.graph;
+       var outline = this.outline;
+
+       if (graph.container != null && outline.outline.container != null) {
+               if (graph.background != null) {
+                       if (graph.background == 'none') {
+                               graph.container.style.backgroundColor = 'transparent';
+                       } else {
+                               if (graph.view.backgroundPageShape != null) {
+                                       graph.view.backgroundPageShape.fill = graph.background;
+                                       graph.view.backgroundPageShape.reconfigure();
+                               }
+
+                               graph.container.style.backgroundColor = graph.background;
+                       }
+               } else {
+                       graph.container.style.backgroundColor = '';
+               }
+
+               if (graph.pageVisible) {
+                       graph.container.style.backgroundColor = '#ebebeb';
+                       graph.container.style.borderStyle = 'solid';
+                       graph.container.style.borderColor = '#e5e5e5';
+                       graph.container.style.borderTopWidth = '1px';
+                       graph.container.style.borderLeftWidth = '1px';
+                       graph.container.style.borderRightWidth = '0px';
+                       graph.container.style.borderBottomWidth = '0px';
+               } else {
+                       graph.container.style.border = '';
+               }
+
+               outline.outline.container.style.backgroundColor = graph.container.style.backgroundColor;
+
+               if (outline.outline.pageVisible != graph.pageVisible ||
+                       outline.outline.pageScale != graph.pageScale) {
+                       outline.outline.pageScale = graph.pageScale;
+                       outline.outline.pageVisible = graph.pageVisible;
+                       outline.outline.view.validate();
+               }
+
+               if (graph.scrollbars && graph.container.style.overflow == 'hidden' && !touchStyle) {
+                       graph.container.style.overflow = 'auto';
+               } else if (!graph.scrollbars || touchStyle) {
+                       graph.container.style.overflow = 'hidden';
+               }
+
+               // Transparent.gif is a workaround for focus repaint problems in IE
+               var noBackground = (mxClient.IS_IE && document.documentMode >= 9) ? 'url(' + this.transparentImage + ')' : 'none';
+               graph.container.style.backgroundImage = (!graph.pageVisible && graph.isGridEnabled()) ? 'url(' + this.gridImage + ')' : noBackground;
+
+               if (graph.view.backgroundPageShape != null) {
+                       graph.view.backgroundPageShape.node.style.backgroundImage = (this.graph.isGridEnabled()) ? 'url(' + this.gridImage + ')' : 'none';
+               }
+       }
+};
+
+/**
+ * Initializes the environment.
+ */
+Editor.prototype.init = function() {
+       // Adds stylesheet for IE6
+       if (mxClient.IS_IE6) {
+               mxClient.link('stylesheet', CSS_PATH + '/grapheditor-ie6.css');
+       }
+
+       // Adds required resources (disables loading of fallback properties, this can only
+       // be used if we know that all keys are defined in the language specific file)
+       mxResources.loadDefaultBundle = false;
+       mxResources.add(RESOURCE_BASE);
+
+       // Makes the connection hotspot smaller
+       mxConstants.DEFAULT_HOTSPOT = 0.3;
+
+       var mxConnectionHandlerCreateMarker = mxConnectionHandler.prototype.createMarker;
+       mxConnectionHandler.prototype.createMarker = function() {
+               var marker = mxConnectionHandlerCreateMarker.apply(this, arguments);
+
+               // Overrides to ignore hotspot only for target terminal
+               marker.intersects = mxUtils.bind(this, function(state, evt) {
+                       if (this.isConnecting()) {
+                               return true;
+                       }
+
+                       return mxCellMarker.prototype.intersects.apply(marker, arguments);
+               });
+
+               return marker;
+       };
+
+       // Makes the shadow brighter
+       mxConstants.SHADOWCOLOR = '#d0d0d0';
+
+       // Changes some default colors
+       mxConstants.HANDLE_FILLCOLOR = '#99ccff';
+       mxConstants.HANDLE_STROKECOLOR = '#0088cf';
+       mxConstants.VERTEX_SELECTION_COLOR = '#00a8ff';
+       mxConstants.OUTLINE_COLOR = '#00a8ff';
+       mxConstants.OUTLINE_HANDLE_FILLCOLOR = '#99ccff';
+       mxConstants.OUTLINE_HANDLE_STROKECOLOR = '#00a8ff';
+       mxConstants.CONNECT_HANDLE_FILLCOLOR = '#cee7ff';
+       mxConstants.EDGE_SELECTION_COLOR = '#00a8ff';
+       mxConstants.DEFAULT_VALID_COLOR = '#00a8ff';
+       mxConstants.LABEL_HANDLE_FILLCOLOR = '#cee7ff';
+       mxConstants.GUIDE_COLOR = '#0088cf';
+
+       mxGraph.prototype.pageBreakColor = '#c0c0c0';
+       mxGraph.prototype.pageScale = 1;
+
+       // Increases default rubberband opacity (default is 20)
+       mxRubberband.prototype.defaultOpacity = 30;
+
+       // Changes border color of background page shape
+       mxGraphView.prototype.createBackgroundPageShape = function(bounds) {
+               return new mxRectangleShape(bounds, this.graph.background || 'white', '#cacaca');
+       };
+
+       // Fits the number of background pages to the graph
+       mxGraphView.prototype.getBackgroundPageBounds = function() {
+               var gb = this.getGraphBounds();
+
+               // Computes unscaled, untranslated graph bounds
+               var x = (gb.width > 0) ? gb.x / this.scale - this.translate.x : 0;
+               var y = (gb.height > 0) ? gb.y / this.scale - this.translate.y : 0;
+               var w = gb.width / this.scale;
+               var h = gb.height / this.scale;
+
+               var fmt = this.graph.pageFormat;
+               var ps = this.graph.pageScale;
+
+               var pw = fmt.width * ps;
+               var ph = fmt.height * ps;
+
+               var x0 = Math.floor(Math.min(0, x) / pw);
+               var y0 = Math.floor(Math.min(0, y) / ph);
+               var xe = Math.ceil(Math.max(1, x + w) / pw);
+               var ye = Math.ceil(Math.max(1, y + h) / ph);
+
+               var rows = xe - x0;
+               var cols = ye - y0;
+
+               var bounds = new mxRectangle(this.scale * (this.translate.x + x0 * pw), this.scale *
+                       (this.translate.y + y0 * ph), this.scale * rows * pw, this.scale * cols * ph);
+
+               return bounds;
+       };
+
+       // Add panning for background page in VML
+       var graphPanGraph = mxGraph.prototype.panGraph;
+       mxGraph.prototype.panGraph = function(dx, dy) {
+               graphPanGraph.apply(this, arguments);
+
+               if ((this.dialect != mxConstants.DIALECT_SVG && this.view.backgroundPageShape != null) &&
+                       (!this.useScrollbarsForPanning || !mxUtils.hasScrollbars(this.container))) {
+                       this.view.backgroundPageShape.node.style.marginLeft = dx + 'px';
+                       this.view.backgroundPageShape.node.style.marginTop = dy + 'px';
+               }
+       };
+
+       var editor = this;
+
+       // Uses HTML for background pages (to support grid background image)
+       mxGraphView.prototype.validateBackground = function() {
+               var bg = this.graph.getBackgroundImage();
+
+               if (bg != null) {
+                       if (this.backgroundImage == null || this.backgroundImage.image != bg.src) {
+                               if (this.backgroundImage != null) {
+                                       this.backgroundImage.destroy();
+                               }
+
+                               var bounds = new mxRectangle(0, 0, 1, 1);
+
+                               this.backgroundImage = new mxImageShape(bounds, bg.src);
+                               this.backgroundImage.dialect = this.graph.dialect;
+                               this.backgroundImage.init(this.backgroundPane);
+                               this.backgroundImage.redraw();
+                       }
+
+                       this.redrawBackgroundImage(this.backgroundImage, bg);
+               } else if (this.backgroundImage != null) {
+                       this.backgroundImage.destroy();
+                       this.backgroundImage = null;
+               }
+
+               if (this.graph.pageVisible) {
+                       var bounds = this.getBackgroundPageBounds();
+
+                       if (this.backgroundPageShape == null) {
+                               this.backgroundPageShape = this.createBackgroundPageShape(bounds);
+                               this.backgroundPageShape.scale = 1;
+                               this.backgroundPageShape.isShadow = true;
+                               this.backgroundPageShape.dialect = mxConstants.DIALECT_STRICTHTML;
+                               this.backgroundPageShape.init(this.graph.container);
+                               // Required for the browser to render the background page in correct order
+                               this.graph.container.firstChild.style.position = 'absolute';
+                               this.graph.container.insertBefore(this.backgroundPageShape.node, this.graph.container.firstChild);
+                               this.backgroundPageShape.redraw();
+
+                               this.backgroundPageShape.node.className = 'geBackgroundPage';
+                               this.backgroundPageShape.node.style.backgroundPosition = '-1px -1px';
+
+                               // Adds listener for double click handling on background
+                               mxEvent.addListener(this.backgroundPageShape.node, 'dblclick',
+                                       mxUtils.bind(this, function(evt) {
+                                               this.graph.dblClick(evt);
+                                       })
+                               );
+
+                               // Adds basic listeners for graph event dispatching outside of the
+                               // container and finishing the handling of a single gesture
+                               mxEvent.addGestureListeners(this.backgroundPageShape.node,
+                                       mxUtils.bind(this, function(evt) {
+                                               this.graph.fireMouseEvent(mxEvent.MOUSE_DOWN, new mxMouseEvent(evt));
+                                       }),
+                                       mxUtils.bind(this, function(evt) {
+                                               // Hides the tooltip if mouse is outside container
+                                               if (this.graph.tooltipHandler != null &&
+                                                       this.graph.tooltipHandler.isHideOnHover()) {
+                                                       this.graph.tooltipHandler.hide();
+                                               }
+
+                                               if (this.graph.isMouseDown &&
+                                                       !mxEvent.isConsumed(evt)) {
+                                                       this.graph.fireMouseEvent(mxEvent.MOUSE_MOVE,
+                                                               new mxMouseEvent(evt));
+                                               }
+                                       }),
+                                       mxUtils.bind(this, function(evt) {
+                                               this.graph.fireMouseEvent(mxEvent.MOUSE_UP,
+                                                       new mxMouseEvent(evt));
+                                       }));
+                       } else {
+                               this.backgroundPageShape.scale = 1;
+                               this.backgroundPageShape.bounds = bounds;
+                               this.backgroundPageShape.redraw();
+                       }
+
+                       this.backgroundPageShape.node.style.backgroundImage = (this.graph.isGridEnabled()) ?
+                               'url(' + editor.gridImage + ')' : 'none';
+               } else if (this.backgroundPageShape != null) {
+                       this.backgroundPageShape.destroy();
+                       this.backgroundPageShape = null;
+               }
+       };
+
+       // Draws page breaks only within the page
+       mxGraph.prototype.updatePageBreaks = function(visible, width, height) {
+               var scale = this.view.scale;
+               var tr = this.view.translate;
+               var fmt = this.pageFormat;
+               var ps = scale * this.pageScale;
+
+               var bounds2 = this.view.getBackgroundPageBounds();
+
+               width = bounds2.width;
+               height = bounds2.height;
+               var bounds = new mxRectangle(scale * tr.x, scale * tr.y,
+                       fmt.width * ps, fmt.height * ps);
+
+               // Does not show page breaks if the scale is too small
+               visible = visible && Math.min(bounds.width, bounds.height) > this.minPageBreakDist;
+
+               var horizontalCount = (visible) ? Math.ceil(width / bounds.width) - 1 : 0;
+               var verticalCount = (visible) ? Math.ceil(height / bounds.height) - 1 : 0;
+               var right = bounds2.x + width;
+               var bottom = bounds2.y + height;
+
+               if (this.horizontalPageBreaks == null && horizontalCount > 0) {
+                       this.horizontalPageBreaks = [];
+               }
+
+               if (this.horizontalPageBreaks != null) {
+                       for (var i = 0; i <= horizontalCount; i++) {
+                               var pts = [new mxPoint(bounds2.x + (i + 1) * bounds.width, bounds2.y),
+                                       new mxPoint(bounds2.x + (i + 1) * bounds.width, bottom)
+                               ];
+
+                               if (this.horizontalPageBreaks[i] != null) {
+                                       this.horizontalPageBreaks[i].scale = 1;
+                                       this.horizontalPageBreaks[i].points = pts;
+                                       this.horizontalPageBreaks[i].redraw();
+                               } else {
+                                       var pageBreak = new mxPolyline(pts, this.pageBreakColor, this.scale);
+                                       pageBreak.dialect = this.dialect;
+                                       pageBreak.isDashed = this.pageBreakDashed;
+                                       pageBreak.addPipe = false;
+                                       pageBreak.scale = scale;
+                                       pageBreak.init(this.view.backgroundPane);
+                                       pageBreak.redraw();
+
+                                       this.horizontalPageBreaks[i] = pageBreak;
+                               }
+                       }
+
+                       for (var i = horizontalCount; i < this.horizontalPageBreaks.length; i++) {
+                               this.horizontalPageBreaks[i].destroy();
+                       }
+
+                       this.horizontalPageBreaks.splice(horizontalCount, this.horizontalPageBreaks.length - horizontalCount);
+               }
+
+               if (this.verticalPageBreaks == null && verticalCount > 0) {
+                       this.verticalPageBreaks = [];
+               }
+
+               if (this.verticalPageBreaks != null) {
+                       for (var i = 0; i <= verticalCount; i++) {
+                               var pts = [new mxPoint(bounds2.x, bounds2.y + (i + 1) * bounds.height),
+                                       new mxPoint(right, bounds2.y + (i + 1) * bounds.height)
+                               ];
+
+                               if (this.verticalPageBreaks[i] != null) {
+                                       this.verticalPageBreaks[i].scale = 1; //scale;
+                                       this.verticalPageBreaks[i].points = pts;
+                                       this.verticalPageBreaks[i].redraw();
+                               } else {
+                                       var pageBreak = new mxPolyline(pts, this.pageBreakColor, scale);
+                                       pageBreak.dialect = this.dialect;
+                                       pageBreak.isDashed = this.pageBreakDashed;
+                                       pageBreak.addPipe = false;
+                                       pageBreak.scale = scale;
+                                       pageBreak.init(this.view.backgroundPane);
+                                       pageBreak.redraw();
+
+                                       this.verticalPageBreaks[i] = pageBreak;
+                               }
+                       }
+
+                       for (var i = verticalCount; i < this.verticalPageBreaks.length; i++) {
+                               this.verticalPageBreaks[i].destroy();
+                       }
+
+                       this.verticalPageBreaks.splice(verticalCount, this.verticalPageBreaks.length - verticalCount);
+               }
+       };
+
+       // Enables snapping to off-grid terminals for edge waypoints
+       mxEdgeHandler.prototype.snapToTerminals = true;
+
+       // Enables guides
+       mxGraphHandler.prototype.guidesEnabled = true;
+
+       // Disables removing relative children from parents
+       var mxGraphHandlerShouldRemoveCellsFromParent = mxGraphHandler.prototype.shouldRemoveCellsFromParent;
+       mxGraphHandler.prototype.shouldRemoveCellsFromParent = function(parent, cells, evt) {
+               for (var i = 0; i < cells.length; i++) {
+                       if (this.graph.getModel().isVertex(cells[i])) {
+                               var geo = this.graph.getCellGeometry(cells[i]);
+
+                               if (geo != null && geo.relative) {
+                                       return false;
+                               }
+                       }
+               }
+
+               return mxGraphHandlerShouldRemoveCellsFromParent.apply(this, arguments);
+       };
+
+       // Alt-move disables guides
+       mxGuide.prototype.isEnabledForEvent = function(evt) {
+               return !mxEvent.isAltDown(evt);
+       };
+
+       // Consumes click events for disabled menu items
+       mxPopupMenuAddItem = mxPopupMenu.prototype.addItem;
+       mxPopupMenu.prototype.addItem = function(title, image, funct, parent, iconCls, enabled) {
+               var result = mxPopupMenuAddItem.apply(this, arguments);
+
+               if (enabled != null && !enabled) {
+                       mxEvent.addListener(result, 'mousedown', function(evt) {
+                               mxEvent.consume(evt);
+                       });
+               }
+
+               return result;
+       };
+
+       // Selects descendants before children selection mode
+       var graphHandlerGetInitialCellForEvent = mxGraphHandler.prototype.getInitialCellForEvent;
+       mxGraphHandler.prototype.getInitialCellForEvent = function(me) {
+               var model = this.graph.getModel();
+               var psel = model.getParent(this.graph.getSelectionCell());
+               var cell = graphHandlerGetInitialCellForEvent.apply(this, arguments);
+               var parent = model.getParent(cell);
+
+               if (psel == null || (psel != cell && psel != parent)) {
+                       while (!this.graph.isCellSelected(cell) && !this.graph.isCellSelected(parent) &&
+                               model.isVertex(parent) && !this.graph.isValidRoot(parent)) {
+                               cell = parent;
+                               parent = this.graph.getModel().getParent(cell);
+                       }
+               }
+
+               return cell;
+       };
+
+       // Selection is delayed to mouseup if child selected
+       var graphHandlerIsDelayedSelection = mxGraphHandler.prototype.isDelayedSelection;
+       mxGraphHandler.prototype.isDelayedSelection = function(cell) {
+               var result = graphHandlerIsDelayedSelection.apply(this, arguments);
+               var model = this.graph.getModel();
+               var psel = model.getParent(this.graph.getSelectionCell());
+               var parent = model.getParent(cell);
+
+               if (psel == null || (psel != cell && psel != parent)) {
+                       if (!this.graph.isCellSelected(cell) && model.isVertex(parent) && !this.graph.isValidRoot(parent)) {
+                               result = true;
+                       }
+               }
+
+               return result;
+       };
+
+       // Delayed selection of parent group
+       mxGraphHandler.prototype.selectDelayed = function(me) {
+               var cell = me.getCell();
+
+               if (cell == null) {
+                       cell = this.cell;
+               }
+
+               var model = this.graph.getModel();
+               var parent = model.getParent(cell);
+
+               while (this.graph.isCellSelected(cell) && model.isVertex(parent) && !this.graph.isValidRoot(parent)) {
+                       cell = parent;
+                       parent = model.getParent(cell);
+               }
+
+               this.graph.selectCellForEvent(cell, me.getEvent());
+       };
+
+       // Returns last selected ancestor
+       mxPanningHandler.prototype.getCellForPopupEvent = function(me) {
+               var cell = me.getCell();
+               var model = this.graph.getModel();
+               var parent = model.getParent(cell);
+
+               while (model.isVertex(parent) && !this.graph.isValidRoot(parent)) {
+                       if (this.graph.isCellSelected(parent)) {
+                               cell = parent;
+                       }
+
+                       parent = model.getParent(parent);
+               }
+
+               return cell;
+       };
+};
+
+/**
+ * Creates and returns a new undo manager.
+ */
+Editor.prototype.createUndoManager = function() {
+       var graph = this.graph;
+       var undoMgr = new mxUndoManager();
+
+       // Installs the command history
+       var listener = function(sender, evt) {
+               undoMgr.undoableEditHappened(evt.getProperty('edit'));
+       };
+
+       graph.getModel().addListener(mxEvent.UNDO, listener);
+       graph.getView().addListener(mxEvent.UNDO, listener);
+
+       // Keeps the selection in sync with the history
+       var undoHandler = function(sender, evt) {
+               var cand = graph.getSelectionCellsForChanges(evt.getProperty('edit').changes);
+               var cells = [];
+
+               for (var i = 1; i < cand.length; i++) {
+                       if (graph.view.getState(cand[i]) != null) {
+                               cells.push(cand[i]);
+                       }
+               }
+
+               graph.setSelectionCells(cells);
+       };
+
+       undoMgr.addListener(mxEvent.UNDO, undoHandler);
+       undoMgr.addListener(mxEvent.REDO, undoHandler);
+
+       return undoMgr;
+};
+
+/**
+ * Adds basic stencil set (no namespace).
+ */
+Editor.prototype.initStencilRegistry = function() {
+       // Loads default stencils
+       mxStencilRegistry.loadStencilSet(STENCIL_PATH + '/general.xml');
+};
+
+/**
+ * Overrides stencil registry for dynamic loading of stencils.
+ */
+(function() {
+       /**
+        * Maps from library names to an array of Javascript filenames,
+        * which are synchronously loaded. Currently only stencil files
+        * (.xml) and JS files (.js) are supported.
+        * IMPORTANT: For embedded diagrams to work entries must also
+        * be added in EmbedServlet.java.
+        */
+       mxStencilRegistry.libraries = {};
+
+       /**
+        * Stores all package names that have been dynamically loaded.
+        * Each package is only loaded once.
+        */
+       mxStencilRegistry.packages = [];
+
+       // Extends the default stencil registry to add dynamic loading
+       mxStencilRegistry.getStencil = function(name) {
+               var result = mxStencilRegistry.stencils[name];
+
+               if (result == null) {
+                       var basename = mxStencilRegistry.getBasenameForStencil(name);
+
+                       // Loads stencil files and tries again
+                       if (basename != null) {
+                               var libs = mxStencilRegistry.libraries[basename];
+
+                               if (libs != null) {
+                                       if (mxStencilRegistry.packages[basename] == null) {
+                                               mxStencilRegistry.packages[basename] = 1;
+
+                                               for (var i = 0; i < libs.length; i++) {
+                                                       var fname = libs[i];
+
+                                                       if (fname.toLowerCase().substring(fname.length - 4, fname.length) == '.xml') {
+                                                               mxStencilRegistry.loadStencilSet(fname, null);
+                                                       } else if (fname.toLowerCase().substring(fname.length - 3, fname.length) == '.js') {
+                                                               var req = mxUtils.load(fname);
+
+                                                               if (req != null) {
+                                                                       eval.call(window, req.getText());
+                                                               }
+                                                       } else {
+                                                               // FIXME: This does not yet work as the loading is triggered after
+                                                               // the shape was used in the graph, at which point the keys have
+                                                               // typically been translated in the calling method.
+                                                               //mxResources.add(fname);
+                                                       }
+                                               }
+                                       }
+                               } else {
+                                       mxStencilRegistry.loadStencilSet(STENCIL_PATH + '/' + basename + '.xml', null);
+                               }
+
+                               result = mxStencilRegistry.stencils[name];
+                       }
+               }
+
+               return result;
+       };
+
+       // Returns the basename for the given stencil or null if no file must be
+       // loaded to render the given stencil.
+       mxStencilRegistry.getBasenameForStencil = function(name) {
+               var parts = name.split('.');
+               var tmp = null;
+
+               if (parts.length > 0 && parts[0] == 'mxgraph') {
+                       tmp = parts[1];
+
+                       for (var i = 2; i < parts.length - 1; i++) {
+                               tmp += '/' + parts[i];
+                       }
+               }
+
+               return tmp;
+       };
+
+       // Loads the given stencil set
+       mxStencilRegistry.loadStencilSet = function(stencilFile, postStencilLoad, force) {
+               force = (force != null) ? force : false;
+
+               // Uses additional cache for detecting previous load attempts
+               var xmlDoc = mxStencilRegistry.packages[stencilFile];
+
+               if (force || xmlDoc == null) {
+                       var install = false;
+
+                       if (xmlDoc == null) {
+                               var req = mxUtils.load(stencilFile);
+                               xmlDoc = req.getXml();
+                               mxStencilRegistry.packages[stencilFile] = xmlDoc;
+                               install = true;
+                       }
+
+                       mxStencilRegistry.parseStencilSet(xmlDoc, postStencilLoad, install);
+               }
+       };
+
+       // Parses the given stencil set
+       mxStencilRegistry.parseStencilSet = function(xmlDocument, postStencilLoad, install) {
+               install = (install != null) ? install : true;
+               var root = xmlDocument.documentElement;
+               var shape = root.firstChild;
+               var packageName = '';
+               var name = root.getAttribute('name');
+
+               if (name != null) {
+                       packageName = name + '.';
+               }
+
+               while (shape != null) {
+                       if (shape.nodeType == mxConstants.NODETYPE_ELEMENT) {
+                               name = shape.getAttribute('name');
+
+                               if (name != null) {
+                                       packageName = packageName.toLowerCase();
+                                       var stencilName = name.replace(/ /g, "_");
+
+                                       if (install) {
+                                               mxStencilRegistry.addStencil(packageName + stencilName.toLowerCase(), new mxStencil(shape));
+                                       }
+
+                                       if (postStencilLoad != null) {
+                                               var w = shape.getAttribute('w');
+                                               var h = shape.getAttribute('h');
+
+                                               w = (w == null) ? 80 : parseInt(w, 10);
+                                               h = (h == null) ? 80 : parseInt(h, 10);
+
+                                               postStencilLoad(packageName, stencilName, name, w, h);
+                                       }
+                               }
+                       }
+
+                       shape = shape.nextSibling;
+               }
+       };
+})();
+
+/**
+ * Class for asynchronously opening a new window and loading a file at the same
+ * time. This acts as a bridge between the open dialog and the new editor.
+ */
+OpenFile = function(done) {
+       this.producer = null;
+       this.consumer = null;
+       this.done = done;
+};
+
+/**
+ * Registers the editor from the new window.
+ */
+OpenFile.prototype.setConsumer = function(value) {
+       this.consumer = value;
+       this.execute();
+};
+
+/**
+ * Sets the data from the loaded file.
+ */
+OpenFile.prototype.setData = function(value, filename) {
+       this.data = value;
+       this.filename = filename;
+       this.execute();
+};
+
+/**
+ * Displays an error message.
+ */
+OpenFile.prototype.error = function(msg) {
+       this.cancel();
+       mxUtils.alert(msg);
+};
+
+/**
+ * Consumes the data.
+ */
+OpenFile.prototype.execute = function() {
+       if (this.consumer != null && this.data != null) {
+               this.consumer(this.data, this.filename);
+               this.cancel();
+       }
+};
+
+/**
+ * Cancels the operation.
+ */
+OpenFile.prototype.cancel = function() {
+       if (this.done != null) {
+               this.done();
+       }
+};
index 2162a2b..b81caf5 100644 (file)
@@ -1 +1,1325 @@
-var _0xc098=["\x65\x64\x69\x74\x6F\x72","\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x67\x65\x45\x64\x69\x74\x6F\x72","\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x42\x79\x49\x64","\x67\x72\x61\x70\x68","\x6F\x76\x65\x72\x66\x6C\x6F\x77","\x73\x74\x79\x6C\x65","\x68\x69\x64\x64\x65\x6E","\x73\x72\x63","\x73\x75\x62\x6D\x65\x6E\x75\x49\x6D\x61\x67\x65","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x63\x6F\x6E\x6E\x65\x63\x74\x49\x6D\x61\x67\x65","\x61\x63\x74\x69\x6F\x6E\x73","\x6D\x65\x6E\x75\x73","\x63\x72\x65\x61\x74\x65\x44\x69\x76\x73","\x72\x65\x66\x72\x65\x73\x68","\x63\x72\x65\x61\x74\x65\x55\x69","\x65\x76\x65\x6E\x74","\x69\x73\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x41\x6C\x6C\x6F\x77\x65\x64","\x69\x73\x45\x64\x69\x74\x69\x6E\x67","\x62\x69\x6E\x64","\x62\x6F\x64\x79","\x6F\x6E\x73\x65\x6C\x65\x63\x74\x73\x74\x61\x72\x74","\x6D\x65\x6E\x75\x62\x61\x72\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x6F\x6E\x6D\x6F\x75\x73\x65\x64\x6F\x77\x6E","\x74\x6F\x6F\x6C\x62\x61\x72\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x64\x69\x61\x67\x72\x61\x6D\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x73\x69\x64\x65\x62\x61\x72\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x66\x6F\x6F\x74\x65\x72\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x49\x53\x5F\x49\x45","\x64\x6F\x63\x75\x6D\x65\x6E\x74\x4D\x6F\x64\x65","\x75\x6E\x64\x65\x66\x69\x6E\x65\x64","\x63\x6F\x6E\x74\x65\x78\x74\x6D\x65\x6E\x75","\x61\x64\x64\x4C\x69\x73\x74\x65\x6E\x65\x72","\x6F\x6E\x63\x6F\x6E\x74\x65\x78\x74\x6D\x65\x6E\x75","\x69\x6E\x69\x74","\x74\x61\x62\x69\x6E\x64\x65\x78","\x30","\x73\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x63\x75\x72\x73\x6F\x72","\x64\x65\x66\x61\x75\x6C\x74","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x75\x72\x6C\x28","\x67\x72\x69\x64\x49\x6D\x61\x67\x65","\x29","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x2D\x31\x70\x78\x20\x2D\x31\x70\x78","\x66\x6F\x63\x75\x73","\x66\x69\x72\x65\x4D\x6F\x75\x73\x65\x45\x76\x65\x6E\x74","\x4D\x4F\x55\x53\x45\x5F\x44\x4F\x57\x4E","\x61\x70\x70\x6C\x79","\x6D\x75\x6C\x74\x69\x70\x6C\x69\x63\x69\x74\x69\x65\x73","\x73\x74\x61\x72\x74","\x65\x6E\x64","\x69\x6E\x70\x75\x74","\x71\x75\x65\x73\x74\x69\x6F\x6E","\x65\x6D\x61\x69\x6C","\x6E","\x63\x72\x65\x61\x74\x65\x4D\x75\x6C\x74\x69\x70\x6C\x69\x63\x69\x74\x69\x65\x73","\x64\x62\x6C\x43\x6C\x69\x63\x6B","\x63\x65\x6C\x6C","\x66\x69\x72\x65\x45\x76\x65\x6E\x74","\x69\x73\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x43\x6F\x6E\x73\x75\x6D\x65\x64","\x69\x73\x45\x64\x67\x65","\x67\x65\x74\x4D\x6F\x64\x65\x6C","\x74\x61\x67\x4E\x61\x6D\x65","\x76\x61\x6C\x75\x65","\x73\x6F\x75\x72\x63\x65","\x69\x6E\x64\x65\x78\x4F\x66","\x73\x74\x61\x72\x74\x45\x64\x69\x74\x69\x6E\x67\x41\x74\x43\x65\x6C\x6C","\x69\x73\x56\x65\x72\x74\x65\x78","\x6C\x6F\x67","\x73\x68\x6F\x77\x44\x69\x61\x6C\x6F\x67","\x63\x6F\x6E\x73\x75\x6D\x65","\x61\x75\x74\x6F\x45\x78\x70\x61\x6E\x64","\x70\x61\x6E\x6E\x69\x6E\x67\x48\x61\x6E\x64\x6C\x65\x72","\x66\x61\x63\x74\x6F\x72\x79\x4D\x65\x74\x68\x6F\x64","\x63\x72\x65\x61\x74\x65\x50\x6F\x70\x75\x70\x4D\x65\x6E\x75","\x6F\x75\x74\x6C\x69\x6E\x65\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x6F\x75\x74\x6C\x69\x6E\x65","\x68\x69\x64\x65\x4D\x65\x6E\x75","\x61\x64\x64\x47\x65\x73\x74\x75\x72\x65\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x49\x53\x5F\x54\x4F\x55\x43\x48","\x67\x65\x73\x74\x75\x72\x65\x63\x68\x61\x6E\x67\x65","\x74\x72\x61\x6E\x73\x66\x6F\x72\x6D","\x73\x63\x61\x6C\x65\x28","\x73\x63\x61\x6C\x65","\x67\x65\x74\x44\x72\x61\x77\x50\x61\x6E\x65","\x76\x69\x65\x77","\x76\x69\x73\x69\x62\x69\x6C\x69\x74\x79","\x67\x65\x74\x4F\x76\x65\x72\x6C\x61\x79\x50\x61\x6E\x65","\x67\x65\x73\x74\x75\x72\x65\x65\x6E\x64","\x72\x65\x6D\x6F\x76\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x7A\x6F\x6F\x6D\x54\x6F\x43\x65\x6E\x74\x65\x72","\x7A\x6F\x6F\x6D","\x76\x69\x73\x69\x62\x6C\x65","\x63\x72\x65\x61\x74\x65\x4B\x65\x79\x48\x61\x6E\x64\x6C\x65\x72","\x67\x65\x74\x4B\x65\x79\x48\x61\x6E\x64\x6C\x65\x72","\x72\x65\x73\x69\x7A\x65","\x73\x69\x7A\x65\x44\x69\x64\x43\x68\x61\x6E\x67\x65","\x75\x70\x64\x61\x74\x65","\x6F\x70\x65\x6E","\x73\x70\x6C\x69\x74\x53\x69\x7A\x65","\x6D\x65\x6E\x75\x62\x61\x72\x48\x65\x69\x67\x68\x74","\x74\x6F\x6F\x6C\x62\x61\x72\x48\x65\x69\x67\x68\x74","\x66\x6F\x6F\x74\x65\x72\x48\x65\x69\x67\x68\x74","\x68\x73\x70\x6C\x69\x74\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x76\x73\x70\x6C\x69\x74\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x61\x64\x64\x55\x6E\x64\x6F\x4C\x69\x73\x74\x65\x6E\x65\x72","\x61\x64\x64\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x4C\x69\x73\x74\x65\x6E\x65\x72","\x70\x61\x73\x74\x65","\x67\x65\x74","\x69\x73\x45\x6D\x70\x74\x79","\x73\x65\x74\x45\x6E\x61\x62\x6C\x65\x64","\x63\x75\x74","\x63\x6F\x70\x79","\x6F\x70\x65\x6E\x65\x72","\x6F\x70\x65\x6E\x46\x69\x6C\x65","\x70\x61\x72\x73\x65\x58\x6D\x6C","\x64\x6F\x63\x75\x6D\x65\x6E\x74\x45\x6C\x65\x6D\x65\x6E\x74","\x73\x65\x74\x47\x72\x61\x70\x68\x58\x6D\x6C","\x6D\x6F\x64\x69\x66\x69\x65\x64","\x63\x6C\x65\x61\x72","\x75\x6E\x64\x6F\x4D\x61\x6E\x61\x67\x65\x72","\x66\x69\x6C\x65\x6E\x61\x6D\x65","\x69\x6E\x76\x61\x6C\x69\x64\x4F\x72\x4D\x69\x73\x73\x69\x6E\x67\x46\x69\x6C\x65","\x3A\x20","\x6D\x65\x73\x73\x61\x67\x65","\x61\x6C\x65\x72\x74","\x73\x65\x74\x43\x6F\x6E\x73\x75\x6D\x65\x72","\x6F\x70\x65\x6E\x53\x74\x72\x69\x6E\x67","\x64\x61\x74\x61","\x6E\x65\x77","\x67\x65\x74\x47\x72\x61\x70\x68\x58\x6D\x6C","\x67\x65\x74\x50\x72\x65\x74\x74\x79\x58\x6D\x6C","\x67\x65\x74\x49\x74\x65\x6D","\x72\x65\x70\x6C\x61\x63\x65","\x63\x6F\x6E\x66\x69\x72\x6D","\x73\x65\x74\x49\x74\x65\x6D","\x73\x61\x76\x65\x64","\x20","\x73\x65\x74\x53\x74\x61\x74\x75\x73","\x6C\x65\x6E\x67\x74\x68","\x50\x4F\x53\x54","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2F\x78\x2D\x77\x77\x77\x2D\x66\x6F\x72\x6D\x2D\x75\x72\x6C\x65\x6E\x63\x6F\x64\x65\x64","\x73\x65\x74\x52\x65\x71\x75\x65\x73\x74\x48\x65\x61\x64\x65\x72","\x41\x75\x74\x68\x6F\x72\x69\x7A\x61\x74\x69\x6F\x6E","\x42\x65\x61\x72\x65\x72\x20","\x74\x6F\x6B\x65\x6E","\x6F\x6E\x6C\x6F\x61\x64","\x72\x65\x61\x64\x79\x53\x74\x61\x74\x65","\x73\x74\x61\x74\x75\x73","\x50\x72\x6F\x6A\x65\x63\x74\x20","\x6E\x61\x6D\x65","\x72\x65\x73\x70\x6F\x6E\x73\x65","\x70\x61\x72\x73\x65","\x20\x69\x73\x20\x6F\x70\x65\x6E\x69\x6E\x67\x20\x69\x6E\x20\x6E\x65\x77\x20\x77\x69\x6E\x64\x6F\x77\x21","\x6A\x73\x63\x72\x69\x70\x74\x79\x2F\x70\x72\x6F\x6A\x65\x63\x74\x2F","\x69\x64","\x5F\x62\x6C\x61\x6E\x6B","\x45\x72\x72\x6F\x72\x20\x63\x72\x65\x61\x74\x69\x6E\x67\x20\x70\x72\x6F\x6A\x65\x63\x74\x3A\x20","\x65\x72\x72\x6F\x72\x73","\x6F\x6E\x65\x72\x72\x6F\x72","\x73\x74\x61\x74\x75\x73\x54\x65\x78\x74","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x3D\x70\x72\x6F\x6A\x65\x63\x74\x5F\x6E\x65\x77\x26\x6E\x61\x6D\x65\x3D","\x73\x65\x6E\x64","\x64\x72\x61\x77\x69\x6E\x67\x54\x6F\x6F\x4C\x61\x72\x67\x65","\x70\x6F\x70\x75\x70","\x45\x72\x72\x6F\x72\x20\x63\x72\x65\x61\x74\x69\x6E\x67\x20\x70\x72\x6F\x6A\x65\x63\x74","\x73\x61\x76\x65","\x50\x55\x54","\x55\x70\x64\x61\x74\x65\x64\x20\x61\x74\x20","\x75\x70\x64\x61\x74\x65\x64\x41\x74","\x20\x28","\x45\x72\x72\x6F\x72\x20\x73\x61\x76\x69\x6E\x67\x20\x70\x72\x6F\x6A\x65\x63\x74\x3A\x20","\x64\x72\x61\x66\x74\x3D","\x45\x72\x72\x6F\x72\x20\x73\x61\x76\x69\x6E\x67\x20\x66\x69\x6C\x65","\x73\x61\x76\x65\x41\x73","\x45\x72\x72\x6F\x72\x20\x63\x6C\x6F\x6E\x69\x6E\x67\x20\x70\x72\x6F\x6A\x65\x63\x74\x3A\x20","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x3D\x70\x72\x6F\x6A\x65\x63\x74\x5F\x63\x6C\x6F\x6E\x65\x64\x26\x6E\x61\x6D\x65\x3D","\x26\x64\x72\x61\x66\x74\x3D","\x26\x70\x72\x6F\x64\x75\x63\x74\x69\x6F\x6E\x3D","\x76\x61\x6C\x69\x64\x61\x74\x65","\x67\x65\x74\x52\x6F\x6F\x74","\x6D\x6F\x64\x65\x6C","\x67\x65\x74\x43\x68\x69\x6C\x64\x43\x6F\x75\x6E\x74","\x67\x65\x74\x43\x68\x69\x6C\x64\x41\x74","\x69\x73\x56\x61\x6C\x69\x64\x52\x6F\x6F\x74","\x3C\x62\x72\x3E","\x73\x65\x74\x43\x65\x6C\x6C\x57\x61\x72\x6E\x69\x6E\x67","","\x67\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x51\x75\x65\x73\x74\x69\x6F\x6E\x20\x63\x61\x6E\x20\x6E\x6F\x74\x20\x62\x65\x20\x65\x6D\x70\x74\x79","\x0A","\x6C\x61\x62\x65\x6C","\x4C\x61\x62\x65\x6C\x20\x63\x61\x6E\x20\x6E\x6F\x74\x20\x62\x65\x20\x65\x6D\x70\x74\x79","\x76\x61\x6C\x69\x64\x61\x74\x65\x42\x6C\x6F\x63\x6B","\x4F\x6E\x6C\x79\x20\x6F\x6E\x65\x20\x53\x74\x61\x72\x74\x20\x62\x6C\x6F\x63\x6B\x20\x69\x73\x20\x61\x6C\x6C\x6F\x77\x65\x64","\x6E\x6F\x64\x65\x4E\x61\x6D\x65","\x67\x65\x74\x49\x64","\x67\x65\x74\x43\x65\x6C\x6C","\x67\x65\x74\x56\x61\x6C\x75\x65","\x6E\x75\x6C\x6C","\x56\x61\x6C\x75\x65\x20\x63\x61\x6E\x20\x6E\x6F\x74\x20\x62\x65\x20\x65\x6D\x70\x74\x79","\x2C","\x73\x70\x6C\x69\x74","\x74\x72\x69\x6D","\x56\x61\x6C\x75\x65","\x20\x63\x61\x6E\x20\x6E\x6F\x74\x20\x62\x65\x20\x65\x6D\x70\x74\x79","\x66\x6F\x72\x45\x61\x63\x68","\x69\x73\x43\x65\x6C\x6C\x43\x6F\x6C\x6C\x61\x70\x73\x65\x64","\x63\x6F\x6E\x74\x61\x69\x6E\x73\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E\x45\x72\x72\x6F\x72\x73\x52\x65\x73\x6F\x75\x72\x63\x65","\x67\x65\x74\x54\x65\x72\x6D\x69\x6E\x61\x6C","\x67\x65\x74\x45\x64\x67\x65\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E\x45\x72\x72\x6F\x72","\x67\x65\x74\x43\x65\x6C\x6C\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E\x45\x72\x72\x6F\x72","\x76\x61\x6C\x69\x64\x61\x74\x65\x43\x65\x6C\x6C","\x67\x65\x74\x50\x61\x72\x65\x6E\x74","\x67\x65\x74\x44\x65\x66\x61\x75\x6C\x74\x50\x61\x72\x65\x6E\x74","\x63\x68\x69\x6C\x64\x72\x65\x6E","\x70\x75\x62\x6C\x69\x73\x68","\x50\x75\x62\x6C\x69\x73\x68\x65\x64\x20\x61\x74\x20","\x45\x72\x72\x6F\x72\x20\x70\x75\x62\x6C\x69\x73\x68\x69\x6E\x67\x20\x66\x69\x6C\x65","\x45\x72\x72\x6F\x72\x20\x70\x75\x62\x6C\x69\x73\x68\x69\x6E\x67\x20\x70\x72\x6F\x6A\x65\x63\x74\x3A\x20","\x76\x61\x72\x69\x61\x62\x6C\x65","\x56\x61\x72\x69\x61\x62\x6C\x65\x20\x63\x72\x65\x61\x74\x65\x64\x20\x61\x74\x20","\x63\x72\x65\x61\x74\x65\x64\x41\x74","\x6E\x61\x6D\x65\x3D","\x45\x72\x72\x6F\x72\x20\x63\x72\x65\x61\x74\x69\x6E\x67\x20\x76\x61\x72\x69\x61\x62\x6C\x65","\x67\x65\x74\x55\x72\x6C","\x70\x61\x74\x68\x6E\x61\x6D\x65","\x6C\x6F\x63\x61\x74\x69\x6F\x6E","\x3F","\x26","\x3D","\x75\x6E\x64\x6F","\x72\x65\x64\x6F","\x63\x61\x6E\x55\x6E\x64\x6F","\x63\x61\x6E\x52\x65\x64\x6F","\x69\x73\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x45\x6D\x70\x74\x79","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73","\x64\x65\x6C\x65\x74\x65","\x64\x75\x70\x6C\x69\x63\x61\x74\x65","\x62\x6F\x6C\x64","\x69\x74\x61\x6C\x69\x63","\x75\x6E\x64\x65\x72\x6C\x69\x6E\x65","\x74\x6F\x46\x72\x6F\x6E\x74","\x74\x6F\x42\x61\x63\x6B","\x64\x61\x73\x68\x65\x64","\x72\x6F\x75\x6E\x64\x65\x64","\x73\x68\x61\x64\x6F\x77","\x74\x69\x6C\x74","\x61\x75\x74\x6F\x73\x69\x7A\x65","\x63\x75\x72\x76\x65\x64","\x72\x6F\x74\x61\x74\x69\x6F\x6E","\x77\x6F\x72\x64\x57\x72\x61\x70","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x6F\x75\x6E\x74","\x67\x72\x6F\x75\x70","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x75\x6E\x67\x72\x6F\x75\x70","\x72\x65\x6D\x6F\x76\x65\x46\x72\x6F\x6D\x47\x72\x6F\x75\x70","\x66\x6F\x6E\x74\x46\x61\x6D\x69\x6C\x79","\x66\x6F\x6E\x74\x53\x69\x7A\x65","\x61\x6C\x69\x67\x6E\x6D\x65\x6E\x74","\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x74\x65\x78\x74","\x66\x6F\x72\x6D\x61\x74","\x61\x72\x72\x61\x6E\x67\x65","\x6C\x69\x6E\x65\x77\x69\x64\x74\x68","\x73\x70\x61\x63\x69\x6E\x67","\x6C\x69\x6E\x65","\x6C\x69\x6E\x65\x65\x6E\x64","\x6C\x69\x6E\x65\x73\x74\x61\x72\x74","\x73\x65\x74\x41\x73\x44\x65\x66\x61\x75\x6C\x74\x45\x64\x67\x65","\x61\x6C\x69\x67\x6E","\x67\x65\x74\x53\x74\x61\x74\x65","\x69\x73\x4C\x6F\x6F\x70","\x64\x69\x72\x65\x63\x74\x69\x6F\x6E","\x66\x6F\x6C\x64\x69\x6E\x67\x45\x6E\x61\x62\x6C\x65\x64","\x63\x75\x72\x72\x65\x6E\x74\x52\x6F\x6F\x74","\x6E\x61\x76\x69\x67\x61\x74\x69\x6F\x6E","\x68\x6F\x6D\x65","\x65\x78\x69\x74\x47\x72\x6F\x75\x70","\x65\x6E\x74\x65\x72\x47\x72\x6F\x75\x70","\x65\x78\x70\x61\x6E\x64","\x63\x6F\x6C\x6C\x61\x70\x73\x65","\x65\x64\x69\x74\x4C\x69\x6E\x6B","\x67\x65\x74\x4C\x69\x6E\x6B\x46\x6F\x72\x43\x65\x6C\x6C","\x6F\x70\x65\x6E\x4C\x69\x6E\x6B","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x4D\x6F\x64\x65\x6C","\x63\x6C\x69\x65\x6E\x74\x57\x69\x64\x74\x68","\x63\x6C\x69\x65\x6E\x74\x48\x65\x69\x67\x68\x74","\x6D\x69\x6E","\x6D\x61\x78","\x68\x65\x69\x67\x68\x74","\x70\x78","\x74\x6F\x70","\x49\x53\x5F\x51\x55\x49\x52\x4B\x53","\x77\x69\x64\x74\x68","\x62\x6F\x74\x74\x6F\x6D","\x6C\x65\x66\x74","\x64\x69\x73\x70\x6C\x61\x79","\x6E\x6F\x6E\x65","\x68\x73\x70\x6C\x69\x74","\x76\x73\x70\x6C\x69\x74","\x67\x65\x4D\x65\x6E\x75\x62\x61\x72\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x63\x72\x65\x61\x74\x65\x44\x69\x76","\x67\x65\x54\x6F\x6F\x6C\x62\x61\x72\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x67\x65\x53\x69\x64\x65\x62\x61\x72\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x67\x65\x4F\x75\x74\x6C\x69\x6E\x65\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x67\x65\x44\x69\x61\x67\x72\x61\x6D\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x67\x65\x46\x6F\x6F\x74\x65\x72\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x67\x65\x48\x73\x70\x6C\x69\x74","\x67\x65\x56\x73\x70\x6C\x69\x74","\x30\x70\x78","\x72\x69\x67\x68\x74","\x6D\x65\x6E\x75\x62\x61\x72","\x67\x65\x4D\x65\x6E\x75\x62\x61\x72","\x63\x72\x65\x61\x74\x65\x4D\x65\x6E\x75\x62\x61\x72","\x61\x70\x70\x65\x6E\x64\x43\x68\x69\x6C\x64","\x74\x6F\x6F\x6C\x62\x61\x72","\x67\x65\x54\x6F\x6F\x6C\x62\x61\x72","\x63\x72\x65\x61\x74\x65\x54\x6F\x6F\x6C\x62\x61\x72","\x73\x69\x64\x65\x62\x61\x72","\x63\x72\x65\x61\x74\x65\x53\x69\x64\x65\x62\x61\x72","\x63\x72\x65\x61\x74\x65\x46\x6F\x6F\x74\x65\x72","\x73\x74\x61\x74\x75\x73\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x63\x72\x65\x61\x74\x65\x53\x74\x61\x74\x75\x73\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x73\x74\x61\x74\x75\x73\x43\x68\x61\x6E\x67\x65\x64","\x67\x65\x74\x53\x74\x61\x74\x75\x73","\x73\x65\x74\x53\x74\x61\x74\x75\x73\x54\x65\x78\x74","\x61\x64\x64\x53\x70\x6C\x69\x74\x48\x61\x6E\x64\x6C\x65\x72","\x61","\x63\x72\x65\x61\x74\x65\x45\x6C\x65\x6D\x65\x6E\x74","\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65","\x67\x65\x49\x74\x65\x6D\x20\x67\x65\x53\x74\x61\x74\x75\x73","\x69\x6E\x6E\x65\x72\x48\x54\x4D\x4C","\x67\x65\x46\x6F\x6F\x74\x65\x72","\x64\x69\x76","\x63\x72\x65\x61\x74\x65\x48\x65\x61\x64\x65\x72","\x63\x72\x65\x61\x74\x65\x46\x6F\x72\x6D","\x66\x6F\x72\x6D","\x67\x65\x74\x43\x6C\x69\x65\x6E\x74\x58","\x67\x65\x74\x43\x6C\x69\x65\x6E\x74\x59","\x78","\x79","\x6D\x6F\x75\x73\x65\x6D\x6F\x76\x65","\x74\x6F\x75\x63\x68\x6D\x6F\x76\x65","\x6D\x6F\x75\x73\x65\x75\x70","\x74\x6F\x75\x63\x68\x65\x6E\x64","\x68\x69\x64\x65\x44\x69\x61\x6C\x6F\x67","\x64\x69\x61\x6C\x6F\x67","\x49\x53\x5F\x56\x4D\x4C","\x63\x6C\x6F\x73\x65","\x73\x61\x76\x65\x46\x69\x6C\x65","\x67\x65\x74\x4F\x72\x43\x72\x65\x61\x74\x65\x46\x69\x6C\x65\x6E\x61\x6D\x65","\x70\x75\x62\x6C\x69\x73\x68\x46\x69\x6C\x65","\x65\x78\x65\x63\x75\x74\x65\x4C\x61\x79\x6F\x75\x74","\x61\x6E\x69\x6D\x61\x74\x65","\x62\x65\x67\x69\x6E\x55\x70\x64\x61\x74\x65","\x65\x78\x65\x63\x75\x74\x65","\x43\x61\x6D\x69\x6E\x6F","\x75\x73\x65\x72\x41\x67\x65\x6E\x74","\x65\x6E\x64\x55\x70\x64\x61\x74\x65","\x73\x74\x61\x72\x74\x41\x6E\x69\x6D\x61\x74\x69\x6F\x6E","\x69\x73\x43\x6F\x6E\x74\x72\x6F\x6C\x44\x6F\x77\x6E","\x49\x53\x5F\x4D\x41\x43","\x6D\x65\x74\x61\x4B\x65\x79","\x6D\x6F\x76\x65\x43\x65\x6C\x6C\x73","\x73\x63\x72\x6F\x6C\x6C\x43\x65\x6C\x6C\x54\x6F\x56\x69\x73\x69\x62\x6C\x65","\x65\x6E\x61\x62\x6C\x65\x64","\x66\x75\x6E\x63\x74","\x62\x69\x6E\x64\x43\x6F\x6E\x74\x72\x6F\x6C\x53\x68\x69\x66\x74\x4B\x65\x79","\x62\x69\x6E\x64\x43\x6F\x6E\x74\x72\x6F\x6C\x4B\x65\x79","\x62\x69\x6E\x64\x53\x68\x69\x66\x74\x4B\x65\x79","\x62\x69\x6E\x64\x4B\x65\x79","\x65\x73\x63\x61\x70\x65","\x65\x6E\x74\x65\x72","\x66\x6F\x6C\x64\x43\x65\x6C\x6C\x73","\x7A\x6F\x6F\x6D\x49\x6E","\x7A\x6F\x6F\x6D\x4F\x75\x74","\x73\x65\x6C\x65\x63\x74\x41\x6C\x6C","\x73\x65\x6C\x65\x63\x74\x56\x65\x72\x74\x69\x63\x65\x73","\x73\x65\x6C\x65\x63\x74\x45\x64\x67\x65\x73","\x65\x78\x70\x6F\x72\x74","\x63\x6F\x6E\x6E\x65\x63\x74","\x67\x72\x69\x64","\x61\x62\x6F\x75\x74","\x20\x6D\x75\x73\x74\x20\x68\x61\x76\x65\x20","\x20\x6F\x75\x74\x67\x6F\x69\x6E\x67\x20\x65\x64\x67\x65\x2E","\x70\x75\x73\x68","\x20\x69\x6E\x63\x6F\x6D\x69\x6E\x67\x20\x65\x64\x67\x65\x2E"];EditorUi=function(_0xc6abx1,_0xc6abx2){this[_0xc098[0]]=_0xc6abx1|| new Editor();this[_0xc098[1]]=_0xc6abx2||document[_0xc098[3]](_0xc098[2]);var _0xc6abx3=_0xc6abx1[_0xc098[4]];var _0xc6abx4=this;this[_0xc098[1]][_0xc098[6]][_0xc098[5]]=_0xc098[7]; new Image()[_0xc098[8]]=mxPopupMenu[_0xc098[10]][_0xc098[9]];if(mxConnectionHandler[_0xc098[10]][_0xc098[11]]!=null){ new Image()[_0xc098[8]]=mxConnectionHandler[_0xc098[10]][_0xc098[11]][_0xc098[8]]};this[_0xc098[12]]= new Actions(this);this[_0xc098[13]]= new Menus(this);this[_0xc098[14]]();this[_0xc098[15]]();this[_0xc098[16]]();var _0xc6abx5=mxUtils[_0xc098[20]](this,function(_0xc6abx6){if(_0xc6abx6==null){_0xc6abx6=window[_0xc098[17]]};if(this[_0xc098[18]](_0xc6abx6)){return true};return _0xc6abx3[_0xc098[19]]()});if(this[_0xc098[1]]==document[_0xc098[21]]){this[_0xc098[23]][_0xc098[22]]=_0xc6abx5;this[_0xc098[23]][_0xc098[24]]=_0xc6abx5;this[_0xc098[25]][_0xc098[22]]=_0xc6abx5;this[_0xc098[25]][_0xc098[24]]=_0xc6abx5;this[_0xc098[26]][_0xc098[22]]=_0xc6abx5;this[_0xc098[26]][_0xc098[24]]=_0xc6abx5;this[_0xc098[27]][_0xc098[22]]=_0xc6abx5;this[_0xc098[27]][_0xc098[24]]=_0xc6abx5;this[_0xc098[28]][_0xc098[22]]=_0xc6abx5;this[_0xc098[28]][_0xc098[24]]=_0xc6abx5};if(mxClient[_0xc098[29]]&&( typeof (document[_0xc098[30]])===_0xc098[31]||document[_0xc098[30]]<9)){mxEvent[_0xc098[33]](this[_0xc098[26]],_0xc098[32],_0xc6abx5);mxEvent[_0xc098[33]](this[_0xc098[27]],_0xc098[32],_0xc6abx5)}else {this[_0xc098[26]][_0xc098[34]]=_0xc6abx5;this[_0xc098[27]][_0xc098[34]]=_0xc6abx5};_0xc6abx3[_0xc098[35]](this[_0xc098[26]]);_0xc6abx3[_0xc098[15]]();_0xc6abx3[_0xc098[1]][_0xc098[38]](_0xc098[36],_0xc098[37]);_0xc6abx3[_0xc098[1]][_0xc098[6]][_0xc098[39]]=_0xc098[40];_0xc6abx3[_0xc098[1]][_0xc098[6]][_0xc098[41]]=_0xc098[42]+_0xc6abx1[_0xc098[43]]+_0xc098[44];_0xc6abx3[_0xc098[1]][_0xc098[6]][_0xc098[45]]=_0xc098[46];_0xc6abx3[_0xc098[1]][_0xc098[47]]();var _0xc6abx7=_0xc6abx3[_0xc098[48]];_0xc6abx3[_0xc098[48]]=function(_0xc6abx8,_0xc6abx9,_0xc6abxa){if(_0xc6abx8==mxEvent[_0xc098[49]]){this[_0xc098[1]][_0xc098[47]]()};_0xc6abx7[_0xc098[50]](this,arguments)};this[_0xc098[58]](_0xc6abx3[_0xc098[51]],[_0xc098[52],_0xc098[53],_0xc098[54],_0xc098[55],_0xc098[56]],[[1,1],[0,0],[1,1],[1,_0xc098[57]],[1,_0xc098[57]]],[[0,0],[1,_0xc098[57]],[1,_0xc098[57]],[1,_0xc098[57]],[1,_0xc098[57]]]);_0xc6abx3[_0xc098[59]]=function(_0xc6abx6,_0xc6abxb){var _0xc6abxc=[_0xc098[55]];var _0xc6abxd= new mxEventObject(mxEvent.DOUBLE_CLICK,_0xc098[17],_0xc6abx6,_0xc098[60],_0xc6abxb);this[_0xc098[61]](_0xc6abxd);if(this[_0xc098[62]]()&&!mxEvent[_0xc098[63]](_0xc6abx6)&&!_0xc6abxd[_0xc098[63]]()){if(this[_0xc098[65]]()[_0xc098[64]](_0xc6abxb)){if(_0xc6abxc[_0xc098[69]](_0xc6abxb[_0xc098[68]][_0xc098[67]][_0xc098[66]])>=0){this[_0xc098[70]](_0xc6abxb)}}else {if(this[_0xc098[65]]()[_0xc098[71]](_0xc6abxb)){console[_0xc098[72]](_0xc6abx4);console[_0xc098[72]](_0xc6abxb);_0xc6abx4[_0xc098[73]]( new GeneralDialog(_0xc6abx4,_0xc6abxb)[_0xc098[1]],320,280,true,true)}};_0xc6abxd[_0xc098[74]]()}};_0xc6abx3[_0xc098[76]][_0xc098[75]]=true;_0xc6abx3[_0xc098[76]][_0xc098[77]]=mxUtils[_0xc098[20]](this,function(_0xc6abxe,_0xc6abxb,_0xc6abx6){this[_0xc098[13]][_0xc098[78]](_0xc6abxe,_0xc6abxb,_0xc6abx6)});_0xc6abx1[_0xc098[80]][_0xc098[35]](this[_0xc098[79]]);mxEvent[_0xc098[82]](document,mxUtils[_0xc098[20]](this,function(_0xc6abx6){_0xc6abx3[_0xc098[76]][_0xc098[81]]()}));if(mxClient[_0xc098[83]]){mxEvent[_0xc098[33]](_0xc6abx3[_0xc098[1]],_0xc098[84],mxUtils[_0xc098[20]](this,function(_0xc6abx6){_0xc6abx3[_0xc098[89]][_0xc098[88]]()[_0xc098[38]](_0xc098[85],_0xc098[86]+_0xc6abx6[_0xc098[87]]+_0xc098[44]);_0xc6abx3[_0xc098[89]][_0xc098[91]]()[_0xc098[6]][_0xc098[90]]=_0xc098[7]}));mxEvent[_0xc098[33]](_0xc6abx3[_0xc098[1]],_0xc098[92],mxUtils[_0xc098[20]](this,function(_0xc6abx6){_0xc6abx3[_0xc098[89]][_0xc098[88]]()[_0xc098[93]](_0xc098[85]);_0xc6abx3[_0xc098[94]]=true;_0xc6abx3[_0xc098[95]](_0xc6abx6[_0xc098[87]]);_0xc6abx3[_0xc098[89]][_0xc098[91]]()[_0xc098[6]][_0xc098[90]]=_0xc098[96]}))};var _0xc6abxf=this[_0xc098[97]](_0xc6abx1);this[_0xc098[98]]=function(){return _0xc6abxf};mxEvent[_0xc098[33]](window,_0xc098[99],mxUtils[_0xc098[20]](this,function(){this[_0xc098[15]]();_0xc6abx3[_0xc098[100]]();this[_0xc098[0]][_0xc098[80]][_0xc098[101]](false);this[_0xc098[0]][_0xc098[80]][_0xc098[80]][_0xc098[100]]()}));this[_0xc098[35]]();this[_0xc098[102]]()};EditorUi[_0xc098[10]][_0xc098[103]]=(mxClient[_0xc098[83]])?16:8;EditorUi[_0xc098[10]][_0xc098[104]]=33;EditorUi[_0xc098[10]][_0xc098[105]]=36;EditorUi[_0xc098[10]][_0xc098[106]]=28;EditorUi[_0xc098[10]][_0xc098[107]]=204;EditorUi[_0xc098[10]][_0xc098[108]]=190;EditorUi[_0xc098[10]][_0xc098[35]]=function(){this[_0xc098[109]]();this[_0xc098[110]]();var _0xc6abx10=this[_0xc098[12]][_0xc098[112]](_0xc098[111]);var _0xc6abx11=function(){_0xc6abx10[_0xc098[114]](!mxClipboard[_0xc098[113]]())};var _0xc6abx12=mxClipboard[_0xc098[115]];mxClipboard[_0xc098[115]]=function(){_0xc6abx12[_0xc098[50]](this,arguments);_0xc6abx11()};var _0xc6abx13=mxClipboard[_0xc098[116]];mxClipboard[_0xc098[116]]=function(){_0xc6abx13[_0xc098[50]](this,arguments);_0xc6abx11()}};EditorUi[_0xc098[10]][_0xc098[18]]=function(_0xc6abx6){return false};EditorUi[_0xc098[10]][_0xc098[102]]=function(){try{if(window[_0xc098[117]]!=null&&window[_0xc098[117]][_0xc098[118]]!=null){window[_0xc098[117]][_0xc098[118]][_0xc098[130]](mxUtils[_0xc098[20]](this,function(_0xc6abx14,_0xc6abx15){try{var _0xc6abx16=mxUtils[_0xc098[119]](_0xc6abx14);this[_0xc098[0]][_0xc098[121]](_0xc6abx16[_0xc098[120]]);this[_0xc098[0]][_0xc098[122]]=false;this[_0xc098[0]][_0xc098[124]][_0xc098[123]]();if(_0xc6abx15!=null){this[_0xc098[0]][_0xc098[125]]=_0xc6abx15}}catch(e){mxUtils[_0xc098[129]](mxResources[_0xc098[112]](_0xc098[126])+_0xc098[127]+e[_0xc098[128]])}}))}}catch(e){}};EditorUi[_0xc098[10]][_0xc098[131]]=function(_0xc6abx14,_0xc6abx15,_0xc6abx17){try{var _0xc6abx16=mxUtils[_0xc098[119]](_0xc6abx14);this[_0xc098[0]][_0xc098[121]](_0xc6abx16[_0xc098[120]]);this[_0xc098[0]][_0xc098[122]]=false;this[_0xc098[0]][_0xc098[124]][_0xc098[123]]();if(_0xc6abx15!=null){this[_0xc098[0]][_0xc098[125]]=_0xc6abx15};if(_0xc6abx17!=null){this[_0xc098[0]][_0xc098[132]]=_0xc6abx17}}catch(e){mxUtils[_0xc098[129]](mxResources[_0xc098[112]](_0xc098[126])+_0xc098[127]+e[_0xc098[128]])}};EditorUi[_0xc098[10]][_0xc098[133]]=function(_0xc6abx18){var _0xc6abx1=this[_0xc098[0]];if(_0xc6abx18!=null){var _0xc6abx14=mxUtils[_0xc098[135]](this[_0xc098[0]][_0xc098[134]]());try{if(useLocalStorage){if(localStorage[_0xc098[136]](_0xc6abx18)!=null&&!mxUtils[_0xc098[138]](mxResources[_0xc098[112]](_0xc098[137],[_0xc6abx18]))){return};localStorage[_0xc098[139]](_0xc6abx18,_0xc6abx14);this[_0xc098[0]][_0xc098[142]](mxResources[_0xc098[112]](_0xc098[140])+_0xc098[141]+ new Date())}else {console[_0xc098[72]](_0xc6abx14[_0xc098[143]]);console[_0xc098[72]](MAX_REQUEST_SIZE);if(_0xc6abx14[_0xc098[143]]<MAX_REQUEST_SIZE){_0xc6abx14=encodeURIComponent(_0xc6abx14);_0xc6abx18=encodeURIComponent(_0xc6abx18);var _0xc6abx19= new XMLHttpRequest();_0xc6abx19[_0xc098[102]](_0xc098[144],SAVE_URL,true);_0xc6abx19[_0xc098[147]](_0xc098[145],_0xc098[146]);_0xc6abx19[_0xc098[147]](_0xc098[148],_0xc098[149]+_0xc6abx1[_0xc098[132]][_0xc098[150]]);_0xc6abx19[_0xc098[151]]=function(_0xc6abx1a){if(_0xc6abx19[_0xc098[152]]===4){if(_0xc6abx19[_0xc098[153]]===201){_0xc6abx1[_0xc098[142]](_0xc098[154]+JSON[_0xc098[157]](_0xc6abx19[_0xc098[156]])[_0xc098[155]]+_0xc098[158]);setTimeout(function(){window[_0xc098[102]](_0xc098[159]+JSON[_0xc098[157]](_0xc6abx19[_0xc098[156]])[_0xc098[160]],_0xc098[161])},1500)}else {_0xc6abx1[_0xc098[142]](_0xc098[162]+JSON[_0xc098[157]](_0xc6abx19[_0xc098[156]])[_0xc098[163]][0][_0xc098[128]])}}};_0xc6abx19[_0xc098[164]]=function(_0xc6abx1a){mxUtils[_0xc098[129]](_0xc6abx19[_0xc098[165]])};_0xc6abx19[_0xc098[167]](_0xc098[166]+_0xc6abx18)}else {mxUtils[_0xc098[129]](mxResources[_0xc098[112]](_0xc098[168]));mxUtils[_0xc098[169]](_0xc6abx14);return}};this[_0xc098[0]][_0xc098[125]]=_0xc6abx18;this[_0xc098[0]][_0xc098[122]]=false}catch(e){this[_0xc098[0]][_0xc098[142]](_0xc098[170])}}else {this[_0xc098[0]][_0xc098[142]](_0xc098[170])}};EditorUi[_0xc098[10]][_0xc098[171]]=function(_0xc6abx18){var _0xc6abx1=this[_0xc098[0]];if(_0xc6abx18!=null){var _0xc6abx14=mxUtils[_0xc098[135]](this[_0xc098[0]][_0xc098[134]]());try{if(useLocalStorage){if(localStorage[_0xc098[136]](_0xc6abx18)!=null&&!mxUtils[_0xc098[138]](mxResources[_0xc098[112]](_0xc098[137],[_0xc6abx18]))){return};localStorage[_0xc098[139]](_0xc6abx18,_0xc6abx14);this[_0xc098[0]][_0xc098[142]](mxResources[_0xc098[112]](_0xc098[140])+_0xc098[141]+ new Date())}else {console[_0xc098[72]](_0xc6abx14[_0xc098[143]]);console[_0xc098[72]](MAX_REQUEST_SIZE);if(_0xc6abx14[_0xc098[143]]<MAX_REQUEST_SIZE){_0xc6abx14=encodeURIComponent(_0xc6abx14);var _0xc6abx19= new XMLHttpRequest();_0xc6abx19[_0xc098[102]](_0xc098[172],SAVE_URL+this[_0xc098[0]][_0xc098[132]][_0xc098[160]],true);_0xc6abx19[_0xc098[147]](_0xc098[145],_0xc098[146]);_0xc6abx19[_0xc098[147]](_0xc098[148],_0xc098[149]+_0xc6abx1[_0xc098[132]][_0xc098[150]]);_0xc6abx19[_0xc098[151]]=function(_0xc6abx1a){if(_0xc6abx19[_0xc098[152]]===4){if(_0xc6abx19[_0xc098[153]]===200){_0xc6abx1[_0xc098[142]](_0xc098[173]+JSON[_0xc098[157]](_0xc6abx19[_0xc098[156]])[_0xc098[174]]+_0xc098[175]+_0xc6abx19[_0xc098[153]]+_0xc098[141]+_0xc6abx19[_0xc098[165]]+_0xc098[44])}else {_0xc6abx1[_0xc098[142]](_0xc098[176]+JSON[_0xc098[157]](_0xc6abx19[_0xc098[156]])[_0xc098[163]][0][_0xc098[128]])}}};_0xc6abx19[_0xc098[164]]=function(_0xc6abx1a){mxUtils[_0xc098[129]](_0xc6abx19[_0xc098[165]])};_0xc6abx19[_0xc098[167]](_0xc098[177]+_0xc6abx14)}else {mxUtils[_0xc098[129]](mxResources[_0xc098[112]](_0xc098[168]));mxUtils[_0xc098[169]](_0xc6abx14);return}};this[_0xc098[0]][_0xc098[125]]=_0xc6abx18;this[_0xc098[0]][_0xc098[122]]=false}catch(e){this[_0xc098[0]][_0xc098[142]](_0xc098[178])}}else {this[_0xc098[0]][_0xc098[142]](_0xc098[178])}};EditorUi[_0xc098[10]][_0xc098[179]]=function(_0xc6abx18){var _0xc6abx1=this[_0xc098[0]];console[_0xc098[72]](_0xc6abx18);if(_0xc6abx18!=null){var _0xc6abx14=mxUtils[_0xc098[135]](this[_0xc098[0]][_0xc098[134]]());try{if(useLocalStorage){if(localStorage[_0xc098[136]](_0xc6abx18)!=null&&!mxUtils[_0xc098[138]](mxResources[_0xc098[112]](_0xc098[137],[_0xc6abx18]))){return};localStorage[_0xc098[139]](_0xc6abx18,_0xc6abx14);this[_0xc098[0]][_0xc098[142]](mxResources[_0xc098[112]](_0xc098[140])+_0xc098[141]+ new Date())}else {console[_0xc098[72]](_0xc6abx14[_0xc098[143]]);console[_0xc098[72]](MAX_REQUEST_SIZE);if(_0xc6abx14[_0xc098[143]]<MAX_REQUEST_SIZE){_0xc6abx14=encodeURIComponent(_0xc6abx14);_0xc6abx18=encodeURIComponent(_0xc6abx18);var _0xc6abx19= new XMLHttpRequest();_0xc6abx19[_0xc098[102]](_0xc098[144],SAVE_URL,true);_0xc6abx19[_0xc098[147]](_0xc098[145],_0xc098[146]);_0xc6abx19[_0xc098[147]](_0xc098[148],_0xc098[149]+_0xc6abx1[_0xc098[132]][_0xc098[150]]);_0xc6abx19[_0xc098[151]]=function(_0xc6abx1a){if(_0xc6abx19[_0xc098[152]]===4){if(_0xc6abx19[_0xc098[153]]===201){_0xc6abx1[_0xc098[142]](_0xc098[154]+JSON[_0xc098[157]](_0xc6abx19[_0xc098[156]])[_0xc098[155]]+_0xc098[158]);setTimeout(function(){window[_0xc098[102]](_0xc098[159]+JSON[_0xc098[157]](_0xc6abx19[_0xc098[156]])[_0xc098[160]],_0xc098[161])},1500)}else {_0xc6abx1[_0xc098[142]](_0xc098[180]+JSON[_0xc098[157]](_0xc6abx19[_0xc098[156]])[_0xc098[163]][0][_0xc098[128]])}}};_0xc6abx19[_0xc098[164]]=function(_0xc6abx1a){mxUtils[_0xc098[129]](_0xc6abx19[_0xc098[165]])};_0xc6abx19[_0xc098[167]](_0xc098[181]+_0xc6abx18+_0xc098[182]+_0xc6abx14+_0xc098[183]+_0xc6abx14)}else {mxUtils[_0xc098[129]](mxResources[_0xc098[112]](_0xc098[168]));mxUtils[_0xc098[169]](_0xc6abx14);return}};this[_0xc098[0]][_0xc098[125]]=_0xc6abx18;this[_0xc098[0]][_0xc098[122]]=false}catch(e){this[_0xc098[0]][_0xc098[142]](_0xc098[178])}}else {this[_0xc098[0]][_0xc098[142]](_0xc098[178])}};EditorUi[_0xc098[10]][_0xc098[184]]=function(_0xc6abx1b,_0xc6abx1c){var _0xc6abx3=this[_0xc098[0]][_0xc098[4]];_0xc6abx1b=null!=_0xc6abx1b?_0xc6abx1b:_0xc6abx3[_0xc098[186]][_0xc098[185]]();_0xc6abx1c=null!=_0xc6abx1c?_0xc6abx1c:{};for(var _0xc6abx1d=!0,_0xc6abx1e=_0xc6abx3[_0xc098[186]][_0xc098[187]](_0xc6abx1b),_0xc6abx1a=0;_0xc6abx1a<_0xc6abx1e;_0xc6abx1a++){var _0xc6abx1f=_0xc6abx3[_0xc098[186]][_0xc098[188]](_0xc6abx1b,_0xc6abx1a),_0xc6abx20=_0xc6abx1c;_0xc6abx3[_0xc098[189]](_0xc6abx1f)&&(_0xc6abx20={});_0xc6abx20=this[_0xc098[184]](_0xc6abx1f,_0xc6abx20);null!=_0xc6abx20?_0xc6abx3[_0xc098[191]](_0xc6abx1f,_0xc6abx20[_0xc098[137]](/\n/g,_0xc098[190])):_0xc6abx3[_0xc098[191]](_0xc6abx1f,null);_0xc6abx1d=_0xc6abx1d&&null==_0xc6abx20};_0xc6abx1e=_0xc098[192];if(_0xc6abx3[_0xc098[186]][_0xc098[71]](_0xc6abx1b)){switch(_0xc6abx1b[_0xc098[67]][_0xc098[200]]){case _0xc098[55]:_0xc6abx1e=(_0xc6abx1b[_0xc098[67]][_0xc098[193]](_0xc098[55])!==_0xc098[192])?_0xc098[192]:_0xc098[194]+_0xc098[195];_0xc6abx1e+=(_0xc6abx1b[_0xc098[67]][_0xc098[193]](_0xc098[196])!==_0xc098[192])?_0xc098[192]:_0xc098[197]+_0xc098[195];break;case _0xc098[54]:_0xc6abx1e=(_0xc6abx1b[_0xc098[67]][_0xc098[193]](_0xc098[55])!==_0xc098[192])?_0xc098[192]:_0xc098[194]+_0xc098[195];_0xc6abx1e+=(_0xc6abx1b[_0xc098[67]][_0xc098[193]](_0xc098[196])!==_0xc098[192])?_0xc098[192]:_0xc098[197]+_0xc098[195];break;case _0xc098[52]:_0xc6abx1e=this[_0xc098[198]](_0xc098[52])?_0xc098[192]:_0xc098[199]+_0xc098[195];_0xc6abx1e+=(_0xc6abx1b[_0xc098[67]][_0xc098[193]](_0xc098[196])!==_0xc098[192])?_0xc098[192]:_0xc098[197]+_0xc098[195];break}};if(_0xc6abx3[_0xc098[186]][_0xc098[64]](_0xc6abx1b)){var _0xc6abx21=_0xc6abx3[_0xc098[186]][_0xc098[202]](_0xc6abx1b[_0xc098[68]][_0xc098[201]]());switch(_0xc6abx21[_0xc098[67]][_0xc098[200]]){case _0xc098[55]:var _0xc6abx22=String(_0xc6abx1b[_0xc098[203]]());console[_0xc098[72]](_0xc6abx22);if(_0xc6abx22===_0xc098[204]||_0xc6abx22===_0xc098[31]){_0xc6abx1e=_0xc098[205]+_0xc098[195]}else {var _0xc6abx23=_0xc6abx22[_0xc098[207]](_0xc098[206]);_0xc6abx23[_0xc098[211]](function(_0xc6abx24,_0xc6abx25){_0xc6abx1e=_0xc6abx1e+((_0xc6abx24[_0xc098[208]]()!==_0xc098[192])?_0xc098[192]:_0xc098[209]+(_0xc6abx25+1)+_0xc098[210]+_0xc098[195])})};break}};_0xc6abx3[_0xc098[212]](_0xc6abx1b)&&!_0xc6abx1d&&(_0xc6abx1e+=(mxResources[_0xc098[112]](_0xc6abx3[_0xc098[213]])||_0xc6abx3[_0xc098[213]])+_0xc098[195]);_0xc6abx1e=_0xc6abx3[_0xc098[186]][_0xc098[64]](_0xc6abx1b)?_0xc6abx1e+(_0xc6abx3[_0xc098[215]](_0xc6abx1b,_0xc6abx3[_0xc098[186]][_0xc098[214]](_0xc6abx1b,!0),_0xc6abx3[_0xc098[186]][_0xc098[214]](_0xc6abx1b,!1))||_0xc098[192]):_0xc6abx1e+(_0xc6abx3[_0xc098[216]](_0xc6abx1b)||_0xc098[192]);_0xc6abx1a=_0xc6abx3[_0xc098[217]](_0xc6abx1b,_0xc6abx1c);null!=_0xc6abx1a&&(_0xc6abx1e+=_0xc6abx1a);null==_0xc6abx3[_0xc098[186]][_0xc098[218]](_0xc6abx1b)&&_0xc6abx3[_0xc098[89]][_0xc098[184]]();return 0<_0xc6abx1e[_0xc098[143]]||!_0xc6abx1d?_0xc6abx1e:null};EditorUi[_0xc098[10]][_0xc098[198]]=function(_0xc6abx26){var _0xc6abx3=this[_0xc098[0]][_0xc098[4]];var _0xc6abx27=_0xc6abx3[_0xc098[219]]();var _0xc6abx28=0;_0xc6abx27[_0xc098[220]][_0xc098[211]](function(_0xc6abx29){if(_0xc6abx3[_0xc098[186]][_0xc098[71]](_0xc6abx29)&&_0xc6abx29[_0xc098[67]][_0xc098[200]]==_0xc6abx26){_0xc6abx28++}});return _0xc6abx28>1?false:true};EditorUi[_0xc098[10]][_0xc098[221]]=function(_0xc6abx18){var _0xc6abx1=this[_0xc098[0]];if(_0xc6abx18!=null){var _0xc6abx2a=this[_0xc098[184]]();if(_0xc6abx2a===null){var _0xc6abx14=mxUtils[_0xc098[135]](this[_0xc098[0]][_0xc098[134]]());try{if(useLocalStorage){if(localStorage[_0xc098[136]](_0xc6abx18)!=null&&!mxUtils[_0xc098[138]](mxResources[_0xc098[112]](_0xc098[137],[_0xc6abx18]))){return};localStorage[_0xc098[139]](_0xc6abx18,_0xc6abx14);this[_0xc098[0]][_0xc098[142]](mxResources[_0xc098[112]](_0xc098[140])+_0xc098[141]+ new Date())}else {console[_0xc098[72]](_0xc6abx14[_0xc098[143]]);console[_0xc098[72]](MAX_REQUEST_SIZE);if(_0xc6abx14[_0xc098[143]]<MAX_REQUEST_SIZE){_0xc6abx14=encodeURIComponent(_0xc6abx14);var _0xc6abx19= new XMLHttpRequest();_0xc6abx19[_0xc098[102]](_0xc098[172],SAVE_URL+this[_0xc098[0]][_0xc098[132]][_0xc098[160]],true);_0xc6abx19[_0xc098[147]](_0xc098[145],_0xc098[146]);_0xc6abx19[_0xc098[147]](_0xc098[148],_0xc098[149]+_0xc6abx1[_0xc098[132]][_0xc098[150]]);_0xc6abx19[_0xc098[151]]=function(_0xc6abx1a){if(_0xc6abx19[_0xc098[152]]===4){if(_0xc6abx19[_0xc098[153]]===200){_0xc6abx1[_0xc098[142]](_0xc098[222]+JSON[_0xc098[157]](_0xc6abx19[_0xc098[156]])[_0xc098[174]]+_0xc098[175]+_0xc6abx19[_0xc098[153]]+_0xc098[141]+_0xc6abx19[_0xc098[165]]+_0xc098[44])}else {_0xc6abx1[_0xc098[142]](_0xc098[176]+JSON[_0xc098[157]](_0xc6abx19[_0xc098[156]])[_0xc098[163]][0][_0xc098[128]])}}};_0xc6abx19[_0xc098[164]]=function(_0xc6abx1a){mxUtils[_0xc098[129]](_0xc6abx19[_0xc098[165]])};_0xc6abx19[_0xc098[167]](_0xc098[177]+_0xc6abx14+_0xc098[183]+_0xc6abx14)}else {mxUtils[_0xc098[129]](mxResources[_0xc098[112]](_0xc098[168]));mxUtils[_0xc098[169]](_0xc6abx14);return}};this[_0xc098[0]][_0xc098[125]]=_0xc6abx18;this[_0xc098[0]][_0xc098[122]]=false}catch(e){this[_0xc098[0]][_0xc098[142]](_0xc098[223])}}else {_0xc6abx1[_0xc098[142]](_0xc098[224])}}else {this[_0xc098[0]][_0xc098[142]](_0xc098[223])}};EditorUi[_0xc098[10]][_0xc098[225]]=function(_0xc6abx18){var _0xc6abx1=this[_0xc098[0]];if(_0xc6abx18!=null){try{var _0xc6abx19= new XMLHttpRequest();_0xc6abx19[_0xc098[102]](_0xc098[144],VARIABLE_URL,true);_0xc6abx19[_0xc098[147]](_0xc098[145],_0xc098[146]);_0xc6abx19[_0xc098[147]](_0xc098[148],_0xc098[149]+_0xc6abx1[_0xc098[132]][_0xc098[150]]);_0xc6abx19[_0xc098[151]]=function(_0xc6abx1a){if(_0xc6abx19[_0xc098[152]]===4){if(_0xc6abx19[_0xc098[153]]===201){_0xc6abx1[_0xc098[142]](_0xc098[226]+JSON[_0xc098[157]](_0xc6abx19[_0xc098[156]])[_0xc098[227]]+_0xc098[175]+_0xc6abx19[_0xc098[153]]+_0xc098[141]+_0xc6abx19[_0xc098[165]]+_0xc098[44])}else {_0xc6abx1[_0xc098[142]](_0xc098[180]+JSON[_0xc098[157]](_0xc6abx19[_0xc098[156]])[_0xc098[163]][0][_0xc098[128]])}}};_0xc6abx19[_0xc098[164]]=function(_0xc6abx1a){mxUtils[_0xc098[129]](_0xc6abx19[_0xc098[165]])};_0xc6abx19[_0xc098[167]](_0xc098[228]+_0xc6abx18)}catch(e){this[_0xc098[0]][_0xc098[142]](_0xc098[229])}}else {this[_0xc098[0]][_0xc098[142]](_0xc098[229])}};EditorUi[_0xc098[10]][_0xc098[230]]=function(_0xc6abx2b){var _0xc6abx2c=(_0xc6abx2b!=null)?_0xc6abx2b:window[_0xc098[232]][_0xc098[231]];var _0xc6abx2d=(_0xc6abx2c[_0xc098[69]](_0xc098[233])>0)?1:0;for(var _0xc6abx25 in urlParams){if(_0xc6abx2d==0){_0xc6abx2c+=_0xc098[233]}else {_0xc6abx2c+=_0xc098[234]};_0xc6abx2c+=_0xc6abx25+_0xc098[235]+urlParams[_0xc6abx25];_0xc6abx2d++};return _0xc6abx2c};EditorUi[_0xc098[10]][_0xc098[109]]=function(){var _0xc6abx2e=this[_0xc098[12]][_0xc098[112]](_0xc098[236]);var _0xc6abx2f=this[_0xc098[12]][_0xc098[112]](_0xc098[237]);var _0xc6abx30=this[_0xc098[0]][_0xc098[124]];var _0xc6abx31=function(){_0xc6abx2e[_0xc098[114]](_0xc6abx30[_0xc098[238]]());_0xc6abx2f[_0xc098[114]](_0xc6abx30[_0xc098[239]]())};_0xc6abx30[_0xc098[33]](mxEvent.ADD,_0xc6abx31);_0xc6abx30[_0xc098[33]](mxEvent.UNDO,_0xc6abx31);_0xc6abx30[_0xc098[33]](mxEvent.REDO,_0xc6abx31);_0xc6abx30[_0xc098[33]](mxEvent.CLEAR,_0xc6abx31);_0xc6abx31()};EditorUi[_0xc098[10]][_0xc098[110]]=function(){var _0xc6abx32=mxUtils[_0xc098[20]](this,function(){var _0xc6abx3=this[_0xc098[0]][_0xc098[4]];var _0xc6abx33=!_0xc6abx3[_0xc098[240]]();var _0xc6abx34=false;var _0xc6abx35=false;var _0xc6abx36=_0xc6abx3[_0xc098[241]]();if(_0xc6abx36!=null){for(var _0xc6abx37=0;_0xc6abx37<_0xc6abx36[_0xc098[143]];_0xc6abx37++){var _0xc6abxb=_0xc6abx36[_0xc6abx37];if(_0xc6abx3[_0xc098[65]]()[_0xc098[64]](_0xc6abxb)){_0xc6abx35=true};if(_0xc6abx3[_0xc098[65]]()[_0xc098[71]](_0xc6abxb)){_0xc6abx34=true};if(_0xc6abx35&&_0xc6abx34){break}}};var _0xc6abx38=[_0xc098[115],_0xc098[116],_0xc098[242],_0xc098[243],_0xc098[244],_0xc098[245],_0xc098[6],_0xc098[246],_0xc098[247],_0xc098[248],_0xc098[249],_0xc098[250],_0xc098[251],_0xc098[252],_0xc098[253]];for(var _0xc6abx37=0;_0xc6abx37<_0xc6abx38[_0xc098[143]];_0xc6abx37++){this[_0xc098[12]][_0xc098[112]](_0xc6abx38[_0xc6abx37])[_0xc098[114]](_0xc6abx33)};this[_0xc098[12]][_0xc098[112]](_0xc098[254])[_0xc098[114]](_0xc6abx35);this[_0xc098[12]][_0xc098[112]](_0xc098[255])[_0xc098[114]](_0xc6abx34);this[_0xc098[12]][_0xc098[112]](_0xc098[256])[_0xc098[114]](_0xc6abx34);this[_0xc098[12]][_0xc098[112]](_0xc098[258])[_0xc098[114]](_0xc6abx3[_0xc098[257]]()>1);this[_0xc098[12]][_0xc098[112]](_0xc098[260])[_0xc098[114]](_0xc6abx3[_0xc098[257]]()==1&&_0xc6abx3[_0xc098[65]]()[_0xc098[187]](_0xc6abx3[_0xc098[259]]())>0);var _0xc6abx39=_0xc6abx34&&_0xc6abx3[_0xc098[257]]()==1;this[_0xc098[12]][_0xc098[112]](_0xc098[261])[_0xc098[114]](_0xc6abx39&&_0xc6abx3[_0xc098[65]]()[_0xc098[71]](_0xc6abx3[_0xc098[65]]()[_0xc098[218]](_0xc6abx3[_0xc098[259]]())));var _0xc6abx3a=[_0xc098[262],_0xc098[263],_0xc098[264],_0xc098[265],_0xc098[266],_0xc098[267],_0xc098[268],_0xc098[269],_0xc098[270]];for(var _0xc6abx37=0;_0xc6abx37<_0xc6abx3a[_0xc098[143]];_0xc6abx37++){this[_0xc098[13]][_0xc098[112]](_0xc6abx3a[_0xc6abx37])[_0xc098[114]](_0xc6abx33)};_0xc6abx3a=[_0xc098[271],_0xc098[272],_0xc098[273]];for(var _0xc6abx37=0;_0xc6abx37<_0xc6abx3a[_0xc098[143]];_0xc6abx37++){this[_0xc098[13]][_0xc098[112]](_0xc6abx3a[_0xc6abx37])[_0xc098[114]](_0xc6abx35)};this[_0xc098[12]][_0xc098[112]](_0xc098[274])[_0xc098[114]](_0xc6abx35);this[_0xc098[13]][_0xc098[112]](_0xc098[275])[_0xc098[114]](_0xc6abx3[_0xc098[257]]()>1);this[_0xc098[13]][_0xc098[112]](_0xc098[278])[_0xc098[114]](_0xc6abx34||(_0xc6abx35&&_0xc6abx3[_0xc098[277]](_0xc6abx3[_0xc098[89]][_0xc098[276]](_0xc6abx3[_0xc098[259]]()))));this[_0xc098[13]][_0xc098[112]](_0xc098[281])[_0xc098[114]](_0xc6abx3[_0xc098[279]]&&((_0xc6abx3[_0xc098[89]][_0xc098[280]]!=null)||(_0xc6abx3[_0xc098[257]]()==1&&_0xc6abx3[_0xc098[189]](_0xc6abx3[_0xc098[259]]()))));this[_0xc098[12]][_0xc098[112]](_0xc098[282])[_0xc098[114]](_0xc6abx3[_0xc098[89]][_0xc098[280]]!=null);this[_0xc098[12]][_0xc098[112]](_0xc098[283])[_0xc098[114]](_0xc6abx3[_0xc098[89]][_0xc098[280]]!=null);var _0xc6abx3b=_0xc6abx3[_0xc098[257]]()==1&&_0xc6abx3[_0xc098[189]](_0xc6abx3[_0xc098[259]]());this[_0xc098[12]][_0xc098[112]](_0xc098[284])[_0xc098[114]](_0xc6abx3b);this[_0xc098[12]][_0xc098[112]](_0xc098[285])[_0xc098[114]](_0xc6abx3b);this[_0xc098[12]][_0xc098[112]](_0xc098[286])[_0xc098[114]](_0xc6abx3b);this[_0xc098[12]][_0xc098[112]](_0xc098[287])[_0xc098[114]](_0xc6abx3[_0xc098[257]]()==1);this[_0xc098[12]][_0xc098[112]](_0xc098[289])[_0xc098[114]](_0xc6abx3[_0xc098[257]]()==1&&_0xc6abx3[_0xc098[288]](_0xc6abx3[_0xc098[259]]())!=null)});this[_0xc098[0]][_0xc098[4]][_0xc098[290]]()[_0xc098[33]](mxEvent.CHANGE,_0xc6abx32);_0xc6abx32()};EditorUi[_0xc098[10]][_0xc098[15]]=function(){var _0xc6abx3c=mxClient[_0xc098[29]]&&(document[_0xc098[30]]==null||document[_0xc098[30]]==5);var _0xc6abx3d=this[_0xc098[1]][_0xc098[291]];var _0xc6abx3e=this[_0xc098[1]][_0xc098[292]];if(this[_0xc098[1]]==document[_0xc098[21]]){_0xc6abx3d=document[_0xc098[21]][_0xc098[291]]||document[_0xc098[120]][_0xc098[291]];_0xc6abx3e=(_0xc6abx3c)?document[_0xc098[21]][_0xc098[292]]||document[_0xc098[120]][_0xc098[292]]:document[_0xc098[120]][_0xc098[292]]};var _0xc6abx3f=Math[_0xc098[294]](0,Math[_0xc098[293]](this[_0xc098[107]],_0xc6abx3d-this[_0xc098[103]]-20));var _0xc6abx40=Math[_0xc098[294]](0,Math[_0xc098[293]](this[_0xc098[108]],_0xc6abx3e-this[_0xc098[104]]-this[_0xc098[105]]-this[_0xc098[106]]-this[_0xc098[103]]-1));this[_0xc098[23]][_0xc098[6]][_0xc098[295]]=this[_0xc098[104]]+_0xc098[296];this[_0xc098[25]][_0xc098[6]][_0xc098[297]]=this[_0xc098[104]]+_0xc098[296];this[_0xc098[25]][_0xc098[6]][_0xc098[295]]=this[_0xc098[105]]+_0xc098[296];var _0xc6abx41=this[_0xc098[104]]+this[_0xc098[105]];if(!mxClient[_0xc098[298]]){_0xc6abx41+=1};this[_0xc098[27]][_0xc098[6]][_0xc098[297]]=_0xc6abx41+_0xc098[296];this[_0xc098[27]][_0xc098[6]][_0xc098[299]]=_0xc6abx3f+_0xc098[296];this[_0xc098[79]][_0xc098[6]][_0xc098[299]]=_0xc6abx3f+_0xc098[296];this[_0xc098[79]][_0xc098[6]][_0xc098[295]]=_0xc6abx40+_0xc098[296];this[_0xc098[79]][_0xc098[6]][_0xc098[300]]=this[_0xc098[106]]+_0xc098[296];this[_0xc098[26]][_0xc098[6]][_0xc098[301]]=(_0xc6abx3f+this[_0xc098[103]])+_0xc098[296];this[_0xc098[26]][_0xc098[6]][_0xc098[297]]=this[_0xc098[27]][_0xc098[6]][_0xc098[297]];this[_0xc098[28]][_0xc098[6]][_0xc098[295]]=this[_0xc098[106]]+_0xc098[296];this[_0xc098[28]][_0xc098[6]][_0xc098[302]]=_0xc098[303];this[_0xc098[304]][_0xc098[6]][_0xc098[297]]=this[_0xc098[27]][_0xc098[6]][_0xc098[297]];this[_0xc098[304]][_0xc098[6]][_0xc098[300]]=this[_0xc098[79]][_0xc098[6]][_0xc098[300]];this[_0xc098[304]][_0xc098[6]][_0xc098[301]]=_0xc6abx3f+_0xc098[296];this[_0xc098[305]][_0xc098[6]][_0xc098[299]]=this[_0xc098[27]][_0xc098[6]][_0xc098[299]];this[_0xc098[305]][_0xc098[6]][_0xc098[300]]=(_0xc6abx40+this[_0xc098[106]])+_0xc098[296];if(_0xc6abx3c){this[_0xc098[23]][_0xc098[6]][_0xc098[299]]=_0xc6abx3d+_0xc098[296];this[_0xc098[25]][_0xc098[6]][_0xc098[299]]=this[_0xc098[23]][_0xc098[6]][_0xc098[299]];var _0xc6abx42=(_0xc6abx3e-_0xc6abx40-this[_0xc098[103]]-this[_0xc098[106]]-this[_0xc098[104]]-this[_0xc098[105]]);this[_0xc098[27]][_0xc098[6]][_0xc098[295]]=_0xc6abx42+_0xc098[296];this[_0xc098[26]][_0xc098[6]][_0xc098[299]]=(_0xc6abx3d-_0xc6abx3f-this[_0xc098[103]])+_0xc098[296];var _0xc6abx43=(_0xc6abx3e-this[_0xc098[106]]-this[_0xc098[104]]-this[_0xc098[105]]);this[_0xc098[26]][_0xc098[6]][_0xc098[295]]=_0xc6abx43+_0xc098[296];this[_0xc098[28]][_0xc098[6]][_0xc098[299]]=this[_0xc098[23]][_0xc098[6]][_0xc098[299]];this[_0xc098[304]][_0xc098[6]][_0xc098[295]]=_0xc6abx43+_0xc098[296]}else {this[_0xc098[27]][_0xc098[6]][_0xc098[300]]=(_0xc6abx40+this[_0xc098[103]]+this[_0xc098[106]])+_0xc098[296];this[_0xc098[26]][_0xc098[6]][_0xc098[300]]=this[_0xc098[79]][_0xc098[6]][_0xc098[300]]}};EditorUi[_0xc098[10]][_0xc098[14]]=function(){this[_0xc098[23]]=this[_0xc098[307]](_0xc098[306]);this[_0xc098[25]]=this[_0xc098[307]](_0xc098[308]);this[_0xc098[27]]=this[_0xc098[307]](_0xc098[309]);this[_0xc098[79]]=this[_0xc098[307]](_0xc098[310]);this[_0xc098[26]]=this[_0xc098[307]](_0xc098[311]);this[_0xc098[28]]=this[_0xc098[307]](_0xc098[312]);this[_0xc098[304]]=this[_0xc098[307]](_0xc098[313]);this[_0xc098[305]]=this[_0xc098[307]](_0xc098[314]);this[_0xc098[23]][_0xc098[6]][_0xc098[297]]=_0xc098[315];this[_0xc098[23]][_0xc098[6]][_0xc098[301]]=_0xc098[315];this[_0xc098[23]][_0xc098[6]][_0xc098[316]]=_0xc098[315];this[_0xc098[25]][_0xc098[6]][_0xc098[301]]=_0xc098[315];this[_0xc098[25]][_0xc098[6]][_0xc098[316]]=_0xc098[315];this[_0xc098[27]][_0xc098[6]][_0xc098[301]]=_0xc098[315];this[_0xc098[79]][_0xc098[6]][_0xc098[301]]=_0xc098[315];this[_0xc098[26]][_0xc098[6]][_0xc098[316]]=_0xc098[315];this[_0xc098[28]][_0xc098[6]][_0xc098[301]]=_0xc098[315];this[_0xc098[28]][_0xc098[6]][_0xc098[316]]=_0xc098[315];this[_0xc098[28]][_0xc098[6]][_0xc098[300]]=_0xc098[315];this[_0xc098[305]][_0xc098[6]][_0xc098[301]]=_0xc098[315];this[_0xc098[305]][_0xc098[6]][_0xc098[295]]=this[_0xc098[103]]+_0xc098[296];this[_0xc098[304]][_0xc098[6]][_0xc098[299]]=this[_0xc098[103]]+_0xc098[296]};EditorUi[_0xc098[10]][_0xc098[16]]=function(){this[_0xc098[317]]=this[_0xc098[13]][_0xc098[319]](this[_0xc098[307]](_0xc098[318]));this[_0xc098[23]][_0xc098[320]](this[_0xc098[317]][_0xc098[1]]);this[_0xc098[321]]=this[_0xc098[323]](this[_0xc098[307]](_0xc098[322]));this[_0xc098[25]][_0xc098[320]](this[_0xc098[321]][_0xc098[1]]);this[_0xc098[324]]=this[_0xc098[325]](this[_0xc098[27]]);this[_0xc098[28]][_0xc098[320]](this[_0xc098[326]]());this[_0xc098[327]]=this[_0xc098[328]]();this[_0xc098[0]][_0xc098[33]](_0xc098[329],mxUtils[_0xc098[20]](this,function(){this[_0xc098[331]](this[_0xc098[0]][_0xc098[330]]())}));this[_0xc098[331]](this[_0xc098[0]][_0xc098[330]]());this[_0xc098[317]][_0xc098[1]][_0xc098[320]](this[_0xc098[327]]);this[_0xc098[1]][_0xc098[320]](this[_0xc098[23]]);this[_0xc098[1]][_0xc098[320]](this[_0xc098[25]]);this[_0xc098[1]][_0xc098[320]](this[_0xc098[27]]);this[_0xc098[1]][_0xc098[320]](this[_0xc098[79]]);this[_0xc098[1]][_0xc098[320]](this[_0xc098[26]]);this[_0xc098[1]][_0xc098[320]](this[_0xc098[28]]);this[_0xc098[1]][_0xc098[320]](this[_0xc098[304]]);this[_0xc098[1]][_0xc098[320]](this[_0xc098[305]]);this[_0xc098[332]](this[_0xc098[304]],true,0,mxUtils[_0xc098[20]](this,function(_0xc6abx44){this[_0xc098[107]]=_0xc6abx44;this[_0xc098[15]]();this[_0xc098[0]][_0xc098[4]][_0xc098[100]]();this[_0xc098[0]][_0xc098[80]][_0xc098[101]](false);this[_0xc098[0]][_0xc098[80]][_0xc098[80]][_0xc098[100]]()}));this[_0xc098[332]](this[_0xc098[305]],false,this[_0xc098[106]],mxUtils[_0xc098[20]](this,function(_0xc6abx44){this[_0xc098[108]]=_0xc6abx44;this[_0xc098[15]]();this[_0xc098[0]][_0xc098[80]][_0xc098[101]](false);this[_0xc098[0]][_0xc098[80]][_0xc098[80]][_0xc098[100]]()}))};EditorUi[_0xc098[10]][_0xc098[328]]=function(){var _0xc6abx2=document[_0xc098[334]](_0xc098[333]);_0xc6abx2[_0xc098[335]]=_0xc098[336];return _0xc6abx2};EditorUi[_0xc098[10]][_0xc098[328]]=function(){var _0xc6abx2=document[_0xc098[334]](_0xc098[333]);_0xc6abx2[_0xc098[335]]=_0xc098[336];return _0xc6abx2};EditorUi[_0xc098[10]][_0xc098[331]]=function(_0xc6abx44){this[_0xc098[327]][_0xc098[337]]=_0xc6abx44};EditorUi[_0xc098[10]][_0xc098[323]]=function(_0xc6abx2){return  new Toolbar(this,_0xc6abx2)};EditorUi[_0xc098[10]][_0xc098[325]]=function(_0xc6abx2){return  new Sidebar(this,_0xc6abx2)};EditorUi[_0xc098[10]][_0xc098[326]]=function(){return this[_0xc098[307]](_0xc098[338])};EditorUi[_0xc098[10]][_0xc098[307]]=function(_0xc6abx45){var _0xc6abx46=document[_0xc098[334]](_0xc098[339]);_0xc6abx46[_0xc098[335]]=_0xc6abx45;return _0xc6abx46};EditorUi[_0xc098[10]][_0xc098[340]]=function(_0xc6abx45){var _0xc6abx46=document[_0xc098[334]](_0xc6abx45);return _0xc6abx46};EditorUi[_0xc098[10]][_0xc098[341]]=function(_0xc6abx45){var _0xc6abx46=document[_0xc098[334]](_0xc098[342]);_0xc6abx46[_0xc098[335]]=_0xc6abx45;return _0xc6abx46};EditorUi[_0xc098[10]][_0xc098[332]]=function(_0xc6abx46,_0xc6abx47,_0xc6abx48,_0xc6abx49){var _0xc6abx4a=null;var _0xc6abx4b=null;function _0xc6abx4c(){return parseInt(((_0xc6abx47)?_0xc6abx46[_0xc098[6]][_0xc098[301]]:_0xc6abx46[_0xc098[6]][_0xc098[300]]))}function _0xc6abx4d(_0xc6abx6){if(_0xc6abx4a!=null){var _0xc6abx4e= new mxPoint(mxEvent[_0xc098[343]](_0xc6abx6),mxEvent[_0xc098[344]](_0xc6abx6));_0xc6abx49(Math[_0xc098[294]](0,_0xc6abx4b+((_0xc6abx47)?(_0xc6abx4e[_0xc098[345]]-_0xc6abx4a[_0xc098[345]]):(_0xc6abx4a[_0xc098[346]]-_0xc6abx4e[_0xc098[346]]))-_0xc6abx48));mxEvent[_0xc098[74]](_0xc6abx6)}}function _0xc6abx4f(_0xc6abx6){_0xc6abx4d(_0xc6abx6);_0xc6abx4a=null;_0xc6abx4b=null}mxEvent[_0xc098[82]](_0xc6abx46,function(_0xc6abx6){_0xc6abx4a= new mxPoint(mxEvent[_0xc098[343]](_0xc6abx6),mxEvent[_0xc098[344]](_0xc6abx6));_0xc6abx4b=_0xc6abx4c();mxEvent[_0xc098[74]](_0xc6abx6)});mxEvent[_0xc098[33]](document,_0xc098[347],_0xc6abx4d);mxEvent[_0xc098[33]](document,_0xc098[348],_0xc6abx4d);mxEvent[_0xc098[33]](document,_0xc098[349],_0xc6abx4f);mxEvent[_0xc098[33]](document,_0xc098[350],_0xc6abx4f)};EditorUi[_0xc098[10]][_0xc098[73]]=function(_0xc6abx46,_0xc6abx3d,_0xc6abx3e,_0xc6abx50,_0xc6abx51,_0xc6abx52){this[_0xc098[351]]();this[_0xc098[352]]= new Dialog(this,_0xc6abx46,_0xc6abx3d,(mxClient[_0xc098[353]])?_0xc6abx3e-12:_0xc6abx3e,_0xc6abx50,_0xc6abx51,_0xc6abx52)};EditorUi[_0xc098[10]][_0xc098[351]]=function(){if(this[_0xc098[352]]!=null){this[_0xc098[352]][_0xc098[354]]();this[_0xc098[352]]=null;this[_0xc098[0]][_0xc098[4]][_0xc098[1]][_0xc098[47]]()}};EditorUi[_0xc098[10]][_0xc098[355]]=function(_0xc6abx53){if(!_0xc6abx53&&this[_0xc098[0]][_0xc098[125]]!=null){this[_0xc098[171]](this[_0xc098[0]][_0xc098[356]]())}else {this[_0xc098[73]]( new SaveDialog(this)[_0xc098[1]],300,100,true,true)}};EditorUi[_0xc098[10]][_0xc098[357]]=function(_0xc6abx53){if(!_0xc6abx53&&this[_0xc098[0]][_0xc098[125]]!=null){this[_0xc098[221]](this[_0xc098[0]][_0xc098[356]]())}else {}};EditorUi[_0xc098[10]][_0xc098[358]]=function(_0xc6abx54,_0xc6abx55,_0xc6abx56){var _0xc6abx3=this[_0xc098[0]][_0xc098[4]];var _0xc6abxb=_0xc6abx3[_0xc098[259]]();_0xc6abx55=this[_0xc098[359]]!=null?this[_0xc098[359]]:_0xc6abx55;_0xc6abx3[_0xc098[65]]()[_0xc098[360]]();try{_0xc6abx54[_0xc098[361]](_0xc6abx3[_0xc098[219]](),_0xc6abxb)}catch(e){throw e}finally{if(_0xc6abx55&&navigator[_0xc098[363]][_0xc098[69]](_0xc098[362])<0){var _0xc6abx57= new mxMorphing(_0xc6abx3);_0xc6abx57[_0xc098[33]](mxEvent.DONE,mxUtils[_0xc098[20]](this,function(){_0xc6abx3[_0xc098[65]]()[_0xc098[364]]()}));_0xc6abx57[_0xc098[365]]()}else {_0xc6abx3[_0xc098[65]]()[_0xc098[364]]()}}};EditorUi[_0xc098[10]][_0xc098[97]]=function(_0xc6abx1){var _0xc6abx3=this[_0xc098[0]][_0xc098[4]];var _0xc6abxf= new mxKeyHandler(_0xc6abx3);_0xc6abxf[_0xc098[366]]=function(_0xc6abx6){return mxEvent[_0xc098[366]](_0xc6abx6)||(mxClient[_0xc098[367]]&&_0xc6abx6[_0xc098[368]])};function _0xc6abx58(_0xc6abx59){if(!_0xc6abx3[_0xc098[240]]()){var _0xc6abx48=0;var _0xc6abx5a=0;if(_0xc6abx59==37){_0xc6abx48= -1}else {if(_0xc6abx59==38){_0xc6abx5a= -1}else {if(_0xc6abx59==39){_0xc6abx48=1}else {if(_0xc6abx59==40){_0xc6abx5a=1}}}};_0xc6abx3[_0xc098[369]](_0xc6abx3[_0xc098[241]](),_0xc6abx48,_0xc6abx5a);_0xc6abx3[_0xc098[370]](_0xc6abx3[_0xc098[259]]())}}var _0xc6abx5b=mxUtils[_0xc098[20]](this,function(_0xc6abx5c,_0xc6abx5d,_0xc6abx25,_0xc6abx5e){var _0xc6abx5f=this[_0xc098[12]][_0xc098[112]](_0xc6abx25);if(_0xc6abx5f!=null){var _0xc6abx1f=function(){if(_0xc6abx5f[_0xc098[371]]){_0xc6abx5f[_0xc098[372]]()}};if(_0xc6abx5d){if(_0xc6abx5e){_0xc6abxf[_0xc098[373]](_0xc6abx5c,_0xc6abx1f)}else {_0xc6abxf[_0xc098[374]](_0xc6abx5c,_0xc6abx1f)}}else {if(_0xc6abx5e){_0xc6abxf[_0xc098[375]](_0xc6abx5c,_0xc6abx1f)}else {_0xc6abxf[_0xc098[376]](_0xc6abx5c,_0xc6abx1f)}}}});var _0xc6abx60=this;var _0xc6abx61=_0xc6abxf[_0xc098[377]];_0xc6abxf[_0xc098[377]]=function(_0xc6abx6){_0xc6abx60[_0xc098[351]]();_0xc6abx61[_0xc098[50]](this,arguments)};_0xc6abxf[_0xc098[378]]=function(){};_0xc6abxf[_0xc098[376]](8,function(){_0xc6abx3[_0xc098[379]](true)});_0xc6abxf[_0xc098[376]](13,function(){_0xc6abx3[_0xc098[379]](false)});_0xc6abxf[_0xc098[376]](33,function(){_0xc6abx3[_0xc098[283]]()});_0xc6abxf[_0xc098[376]](34,function(){_0xc6abx3[_0xc098[284]]()});_0xc6abxf[_0xc098[376]](36,function(){_0xc6abx3[_0xc098[282]]()});_0xc6abxf[_0xc098[376]](35,function(){_0xc6abx3[_0xc098[15]]()});_0xc6abxf[_0xc098[376]](37,function(){_0xc6abx58(37)});_0xc6abxf[_0xc098[376]](38,function(){_0xc6abx58(38)});_0xc6abxf[_0xc098[376]](39,function(){_0xc6abx58(39)});_0xc6abxf[_0xc098[376]](40,function(){_0xc6abx58(40)});_0xc6abxf[_0xc098[376]](113,function(){_0xc6abx3[_0xc098[70]]()});_0xc6abx5b(46,false,_0xc098[242]);_0xc6abx5b(82,true,_0xc098[252]);_0xc6abx5b(83,true,_0xc098[171]);_0xc6abx5b(83,true,_0xc098[179],true);_0xc6abx5b(107,false,_0xc098[380]);_0xc6abx5b(109,false,_0xc098[381]);_0xc6abx5b(65,true,_0xc098[382]);_0xc6abx5b(86,true,_0xc098[383],true);_0xc6abx5b(69,true,_0xc098[384],true);_0xc6abx5b(69,true,_0xc098[385]);_0xc6abx5b(66,true,_0xc098[248]);_0xc6abx5b(70,true,_0xc098[247]);_0xc6abx5b(68,true,_0xc098[243]);_0xc6abx5b(90,true,_0xc098[236]);_0xc6abx5b(89,true,_0xc098[237]);_0xc6abx5b(88,true,_0xc098[115]);_0xc6abx5b(67,true,_0xc098[116]);_0xc6abx5b(81,true,_0xc098[386]);_0xc6abx5b(86,true,_0xc098[111]);_0xc6abx5b(71,true,_0xc098[258]);_0xc6abx5b(71,true,_0xc098[387],true);_0xc6abx5b(85,true,_0xc098[260]);_0xc6abx5b(112,false,_0xc098[388]);_0xc6abx5b(80,true,_0xc098[221],true);return _0xc6abxf};EditorUi[_0xc098[10]][_0xc098[58]]=function(_0xc6abx3,_0xc6abx36,_0xc6abx62,_0xc6abx63){for(var _0xc6abx37=0;_0xc6abx37<_0xc6abx36[_0xc098[143]];_0xc6abx37++){_0xc6abx3[_0xc098[391]]( new mxMultiplicity(true,_0xc6abx36[_0xc6abx37],null,null,_0xc6abx62[_0xc6abx37][0],_0xc6abx62[_0xc6abx37][1],null,mxResources[_0xc098[112]](_0xc6abx36[_0xc6abx37])+_0xc098[389]+_0xc6abx62[_0xc6abx37][0]+_0xc098[390],null));_0xc6abx3[_0xc098[391]]( new mxMultiplicity(false,_0xc6abx36[_0xc6abx37],null,null,_0xc6abx63[_0xc6abx37][0],_0xc6abx63[_0xc6abx37][1],null,mxResources[_0xc098[112]](_0xc6abx36[_0xc6abx37])+_0xc098[389]+_0xc6abx63[_0xc6abx37][0]+_0xc098[392],null))}}
\ No newline at end of file
+/**
+ * $Id: EditorUi.js,v 1.21 2013/03/14 20:46:36 david Exp $
+ * Copyright (c) 2006-2012, JGraph Ltd
+ */
+/**
+ * Constructs a new graph editor
+ */
+EditorUi = function(editor, container) {
+       this.editor = editor || new Editor();
+       this.container = container || document.getElementById('geEditor');
+       var graph = editor.graph;
+       var self = this;
+
+       // Disables scrollbars
+       this.container.style.overflow = 'hidden';
+
+       // Pre-fetches submenu image
+       new Image().src = mxPopupMenu.prototype.submenuImage;
+
+       // Pre-fetches connect image
+       if (mxConnectionHandler.prototype.connectImage != null) {
+               new Image().src = mxConnectionHandler.prototype.connectImage.src;
+       }
+
+       // Creates the user interface
+       this.actions = new Actions(this);
+       this.menus = new Menus(this);
+       this.createDivs();
+       this.refresh();
+       this.createUi();
+
+       // Disables HTML and text selection
+       var textEditing = mxUtils.bind(this, function(evt) {
+               if (evt == null) {
+                       evt = window.event;
+               }
+
+               if (this.isSelectionAllowed(evt)) {
+                       return true;
+               }
+
+               return graph.isEditing();
+       });
+
+       // Disables text selection while not editing and no dialog visible
+       if (this.container == document.body) {
+               this.menubarContainer.onselectstart = textEditing;
+               this.menubarContainer.onmousedown = textEditing;
+               this.toolbarContainer.onselectstart = textEditing;
+               this.toolbarContainer.onmousedown = textEditing;
+               this.diagramContainer.onselectstart = textEditing;
+               this.diagramContainer.onmousedown = textEditing;
+               this.sidebarContainer.onselectstart = textEditing;
+               this.sidebarContainer.onmousedown = textEditing;
+               this.footerContainer.onselectstart = textEditing;
+               this.footerContainer.onmousedown = textEditing;
+       }
+
+       // And uses built-in context menu while editing
+       if (mxClient.IS_IE && (typeof(document.documentMode) === 'undefined' ||
+                       document.documentMode < 9)) {
+               mxEvent.addListener(this.diagramContainer, 'contextmenu', textEditing);
+               mxEvent.addListener(this.sidebarContainer, 'contextmenu', textEditing);
+       } else {
+               // Allows browser context menu outside of diagram and sidebar
+               this.diagramContainer.oncontextmenu = textEditing;
+               this.sidebarContainer.oncontextmenu = textEditing;
+       }
+
+       // Contains the main graph instance inside the given panel
+       graph.init(this.diagramContainer);
+       graph.refresh();
+
+       // Enables scrollbars and sets cursor style for the container
+       graph.container.setAttribute('tabindex', '0');
+       // graph.container.style.overflow = (touchStyle) ? 'hidden' : 'auto';
+       graph.container.style.cursor = 'default';
+       graph.container.style.backgroundImage = 'url(' + editor.gridImage + ')';
+       graph.container.style.backgroundPosition = '-1px -1px';
+       graph.container.focus();
+
+       // Keeps graph container focused on mouse down
+       var graphFireMouseEvent = graph.fireMouseEvent;
+       graph.fireMouseEvent = function(evtName, me, sender) {
+               if (evtName == mxEvent.MOUSE_DOWN) {
+                       this.container.focus();
+               }
+
+               graphFireMouseEvent.apply(this, arguments);
+       };
+
+       // Giuseppe Careri
+       // Defines invalid connections along with the error messages that they produce.
+
+       this.createMultiplicities(graph.multiplicities, ['start', 'end', 'input',
+               'question', 'email'
+       ], [
+               [1, 1],
+               [0, 0],
+               [1, 1],
+               [1, 'n'],
+               [1, 'n']
+       ], [
+               [0, 0],
+               [1, 'n'],
+               [1, 'n'],
+               [1, 'n'],
+               [1, 'n']
+
+       ]);
+
+
+       // Giuseppe Careri
+       // Processes a doubleclick on an optional cell and fires a <dblclick> event.
+       // The event is fired initially.
+       // If the graph is enabled and the event has not been consumed, then <edit> is called with the given cell.
+       // The event is ignored if no cell was specified.
+       graph.dblClick = function(evt, cell) {
+               var edges = ['question'];
+               var mxe = new mxEventObject(mxEvent.DOUBLE_CLICK, 'event', evt, 'cell',
+                       cell);
+               this.fireEvent(mxe);
+
+               if (this.isEnabled() && !mxEvent.isConsumed(evt) && !mxe.isConsumed()) {
+                       // Override dblClick Vertices and Edges
+                       if (this.getModel().isEdge(cell)) {
+                               if (edges.indexOf(cell.source.value.tagName) >= 0)
+                                       this.startEditingAtCell(cell);
+                       } else if (this.getModel().isVertex(cell)) {
+                               console.log(self);
+                               console.log(cell);
+                               self.showDialog(new GeneralDialog(self, cell).container, 320, 280, true,
+                                       true);
+                       }
+                       mxe.consume();
+               }
+       }
+
+       // Configures automatic expand on mouseover
+       graph.panningHandler.autoExpand = true;
+
+       // Installs context menu
+       graph.panningHandler.factoryMethod = mxUtils.bind(this, function(menu, cell,
+               evt) {
+               this.menus.createPopupMenu(menu, cell, evt);
+       });
+
+       // Initializes the outline
+       editor.outline.init(this.outlineContainer);
+
+       // Hides context menu
+       mxEvent.addGestureListeners(document, mxUtils.bind(this, function(evt) {
+               graph.panningHandler.hideMenu();
+       }));
+
+       // Adds gesture handling (pinch to zoom)
+       if (mxClient.IS_TOUCH) {
+               mxEvent.addListener(graph.container, 'gesturechange',
+                       mxUtils.bind(this, function(evt) {
+                               graph.view.getDrawPane().setAttribute('transform', 'scale(' + evt.scale +
+                                       ')');
+                               graph.view.getOverlayPane().style.visibility = 'hidden';
+                       })
+               );
+
+               mxEvent.addListener(graph.container, 'gestureend',
+                       mxUtils.bind(this, function(evt) {
+                               graph.view.getDrawPane().removeAttribute('transform');
+                               graph.zoomToCenter = true;
+                               graph.zoom(evt.scale);
+                               graph.view.getOverlayPane().style.visibility = 'visible';
+                       })
+               );
+       }
+
+       // Create handler for key events
+       var keyHandler = this.createKeyHandler(editor);
+
+       // Getter for key handler
+       this.getKeyHandler = function() {
+               return keyHandler;
+       };
+
+       // Updates the editor UI after the window has been resized
+       mxEvent.addListener(window, 'resize', mxUtils.bind(this, function() {
+               this.refresh();
+               graph.sizeDidChange();
+               this.editor.outline.update(false);
+               this.editor.outline.outline.sizeDidChange();
+       }));
+
+       // Updates action and menu states
+       this.init();
+       this.open();
+};
+
+/**
+ * Specifies the size of the split bar.
+ */
+EditorUi.prototype.splitSize = (mxClient.IS_TOUCH) ? 16 : 8;
+
+/**
+ * Specifies the height of the menubar. Default is 34.
+ */
+EditorUi.prototype.menubarHeight = 33;
+
+/**
+ * Specifies the height of the toolbar. Default is 36.
+ */
+EditorUi.prototype.toolbarHeight = 36;
+
+/**
+ * Specifies the height of the footer. Default is 28.
+ */
+EditorUi.prototype.footerHeight = 28;
+
+/**
+ * Specifies the position of the horizontal split bar. Default is 212.
+ */
+EditorUi.prototype.hsplitPosition = 204;
+
+/**
+ * Specifies the position of the vertical split bar. Default is 190.
+ */
+EditorUi.prototype.vsplitPosition = 190;
+
+/**
+ * Installs the listeners to update the action states.
+ */
+EditorUi.prototype.init = function() {
+       // Updates action states
+       this.addUndoListener();
+       this.addSelectionListener();
+
+       // Overrides clipboard to update paste action state
+       var paste = this.actions.get('paste');
+
+       var updatePaste = function() {
+               paste.setEnabled(!mxClipboard.isEmpty());
+       };
+
+       var mxClipboardCut = mxClipboard.cut;
+       mxClipboard.cut = function() {
+               mxClipboardCut.apply(this, arguments);
+               updatePaste();
+       };
+
+       var mxClipboardCopy = mxClipboard.copy;
+       mxClipboard.copy = function() {
+               mxClipboardCopy.apply(this, arguments);
+               updatePaste();
+       };
+};
+
+/**
+ * Hook for allowing selection and context menu for certain events.
+ */
+EditorUi.prototype.isSelectionAllowed = function(evt) {
+       return false;
+};
+
+/**
+ * Opens the current diagram via the window.opener if one exists.
+ */
+EditorUi.prototype.open = function() {
+       // Cross-domain window access is not allowed in FF, so if we
+       // were opened from another domain then this will fail.
+       try {
+               if (window.opener != null && window.opener.openFile != null) {
+                       window.opener.openFile.setConsumer(mxUtils.bind(this, function(xml,
+                               filename) {
+                               try {
+                                       var doc = mxUtils.parseXml(xml);
+                                       this.editor.setGraphXml(doc.documentElement);
+                                       this.editor.modified = false;
+                                       this.editor.undoManager.clear();
+
+                                       if (filename != null) {
+                                               this.editor.filename = filename;
+                                       }
+                               } catch (e) {
+                                       mxUtils.alert(mxResources.get('invalidOrMissingFile') + ': ' + e.message);
+                               }
+                       }));
+               }
+       } catch (e) {
+               // ignore
+       }
+};
+
+/**
+ * Giuseppe Careri
+ * Opens the current diagram via string.
+ */
+EditorUi.prototype.openString = function(xml, filename, data) {
+       try {
+               var doc = mxUtils.parseXml(xml);
+               this.editor.setGraphXml(doc.documentElement);
+               this.editor.modified = false;
+               this.editor.undoManager.clear();
+
+               if (filename != null) {
+                       this.editor.filename = filename;
+               }
+
+               if (data != null) {
+                       this.editor.data = data;
+               }
+       } catch (e) {
+               mxUtils.alert(mxResources.get('invalidOrMissingFile') + ': ' + e.message);
+       }
+};
+
+/**
+ * Saves As the current graph under the given project name.
+ */
+EditorUi.prototype.new = function(name) {
+       var editor = this.editor;
+
+       if (name != null) {
+               var xml = mxUtils.getPrettyXml(this.editor.getGraphXml());
+               try {
+                       if (useLocalStorage) {
+                               if (localStorage.getItem(name) != null &&
+                                       !mxUtils.confirm(mxResources.get('replace', [name]))) {
+                                       return;
+                               }
+
+                               localStorage.setItem(name, xml);
+                               this.editor.setStatus(mxResources.get('saved') + ' ' + new Date());
+                       } else {
+                               console.log(xml.length);
+                               console.log(MAX_REQUEST_SIZE);
+                               if (xml.length < MAX_REQUEST_SIZE) {
+                                       xml = encodeURIComponent(xml);
+                                       name = encodeURIComponent(name);
+
+                                       var xhr = new XMLHttpRequest();
+                                       xhr.open("POST", SAVE_URL, true);
+                                       xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
+                                       xhr.setRequestHeader('Authorization', 'Bearer ' + editor.data.token);
+                                       xhr.onload = function(e) {
+                                               if (xhr.readyState === 4) {
+                                                       if (xhr.status === 201) {
+                                                               editor.setStatus('Project ' + JSON.parse(xhr.response).name +
+                                                                       ' is opening in new window!');
+                                                               setTimeout(function() {
+                                                                       window.open('jscripty/project/' + JSON.parse(xhr.response).id,
+                                                                               '_blank');
+                                                               }, 1500);
+                                                       } else {
+                                                               editor.setStatus('Error creating project: ' +
+                                                                       JSON.parse(xhr.response).errors[0].message);
+                                                       }
+                                               }
+                                       };
+                                       xhr.onerror = function(e) {
+                                               mxUtils.alert(xhr.statusText);
+                                       };
+                                       xhr.send('description=project_new&name=' + name);
+                               } else {
+                                       mxUtils.alert(mxResources.get('drawingTooLarge'));
+                                       mxUtils.popup(xml);
+
+                                       return;
+                               }
+                       }
+
+                       this.editor.filename = name;
+                       this.editor.modified = false;
+               } catch (e) {
+                       this.editor.setStatus('Error creating project');
+               }
+       } else {
+               this.editor.setStatus('Error creating project');
+       }
+};
+
+
+/**
+ * Saves the current graph under the given project name.
+ */
+EditorUi.prototype.save = function(name) {
+       var editor = this.editor;
+
+       if (name != null) {
+               var xml = mxUtils.getPrettyXml(this.editor.getGraphXml());
+               try {
+                       if (useLocalStorage) {
+                               if (localStorage.getItem(name) != null &&
+                                       !mxUtils.confirm(mxResources.get('replace', [name]))) {
+                                       return;
+                               }
+
+                               localStorage.setItem(name, xml);
+                               this.editor.setStatus(mxResources.get('saved') + ' ' + new Date());
+                       } else {
+                               console.log(xml.length);
+                               console.log(MAX_REQUEST_SIZE);
+                               if (xml.length < MAX_REQUEST_SIZE) {
+                                       xml = encodeURIComponent(xml);
+
+                                       var xhr = new XMLHttpRequest();
+                                       xhr.open("PUT", SAVE_URL + this.editor.data.id, true);
+                                       xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
+                                       xhr.setRequestHeader('Authorization', 'Bearer ' + editor.data.token);
+                                       xhr.onload = function(e) {
+                                               if (xhr.readyState === 4) {
+                                                       if (xhr.status === 200) {
+                                                               editor.setStatus('Updated at ' + JSON.parse(xhr.response).updatedAt +
+                                                                       ' (' + xhr.status + ' ' + xhr.statusText + ')');
+                                                       } else {
+                                                               editor.setStatus('Error saving project: ' +
+                                                                       JSON.parse(xhr.response).errors[0].message);
+                                                       }
+                                               }
+                                       };
+                                       xhr.onerror = function(e) {
+                                               mxUtils.alert(xhr.statusText);
+                                       };
+                                       xhr.send('draft=' + xml);
+                               } else {
+                                       mxUtils.alert(mxResources.get('drawingTooLarge'));
+                                       mxUtils.popup(xml);
+
+                                       return;
+                               }
+                       }
+
+                       this.editor.filename = name;
+                       this.editor.modified = false;
+               } catch (e) {
+                       this.editor.setStatus('Error saving file');
+               }
+       } else {
+               this.editor.setStatus('Error saving file');
+       }
+};
+
+/**
+ * Saves As the current graph under the given project name.
+ */
+EditorUi.prototype.saveAs = function(name) {
+       var editor = this.editor;
+       console.log(name);
+       if (name != null) {
+               var xml = mxUtils.getPrettyXml(this.editor.getGraphXml());
+               try {
+                       if (useLocalStorage) {
+                               if (localStorage.getItem(name) != null &&
+                                       !mxUtils.confirm(mxResources.get('replace', [name]))) {
+                                       return;
+                               }
+
+                               localStorage.setItem(name, xml);
+                               this.editor.setStatus(mxResources.get('saved') + ' ' + new Date());
+                       } else {
+                               console.log(xml.length);
+                               console.log(MAX_REQUEST_SIZE);
+                               if (xml.length < MAX_REQUEST_SIZE) {
+                                       xml = encodeURIComponent(xml);
+                                       name = encodeURIComponent(name);
+
+                                       var xhr = new XMLHttpRequest();
+                                       xhr.open("POST", SAVE_URL, true);
+                                       xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
+                                       xhr.setRequestHeader('Authorization', 'Bearer ' + editor.data.token);
+                                       xhr.onload = function(e) {
+                                               if (xhr.readyState === 4) {
+                                                       if (xhr.status === 201) {
+                                                               editor.setStatus('Project ' + JSON.parse(xhr.response).name +
+                                                                       ' is opening in new window!');
+                                                               setTimeout(function() {
+                                                                       window.open('jscripty/project/' + JSON.parse(xhr.response).id,
+                                                                               '_blank');
+                                                               }, 1500);
+                                                       } else {
+                                                               editor.setStatus('Error cloning project: ' +
+                                                                       JSON.parse(xhr.response).errors[0].message);
+                                                       }
+                                               }
+                                       };
+                                       xhr.onerror = function(e) {
+                                               mxUtils.alert(xhr.statusText);
+                                       };
+                                       xhr.send('description=project_cloned&name=' + name +
+                                               '&draft=' + xml + '&production=' + xml);
+                               } else {
+                                       mxUtils.alert(mxResources.get('drawingTooLarge'));
+                                       mxUtils.popup(xml);
+
+                                       return;
+                               }
+                       }
+
+                       this.editor.filename = name;
+                       this.editor.modified = false;
+               } catch (e) {
+                       this.editor.setStatus('Error saving file');
+               }
+       } else {
+               this.editor.setStatus('Error saving file');
+       }
+};
+
+/**
+ * Plush the current graph under the given project name.
+ */
+EditorUi.prototype.validate = function(a, b) {
+       var graph = this.editor.graph;
+       a = null != a ? a : graph.model.getRoot();
+       b = null != b ? b : {};
+       for (var c = !0, d = graph.model.getChildCount(a), e = 0; e < d; e++) {
+               var f = graph.model.getChildAt(a, e),
+                       g = b;
+               graph.isValidRoot(f) && (g = {});
+               g = this.validate(f, g);
+               null != g ? graph.setCellWarning(f, g.replace(/\n/g, "\x3cbr\x3e")) : graph.setCellWarning(f, null);
+               c = c && null == g
+       }
+       d = "";
+       if (graph.model.isVertex(a)) {
+               switch (a.value.nodeName) {
+                       case 'question':
+                               d = (a.value.getAttribute('question') !== "") ? "" :
+                                       'Question can not be empty' + "\n";
+                               d += (a.value.getAttribute('label') !== "") ? "" : 'Label can not be empty' + "\n";
+
+                               break;
+                       case 'input':
+                               d = (a.value.getAttribute('question') !== "") ? "" : 'Question can not be empty' + "\n";
+                               d += (a.value.getAttribute('label') !== "") ? "" : 'Label can not be empty' + "\n";
+
+                               break;
+                       case 'start':
+                               d = this.validateBlock('start') ? '' : "Only one Start block is allowed" + "\n";
+                               d += (a.value.getAttribute('label') !== "") ? "" : 'Label can not be empty' + "\n";
+
+                               break;
+               }
+       }
+
+       if (graph.model.isEdge(a)) {
+               var z = graph.model.getCell(a.source.getId());
+               switch (z.value.nodeName) {
+                       case 'question':
+                               // var patt = /^[a-zA-Z0-9][a-zA-Z0-9\s]*$/;
+                               var str = String(a.getValue());
+                               console.log(str);
+                               if (str === 'null' || str === 'undefined') {
+                                       d = "Value can not be empty" + "\n";
+                               } else {
+                                       var result = str.split(",");
+                                       result.forEach(function(entry, key) {
+                                               d = d + ((entry.trim() !== "") ? "" : 'Value' + (key + 1) + ' can not be empty' + "\n");
+                                       });
+                               }
+                               // console.log(a.getValue());
+                               // if ((str == 'undefined') || (str == 'null')) {
+                               //      str = ' ';
+                               // }
+                               // d = ((a.getValue() !== "") && (a.getValue() !== 'undefined') && (a.getValue() !== null)) ? '' : "Value can not be empty" + "\n";
+                               // d = d + ((patt.test(str.trim())) ? "" : 'Value can not be empty' + "\n");
+                               //
+                               // res.forEach(function(entry) {
+                               // d = d + ((patt.test(entry.trim())) ? "" : 'Can not be empty' + "\n");
+                               // });
+                               break;
+
+               }
+       }
+
+       graph.isCellCollapsed(a) && !c && (d += (mxResources.get(graph.containsValidationErrorsResource) || graph.containsValidationErrorsResource) + "\n");
+       d = graph.model.isEdge(a) ? d + (graph.getEdgeValidationError(a, graph.model.getTerminal(a, !0), graph.model.getTerminal(a, !1)) || "") : d + (graph.getCellValidationError(a) || "");
+       e = graph.validateCell(a, b);
+       null != e && (d += e);
+       null == graph.model.getParent(a) && graph.view.validate();
+       return 0 < d.length || !c ? d : null
+}
+
+EditorUi.prototype.validateBlock = function(blockName) {
+       var graph = this.editor.graph;
+       var parent = graph.getDefaultParent();
+       var count = 0;
+       // var model = graph.getModel();
+       //We can also use model.getChildren(parent)
+       parent.children.forEach(function(n) {
+               if (graph.model.isVertex(n) && n.value.nodeName == blockName) {
+                       count++;
+               }
+       });
+       return count > 1 ? false : true;
+}
+
+EditorUi.prototype.publish = function(name) {
+
+       var editor = this.editor;
+
+       if (name != null) {
+
+               var response = this.validate();
+               if (response === null) {
+                       var xml = mxUtils.getPrettyXml(this.editor.getGraphXml());
+                       try {
+                               if (useLocalStorage) {
+                                       if (localStorage.getItem(name) != null &&
+                                               !mxUtils.confirm(mxResources.get('replace', [name]))) {
+                                               return;
+                                       }
+
+                                       localStorage.setItem(name, xml);
+                                       this.editor.setStatus(mxResources.get('saved') + ' ' + new Date());
+                               } else {
+                                       console.log(xml.length);
+                                       console.log(MAX_REQUEST_SIZE);
+                                       if (xml.length < MAX_REQUEST_SIZE) {
+                                               xml = encodeURIComponent(xml);
+
+                                               var xhr = new XMLHttpRequest();
+                                               xhr.open("PUT", SAVE_URL + this.editor.data.id, true);
+                                               xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
+                                               xhr.setRequestHeader('Authorization', 'Bearer ' + editor.data.token);
+                                               xhr.onload = function(e) {
+                                                       if (xhr.readyState === 4) {
+                                                               if (xhr.status === 200) {
+                                                                       editor.setStatus('Published at ' + JSON.parse(xhr.response).updatedAt +
+                                                                               ' (' + xhr.status + ' ' + xhr.statusText + ')');
+                                                               } else {
+                                                                       editor.setStatus('Error saving project: ' +
+                                                                               JSON.parse(xhr.response).errors[0].message);
+                                                               }
+                                                       }
+                                               };
+                                               xhr.onerror = function(e) {
+                                                       mxUtils.alert(xhr.statusText);
+                                               };
+                                               xhr.send('draft=' + xml + '&production=' + xml);
+                                       } else {
+                                               mxUtils.alert(mxResources.get('drawingTooLarge'));
+                                               mxUtils.popup(xml);
+
+                                               return;
+                                       }
+                               }
+
+                               this.editor.filename = name;
+                               this.editor.modified = false;
+                       } catch (e) {
+                               this.editor.setStatus('Error publishing file');
+                       }
+               } else {
+                       editor.setStatus('Error publishing project: ');
+               }
+       } else {
+               this.editor.setStatus('Error publishing file');
+       }
+       // }
+
+
+
+};
+
+/**
+ * Create variable
+ */
+EditorUi.prototype.variable = function(name) {
+       var editor = this.editor;
+
+       if (name != null) {
+               try {
+
+                       var xhr = new XMLHttpRequest();
+                       xhr.open("POST", VARIABLE_URL, true);
+                       xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
+                       xhr.setRequestHeader('Authorization', 'Bearer ' + editor.data.token);
+                       xhr.onload = function(e) {
+                               if (xhr.readyState === 4) {
+                                       if (xhr.status === 201) {
+                                               editor.setStatus('Variable created at ' + JSON.parse(xhr.response).createdAt +
+                                                       ' (' + xhr.status + ' ' + xhr.statusText + ')');
+                                       } else {
+                                               editor.setStatus('Error cloning project: ' +
+                                                       JSON.parse(xhr.response).errors[0].message);
+                                       }
+                               }
+                       };
+                       xhr.onerror = function(e) {
+                               mxUtils.alert(xhr.statusText);
+                       };
+                       xhr.send('name=' + name);
+               } catch (e) {
+                       this.editor.setStatus('Error creating variable');
+               }
+       } else {
+               this.editor.setStatus('Error creating variable');
+       }
+};
+
+/**
+ * Returns the URL for a copy of this editor with no state.
+ */
+EditorUi.prototype.getUrl = function(pathname) {
+       var href = (pathname != null) ? pathname : window.location.pathname;
+       var parms = (href.indexOf('?') > 0) ? 1 : 0;
+
+       // Removes template URL parameter for new blank diagram
+       for (var key in urlParams) {
+               if (parms == 0) {
+                       href += '?';
+               } else {
+                       href += '&';
+               }
+
+               href += key + '=' + urlParams[key];
+               parms++;
+       }
+
+       return href;
+};
+
+/**
+ * Updates the states of the given undo/redo items.
+ */
+EditorUi.prototype.addUndoListener = function() {
+       var undo = this.actions.get('undo');
+       var redo = this.actions.get('redo');
+
+       var undoMgr = this.editor.undoManager;
+
+       var undoListener = function() {
+               undo.setEnabled(undoMgr.canUndo());
+               redo.setEnabled(undoMgr.canRedo());
+       };
+
+       undoMgr.addListener(mxEvent.ADD, undoListener);
+       undoMgr.addListener(mxEvent.UNDO, undoListener);
+       undoMgr.addListener(mxEvent.REDO, undoListener);
+       undoMgr.addListener(mxEvent.CLEAR, undoListener);
+
+       // Updates the button states once
+       undoListener();
+};
+
+/**
+ * Updates the states of the given toolbar items based on the selection.
+ */
+EditorUi.prototype.addSelectionListener = function() {
+       var selectionListener = mxUtils.bind(this, function() {
+               var graph = this.editor.graph;
+               var selected = !graph.isSelectionEmpty();
+               var vertexSelected = false;
+               var edgeSelected = false;
+
+               var cells = graph.getSelectionCells();
+
+               if (cells != null) {
+                       for (var i = 0; i < cells.length; i++) {
+                               var cell = cells[i];
+
+                               if (graph.getModel().isEdge(cell)) {
+                                       edgeSelected = true;
+                               }
+
+                               if (graph.getModel().isVertex(cell)) {
+                                       vertexSelected = true;
+                               }
+
+                               if (edgeSelected && vertexSelected) {
+                                       break;
+                               }
+                       }
+               }
+
+               // Updates action states
+               var actions = ['cut', 'copy', 'delete', 'duplicate', 'bold', 'italic',
+                       'style', 'underline', 'toFront', 'toBack', 'dashed', 'rounded',
+                       'shadow',
+                       'tilt', 'autosize'
+               ];
+
+               for (var i = 0; i < actions.length; i++) {
+                       this.actions.get(actions[i]).setEnabled(selected);
+               }
+
+               this.actions.get('curved').setEnabled(edgeSelected);
+               this.actions.get('rotation').setEnabled(vertexSelected);
+               this.actions.get('wordWrap').setEnabled(vertexSelected);
+               this.actions.get('group').setEnabled(graph.getSelectionCount() > 1);
+               this.actions.get('ungroup').setEnabled(graph.getSelectionCount() == 1 &&
+                       graph.getModel().getChildCount(graph.getSelectionCell()) > 0);
+               var oneVertexSelected = vertexSelected && graph.getSelectionCount() == 1;
+               this.actions.get('removeFromGroup').setEnabled(oneVertexSelected &&
+                       graph.getModel().isVertex(graph.getModel().getParent(graph.getSelectionCell()))
+               );
+
+               // Updates menu states
+               var menus = ['fontFamily', 'fontSize', 'alignment', 'position', 'text',
+                       'format',
+                       'arrange', 'linewidth', 'spacing'
+               ];
+
+               for (var i = 0; i < menus.length; i++) {
+                       this.menus.get(menus[i]).setEnabled(selected);
+               }
+
+               menus = ['line', 'lineend', 'linestart'];
+
+               for (var i = 0; i < menus.length; i++) {
+                       this.menus.get(menus[i]).setEnabled(edgeSelected);
+               }
+
+               this.actions.get('setAsDefaultEdge').setEnabled(edgeSelected);
+
+               this.menus.get('align').setEnabled(graph.getSelectionCount() > 1);
+               this.menus.get('direction').setEnabled(vertexSelected || (edgeSelected &&
+                       graph.isLoop(graph.view.getState(graph.getSelectionCell()))));
+               this.menus.get('navigation').setEnabled(graph.foldingEnabled && ((graph.view
+                               .currentRoot != null) ||
+                       (graph.getSelectionCount() == 1 && graph.isValidRoot(graph.getSelectionCell()))
+               ));
+               this.actions.get('home').setEnabled(graph.view.currentRoot != null);
+               this.actions.get('exitGroup').setEnabled(graph.view.currentRoot != null);
+               var groupEnabled = graph.getSelectionCount() == 1 && graph.isValidRoot(
+                       graph.getSelectionCell());
+               this.actions.get('enterGroup').setEnabled(groupEnabled);
+               this.actions.get('expand').setEnabled(groupEnabled);
+               this.actions.get('collapse').setEnabled(groupEnabled);
+               this.actions.get('editLink').setEnabled(graph.getSelectionCount() == 1);
+               this.actions.get('openLink').setEnabled(graph.getSelectionCount() == 1 &&
+                       graph.getLinkForCell(graph.getSelectionCell()) != null);
+       });
+
+       this.editor.graph.getSelectionModel().addListener(mxEvent.CHANGE,
+               selectionListener);
+       selectionListener();
+};
+
+/**
+ * Refreshes the viewport.
+ */
+EditorUi.prototype.refresh = function() {
+       var quirks = mxClient.IS_IE && (document.documentMode == null || document.documentMode ==
+               5);
+       var w = this.container.clientWidth;
+       var h = this.container.clientHeight;
+
+       if (this.container == document.body) {
+               w = document.body.clientWidth || document.documentElement.clientWidth;
+               h = (quirks) ? document.body.clientHeight || document.documentElement.clientHeight :
+                       document.documentElement.clientHeight;
+       }
+
+       var effHsplitPosition = Math.max(0, Math.min(this.hsplitPosition, w - this.splitSize -
+               20));
+       var effVsplitPosition = Math.max(0, Math.min(this.vsplitPosition, h - this.menubarHeight -
+               this.toolbarHeight - this.footerHeight - this.splitSize - 1));
+
+       this.menubarContainer.style.height = this.menubarHeight + 'px';
+       this.toolbarContainer.style.top = this.menubarHeight + 'px';
+       this.toolbarContainer.style.height = this.toolbarHeight + 'px';
+
+       var tmp = this.menubarHeight + this.toolbarHeight;
+
+       if (!mxClient.IS_QUIRKS) {
+               tmp += 1;
+       }
+
+       this.sidebarContainer.style.top = tmp + 'px';
+       this.sidebarContainer.style.width = effHsplitPosition + 'px';
+       this.outlineContainer.style.width = effHsplitPosition + 'px';
+       this.outlineContainer.style.height = effVsplitPosition + 'px';
+       this.outlineContainer.style.bottom = this.footerHeight + 'px';
+       this.diagramContainer.style.left = (effHsplitPosition + this.splitSize) +
+               'px';
+       this.diagramContainer.style.top = this.sidebarContainer.style.top;
+       this.footerContainer.style.height = this.footerHeight + 'px';
+       this.footerContainer.style.display = 'none';
+       this.hsplit.style.top = this.sidebarContainer.style.top;
+       this.hsplit.style.bottom = this.outlineContainer.style.bottom;
+       this.hsplit.style.left = effHsplitPosition + 'px';
+       this.vsplit.style.width = this.sidebarContainer.style.width;
+       this.vsplit.style.bottom = (effVsplitPosition + this.footerHeight) + 'px';
+
+       if (quirks) {
+               this.menubarContainer.style.width = w + 'px';
+               this.toolbarContainer.style.width = this.menubarContainer.style.width;
+               var sidebarHeight = (h - effVsplitPosition - this.splitSize - this.footerHeight -
+                       this.menubarHeight - this.toolbarHeight);
+               this.sidebarContainer.style.height = sidebarHeight + 'px';
+               this.diagramContainer.style.width = (w - effHsplitPosition - this.splitSize) +
+                       'px';
+               var diagramHeight = (h - this.footerHeight - this.menubarHeight - this.toolbarHeight);
+               this.diagramContainer.style.height = diagramHeight + 'px';
+               this.footerContainer.style.width = this.menubarContainer.style.width;
+               this.hsplit.style.height = diagramHeight + 'px';
+       } else {
+               this.sidebarContainer.style.bottom = (effVsplitPosition + this.splitSize +
+                       this.footerHeight) + 'px';
+               this.diagramContainer.style.bottom = this.outlineContainer.style.bottom;
+       }
+};
+
+/**
+ * Creates the required containers.
+ */
+EditorUi.prototype.createDivs = function() {
+       this.menubarContainer = this.createDiv('geMenubarContainer');
+       this.toolbarContainer = this.createDiv('geToolbarContainer');
+       this.sidebarContainer = this.createDiv('geSidebarContainer');
+       this.outlineContainer = this.createDiv('geOutlineContainer');
+       this.diagramContainer = this.createDiv('geDiagramContainer');
+       this.footerContainer = this.createDiv('geFooterContainer');
+       this.hsplit = this.createDiv('geHsplit');
+       this.vsplit = this.createDiv('geVsplit');
+
+       // Sets static style for containers
+       this.menubarContainer.style.top = '0px';
+       this.menubarContainer.style.left = '0px';
+       this.menubarContainer.style.right = '0px';
+       this.toolbarContainer.style.left = '0px';
+       this.toolbarContainer.style.right = '0px';
+       this.sidebarContainer.style.left = '0px';
+       this.outlineContainer.style.left = '0px';
+       this.diagramContainer.style.right = '0px';
+       this.footerContainer.style.left = '0px';
+       this.footerContainer.style.right = '0px';
+       this.footerContainer.style.bottom = '0px';
+       this.vsplit.style.left = '0px';
+       this.vsplit.style.height = this.splitSize + 'px';
+       this.hsplit.style.width = this.splitSize + 'px';
+};
+
+/**
+ * Creates the required containers.
+ */
+EditorUi.prototype.createUi = function() {
+       // Creates menubar
+       this.menubar = this.menus.createMenubar(this.createDiv('geMenubar'));
+       this.menubarContainer.appendChild(this.menubar.container);
+
+       // Creates toolbar
+       this.toolbar = this.createToolbar(this.createDiv('geToolbar'));
+       this.toolbarContainer.appendChild(this.toolbar.container);
+
+       // Creates the sidebar
+       this.sidebar = this.createSidebar(this.sidebarContainer);
+
+       // Creates the footer
+       this.footerContainer.appendChild(this.createFooter());
+
+       // Adds status bar in menubar
+       this.statusContainer = this.createStatusContainer();
+
+       // Connects the status bar to the editor status
+       this.editor.addListener('statusChanged', mxUtils.bind(this, function() {
+               this.setStatusText(this.editor.getStatus());
+       }));
+
+       this.setStatusText(this.editor.getStatus());
+       this.menubar.container.appendChild(this.statusContainer);
+
+       // Inserts into DOM
+       this.container.appendChild(this.menubarContainer);
+       this.container.appendChild(this.toolbarContainer);
+       this.container.appendChild(this.sidebarContainer);
+       this.container.appendChild(this.outlineContainer);
+       this.container.appendChild(this.diagramContainer);
+       this.container.appendChild(this.footerContainer);
+       this.container.appendChild(this.hsplit);
+       this.container.appendChild(this.vsplit);
+
+       // HSplit
+       this.addSplitHandler(this.hsplit, true, 0, mxUtils.bind(this, function(
+               value) {
+               this.hsplitPosition = value;
+               this.refresh();
+               this.editor.graph.sizeDidChange();
+               this.editor.outline.update(false);
+               this.editor.outline.outline.sizeDidChange();
+       }));
+
+       // VSplit
+       this.addSplitHandler(this.vsplit, false, this.footerHeight, mxUtils.bind(
+               this,
+               function(value) {
+                       this.vsplitPosition = value;
+                       this.refresh();
+                       this.editor.outline.update(false);
+                       this.editor.outline.outline.sizeDidChange();
+               }));
+};
+
+/**
+ * Creates a new toolbar for the given container.
+ */
+EditorUi.prototype.createStatusContainer = function() {
+       var container = document.createElement('a');
+       container.className = 'geItem geStatus';
+
+       return container;
+};
+
+/**
+ * Creates a new toolbar for the given container.
+ */
+EditorUi.prototype.createStatusContainer = function() {
+       var container = document.createElement('a');
+       container.className = 'geItem geStatus';
+
+       return container;
+};
+
+/**
+ * Creates a new toolbar for the given container.
+ */
+EditorUi.prototype.setStatusText = function(value) {
+       this.statusContainer.innerHTML = value;
+};
+
+/**
+ * Creates a new toolbar for the given container.
+ */
+EditorUi.prototype.createToolbar = function(container) {
+       return new Toolbar(this, container);
+};
+
+/**
+ * Creates a new sidebar for the given container.
+ */
+EditorUi.prototype.createSidebar = function(container) {
+       return new Sidebar(this, container);
+};
+
+/**
+ * Creates and returns a new footer.
+ */
+EditorUi.prototype.createFooter = function() {
+       return this.createDiv('geFooter');
+};
+
+/**
+ * Creates the actual toolbar for the toolbar container.
+ */
+EditorUi.prototype.createDiv = function(classname) {
+       var elt = document.createElement('div');
+       elt.className = classname;
+
+       return elt;
+};
+
+/**
+ * Creates the custom header.
+ */
+EditorUi.prototype.createHeader = function(classname) {
+       var elt = document.createElement(classname);
+       return elt;
+};
+
+/**
+ * Creates the custom header.
+ */
+EditorUi.prototype.createForm = function(classname) {
+       var elt = document.createElement('form');
+       elt.className = classname;
+
+       return elt;
+};
+
+/**
+ * Updates the states of the given undo/redo items.
+ */
+EditorUi.prototype.addSplitHandler = function(elt, horizontal, dx, onChange) {
+       var start = null;
+       var initial = null;
+
+       function getValue() {
+               return parseInt(((horizontal) ? elt.style.left : elt.style.bottom));
+       };
+
+       function moveHandler(evt) {
+               if (start != null) {
+                       var pt = new mxPoint(mxEvent.getClientX(evt), mxEvent.getClientY(evt));
+                       onChange(Math.max(0, initial + ((horizontal) ? (pt.x - start.x) : (start.y -
+                               pt.y)) - dx));
+                       mxEvent.consume(evt);
+               }
+       };
+
+       function dropHandler(evt) {
+               moveHandler(evt);
+               start = null;
+               initial = null;
+       };
+
+       mxEvent.addGestureListeners(elt, function(evt) {
+               start = new mxPoint(mxEvent.getClientX(evt), mxEvent.getClientY(evt));
+               initial = getValue();
+               mxEvent.consume(evt);
+       });
+
+       mxEvent.addListener(document, 'mousemove', moveHandler);
+       mxEvent.addListener(document, 'touchmove', moveHandler);
+       mxEvent.addListener(document, 'mouseup', dropHandler);
+       mxEvent.addListener(document, 'touchend', dropHandler);
+};
+
+/**
+ * Displays a print dialog.
+ */
+EditorUi.prototype.showDialog = function(elt, w, h, modal, closable, onClose) {
+       this.hideDialog();
+       this.dialog = new Dialog(this, elt, w, (mxClient.IS_VML) ? h - 12 : h,
+               modal,
+               closable, onClose);
+};
+
+/**
+ * Displays a print dialog.
+ */
+EditorUi.prototype.hideDialog = function() {
+       if (this.dialog != null) {
+               this.dialog.close();
+               this.dialog = null;
+               this.editor.graph.container.focus();
+       }
+};
+
+/**
+ * Adds the label menu items to the given menu and parent.
+ */
+EditorUi.prototype.saveFile = function(forceDialog) {
+       if (!forceDialog && this.editor.filename != null) {
+               this.save(this.editor.getOrCreateFilename());
+       } else {
+               this.showDialog(new SaveDialog(this).container, 300, 100, true, true);
+       }
+};
+
+/**
+ * Adds the label menu items to the given menu and parent.
+ */
+EditorUi.prototype.publishFile = function(forceDialog) {
+       if (!forceDialog && this.editor.filename != null) {
+               this.publish(this.editor.getOrCreateFilename());
+       } else {
+               //this.showDialog(new SaveDialog(this).container, 300, 100, true, true);
+       }
+};
+
+/**
+ * Executes the given layout.
+ */
+EditorUi.prototype.executeLayout = function(layout, animate, ignoreChildCount) {
+       var graph = this.editor.graph;
+       var cell = graph.getSelectionCell();
+
+       // Allow global overridding of animation
+       animate = this.animate != null ? this.animate : animate;
+
+       graph.getModel().beginUpdate();
+       try {
+               layout.execute(graph.getDefaultParent(), cell);
+       } catch (e) {
+               throw e;
+       } finally {
+               // Animates the changes in the graph model except
+               // for Camino, where animation is too slow
+               if (animate && navigator.userAgent.indexOf('Camino') < 0) {
+                       // New API for animating graph layout results asynchronously
+                       var morph = new mxMorphing(graph);
+                       morph.addListener(mxEvent.DONE, mxUtils.bind(this, function() {
+                               graph.getModel().endUpdate();
+                       }));
+
+                       morph.startAnimation();
+               } else {
+                       graph.getModel().endUpdate();
+               }
+       }
+};
+
+/**
+ * Creates the keyboard event handler for the current graph and history.
+ */
+EditorUi.prototype.createKeyHandler = function(editor) {
+       var graph = this.editor.graph;
+       var keyHandler = new mxKeyHandler(graph);
+
+       // Routes command-key to control-key on Mac
+       keyHandler.isControlDown = function(evt) {
+               return mxEvent.isControlDown(evt) || (mxClient.IS_MAC && evt.metaKey);
+       };
+
+       // Helper function to move cells with the cursor keys
+       function nudge(keyCode) {
+               if (!graph.isSelectionEmpty()) {
+                       var dx = 0;
+                       var dy = 0;
+
+                       if (keyCode == 37) {
+                               dx = -1;
+                       } else if (keyCode == 38) {
+                               dy = -1;
+                       } else if (keyCode == 39) {
+                               dx = 1;
+                       } else if (keyCode == 40) {
+                               dy = 1;
+                       }
+
+                       graph.moveCells(graph.getSelectionCells(), dx, dy);
+                       graph.scrollCellToVisible(graph.getSelectionCell());
+               }
+       };
+
+       // Binds keystrokes to actions
+       var bindAction = mxUtils.bind(this, function(code, control, key, shift) {
+               var action = this.actions.get(key);
+
+               if (action != null) {
+                       var f = function() {
+                               if (action.enabled) {
+                                       action.funct();
+                               }
+                       };
+
+                       if (control) {
+                               if (shift) {
+                                       keyHandler.bindControlShiftKey(code, f);
+                               } else {
+                                       keyHandler.bindControlKey(code, f);
+                               }
+                       } else {
+                               if (shift) {
+                                       keyHandler.bindShiftKey(code, f);
+                               } else {
+                                       keyHandler.bindKey(code, f);
+                               }
+                       }
+               }
+       });
+
+       var ui = this;
+       var keyHandleEscape = keyHandler.escape;
+       keyHandler.escape = function(evt) {
+               ui.hideDialog();
+               keyHandleEscape.apply(this, arguments);
+       };
+
+       // Ignores enter keystroke. Remove this line if you want the
+       // enter keystroke to stop editing.
+       keyHandler.enter = function() {};
+       keyHandler.bindKey(8, function() {
+               graph.foldCells(true);
+       }); // Backspace
+       keyHandler.bindKey(13, function() {
+               graph.foldCells(false);
+       }); // Enter
+       keyHandler.bindKey(33, function() {
+               graph.exitGroup();
+       }); // Page Up
+       keyHandler.bindKey(34, function() {
+               graph.enterGroup();
+       }); // Page Down
+       keyHandler.bindKey(36, function() {
+               graph.home();
+       }); // Home
+       keyHandler.bindKey(35, function() {
+               graph.refresh();
+       }); // End
+       keyHandler.bindKey(37, function() {
+               nudge(37);
+       }); // Left arrow
+       keyHandler.bindKey(38, function() {
+               nudge(38);
+       }); // Up arrow
+       keyHandler.bindKey(39, function() {
+               nudge(39);
+       }); // Right arrow
+       keyHandler.bindKey(40, function() {
+               nudge(40);
+       }); // Down arrow
+       keyHandler.bindKey(113, function() {
+               graph.startEditingAtCell();
+       });
+       bindAction(46, false, 'delete'); // Delete
+       bindAction(82, true, 'tilt'); // Ctrl+R
+       bindAction(83, true, 'save'); // Ctrl+S
+       bindAction(83, true, 'saveAs', true); // Ctrl+Shift+S
+       bindAction(107, false, 'zoomIn'); // Add
+       bindAction(109, false, 'zoomOut'); // Subtract
+       bindAction(65, true, 'selectAll'); // Ctrl+A
+       bindAction(86, true, 'selectVertices', true); // Ctrl+Shift+V
+       bindAction(69, true, 'selectEdges', true); // Ctrl+Shift+E
+       bindAction(69, true, 'export'); // Ctrl+Shift+E
+       bindAction(66, true, 'toBack'); // Ctrl+B
+       bindAction(70, true, 'toFront'); // Ctrl+F
+       bindAction(68, true, 'duplicate'); // Ctrl+D
+       bindAction(90, true, 'undo'); // Ctrl+Z
+       bindAction(89, true, 'redo'); // Ctrl+Y
+       bindAction(88, true, 'cut'); // Ctrl+X
+       bindAction(67, true, 'copy'); // Ctrl+C
+       bindAction(81, true, 'connect'); // Ctrl+Q
+       bindAction(86, true, 'paste'); // Ctrl+V
+       bindAction(71, true, 'group'); // Ctrl+G
+       bindAction(71, true, 'grid', true); // Ctrl+Shift+G
+       bindAction(85, true, 'ungroup'); // Ctrl+U
+       bindAction(112, false, 'about'); // F1
+       bindAction(80, true, 'publish', true); // Ctrl+Shift+P
+
+       return keyHandler;
+};
+
+/**
+ * Giuseppe Careri
+ * Creates a new toolbar for the given container.
+ */
+EditorUi.prototype.createMultiplicities = function(graph, cells, source,
+       target) {
+       for (var i = 0; i < cells.length; i++) {
+               graph.push(new mxMultiplicity(true, cells[i], null, null, source[i][0],
+                       source[i][1], null, mxResources.get(cells[i]) + ' must have ' + source[i][0] + ' outgoing edge.', null));
+               graph.push(new mxMultiplicity(false, cells[i], null, null, target[i][0],
+                       target[i][1], null, mxResources.get(cells[i]) + ' must have ' + target[i][0] + ' incoming edge.', null));
+       };
+};
index 957c3a1..46f34e4 100644 (file)
@@ -1 +1,748 @@
-var _0x151b=["\x63\x61\x6C\x6C","\x73\x65\x74\x43\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65","\x73\x65\x74\x44\x72\x6F\x70\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x50\x61\x6E\x6E\x69\x6E\x67","\x73\x65\x74\x54\x6F\x6F\x6C\x74\x69\x70\x73","\x73\x65\x74\x41\x6C\x6C\x6F\x77\x4C\x6F\x6F\x70\x73","\x73\x65\x74\x4D\x75\x6C\x74\x69\x67\x72\x61\x70\x68","\x61\x6C\x6C\x6F\x77\x41\x75\x74\x6F\x50\x61\x6E\x6E\x69\x6E\x67","\x72\x65\x73\x65\x74\x45\x64\x67\x65\x73\x4F\x6E\x43\x6F\x6E\x6E\x65\x63\x74","\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x43\x68\x69\x6C\x64\x72\x65\x6E","\x74\x61\x72\x67\x65\x74\x43\x6F\x6E\x6E\x65\x63\x74\x49\x6D\x61\x67\x65","\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x48\x61\x6E\x64\x6C\x65\x72","\x73\x65\x74\x41\x6C\x6C\x6F\x77\x44\x61\x6E\x67\x6C\x69\x6E\x67\x45\x64\x67\x65\x73","\x73\x65\x74\x43\x72\x65\x61\x74\x65\x54\x61\x72\x67\x65\x74","\x69\x73\x56\x61\x6C\x69\x64\x53\x6F\x75\x72\x63\x65","\x61\x70\x70\x6C\x79","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x63\x6F\x6E\x6E\x65\x63\x74","\x32","\x61\x6C\x74\x65\x72\x6E\x61\x74\x65\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x76\x65\x72\x74\x69\x63\x61\x6C","\x6C\x6F\x61\x64\x53\x74\x79\x6C\x65\x73\x68\x65\x65\x74","\x67\x65\x74\x52\x75\x62\x62\x65\x72\x62\x61\x6E\x64","\x63\x75\x72\x73\x6F\x72","\x73\x74\x79\x6C\x65","\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x70\x6F\x69\x6E\x74\x65\x72","\x62\x69\x6E\x64","\x61\x64\x64\x4C\x69\x73\x74\x65\x6E\x65\x72","\x70\x61\x6E\x6E\x69\x6E\x67\x48\x61\x6E\x64\x6C\x65\x72","\x64\x65\x66\x61\x75\x6C\x74","\x69\x73\x48\x74\x6D\x6C\x4C\x61\x62\x65\x6C","\x67\x65\x74\x53\x74\x61\x74\x65","\x76\x69\x65\x77","\x67\x65\x74\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65","\x68\x74\x6D\x6C","\x31","\x77\x68\x69\x74\x65\x53\x70\x61\x63\x65","\x77\x72\x61\x70","\x67\x65\x74\x4C\x61\x62\x65\x6C\x56\x61\x6C\x75\x65","\x63\x65\x6C\x6C\x52\x65\x6E\x64\x65\x72\x65\x72","\x68\x74\x6D\x6C\x45\x6E\x74\x69\x74\x69\x65\x73","\x69\x73\x43\x65\x6C\x6C\x4C\x6F\x63\x6B\x65\x64","\x74\x61\x70\x41\x6E\x64\x48\x6F\x6C\x64\x54\x6F\x6C\x65\x72\x61\x6E\x63\x65","\x74\x61\x70\x41\x6E\x64\x48\x6F\x6C\x64","\x61\x63\x74\x69\x76\x65","\x67\x72\x61\x70\x68","\x67\x65\x74\x47\x72\x61\x70\x68\x58","\x67\x65\x74\x47\x72\x61\x70\x68\x59","\x73\x74\x61\x72\x74","\x70\x61\x6E\x6E\x69\x6E\x67\x54\x72\x69\x67\x67\x65\x72","\x63\x65\x6C\x6C","\x69\x73\x43\x65\x6C\x6C\x53\x65\x6C\x65\x63\x74\x65\x64","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x6F\x75\x6E\x74","\x72\x65\x6D\x6F\x76\x65\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x69\x6E\x69\x74\x54\x6F\x75\x63\x68","\x65\x78\x74\x65\x6E\x64","\x6D\x69\x6E\x46\x69\x74\x53\x63\x61\x6C\x65","\x6D\x61\x78\x46\x69\x74\x53\x63\x61\x6C\x65","\x67\x65\x74\x44\x6F\x63\x75\x6D\x65\x6E\x74\x45\x6C\x65\x6D\x65\x6E\x74","\x2F\x64\x65\x66\x61\x75\x6C\x74\x2E\x78\x6D\x6C","\x6C\x6F\x61\x64","\x6F\x77\x6E\x65\x72\x44\x6F\x63\x75\x6D\x65\x6E\x74","\x67\x65\x74\x53\x74\x79\x6C\x65\x73\x68\x65\x65\x74","\x64\x65\x63\x6F\x64\x65","\x66\x6C\x69\x70\x45\x64\x67\x65","\x67\x65\x74\x56\x61\x6C\x75\x65","\x45\x4C\x42\x4F\x57\x5F\x48\x4F\x52\x49\x5A\x4F\x4E\x54\x41\x4C","\x45\x4C\x42\x4F\x57\x5F\x56\x45\x52\x54\x49\x43\x41\x4C","\x73\x65\x74\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65\x73","\x73\x65\x74\x44\x65\x66\x61\x75\x6C\x74\x45\x64\x67\x65","\x69\x73\x45\x64\x67\x65","\x67\x65\x74\x4D\x6F\x64\x65\x6C","\x63\x6C\x6F\x6E\x65\x43\x65\x6C\x6C\x73","\x67\x65\x6F\x6D\x65\x74\x72\x79","\x70\x6F\x69\x6E\x74\x73","\x67\x65\x74\x53\x74\x79\x6C\x65","\x73\x65\x74\x53\x74\x79\x6C\x65","\x63\x72\x65\x61\x74\x65\x45\x64\x67\x65\x53\x74\x61\x74\x65","\x63\x72\x65\x61\x74\x65\x53\x74\x61\x74\x65","\x66\x61\x63\x74\x6F\x72\x79\x4D\x65\x74\x68\x6F\x64","\x69\x73\x43\x65\x6C\x6C\x46\x6F\x6C\x64\x61\x62\x6C\x65","\x66\x6F\x6C\x64\x69\x6E\x67\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x53\x77\x69\x6D\x6C\x61\x6E\x65","\x69\x73\x56\x61\x6C\x69\x64\x52\x6F\x6F\x74","\x63\x72\x65\x61\x74\x65\x47\x72\x6F\x75\x70\x43\x65\x6C\x6C","\x67\x72\x6F\x75\x70","\x67\x65\x74\x54\x6F\x6F\x6C\x74\x69\x70\x46\x6F\x72\x43\x65\x6C\x6C","","\x69\x73\x56\x65\x72\x74\x65\x78","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x5F","\x6E\x6F\x64\x65\x4E\x61\x6D\x65","\x76\x61\x6C\x75\x65","\x67\x65\x74","\x63\x6F\x6E\x76\x65\x72\x74\x56\x61\x6C\x75\x65\x54\x6F\x53\x74\x72\x69\x6E\x67","\x6F\x62\x6A\x65\x63\x74","\x6C\x61\x62\x65\x6C","\x67\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x63\x65\x6C\x6C\x4C\x61\x62\x65\x6C\x43\x68\x61\x6E\x67\x65\x64","\x63\x6C\x6F\x6E\x65\x4E\x6F\x64\x65","\x73\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x73\x65\x74\x4C\x69\x6E\x6B\x46\x6F\x72\x43\x65\x6C\x6C","\x63\x72\x65\x61\x74\x65\x58\x6D\x6C\x44\x6F\x63\x75\x6D\x65\x6E\x74","\x55\x73\x65\x72\x4F\x62\x6A\x65\x63\x74","\x63\x72\x65\x61\x74\x65\x45\x6C\x65\x6D\x65\x6E\x74","\x6C\x65\x6E\x67\x74\x68","\x6C\x69\x6E\x6B","\x72\x65\x6D\x6F\x76\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x73\x65\x74\x56\x61\x6C\x75\x65","\x6D\x6F\x64\x65\x6C","\x67\x65\x74\x4C\x69\x6E\x6B\x46\x6F\x72\x43\x65\x6C\x6C","\x69\x73\x45\x6E\x61\x62\x6C\x65\x64","\x6D\x61\x72\x6B\x65\x72","\x66\x69\x72\x73\x74","\x68\x69\x64\x65\x4D\x65\x6E\x75","\x75\x70\x64\x61\x74\x65\x4D\x6F\x75\x73\x65\x45\x76\x65\x6E\x74","\x67\x72\x61\x70\x68\x58","\x67\x72\x61\x70\x68\x59","\x67\x65\x74\x43\x65\x6C\x6C\x41\x74","\x73\x74\x61\x74\x65","\x73\x68\x61\x70\x65","\x6E\x6F\x64\x65","\x66\x69\x72\x65\x4D\x6F\x75\x73\x65\x45\x76\x65\x6E\x74","\x4D\x4F\x55\x53\x45\x5F\x44\x4F\x57\x4E","\x69\x73\x4D\x65\x6E\x75\x53\x68\x6F\x77\x69\x6E\x67","\x67\x65\x74\x43\x65\x6C\x6C","\x69\x73\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x45\x6D\x70\x74\x79","\x4D\x4F\x55\x53\x45\x5F\x55\x50","\x69\x73\x45\x64\x69\x74\x69\x6E\x67","\x67\x65\x74\x45\x76\x65\x6E\x74","\x67\x65\x74\x43\x6C\x69\x65\x6E\x74\x58","\x67\x65\x74\x43\x6C\x69\x65\x6E\x74\x59","\x70\x6F\x70\x75\x70","\x63\x6F\x6E\x73\x75\x6D\x65","\x4D\x4F\x55\x53\x45\x5F\x4D\x4F\x56\x45","\x69\x73\x43\x6F\x6E\x73\x75\x6D\x65\x64","\x72\x6F\x74\x61\x74\x69\x6F\x6E\x45\x6E\x61\x62\x6C\x65\x64","\x62\x61\x73\x65\x53\x70\x61\x63\x69\x6E\x67\x54\x6F\x70","\x62\x61\x73\x65\x53\x70\x61\x63\x69\x6E\x67\x42\x6F\x74\x74\x6F\x6D","\x48\x41\x4E\x44\x4C\x45\x5F\x53\x49\x5A\x45","\x4C\x41\x42\x45\x4C\x5F\x48\x41\x4E\x44\x4C\x45\x5F\x53\x49\x5A\x45","\x49\x53\x5F\x54\x4F\x55\x43\x48","\x74\x6F\x6C\x65\x72\x61\x6E\x63\x65","\x67\x72\x69\x64\x53\x69\x7A\x65","\x73\x65\x6C\x65\x63\x74\x4F\x6E\x50\x6F\x70\x75\x70","\x75\x73\x65\x4C\x65\x66\x74\x42\x75\x74\x74\x6F\x6E\x46\x6F\x72\x50\x61\x6E\x6E\x69\x6E\x67","\x69\x73\x50\x61\x6E\x6E\x69\x6E\x67\x54\x72\x69\x67\x67\x65\x72","\x69\x67\x6E\x6F\x72\x65\x43\x65\x6C\x6C","\x69\x73\x43\x6F\x6E\x74\x72\x6F\x6C\x44\x6F\x77\x6E","\x69\x73\x53\x68\x69\x66\x74\x44\x6F\x77\x6E","\x75\x73\x65\x50\x6F\x70\x75\x70\x54\x72\x69\x67\x67\x65\x72","\x69\x73\x50\x6F\x70\x75\x70\x54\x72\x69\x67\x67\x65\x72","\x6D\x6F\x75\x73\x65\x44\x6F\x77\x6E","\x64\x65\x6C\x61\x79\x65\x64\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E","\x63\x72\x65\x61\x74\x65\x48\x61\x6E\x64\x6C\x65\x72\x73","\x74\x6F\x6F\x6C\x74\x69\x70\x48\x61\x6E\x64\x6C\x65\x72","\x73\x65\x74\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73\x48\x61\x6E\x64\x6C\x65\x72","\x70\x61\x6E\x6E\x69\x6E\x67\x45\x6E\x61\x62\x6C\x65\x64","\x67\x72\x61\x70\x68\x48\x61\x6E\x64\x6C\x65\x72","\x73\x65\x6C\x65\x63\x74\x43\x65\x6C\x6C\x73","\x73\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x64\x62\x6C\x43\x6C\x69\x63\x6B","\x63\x6F\x6E\x76\x65\x72\x74\x50\x6F\x69\x6E\x74","\x78","\x79","\x2F\x74\x6F\x75\x63\x68\x2D\x68\x61\x6E\x64\x6C\x65\x2E\x70\x6E\x67","\x68\x61\x6E\x64\x6C\x65\x49\x6D\x61\x67\x65","\x73\x69\x7A\x65\x72\x49\x6D\x61\x67\x65","\x73\x72\x63","\x2F\x74\x6F\x75\x63\x68\x2D\x63\x6F\x6E\x6E\x65\x63\x74\x6F\x72\x2E\x70\x6E\x67","\x69\x6E\x69\x74","\x69\x73\x43\x65\x6C\x6C\x43\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65","\x63\x6F\x6E\x6E\x65\x63\x74\x6F\x72\x49\x6D\x67","\x63\x72\x65\x61\x74\x65\x49\x6D\x61\x67\x65","\x77\x69\x64\x74\x68","\x32\x39\x70\x78","\x68\x65\x69\x67\x68\x74","\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x61\x62\x73\x6F\x6C\x75\x74\x65","\x74\x69\x74\x6C\x65","\x72\x65\x64\x69\x72\x65\x63\x74\x4D\x6F\x75\x73\x65\x45\x76\x65\x6E\x74\x73","\x70\x61\x64\x64\x69\x6E\x67","\x32\x70\x78","\x69\x73\x4D\x6F\x75\x73\x65\x44\x6F\x77\x6E","\x61\x64\x64\x47\x65\x73\x74\x75\x72\x65\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x61\x70\x70\x65\x6E\x64\x43\x68\x69\x6C\x64","\x72\x65\x64\x72\x61\x77\x54\x6F\x6F\x6C\x73","\x72\x65\x64\x72\x61\x77","\x73\x69\x6E\x67\x6C\x65\x53\x69\x7A\x65\x72","\x6C\x65\x66\x74","\x6F\x66\x66\x73\x65\x74\x57\x69\x64\x74\x68","\x70\x78","\x74\x6F\x70","\x6F\x66\x66\x73\x65\x74\x48\x65\x69\x67\x68\x74","\x64\x65\x73\x74\x72\x6F\x79","\x72\x65\x6D\x6F\x76\x65\x43\x68\x69\x6C\x64","\x70\x61\x72\x65\x6E\x74\x4E\x6F\x64\x65","\x2F\x63\x6F\x6E\x6E\x65\x63\x74\x6F\x72\x2E\x70\x6E\x67","\x63\x6F\x6E\x6E\x65\x63\x74\x49\x6D\x61\x67\x65","\x49\x53\x5F\x49\x45","\x49\x53\x5F\x53\x56\x47","\x64\x69\x76","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x75\x72\x6C\x28","\x29","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x63\x65\x6E\x74\x65\x72","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x52\x65\x70\x65\x61\x74","\x6E\x6F\x2D\x72\x65\x70\x65\x61\x74","\x64\x69\x73\x70\x6C\x61\x79","\x49\x53\x5F\x51\x55\x49\x52\x4B\x53","\x69\x6E\x6C\x69\x6E\x65","\x69\x6E\x6C\x69\x6E\x65\x2D\x62\x6C\x6F\x63\x6B","\x6D\x6F\x75\x73\x65\x64\x6F\x77\x6E"];Graph=function(_0xebe9x1,_0xebe9x2,_0xebe9x3,_0xebe9x4){mxGraph[_0x151b[0]](this,_0xebe9x1,_0xebe9x2,_0xebe9x3,_0xebe9x4);this[_0x151b[1]](true);this[_0x151b[2]](false);this[_0x151b[3]](true);this[_0x151b[4]](!mxClient.IS_TOUCH);this[_0x151b[5]](false);this[_0x151b[6]](false);this[_0x151b[7]]=true;this[_0x151b[8]]=false;this[_0x151b[9]]=false;this[_0x151b[11]][_0x151b[10]]=true;this[_0x151b[12]](false);this[_0x151b[11]][_0x151b[13]](false);this[_0x151b[11]][_0x151b[14]]=function(){return mxConnectionHandler[_0x151b[16]][_0x151b[14]][_0x151b[15]](this,arguments)&&urlParams[_0x151b[17]]!=_0x151b[18]};this[_0x151b[19]]=_0x151b[20];if(_0xebe9x4==null){this[_0x151b[21]]()};var _0xebe9x5= new mxRubberband(this);this[_0x151b[22]]=function(){return _0xebe9x5};this[_0x151b[29]][_0x151b[28]](mxEvent.PAN_START,mxUtils[_0x151b[27]](this,function(){this[_0x151b[25]][_0x151b[24]][_0x151b[23]]=_0x151b[26]}));this[_0x151b[29]][_0x151b[28]](mxEvent.PAN_END,mxUtils[_0x151b[27]](this,function(){this[_0x151b[25]][_0x151b[24]][_0x151b[23]]=_0x151b[30]}));this[_0x151b[31]]=function(_0xebe9x6){var _0xebe9x7=this[_0x151b[33]][_0x151b[32]](_0xebe9x6);var _0xebe9x8=(_0xebe9x7!=null)?_0xebe9x7[_0x151b[24]]:this[_0x151b[34]](_0xebe9x6);return _0xebe9x8[_0x151b[35]]==_0x151b[36]||_0xebe9x8[_0x151b[37]]==_0x151b[38]};this[_0x151b[40]][_0x151b[39]]=function(_0xebe9x7){var _0xebe9x9=mxCellRenderer[_0x151b[16]][_0x151b[39]][_0x151b[15]](this,arguments);if(_0xebe9x7[_0x151b[24]][_0x151b[37]]==_0x151b[38]&&_0xebe9x7[_0x151b[24]][_0x151b[35]]!=1){_0xebe9x9=mxUtils[_0x151b[41]](_0xebe9x9,false)};return _0xebe9x9};this[_0x151b[42]]=function(_0xebe9x6){return false};this[_0x151b[11]][_0x151b[43]]=16;var _0xebe9xa=this[_0x151b[11]][_0x151b[44]];this[_0x151b[11]][_0x151b[44]]=function(_0xebe9xb,_0xebe9x7){if(_0xebe9x7==null){if(!this[_0x151b[46]][_0x151b[29]][_0x151b[45]]){_0xebe9x5[_0x151b[49]](_0xebe9xb[_0x151b[47]](),_0xebe9xb[_0x151b[48]]());this[_0x151b[46]][_0x151b[29]][_0x151b[50]]=false}}else {if(tapAndHoldStartsConnection){_0xebe9xa[_0x151b[15]](this,arguments)}else {if(this[_0x151b[46]][_0x151b[52]](_0xebe9x7[_0x151b[51]])&&this[_0x151b[46]][_0x151b[53]]()>1){this[_0x151b[46]][_0x151b[54]](_0xebe9x7[_0x151b[51]])}}}};if(touchStyle){this[_0x151b[55]]()}};mxUtils[_0x151b[56]](Graph,mxGraph);Graph[_0x151b[16]][_0x151b[57]]=null;Graph[_0x151b[16]][_0x151b[58]]=null;Graph[_0x151b[16]][_0x151b[21]]=function(){var _0xebe9xc=mxUtils[_0x151b[61]](STYLE_PATH+_0x151b[60])[_0x151b[59]]();var _0xebe9xd= new mxCodec(_0xebe9xc[_0x151b[62]]);_0xebe9xd[_0x151b[64]](_0xebe9xc,this[_0x151b[63]]())};Graph[_0x151b[16]][_0x151b[65]]=function(_0xebe9xe){if(_0xebe9xe!=null){var _0xebe9x7=this[_0x151b[33]][_0x151b[32]](_0xebe9xe);var _0xebe9x8=(_0xebe9x7!=null)?_0xebe9x7[_0x151b[24]]:this[_0x151b[34]](_0xebe9xe);if(_0xebe9x8!=null){var _0xebe9xf=mxUtils[_0x151b[66]](_0xebe9x8,mxConstants.STYLE_ELBOW,mxConstants.ELBOW_HORIZONTAL);var _0xebe9x10=(_0xebe9xf==mxConstants[_0x151b[67]])?mxConstants[_0x151b[68]]:mxConstants[_0x151b[67]];this[_0x151b[69]](mxConstants.STYLE_ELBOW,_0xebe9x10,[_0xebe9xe])}}};Graph[_0x151b[16]][_0x151b[70]]=function(_0xebe9x6){if(_0xebe9x6!=null&&this[_0x151b[72]]()[_0x151b[71]](_0xebe9x6)){var _0xebe9x11=this[_0x151b[72]]()[_0x151b[73]]([_0xebe9x6])[0];if(_0xebe9x11[_0x151b[74]]!=null){_0xebe9x11[_0x151b[74]][_0x151b[75]]=null};var _0xebe9x8=_0xebe9x11[_0x151b[76]]();_0xebe9x8=mxUtils[_0x151b[77]](_0xebe9x8,mxConstants.STYLE_ENTRY_X,null);_0xebe9x8=mxUtils[_0x151b[77]](_0xebe9x8,mxConstants.STYLE_ENTRY_Y,null);_0xebe9x8=mxUtils[_0x151b[77]](_0xebe9x8,mxConstants.STYLE_EXIT_X,null);_0xebe9x8=mxUtils[_0x151b[77]](_0xebe9x8,mxConstants.STYLE_EXIT_Y,null);_0xebe9x11[_0x151b[77]](_0xebe9x8);this[_0x151b[11]][_0x151b[78]]=function(_0xebe9xb){return this[_0x151b[46]][_0x151b[33]][_0x151b[79]](_0xebe9x11)};this[_0x151b[11]][_0x151b[80]]=function(){return this[_0x151b[46]][_0x151b[73]]([_0xebe9x11])[0]}}};Graph[_0x151b[16]][_0x151b[81]]=function(_0xebe9x6){return this[_0x151b[82]]&&this[_0x151b[83]](_0xebe9x6)};Graph[_0x151b[16]][_0x151b[84]]=function(_0xebe9x6){return this[_0x151b[83]](_0xebe9x6)};Graph[_0x151b[16]][_0x151b[85]]=function(){var _0xebe9x12=mxGraph[_0x151b[16]][_0x151b[85]][_0x151b[15]](this,arguments);_0xebe9x12[_0x151b[77]](_0x151b[86]);return _0xebe9x12};Graph[_0x151b[16]][_0x151b[87]]=function(_0xebe9x6){var _0xebe9x13=_0x151b[88];if(this[_0x151b[72]]()[_0x151b[89]](_0xebe9x6)){_0xebe9x13+=mxResources[_0x151b[93]](_0x151b[90]+_0xebe9x6[_0x151b[92]][_0x151b[91]])}else {if(this[_0x151b[72]]()[_0x151b[71]](_0xebe9x6)){_0xebe9x13=mxGraph[_0x151b[16]][_0x151b[87]][_0x151b[15]](this,arguments)}};return _0xebe9x13};Graph[_0x151b[16]][_0x151b[94]]=function(_0xebe9x6){if(_0xebe9x6[_0x151b[92]]!=null&& typeof (_0xebe9x6[_0x151b[92]])==_0x151b[95]){return _0xebe9x6[_0x151b[92]][_0x151b[97]](_0x151b[96])};return mxGraph[_0x151b[16]][_0x151b[94]][_0x151b[15]](this,arguments)};Graph[_0x151b[16]][_0x151b[98]]=function(_0xebe9x6,_0xebe9x10,_0xebe9x14){if(_0xebe9x6[_0x151b[92]]!=null&& typeof (_0xebe9x6[_0x151b[92]])==_0x151b[95]){var _0xebe9x15=_0xebe9x6[_0x151b[92]][_0x151b[99]](true);_0xebe9x15[_0x151b[100]](_0x151b[96],_0xebe9x10);_0xebe9x10=_0xebe9x15};mxGraph[_0x151b[16]][_0x151b[98]][_0x151b[15]](this,arguments)};Graph[_0x151b[16]][_0x151b[101]]=function(_0xebe9x6,_0xebe9x16){var _0xebe9x10=null;if(_0xebe9x6[_0x151b[92]]!=null&& typeof (_0xebe9x6[_0x151b[92]])==_0x151b[95]){_0xebe9x10=_0xebe9x6[_0x151b[92]][_0x151b[99]](true)}else {var _0xebe9x17=mxUtils[_0x151b[102]]();_0xebe9x10=_0xebe9x17[_0x151b[104]](_0x151b[103]);_0xebe9x10[_0x151b[100]](_0x151b[96],_0xebe9x6[_0x151b[92]])};if(_0xebe9x16!=null&&_0xebe9x16[_0x151b[105]]>0){_0xebe9x10[_0x151b[100]](_0x151b[106],_0xebe9x16)}else {_0xebe9x10[_0x151b[107]](_0x151b[106])};this[_0x151b[109]][_0x151b[108]](_0xebe9x6,_0xebe9x10)};Graph[_0x151b[16]][_0x151b[110]]=function(_0xebe9x6){if(_0xebe9x6[_0x151b[92]]!=null&& typeof (_0xebe9x6[_0x151b[92]])==_0x151b[95]){return _0xebe9x6[_0x151b[92]][_0x151b[97]](_0x151b[106])};return null};Graph[_0x151b[16]][_0x151b[55]]=function(){this[_0x151b[11]][_0x151b[112]][_0x151b[111]]=function(){return this[_0x151b[46]][_0x151b[11]][_0x151b[113]]!=null};this[_0x151b[28]](mxEvent.START_EDITING,function(_0xebe9x18,_0xebe9x19){this[_0x151b[29]][_0x151b[114]]()});var _0xebe9x1a=false;var _0xebe9x1b=null;this[_0x151b[115]]=function(_0xebe9xb){mxGraph[_0x151b[16]][_0x151b[115]][_0x151b[15]](this,arguments);if(_0xebe9xb[_0x151b[32]]()==null){var _0xebe9x6=this[_0x151b[118]](_0xebe9xb[_0x151b[116]],_0xebe9xb[_0x151b[117]]);if(this[_0x151b[72]]()[_0x151b[71]](_0xebe9x6)){_0xebe9xb[_0x151b[119]]=this[_0x151b[33]][_0x151b[32]](_0xebe9x6);if(_0xebe9xb[_0x151b[119]]!=null&&_0xebe9xb[_0x151b[119]][_0x151b[120]]!=null){this[_0x151b[25]][_0x151b[24]][_0x151b[23]]=_0xebe9xb[_0x151b[119]][_0x151b[120]][_0x151b[121]][_0x151b[24]][_0x151b[23]]}}};if(_0xebe9xb[_0x151b[32]]()==null){this[_0x151b[25]][_0x151b[24]][_0x151b[23]]=_0x151b[30]}};this[_0x151b[122]]=function(_0xebe9x1c,_0xebe9xb,_0xebe9x18){if(_0xebe9x1c==mxEvent[_0x151b[123]]){if(!this[_0x151b[29]][_0x151b[124]]()){_0xebe9x1b=_0xebe9xb[_0x151b[125]]();_0xebe9x1a=(_0xebe9x1b!=null)?this[_0x151b[52]](_0xebe9x1b):this[_0x151b[126]]()}else {_0xebe9x1a=false;_0xebe9x1b=null}}else {if(_0xebe9x1c==mxEvent[_0x151b[127]]){if(_0xebe9x1a&&!this[_0x151b[128]]()){if(!this[_0x151b[29]][_0x151b[124]]()){var _0xebe9x1d=mxEvent[_0x151b[130]](_0xebe9xb[_0x151b[129]]());var _0xebe9x1e=mxEvent[_0x151b[131]](_0xebe9xb[_0x151b[129]]());this[_0x151b[29]][_0x151b[132]](_0xebe9x1d+16,_0xebe9x1e,_0xebe9x1b,_0xebe9xb[_0x151b[129]]())};_0xebe9x1a=false;_0xebe9x1b=null;_0xebe9xb[_0x151b[133]]();return};_0xebe9x1a=false;_0xebe9x1b=null}};mxGraph[_0x151b[16]][_0x151b[122]][_0x151b[15]](this,arguments);if(_0xebe9x1c==mxEvent[_0x151b[134]]&&_0xebe9xb[_0x151b[135]]()){_0xebe9x1a=false;_0xebe9x1b=null}}};(function(){mxVertexHandler[_0x151b[16]][_0x151b[136]]=true;mxText[_0x151b[16]][_0x151b[137]]=5;mxText[_0x151b[16]][_0x151b[138]]=1;if(touchStyle){mxConstants[_0x151b[139]]=16;mxConstants[_0x151b[140]]=7;if(mxClient[_0x151b[141]]){mxVertexHandler[_0x151b[16]][_0x151b[142]]=4;mxEdgeHandler[_0x151b[16]][_0x151b[142]]=6;Graph[_0x151b[16]][_0x151b[142]]=14;Graph[_0x151b[16]][_0x151b[143]]=20;mxPanningHandler[_0x151b[16]][_0x151b[144]]=false;mxPanningHandler[_0x151b[16]][_0x151b[145]]=true;mxPanningHandler[_0x151b[16]][_0x151b[146]]=function(_0xebe9xb){var _0xebe9x19=_0xebe9xb[_0x151b[129]]();return (this[_0x151b[145]]&&(this[_0x151b[147]]||_0xebe9xb[_0x151b[32]]()==null))||(mxEvent[_0x151b[148]](_0xebe9x19)&&mxEvent[_0x151b[149]](_0xebe9x19))||(this[_0x151b[150]]&&mxEvent[_0x151b[151]](_0xebe9x19))}};var _0xebe9x1f=mxGraphHandler[_0x151b[16]][_0x151b[152]];mxGraphHandler[_0x151b[16]][_0x151b[152]]=function(_0xebe9x18,_0xebe9xb){_0xebe9x1f[_0x151b[15]](this,arguments);if(this[_0x151b[46]][_0x151b[52]](_0xebe9xb[_0x151b[125]]())&&this[_0x151b[46]][_0x151b[53]]()>1){this[_0x151b[153]]=false}};Graph[_0x151b[16]][_0x151b[154]]=function(_0xebe9x1){this[_0x151b[155]]= new mxTooltipHandler(this);this[_0x151b[155]][_0x151b[156]](false);this[_0x151b[157]]= new mxSelectionCellsHandler(this);this[_0x151b[29]]= new mxPanningHandler(this);this[_0x151b[29]][_0x151b[158]]=false;this[_0x151b[11]]= new mxConnectionHandler(this);this[_0x151b[11]][_0x151b[156]](false);this[_0x151b[159]]= new mxGraphHandler(this)};mxConnectionHandler[_0x151b[16]][_0x151b[160]]=function(_0xebe9xe,_0xebe9x20){if(touchStyle&&_0xebe9x20!=null){this[_0x151b[46]][_0x151b[161]](_0xebe9x20)}else {this[_0x151b[46]][_0x151b[161]](_0xebe9xe)}};var _0xebe9x21=mxGraph[_0x151b[16]][_0x151b[162]];Graph[_0x151b[16]][_0x151b[162]]=function(_0xebe9x19,_0xebe9x6){if(_0xebe9x6==null){var _0xebe9x22=mxUtils[_0x151b[163]](this[_0x151b[25]],mxEvent[_0x151b[130]](_0xebe9x19),mxEvent[_0x151b[131]](_0xebe9x19));_0xebe9x6=this[_0x151b[118]](_0xebe9x22[_0x151b[164]],_0xebe9x22[_0x151b[165]])};_0xebe9x21[_0x151b[0]](this,_0xebe9x19,_0xebe9x6)};var _0xebe9x23= new mxImage(IMAGE_PATH+_0x151b[166],16,16);mxVertexHandler[_0x151b[16]][_0x151b[167]]=_0xebe9x23;mxEdgeHandler[_0x151b[16]][_0x151b[167]]=_0xebe9x23;mxOutline[_0x151b[16]][_0x151b[168]]=_0xebe9x23; new Image()[_0x151b[169]]=_0xebe9x23[_0x151b[169]];var _0xebe9x24=IMAGE_PATH+_0x151b[170];var _0xebe9x25=mxVertexHandler[_0x151b[16]][_0x151b[171]];mxVertexHandler[_0x151b[16]][_0x151b[171]]=function(){_0xebe9x25[_0x151b[15]](this,arguments);if(showConnectorImg&&this[_0x151b[46]][_0x151b[11]][_0x151b[111]]()&&this[_0x151b[46]][_0x151b[172]](this[_0x151b[119]][_0x151b[51]])&&!this[_0x151b[46]][_0x151b[84]](this[_0x151b[119]][_0x151b[51]])&&this[_0x151b[46]][_0x151b[53]]()==1){this[_0x151b[173]]=mxUtils[_0x151b[174]](_0xebe9x24);this[_0x151b[173]][_0x151b[24]][_0x151b[23]]=_0x151b[26];this[_0x151b[173]][_0x151b[24]][_0x151b[175]]=_0x151b[176];this[_0x151b[173]][_0x151b[24]][_0x151b[177]]=_0x151b[176];this[_0x151b[173]][_0x151b[24]][_0x151b[178]]=_0x151b[179];if(!mxClient[_0x151b[141]]){this[_0x151b[173]][_0x151b[100]](_0x151b[180],mxResources[_0x151b[93]](_0x151b[17]));mxEvent[_0x151b[181]](this[_0x151b[173]],this[_0x151b[46]],this[_0x151b[119]])};this[_0x151b[173]][_0x151b[24]][_0x151b[182]]=_0x151b[183];mxEvent[_0x151b[185]](this[_0x151b[173]],mxUtils[_0x151b[27]](this,function(_0xebe9x19){this[_0x151b[46]][_0x151b[29]][_0x151b[114]]();var _0xebe9x22=mxUtils[_0x151b[163]](this[_0x151b[46]][_0x151b[25]],mxEvent[_0x151b[130]](_0xebe9x19),mxEvent[_0x151b[131]](_0xebe9x19));this[_0x151b[46]][_0x151b[11]][_0x151b[49]](this[_0x151b[119]],_0xebe9x22[_0x151b[164]],_0xebe9x22[_0x151b[165]]);this[_0x151b[46]][_0x151b[184]]=true;mxEvent[_0x151b[133]](_0xebe9x19)}));this[_0x151b[46]][_0x151b[25]][_0x151b[186]](this[_0x151b[173]])};this[_0x151b[187]]()};var _0xebe9x26=mxVertexHandler[_0x151b[16]][_0x151b[188]];mxVertexHandler[_0x151b[16]][_0x151b[188]]=function(){_0xebe9x26[_0x151b[15]](this);this[_0x151b[187]]()};mxVertexHandler[_0x151b[16]][_0x151b[187]]=function(){if(this[_0x151b[119]]!=null&&this[_0x151b[173]]!=null){if(mxVertexHandler[_0x151b[16]][_0x151b[189]]){this[_0x151b[173]][_0x151b[24]][_0x151b[190]]=(this[_0x151b[119]][_0x151b[164]]+this[_0x151b[119]][_0x151b[175]]-this[_0x151b[173]][_0x151b[191]]/2)+_0x151b[192];this[_0x151b[173]][_0x151b[24]][_0x151b[193]]=(this[_0x151b[119]][_0x151b[165]]-this[_0x151b[173]][_0x151b[194]]/2)+_0x151b[192]}else {this[_0x151b[173]][_0x151b[24]][_0x151b[190]]=(this[_0x151b[119]][_0x151b[164]]+this[_0x151b[119]][_0x151b[175]]+mxConstants[_0x151b[139]]/2+4)+_0x151b[192];this[_0x151b[173]][_0x151b[24]][_0x151b[193]]=(this[_0x151b[119]][_0x151b[165]]+(this[_0x151b[119]][_0x151b[177]]-this[_0x151b[173]][_0x151b[194]])/2)+_0x151b[192]}}};var _0xebe9x27=mxVertexHandler[_0x151b[16]][_0x151b[195]];mxVertexHandler[_0x151b[16]][_0x151b[195]]=function(_0xebe9x18,_0xebe9xb){_0xebe9x27[_0x151b[15]](this,arguments);if(this[_0x151b[173]]!=null){this[_0x151b[173]][_0x151b[197]][_0x151b[196]](this[_0x151b[173]]);this[_0x151b[173]]=null}}; new Image()[_0x151b[169]]=_0xebe9x24}else {var _0xebe9x28= new mxImage(IMAGE_PATH+_0x151b[198],15,15);mxConnectionHandler[_0x151b[16]][_0x151b[199]]=_0xebe9x28; new Image()[_0x151b[169]]=_0xebe9x28[_0x151b[169]];if(urlParams[_0x151b[17]]==_0x151b[18]){var _0xebe9x28= new mxImage(IMAGE_PATH+_0x151b[198],15,15);var _0xebe9x25=mxVertexHandler[_0x151b[16]][_0x151b[171]];mxVertexHandler[_0x151b[16]][_0x151b[171]]=function(){_0xebe9x25[_0x151b[15]](this,arguments);if(showConnectorImg&&this[_0x151b[46]][_0x151b[11]][_0x151b[111]]()&&this[_0x151b[46]][_0x151b[172]](this[_0x151b[119]][_0x151b[51]])&&!this[_0x151b[46]][_0x151b[84]](this[_0x151b[119]][_0x151b[51]])&&this[_0x151b[46]][_0x151b[53]]()==1){if(mxClient[_0x151b[200]]&&!mxClient[_0x151b[201]]){this[_0x151b[173]]=document[_0x151b[104]](_0x151b[202]);this[_0x151b[173]][_0x151b[24]][_0x151b[203]]=_0x151b[204]+_0xebe9x28[_0x151b[169]]+_0x151b[205];this[_0x151b[173]][_0x151b[24]][_0x151b[206]]=_0x151b[207];this[_0x151b[173]][_0x151b[24]][_0x151b[208]]=_0x151b[209];this[_0x151b[173]][_0x151b[24]][_0x151b[175]]=(_0xebe9x28[_0x151b[175]]+4)+_0x151b[192];this[_0x151b[173]][_0x151b[24]][_0x151b[177]]=(_0xebe9x28[_0x151b[177]]+4)+_0x151b[192];this[_0x151b[173]][_0x151b[24]][_0x151b[210]]=(mxClient[_0x151b[211]])?_0x151b[212]:_0x151b[213]}else {this[_0x151b[173]]=mxUtils[_0x151b[174]](_0xebe9x28[_0x151b[169]]);this[_0x151b[173]][_0x151b[24]][_0x151b[175]]=_0xebe9x28[_0x151b[175]]+_0x151b[192];this[_0x151b[173]][_0x151b[24]][_0x151b[177]]=_0xebe9x28[_0x151b[177]]+_0x151b[192]};this[_0x151b[173]][_0x151b[24]][_0x151b[23]]=_0x151b[26];this[_0x151b[173]][_0x151b[24]][_0x151b[178]]=_0x151b[179];this[_0x151b[173]][_0x151b[100]](_0x151b[180],mxResources[_0x151b[93]](_0x151b[17]));mxEvent[_0x151b[181]](this[_0x151b[173]],this[_0x151b[46]],this[_0x151b[119]]);this[_0x151b[173]][_0x151b[24]][_0x151b[182]]=_0x151b[183];mxEvent[_0x151b[28]](this[_0x151b[173]],_0x151b[214],mxUtils[_0x151b[27]](this,function(_0xebe9x19){this[_0x151b[46]][_0x151b[29]][_0x151b[114]]();var _0xebe9x22=mxUtils[_0x151b[163]](this[_0x151b[46]][_0x151b[25]],mxEvent[_0x151b[130]](_0xebe9x19),mxEvent[_0x151b[131]](_0xebe9x19));this[_0x151b[46]][_0x151b[11]][_0x151b[49]](this[_0x151b[119]],_0xebe9x22[_0x151b[164]],_0xebe9x22[_0x151b[165]]);this[_0x151b[46]][_0x151b[184]]=true;mxEvent[_0x151b[133]](_0xebe9x19)}));this[_0x151b[46]][_0x151b[25]][_0x151b[186]](this[_0x151b[173]])};this[_0x151b[187]]()};var _0xebe9x26=mxVertexHandler[_0x151b[16]][_0x151b[188]];mxVertexHandler[_0x151b[16]][_0x151b[188]]=function(){_0xebe9x26[_0x151b[15]](this);this[_0x151b[187]]()};mxVertexHandler[_0x151b[16]][_0x151b[187]]=function(){if(this[_0x151b[119]]!=null&&this[_0x151b[173]]!=null){if(mxVertexHandler[_0x151b[16]][_0x151b[189]]){this[_0x151b[173]][_0x151b[24]][_0x151b[190]]=(this[_0x151b[119]][_0x151b[164]]+this[_0x151b[119]][_0x151b[175]]-this[_0x151b[173]][_0x151b[191]]/2)+_0x151b[192];this[_0x151b[173]][_0x151b[24]][_0x151b[193]]=(this[_0x151b[119]][_0x151b[165]]-this[_0x151b[173]][_0x151b[194]]/2)+_0x151b[192]}else {this[_0x151b[173]][_0x151b[24]][_0x151b[190]]=(this[_0x151b[119]][_0x151b[164]]+this[_0x151b[119]][_0x151b[175]]+mxConstants[_0x151b[139]]/2+2)+_0x151b[192];this[_0x151b[173]][_0x151b[24]][_0x151b[193]]=(this[_0x151b[119]][_0x151b[165]]+(this[_0x151b[119]][_0x151b[177]]-this[_0x151b[173]][_0x151b[194]])/2)+_0x151b[192]}}};var _0xebe9x27=mxVertexHandler[_0x151b[16]][_0x151b[195]];mxVertexHandler[_0x151b[16]][_0x151b[195]]=function(_0xebe9x18,_0xebe9xb){_0xebe9x27[_0x151b[15]](this,arguments);if(this[_0x151b[173]]!=null){this[_0x151b[173]][_0x151b[197]][_0x151b[196]](this[_0x151b[173]]);this[_0x151b[173]]=null}}}}})()
\ No newline at end of file
+/**
+ * $Id: Graph.js,v 1.14 2013-02-16 10:19:54 gaudenz Exp $
+ * Copyright (c) 2006-2012, JGraph Ltd
+ */
+/**
+ * Constructs a new graph instance. Note that the constructor does not take a
+ * container because the graph instance is needed for creating the UI, which
+ * in turn will create the container for the graph. Hence, the container is
+ * assigned later in EditorUi.
+ */
+Graph = function(container, model, renderHint, stylesheet)
+{
+       mxGraph.call(this, container, model, renderHint, stylesheet);
+       
+       this.setConnectable(true);
+       this.setDropEnabled(false);
+       this.setPanning(true);
+       this.setTooltips(!mxClient.IS_TOUCH);
+       this.setAllowLoops(false);
+       this.setMultigraph(false);
+       this.allowAutoPanning = true;
+       this.resetEdgesOnConnect = false;
+       this.constrainChildren = false;
+       
+       // Centers the port icon on the target port
+    this.connectionHandler.targetConnectImage = true;
+
+    // Does not allow dangling edges
+    this.setAllowDanglingEdges(false);
+
+       // Enables cloning of connection sources
+       this.connectionHandler.setCreateTarget(false);
+       
+       // Disables built-in connection starts
+       this.connectionHandler.isValidSource = function()
+       {
+               return mxConnectionHandler.prototype.isValidSource.apply(this, arguments) && urlParams['connect'] != '2';
+       };
+
+       // Sets the style to be used when an elbow edge is double clicked
+       this.alternateEdgeStyle = 'vertical';
+
+       if (stylesheet == null)
+       {
+               this.loadStylesheet();
+       }
+       
+       // Creates rubberband selection
+    var rubberband = new mxRubberband(this);
+    
+    this.getRubberband = function()
+    {
+       return rubberband;
+    };
+    
+    // Shows hand cursor while panning
+       this.panningHandler.addListener(mxEvent.PAN_START, mxUtils.bind(this, function()
+       {
+               this.container.style.cursor = 'pointer';
+       }));
+                       
+       this.panningHandler.addListener(mxEvent.PAN_END, mxUtils.bind(this, function()
+       {
+               this.container.style.cursor = 'default';
+       }));
+
+    // Adds support for HTML labels via style. Note: Currently, only the Java
+    // backend supports HTML labels but CSS support is limited to the following:
+    // http://docs.oracle.com/javase/6/docs/api/index.html?javax/swing/text/html/CSS.html
+       this.isHtmlLabel = function(cell)
+       {
+               var state = this.view.getState(cell);
+               var style = (state != null) ? state.style : this.getCellStyle(cell);
+               
+               return style['html'] == '1' || style['whiteSpace'] == 'wrap';
+       };
+       
+       // HTML entities are displayed as plain text in wrapped plain text labels
+       this.cellRenderer.getLabelValue = function(state)
+       {
+               var result = mxCellRenderer.prototype.getLabelValue.apply(this, arguments);
+               
+               if (state.style['whiteSpace'] == 'wrap' && state.style['html'] != 1)
+               {
+                       result = mxUtils.htmlEntities(result, false);
+               }
+               
+               return result;
+       };
+       
+       // Unlocks all cells
+       this.isCellLocked = function(cell)
+       {
+               return false;
+       };
+
+       // Tap and hold brings up context menu.
+       // Tolerance slightly below graph tolerance is better.
+       this.connectionHandler.tapAndHoldTolerance = 16;
+       
+       //  Tap and hold on background starts rubberband on cell starts connecting
+       var connectionHandlerTapAndHold = this.connectionHandler.tapAndHold;
+       this.connectionHandler.tapAndHold = function(me, state)
+       {
+               if (state == null)
+               {
+                       if (!this.graph.panningHandler.active)
+                       {
+                               rubberband.start(me.getGraphX(), me.getGraphY());
+                               this.graph.panningHandler.panningTrigger = false;
+                       }
+               }
+               else if (tapAndHoldStartsConnection)
+               {
+                       connectionHandlerTapAndHold.apply(this, arguments);     
+               }
+               else if (this.graph.isCellSelected(state.cell) && this.graph.getSelectionCount() > 1)
+               {
+                       this.graph.removeSelectionCell(state.cell);
+               }
+       };
+
+       if (touchStyle)
+       {
+               this.initTouch();
+       }
+};
+
+// Graph inherits from mxGraph
+mxUtils.extend(Graph, mxGraph);
+
+/**
+ * Allows to all values in fit.
+ */
+Graph.prototype.minFitScale = null;
+
+/**
+ * Allows to all values in fit.
+ */
+Graph.prototype.maxFitScale = null;
+
+/**
+ * Loads the stylesheet for this graph.
+ */
+Graph.prototype.loadStylesheet = function()
+{
+    var node = mxUtils.load(STYLE_PATH + '/default.xml').getDocumentElement();
+       var dec = new mxCodec(node.ownerDocument);
+       dec.decode(node, this.getStylesheet());
+};
+
+/**
+ * Inverts the elbow edge style without removing existing styles.
+ */
+Graph.prototype.flipEdge = function(edge)
+{
+       if (edge != null)
+       {
+               var state = this.view.getState(edge);
+               var style = (state != null) ? state.style : this.getCellStyle(edge);
+               
+               if (style != null)
+               {
+                       var elbow = mxUtils.getValue(style, mxConstants.STYLE_ELBOW,
+                               mxConstants.ELBOW_HORIZONTAL);
+                       var value = (elbow == mxConstants.ELBOW_HORIZONTAL) ?
+                               mxConstants.ELBOW_VERTICAL : mxConstants.ELBOW_HORIZONTAL;
+                       this.setCellStyles(mxConstants.STYLE_ELBOW, value, [edge]);
+               }
+       }
+};
+
+/**
+ * Sets the default edge for future connections.
+ */
+Graph.prototype.setDefaultEdge = function(cell)
+{
+       if (cell != null && this.getModel().isEdge(cell))
+       {
+               // Take a snapshot of the cell at the moment of calling
+               var proto = this.getModel().cloneCells([cell])[0];
+               
+               // Delete existing points
+               if (proto.geometry != null)
+               {
+                       proto.geometry.points = null;
+               }
+               
+               // Delete entry-/exitXY styles
+               var style = proto.getStyle();
+               style = mxUtils.setStyle(style, mxConstants.STYLE_ENTRY_X, null);
+               style = mxUtils.setStyle(style, mxConstants.STYLE_ENTRY_Y, null);
+               style = mxUtils.setStyle(style, mxConstants.STYLE_EXIT_X, null);
+               style = mxUtils.setStyle(style, mxConstants.STYLE_EXIT_Y, null);
+               proto.setStyle(style);
+               
+               // Uses edge template for connect preview
+               this.connectionHandler.createEdgeState = function(me)
+               {
+               return this.graph.view.createState(proto);
+           };
+
+           // Creates new connections from edge template
+           this.connectionHandler.factoryMethod = function()
+           {
+               return this.graph.cloneCells([proto])[0];
+           };
+       }
+};
+
+/**
+ * Disables folding for non-swimlanes.
+ */
+Graph.prototype.isCellFoldable = function(cell)
+{
+       return this.foldingEnabled && this.isSwimlane(cell);
+};
+
+/**
+ * Disables drill-down for non-swimlanes.
+ */
+Graph.prototype.isValidRoot = function(cell)
+{
+       return this.isSwimlane(cell);
+};
+
+/**
+ * Overrides createGroupCell to set the group style for new groups to 'group'.
+ */
+Graph.prototype.createGroupCell = function()
+{
+       var group = mxGraph.prototype.createGroupCell.apply(this, arguments);
+       group.setStyle('group');
+       
+       return group;
+};
+
+/**
+ * Giuseppe Careri
+ * Overrides tooltips to show position and size
+ */
+Graph.prototype.getTooltipForCell = function(cell)
+{
+       var tip = '';
+       
+       if (this.getModel().isVertex(cell))
+       {
+               // var geo = this.getCellGeometry(cell);
+               
+               // var f2 = function(x)
+               // {
+               //      return Math.round(parseFloat(x) * 100) / 100;
+               // };
+               
+               // if (geo != null)
+               // {
+               //      if (tip == null)
+               //      {
+               //              tip = '';
+               //      }
+               //      else if (tip.length > 0)
+               //      {
+               //              tip += '\n';
+               //      }
+                       
+               //      tip += 'X: ' + f2(geo.x) + '\nY: ' + f2(geo.y) + '\nW: ' + f2(geo.width) + '\nH: ' + f2(geo.height);
+               // }
+               
+               tip += mxResources.get('description_' + cell.value.nodeName);
+       }
+       else if (this.getModel().isEdge(cell))
+       {
+               tip = mxGraph.prototype.getTooltipForCell.apply(this, arguments);
+       }
+       
+       return tip;
+};
+
+/**
+ * Giuseppe Careri
+ * Returns the label for the given cell.
+ */
+Graph.prototype.convertValueToString = function(cell)
+{
+       if (cell.value != null && typeof(cell.value) == 'object')
+       {
+               return cell.value.getAttribute('label');
+       }
+       
+       return mxGraph.prototype.convertValueToString.apply(this, arguments);
+};
+
+/**
+ * Giuseppe Careri
+ * Handles label changes for XML user objects.
+ */
+Graph.prototype.cellLabelChanged = function(cell, value, autoSize)
+{
+       if (cell.value != null && typeof(cell.value) == 'object')
+       {
+               var tmp = cell.value.cloneNode(true);
+               tmp.setAttribute('label', value);
+               value = tmp;
+       }
+       
+       mxGraph.prototype.cellLabelChanged.apply(this, arguments);
+};
+
+/**
+ * Sets the link for the given cell.
+ */
+Graph.prototype.setLinkForCell = function(cell, link)
+{
+       var value = null;
+       
+       if (cell.value != null && typeof(cell.value) == 'object')
+       {
+               value = cell.value.cloneNode(true);
+       }
+       else
+       {
+               var doc = mxUtils.createXmlDocument();
+               
+               value = doc.createElement('UserObject');
+               value.setAttribute('label', cell.value);
+       }
+       
+       if (link != null && link.length > 0)
+       {
+               value.setAttribute('link', link);
+       }
+       else
+       {
+               value.removeAttribute('link');
+       }
+       
+       this.model.setValue(cell, value);
+};
+
+/**
+ * Returns the link for the given cell.
+ */
+Graph.prototype.getLinkForCell = function(cell)
+{
+       if (cell.value != null && typeof(cell.value) == 'object')
+       {
+               return cell.value.getAttribute('link');
+       }
+       
+       return null;
+};
+
+/**
+ * Customized graph for touch devices.
+ */
+Graph.prototype.initTouch = function()
+{
+       // Disables new connections via "hotspot"
+       this.connectionHandler.marker.isEnabled = function()
+       {
+               return this.graph.connectionHandler.first != null;
+       };
+
+       // Hides menu when editing starts
+       this.addListener(mxEvent.START_EDITING, function(sender, evt)
+       {
+               this.panningHandler.hideMenu();
+       });
+
+       // Context menu for touchstyle
+       var showMenu = false;
+       var menuCell = null;
+
+       // Checks if native hit detection did not return anything and does custom
+       // hit detection for edges to take into account the tolerance
+       this.updateMouseEvent = function(me)
+       {
+               mxGraph.prototype.updateMouseEvent.apply(this, arguments);
+
+               if (me.getState() == null)
+               {
+                       var cell = this.getCellAt(me.graphX, me.graphY);
+                       
+                       if (this.getModel().isEdge(cell))
+                       {
+                               me.state = this.view.getState(cell);
+                               
+                               if (me.state != null && me.state.shape != null)
+                               {
+                                       this.container.style.cursor = me.state.shape.node.style.cursor;
+                               }
+                       }
+               }
+               
+               if (me.getState() == null)
+               {
+                       this.container.style.cursor = 'default';
+               }
+       };
+       
+       // Handles popup menu on touch devices (tap selected cell)
+       this.fireMouseEvent = function(evtName, me, sender)
+       {
+               if (evtName == mxEvent.MOUSE_DOWN)
+               {
+                       if (!this.panningHandler.isMenuShowing())
+                       {
+                               menuCell = me.getCell();
+                               showMenu = (menuCell != null) ? this.isCellSelected(menuCell) : this.isSelectionEmpty();
+                       }
+                       else
+                       {
+                               showMenu = false;
+                               menuCell = null;
+                       }
+               }
+               else if (evtName == mxEvent.MOUSE_UP)
+               {
+                       if (showMenu && !this.isEditing())
+                       {
+                               if (!this.panningHandler.isMenuShowing())
+                               {
+                                       var x = mxEvent.getClientX(me.getEvent());
+                                       var y = mxEvent.getClientY(me.getEvent());
+                                       
+                                       this.panningHandler.popup(x + 16, y, menuCell, me.getEvent());
+                               }
+                               
+                               showMenu = false;
+                               menuCell = null;
+                               me.consume();
+                               
+                               return;
+                       }
+                       
+                       showMenu = false;
+                       menuCell = null;
+               }
+
+               mxGraph.prototype.fireMouseEvent.apply(this, arguments);
+
+               if (evtName == mxEvent.MOUSE_MOVE && me.isConsumed())
+               {
+                       showMenu = false;
+                       menuCell = null;
+               }
+       };
+};
+
+/**
+ * Implements touch devices.
+ */
+(function()
+{
+       // Enables rotation handle
+       mxVertexHandler.prototype.rotationEnabled = true;
+       
+       // Matches label positions of mxGraph 1.x
+       mxText.prototype.baseSpacingTop = 5;
+       mxText.prototype.baseSpacingBottom = 1;
+
+       // Touch-specific static overrides
+       if (touchStyle)
+       {
+               // Sets constants for touch style
+               mxConstants.HANDLE_SIZE = 16;
+               mxConstants.LABEL_HANDLE_SIZE = 7;
+               
+               // Larger tolerance and grid for real touch devices
+               if (mxClient.IS_TOUCH)
+               {
+                       mxVertexHandler.prototype.tolerance = 4;
+                       mxEdgeHandler.prototype.tolerance = 6;
+                       Graph.prototype.tolerance = 14;
+                       Graph.prototype.gridSize = 20;
+                       
+                       // One finger pans (no rubberband selection) must start regardless of mouse button
+                       mxPanningHandler.prototype.selectOnPopup = false;
+                       mxPanningHandler.prototype.useLeftButtonForPanning = true;
+                       mxPanningHandler.prototype.isPanningTrigger = function(me)
+                       {
+                               var evt = me.getEvent();
+                               
+                               return (this.useLeftButtonForPanning && (this.ignoreCell || me.getState() == null)/* &&
+                                               mxEvent.isLeftMouseButton(evt)*/) || (mxEvent.isControlDown(evt) &&
+                                               mxEvent.isShiftDown(evt)) || (this.usePopupTrigger &&
+                                               mxEvent.isPopupTrigger(evt));
+                       };
+               }
+               
+               // Don't clear selection if multiple cells selected
+               var graphHandlerMouseDown = mxGraphHandler.prototype.mouseDown;
+               mxGraphHandler.prototype.mouseDown = function(sender, me)
+               {
+                       graphHandlerMouseDown.apply(this, arguments);
+
+                       if (this.graph.isCellSelected(me.getCell()) && this.graph.getSelectionCount() > 1)
+                       {
+                               this.delayedSelection = false;
+                       }
+               };
+
+               // Changes order of panninghandler
+               Graph.prototype.createHandlers = function(container)
+               {
+                       this.tooltipHandler = new mxTooltipHandler(this);
+                       this.tooltipHandler.setEnabled(false);
+                       // Selection cells first
+                       this.selectionCellsHandler = new mxSelectionCellsHandler(this);
+                       this.panningHandler = new mxPanningHandler(this);
+                       this.panningHandler.panningEnabled = false;
+                       this.connectionHandler = new mxConnectionHandler(this);
+                       this.connectionHandler.setEnabled(false);
+                       this.graphHandler = new mxGraphHandler(this);
+               };
+
+               // On connect the target is selected and we clone the cell of the preview edge for insert
+               mxConnectionHandler.prototype.selectCells = function(edge, target)
+               {
+                       if (touchStyle && target != null)
+                       {
+                               this.graph.setSelectionCell(target);
+                       }
+                       else
+                       {
+                               this.graph.setSelectionCell(edge);
+                       }
+               };
+
+               // Overrides double click handling to use the tolerance
+               // FIXME: Double click on edges in iPad needs focus on textarea
+               var graphDblClick = mxGraph.prototype.dblClick;
+               Graph.prototype.dblClick = function(evt, cell)
+               {
+                       if (cell == null)
+                       {
+                               var pt = mxUtils.convertPoint(this.container,
+                                       mxEvent.getClientX(evt), mxEvent.getClientY(evt));
+                               cell = this.getCellAt(pt.x, pt.y);
+                       }
+
+                       graphDblClick.call(this, evt, cell);
+               };
+
+               // Rounded edge and vertex handles
+               var touchHandle = new mxImage(IMAGE_PATH + '/touch-handle.png', 16, 16);
+               mxVertexHandler.prototype.handleImage = touchHandle;
+               mxEdgeHandler.prototype.handleImage = touchHandle;
+               mxOutline.prototype.sizerImage = touchHandle;
+               
+               // Pre-fetches touch handle
+               new Image().src = touchHandle.src;
+
+               // Adds connect icon to selected vertices
+               var connectorSrc = IMAGE_PATH + '/touch-connector.png';
+               
+               var vertexHandlerInit = mxVertexHandler.prototype.init;
+               mxVertexHandler.prototype.init = function()
+               {
+                       vertexHandlerInit.apply(this, arguments);
+
+                       // Only show connector image on one cell and do not show on containers
+                       if (showConnectorImg && this.graph.connectionHandler.isEnabled() &&
+                               this.graph.isCellConnectable(this.state.cell) &&
+                               !this.graph.isValidRoot(this.state.cell) &&
+                               this.graph.getSelectionCount() == 1)
+                       {
+                               this.connectorImg = mxUtils.createImage(connectorSrc);
+                               this.connectorImg.style.cursor = 'pointer';
+                               this.connectorImg.style.width = '29px';
+                               this.connectorImg.style.height = '29px';
+                               this.connectorImg.style.position = 'absolute';
+                               
+                               if (!mxClient.IS_TOUCH)
+                               {
+                                       this.connectorImg.setAttribute('title', mxResources.get('connect'));
+                                       mxEvent.redirectMouseEvents(this.connectorImg, this.graph, this.state);
+                               }
+
+                               // Adds 2px tolerance
+                               this.connectorImg.style.padding = '2px';
+                               
+                               // Starts connecting on touch/mouse down
+                               mxEvent.addGestureListeners(this.connectorImg,
+                                       mxUtils.bind(this, function(evt)
+                                       {
+                                               this.graph.panningHandler.hideMenu();
+                                               var pt = mxUtils.convertPoint(this.graph.container,
+                                                               mxEvent.getClientX(evt), mxEvent.getClientY(evt));
+                                               this.graph.connectionHandler.start(this.state, pt.x, pt.y);
+                                               this.graph.isMouseDown = true;
+                                               mxEvent.consume(evt);
+                                       })
+                               );
+
+                               this.graph.container.appendChild(this.connectorImg);
+                       }
+
+                       this.redrawTools();
+               };
+               
+               var vertexHandlerRedraw = mxVertexHandler.prototype.redraw;
+               mxVertexHandler.prototype.redraw = function()
+               {
+                       vertexHandlerRedraw.apply(this);
+                       this.redrawTools();
+               };
+               
+               mxVertexHandler.prototype.redrawTools = function()
+               {
+                       if (this.state != null && this.connectorImg != null)
+                       {
+                               // Top right for single-sizer
+                               if (mxVertexHandler.prototype.singleSizer)
+                               {
+                                       this.connectorImg.style.left = (this.state.x + this.state.width - this.connectorImg.offsetWidth / 2) + 'px';
+                                       this.connectorImg.style.top = (this.state.y - this.connectorImg.offsetHeight / 2) + 'px';
+                               }
+                               else
+                               {
+                                       this.connectorImg.style.left = (this.state.x + this.state.width + mxConstants.HANDLE_SIZE / 2 + 4/* - 2 padding*/) + 'px';
+                                       this.connectorImg.style.top = (this.state.y + (this.state.height - this.connectorImg.offsetHeight) / 2) + 'px';
+                               }
+                       }
+               };
+               
+               var vertexHandlerDestroy = mxVertexHandler.prototype.destroy;
+               mxVertexHandler.prototype.destroy = function(sender, me)
+               {
+                       vertexHandlerDestroy.apply(this, arguments);
+
+                       if (this.connectorImg != null)
+                       {
+                               this.connectorImg.parentNode.removeChild(this.connectorImg);
+                               this.connectorImg = null;
+                       }
+               };
+               
+               // Pre-fetches touch connector
+               new Image().src = connectorSrc;
+       }
+       else
+       {
+               var img = new mxImage(IMAGE_PATH + '/connector.png', 15, 15);
+               mxConnectionHandler.prototype.connectImage = img;
+
+               // Pre-fetches img
+               new Image().src = img.src;
+               
+               if (urlParams['connect'] == '2') // not touchStyle
+               {
+                       var img = new mxImage(IMAGE_PATH + '/connector.png', 15, 15);
+                                       
+                       var vertexHandlerInit = mxVertexHandler.prototype.init;
+                       mxVertexHandler.prototype.init = function()
+                       {
+                               vertexHandlerInit.apply(this, arguments);
+       
+                               // Only show connector image on one cell and do not show on containers
+                               if (showConnectorImg && this.graph.connectionHandler.isEnabled() &&
+                                       this.graph.isCellConnectable(this.state.cell) &&
+                                       !this.graph.isValidRoot(this.state.cell) &&
+                                       this.graph.getSelectionCount() == 1)
+                               {
+                                       // Workaround for event redirection via image tag in quirks and IE8
+                                       if (mxClient.IS_IE && !mxClient.IS_SVG)
+                                       {
+                                               this.connectorImg = document.createElement('div');
+                                               this.connectorImg.style.backgroundImage = 'url(' + img.src + ')';
+                                               this.connectorImg.style.backgroundPosition = 'center';
+                                               this.connectorImg.style.backgroundRepeat = 'no-repeat';
+                                               this.connectorImg.style.width = (img.width + 4) + 'px';
+                                               this.connectorImg.style.height = (img.height + 4) + 'px';
+                                               this.connectorImg.style.display = (mxClient.IS_QUIRKS) ? 'inline' : 'inline-block';
+                                       }
+                                       else
+                                       {
+                                               this.connectorImg = mxUtils.createImage(img.src);
+                                               this.connectorImg.style.width = img.width + 'px';
+                                               this.connectorImg.style.height = img.height + 'px';
+                                       }
+                                       
+                                       this.connectorImg.style.cursor = 'pointer';
+                                       this.connectorImg.style.position = 'absolute';
+                                       this.connectorImg.setAttribute('title', mxResources.get('connect'));
+                                       mxEvent.redirectMouseEvents(this.connectorImg, this.graph, this.state);
+                                       
+                                       // Adds 2px tolerance
+                                       this.connectorImg.style.padding = '2px';
+                                       
+                                       // Starts connecting on touch/mouse down
+                                       mxEvent.addListener(this.connectorImg, 'mousedown',
+                                               mxUtils.bind(this, function(evt)
+                                               {
+                                                       this.graph.panningHandler.hideMenu();
+                                                       var pt = mxUtils.convertPoint(this.graph.container,
+                                                                       mxEvent.getClientX(evt), mxEvent.getClientY(evt));
+                                                       this.graph.connectionHandler.start(this.state, pt.x, pt.y);
+                                                       this.graph.isMouseDown = true;
+                                                       mxEvent.consume(evt);
+                                               })
+                                       );
+       
+                                       this.graph.container.appendChild(this.connectorImg);
+                               }
+       
+                               this.redrawTools();
+                       };
+                       
+                       var vertexHandlerRedraw = mxVertexHandler.prototype.redraw;
+                       mxVertexHandler.prototype.redraw = function()
+                       {
+                               vertexHandlerRedraw.apply(this);
+                               this.redrawTools();
+                       };
+                       
+                       mxVertexHandler.prototype.redrawTools = function()
+                       {
+                               if (this.state != null && this.connectorImg != null)
+                               {
+                                       // Top right for single-sizer
+                                       if (mxVertexHandler.prototype.singleSizer)
+                                       {
+                                               this.connectorImg.style.left = (this.state.x + this.state.width - this.connectorImg.offsetWidth / 2) + 'px';
+                                               this.connectorImg.style.top = (this.state.y - this.connectorImg.offsetHeight / 2) + 'px';
+                                       }
+                                       else
+                                       {
+                                               this.connectorImg.style.left = (this.state.x + this.state.width + mxConstants.HANDLE_SIZE / 2 + 2/* - 2 padding*/) + 'px';
+                                               this.connectorImg.style.top = (this.state.y + (this.state.height - this.connectorImg.offsetHeight) / 2) + 'px';
+                                       }
+                               }
+                       };
+                       
+                       var vertexHandlerDestroy = mxVertexHandler.prototype.destroy;
+                       mxVertexHandler.prototype.destroy = function(sender, me)
+                       {
+                               vertexHandlerDestroy.apply(this, arguments);
+       
+                               if (this.connectorImg != null)
+                               {
+                                       this.connectorImg.parentNode.removeChild(this.connectorImg);
+                                       this.connectorImg = null;
+                               }
+                       };
+               }
+       }
+})();
index 0188340..7d33b9e 100644 (file)
@@ -1 +1,716 @@
-var _0xef0b=["\x65\x64\x69\x74\x6F\x72\x55\x69","\x6D\x65\x6E\x75\x73","\x69\x6E\x69\x74","\x73\x72\x63","\x2F\x63\x68\x65\x63\x6B\x6D\x61\x72\x6B\x2E\x67\x69\x66","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x67\x72\x61\x70\x68","\x65\x64\x69\x74\x6F\x72","\x66\x6F\x6E\x74\x46\x61\x6D\x69\x6C\x79","\x48\x65\x6C\x76\x65\x74\x69\x63\x61","\x56\x65\x72\x64\x61\x6E\x61","\x54\x69\x6D\x65\x73\x20\x4E\x65\x77\x20\x52\x6F\x6D\x61\x6E","\x47\x61\x72\x61\x6D\x6F\x6E\x64","\x43\x6F\x6D\x69\x63\x20\x53\x61\x6E\x73\x20\x4D\x53","\x43\x6F\x75\x72\x69\x65\x72\x20\x4E\x65\x77","\x47\x65\x6F\x72\x67\x69\x61","\x4C\x75\x63\x69\x64\x61\x20\x43\x6F\x6E\x73\x6F\x6C\x65","\x54\x61\x68\x6F\x6D\x61","\x6C\x65\x6E\x67\x74\x68","\x53\x54\x59\x4C\x45\x5F\x46\x4F\x4E\x54\x46\x41\x4D\x49\x4C\x59","\x73\x74\x79\x6C\x65\x43\x68\x61\x6E\x67\x65","\x73\x74\x79\x6C\x65","\x6E\x65\x78\x74\x53\x69\x62\x6C\x69\x6E\x67","\x66\x69\x72\x73\x74\x43\x68\x69\x6C\x64","\x61\x64\x64\x53\x65\x70\x61\x72\x61\x74\x6F\x72","\x63\x75\x73\x74\x6F\x6D","\x67\x65\x74","","\x70\x72\x6F\x6D\x70\x74\x43\x68\x61\x6E\x67\x65","\x62\x69\x6E\x64","\x70\x75\x74","\x66\x6F\x6E\x74\x53\x69\x7A\x65","\x53\x54\x59\x4C\x45\x5F\x46\x4F\x4E\x54\x53\x49\x5A\x45","\x28\x70\x74\x29","\x31\x32","\x6C\x69\x6E\x65\x77\x69\x64\x74\x68","\x70\x78","\x53\x54\x59\x4C\x45\x5F\x53\x54\x52\x4F\x4B\x45\x57\x49\x44\x54\x48","\x28\x70\x78\x29","\x31","\x6C\x69\x6E\x65","\x73\x74\x72\x61\x69\x67\x68\x74","\x53\x54\x59\x4C\x45\x5F\x45\x44\x47\x45","\x65\x6E\x74\x69\x74\x79\x52\x65\x6C\x61\x74\x69\x6F\x6E","\x65\x6E\x74\x69\x74\x79\x52\x65\x6C\x61\x74\x69\x6F\x6E\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x68\x6F\x72\x69\x7A\x6F\x6E\x74\x61\x6C","\x53\x54\x59\x4C\x45\x5F\x45\x4C\x42\x4F\x57","\x65\x6C\x62\x6F\x77\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x76\x65\x72\x74\x69\x63\x61\x6C","\x6D\x61\x6E\x75\x61\x6C","\x73\x65\x67\x6D\x65\x6E\x74\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x61\x75\x74\x6F\x6D\x61\x74\x69\x63","\x6F\x72\x74\x68\x6F\x67\x6F\x6E\x61\x6C\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x6C\x69\x6E\x65\x65\x6E\x64","\x63\x6C\x61\x73\x73\x69\x63","\x53\x54\x59\x4C\x45\x5F\x45\x4E\x44\x41\x52\x52\x4F\x57","\x41\x52\x52\x4F\x57\x5F\x43\x4C\x41\x53\x53\x49\x43","\x6F\x70\x65\x6E\x41\x72\x72\x6F\x77","\x41\x52\x52\x4F\x57\x5F\x4F\x50\x45\x4E","\x62\x6C\x6F\x63\x6B","\x41\x52\x52\x4F\x57\x5F\x42\x4C\x4F\x43\x4B","\x6F\x76\x61\x6C","\x41\x52\x52\x4F\x57\x5F\x4F\x56\x41\x4C","\x64\x69\x61\x6D\x6F\x6E\x64","\x41\x52\x52\x4F\x57\x5F\x44\x49\x41\x4D\x4F\x4E\x44","\x64\x69\x61\x6D\x6F\x6E\x64\x54\x68\x69\x6E","\x41\x52\x52\x4F\x57\x5F\x44\x49\x41\x4D\x4F\x4E\x44\x5F\x54\x48\x49\x4E","\x6E\x6F\x6E\x65","\x4E\x4F\x4E\x45","\x74\x72\x61\x6E\x73\x70\x61\x72\x65\x6E\x74","\x65\x6E\x64\x46\x69\x6C\x6C","\x74\x6F\x67\x67\x6C\x65\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65\x73","\x61\x64\x64\x49\x74\x65\x6D","\x73\x69\x7A\x65","\x6C\x69\x6E\x65\x73\x74\x61\x72\x74","\x53\x54\x59\x4C\x45\x5F\x53\x54\x41\x52\x54\x41\x52\x52\x4F\x57","\x73\x74\x61\x72\x74\x46\x69\x6C\x6C","\x73\x70\x61\x63\x69\x6E\x67","\x65\x6E\x61\x62\x6C\x65\x64","\x73\x68\x61\x64\x6F\x77","\x61\x63\x74\x69\x6F\x6E\x73","\x73\x68\x6F\x77\x44\x69\x73\x61\x62\x6C\x65\x64","\x74\x6F\x70","\x30","\x72\x69\x67\x68\x74","\x62\x6F\x74\x74\x6F\x6D","\x6C\x65\x66\x74","\x67\x6C\x6F\x62\x61\x6C","\x70\x65\x72\x69\x6D\x65\x74\x65\x72","\x73\x6F\x75\x72\x63\x65\x53\x70\x61\x63\x69\x6E\x67","\x74\x61\x72\x67\x65\x74\x53\x70\x61\x63\x69\x6E\x67","\x66\x6F\x72\x6D\x61\x74","\x61\x64\x64\x4D\x65\x6E\x75\x49\x74\x65\x6D","\x74\x65\x78\x74","\x61\x64\x64\x53\x75\x62\x6D\x65\x6E\x75","\x2D","\x62\x6F\x6C\x64","\x69\x74\x61\x6C\x69\x63","\x75\x6E\x64\x65\x72\x6C\x69\x6E\x65","\x61\x64\x64\x4D\x65\x6E\x75\x49\x74\x65\x6D\x73","\x61\x6C\x69\x67\x6E\x6D\x65\x6E\x74","\x77\x6F\x72\x64\x57\x72\x61\x70","\x74\x65\x78\x74\x4F\x70\x61\x63\x69\x74\x79","\x28\x25\x29","\x31\x30\x30","\x68\x69\x64\x65","\x6C\x65\x66\x74\x41\x6C\x69\x67\x6E","\x53\x54\x59\x4C\x45\x5F\x41\x4C\x49\x47\x4E","\x41\x4C\x49\x47\x4E\x5F\x4C\x45\x46\x54","\x63\x65\x6E\x74\x65\x72","\x41\x4C\x49\x47\x4E\x5F\x43\x45\x4E\x54\x45\x52","\x72\x69\x67\x68\x74\x41\x6C\x69\x67\x6E","\x41\x4C\x49\x47\x4E\x5F\x52\x49\x47\x48\x54","\x74\x6F\x70\x41\x6C\x69\x67\x6E","\x53\x54\x59\x4C\x45\x5F\x56\x45\x52\x54\x49\x43\x41\x4C\x5F\x41\x4C\x49\x47\x4E","\x41\x4C\x49\x47\x4E\x5F\x54\x4F\x50","\x6D\x69\x64\x64\x6C\x65","\x41\x4C\x49\x47\x4E\x5F\x4D\x49\x44\x44\x4C\x45","\x62\x6F\x74\x74\x6F\x6D\x41\x6C\x69\x67\x6E","\x41\x4C\x49\x47\x4E\x5F\x42\x4F\x54\x54\x4F\x4D","\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x53\x54\x59\x4C\x45\x5F\x4C\x41\x42\x45\x4C\x5F\x50\x4F\x53\x49\x54\x49\x4F\x4E","\x53\x54\x59\x4C\x45\x5F\x56\x45\x52\x54\x49\x43\x41\x4C\x5F\x4C\x41\x42\x45\x4C\x5F\x50\x4F\x53\x49\x54\x49\x4F\x4E","\x64\x69\x72\x65\x63\x74\x69\x6F\x6E","\x66\x6C\x69\x70\x48","\x66\x6C\x69\x70\x56","\x74\x69\x6C\x74","\x72\x6F\x74\x61\x74\x69\x6F\x6E","\x61\x6C\x69\x67\x6E","\x61\x6C\x69\x67\x6E\x43\x65\x6C\x6C\x73","\x6C\x61\x79\x6F\x75\x74","\x68\x6F\x72\x69\x7A\x6F\x6E\x74\x61\x6C\x46\x6C\x6F\x77","\x65\x78\x65\x63\x75\x74\x65\x4C\x61\x79\x6F\x75\x74","\x76\x65\x72\x74\x69\x63\x61\x6C\x46\x6C\x6F\x77","\x6E\x61\x76\x69\x67\x61\x74\x69\x6F\x6E","\x68\x6F\x6D\x65","\x65\x78\x69\x74\x47\x72\x6F\x75\x70","\x65\x6E\x74\x65\x72\x47\x72\x6F\x75\x70","\x65\x78\x70\x61\x6E\x64","\x63\x6F\x6C\x6C\x61\x70\x73\x65","\x61\x72\x72\x61\x6E\x67\x65","\x74\x6F\x46\x72\x6F\x6E\x74","\x74\x6F\x42\x61\x63\x6B","\x67\x72\x6F\x75\x70","\x75\x6E\x67\x72\x6F\x75\x70","\x72\x65\x6D\x6F\x76\x65\x46\x72\x6F\x6D\x47\x72\x6F\x75\x70","\x76\x69\x65\x77","\x61\x63\x74\x75\x61\x6C\x53\x69\x7A\x65","\x25","\x7A\x6F\x6F\x6D\x54\x6F","\x7A\x6F\x6F\x6D\x49\x6E","\x7A\x6F\x6F\x6D\x4F\x75\x74","\x66\x69\x74\x57\x69\x6E\x64\x6F\x77","\x63\x75\x73\x74\x6F\x6D\x5A\x6F\x6F\x6D","\x66\x69\x74\x50\x61\x67\x65","\x66\x69\x74\x50\x61\x67\x65\x57\x69\x64\x74\x68","\x66\x69\x6C\x65","\x6E\x65\x77","\x6F\x70\x65\x6E","\x73\x61\x76\x65","\x73\x61\x76\x65\x41\x73","\x70\x75\x62\x6C\x69\x73\x68","\x76\x61\x72\x69\x61\x62\x6C\x65","\x69\x6D\x70\x6F\x72\x74","\x65\x78\x70\x6F\x72\x74","\x65\x64\x69\x74\x46\x69\x6C\x65","\x72\x65\x6E\x61\x6D\x65","\x70\x72\x69\x6E\x74","\x65\x64\x69\x74","\x75\x6E\x64\x6F","\x72\x65\x64\x6F","\x63\x75\x74","\x63\x6F\x70\x79","\x70\x61\x73\x74\x65","\x64\x65\x6C\x65\x74\x65","\x64\x75\x70\x6C\x69\x63\x61\x74\x65","\x73\x65\x6C\x65\x63\x74\x56\x65\x72\x74\x69\x63\x65\x73","\x73\x65\x6C\x65\x63\x74\x45\x64\x67\x65\x73","\x73\x65\x6C\x65\x63\x74\x41\x6C\x6C","\x68\x65\x6C\x70","\x61\x62\x6F\x75\x74","\x61\x64\x64\x4D\x65\x6E\x75","\x65\x78\x65\x63\x75\x74\x65","\x62\x65\x67\x69\x6E\x55\x70\x64\x61\x74\x65","\x67\x65\x74\x4D\x6F\x64\x65\x6C","\x73\x65\x74\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65\x73","\x65\x6E\x64\x55\x70\x64\x61\x74\x65","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x67\x65\x74\x53\x74\x61\x74\x65","\x67\x65\x74\x56\x69\x65\x77","\x65\x6E\x74\x65\x72\x56\x61\x6C\x75\x65","\x20","\x70\x72\x6F\x6D\x70\x74","\x6C\x61\x62\x65\x6C","\x66\x75\x6E\x63\x74","\x74\x6F\x67\x67\x6C\x65\x41\x63\x74\x69\x6F\x6E","\x69\x73\x53\x65\x6C\x65\x63\x74\x65\x64","\x61\x64\x64\x43\x68\x65\x63\x6B\x6D\x61\x72\x6B","\x61\x64\x64\x53\x68\x6F\x72\x74\x63\x75\x74","\x73\x68\x6F\x72\x74\x63\x75\x74","\x73\x70\x61\x6E","\x63\x72\x65\x61\x74\x65\x45\x6C\x65\x6D\x65\x6E\x74","\x63\x6F\x6C\x6F\x72","\x67\x72\x61\x79","\x77\x72\x69\x74\x65","\x61\x70\x70\x65\x6E\x64\x43\x68\x69\x6C\x64","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x75\x72\x6C\x28","\x2F\x63\x68\x65\x63\x6B\x6D\x61\x72\x6B\x2E\x67\x69\x66\x29","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x52\x65\x70\x65\x61\x74","\x6E\x6F\x2D\x72\x65\x70\x65\x61\x74","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x32\x70\x78\x20\x35\x30\x25","\x63\x72\x65\x61\x74\x65\x50\x6F\x70\x75\x70\x4D\x65\x6E\x75","\x73\x6D\x61\x72\x74\x53\x65\x70\x61\x72\x61\x74\x6F\x72\x73","\x69\x73\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x45\x6D\x70\x74\x79","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x6F\x75\x6E\x74","\x69\x73\x45\x64\x67\x65","\x73\x65\x74\x41\x73\x44\x65\x66\x61\x75\x6C\x74\x45\x64\x67\x65","\x67\x65\x74\x48\x61\x6E\x64\x6C\x65\x72","\x73\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73\x48\x61\x6E\x64\x6C\x65\x72","\x62\x65\x6E\x64\x73","\x67\x65\x74\x48\x61\x6E\x64\x6C\x65\x46\x6F\x72\x45\x76\x65\x6E\x74","\x72\x65\x6D\x6F\x76\x65\x57\x61\x79\x70\x6F\x69\x6E\x74","\x68\x61\x6E\x64\x6C\x65\x72","\x69\x6E\x64\x65\x78","\x61\x64\x64\x57\x61\x79\x70\x6F\x69\x6E\x74","\x67\x65\x74\x4C\x69\x6E\x6B\x46\x6F\x72\x43\x65\x6C\x6C","\x6F\x70\x65\x6E\x4C\x69\x6E\x6B","\x63\x72\x65\x61\x74\x65\x4D\x65\x6E\x75\x62\x61\x72","\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x68\x69\x64\x65\x4D\x65\x6E\x75","\x61\x64\x64\x47\x65\x73\x74\x75\x72\x65\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x63\x75\x72\x72\x65\x6E\x74\x4D\x65\x6E\x75","\x61","\x68\x72\x65\x66","\x6A\x61\x76\x61\x73\x63\x72\x69\x70\x74\x3A\x76\x6F\x69\x64\x28\x30\x29\x3B","\x73\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65","\x67\x65\x49\x74\x65\x6D","\x61\x64\x64\x4D\x65\x6E\x75\x48\x61\x6E\x64\x6C\x65\x72","\x70\x61\x6E\x6E\x69\x6E\x67\x48\x61\x6E\x64\x6C\x65\x72","\x64\x69\x76","\x20\x67\x65\x4D\x65\x6E\x75\x62\x61\x72\x4D\x65\x6E\x75","\x61\x75\x74\x6F\x45\x78\x70\x61\x6E\x64","\x61\x70\x70\x6C\x79","\x64\x65\x73\x74\x72\x6F\x79","\x63\x75\x72\x72\x65\x6E\x74\x45\x6C\x74","\x6F\x66\x66\x73\x65\x74\x4C\x65\x66\x74","\x6F\x66\x66\x73\x65\x74\x57\x69\x64\x74\x68","\x70\x61\x67\x65\x2D\x73\x69\x64\x65\x62\x61\x72","\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x42\x79\x49\x64","\x6F\x66\x66\x73\x65\x74\x54\x6F\x70","\x6F\x66\x66\x73\x65\x74\x48\x65\x69\x67\x68\x74","\x70\x6F\x70\x75\x70","\x63\x6F\x6E\x73\x75\x6D\x65","\x6D\x6F\x75\x73\x65\x6D\x6F\x76\x65","\x61\x64\x64\x4C\x69\x73\x74\x65\x6E\x65\x72","\x6D\x6F\x75\x73\x65\x64\x6F\x77\x6E","\x63\x6C\x69\x63\x6B","\x63\x61\x6C\x6C","\x65\x78\x74\x65\x6E\x64","\x73\x65\x74\x45\x6E\x61\x62\x6C\x65\x64","\x73\x74\x61\x74\x65\x43\x68\x61\x6E\x67\x65\x64","\x66\x69\x72\x65\x45\x76\x65\x6E\x74"];Menus=function(_0xaa22x1){this[_0xef0b[0]]=_0xaa22x1;this[_0xef0b[1]]= new Object();this[_0xef0b[2]](); new Image()[_0xef0b[3]]=IMAGE_PATH+_0xef0b[4]};Menus[_0xef0b[5]][_0xef0b[2]]=function(){var _0xaa22x2=this[_0xef0b[0]][_0xef0b[7]][_0xef0b[6]];this[_0xef0b[30]](_0xef0b[8], new Menu(mxUtils[_0xef0b[29]](this,function(_0xaa22x3,_0xaa22x4){var _0xaa22x5=[_0xef0b[9],_0xef0b[10],_0xef0b[11],_0xef0b[12],_0xef0b[13],_0xef0b[14],_0xef0b[15],_0xef0b[16],_0xef0b[17]];for(var _0xaa22x6=0;_0xaa22x6<_0xaa22x5[_0xef0b[18]];_0xaa22x6++){var _0xaa22x7=this[_0xef0b[20]](_0xaa22x3,_0xaa22x5[_0xaa22x6],[mxConstants[_0xef0b[19]]],[_0xaa22x5[_0xaa22x6]],null,_0xaa22x4);_0xaa22x7[_0xef0b[23]][_0xef0b[22]][_0xef0b[21]][_0xef0b[8]]=_0xaa22x5[_0xaa22x6]};_0xaa22x3[_0xef0b[24]](_0xaa22x4);this[_0xef0b[28]](_0xaa22x3,mxResources[_0xef0b[26]](_0xef0b[25]),_0xef0b[27],mxConstants.DEFAULT_FONTFAMILY,mxConstants.STYLE_FONTFAMILY,_0xaa22x4)})));this[_0xef0b[30]](_0xef0b[31], new Menu(mxUtils[_0xef0b[29]](this,function(_0xaa22x3,_0xaa22x4){var _0xaa22x8=[6,8,9,10,11,12,14,18,24,36,48,72];for(var _0xaa22x6=0;_0xaa22x6<_0xaa22x8[_0xef0b[18]];_0xaa22x6++){this[_0xef0b[20]](_0xaa22x3,_0xaa22x8[_0xaa22x6],[mxConstants[_0xef0b[32]]],[_0xaa22x8[_0xaa22x6]],null,_0xaa22x4)};_0xaa22x3[_0xef0b[24]](_0xaa22x4);this[_0xef0b[28]](_0xaa22x3,mxResources[_0xef0b[26]](_0xef0b[25]),_0xef0b[33],_0xef0b[34],mxConstants.STYLE_FONTSIZE,_0xaa22x4)})));this[_0xef0b[30]](_0xef0b[35], new Menu(mxUtils[_0xef0b[29]](this,function(_0xaa22x3,_0xaa22x4){var _0xaa22x8=[1,2,3,4,8,12,16,24];for(var _0xaa22x6=0;_0xaa22x6<_0xaa22x8[_0xef0b[18]];_0xaa22x6++){this[_0xef0b[20]](_0xaa22x3,_0xaa22x8[_0xaa22x6]+_0xef0b[36],[mxConstants[_0xef0b[37]]],[_0xaa22x8[_0xaa22x6]],null,_0xaa22x4)};_0xaa22x3[_0xef0b[24]](_0xaa22x4);this[_0xef0b[28]](_0xaa22x3,mxResources[_0xef0b[26]](_0xef0b[25]),_0xef0b[38],_0xef0b[39],mxConstants.STYLE_STROKEWIDTH,_0xaa22x4)})));this[_0xef0b[30]](_0xef0b[40], new Menu(mxUtils[_0xef0b[29]](this,function(_0xaa22x3,_0xaa22x4){this[_0xef0b[20]](_0xaa22x3,mxResources[_0xef0b[26]](_0xef0b[41]),[mxConstants[_0xef0b[42]]],[null],null,_0xaa22x4);this[_0xef0b[20]](_0xaa22x3,mxResources[_0xef0b[26]](_0xef0b[43]),[mxConstants[_0xef0b[42]]],[_0xef0b[44]],null,_0xaa22x4);_0xaa22x3[_0xef0b[24]](_0xaa22x4);this[_0xef0b[20]](_0xaa22x3,mxResources[_0xef0b[26]](_0xef0b[45]),[mxConstants[_0xef0b[42]],mxConstants[_0xef0b[46]]],[_0xef0b[47],_0xef0b[45]],null,_0xaa22x4);this[_0xef0b[20]](_0xaa22x3,mxResources[_0xef0b[26]](_0xef0b[48]),[mxConstants[_0xef0b[42]],mxConstants[_0xef0b[46]]],[_0xef0b[47],_0xef0b[48]],null,_0xaa22x4);_0xaa22x3[_0xef0b[24]](_0xaa22x4);this[_0xef0b[20]](_0xaa22x3,mxResources[_0xef0b[26]](_0xef0b[49]),[mxConstants[_0xef0b[42]]],[_0xef0b[50]],null,_0xaa22x4);this[_0xef0b[20]](_0xaa22x3,mxResources[_0xef0b[26]](_0xef0b[51]),[mxConstants[_0xef0b[42]]],[_0xef0b[52]],null,_0xaa22x4)})));this[_0xef0b[30]](_0xef0b[53], new Menu(mxUtils[_0xef0b[29]](this,function(_0xaa22x3,_0xaa22x4){this[_0xef0b[20]](_0xaa22x3,mxResources[_0xef0b[26]](_0xef0b[54]),[mxConstants[_0xef0b[55]]],[mxConstants[_0xef0b[56]]],null,_0xaa22x4);this[_0xef0b[20]](_0xaa22x3,mxResources[_0xef0b[26]](_0xef0b[57]),[mxConstants[_0xef0b[55]]],[mxConstants[_0xef0b[58]]],null,_0xaa22x4);this[_0xef0b[20]](_0xaa22x3,mxResources[_0xef0b[26]](_0xef0b[59]),[mxConstants[_0xef0b[55]]],[mxConstants[_0xef0b[60]]],null,_0xaa22x4);_0xaa22x3[_0xef0b[24]](_0xaa22x4);this[_0xef0b[20]](_0xaa22x3,mxResources[_0xef0b[26]](_0xef0b[61]),[mxConstants[_0xef0b[55]]],[mxConstants[_0xef0b[62]]],null,_0xaa22x4);this[_0xef0b[20]](_0xaa22x3,mxResources[_0xef0b[26]](_0xef0b[63]),[mxConstants[_0xef0b[55]]],[mxConstants[_0xef0b[64]]],null,_0xaa22x4);this[_0xef0b[20]](_0xaa22x3,mxResources[_0xef0b[26]](_0xef0b[65]),[mxConstants[_0xef0b[55]]],[mxConstants[_0xef0b[66]]],null,_0xaa22x4);_0xaa22x3[_0xef0b[24]](_0xaa22x4);this[_0xef0b[20]](_0xaa22x3,mxResources[_0xef0b[26]](_0xef0b[67]),[mxConstants[_0xef0b[55]]],[mxConstants[_0xef0b[68]]],null,_0xaa22x4);_0xaa22x3[_0xef0b[24]](_0xaa22x4);_0xaa22x3[_0xef0b[72]](mxResources[_0xef0b[26]](_0xef0b[69]),null,function(){_0xaa22x2[_0xef0b[71]](_0xef0b[70],true)},_0xaa22x4,null,true);_0xaa22x3[_0xef0b[24]](_0xaa22x4);this[_0xef0b[28]](_0xaa22x3,mxResources[_0xef0b[26]](_0xef0b[73]),_0xef0b[38],mxConstants.DEFAULT_MARKERSIZE,mxConstants.STYLE_ENDSIZE,_0xaa22x4)})));this[_0xef0b[30]](_0xef0b[74], new Menu(mxUtils[_0xef0b[29]](this,function(_0xaa22x3,_0xaa22x4){this[_0xef0b[20]](_0xaa22x3,mxResources[_0xef0b[26]](_0xef0b[54]),[mxConstants[_0xef0b[75]]],[mxConstants[_0xef0b[56]]],null,_0xaa22x4);this[_0xef0b[20]](_0xaa22x3,mxResources[_0xef0b[26]](_0xef0b[57]),[mxConstants[_0xef0b[75]]],[mxConstants[_0xef0b[58]]],null,_0xaa22x4);this[_0xef0b[20]](_0xaa22x3,mxResources[_0xef0b[26]](_0xef0b[59]),[mxConstants[_0xef0b[75]]],[mxConstants[_0xef0b[60]]],null,_0xaa22x4);_0xaa22x3[_0xef0b[24]](_0xaa22x4);this[_0xef0b[20]](_0xaa22x3,mxResources[_0xef0b[26]](_0xef0b[61]),[mxConstants[_0xef0b[75]]],[mxConstants[_0xef0b[62]]],null,_0xaa22x4);this[_0xef0b[20]](_0xaa22x3,mxResources[_0xef0b[26]](_0xef0b[63]),[mxConstants[_0xef0b[75]]],[mxConstants[_0xef0b[64]]],null,_0xaa22x4);this[_0xef0b[20]](_0xaa22x3,mxResources[_0xef0b[26]](_0xef0b[65]),[mxConstants[_0xef0b[75]]],[mxConstants[_0xef0b[66]]],null,_0xaa22x4);_0xaa22x3[_0xef0b[24]](_0xaa22x4);this[_0xef0b[20]](_0xaa22x3,mxResources[_0xef0b[26]](_0xef0b[67]),[mxConstants[_0xef0b[75]]],[mxConstants[_0xef0b[68]]],null,_0xaa22x4);_0xaa22x3[_0xef0b[24]](_0xaa22x4);_0xaa22x3[_0xef0b[72]](mxResources[_0xef0b[26]](_0xef0b[69]),null,function(){_0xaa22x2[_0xef0b[71]](_0xef0b[76],true)},_0xaa22x4,null,true);_0xaa22x3[_0xef0b[24]](_0xaa22x4);this[_0xef0b[28]](_0xaa22x3,mxResources[_0xef0b[26]](_0xef0b[73]),_0xef0b[38],mxConstants.DEFAULT_MARKERSIZE,mxConstants.STYLE_STARTSIZE,_0xaa22x4)})));this[_0xef0b[30]](_0xef0b[77], new Menu(mxUtils[_0xef0b[29]](this,function(_0xaa22x3,_0xaa22x4){var _0xaa22x9=this[_0xef0b[0]][_0xef0b[80]][_0xef0b[26]](_0xef0b[79])[_0xef0b[78]];var _0xaa22xa=this[_0xef0b[26]](_0xef0b[40])[_0xef0b[78]];if(_0xaa22x9||_0xaa22x3[_0xef0b[81]]){this[_0xef0b[28]](_0xaa22x3,mxResources[_0xef0b[26]](_0xef0b[82]),_0xef0b[38],_0xef0b[83],mxConstants.STYLE_SPACING_TOP,_0xaa22x4,_0xaa22x9);this[_0xef0b[28]](_0xaa22x3,mxResources[_0xef0b[26]](_0xef0b[84]),_0xef0b[38],_0xef0b[83],mxConstants.STYLE_SPACING_RIGHT,_0xaa22x4,_0xaa22x9);this[_0xef0b[28]](_0xaa22x3,mxResources[_0xef0b[26]](_0xef0b[85]),_0xef0b[38],_0xef0b[83],mxConstants.STYLE_SPACING_BOTTOM,_0xaa22x4,_0xaa22x9);this[_0xef0b[28]](_0xaa22x3,mxResources[_0xef0b[26]](_0xef0b[86]),_0xef0b[38],_0xef0b[83],mxConstants.STYLE_SPACING_LEFT,_0xaa22x4,_0xaa22x9);_0xaa22x3[_0xef0b[24]](_0xaa22x4);this[_0xef0b[28]](_0xaa22x3,mxResources[_0xef0b[26]](_0xef0b[87]),_0xef0b[38],_0xef0b[83],mxConstants.STYLE_SPACING,_0xaa22x4,_0xaa22x9);this[_0xef0b[28]](_0xaa22x3,mxResources[_0xef0b[26]](_0xef0b[88]),_0xef0b[38],_0xef0b[83],mxConstants.STYLE_PERIMETER_SPACING,_0xaa22x4,_0xaa22x9)};if(_0xaa22xa||_0xaa22x3[_0xef0b[81]]){_0xaa22x3[_0xef0b[24]](_0xaa22x4);this[_0xef0b[28]](_0xaa22x3,mxResources[_0xef0b[26]](_0xef0b[89]),_0xef0b[38],_0xef0b[83],mxConstants.STYLE_SOURCE_PERIMETER_SPACING,_0xaa22x4,_0xaa22xa);this[_0xef0b[28]](_0xaa22x3,mxResources[_0xef0b[26]](_0xef0b[90]),_0xef0b[38],_0xef0b[83],mxConstants.STYLE_TARGET_PERIMETER_SPACING,_0xaa22x4,_0xaa22xa)}})));this[_0xef0b[30]](_0xef0b[91], new Menu(mxUtils[_0xef0b[29]](this,function(_0xaa22x3,_0xaa22x4){this[_0xef0b[92]](_0xaa22x3,_0xef0b[21],_0xaa22x4)})));this[_0xef0b[30]](_0xef0b[93], new Menu(mxUtils[_0xef0b[29]](this,function(_0xaa22x3,_0xaa22x4){var _0xaa22xb=this[_0xef0b[26]](_0xef0b[93])[_0xef0b[78]];_0xaa22x3[_0xef0b[24]](_0xaa22x4);this[_0xef0b[94]](_0xef0b[8],_0xaa22x3,_0xaa22x4);this[_0xef0b[94]](_0xef0b[31],_0xaa22x3,_0xaa22x4);this[_0xef0b[99]](_0xaa22x3,[_0xef0b[95],_0xef0b[96],_0xef0b[97],_0xef0b[98],_0xef0b[95]],_0xaa22x4);this[_0xef0b[94]](_0xef0b[100],_0xaa22x3,_0xaa22x4);this[_0xef0b[92]](_0xaa22x3,_0xef0b[101],_0xaa22x4);_0xaa22x3[_0xef0b[24]](_0xaa22x4);this[_0xef0b[28]](_0xaa22x3,mxResources[_0xef0b[26]](_0xef0b[102]),_0xef0b[103],_0xef0b[104],mxConstants.STYLE_TEXT_OPACITY,_0xaa22x4,_0xaa22xb);_0xaa22x3[_0xef0b[72]](mxResources[_0xef0b[26]](_0xef0b[105]),null,function(){_0xaa22x2[_0xef0b[71]](mxConstants.STYLE_NOLABEL,false)},_0xaa22x4,null,_0xaa22xb)})));this[_0xef0b[30]](_0xef0b[100], new Menu(mxUtils[_0xef0b[29]](this,function(_0xaa22x3,_0xaa22x4){this[_0xef0b[20]](_0xaa22x3,mxResources[_0xef0b[26]](_0xef0b[106]),[mxConstants[_0xef0b[107]]],[mxConstants[_0xef0b[108]]],null,_0xaa22x4);this[_0xef0b[20]](_0xaa22x3,mxResources[_0xef0b[26]](_0xef0b[109]),[mxConstants[_0xef0b[107]]],[mxConstants[_0xef0b[110]]],null,_0xaa22x4);this[_0xef0b[20]](_0xaa22x3,mxResources[_0xef0b[26]](_0xef0b[111]),[mxConstants[_0xef0b[107]]],[mxConstants[_0xef0b[112]]],null,_0xaa22x4);_0xaa22x3[_0xef0b[24]](_0xaa22x4);this[_0xef0b[20]](_0xaa22x3,mxResources[_0xef0b[26]](_0xef0b[113]),[mxConstants[_0xef0b[114]]],[mxConstants[_0xef0b[115]]],null,_0xaa22x4);this[_0xef0b[20]](_0xaa22x3,mxResources[_0xef0b[26]](_0xef0b[116]),[mxConstants[_0xef0b[114]]],[mxConstants[_0xef0b[117]]],null,_0xaa22x4);this[_0xef0b[20]](_0xaa22x3,mxResources[_0xef0b[26]](_0xef0b[118]),[mxConstants[_0xef0b[114]]],[mxConstants[_0xef0b[119]]],null,_0xaa22x4);_0xaa22x3[_0xef0b[24]](_0xaa22x4);this[_0xef0b[94]](_0xef0b[120],_0xaa22x3,_0xaa22x4);this[_0xef0b[94]](_0xef0b[77],_0xaa22x3,_0xaa22x4);_0xaa22x3[_0xef0b[24]](_0xaa22x4);var _0xaa22xb=this[_0xef0b[26]](_0xef0b[93])[_0xef0b[78]];_0xaa22x3[_0xef0b[72]](mxResources[_0xef0b[26]](_0xef0b[48]),null,function(){_0xaa22x2[_0xef0b[71]](mxConstants.STYLE_HORIZONTAL,true)},_0xaa22x4,null,_0xaa22xb)})));this[_0xef0b[30]](_0xef0b[120], new Menu(mxUtils[_0xef0b[29]](this,function(_0xaa22x3,_0xaa22x4){this[_0xef0b[20]](_0xaa22x3,mxResources[_0xef0b[26]](_0xef0b[86]),[mxConstants[_0xef0b[121]],mxConstants[_0xef0b[107]]],[mxConstants[_0xef0b[108]],mxConstants[_0xef0b[112]]],null,_0xaa22x4);this[_0xef0b[20]](_0xaa22x3,mxResources[_0xef0b[26]](_0xef0b[109]),[mxConstants[_0xef0b[121]],mxConstants[_0xef0b[107]]],[mxConstants[_0xef0b[110]],mxConstants[_0xef0b[110]]],null,_0xaa22x4);this[_0xef0b[20]](_0xaa22x3,mxResources[_0xef0b[26]](_0xef0b[84]),[mxConstants[_0xef0b[121]],mxConstants[_0xef0b[107]]],[mxConstants[_0xef0b[112]],mxConstants[_0xef0b[108]]],null,_0xaa22x4);_0xaa22x3[_0xef0b[24]](_0xaa22x4);this[_0xef0b[20]](_0xaa22x3,mxResources[_0xef0b[26]](_0xef0b[82]),[mxConstants[_0xef0b[122]],mxConstants[_0xef0b[114]]],[mxConstants[_0xef0b[115]],mxConstants[_0xef0b[119]]],null,_0xaa22x4);this[_0xef0b[20]](_0xaa22x3,mxResources[_0xef0b[26]](_0xef0b[116]),[mxConstants[_0xef0b[122]],mxConstants[_0xef0b[114]]],[mxConstants[_0xef0b[117]],mxConstants[_0xef0b[117]]],null,_0xaa22x4);this[_0xef0b[20]](_0xaa22x3,mxResources[_0xef0b[26]](_0xef0b[85]),[mxConstants[_0xef0b[122]],mxConstants[_0xef0b[114]]],[mxConstants[_0xef0b[119]],mxConstants[_0xef0b[115]]],null,_0xaa22x4)})));this[_0xef0b[30]](_0xef0b[123], new Menu(mxUtils[_0xef0b[29]](this,function(_0xaa22x3,_0xaa22x4){_0xaa22x3[_0xef0b[72]](mxResources[_0xef0b[26]](_0xef0b[124]),null,function(){_0xaa22x2[_0xef0b[71]](mxConstants.STYLE_FLIPH,false)},_0xaa22x4);_0xaa22x3[_0xef0b[72]](mxResources[_0xef0b[26]](_0xef0b[125]),null,function(){_0xaa22x2[_0xef0b[71]](mxConstants.STYLE_FLIPV,false)},_0xaa22x4);this[_0xef0b[99]](_0xaa22x3,[_0xef0b[95],_0xef0b[126],_0xef0b[127]],_0xaa22x4)})));this[_0xef0b[30]](_0xef0b[128], new Menu(mxUtils[_0xef0b[29]](this,function(_0xaa22x3,_0xaa22x4){_0xaa22x3[_0xef0b[72]](mxResources[_0xef0b[26]](_0xef0b[106]),null,function(){_0xaa22x2[_0xef0b[129]](mxConstants.ALIGN_LEFT)},_0xaa22x4);_0xaa22x3[_0xef0b[72]](mxResources[_0xef0b[26]](_0xef0b[109]),null,function(){_0xaa22x2[_0xef0b[129]](mxConstants.ALIGN_CENTER)},_0xaa22x4);_0xaa22x3[_0xef0b[72]](mxResources[_0xef0b[26]](_0xef0b[111]),null,function(){_0xaa22x2[_0xef0b[129]](mxConstants.ALIGN_RIGHT)},_0xaa22x4);_0xaa22x3[_0xef0b[24]](_0xaa22x4);_0xaa22x3[_0xef0b[72]](mxResources[_0xef0b[26]](_0xef0b[113]),null,function(){_0xaa22x2[_0xef0b[129]](mxConstants.ALIGN_TOP)},_0xaa22x4);_0xaa22x3[_0xef0b[72]](mxResources[_0xef0b[26]](_0xef0b[116]),null,function(){_0xaa22x2[_0xef0b[129]](mxConstants.ALIGN_MIDDLE)},_0xaa22x4);_0xaa22x3[_0xef0b[72]](mxResources[_0xef0b[26]](_0xef0b[118]),null,function(){_0xaa22x2[_0xef0b[129]](mxConstants.ALIGN_BOTTOM)},_0xaa22x4)})));this[_0xef0b[30]](_0xef0b[130], new Menu(mxUtils[_0xef0b[29]](this,function(_0xaa22x3,_0xaa22x4){_0xaa22x3[_0xef0b[72]](mxResources[_0xef0b[26]](_0xef0b[131]),null,mxUtils[_0xef0b[29]](this,function(){var _0xaa22xc= new mxHierarchicalLayout(_0xaa22x2,mxConstants.DIRECTION_WEST);this[_0xef0b[0]][_0xef0b[132]](_0xaa22xc,true,true)}),_0xaa22x4);_0xaa22x3[_0xef0b[72]](mxResources[_0xef0b[26]](_0xef0b[133]),null,mxUtils[_0xef0b[29]](this,function(){var _0xaa22xc= new mxHierarchicalLayout(_0xaa22x2,mxConstants.DIRECTION_NORTH);this[_0xef0b[0]][_0xef0b[132]](_0xaa22xc,true,true)}),_0xaa22x4)})));this[_0xef0b[30]](_0xef0b[134], new Menu(mxUtils[_0xef0b[29]](this,function(_0xaa22x3,_0xaa22x4){this[_0xef0b[99]](_0xaa22x3,[_0xef0b[135],_0xef0b[95],_0xef0b[136],_0xef0b[137],_0xef0b[95],_0xef0b[138],_0xef0b[139]],_0xaa22x4)})));this[_0xef0b[30]](_0xef0b[140], new Menu(mxUtils[_0xef0b[29]](this,function(_0xaa22x3,_0xaa22x4){this[_0xef0b[99]](_0xaa22x3,[_0xef0b[141],_0xef0b[142],_0xef0b[95]],_0xaa22x4);this[_0xef0b[94]](_0xef0b[130],_0xaa22x3,_0xaa22x4);_0xaa22x3[_0xef0b[24]](_0xaa22x4);this[_0xef0b[99]](_0xaa22x3,[_0xef0b[95],_0xef0b[143],_0xef0b[144],_0xef0b[145]],_0xaa22x4)})));this[_0xef0b[30]](_0xef0b[146], new Menu(mxUtils[_0xef0b[29]](this,function(_0xaa22x3,_0xaa22x4){this[_0xef0b[99]](_0xaa22x3,[_0xef0b[147]],_0xaa22x4);_0xaa22x3[_0xef0b[24]]();var _0xaa22xd=[0.25,0.5,0.75,1,2,4];for(var _0xaa22x6=0;_0xaa22x6<_0xaa22xd[_0xef0b[18]];_0xaa22x6++){(function(_0xaa22xe){_0xaa22x3[_0xef0b[72]]((_0xaa22xe*100)+_0xef0b[148],null,function(){_0xaa22x2[_0xef0b[149]](_0xaa22xe)},_0xaa22x4)})(_0xaa22xd[_0xaa22x6])};this[_0xef0b[99]](_0xaa22x3,[_0xef0b[95],_0xef0b[150],_0xef0b[151],_0xef0b[95],_0xef0b[152],_0xef0b[153],_0xef0b[95],_0xef0b[154],_0xef0b[155]],_0xaa22x4)})));this[_0xef0b[30]](_0xef0b[156], new Menu(mxUtils[_0xef0b[29]](this,function(_0xaa22x3,_0xaa22x4){this[_0xef0b[99]](_0xaa22x3,[_0xef0b[157],_0xef0b[158],_0xef0b[95],_0xef0b[159],_0xef0b[160],_0xef0b[161],_0xef0b[95],_0xef0b[162],_0xef0b[95],_0xef0b[163],_0xef0b[164],_0xef0b[95],_0xef0b[165],_0xef0b[166],_0xef0b[95],_0xef0b[167]],_0xaa22x4)})));this[_0xef0b[30]](_0xef0b[168], new Menu(mxUtils[_0xef0b[29]](this,function(_0xaa22x3,_0xaa22x4){this[_0xef0b[99]](_0xaa22x3,[_0xef0b[169],_0xef0b[170],_0xef0b[95],_0xef0b[171],_0xef0b[172],_0xef0b[173],_0xef0b[174],_0xef0b[95],_0xef0b[175],_0xef0b[95],_0xef0b[176],_0xef0b[177],_0xef0b[178]])})));this[_0xef0b[30]](_0xef0b[179], new Menu(mxUtils[_0xef0b[29]](this,function(_0xaa22x3,_0xaa22x4){this[_0xef0b[99]](_0xaa22x3,[_0xef0b[179],_0xef0b[95],_0xef0b[180]])})))};Menus[_0xef0b[5]][_0xef0b[30]]=function(_0xaa22xf,_0xaa22x3){this[_0xef0b[1]][_0xaa22xf]=_0xaa22x3};Menus[_0xef0b[5]][_0xef0b[26]]=function(_0xaa22xf){return this[_0xef0b[1]][_0xaa22xf]};Menus[_0xef0b[5]][_0xef0b[94]]=function(_0xaa22xf,_0xaa22x3,_0xaa22x4){var _0xaa22xb=this[_0xef0b[26]](_0xaa22xf)[_0xef0b[78]];if(_0xaa22x3[_0xef0b[81]]||_0xaa22xb){var _0xaa22x10=_0xaa22x3[_0xef0b[72]](mxResources[_0xef0b[26]](_0xaa22xf),null,null,_0xaa22x4,null,_0xaa22xb);this[_0xef0b[181]](_0xaa22xf,_0xaa22x3,_0xaa22x10)}};Menus[_0xef0b[5]][_0xef0b[181]]=function(_0xaa22xf,_0xaa22x11,_0xaa22x4){var _0xaa22x3=this[_0xef0b[26]](_0xaa22xf);if(_0xaa22x3!=null&&(_0xaa22x11[_0xef0b[81]]||_0xaa22x3[_0xef0b[78]])){this[_0xef0b[26]](_0xaa22xf)[_0xef0b[182]](_0xaa22x11,_0xaa22x4)}};Menus[_0xef0b[5]][_0xef0b[20]]=function(_0xaa22x3,_0xaa22x12,_0xaa22x13,_0xaa22x14,_0xaa22x15,_0xaa22x4){return _0xaa22x3[_0xef0b[72]](_0xaa22x12,null,mxUtils[_0xef0b[29]](this,function(){var _0xaa22x2=this[_0xef0b[0]][_0xef0b[7]][_0xef0b[6]];_0xaa22x2[_0xef0b[184]]()[_0xef0b[183]]();try{for(var _0xaa22x6=0;_0xaa22x6<_0xaa22x13[_0xef0b[18]];_0xaa22x6++){_0xaa22x2[_0xef0b[185]](_0xaa22x13[_0xaa22x6],_0xaa22x14[_0xaa22x6])}}finally{_0xaa22x2[_0xef0b[184]]()[_0xef0b[186]]()}}),_0xaa22x4,_0xaa22x15)};Menus[_0xef0b[5]][_0xef0b[28]]=function(_0xaa22x3,_0xaa22x12,_0xaa22x16,_0xaa22x17,_0xaa22x18,_0xaa22x4,_0xaa22xb){return _0xaa22x3[_0xef0b[72]](_0xaa22x12,null,mxUtils[_0xef0b[29]](this,function(){var _0xaa22x2=this[_0xef0b[0]][_0xef0b[7]][_0xef0b[6]];var _0xaa22x19=_0xaa22x17;var _0xaa22x1a=_0xaa22x2[_0xef0b[189]]()[_0xef0b[188]](_0xaa22x2[_0xef0b[187]]());if(_0xaa22x1a!=null){_0xaa22x19=_0xaa22x1a[_0xef0b[21]][_0xaa22x18]||_0xaa22x19};_0xaa22x19=mxUtils[_0xef0b[192]](mxResources[_0xef0b[26]](_0xef0b[190])+((_0xaa22x16[_0xef0b[18]]>0)?(_0xef0b[191]+_0xaa22x16):_0xef0b[27]),_0xaa22x19);if(_0xaa22x19!=null&&_0xaa22x19[_0xef0b[18]]>0){_0xaa22x2[_0xef0b[185]](_0xaa22x18,_0xaa22x19)}}),_0xaa22x4,null,_0xaa22xb)};Menus[_0xef0b[5]][_0xef0b[92]]=function(_0xaa22x3,_0xaa22x18,_0xaa22x4){var _0xaa22x1b=this[_0xef0b[0]][_0xef0b[80]][_0xef0b[26]](_0xaa22x18);if(_0xaa22x1b!=null&&(_0xaa22x3[_0xef0b[81]]||_0xaa22x1b[_0xef0b[78]])){var _0xaa22x1c=_0xaa22x3[_0xef0b[72]](_0xaa22x1b[_0xef0b[193]],null,_0xaa22x1b[_0xef0b[194]],_0xaa22x4,null,_0xaa22x1b[_0xef0b[78]]);if(_0xaa22x1b[_0xef0b[195]]&&_0xaa22x1b[_0xef0b[196]]()){this[_0xef0b[197]](_0xaa22x1c)};this[_0xef0b[198]](_0xaa22x1c,_0xaa22x1b);return _0xaa22x1c};return null};Menus[_0xef0b[5]][_0xef0b[198]]=function(_0xaa22x1c,_0xaa22x1b){if(_0xaa22x1b[_0xef0b[199]]!=null){var _0xaa22x1d=_0xaa22x1c[_0xef0b[23]][_0xef0b[22]][_0xef0b[22]];var _0xaa22x1e=document[_0xef0b[201]](_0xef0b[200]);_0xaa22x1e[_0xef0b[21]][_0xef0b[202]]=_0xef0b[203];mxUtils[_0xef0b[204]](_0xaa22x1e,_0xaa22x1b[_0xef0b[199]]);_0xaa22x1d[_0xef0b[205]](_0xaa22x1e)}};Menus[_0xef0b[5]][_0xef0b[197]]=function(_0xaa22x1c){var _0xaa22x1d=_0xaa22x1c[_0xef0b[23]][_0xef0b[22]];_0xaa22x1d[_0xef0b[21]][_0xef0b[206]]=_0xef0b[207]+IMAGE_PATH+_0xef0b[208];_0xaa22x1d[_0xef0b[21]][_0xef0b[209]]=_0xef0b[210];_0xaa22x1d[_0xef0b[21]][_0xef0b[211]]=_0xef0b[212]};Menus[_0xef0b[5]][_0xef0b[99]]=function(_0xaa22x3,_0xaa22x13,_0xaa22x4){for(var _0xaa22x6=0;_0xaa22x6<_0xaa22x13[_0xef0b[18]];_0xaa22x6++){if(_0xaa22x13[_0xaa22x6]==_0xef0b[95]){_0xaa22x3[_0xef0b[24]](_0xaa22x4)}else {this[_0xef0b[92]](_0xaa22x3,_0xaa22x13[_0xaa22x6],_0xaa22x4)}}};Menus[_0xef0b[5]][_0xef0b[213]]=function(_0xaa22x3,_0xaa22x1f,_0xaa22x20){var _0xaa22x2=this[_0xef0b[0]][_0xef0b[7]][_0xef0b[6]];_0xaa22x3[_0xef0b[214]]=true;if(_0xaa22x2[_0xef0b[215]]()){this[_0xef0b[99]](_0xaa22x3,[_0xef0b[169],_0xef0b[170],_0xef0b[95],_0xef0b[173],_0xef0b[95]])}else {this[_0xef0b[99]](_0xaa22x3,[_0xef0b[174],_0xef0b[95],_0xef0b[171],_0xef0b[172],_0xef0b[95],_0xef0b[175]]);if(_0xaa22x2[_0xef0b[216]]()==1&&_0xaa22x2[_0xef0b[184]]()[_0xef0b[217]](_0xaa22x2[_0xef0b[187]]())){this[_0xef0b[99]](_0xaa22x3,[_0xef0b[218]])};_0xaa22x3[_0xef0b[24]]()};if(_0xaa22x2[_0xef0b[216]]()>0){this[_0xef0b[99]](_0xaa22x3,[_0xef0b[141],_0xef0b[142],_0xef0b[95]]);if(_0xaa22x2[_0xef0b[184]]()[_0xef0b[217]](_0xaa22x2[_0xef0b[187]]())){var _0xaa22x21=false;var _0xaa22x1f=_0xaa22x2[_0xef0b[187]]();if(_0xaa22x1f!=null&&_0xaa22x2[_0xef0b[184]]()[_0xef0b[217]](_0xaa22x1f)){var _0xaa22x22=_0xaa22x2[_0xef0b[220]][_0xef0b[219]](_0xaa22x1f);if(_0xaa22x22 instanceof mxEdgeHandler&&_0xaa22x22[_0xef0b[221]]!=null&&_0xaa22x22[_0xef0b[221]][_0xef0b[18]]>2){var _0xaa22x23=_0xaa22x22[_0xef0b[222]]( new mxMouseEvent(_0xaa22x20));var _0xaa22x24=this[_0xef0b[0]][_0xef0b[80]][_0xef0b[26]](_0xef0b[223]);_0xaa22x24[_0xef0b[224]]=_0xaa22x22;_0xaa22x24[_0xef0b[225]]=_0xaa22x23;_0xaa22x21=_0xaa22x23>0&&_0xaa22x23<_0xaa22x22[_0xef0b[221]][_0xef0b[18]]}};this[_0xef0b[99]](_0xaa22x3,[_0xef0b[95],(_0xaa22x21)?_0xef0b[223]:_0xef0b[226]])}else {if(_0xaa22x2[_0xef0b[216]]()>1){_0xaa22x3[_0xef0b[24]]();this[_0xef0b[99]](_0xaa22x3,[_0xef0b[143]])}};_0xaa22x3[_0xef0b[24]]();if(_0xaa22x2[_0xef0b[216]]()==1){var _0xaa22x25=_0xaa22x2[_0xef0b[227]](_0xaa22x2[_0xef0b[187]]());if(_0xaa22x25!=null){this[_0xef0b[99]](_0xaa22x3,[_0xef0b[228]])}}}else {this[_0xef0b[99]](_0xaa22x3,[_0xef0b[95],_0xef0b[176],_0xef0b[177],_0xef0b[95],_0xef0b[178]])}};Menus[_0xef0b[5]][_0xef0b[229]]=function(_0xaa22x26){var _0xaa22x27= new Menubar(this[_0xef0b[0]],_0xaa22x26);var _0xaa22x28=[_0xef0b[156],_0xef0b[168],_0xef0b[146],_0xef0b[91],_0xef0b[93],_0xef0b[140]];for(var _0xaa22x6=0;_0xaa22x6<_0xaa22x28[_0xef0b[18]];_0xaa22x6++){_0xaa22x27[_0xef0b[181]](mxResources[_0xef0b[26]](_0xaa22x28[_0xaa22x6]),this[_0xef0b[26]](_0xaa22x28[_0xaa22x6])[_0xef0b[194]])};return _0xaa22x27};function Menubar(_0xaa22x1,_0xaa22x26){this[_0xef0b[0]]=_0xaa22x1;this[_0xef0b[230]]=_0xaa22x26;mxEvent[_0xef0b[232]](document,mxUtils[_0xef0b[29]](this,function(_0xaa22x20){this[_0xef0b[231]]()}))}Menubar[_0xef0b[5]][_0xef0b[231]]=function(){if(this[_0xef0b[233]]!=null){this[_0xef0b[233]][_0xef0b[231]]()}};Menubar[_0xef0b[5]][_0xef0b[181]]=function(_0xaa22x12,_0xaa22x2a){var _0xaa22x2b=document[_0xef0b[201]](_0xef0b[234]);_0xaa22x2b[_0xef0b[237]](_0xef0b[235],_0xef0b[236]);_0xaa22x2b[_0xef0b[238]]=_0xef0b[239];mxUtils[_0xef0b[204]](_0xaa22x2b,_0xaa22x12);this[_0xef0b[240]](_0xaa22x2b,_0xaa22x2a);this[_0xef0b[230]][_0xef0b[205]](_0xaa22x2b);return _0xaa22x2b};Menubar[_0xef0b[5]][_0xef0b[240]]=function(_0xaa22x2b,_0xaa22x2a){if(_0xaa22x2a!=null){var _0xaa22x2c=true;var _0xaa22x2d=mxUtils[_0xef0b[29]](this,function(_0xaa22x20){if(_0xaa22x2c&&_0xaa22x2b[_0xef0b[78]]==null||_0xaa22x2b[_0xef0b[78]]){this[_0xef0b[0]][_0xef0b[7]][_0xef0b[6]][_0xef0b[241]][_0xef0b[231]]();var _0xaa22x3= new mxPopupMenu(_0xaa22x2a);_0xaa22x3[_0xef0b[242]][_0xef0b[238]]+=_0xef0b[243];_0xaa22x3[_0xef0b[214]]=true;_0xaa22x3[_0xef0b[81]]=true;_0xaa22x3[_0xef0b[244]]=true;_0xaa22x3[_0xef0b[231]]=mxUtils[_0xef0b[29]](this,function(){mxPopupMenu[_0xef0b[5]][_0xef0b[231]][_0xef0b[245]](_0xaa22x3,arguments);_0xaa22x3[_0xef0b[246]]();this[_0xef0b[233]]=null;this[_0xef0b[247]]=null});var _0xaa22x2e=_0xaa22x2b[_0xef0b[248]]+document[_0xef0b[251]](_0xef0b[250])[_0xef0b[249]]+22;var _0xaa22x2f=_0xaa22x2b[_0xef0b[252]]+_0xaa22x2b[_0xef0b[253]]+140;_0xaa22x3[_0xef0b[254]](_0xaa22x2e,_0xaa22x2f,null,_0xaa22x20);this[_0xef0b[233]]=_0xaa22x3;this[_0xef0b[247]]=_0xaa22x2b};_0xaa22x2c=true;mxEvent[_0xef0b[255]](_0xaa22x20)});mxEvent[_0xef0b[257]](_0xaa22x2b,_0xef0b[256],mxUtils[_0xef0b[29]](this,function(_0xaa22x20){if(this[_0xef0b[233]]!=null&&this[_0xef0b[247]]!=_0xaa22x2b){this[_0xef0b[231]]();_0xaa22x2d(_0xaa22x20)}}));mxEvent[_0xef0b[257]](_0xaa22x2b,_0xef0b[258],mxUtils[_0xef0b[29]](this,function(){_0xaa22x2c=this[_0xef0b[247]]!=_0xaa22x2b}));mxEvent[_0xef0b[257]](_0xaa22x2b,_0xef0b[259],_0xaa22x2d)}};function Menu(_0xaa22x2a,_0xaa22xb){mxEventSource[_0xef0b[260]](this);this[_0xef0b[194]]=_0xaa22x2a;this[_0xef0b[78]]=(_0xaa22xb!=null)?_0xaa22xb:true}mxUtils[_0xef0b[261]](Menu,mxEventSource);Menu[_0xef0b[5]][_0xef0b[262]]=function(_0xaa22x19){if(this[_0xef0b[78]]!=_0xaa22x19){this[_0xef0b[78]]=_0xaa22x19;this[_0xef0b[264]]( new mxEventObject(_0xef0b[263]))}};Menu[_0xef0b[5]][_0xef0b[182]]=function(_0xaa22x3,_0xaa22x4){this[_0xef0b[194]](_0xaa22x3,_0xaa22x4)}
\ No newline at end of file
+/**
+ * $Id: Menus.js,v 1.13 2013-02-20 16:21:29 gaudenz Exp $
+ * Copyright (c) 2006-2012, JGraph Ltd
+ */
+/**
+ * Constructs a new graph editor
+ */
+Menus = function(editorUi) {
+       this.editorUi = editorUi;
+       this.menus = new Object();
+       this.init();
+
+       // Pre-fetches checkmark image
+       new Image().src = IMAGE_PATH + '/checkmark.gif';
+};
+
+/**
+ * Adds the label menu items to the given menu and parent.
+ */
+Menus.prototype.init = function() {
+       var graph = this.editorUi.editor.graph;
+
+       this.put('fontFamily', new Menu(mxUtils.bind(this, function(menu, parent) {
+               var fonts = ['Helvetica', 'Verdana', 'Times New Roman', 'Garamond',
+                       'Comic Sans MS',
+                       'Courier New', 'Georgia', 'Lucida Console', 'Tahoma'
+               ];
+
+               for (var i = 0; i < fonts.length; i++) {
+                       var tr = this.styleChange(menu, fonts[i], [mxConstants.STYLE_FONTFAMILY], [
+                               fonts[i]
+                       ], null, parent);
+                       tr.firstChild.nextSibling.style.fontFamily = fonts[i];
+               }
+
+               menu.addSeparator(parent);
+               this.promptChange(menu, mxResources.get('custom'), '', mxConstants.DEFAULT_FONTFAMILY,
+                       mxConstants.STYLE_FONTFAMILY, parent);
+       })));
+       this.put('fontSize', new Menu(mxUtils.bind(this, function(menu, parent) {
+               var sizes = [6, 8, 9, 10, 11, 12, 14, 18, 24, 36, 48, 72];
+
+               for (var i = 0; i < sizes.length; i++) {
+                       this.styleChange(menu, sizes[i], [mxConstants.STYLE_FONTSIZE], [sizes[i]],
+                               null, parent);
+               }
+
+               menu.addSeparator(parent);
+               this.promptChange(menu, mxResources.get('custom'), '(pt)', '12',
+                       mxConstants.STYLE_FONTSIZE, parent);
+       })));
+       this.put('linewidth', new Menu(mxUtils.bind(this, function(menu, parent) {
+               var sizes = [1, 2, 3, 4, 8, 12, 16, 24];
+
+               for (var i = 0; i < sizes.length; i++) {
+                       this.styleChange(menu, sizes[i] + 'px', [mxConstants.STYLE_STROKEWIDTH], [
+                               sizes[i]
+                       ], null, parent);
+               }
+
+               menu.addSeparator(parent);
+               this.promptChange(menu, mxResources.get('custom'), '(px)', '1',
+                       mxConstants.STYLE_STROKEWIDTH, parent);
+       })));
+       this.put('line', new Menu(mxUtils.bind(this, function(menu, parent) {
+               this.styleChange(menu, mxResources.get('straight'), [mxConstants.STYLE_EDGE], [
+                       null
+               ], null, parent);
+               this.styleChange(menu, mxResources.get('entityRelation'), [mxConstants.STYLE_EDGE], [
+                       'entityRelationEdgeStyle'
+               ], null, parent);
+               menu.addSeparator(parent);
+               this.styleChange(menu, mxResources.get('horizontal'), [mxConstants.STYLE_EDGE,
+                       mxConstants.STYLE_ELBOW
+               ], ['elbowEdgeStyle', 'horizontal'], null, parent);
+               this.styleChange(menu, mxResources.get('vertical'), [mxConstants.STYLE_EDGE,
+                       mxConstants.STYLE_ELBOW
+               ], ['elbowEdgeStyle', 'vertical'], null, parent);
+               menu.addSeparator(parent);
+               this.styleChange(menu, mxResources.get('manual'), [mxConstants.STYLE_EDGE], [
+                       'segmentEdgeStyle'
+               ], null, parent);
+               this.styleChange(menu, mxResources.get('automatic'), [mxConstants.STYLE_EDGE], [
+                       'orthogonalEdgeStyle'
+               ], null, parent);
+       })));
+       this.put('lineend', new Menu(mxUtils.bind(this, function(menu, parent) {
+               this.styleChange(menu, mxResources.get('classic'), [mxConstants.STYLE_ENDARROW], [
+                       mxConstants.ARROW_CLASSIC
+               ], null, parent);
+               this.styleChange(menu, mxResources.get('openArrow'), [mxConstants.STYLE_ENDARROW], [
+                       mxConstants.ARROW_OPEN
+               ], null, parent);
+               this.styleChange(menu, mxResources.get('block'), [mxConstants.STYLE_ENDARROW], [
+                       mxConstants.ARROW_BLOCK
+               ], null, parent);
+               menu.addSeparator(parent);
+               this.styleChange(menu, mxResources.get('oval'), [mxConstants.STYLE_ENDARROW], [
+                       mxConstants.ARROW_OVAL
+               ], null, parent);
+               this.styleChange(menu, mxResources.get('diamond'), [mxConstants.STYLE_ENDARROW], [
+                       mxConstants.ARROW_DIAMOND
+               ], null, parent);
+               this.styleChange(menu, mxResources.get('diamondThin'), [mxConstants.STYLE_ENDARROW], [
+                       mxConstants.ARROW_DIAMOND_THIN
+               ], null, parent);
+               menu.addSeparator(parent);
+               this.styleChange(menu, mxResources.get('none'), [mxConstants.STYLE_ENDARROW], [
+                       mxConstants.NONE
+               ], null, parent);
+               menu.addSeparator(parent);
+               menu.addItem(mxResources.get('transparent'), null, function() {
+                       graph.toggleCellStyles('endFill', true);
+               }, parent, null, true);
+               menu.addSeparator(parent);
+               this.promptChange(menu, mxResources.get('size'), '(px)', mxConstants.DEFAULT_MARKERSIZE,
+                       mxConstants.STYLE_ENDSIZE, parent);
+       })));
+       this.put('linestart', new Menu(mxUtils.bind(this, function(menu, parent) {
+               this.styleChange(menu, mxResources.get('classic'), [mxConstants.STYLE_STARTARROW], [
+                       mxConstants.ARROW_CLASSIC
+               ], null, parent);
+               this.styleChange(menu, mxResources.get('openArrow'), [mxConstants.STYLE_STARTARROW], [
+                       mxConstants.ARROW_OPEN
+               ], null, parent);
+               this.styleChange(menu, mxResources.get('block'), [mxConstants.STYLE_STARTARROW], [
+                       mxConstants.ARROW_BLOCK
+               ], null, parent);
+               menu.addSeparator(parent);
+               this.styleChange(menu, mxResources.get('oval'), [mxConstants.STYLE_STARTARROW], [
+                       mxConstants.ARROW_OVAL
+               ], null, parent);
+               this.styleChange(menu, mxResources.get('diamond'), [mxConstants.STYLE_STARTARROW], [
+                       mxConstants.ARROW_DIAMOND
+               ], null, parent);
+               this.styleChange(menu, mxResources.get('diamondThin'), [mxConstants.STYLE_STARTARROW], [
+                       mxConstants.ARROW_DIAMOND_THIN
+               ], null, parent);
+               menu.addSeparator(parent);
+               this.styleChange(menu, mxResources.get('none'), [mxConstants.STYLE_STARTARROW], [
+                       mxConstants.NONE
+               ], null, parent);
+               menu.addSeparator(parent);
+               menu.addItem(mxResources.get('transparent'), null, function() {
+                       graph.toggleCellStyles('startFill', true);
+               }, parent, null, true);
+               menu.addSeparator(parent);
+               this.promptChange(menu, mxResources.get('size'), '(px)', mxConstants.DEFAULT_MARKERSIZE,
+                       mxConstants.STYLE_STARTSIZE, parent);
+       })));
+       this.put('spacing', new Menu(mxUtils.bind(this, function(menu, parent) {
+               // Uses shadow action and line menu to analyze selection
+               var vertexSelected = this.editorUi.actions.get('shadow').enabled;
+               var edgeSelected = this.get('line').enabled;
+
+               if (vertexSelected || menu.showDisabled) {
+                       this.promptChange(menu, mxResources.get('top'), '(px)', '0',
+                               mxConstants.STYLE_SPACING_TOP, parent, vertexSelected);
+                       this.promptChange(menu, mxResources.get('right'), '(px)', '0',
+                               mxConstants.STYLE_SPACING_RIGHT, parent, vertexSelected);
+                       this.promptChange(menu, mxResources.get('bottom'), '(px)', '0',
+                               mxConstants.STYLE_SPACING_BOTTOM, parent, vertexSelected);
+                       this.promptChange(menu, mxResources.get('left'), '(px)', '0',
+                               mxConstants.STYLE_SPACING_LEFT, parent, vertexSelected);
+                       menu.addSeparator(parent);
+                       this.promptChange(menu, mxResources.get('global'), '(px)', '0',
+                               mxConstants.STYLE_SPACING, parent, vertexSelected);
+                       this.promptChange(menu, mxResources.get('perimeter'), '(px)', '0',
+                               mxConstants.STYLE_PERIMETER_SPACING, parent, vertexSelected);
+               }
+
+               if (edgeSelected || menu.showDisabled) {
+                       menu.addSeparator(parent);
+                       this.promptChange(menu, mxResources.get('sourceSpacing'), '(px)', '0',
+                               mxConstants.STYLE_SOURCE_PERIMETER_SPACING, parent, edgeSelected);
+                       this.promptChange(menu, mxResources.get('targetSpacing'), '(px)', '0',
+                               mxConstants.STYLE_TARGET_PERIMETER_SPACING, parent, edgeSelected);
+               }
+       })));
+       this.put('format', new Menu(mxUtils.bind(this, function(menu, parent) {
+               this.addMenuItem(menu, 'style', parent);
+       })));
+       this.put('text', new Menu(mxUtils.bind(this, function(menu, parent) {
+               var enabled = this.get('text').enabled;
+               menu.addSeparator(parent);
+               this.addSubmenu('fontFamily', menu, parent);
+               this.addSubmenu('fontSize', menu, parent);
+               this.addMenuItems(menu, ['-', 'bold', 'italic', 'underline', '-'],
+                       parent);
+               this.addSubmenu('alignment', menu, parent);
+               this.addMenuItem(menu, 'wordWrap', parent);
+               menu.addSeparator(parent);
+               this.promptChange(menu, mxResources.get('textOpacity'), '(%)', '100',
+                       mxConstants.STYLE_TEXT_OPACITY, parent, enabled);
+               menu.addItem(mxResources.get('hide'), null, function() {
+                       graph.toggleCellStyles(mxConstants.STYLE_NOLABEL, false);
+               }, parent, null, enabled);
+       })));
+       this.put('alignment', new Menu(mxUtils.bind(this, function(menu, parent) {
+               this.styleChange(menu, mxResources.get('leftAlign'), [mxConstants.STYLE_ALIGN], [
+                       mxConstants.ALIGN_LEFT
+               ], null, parent);
+               this.styleChange(menu, mxResources.get('center'), [mxConstants.STYLE_ALIGN], [
+                       mxConstants.ALIGN_CENTER
+               ], null, parent);
+               this.styleChange(menu, mxResources.get('rightAlign'), [mxConstants.STYLE_ALIGN], [
+                       mxConstants.ALIGN_RIGHT
+               ], null, parent);
+               menu.addSeparator(parent);
+               this.styleChange(menu, mxResources.get('topAlign'), [mxConstants.STYLE_VERTICAL_ALIGN], [
+                       mxConstants.ALIGN_TOP
+               ], null, parent);
+               this.styleChange(menu, mxResources.get('middle'), [mxConstants.STYLE_VERTICAL_ALIGN], [
+                       mxConstants.ALIGN_MIDDLE
+               ], null, parent);
+               this.styleChange(menu, mxResources.get('bottomAlign'), [mxConstants.STYLE_VERTICAL_ALIGN], [
+                       mxConstants.ALIGN_BOTTOM
+               ], null, parent);
+               menu.addSeparator(parent);
+               this.addSubmenu('position', menu, parent);
+               this.addSubmenu('spacing', menu, parent);
+               menu.addSeparator(parent);
+               var enabled = this.get('text').enabled;
+               menu.addItem(mxResources.get('vertical'), null, function() {
+                       graph.toggleCellStyles(mxConstants.STYLE_HORIZONTAL, true);
+               }, parent, null, enabled);
+       })));
+       this.put('position', new Menu(mxUtils.bind(this, function(menu, parent) {
+               this.styleChange(menu, mxResources.get('left'), [mxConstants.STYLE_LABEL_POSITION,
+                       mxConstants.STYLE_ALIGN
+               ], [mxConstants.ALIGN_LEFT, mxConstants.ALIGN_RIGHT], null, parent);
+               this.styleChange(menu, mxResources.get('center'), [mxConstants.STYLE_LABEL_POSITION,
+                       mxConstants.STYLE_ALIGN
+               ], [mxConstants.ALIGN_CENTER, mxConstants.ALIGN_CENTER], null, parent);
+               this.styleChange(menu, mxResources.get('right'), [mxConstants.STYLE_LABEL_POSITION,
+                       mxConstants.STYLE_ALIGN
+               ], [mxConstants.ALIGN_RIGHT, mxConstants.ALIGN_LEFT], null, parent);
+               menu.addSeparator(parent);
+               this.styleChange(menu, mxResources.get('top'), [mxConstants.STYLE_VERTICAL_LABEL_POSITION,
+                       mxConstants.STYLE_VERTICAL_ALIGN
+               ], [mxConstants.ALIGN_TOP, mxConstants.ALIGN_BOTTOM], null, parent);
+               this.styleChange(menu, mxResources.get('middle'), [mxConstants.STYLE_VERTICAL_LABEL_POSITION,
+                       mxConstants.STYLE_VERTICAL_ALIGN
+               ], [mxConstants.ALIGN_MIDDLE, mxConstants.ALIGN_MIDDLE], null, parent);
+               this.styleChange(menu, mxResources.get('bottom'), [mxConstants.STYLE_VERTICAL_LABEL_POSITION,
+                       mxConstants.STYLE_VERTICAL_ALIGN
+               ], [mxConstants.ALIGN_BOTTOM, mxConstants.ALIGN_TOP], null, parent);
+       })));
+       this.put('direction', new Menu(mxUtils.bind(this, function(menu, parent) {
+               menu.addItem(mxResources.get('flipH'), null, function() {
+                       graph.toggleCellStyles(mxConstants.STYLE_FLIPH, false);
+               }, parent);
+               menu.addItem(mxResources.get('flipV'), null, function() {
+                       graph.toggleCellStyles(mxConstants.STYLE_FLIPV, false);
+               }, parent);
+               this.addMenuItems(menu, ['-', 'tilt', 'rotation'], parent);
+       })));
+       this.put('align', new Menu(mxUtils.bind(this, function(menu, parent) {
+               menu.addItem(mxResources.get('leftAlign'), null, function() {
+                       graph.alignCells(mxConstants.ALIGN_LEFT);
+               }, parent);
+               menu.addItem(mxResources.get('center'), null, function() {
+                       graph.alignCells(mxConstants.ALIGN_CENTER);
+               }, parent);
+               menu.addItem(mxResources.get('rightAlign'), null, function() {
+                       graph.alignCells(mxConstants.ALIGN_RIGHT);
+               }, parent);
+               menu.addSeparator(parent);
+               menu.addItem(mxResources.get('topAlign'), null, function() {
+                       graph.alignCells(mxConstants.ALIGN_TOP);
+               }, parent);
+               menu.addItem(mxResources.get('middle'), null, function() {
+                       graph.alignCells(mxConstants.ALIGN_MIDDLE);
+               }, parent);
+               menu.addItem(mxResources.get('bottomAlign'), null, function() {
+                       graph.alignCells(mxConstants.ALIGN_BOTTOM);
+               }, parent);
+       })));
+       this.put('layout', new Menu(mxUtils.bind(this, function(menu, parent) {
+               // menu.addItem(mxResources.get('horizontalTree'), null, mxUtils.bind(this, function()
+               // {
+               //      if (!graph.isSelectionEmpty())
+               //      {
+               //              var layout = new mxCompactTreeLayout(graph, true);
+               //              layout.edgeRouting = false;
+               //              layout.levelDistance = 30;
+               //              this.editorUi.executeLayout(layout, true, true);
+               //      }
+               // }), parent);
+               // menu.addItem(mxResources.get('verticalTree'), null, mxUtils.bind(this, function()
+               // {
+               //      if (!graph.isSelectionEmpty())
+               //      {
+               //              var layout = new mxCompactTreeLayout(graph, false);
+               //              layout.edgeRouting = false;
+               //              layout.levelDistance = 30;
+               //              this.editorUi.executeLayout(layout, true, true);
+               //      }
+               // }), parent);
+               // menu.addSeparator(parent);
+               menu.addItem(mxResources.get('horizontalFlow'), null, mxUtils.bind(this,
+                       function() {
+                               var layout = new mxHierarchicalLayout(graph, mxConstants.DIRECTION_WEST);
+                               this.editorUi.executeLayout(layout, true, true);
+                       }), parent);
+               menu.addItem(mxResources.get('verticalFlow'), null, mxUtils.bind(this,
+                       function() {
+                               var layout = new mxHierarchicalLayout(graph, mxConstants.DIRECTION_NORTH);
+                               this.editorUi.executeLayout(layout, true, true);
+                       }), parent);
+               //menu.addSeparator(parent);
+               // menu.addItem(mxResources.get('organic'), null, mxUtils.bind(this, function()
+               // {
+               //      var layout = new mxFastOrganicLayout(graph);
+               //              this.editorUi.executeLayout(layout, true, true);
+               // }), parent);
+               // menu.addItem(mxResources.get('circle'), null, mxUtils.bind(this, function()
+               // {
+               //      var layout = new mxCircleLayout(graph);
+               //              this.editorUi.executeLayout(layout, true, true, graph.getSelectionCells());
+               // }), parent);
+       })));
+       this.put('navigation', new Menu(mxUtils.bind(this, function(menu, parent) {
+               this.addMenuItems(menu, ['home', '-', 'exitGroup', 'enterGroup', '-',
+                       'expand', 'collapse'
+               ], parent);
+       })));
+       this.put('arrange', new Menu(mxUtils.bind(this, function(menu, parent) {
+               this.addMenuItems(menu, ['toFront', 'toBack', '-'], parent);
+               //this.addSubmenu('direction', menu, parent);
+               this.addSubmenu('layout', menu, parent);
+               //this.addSubmenu('align', menu, parent);
+               menu.addSeparator(parent);
+               //this.addSubmenu('navigation', menu, parent);
+               this.addMenuItems(menu, ['-', 'group', 'ungroup', 'removeFromGroup'],
+                       parent);
+               //this.addMenuItems(menu, ['-', 'group', 'ungroup', 'removeFromGroup', '-', 'autosize'], parent);
+       })));
+       this.put('view', new Menu(mxUtils.bind(this, function(menu, parent) {
+               this.addMenuItems(menu, ['actualSize'], parent);
+               menu.addSeparator();
+               var scales = [0.25, 0.5, 0.75, 1, 2, 4];
+
+               for (var i = 0; i < scales.length; i++) {
+                       (function(scale) {
+                               menu.addItem((scale * 100) + '%', null, function() {
+                                       graph.zoomTo(scale);
+                               }, parent);
+                       })(scales[i]);
+               }
+
+               this.addMenuItems(menu, ['-', 'zoomIn', 'zoomOut', '-', 'fitWindow',
+                       'customZoom', '-', 'fitPage', 'fitPageWidth'
+               ], parent);
+       })));
+       this.put('file', new Menu(mxUtils.bind(this, function(menu, parent) {
+               this.addMenuItems(menu, ['new', 'open', '-', 'save', 'saveAs', 'publish',
+                       '-', 'variable', '-', 'import', 'export', '-', 'editFile', 'rename', '-',
+                       'print'
+               ], parent);
+       })));
+       this.put('edit', new Menu(mxUtils.bind(this, function(menu, parent) {
+               this.addMenuItems(menu, ['undo', 'redo', '-', 'cut', 'copy', 'paste',
+                       'delete', '-', 'duplicate', '-',
+                       'selectVertices', 'selectEdges', 'selectAll'
+               ]);
+       })));
+       this.put('help', new Menu(mxUtils.bind(this, function(menu, parent) {
+               this.addMenuItems(menu, ['help', '-', 'about']);
+       })));
+};
+
+/**
+ * Adds the label menu items to the given menu and parent.
+ */
+Menus.prototype.put = function(name, menu) {
+       this.menus[name] = menu;
+};
+
+/**
+ * Adds the label menu items to the given menu and parent.
+ */
+Menus.prototype.get = function(name) {
+       return this.menus[name];
+};
+
+/**
+ * Adds the given submenu.
+ */
+Menus.prototype.addSubmenu = function(name, menu, parent) {
+       var enabled = this.get(name).enabled;
+
+       if (menu.showDisabled || enabled) {
+               var submenu = menu.addItem(mxResources.get(name), null, null, parent, null,
+                       enabled);
+               this.addMenu(name, menu, submenu);
+       }
+};
+
+/**
+ * Adds the label menu items to the given menu and parent.
+ */
+Menus.prototype.addMenu = function(name, popupMenu, parent) {
+       var menu = this.get(name);
+
+       if (menu != null && (popupMenu.showDisabled || menu.enabled)) {
+               this.get(name).execute(popupMenu, parent);
+       }
+};
+
+/**
+ * Adds a style change item to the given menu.
+ */
+Menus.prototype.styleChange = function(menu, label, keys, values, sprite,
+       parent) {
+       return menu.addItem(label, null, mxUtils.bind(this, function() {
+               var graph = this.editorUi.editor.graph;
+
+               graph.getModel().beginUpdate();
+               try {
+                       for (var i = 0; i < keys.length; i++) {
+                               graph.setCellStyles(keys[i], values[i]);
+                       }
+               } finally {
+                       graph.getModel().endUpdate();
+               }
+       }), parent, sprite);
+};
+
+/**
+ * Adds a style change item with a prompt to the given menu.
+ */
+Menus.prototype.promptChange = function(menu, label, hint, defaultValue, key,
+       parent, enabled) {
+       return menu.addItem(label, null, mxUtils.bind(this, function() {
+               var graph = this.editorUi.editor.graph;
+               var value = defaultValue;
+               var state = graph.getView().getState(graph.getSelectionCell());
+
+               if (state != null) {
+                       value = state.style[key] || value;
+               }
+
+               value = mxUtils.prompt(mxResources.get('enterValue') + ((hint.length > 0) ?
+                       (' ' + hint) : ''), value);
+
+               if (value != null && value.length > 0) {
+                       graph.setCellStyles(key, value);
+               }
+       }), parent, null, enabled);
+};
+
+/**
+ * Creates the keyboard event handler for the current graph and history.
+ */
+Menus.prototype.addMenuItem = function(menu, key, parent) {
+       var action = this.editorUi.actions.get(key);
+
+       if (action != null && (menu.showDisabled || action.enabled)) {
+               var item = menu.addItem(action.label, null, action.funct, parent, null,
+                       action.enabled);
+
+               // Adds checkmark image
+               if (action.toggleAction && action.isSelected()) {
+                       this.addCheckmark(item);
+               }
+
+               this.addShortcut(item, action);
+
+               return item;
+       }
+
+       return null;
+};
+
+/**
+ * Adds a checkmark to the given menuitem.
+ */
+Menus.prototype.addShortcut = function(item, action) {
+       if (action.shortcut != null) {
+               var td = item.firstChild.nextSibling.nextSibling;
+               var span = document.createElement('span');
+               span.style.color = 'gray';
+               mxUtils.write(span, action.shortcut);
+               td.appendChild(span);
+       }
+};
+
+/**
+ * Adds a checkmark to the given menuitem.
+ */
+Menus.prototype.addCheckmark = function(item) {
+       var td = item.firstChild.nextSibling;
+       td.style.backgroundImage = 'url(' + IMAGE_PATH + '/checkmark.gif)';
+       td.style.backgroundRepeat = 'no-repeat';
+       td.style.backgroundPosition = '2px 50%';
+};
+
+/**
+ * Creates the keyboard event handler for the current graph and history.
+ */
+Menus.prototype.addMenuItems = function(menu, keys, parent) {
+       for (var i = 0; i < keys.length; i++) {
+               if (keys[i] == '-') {
+                       menu.addSeparator(parent);
+               } else {
+                       this.addMenuItem(menu, keys[i], parent);
+               }
+       }
+};
+
+/**
+ * Creates the keyboard event handler for the current graph and history.
+ */
+Menus.prototype.createPopupMenu = function(menu, cell, evt) {
+       var graph = this.editorUi.editor.graph;
+       menu.smartSeparators = true;
+
+       if (graph.isSelectionEmpty()) {
+               this.addMenuItems(menu, ['undo', 'redo', '-', 'paste', '-']);
+       } else {
+               this.addMenuItems(menu, ['delete', '-', 'cut', 'copy', '-', 'duplicate']);
+
+               if (graph.getSelectionCount() == 1 && graph.getModel().isEdge(graph.getSelectionCell())) {
+                       this.addMenuItems(menu, ['setAsDefaultEdge']);
+               }
+
+               menu.addSeparator();
+       }
+
+       if (graph.getSelectionCount() > 0) {
+               this.addMenuItems(menu, ['toFront', 'toBack', '-']);
+
+               if (graph.getModel().isEdge(graph.getSelectionCell())) {
+                       var isWaypoint = false;
+                       var cell = graph.getSelectionCell();
+
+                       if (cell != null && graph.getModel().isEdge(cell)) {
+                               var handler = graph.selectionCellsHandler.getHandler(cell);
+
+                               if (handler instanceof mxEdgeHandler && handler.bends != null && handler.bends
+                                       .length > 2) {
+                                       var index = handler.getHandleForEvent(new mxMouseEvent(evt));
+
+                                       // Configures removeWaypoint action before execution
+                                       var rmWaypointAction = this.editorUi.actions.get('removeWaypoint');
+                                       rmWaypointAction.handler = handler;
+                                       rmWaypointAction.index = index;
+
+                                       isWaypoint = index > 0 && index < handler.bends.length;
+                               }
+                       }
+
+                       this.addMenuItems(menu, ['-', (isWaypoint) ? 'removeWaypoint' :
+                               'addWaypoint'
+                       ]);
+               } else if (graph.getSelectionCount() > 1) {
+                       menu.addSeparator();
+                       this.addMenuItems(menu, ['group']);
+               }
+
+               menu.addSeparator();
+
+               if (graph.getSelectionCount() == 1) {
+                       var link = graph.getLinkForCell(graph.getSelectionCell());
+
+                       if (link != null) {
+                               this.addMenuItems(menu, ['openLink']);
+                       }
+               }
+       } else {
+               this.addMenuItems(menu, ['-', 'selectVertices', 'selectEdges', '-',
+                       'selectAll'
+               ]);
+       }
+};
+
+/**
+ * Creates the keyboard event handler for the current graph and history.
+ */
+Menus.prototype.createMenubar = function(container) {
+       var menubar = new Menubar(this.editorUi, container);
+       // var menus = ['file', 'edit', 'view', 'format', 'text', 'arrange',
+       //      'help'
+       // ];
+       var menus = ['file', 'edit', 'view', 'format', 'text', 'arrange'];
+       for (var i = 0; i < menus.length; i++) {
+               menubar.addMenu(mxResources.get(menus[i]), this.get(menus[i]).funct);
+       }
+
+       return menubar;
+};
+
+/**
+ * Construcs a new menubar for the given editor.
+ */
+function Menubar(editorUi, container) {
+       this.editorUi = editorUi;
+       this.container = container;
+
+       // Global handler to hide the current menu
+       mxEvent.addGestureListeners(document, mxUtils.bind(this, function(evt) {
+               this.hideMenu();
+       }));
+};
+
+/**
+ * Adds the menubar elements.
+ */
+Menubar.prototype.hideMenu = function() {
+       if (this.currentMenu != null) {
+               this.currentMenu.hideMenu();
+       }
+};
+
+/**
+ * Adds a submenu to this menubar.
+ */
+Menubar.prototype.addMenu = function(label, funct) {
+       var elt = document.createElement('a');
+       elt.setAttribute('href', 'javascript:void(0);');
+       elt.className = 'geItem';
+       mxUtils.write(elt, label);
+
+       this.addMenuHandler(elt, funct);
+       this.container.appendChild(elt);
+
+       return elt;
+};
+
+/**
+ * Adds a handler for showing a menu in the given element.
+ */
+Menubar.prototype.addMenuHandler = function(elt, funct) {
+       if (funct != null) {
+               var show = true;
+
+               var clickHandler = mxUtils.bind(this, function(evt) {
+                       if (show && elt.enabled == null || elt.enabled) {
+                               this.editorUi.editor.graph.panningHandler.hideMenu();
+                               var menu = new mxPopupMenu(funct);
+                               menu.div.className += ' geMenubarMenu';
+                               menu.smartSeparators = true;
+                               menu.showDisabled = true;
+                               menu.autoExpand = true;
+
+                               // Disables autoexpand and destroys menu when hidden
+                               menu.hideMenu = mxUtils.bind(this, function() {
+                                       mxPopupMenu.prototype.hideMenu.apply(menu, arguments);
+                                       menu.destroy();
+                                       this.currentMenu = null;
+                                       this.currentElt = null;
+                               });
+
+                               // Added width of the page-sidebar
+                               var x = elt.offsetLeft + document.getElementById('page-sidebar').offsetWidth +
+                                       22;
+                               // Added static height of the page-navbar
+                               var y = elt.offsetTop + elt.offsetHeight + 140;
+
+                               menu.popup(x, y, null, evt);
+
+                               //menu.popup(elt.offsetLeft + 4, elt.offsetTop + elt.offsetHeight + 4, null, evt);
+                               this.currentMenu = menu;
+                               this.currentElt = elt;
+                       }
+
+                       show = true;
+                       mxEvent.consume(evt);
+               });
+
+               // Shows menu automatically while in expanded state
+               mxEvent.addListener(elt, 'mousemove', mxUtils.bind(this, function(evt) {
+                       if (this.currentMenu != null && this.currentElt != elt) {
+                               this.hideMenu();
+                               clickHandler(evt);
+                       }
+               }));
+
+               // Hides menu if already showing
+               mxEvent.addListener(elt, 'mousedown', mxUtils.bind(this, function() {
+                       show = this.currentElt != elt;
+               }));
+
+               mxEvent.addListener(elt, 'click', clickHandler);
+       }
+};
+
+/**
+ * Constructs a new action for the given parameters.
+ */
+function Menu(funct, enabled) {
+       mxEventSource.call(this);
+       this.funct = funct;
+       this.enabled = (enabled != null) ? enabled : true;
+};
+
+// Menu inherits from mxEventSource
+mxUtils.extend(Menu, mxEventSource);
+
+/**
+ * Sets the enabled state of the action and fires a stateChanged event.
+ */
+Menu.prototype.setEnabled = function(value) {
+       if (this.enabled != value) {
+               this.enabled = value;
+               this.fireEvent(new mxEventObject('stateChanged'));
+       }
+};
+
+/**
+ * Sets the enabled state of the action and fires a stateChanged event.
+ */
+Menu.prototype.execute = function(menu, parent) {
+       this.funct(menu, parent);
+};
index 4afc1cb..42e13ca 100644 (file)
@@ -1 +1,1234 @@
-var _0xf2e3=["\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x63\x6F\x6E\x73\x74\x72\x75\x63\x74\x6F\x72","\x73\x69\x7A\x65","\x72\x65\x64\x72\x61\x77\x50\x61\x74\x68","\x73\x74\x79\x6C\x65","\x67\x65\x74\x56\x61\x6C\x75\x65","\x6D\x69\x6E","\x6D\x6F\x76\x65\x54\x6F","\x6C\x69\x6E\x65\x54\x6F","\x65\x6E\x64","\x63\x6C\x6F\x73\x65","\x63\x75\x62\x65","\x64\x65\x66\x61\x75\x6C\x74\x53\x68\x61\x70\x65\x73","\x6E\x6F\x74\x65","\x74\x61\x62\x57\x69\x64\x74\x68","\x74\x61\x62\x48\x65\x69\x67\x68\x74","\x74\x61\x62\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x72\x69\x67\x68\x74","\x6C\x65\x66\x74","\x66\x6F\x6C\x64\x65\x72","\x63\x61\x72\x64","\x71\x75\x61\x64\x54\x6F","\x74\x61\x70\x65","\x73\x74\x65\x70","\x63\x61\x6C\x6C","\x65\x78\x74\x65\x6E\x64","\x69\x73\x48\x74\x6D\x6C\x41\x6C\x6C\x6F\x77\x65\x64","\x70\x61\x69\x6E\x74\x46\x6F\x72\x65\x67\x72\x6F\x75\x6E\x64","\x62\x65\x67\x69\x6E","\x73\x74\x72\x6F\x6B\x65","\x61\x70\x70\x6C\x79","\x70\x6C\x75\x73","\x64\x6F\x75\x62\x6C\x65","\x73\x74\x72\x6F\x6B\x65\x77\x69\x64\x74\x68","\x6D\x61\x78","\x70\x61\x69\x6E\x74\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64","\x73\x65\x74\x44\x61\x73\x68\x65\x64","\x73\x79\x6D\x62\x6F\x6C","\x41\x6C\x69\x67\x6E","\x56\x65\x72\x74\x69\x63\x61\x6C\x41\x6C\x69\x67\x6E","\x57\x69\x64\x74\x68","\x48\x65\x69\x67\x68\x74","\x53\x70\x61\x63\x69\x6E\x67","\x41\x72\x63\x53\x70\x61\x63\x69\x6E\x67","\x67\x65\x74\x41\x72\x63\x53\x69\x7A\x65","\x41\x4C\x49\x47\x4E\x5F\x43\x45\x4E\x54\x45\x52","\x41\x4C\x49\x47\x4E\x5F\x52\x49\x47\x48\x54","\x41\x4C\x49\x47\x4E\x5F\x4D\x49\x44\x44\x4C\x45","\x41\x4C\x49\x47\x4E\x5F\x42\x4F\x54\x54\x4F\x4D","\x73\x61\x76\x65","\x70\x61\x69\x6E\x74\x56\x65\x72\x74\x65\x78\x53\x68\x61\x70\x65","\x72\x65\x73\x74\x6F\x72\x65","\x65\x78\x74","\x6D\x65\x73\x73\x61\x67\x65","\x61\x64\x64\x50\x69\x70\x65","\x63\x75\x72\x76\x65\x54\x6F","\x75\x6D\x6C\x41\x63\x74\x6F\x72","\x6C\x6F\x6C\x6C\x69\x70\x6F\x70","\x6A\x65\x74\x74\x79\x57\x69\x64\x74\x68","\x6A\x65\x74\x74\x79\x48\x65\x69\x67\x68\x74","\x63\x6F\x6D\x70\x6F\x6E\x65\x6E\x74","\x6F\x75\x74\x65\x72\x53\x74\x72\x6F\x6B\x65","\x65\x6C\x6C\x69\x70\x73\x65","\x66\x69\x6C\x6C\x41\x6E\x64\x53\x74\x72\x6F\x6B\x65","\x73\x65\x74\x53\x68\x61\x64\x6F\x77","\x65\x6E\x64\x53\x74\x61\x74\x65","\x73\x74\x61\x72\x74\x53\x74\x61\x74\x65","\x69\x6E\x69\x74\x53\x68\x61\x70\x65\x73","\x78","\x79","\x77\x69\x64\x74\x68","\x68\x65\x69\x67\x68\x74","\x73\x68\x61\x70\x65\x73","\x70\x61\x69\x6E\x74\x45\x64\x67\x65\x53\x68\x61\x70\x65","\x6C\x65\x6E\x67\x74\x68","\x73\x71\x72\x74","\x6C\x69\x6E\x6B","\x64\x61\x73\x68","\x61\x64\x64\x4D\x61\x72\x6B\x65\x72","\x75\x6E\x64\x65\x66\x69\x6E\x65\x64","\x75\x73\x65\x47\x72\x69\x64\x46\x6F\x72\x53\x70\x65\x63\x69\x61\x6C\x48\x61\x6E\x64\x6C\x65","\x69\x6E\x69\x74","\x68\x6F\x72\x69\x7A\x6F\x6E\x74\x61\x6C","\x73\x74\x61\x74\x65","\x67\x72\x61\x70\x68","\x76\x69\x65\x77","\x68\x61\x6E\x64\x6C\x65\x49\x6D\x61\x67\x65","\x73\x70\x65\x63\x69\x61\x6C\x48\x61\x6E\x64\x6C\x65","\x73\x72\x63","\x64\x69\x61\x6C\x65\x63\x74","\x44\x49\x41\x4C\x45\x43\x54\x5F\x53\x56\x47","\x44\x49\x41\x4C\x45\x43\x54\x5F\x56\x4D\x4C","\x67\x65\x74\x4F\x76\x65\x72\x6C\x61\x79\x50\x61\x6E\x65","\x67\x65\x74\x56\x69\x65\x77","\x63\x75\x72\x73\x6F\x72","\x6E\x6F\x64\x65","\x67\x65\x74\x53\x70\x65\x63\x69\x61\x6C\x48\x61\x6E\x64\x6C\x65\x43\x75\x72\x73\x6F\x72","\x72\x65\x64\x69\x72\x65\x63\x74\x4D\x6F\x75\x73\x65\x45\x76\x65\x6E\x74\x73","\x64\x65\x66\x61\x75\x6C\x74","\x72\x65\x64\x72\x61\x77","\x62\x6F\x75\x6E\x64\x73","\x67\x65\x74\x53\x70\x65\x63\x69\x61\x6C\x48\x61\x6E\x64\x6C\x65\x42\x6F\x75\x6E\x64\x73","\x64\x65\x73\x74\x72\x6F\x79","\x67\x65\x74\x48\x61\x6E\x64\x6C\x65\x46\x6F\x72\x45\x76\x65\x6E\x74","\x69\x73\x53\x6F\x75\x72\x63\x65","\x6D\x6F\x75\x73\x65\x4D\x6F\x76\x65","\x69\x73\x43\x6F\x6E\x73\x75\x6D\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74\x47\x72\x61\x70\x68\x58","\x67\x65\x74\x47\x72\x61\x70\x68\x59","\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x50\x6F\x69\x6E\x74","\x67\x65\x74\x45\x76\x65\x6E\x74","\x69\x73\x47\x72\x69\x64\x45\x6E\x61\x62\x6C\x65\x64\x45\x76\x65\x6E\x74","\x73\x63\x61\x6C\x65","\x73\x6E\x61\x70","\x75\x70\x64\x61\x74\x65\x53\x74\x79\x6C\x65","\x6D\x6F\x76\x65\x53\x69\x7A\x65\x72\x54\x6F","\x63\x65\x6C\x6C\x52\x65\x6E\x64\x65\x72\x65\x72","\x63\x6F\x6E\x73\x75\x6D\x65","\x6D\x6F\x75\x73\x65\x55\x70","\x61\x70\x70\x6C\x79\x53\x74\x79\x6C\x65","\x72\x65\x73\x65\x74","\x67\x65\x74\x53\x68\x61\x70\x65\x52\x6F\x74\x61\x74\x69\x6F\x6E","\x73\x68\x61\x70\x65","\x74\x6F\x52\x61\x64\x69\x61\x6E\x73","\x63\x6F\x73","\x73\x69\x6E","\x69\x73\x50\x61\x69\x6E\x74\x42\x6F\x75\x6E\x64\x73\x49\x6E\x76\x65\x72\x74\x65\x64","\x67\x65\x74\x53\x70\x65\x63\x69\x61\x6C\x48\x61\x6E\x64\x6C\x65\x50\x6F\x69\x6E\x74","\x66\x6C\x69\x70\x48","\x66\x6C\x69\x70\x56","\x67\x65\x74\x43\x65\x6E\x74\x65\x72\x58","\x67\x65\x74\x43\x65\x6E\x74\x65\x72\x59","\x67\x65\x74\x52\x6F\x74\x61\x74\x65\x64\x50\x6F\x69\x6E\x74","\x75\x70\x64\x61\x74\x65\x53\x74\x79\x6C\x65\x55\x6E\x72\x6F\x74\x61\x74\x65\x64","\x72\x6F\x75\x6E\x64","\x67\x65\x74\x4D\x6F\x64\x65\x6C","\x62\x65\x67\x69\x6E\x55\x70\x64\x61\x74\x65","\x63\x65\x6C\x6C","\x73\x65\x74\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65\x73","\x65\x6E\x64\x55\x70\x64\x61\x74\x65","\x73\x74\x61\x72\x74\x53\x69\x7A\x65","\x64\x65\x66\x61\x75\x6C\x74\x56\x61\x6C\x75\x65","\x73\x63\x61\x6C\x65\x46\x61\x63\x74\x6F\x72","\x63\x72\x65\x61\x74\x65\x48\x61\x6E\x64\x6C\x65\x72","\x67\x65\x74\x41\x6C\x6C\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74\x73","\x73\x74\x65\x6E\x63\x69\x6C","\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74\x73"];(function(){function _0x5b71x1(){}_0x5b71x1[_0xf2e3[0]]= new mxCylinder();_0x5b71x1[_0xf2e3[0]][_0xf2e3[1]]=_0x5b71x1;_0x5b71x1[_0xf2e3[0]][_0xf2e3[2]]=20;_0x5b71x1[_0xf2e3[0]][_0xf2e3[3]]=function(_0x5b71x2,_0x5b71x3,_0x5b71x4,_0x5b71x5,_0x5b71x6,_0x5b71x7){var _0x5b71x8=Math[_0xf2e3[6]](_0x5b71x5,Math[_0xf2e3[6]](_0x5b71x6,mxUtils[_0xf2e3[5]](this[_0xf2e3[4]],_0xf2e3[2],this[_0xf2e3[2]])));if(_0x5b71x7){_0x5b71x2[_0xf2e3[7]](_0x5b71x8,_0x5b71x6);_0x5b71x2[_0xf2e3[8]](_0x5b71x8,_0x5b71x8);_0x5b71x2[_0xf2e3[8]](0,0);_0x5b71x2[_0xf2e3[7]](_0x5b71x8,_0x5b71x8);_0x5b71x2[_0xf2e3[8]](_0x5b71x5,_0x5b71x8);_0x5b71x2[_0xf2e3[9]]()}else {_0x5b71x2[_0xf2e3[7]](0,0);_0x5b71x2[_0xf2e3[8]](_0x5b71x5-_0x5b71x8,0);_0x5b71x2[_0xf2e3[8]](_0x5b71x5,_0x5b71x8);_0x5b71x2[_0xf2e3[8]](_0x5b71x5,_0x5b71x6);_0x5b71x2[_0xf2e3[8]](_0x5b71x8,_0x5b71x6);_0x5b71x2[_0xf2e3[8]](0,_0x5b71x6-_0x5b71x8);_0x5b71x2[_0xf2e3[8]](0,0);_0x5b71x2[_0xf2e3[10]]();_0x5b71x2[_0xf2e3[9]]()}};mxCellRenderer[_0xf2e3[0]][_0xf2e3[12]][_0xf2e3[11]]=_0x5b71x1;function _0x5b71x9(){}_0x5b71x9[_0xf2e3[0]]= new mxCylinder();_0x5b71x9[_0xf2e3[0]][_0xf2e3[1]]=_0x5b71x9;_0x5b71x9[_0xf2e3[0]][_0xf2e3[2]]=30;_0x5b71x9[_0xf2e3[0]][_0xf2e3[3]]=function(_0x5b71x2,_0x5b71x3,_0x5b71x4,_0x5b71x5,_0x5b71x6,_0x5b71x7){var _0x5b71x8=Math[_0xf2e3[6]](_0x5b71x5,Math[_0xf2e3[6]](_0x5b71x6,mxUtils[_0xf2e3[5]](this[_0xf2e3[4]],_0xf2e3[2],this[_0xf2e3[2]])));if(_0x5b71x7){_0x5b71x2[_0xf2e3[7]](_0x5b71x5-_0x5b71x8,0);_0x5b71x2[_0xf2e3[8]](_0x5b71x5-_0x5b71x8,_0x5b71x8);_0x5b71x2[_0xf2e3[8]](_0x5b71x5,_0x5b71x8);_0x5b71x2[_0xf2e3[9]]()}else {_0x5b71x2[_0xf2e3[7]](0,0);_0x5b71x2[_0xf2e3[8]](_0x5b71x5-_0x5b71x8,0);_0x5b71x2[_0xf2e3[8]](_0x5b71x5,_0x5b71x8);_0x5b71x2[_0xf2e3[8]](_0x5b71x5,_0x5b71x6);_0x5b71x2[_0xf2e3[8]](0,_0x5b71x6);_0x5b71x2[_0xf2e3[8]](0,0);_0x5b71x2[_0xf2e3[10]]();_0x5b71x2[_0xf2e3[9]]()}};mxCellRenderer[_0xf2e3[0]][_0xf2e3[12]][_0xf2e3[13]]=_0x5b71x9;function _0x5b71xa(){}_0x5b71xa[_0xf2e3[0]]= new mxCylinder();_0x5b71xa[_0xf2e3[0]][_0xf2e3[1]]=_0x5b71xa;_0x5b71xa[_0xf2e3[0]][_0xf2e3[14]]=60;_0x5b71xa[_0xf2e3[0]][_0xf2e3[15]]=20;_0x5b71xa[_0xf2e3[0]][_0xf2e3[16]]=_0xf2e3[17];_0x5b71xa[_0xf2e3[0]][_0xf2e3[3]]=function(_0x5b71x2,_0x5b71x3,_0x5b71x4,_0x5b71x5,_0x5b71x6,_0x5b71x7){var _0x5b71xb=mxUtils[_0xf2e3[5]](this[_0xf2e3[4]],_0xf2e3[14],this[_0xf2e3[14]]);var _0x5b71xc=mxUtils[_0xf2e3[5]](this[_0xf2e3[4]],_0xf2e3[15],this[_0xf2e3[15]]);var _0x5b71xd=mxUtils[_0xf2e3[5]](this[_0xf2e3[4]],_0xf2e3[16],this[_0xf2e3[16]]);var _0x5b71xe=Math[_0xf2e3[6]](_0x5b71x5,_0x5b71xb);var _0x5b71xf=Math[_0xf2e3[6]](_0x5b71x6,_0x5b71xc);if(_0x5b71x7){if(_0x5b71xd==_0xf2e3[18]){_0x5b71x2[_0xf2e3[7]](0,_0x5b71xf);_0x5b71x2[_0xf2e3[8]](_0x5b71xe,_0x5b71xf)}else {_0x5b71x2[_0xf2e3[7]](_0x5b71x5-_0x5b71xe,_0x5b71xf);_0x5b71x2[_0xf2e3[8]](_0x5b71x5,_0x5b71xf)};_0x5b71x2[_0xf2e3[9]]()}else {if(_0x5b71xd==_0xf2e3[18]){_0x5b71x2[_0xf2e3[7]](0,0);_0x5b71x2[_0xf2e3[8]](_0x5b71xe,0);_0x5b71x2[_0xf2e3[8]](_0x5b71xe,_0x5b71xf);_0x5b71x2[_0xf2e3[8]](_0x5b71x5,_0x5b71xf)}else {_0x5b71x2[_0xf2e3[7]](0,_0x5b71xf);_0x5b71x2[_0xf2e3[8]](_0x5b71x5-_0x5b71xe,_0x5b71xf);_0x5b71x2[_0xf2e3[8]](_0x5b71x5-_0x5b71xe,0);_0x5b71x2[_0xf2e3[8]](_0x5b71x5,0)};_0x5b71x2[_0xf2e3[8]](_0x5b71x5,_0x5b71x6);_0x5b71x2[_0xf2e3[8]](0,_0x5b71x6);_0x5b71x2[_0xf2e3[8]](0,_0x5b71xf);_0x5b71x2[_0xf2e3[10]]();_0x5b71x2[_0xf2e3[9]]()}};mxCellRenderer[_0xf2e3[0]][_0xf2e3[12]][_0xf2e3[19]]=_0x5b71xa;function _0x5b71x10(){}_0x5b71x10[_0xf2e3[0]]= new mxCylinder();_0x5b71x10[_0xf2e3[0]][_0xf2e3[1]]=_0x5b71x10;_0x5b71x10[_0xf2e3[0]][_0xf2e3[2]]=30;_0x5b71x10[_0xf2e3[0]][_0xf2e3[3]]=function(_0x5b71x2,_0x5b71x3,_0x5b71x4,_0x5b71x5,_0x5b71x6,_0x5b71x7){var _0x5b71x8=Math[_0xf2e3[6]](_0x5b71x5,Math[_0xf2e3[6]](_0x5b71x6,mxUtils[_0xf2e3[5]](this[_0xf2e3[4]],_0xf2e3[2],this[_0xf2e3[2]])));if(!_0x5b71x7){_0x5b71x2[_0xf2e3[7]](_0x5b71x8,0);_0x5b71x2[_0xf2e3[8]](_0x5b71x5,0);_0x5b71x2[_0xf2e3[8]](_0x5b71x5,_0x5b71x6);_0x5b71x2[_0xf2e3[8]](0,_0x5b71x6);_0x5b71x2[_0xf2e3[8]](0,_0x5b71x8);_0x5b71x2[_0xf2e3[8]](_0x5b71x8,0);_0x5b71x2[_0xf2e3[10]]();_0x5b71x2[_0xf2e3[9]]()}};mxCellRenderer[_0xf2e3[0]][_0xf2e3[12]][_0xf2e3[20]]=_0x5b71x10;function _0x5b71x11(){}_0x5b71x11[_0xf2e3[0]]= new mxCylinder();_0x5b71x11[_0xf2e3[0]][_0xf2e3[1]]=_0x5b71x11;_0x5b71x11[_0xf2e3[0]][_0xf2e3[2]]=0.4;_0x5b71x11[_0xf2e3[0]][_0xf2e3[3]]=function(_0x5b71x2,_0x5b71x3,_0x5b71x4,_0x5b71x5,_0x5b71x6,_0x5b71x7){var _0x5b71x8=mxUtils[_0xf2e3[5]](this[_0xf2e3[4]],_0xf2e3[2],this[_0xf2e3[2]]);var _0x5b71xf=_0x5b71x6*_0x5b71x8;var _0x5b71x12=1.4;if(!_0x5b71x7){_0x5b71x2[_0xf2e3[7]](0,_0x5b71xf/2);_0x5b71x2[_0xf2e3[21]](_0x5b71x5/4,_0x5b71xf*_0x5b71x12,_0x5b71x5/2,_0x5b71xf/2);_0x5b71x2[_0xf2e3[21]](_0x5b71x5*3/4,_0x5b71xf*(1-_0x5b71x12),_0x5b71x5,_0x5b71xf/2);_0x5b71x2[_0xf2e3[8]](_0x5b71x5,_0x5b71x6-_0x5b71xf/2);_0x5b71x2[_0xf2e3[21]](_0x5b71x5*3/4,_0x5b71x6-_0x5b71xf*_0x5b71x12,_0x5b71x5/2,_0x5b71x6-_0x5b71xf/2);_0x5b71x2[_0xf2e3[21]](_0x5b71x5/4,_0x5b71x6-_0x5b71xf*(1-_0x5b71x12),0,_0x5b71x6-_0x5b71xf/2);_0x5b71x2[_0xf2e3[8]](0,_0x5b71xf/2);_0x5b71x2[_0xf2e3[10]]();_0x5b71x2[_0xf2e3[9]]()}};mxCellRenderer[_0xf2e3[0]][_0xf2e3[12]][_0xf2e3[22]]=_0x5b71x11;function _0x5b71x13(){}_0x5b71x13[_0xf2e3[0]]= new mxCylinder();_0x5b71x13[_0xf2e3[0]][_0xf2e3[1]]=_0x5b71x13;_0x5b71x13[_0xf2e3[0]][_0xf2e3[2]]=0.2;_0x5b71x13[_0xf2e3[0]][_0xf2e3[3]]=function(_0x5b71x2,_0x5b71x3,_0x5b71x4,_0x5b71x5,_0x5b71x6,_0x5b71x7){var _0x5b71x8=_0x5b71x5*mxUtils[_0xf2e3[5]](this[_0xf2e3[4]],_0xf2e3[2],this[_0xf2e3[2]]);if(!_0x5b71x7){_0x5b71x2[_0xf2e3[7]](0,0);_0x5b71x2[_0xf2e3[8]](_0x5b71x5-_0x5b71x8,0);_0x5b71x2[_0xf2e3[8]](_0x5b71x5,_0x5b71x6/2);_0x5b71x2[_0xf2e3[8]](_0x5b71x5-_0x5b71x8,_0x5b71x6);_0x5b71x2[_0xf2e3[8]](0,_0x5b71x6);_0x5b71x2[_0xf2e3[8]](_0x5b71x8,_0x5b71x6/2);_0x5b71x2[_0xf2e3[10]]();_0x5b71x2[_0xf2e3[9]]()}};mxCellRenderer[_0xf2e3[0]][_0xf2e3[12]][_0xf2e3[23]]=_0x5b71x13;function _0x5b71x14(){mxRectangleShape[_0xf2e3[24]](this)}mxUtils[_0xf2e3[25]](_0x5b71x14,mxRectangleShape);_0x5b71x14[_0xf2e3[0]][_0xf2e3[26]]=function(){return false};_0x5b71x14[_0xf2e3[0]][_0xf2e3[27]]=function(_0x5b71x15,_0x5b71x3,_0x5b71x4,_0x5b71x5,_0x5b71x6){var _0x5b71x16=Math[_0xf2e3[6]](_0x5b71x5/5,_0x5b71x6/5)+1;_0x5b71x15[_0xf2e3[28]]();_0x5b71x15[_0xf2e3[7]](_0x5b71x3+_0x5b71x5/2,_0x5b71x4+_0x5b71x16);_0x5b71x15[_0xf2e3[8]](_0x5b71x3+_0x5b71x5/2,_0x5b71x4+_0x5b71x6-_0x5b71x16);_0x5b71x15[_0xf2e3[7]](_0x5b71x3+_0x5b71x16,_0x5b71x4+_0x5b71x6/2);_0x5b71x15[_0xf2e3[8]](_0x5b71x3+_0x5b71x5-_0x5b71x16,_0x5b71x4+_0x5b71x6/2);_0x5b71x15[_0xf2e3[9]]();_0x5b71x15[_0xf2e3[29]]();mxRectangleShape[_0xf2e3[0]][_0xf2e3[27]][_0xf2e3[30]](this,arguments)};mxCellRenderer[_0xf2e3[0]][_0xf2e3[12]][_0xf2e3[31]]=_0x5b71x14;function _0x5b71x17(){mxRectangleShape[_0xf2e3[24]](this)}mxUtils[_0xf2e3[25]](_0x5b71x17,mxRectangleShape);_0x5b71x17[_0xf2e3[0]][_0xf2e3[26]]=function(){return false};_0x5b71x17[_0xf2e3[0]][_0xf2e3[27]]=function(_0x5b71x15,_0x5b71x3,_0x5b71x4,_0x5b71x5,_0x5b71x6){if(this[_0xf2e3[4]]!=null){if(this[_0xf2e3[4]][_0xf2e3[32]]==1){var _0x5b71x18=Math[_0xf2e3[34]](2,this[_0xf2e3[33]]+1);mxRectangleShape[_0xf2e3[0]][_0xf2e3[35]][_0xf2e3[24]](this,_0x5b71x15,_0x5b71x3+_0x5b71x18,_0x5b71x4+_0x5b71x18,_0x5b71x5-2*_0x5b71x18,_0x5b71x6-2*_0x5b71x18);mxRectangleShape[_0xf2e3[0]][_0xf2e3[27]][_0xf2e3[30]](this,arguments);_0x5b71x3+=_0x5b71x18;_0x5b71x4+=_0x5b71x18;_0x5b71x5-=2*_0x5b71x18;_0x5b71x6-=2*_0x5b71x18};_0x5b71x15[_0xf2e3[36]](false);var _0x5b71x19=0;var _0x5b71x1a=null;do{_0x5b71x1a=mxCellRenderer[_0xf2e3[0]][_0xf2e3[12]][this[_0xf2e3[4]][_0xf2e3[37]+_0x5b71x19]];if(_0x5b71x1a!=null){var _0x5b71x1b=this[_0xf2e3[4]][_0xf2e3[37]+_0x5b71x19+_0xf2e3[38]];var _0x5b71x1c=this[_0xf2e3[4]][_0xf2e3[37]+_0x5b71x19+_0xf2e3[39]];var _0x5b71x1d=this[_0xf2e3[4]][_0xf2e3[37]+_0x5b71x19+_0xf2e3[40]];var _0x5b71x1e=this[_0xf2e3[4]][_0xf2e3[37]+_0x5b71x19+_0xf2e3[41]];var _0x5b71x1f=this[_0xf2e3[4]][_0xf2e3[37]+_0x5b71x19+_0xf2e3[42]]||0;var _0x5b71x20=this[_0xf2e3[4]][_0xf2e3[37]+_0x5b71x19+_0xf2e3[43]];if(_0x5b71x20!=null){_0x5b71x1f+=this[_0xf2e3[44]](_0x5b71x5+this[_0xf2e3[33]],_0x5b71x6+this[_0xf2e3[33]])*_0x5b71x20};var _0x5b71x21=_0x5b71x3;var _0x5b71x22=_0x5b71x4;if(_0x5b71x1b==mxConstants[_0xf2e3[45]]){_0x5b71x21+=(_0x5b71x5-_0x5b71x1d)/2}else {if(_0x5b71x1b==mxConstants[_0xf2e3[46]]){_0x5b71x21+=_0x5b71x5-_0x5b71x1d-_0x5b71x1f}else {_0x5b71x21+=_0x5b71x1f}};if(_0x5b71x1c==mxConstants[_0xf2e3[47]]){_0x5b71x22+=(_0x5b71x6-_0x5b71x1e)/2}else {if(_0x5b71x1c==mxConstants[_0xf2e3[48]]){_0x5b71x22+=_0x5b71x6-_0x5b71x1e-_0x5b71x1f}else {_0x5b71x22+=_0x5b71x1f}};_0x5b71x15[_0xf2e3[49]]();var _0x5b71x23= new _0x5b71x1a();_0x5b71x23[_0xf2e3[4]]=this[_0xf2e3[4]];_0x5b71x1a[_0xf2e3[0]][_0xf2e3[50]][_0xf2e3[24]](_0x5b71x23,_0x5b71x15,_0x5b71x21,_0x5b71x22,_0x5b71x1d,_0x5b71x1e);_0x5b71x15[_0xf2e3[51]]()};_0x5b71x19++}while(_0x5b71x1a!=null);}};mxCellRenderer[_0xf2e3[0]][_0xf2e3[12]][_0xf2e3[52]]=_0x5b71x17;function _0x5b71x24(){}_0x5b71x24[_0xf2e3[0]]= new mxCylinder();_0x5b71x24[_0xf2e3[0]][_0xf2e3[1]]=_0x5b71x24;_0x5b71x24[_0xf2e3[0]][_0xf2e3[3]]=function(_0x5b71x2,_0x5b71x3,_0x5b71x4,_0x5b71x5,_0x5b71x6,_0x5b71x7){if(_0x5b71x7){_0x5b71x2[_0xf2e3[7]](0,0);_0x5b71x2[_0xf2e3[8]](_0x5b71x5/2,_0x5b71x6/2);_0x5b71x2[_0xf2e3[8]](_0x5b71x5,0);_0x5b71x2[_0xf2e3[9]]()}else {_0x5b71x2[_0xf2e3[7]](0,0);_0x5b71x2[_0xf2e3[8]](_0x5b71x5,0);_0x5b71x2[_0xf2e3[8]](_0x5b71x5,_0x5b71x6);_0x5b71x2[_0xf2e3[8]](0,_0x5b71x6);_0x5b71x2[_0xf2e3[10]]()}};mxCellRenderer[_0xf2e3[0]][_0xf2e3[12]][_0xf2e3[53]]=_0x5b71x24;function _0x5b71x25(){}_0x5b71x25[_0xf2e3[0]]= new mxCylinder();_0x5b71x25[_0xf2e3[0]][_0xf2e3[1]]=_0x5b71x25;_0x5b71x25[_0xf2e3[0]][_0xf2e3[54]]=true;_0x5b71x25[_0xf2e3[0]][_0xf2e3[3]]=function(_0x5b71x2,_0x5b71x3,_0x5b71x4,_0x5b71x5,_0x5b71x6,_0x5b71x7){var _0x5b71x1d=_0x5b71x5/3;var _0x5b71x1e=_0x5b71x6/4;if(!_0x5b71x7){_0x5b71x2[_0xf2e3[7]](_0x5b71x5/2,_0x5b71x1e);_0x5b71x2[_0xf2e3[55]](_0x5b71x5/2-_0x5b71x1d,_0x5b71x1e,_0x5b71x5/2-_0x5b71x1d,0,_0x5b71x5/2,0);_0x5b71x2[_0xf2e3[55]](_0x5b71x5/2+_0x5b71x1d,0,_0x5b71x5/2+_0x5b71x1d,_0x5b71x1e,_0x5b71x5/2,_0x5b71x1e);_0x5b71x2[_0xf2e3[10]]();_0x5b71x2[_0xf2e3[7]](_0x5b71x5/2,_0x5b71x1e);_0x5b71x2[_0xf2e3[8]](_0x5b71x5/2,2*_0x5b71x6/3);_0x5b71x2[_0xf2e3[7]](_0x5b71x5/2,_0x5b71x6/3);_0x5b71x2[_0xf2e3[8]](0,_0x5b71x6/3);_0x5b71x2[_0xf2e3[7]](_0x5b71x5/2,_0x5b71x6/3);_0x5b71x2[_0xf2e3[8]](_0x5b71x5,_0x5b71x6/3);_0x5b71x2[_0xf2e3[7]](_0x5b71x5/2,2*_0x5b71x6/3);_0x5b71x2[_0xf2e3[8]](0,_0x5b71x6);_0x5b71x2[_0xf2e3[7]](_0x5b71x5/2,2*_0x5b71x6/3);_0x5b71x2[_0xf2e3[8]](_0x5b71x5,_0x5b71x6);_0x5b71x2[_0xf2e3[9]]()}};mxCellRenderer[_0xf2e3[0]][_0xf2e3[12]][_0xf2e3[56]]=_0x5b71x25;function _0x5b71x26(){}_0x5b71x26[_0xf2e3[0]]= new mxCylinder();_0x5b71x26[_0xf2e3[0]][_0xf2e3[1]]=_0x5b71x26;_0x5b71x26[_0xf2e3[0]][_0xf2e3[2]]=10;_0x5b71x26[_0xf2e3[0]][_0xf2e3[54]]=true;_0x5b71x26[_0xf2e3[0]][_0xf2e3[3]]=function(_0x5b71x2,_0x5b71x3,_0x5b71x4,_0x5b71x5,_0x5b71x6,_0x5b71x7){var _0x5b71x27=mxUtils[_0xf2e3[5]](this[_0xf2e3[4]],_0xf2e3[2],this[_0xf2e3[2]]);var _0x5b71x1d=_0x5b71x27*2/3;var _0x5b71x1e=_0x5b71x27;if(!_0x5b71x7){_0x5b71x2[_0xf2e3[7]](_0x5b71x5/2,_0x5b71x1e);_0x5b71x2[_0xf2e3[55]](_0x5b71x5/2-_0x5b71x1d,_0x5b71x1e,_0x5b71x5/2-_0x5b71x1d,0,_0x5b71x5/2,0);_0x5b71x2[_0xf2e3[55]](_0x5b71x5/2+_0x5b71x1d,0,_0x5b71x5/2+_0x5b71x1d,_0x5b71x1e,_0x5b71x5/2,_0x5b71x1e);_0x5b71x2[_0xf2e3[10]]();_0x5b71x2[_0xf2e3[7]](_0x5b71x5/2,_0x5b71x1e);_0x5b71x2[_0xf2e3[8]](_0x5b71x5/2,_0x5b71x6);_0x5b71x2[_0xf2e3[9]]()}};mxCellRenderer[_0xf2e3[0]][_0xf2e3[12]][_0xf2e3[57]]=_0x5b71x26;function _0x5b71x28(){}_0x5b71x28[_0xf2e3[0]]= new mxCylinder();_0x5b71x28[_0xf2e3[0]][_0xf2e3[1]]=_0x5b71x28;_0x5b71x28[_0xf2e3[0]][_0xf2e3[58]]=32;_0x5b71x28[_0xf2e3[0]][_0xf2e3[59]]=12;_0x5b71x28[_0xf2e3[0]][_0xf2e3[3]]=function(_0x5b71x2,_0x5b71x3,_0x5b71x4,_0x5b71x5,_0x5b71x6,_0x5b71x7){var _0x5b71xe=mxUtils[_0xf2e3[5]](this[_0xf2e3[4]],_0xf2e3[58],this[_0xf2e3[58]]);var _0x5b71xf=mxUtils[_0xf2e3[5]](this[_0xf2e3[4]],_0xf2e3[59],this[_0xf2e3[59]]);var _0x5b71x29=_0x5b71xe/2;var _0x5b71x2a=_0x5b71x29+_0x5b71xe/2;var _0x5b71x2b=0.3*_0x5b71x6-_0x5b71xf/2;var _0x5b71x2c=0.7*_0x5b71x6-_0x5b71xf/2;if(_0x5b71x7){_0x5b71x2[_0xf2e3[7]](_0x5b71x29,_0x5b71x2b);_0x5b71x2[_0xf2e3[8]](_0x5b71x2a,_0x5b71x2b);_0x5b71x2[_0xf2e3[8]](_0x5b71x2a,_0x5b71x2b+_0x5b71xf);_0x5b71x2[_0xf2e3[8]](_0x5b71x29,_0x5b71x2b+_0x5b71xf);_0x5b71x2[_0xf2e3[7]](_0x5b71x29,_0x5b71x2c);_0x5b71x2[_0xf2e3[8]](_0x5b71x2a,_0x5b71x2c);_0x5b71x2[_0xf2e3[8]](_0x5b71x2a,_0x5b71x2c+_0x5b71xf);_0x5b71x2[_0xf2e3[8]](_0x5b71x29,_0x5b71x2c+_0x5b71xf);_0x5b71x2[_0xf2e3[9]]()}else {_0x5b71x2[_0xf2e3[7]](_0x5b71x29,0);_0x5b71x2[_0xf2e3[8]](_0x5b71x5,0);_0x5b71x2[_0xf2e3[8]](_0x5b71x5,_0x5b71x6);_0x5b71x2[_0xf2e3[8]](_0x5b71x29,_0x5b71x6);_0x5b71x2[_0xf2e3[8]](_0x5b71x29,_0x5b71x2c+_0x5b71xf);_0x5b71x2[_0xf2e3[8]](0,_0x5b71x2c+_0x5b71xf);_0x5b71x2[_0xf2e3[8]](0,_0x5b71x2c);_0x5b71x2[_0xf2e3[8]](_0x5b71x29,_0x5b71x2c);_0x5b71x2[_0xf2e3[8]](_0x5b71x29,_0x5b71x2b+_0x5b71xf);_0x5b71x2[_0xf2e3[8]](0,_0x5b71x2b+_0x5b71xf);_0x5b71x2[_0xf2e3[8]](0,_0x5b71x2b);_0x5b71x2[_0xf2e3[8]](_0x5b71x29,_0x5b71x2b);_0x5b71x2[_0xf2e3[10]]();_0x5b71x2[_0xf2e3[9]]()}};mxCellRenderer[_0xf2e3[0]][_0xf2e3[12]][_0xf2e3[60]]=_0x5b71x28;function _0x5b71x2d(){}_0x5b71x2d[_0xf2e3[0]]= new mxDoubleEllipse();_0x5b71x2d[_0xf2e3[0]][_0xf2e3[1]]=_0x5b71x2d;_0x5b71x2d[_0xf2e3[0]][_0xf2e3[61]]=true;_0x5b71x2d[_0xf2e3[0]][_0xf2e3[50]]=function(_0x5b71x15,_0x5b71x3,_0x5b71x4,_0x5b71x5,_0x5b71x6){var _0x5b71x18=Math[_0xf2e3[6]](4,Math[_0xf2e3[6]](_0x5b71x5/5,_0x5b71x6/5));if(_0x5b71x5>0&&_0x5b71x6>0){_0x5b71x15[_0xf2e3[62]](_0x5b71x3+_0x5b71x18,_0x5b71x4+_0x5b71x18,_0x5b71x5-2*_0x5b71x18,_0x5b71x6-2*_0x5b71x18);_0x5b71x15[_0xf2e3[63]]()};_0x5b71x15[_0xf2e3[64]](false);if(this[_0xf2e3[61]]){_0x5b71x15[_0xf2e3[62]](_0x5b71x3,_0x5b71x4,_0x5b71x5,_0x5b71x6);_0x5b71x15[_0xf2e3[29]]()}};mxCellRenderer[_0xf2e3[0]][_0xf2e3[12]][_0xf2e3[65]]=_0x5b71x2d;function _0x5b71x2e(){}_0x5b71x2e[_0xf2e3[0]]= new _0x5b71x2d();_0x5b71x2e[_0xf2e3[0]][_0xf2e3[1]]=_0x5b71x2e;_0x5b71x2e[_0xf2e3[0]][_0xf2e3[61]]=false;mxCellRenderer[_0xf2e3[0]][_0xf2e3[12]][_0xf2e3[66]]=_0x5b71x2e;var _0x5b71x2f=mxImageExport[_0xf2e3[0]][_0xf2e3[67]];mxImageExport[_0xf2e3[0]][_0xf2e3[67]]=function(){_0x5b71x2f[_0xf2e3[30]](this,arguments);function _0x5b71x30(_0x5b71x31){return {drawShape:function(_0x5b71x32,_0x5b71x33,_0x5b71x34,_0x5b71x35){var _0x5b71x3=_0x5b71x34[_0xf2e3[68]];var _0x5b71x4=_0x5b71x34[_0xf2e3[69]];var _0x5b71x5=_0x5b71x34[_0xf2e3[70]];var _0x5b71x6=_0x5b71x34[_0xf2e3[71]];if(_0x5b71x35){var _0x5b71x18=Math[_0xf2e3[6]](4,Math[_0xf2e3[6]](_0x5b71x5/5,_0x5b71x6/5));_0x5b71x3+=_0x5b71x18;_0x5b71x4+=_0x5b71x18;_0x5b71x5-=2*_0x5b71x18;_0x5b71x6-=2*_0x5b71x18;if(_0x5b71x5>0&&_0x5b71x6>0){_0x5b71x32[_0xf2e3[62]](_0x5b71x3,_0x5b71x4,_0x5b71x5,_0x5b71x6)};return true}else {_0x5b71x32[_0xf2e3[63]]();if(_0x5b71x31){_0x5b71x32[_0xf2e3[62]](_0x5b71x3,_0x5b71x4,_0x5b71x5,_0x5b71x6);_0x5b71x32[_0xf2e3[29]]()}}}}}this[_0xf2e3[72]][_0xf2e3[65]]=_0x5b71x30(true);this[_0xf2e3[72]][_0xf2e3[66]]=_0x5b71x30(false)};function _0x5b71x36(){mxArrow[_0xf2e3[24]](this)}mxUtils[_0xf2e3[25]](_0x5b71x36,mxArrow);_0x5b71x36[_0xf2e3[0]][_0xf2e3[73]]=function(_0x5b71x15,_0x5b71x37){var _0x5b71x1d=10;var _0x5b71x38=_0x5b71x37[0];var _0x5b71x39=_0x5b71x37[_0x5b71x37[_0xf2e3[74]]-1];var _0x5b71xe=_0x5b71x39[_0xf2e3[68]]-_0x5b71x38[_0xf2e3[68]];var _0x5b71xf=_0x5b71x39[_0xf2e3[69]]-_0x5b71x38[_0xf2e3[69]];var _0x5b71x3a=Math[_0xf2e3[75]](_0x5b71xe*_0x5b71xe+_0x5b71xf*_0x5b71xf);var _0x5b71x3b=_0x5b71x3a;var _0x5b71x3c=_0x5b71xe/_0x5b71x3a;var _0x5b71x3d=_0x5b71xf/_0x5b71x3a;var _0x5b71x3e=_0x5b71x3b*_0x5b71x3c;var _0x5b71x3f=_0x5b71x3b*_0x5b71x3d;var _0x5b71x40=_0x5b71x1d*_0x5b71x3d/3;var _0x5b71x41=-_0x5b71x1d*_0x5b71x3c/3;var _0x5b71x42=_0x5b71x38[_0xf2e3[68]]-_0x5b71x40/2;var _0x5b71x43=_0x5b71x38[_0xf2e3[69]]-_0x5b71x41/2;var _0x5b71x44=_0x5b71x42+_0x5b71x40;var _0x5b71x45=_0x5b71x43+_0x5b71x41;var _0x5b71x46=_0x5b71x44+_0x5b71x3e;var _0x5b71x47=_0x5b71x45+_0x5b71x3f;var _0x5b71x48=_0x5b71x46+_0x5b71x40;var _0x5b71x49=_0x5b71x47+_0x5b71x41;var _0x5b71x4a=_0x5b71x48-3*_0x5b71x40;var _0x5b71x4b=_0x5b71x49-3*_0x5b71x41;_0x5b71x15[_0xf2e3[28]]();_0x5b71x15[_0xf2e3[7]](_0x5b71x44,_0x5b71x45);_0x5b71x15[_0xf2e3[8]](_0x5b71x46,_0x5b71x47);_0x5b71x15[_0xf2e3[7]](_0x5b71x4a+_0x5b71x40,_0x5b71x4b+_0x5b71x41);_0x5b71x15[_0xf2e3[8]](_0x5b71x42,_0x5b71x43);_0x5b71x15[_0xf2e3[29]]()};mxCellRenderer[_0xf2e3[0]][_0xf2e3[12]][_0xf2e3[76]]=_0x5b71x36;mxMarker[_0xf2e3[78]](_0xf2e3[77],function(_0x5b71x32,_0x5b71x1a,_0x5b71x4c,_0x5b71x39,_0x5b71x4d,_0x5b71x4e,_0x5b71x4f,_0x5b71x50,_0x5b71x51,_0x5b71x52){var _0x5b71x3c=_0x5b71x4d*(_0x5b71x4f+_0x5b71x51+1);var _0x5b71x3d=_0x5b71x4e*(_0x5b71x4f+_0x5b71x51+1);return function(){_0x5b71x32[_0xf2e3[28]]();_0x5b71x32[_0xf2e3[7]](_0x5b71x39[_0xf2e3[68]]-_0x5b71x3c/2-_0x5b71x3d/2,_0x5b71x39[_0xf2e3[69]]-_0x5b71x3d/2+_0x5b71x3c/2);_0x5b71x32[_0xf2e3[8]](_0x5b71x39[_0xf2e3[68]]+_0x5b71x3d/2-3*_0x5b71x3c/2,_0x5b71x39[_0xf2e3[69]]-3*_0x5b71x3d/2-_0x5b71x3c/2);_0x5b71x32[_0xf2e3[29]]()}});var _0x5b71x53=-99;if( typeof (mxVertexHandler)!=_0xf2e3[79]){function _0x5b71x54(_0x5b71x33){mxVertexHandler[_0xf2e3[24]](this,_0x5b71x33)}mxUtils[_0xf2e3[25]](_0x5b71x54,mxVertexHandler);_0x5b71x54[_0xf2e3[0]][_0xf2e3[80]]=false;_0x5b71x54[_0xf2e3[0]][_0xf2e3[81]]=function(){this[_0xf2e3[82]]=mxUtils[_0xf2e3[5]](this[_0xf2e3[83]][_0xf2e3[4]],mxConstants.STYLE_HORIZONTAL,true);var _0x5b71x55=this[_0xf2e3[83]][_0xf2e3[85]][_0xf2e3[84]];if(this[_0xf2e3[86]]!=null){var _0x5b71x34= new mxRectangle(0,0,this[_0xf2e3[86]][_0xf2e3[70]],this[_0xf2e3[86]][_0xf2e3[71]]);this[_0xf2e3[87]]= new mxImageShape(_0x5b71x34,this[_0xf2e3[86]][_0xf2e3[88]])}else {var _0x5b71x4f=10;var _0x5b71x34= new mxRectangle(0,0,_0x5b71x4f,_0x5b71x4f);this[_0xf2e3[87]]= new mxRhombus(_0x5b71x34,mxConstants.HANDLE_FILLCOLOR,mxConstants.HANDLE_STROKECOLOR)};this[_0xf2e3[87]][_0xf2e3[89]]=(_0x5b71x55[_0xf2e3[89]]!=mxConstants[_0xf2e3[90]])?mxConstants[_0xf2e3[91]]:mxConstants[_0xf2e3[90]];this[_0xf2e3[87]][_0xf2e3[81]](_0x5b71x55[_0xf2e3[93]]()[_0xf2e3[92]]());this[_0xf2e3[87]][_0xf2e3[95]][_0xf2e3[4]][_0xf2e3[94]]=this[_0xf2e3[96]]();mxEvent[_0xf2e3[97]](this[_0xf2e3[87]][_0xf2e3[95]],_0x5b71x55,this[_0xf2e3[83]]);mxVertexHandler[_0xf2e3[0]][_0xf2e3[81]][_0xf2e3[30]](this,arguments)};_0x5b71x54[_0xf2e3[0]][_0xf2e3[96]]=function(){return _0xf2e3[98]};_0x5b71x54[_0xf2e3[0]][_0xf2e3[99]]=function(){mxVertexHandler[_0xf2e3[0]][_0xf2e3[99]][_0xf2e3[30]](this,arguments);var _0x5b71x4f=this[_0xf2e3[87]][_0xf2e3[100]][_0xf2e3[70]];this[_0xf2e3[87]][_0xf2e3[100]]=this[_0xf2e3[101]](_0x5b71x4f);this[_0xf2e3[87]][_0xf2e3[99]]()};_0x5b71x54[_0xf2e3[0]][_0xf2e3[102]]=function(){mxVertexHandler[_0xf2e3[0]][_0xf2e3[102]][_0xf2e3[30]](this,arguments);if(this[_0xf2e3[87]]!=null){this[_0xf2e3[87]][_0xf2e3[102]]();this[_0xf2e3[87]]=null}};_0x5b71x54[_0xf2e3[0]][_0xf2e3[103]]=function(_0x5b71x56){if(_0x5b71x56[_0xf2e3[104]](this[_0xf2e3[87]])){return _0x5b71x53};return mxVertexHandler[_0xf2e3[0]][_0xf2e3[103]][_0xf2e3[30]](this,arguments)};_0x5b71x54[_0xf2e3[0]][_0xf2e3[105]]=function(_0x5b71x57,_0x5b71x56){if(!_0x5b71x56[_0xf2e3[106]]()&&this[_0xf2e3[107]]==_0x5b71x53){var _0x5b71x58= new mxPoint(_0x5b71x56[_0xf2e3[108]](),_0x5b71x56[_0xf2e3[109]]());this[_0xf2e3[110]](_0x5b71x58);var _0x5b71x59=this[_0xf2e3[84]][_0xf2e3[112]](_0x5b71x56[_0xf2e3[111]]());var _0x5b71x5a=this[_0xf2e3[84]][_0xf2e3[93]]()[_0xf2e3[113]];if(_0x5b71x59&&this[_0xf2e3[80]]){_0x5b71x58[_0xf2e3[68]]=this[_0xf2e3[84]][_0xf2e3[114]](_0x5b71x58[_0xf2e3[68]]/_0x5b71x5a)*_0x5b71x5a;_0x5b71x58[_0xf2e3[69]]=this[_0xf2e3[84]][_0xf2e3[114]](_0x5b71x58[_0xf2e3[69]]/_0x5b71x5a)*_0x5b71x5a};this[_0xf2e3[115]](_0x5b71x58);this[_0xf2e3[116]](this[_0xf2e3[87]],_0x5b71x58[_0xf2e3[68]],_0x5b71x58[_0xf2e3[69]]);this[_0xf2e3[83]][_0xf2e3[85]][_0xf2e3[84]][_0xf2e3[117]][_0xf2e3[99]](this[_0xf2e3[83]],true);_0x5b71x56[_0xf2e3[118]]()}else {mxVertexHandler[_0xf2e3[0]][_0xf2e3[105]][_0xf2e3[30]](this,arguments)}};_0x5b71x54[_0xf2e3[0]][_0xf2e3[119]]=function(_0x5b71x57,_0x5b71x56){if(!_0x5b71x56[_0xf2e3[106]]()&&this[_0xf2e3[107]]==_0x5b71x53){this[_0xf2e3[120]]();this[_0xf2e3[121]]();_0x5b71x56[_0xf2e3[118]]()}else {mxVertexHandler[_0xf2e3[0]][_0xf2e3[119]][_0xf2e3[30]](this,arguments)}};_0x5b71x54[_0xf2e3[0]][_0xf2e3[101]]=function(_0x5b71x4f){var _0x5b71x5b=this[_0xf2e3[83]][_0xf2e3[123]][_0xf2e3[122]]();var _0x5b71x5c=mxUtils[_0xf2e3[124]](_0x5b71x5b);var _0x5b71x5d=Math[_0xf2e3[125]](_0x5b71x5c);var _0x5b71x5e=Math[_0xf2e3[126]](_0x5b71x5c);var _0x5b71x34= new mxRectangle(this[_0xf2e3[83]][_0xf2e3[68]],this[_0xf2e3[83]][_0xf2e3[69]],this[_0xf2e3[83]][_0xf2e3[70]],this[_0xf2e3[83]][_0xf2e3[71]]);if(this[_0xf2e3[83]][_0xf2e3[123]][_0xf2e3[127]]()){var _0x5b71x5f=(_0x5b71x34[_0xf2e3[70]]-_0x5b71x34[_0xf2e3[71]])/2;_0x5b71x34[_0xf2e3[68]]+=_0x5b71x5f;_0x5b71x34[_0xf2e3[69]]-=_0x5b71x5f;var _0x5b71x23=_0x5b71x34[_0xf2e3[70]];_0x5b71x34[_0xf2e3[70]]=_0x5b71x34[_0xf2e3[71]];_0x5b71x34[_0xf2e3[71]]=_0x5b71x23};var _0x5b71x60=this[_0xf2e3[128]](_0x5b71x34);if(this[_0xf2e3[83]][_0xf2e3[123]][_0xf2e3[129]]){_0x5b71x60[_0xf2e3[68]]=2*_0x5b71x34[_0xf2e3[68]]+_0x5b71x34[_0xf2e3[70]]-_0x5b71x60[_0xf2e3[68]]};if(this[_0xf2e3[83]][_0xf2e3[123]][_0xf2e3[130]]){_0x5b71x60[_0xf2e3[69]]=2*_0x5b71x34[_0xf2e3[69]]+_0x5b71x34[_0xf2e3[71]]-_0x5b71x60[_0xf2e3[69]]};_0x5b71x60=mxUtils[_0xf2e3[133]](_0x5b71x60,_0x5b71x5d,_0x5b71x5e, new mxPoint(this[_0xf2e3[83]][_0xf2e3[131]](),this[_0xf2e3[83]][_0xf2e3[132]]()));return  new mxRectangle(_0x5b71x60[_0xf2e3[68]]-_0x5b71x4f/2,_0x5b71x60[_0xf2e3[69]]-_0x5b71x4f/2,_0x5b71x4f,_0x5b71x4f)};_0x5b71x54[_0xf2e3[0]][_0xf2e3[128]]=function(_0x5b71x34){return null};_0x5b71x54[_0xf2e3[0]][_0xf2e3[115]]=function(_0x5b71x58){};_0x5b71x54[_0xf2e3[0]][_0xf2e3[110]]=function(_0x5b71x58){_0x5b71x58[_0xf2e3[68]]=Math[_0xf2e3[34]](this[_0xf2e3[83]][_0xf2e3[68]],Math[_0xf2e3[6]](this[_0xf2e3[83]][_0xf2e3[68]]+this[_0xf2e3[83]][_0xf2e3[70]],_0x5b71x58[_0xf2e3[68]]));_0x5b71x58[_0xf2e3[69]]=Math[_0xf2e3[34]](this[_0xf2e3[83]][_0xf2e3[69]],Math[_0xf2e3[6]](this[_0xf2e3[83]][_0xf2e3[69]]+this[_0xf2e3[83]][_0xf2e3[71]],_0x5b71x58[_0xf2e3[69]]))};_0x5b71x54[_0xf2e3[0]][_0xf2e3[120]]=function(){};function _0x5b71x61(_0x5b71x33){_0x5b71x54[_0xf2e3[24]](this,_0x5b71x33)}mxUtils[_0xf2e3[25]](_0x5b71x61,_0x5b71x54);_0x5b71x61[_0xf2e3[0]][_0xf2e3[128]]=function(_0x5b71x34){var _0x5b71x5a=this[_0xf2e3[84]][_0xf2e3[93]]()[_0xf2e3[113]];var _0x5b71xb=Math[_0xf2e3[6]](_0x5b71x34[_0xf2e3[70]],mxUtils[_0xf2e3[5]](this[_0xf2e3[83]][_0xf2e3[4]],_0xf2e3[14],60)*_0x5b71x5a);var _0x5b71xc=Math[_0xf2e3[6]](_0x5b71x34[_0xf2e3[71]],mxUtils[_0xf2e3[5]](this[_0xf2e3[83]][_0xf2e3[4]],_0xf2e3[15],20)*_0x5b71x5a);var _0x5b71xd=mxUtils[_0xf2e3[5]](this[_0xf2e3[83]][_0xf2e3[4]],_0xf2e3[16],_0xf2e3[17]);var _0x5b71x3=(_0x5b71xd==_0xf2e3[18])?_0x5b71x34[_0xf2e3[68]]+_0x5b71xb:_0x5b71x34[_0xf2e3[68]]+_0x5b71x34[_0xf2e3[70]]-_0x5b71xb;return  new mxPoint(_0x5b71x3,_0x5b71x34[_0xf2e3[69]]+_0x5b71xc)};_0x5b71x61[_0xf2e3[0]][_0xf2e3[115]]=function(_0x5b71x58){var _0x5b71x5b=this[_0xf2e3[83]][_0xf2e3[123]][_0xf2e3[122]]();var _0x5b71x5c=mxUtils[_0xf2e3[124]](_0x5b71x5b);var _0x5b71x5d=Math[_0xf2e3[125]](-_0x5b71x5c);var _0x5b71x5e=Math[_0xf2e3[126]](-_0x5b71x5c);var _0x5b71x34= new mxRectangle(this[_0xf2e3[83]][_0xf2e3[68]],this[_0xf2e3[83]][_0xf2e3[69]],this[_0xf2e3[83]][_0xf2e3[70]],this[_0xf2e3[83]][_0xf2e3[71]]);if(this[_0xf2e3[83]][_0xf2e3[123]][_0xf2e3[127]]()){var _0x5b71x5f=(_0x5b71x34[_0xf2e3[70]]-_0x5b71x34[_0xf2e3[71]])/2;_0x5b71x34[_0xf2e3[68]]+=_0x5b71x5f;_0x5b71x34[_0xf2e3[69]]-=_0x5b71x5f;var _0x5b71x23=_0x5b71x34[_0xf2e3[70]];_0x5b71x34[_0xf2e3[70]]=_0x5b71x34[_0xf2e3[71]];_0x5b71x34[_0xf2e3[71]]=_0x5b71x23};var _0x5b71x60= new mxPoint(_0x5b71x58[_0xf2e3[68]],_0x5b71x58[_0xf2e3[69]]);_0x5b71x60=mxUtils[_0xf2e3[133]](_0x5b71x60,_0x5b71x5d,_0x5b71x5e, new mxPoint(this[_0xf2e3[83]][_0xf2e3[131]](),this[_0xf2e3[83]][_0xf2e3[132]]()));if(this[_0xf2e3[83]][_0xf2e3[123]][_0xf2e3[129]]){_0x5b71x60[_0xf2e3[68]]=2*_0x5b71x34[_0xf2e3[68]]+_0x5b71x34[_0xf2e3[70]]-_0x5b71x60[_0xf2e3[68]]};if(this[_0xf2e3[83]][_0xf2e3[123]][_0xf2e3[130]]){_0x5b71x60[_0xf2e3[69]]=2*_0x5b71x34[_0xf2e3[69]]+_0x5b71x34[_0xf2e3[71]]-_0x5b71x60[_0xf2e3[69]]};var _0x5b71x62=this[_0xf2e3[134]](_0x5b71x60,_0x5b71x34);if(_0x5b71x62!=null){if(this[_0xf2e3[83]][_0xf2e3[123]][_0xf2e3[129]]){_0x5b71x62[_0xf2e3[68]]=2*_0x5b71x34[_0xf2e3[68]]+_0x5b71x34[_0xf2e3[70]]-_0x5b71x62[_0xf2e3[68]]};if(this[_0xf2e3[83]][_0xf2e3[123]][_0xf2e3[130]]){_0x5b71x62[_0xf2e3[69]]=2*_0x5b71x34[_0xf2e3[69]]+_0x5b71x34[_0xf2e3[71]]-_0x5b71x62[_0xf2e3[69]]};_0x5b71x5d=Math[_0xf2e3[125]](_0x5b71x5c);_0x5b71x5e=Math[_0xf2e3[126]](_0x5b71x5c);_0x5b71x62=mxUtils[_0xf2e3[133]](_0x5b71x62,_0x5b71x5d,_0x5b71x5e, new mxPoint(this[_0xf2e3[83]][_0xf2e3[131]](),this[_0xf2e3[83]][_0xf2e3[132]]()));_0x5b71x58[_0xf2e3[68]]=_0x5b71x62[_0xf2e3[68]];_0x5b71x58[_0xf2e3[69]]=_0x5b71x62[_0xf2e3[69]]}};_0x5b71x61[_0xf2e3[0]][_0xf2e3[134]]=function(_0x5b71x60,_0x5b71x34){var _0x5b71xd=mxUtils[_0xf2e3[5]](this[_0xf2e3[83]][_0xf2e3[4]],_0xf2e3[16],_0xf2e3[17]);var _0x5b71xb=(_0x5b71xd==_0xf2e3[18])?_0x5b71x60[_0xf2e3[68]]-_0x5b71x34[_0xf2e3[68]]:_0x5b71x34[_0xf2e3[68]]+_0x5b71x34[_0xf2e3[70]]-_0x5b71x60[_0xf2e3[68]];var _0x5b71xc=_0x5b71x60[_0xf2e3[69]]-_0x5b71x34[_0xf2e3[69]];var _0x5b71x5a=this[_0xf2e3[84]][_0xf2e3[93]]()[_0xf2e3[113]];this[_0xf2e3[83]][_0xf2e3[4]][_0xf2e3[14]]=Math[_0xf2e3[135]](Math[_0xf2e3[34]](1,_0x5b71xb)/_0x5b71x5a);this[_0xf2e3[83]][_0xf2e3[4]][_0xf2e3[15]]=Math[_0xf2e3[135]](Math[_0xf2e3[34]](1,_0x5b71xc)/_0x5b71x5a)};_0x5b71x61[_0xf2e3[0]][_0xf2e3[120]]=function(){var _0x5b71x63=this[_0xf2e3[84]][_0xf2e3[136]]();_0x5b71x63[_0xf2e3[137]]();try{this[_0xf2e3[83]][_0xf2e3[85]][_0xf2e3[84]][_0xf2e3[139]](_0xf2e3[14],this[_0xf2e3[83]][_0xf2e3[4]][_0xf2e3[14]],[this[_0xf2e3[83]][_0xf2e3[138]]]);this[_0xf2e3[83]][_0xf2e3[85]][_0xf2e3[84]][_0xf2e3[139]](_0xf2e3[15],this[_0xf2e3[83]][_0xf2e3[4]][_0xf2e3[15]],[this[_0xf2e3[83]][_0xf2e3[138]]])}finally{_0x5b71x63[_0xf2e3[140]]()}};function _0x5b71x64(_0x5b71x33){_0x5b71x61[_0xf2e3[24]](this,_0x5b71x33)}mxUtils[_0xf2e3[25]](_0x5b71x64,_0x5b71x61);_0x5b71x64[_0xf2e3[0]][_0xf2e3[128]]=function(_0x5b71x34){var _0x5b71x5a=this[_0xf2e3[84]][_0xf2e3[93]]()[_0xf2e3[113]];var _0x5b71x65=mxUtils[_0xf2e3[5]](this[_0xf2e3[83]][_0xf2e3[4]],mxConstants.STYLE_STARTSIZE,mxConstants.DEFAULT_STARTSIZE);return  new mxPoint(_0x5b71x34[_0xf2e3[68]]+_0x5b71x34[_0xf2e3[70]]/2,_0x5b71x34[_0xf2e3[69]]+Math[_0xf2e3[6]](_0x5b71x34[_0xf2e3[71]],_0x5b71x65*_0x5b71x5a))};_0x5b71x64[_0xf2e3[0]][_0xf2e3[134]]=function(_0x5b71x58,_0x5b71x34){_0x5b71x58[_0xf2e3[68]]=_0x5b71x34[_0xf2e3[68]]+_0x5b71x34[_0xf2e3[70]]/2;startSize=_0x5b71x58[_0xf2e3[69]]-_0x5b71x34[_0xf2e3[69]];var _0x5b71x5a=this[_0xf2e3[84]][_0xf2e3[93]]()[_0xf2e3[113]];this[_0xf2e3[83]][_0xf2e3[4]][_0xf2e3[141]]=Math[_0xf2e3[135]](Math[_0xf2e3[34]](1,startSize)/_0x5b71x5a);return _0x5b71x58};_0x5b71x64[_0xf2e3[0]][_0xf2e3[120]]=function(){this[_0xf2e3[83]][_0xf2e3[85]][_0xf2e3[84]][_0xf2e3[139]](_0xf2e3[141],this[_0xf2e3[83]][_0xf2e3[4]][_0xf2e3[141]],[this[_0xf2e3[83]][_0xf2e3[138]]])};function _0x5b71x66(_0x5b71x33){_0x5b71x61[_0xf2e3[24]](this,_0x5b71x33)}mxUtils[_0xf2e3[25]](_0x5b71x66,_0x5b71x61);_0x5b71x66[_0xf2e3[0]][_0xf2e3[142]]=20;_0x5b71x66[_0xf2e3[0]][_0xf2e3[143]]=1;_0x5b71x66[_0xf2e3[0]][_0xf2e3[128]]=function(_0x5b71x34){var _0x5b71x5a=this[_0xf2e3[84]][_0xf2e3[93]]()[_0xf2e3[113]];var _0x5b71x67=Math[_0xf2e3[6]](_0x5b71x34[_0xf2e3[70]],Math[_0xf2e3[6]](_0x5b71x34[_0xf2e3[71]],mxUtils[_0xf2e3[5]](this[_0xf2e3[83]][_0xf2e3[4]],_0xf2e3[2],this[_0xf2e3[142]])*_0x5b71x5a/this[_0xf2e3[143]]));return  new mxPoint(_0x5b71x34[_0xf2e3[68]]+_0x5b71x67,_0x5b71x34[_0xf2e3[69]]+_0x5b71x67)};_0x5b71x66[_0xf2e3[0]][_0xf2e3[134]]=function(_0x5b71x60,_0x5b71x34){var _0x5b71x4f=Math[_0xf2e3[34]](0,Math[_0xf2e3[6]](Math[_0xf2e3[6]](_0x5b71x34[_0xf2e3[70]]/this[_0xf2e3[143]],_0x5b71x60[_0xf2e3[68]]-_0x5b71x34[_0xf2e3[68]]),Math[_0xf2e3[6]](_0x5b71x34[_0xf2e3[71]]/this[_0xf2e3[143]],_0x5b71x60[_0xf2e3[69]]-_0x5b71x34[_0xf2e3[69]])));var _0x5b71x5a=this[_0xf2e3[84]][_0xf2e3[93]]()[_0xf2e3[113]];this[_0xf2e3[83]][_0xf2e3[4]][_0xf2e3[2]]=Math[_0xf2e3[135]](Math[_0xf2e3[34]](1,_0x5b71x4f)/_0x5b71x5a)*this[_0xf2e3[143]];return  new mxPoint(_0x5b71x34[_0xf2e3[68]]+_0x5b71x4f,_0x5b71x34[_0xf2e3[69]]+_0x5b71x4f)};_0x5b71x66[_0xf2e3[0]][_0xf2e3[120]]=function(){this[_0xf2e3[83]][_0xf2e3[85]][_0xf2e3[84]][_0xf2e3[139]](_0xf2e3[2],this[_0xf2e3[83]][_0xf2e3[4]][_0xf2e3[2]],[this[_0xf2e3[83]][_0xf2e3[138]]])};function _0x5b71x68(_0x5b71x33){_0x5b71x66[_0xf2e3[24]](this,_0x5b71x33)}mxUtils[_0xf2e3[25]](_0x5b71x68,_0x5b71x66);_0x5b71x68[_0xf2e3[0]][_0xf2e3[142]]=30;_0x5b71x68[_0xf2e3[0]][_0xf2e3[143]]=2;function _0x5b71x69(_0x5b71x33){_0x5b71x66[_0xf2e3[24]](this,_0x5b71x33)}mxUtils[_0xf2e3[25]](_0x5b71x69,_0x5b71x66);_0x5b71x69[_0xf2e3[0]][_0xf2e3[142]]=30;_0x5b71x69[_0xf2e3[0]][_0xf2e3[143]]=1;_0x5b71x69[_0xf2e3[0]][_0xf2e3[128]]=function(_0x5b71x34){var _0x5b71x5a=this[_0xf2e3[84]][_0xf2e3[93]]()[_0xf2e3[113]];var _0x5b71x67=Math[_0xf2e3[6]](_0x5b71x34[_0xf2e3[70]],Math[_0xf2e3[6]](_0x5b71x34[_0xf2e3[71]],mxUtils[_0xf2e3[5]](this[_0xf2e3[83]][_0xf2e3[4]],_0xf2e3[2],this[_0xf2e3[142]])*_0x5b71x5a/this[_0xf2e3[143]]));return  new mxPoint(_0x5b71x34[_0xf2e3[68]]+_0x5b71x34[_0xf2e3[70]]-_0x5b71x67,_0x5b71x34[_0xf2e3[69]]+_0x5b71x67)};_0x5b71x69[_0xf2e3[0]][_0xf2e3[134]]=function(_0x5b71x60,_0x5b71x34){var _0x5b71x4f=Math[_0xf2e3[34]](0,Math[_0xf2e3[6]](Math[_0xf2e3[6]](_0x5b71x34[_0xf2e3[70]]/this[_0xf2e3[143]],_0x5b71x60[_0xf2e3[68]]-_0x5b71x34[_0xf2e3[68]]+_0x5b71x34[_0xf2e3[70]]),Math[_0xf2e3[6]](_0x5b71x34[_0xf2e3[71]]/this[_0xf2e3[143]],_0x5b71x60[_0xf2e3[69]]-_0x5b71x34[_0xf2e3[69]])));var _0x5b71x5a=this[_0xf2e3[84]][_0xf2e3[93]]()[_0xf2e3[113]];this[_0xf2e3[83]][_0xf2e3[4]][_0xf2e3[2]]=Math[_0xf2e3[135]](Math[_0xf2e3[34]](1,_0x5b71x4f)/_0x5b71x5a)*this[_0xf2e3[143]];return  new mxPoint(_0x5b71x34[_0xf2e3[68]]+_0x5b71x34[_0xf2e3[70]]-_0x5b71x4f,_0x5b71x34[_0xf2e3[69]]+_0x5b71x4f)};function _0x5b71x6a(_0x5b71x33){_0x5b71x66[_0xf2e3[24]](this,_0x5b71x33)}mxUtils[_0xf2e3[25]](_0x5b71x6a,_0x5b71x66);_0x5b71x6a[_0xf2e3[0]][_0xf2e3[142]]=0.2;_0x5b71x6a[_0xf2e3[0]][_0xf2e3[143]]=1;_0x5b71x6a[_0xf2e3[0]][_0xf2e3[128]]=function(_0x5b71x34){var _0x5b71x67=mxUtils[_0xf2e3[5]](this[_0xf2e3[83]][_0xf2e3[4]],_0xf2e3[2],this[_0xf2e3[142]]);return  new mxPoint(_0x5b71x34[_0xf2e3[68]]+_0x5b71x34[_0xf2e3[70]]*_0x5b71x67,_0x5b71x34[_0xf2e3[69]]+_0x5b71x34[_0xf2e3[71]]/2)};_0x5b71x6a[_0xf2e3[0]][_0xf2e3[134]]=function(_0x5b71x60,_0x5b71x34){var _0x5b71x4f=Math[_0xf2e3[6]](1,(_0x5b71x60[_0xf2e3[68]]-_0x5b71x34[_0xf2e3[68]])/_0x5b71x34[_0xf2e3[70]]);this[_0xf2e3[83]][_0xf2e3[4]][_0xf2e3[2]]=_0x5b71x4f;return  new mxPoint(_0x5b71x34[_0xf2e3[68]]+_0x5b71x4f*_0x5b71x34[_0xf2e3[70]],_0x5b71x34[_0xf2e3[69]]+_0x5b71x34[_0xf2e3[71]]/2)};function _0x5b71x6b(_0x5b71x33){_0x5b71x66[_0xf2e3[24]](this,_0x5b71x33)}mxUtils[_0xf2e3[25]](_0x5b71x6b,_0x5b71x66);_0x5b71x6b[_0xf2e3[0]][_0xf2e3[142]]=0.4;_0x5b71x6b[_0xf2e3[0]][_0xf2e3[143]]=1;_0x5b71x6b[_0xf2e3[0]][_0xf2e3[128]]=function(_0x5b71x34){var _0x5b71x67=mxUtils[_0xf2e3[5]](this[_0xf2e3[83]][_0xf2e3[4]],_0xf2e3[2],this[_0xf2e3[142]]);return  new mxPoint(_0x5b71x34[_0xf2e3[68]]+_0x5b71x34[_0xf2e3[70]]/2,_0x5b71x34[_0xf2e3[69]]+_0x5b71x67*_0x5b71x34[_0xf2e3[71]]/2)};_0x5b71x6b[_0xf2e3[0]][_0xf2e3[134]]=function(_0x5b71x60,_0x5b71x34){var _0x5b71x4f=Math[_0xf2e3[34]](0,Math[_0xf2e3[6]](1,((_0x5b71x60[_0xf2e3[69]]-_0x5b71x34[_0xf2e3[69]])/_0x5b71x34[_0xf2e3[71]])*2));this[_0xf2e3[83]][_0xf2e3[4]][_0xf2e3[2]]=_0x5b71x4f;return  new mxPoint(_0x5b71x34[_0xf2e3[68]]+_0x5b71x34[_0xf2e3[70]]/2,_0x5b71x34[_0xf2e3[69]]+_0x5b71x4f*_0x5b71x34[_0xf2e3[71]]/2)};var _0x5b71x6c={"\x73\x77\x69\x6D\x6C\x61\x6E\x65":_0x5b71x64,"\x66\x6F\x6C\x64\x65\x72":_0x5b71x61,"\x63\x75\x62\x65":_0x5b71x66,"\x63\x61\x72\x64":_0x5b71x68,"\x6E\x6F\x74\x65":_0x5b71x69,"\x73\x74\x65\x70":_0x5b71x6a,"\x74\x61\x70\x65":_0x5b71x6b};var _0x5b71x6d=mxGraph[_0xf2e3[0]][_0xf2e3[144]];mxGraph[_0xf2e3[0]][_0xf2e3[144]]=function(_0x5b71x33){if(_0x5b71x33!=null){var _0x5b71x6e=_0x5b71x6c[_0x5b71x33[_0xf2e3[4]][_0xf2e3[123]]];if(_0x5b71x6e!=null){return  new _0x5b71x6e(_0x5b71x33)}};return _0x5b71x6d[_0xf2e3[30]](this,arguments)}};mxGraph[_0xf2e3[0]][_0xf2e3[145]]=function(_0x5b71x6f,_0x5b71x50){if(_0x5b71x6f!=null&&_0x5b71x6f[_0xf2e3[123]]!=null){if(_0x5b71x6f[_0xf2e3[123]][_0xf2e3[146]]!=null){if(_0x5b71x6f[_0xf2e3[123]][_0xf2e3[146]]!=null){return _0x5b71x6f[_0xf2e3[123]][_0xf2e3[146]][_0xf2e3[147]]}}else {if(_0x5b71x6f[_0xf2e3[123]][_0xf2e3[147]]!=null){return _0x5b71x6f[_0xf2e3[123]][_0xf2e3[147]]}}};return null};mxRectangleShape[_0xf2e3[0]][_0xf2e3[147]]=[ new mxConnectionConstraint( new mxPoint(0.25,0),true), new mxConnectionConstraint( new mxPoint(0.5,0),true), new mxConnectionConstraint( new mxPoint(0.75,0),true), new mxConnectionConstraint( new mxPoint(0,0.25),true), new mxConnectionConstraint( new mxPoint(0,0.5),true), new mxConnectionConstraint( new mxPoint(0,0.75),true), new mxConnectionConstraint( new mxPoint(1,0.25),true), new mxConnectionConstraint( new mxPoint(1,0.5),true), new mxConnectionConstraint( new mxPoint(1,0.75),true), new mxConnectionConstraint( new mxPoint(0.25,1),true), new mxConnectionConstraint( new mxPoint(0.5,1),true), new mxConnectionConstraint( new mxPoint(0.75,1),true)];mxLabel[_0xf2e3[0]][_0xf2e3[147]]=mxRectangleShape[_0xf2e3[0]][_0xf2e3[147]];mxImageShape[_0xf2e3[0]][_0xf2e3[147]]=mxRectangleShape[_0xf2e3[0]][_0xf2e3[147]];mxSwimlane[_0xf2e3[0]][_0xf2e3[147]]=mxRectangleShape[_0xf2e3[0]][_0xf2e3[147]];_0x5b71x14[_0xf2e3[0]][_0xf2e3[147]]=mxRectangleShape[_0xf2e3[0]][_0xf2e3[147]];_0x5b71x9[_0xf2e3[0]][_0xf2e3[147]]=mxRectangleShape[_0xf2e3[0]][_0xf2e3[147]];_0x5b71x10[_0xf2e3[0]][_0xf2e3[147]]=mxRectangleShape[_0xf2e3[0]][_0xf2e3[147]];_0x5b71x1[_0xf2e3[0]][_0xf2e3[147]]=mxRectangleShape[_0xf2e3[0]][_0xf2e3[147]];_0x5b71xa[_0xf2e3[0]][_0xf2e3[147]]=mxRectangleShape[_0xf2e3[0]][_0xf2e3[147]];mxCylinder[_0xf2e3[0]][_0xf2e3[147]]=[ new mxConnectionConstraint( new mxPoint(0.15,0.05),false), new mxConnectionConstraint( new mxPoint(0.5,0),true), new mxConnectionConstraint( new mxPoint(0.85,0.05),false), new mxConnectionConstraint( new mxPoint(0,0.3),true), new mxConnectionConstraint( new mxPoint(0,0.5),true), new mxConnectionConstraint( new mxPoint(0,0.7),true), new mxConnectionConstraint( new mxPoint(1,0.3),true), new mxConnectionConstraint( new mxPoint(1,0.5),true), new mxConnectionConstraint( new mxPoint(1,0.7),true), new mxConnectionConstraint( new mxPoint(0.15,0.95),false), new mxConnectionConstraint( new mxPoint(0.5,1),true), new mxConnectionConstraint( new mxPoint(0.85,0.95),false)];_0x5b71x25[_0xf2e3[0]][_0xf2e3[147]]=[ new mxConnectionConstraint( new mxPoint(0.25,0.1),false), new mxConnectionConstraint( new mxPoint(0.5,0),false), new mxConnectionConstraint( new mxPoint(0.75,0.1),false), new mxConnectionConstraint( new mxPoint(0,1/3),false), new mxConnectionConstraint( new mxPoint(0,1),false), new mxConnectionConstraint( new mxPoint(1,1/3),false), new mxConnectionConstraint( new mxPoint(1,1),false), new mxConnectionConstraint( new mxPoint(0.5,0.5),false)];_0x5b71x28[_0xf2e3[0]][_0xf2e3[147]]=[ new mxConnectionConstraint( new mxPoint(0.25,0),true), new mxConnectionConstraint( new mxPoint(0.5,0),true), new mxConnectionConstraint( new mxPoint(0.75,0),true), new mxConnectionConstraint( new mxPoint(0,0.3),true), new mxConnectionConstraint( new mxPoint(0,0.7),true), new mxConnectionConstraint( new mxPoint(1,0.25),true), new mxConnectionConstraint( new mxPoint(1,0.5),true), new mxConnectionConstraint( new mxPoint(1,0.75),true), new mxConnectionConstraint( new mxPoint(0.25,1),true), new mxConnectionConstraint( new mxPoint(0.5,1),true), new mxConnectionConstraint( new mxPoint(0.75,1),true)];mxActor[_0xf2e3[0]][_0xf2e3[147]]=[ new mxConnectionConstraint( new mxPoint(0.5,0),true), new mxConnectionConstraint( new mxPoint(0.25,0.2),false), new mxConnectionConstraint( new mxPoint(0.1,0.5),false), new mxConnectionConstraint( new mxPoint(0,0.75),true), new mxConnectionConstraint( new mxPoint(0.75,0.25),false), new mxConnectionConstraint( new mxPoint(0.9,0.5),false), new mxConnectionConstraint( new mxPoint(1,0.75),true), new mxConnectionConstraint( new mxPoint(0.25,1),true), new mxConnectionConstraint( new mxPoint(0.5,1),true), new mxConnectionConstraint( new mxPoint(0.75,1),true)];_0x5b71x11[_0xf2e3[0]][_0xf2e3[147]]=[ new mxConnectionConstraint( new mxPoint(0,0.35),false), new mxConnectionConstraint( new mxPoint(0,0.5),false), new mxConnectionConstraint( new mxPoint(0,0.65),false), new mxConnectionConstraint( new mxPoint(1,0.35),false), new mxConnectionConstraint( new mxPoint(1,0.5),false), new mxConnectionConstraint( new mxPoint(1,0.65),false), new mxConnectionConstraint( new mxPoint(0.25,1),false), new mxConnectionConstraint( new mxPoint(0.75,0),false)];_0x5b71x13[_0xf2e3[0]][_0xf2e3[147]]=[ new mxConnectionConstraint( new mxPoint(0.25,0),true), new mxConnectionConstraint( new mxPoint(0.5,0),true), new mxConnectionConstraint( new mxPoint(0.75,0),true), new mxConnectionConstraint( new mxPoint(0.25,1),true), new mxConnectionConstraint( new mxPoint(0.5,1),true), new mxConnectionConstraint( new mxPoint(0.75,1),true), new mxConnectionConstraint( new mxPoint(0.1,0.25),false), new mxConnectionConstraint( new mxPoint(0.2,0.5),false), new mxConnectionConstraint( new mxPoint(0.1,0.75),false), new mxConnectionConstraint( new mxPoint(0.9,0.25),false), new mxConnectionConstraint( new mxPoint(1,0.5),false), new mxConnectionConstraint( new mxPoint(0.9,0.75),false)];mxLine[_0xf2e3[0]][_0xf2e3[147]]=[ new mxConnectionConstraint( new mxPoint(0,0.5),false), new mxConnectionConstraint( new mxPoint(0.25,0.5),false), new mxConnectionConstraint( new mxPoint(0.75,0.5),false), new mxConnectionConstraint( new mxPoint(1,0.5),false)];_0x5b71x26[_0xf2e3[0]][_0xf2e3[147]]=[ new mxConnectionConstraint( new mxPoint(0.5,0),false), new mxConnectionConstraint( new mxPoint(0.5,1),false)];mxEllipse[_0xf2e3[0]][_0xf2e3[147]]=[ new mxConnectionConstraint( new mxPoint(0,0),true), new mxConnectionConstraint( new mxPoint(1,0),true), new mxConnectionConstraint( new mxPoint(0,1),true), new mxConnectionConstraint( new mxPoint(1,1),true), new mxConnectionConstraint( new mxPoint(0.5,0),true), new mxConnectionConstraint( new mxPoint(0.5,1),true), new mxConnectionConstraint( new mxPoint(0,0.5),true), new mxConnectionConstraint( new mxPoint(1,0.5))];mxDoubleEllipse[_0xf2e3[0]][_0xf2e3[147]]=mxEllipse[_0xf2e3[0]][_0xf2e3[147]];mxRhombus[_0xf2e3[0]][_0xf2e3[147]]=mxEllipse[_0xf2e3[0]][_0xf2e3[147]];mxTriangle[_0xf2e3[0]][_0xf2e3[147]]=[ new mxConnectionConstraint( new mxPoint(0,0.25),true), new mxConnectionConstraint( new mxPoint(0,0.5),true), new mxConnectionConstraint( new mxPoint(0,0.75),true), new mxConnectionConstraint( new mxPoint(0.5,0),true), new mxConnectionConstraint( new mxPoint(0.5,1),true), new mxConnectionConstraint( new mxPoint(1,0.5),true)];mxHexagon[_0xf2e3[0]][_0xf2e3[147]]=[ new mxConnectionConstraint( new mxPoint(0.375,0),true), new mxConnectionConstraint( new mxPoint(0.5,0),true), new mxConnectionConstraint( new mxPoint(0.625,0),true), new mxConnectionConstraint( new mxPoint(0.125,0.25),false), new mxConnectionConstraint( new mxPoint(0,0.5),true), new mxConnectionConstraint( new mxPoint(0.125,0.75),false), new mxConnectionConstraint( new mxPoint(0.875,0.25),false), new mxConnectionConstraint( new mxPoint(0,0.5),true), new mxConnectionConstraint( new mxPoint(1,0.5),true), new mxConnectionConstraint( new mxPoint(0.875,0.75),false), new mxConnectionConstraint( new mxPoint(0.375,1),true), new mxConnectionConstraint( new mxPoint(0.5,1),true), new mxConnectionConstraint( new mxPoint(0.625,1),true)];mxCloud[_0xf2e3[0]][_0xf2e3[147]]=[ new mxConnectionConstraint( new mxPoint(0.25,0.25),false), new mxConnectionConstraint( new mxPoint(0.4,0.1),false), new mxConnectionConstraint( new mxPoint(0.16,0.55),false), new mxConnectionConstraint( new mxPoint(0.07,0.4),false), new mxConnectionConstraint( new mxPoint(0.31,0.8),false), new mxConnectionConstraint( new mxPoint(0.13,0.77),false), new mxConnectionConstraint( new mxPoint(0.8,0.8),false), new mxConnectionConstraint( new mxPoint(0.55,0.95),false), new mxConnectionConstraint( new mxPoint(0.875,0.5),false), new mxConnectionConstraint( new mxPoint(0.96,0.7),false), new mxConnectionConstraint( new mxPoint(0.625,0.2),false), new mxConnectionConstraint( new mxPoint(0.88,0.25),false)];mxArrow[_0xf2e3[0]][_0xf2e3[147]]=null})()
\ No newline at end of file
+/**
+ * $Id: Shapes.js,v 1.13 2013-02-02 06:44:30 gaudenz Exp $
+ * Copyright (c) 2006-2012, JGraph Ltd
+ */
+
+/**
+ * Registers shapes.
+ */
+(function()
+{
+       // Cube Shape, supports size style
+       function CubeShape() { };
+       CubeShape.prototype = new mxCylinder();
+       CubeShape.prototype.constructor = CubeShape;
+       CubeShape.prototype.size = 20;
+       CubeShape.prototype.redrawPath = function(path, x, y, w, h, isForeground)
+       {
+               var s = Math.min(w, Math.min(h, mxUtils.getValue(this.style, 'size', this.size)));
+
+               if (isForeground)
+               {
+                       path.moveTo(s, h);
+                       path.lineTo(s, s);
+                       path.lineTo(0, 0);
+                       path.moveTo(s, s);
+                       path.lineTo(w, s);
+                       path.end();
+               }
+               else
+               {
+                       path.moveTo(0, 0);
+                       path.lineTo(w - s, 0);
+                       path.lineTo(w, s);
+                       path.lineTo(w, h);
+                       path.lineTo(s, h);
+                       path.lineTo(0, h - s);
+                       path.lineTo(0, 0);
+                       path.close();
+                       path.end();
+               }
+       };
+
+       mxCellRenderer.prototype.defaultShapes['cube'] = CubeShape;
+
+       // Note Shape, supports size style
+       function NoteShape() { };
+       NoteShape.prototype = new mxCylinder();
+       NoteShape.prototype.constructor = NoteShape;
+       NoteShape.prototype.size = 30;
+       NoteShape.prototype.redrawPath = function(path, x, y, w, h, isForeground)
+       {
+               var s = Math.min(w, Math.min(h, mxUtils.getValue(this.style, 'size', this.size)));
+
+               if (isForeground)
+               {
+                       path.moveTo(w - s, 0);
+                       path.lineTo(w - s, s);
+                       path.lineTo(w, s);
+                       path.end();
+               }
+               else
+               {
+                       path.moveTo(0, 0);
+                       path.lineTo(w - s, 0);
+                       path.lineTo(w, s);
+                       path.lineTo(w, h);
+                       path.lineTo(0, h);
+                       path.lineTo(0, 0);
+                       path.close();
+                       path.end();
+               }
+       };
+
+       mxCellRenderer.prototype.defaultShapes['note'] = NoteShape;
+
+       // Folder Shape, supports tabWidth, tabHeight styles
+       function FolderShape() { };
+       FolderShape.prototype = new mxCylinder();
+       FolderShape.prototype.constructor = FolderShape;
+       FolderShape.prototype.tabWidth = 60;
+       FolderShape.prototype.tabHeight = 20;
+       FolderShape.prototype.tabPosition = 'right';
+       FolderShape.prototype.redrawPath = function(path, x, y, w, h, isForeground)
+       {
+               var tw = mxUtils.getValue(this.style, 'tabWidth', this.tabWidth);
+               var th = mxUtils.getValue(this.style, 'tabHeight', this.tabHeight);
+               var tp = mxUtils.getValue(this.style, 'tabPosition', this.tabPosition);
+               var dx = Math.min(w, tw);
+               var dy = Math.min(h, th);
+
+               if (isForeground)
+               {
+                       if (tp == 'left')
+                       {
+                               path.moveTo(0, dy);
+                               path.lineTo(dx, dy);
+                       }
+                       // Right is default
+                       else
+                       {
+                               path.moveTo(w - dx, dy);
+                               path.lineTo(w, dy);
+                       }
+                       
+                       path.end();
+               }
+               else
+               {
+                       if (tp == 'left')
+                       {
+                               path.moveTo(0, 0);
+                               path.lineTo(dx, 0);
+                               path.lineTo(dx, dy);
+                               path.lineTo(w, dy);
+                       }
+                       // Right is default
+                       else
+                       {
+                               path.moveTo(0, dy);
+                               path.lineTo(w - dx, dy);
+                               path.lineTo(w - dx, 0);
+                               path.lineTo(w, 0);
+                       }
+                       
+                       path.lineTo(w, h);
+                       path.lineTo(0, h);
+                       path.lineTo(0, dy);
+                       path.close();
+                       path.end();
+               }
+       };
+
+       mxCellRenderer.prototype.defaultShapes['folder'] = FolderShape;
+
+       // Card Shape, supports size style
+       function CardShape() { };
+       CardShape.prototype = new mxCylinder();
+       CardShape.prototype.constructor = CardShape;
+       CardShape.prototype.size = 30;
+       CardShape.prototype.redrawPath = function(path, x, y, w, h, isForeground)
+       {
+               var s = Math.min(w, Math.min(h, mxUtils.getValue(this.style, 'size', this.size)));
+
+               if (!isForeground)
+               {
+                       path.moveTo(s, 0);
+                       path.lineTo(w, 0);
+                       path.lineTo(w, h);
+                       path.lineTo(0, h);
+                       path.lineTo(0, s);
+                       path.lineTo(s, 0);
+                       path.close();
+                       path.end();
+               }
+       };
+
+       mxCellRenderer.prototype.defaultShapes['card'] = CardShape;
+
+       // Tape Shape, supports size style
+       function TapeShape() { };
+       TapeShape.prototype = new mxCylinder();
+       TapeShape.prototype.constructor = TapeShape;
+       TapeShape.prototype.size = 0.4;
+       TapeShape.prototype.redrawPath = function(path, x, y, w, h, isForeground)
+       {
+               var s = mxUtils.getValue(this.style, 'size', this.size);
+               var dy = h * s;
+               var fy = 1.4;
+
+               if (!isForeground)
+               {
+                       path.moveTo(0, dy / 2);
+                       path.quadTo(w / 4, dy * fy, w / 2, dy / 2);
+                       path.quadTo(w * 3 / 4, dy * (1 - fy), w, dy / 2);
+                       path.lineTo(w, h - dy / 2);
+                       path.quadTo(w * 3 / 4, h - dy * fy, w / 2, h - dy / 2);
+                       path.quadTo(w / 4, h - dy * (1 - fy), 0, h - dy / 2);
+                       path.lineTo(0, dy / 2);
+                       path.close();
+                       path.end();
+               }
+       };
+
+       mxCellRenderer.prototype.defaultShapes['tape'] = TapeShape;
+
+       // Tape Shape, supports size style
+       function StepShape() { };
+       StepShape.prototype = new mxCylinder();
+       StepShape.prototype.constructor = StepShape;
+       StepShape.prototype.size = 0.2;
+       StepShape.prototype.redrawPath = function(path, x, y, w, h, isForeground)
+       {
+               var s =  w * mxUtils.getValue(this.style, 'size', this.size);
+
+               if (!isForeground)
+               {
+                       path.moveTo(0, 0);
+                       path.lineTo(w - s, 0);
+                       path.lineTo(w, h / 2);
+                       path.lineTo(w - s, h);
+                       path.lineTo(0, h);
+                       path.lineTo(s, h / 2);
+                       path.close();
+                       path.end();
+               }
+       };
+
+       mxCellRenderer.prototype.defaultShapes['step'] = StepShape;
+
+       // Plus Shape
+       function PlusShape()
+       {
+               mxRectangleShape.call(this);
+       };
+       mxUtils.extend(PlusShape, mxRectangleShape);
+       PlusShape.prototype.isHtmlAllowed = function()
+       {
+               return false;
+       };
+       PlusShape.prototype.paintForeground = function(c, x, y, w, h)
+       {
+               var border = Math.min(w / 5, h / 5) + 1;
+               
+               c.begin();
+               c.moveTo(x + w / 2, y + border);
+               c.lineTo(x + w / 2, y + h - border);
+               c.moveTo(x + border, y + h / 2);
+               c.lineTo(x + w - border, y + h / 2);
+               c.end();
+               c.stroke();
+               mxRectangleShape.prototype.paintForeground.apply(this, arguments);
+       };
+
+       mxCellRenderer.prototype.defaultShapes['plus'] = PlusShape;
+
+       // CompositeShape
+       function ExtendedShape()
+       {
+               mxRectangleShape.call(this);
+       };
+       mxUtils.extend(ExtendedShape, mxRectangleShape);
+       ExtendedShape.prototype.isHtmlAllowed = function()
+       {
+               return false;
+       };
+       ExtendedShape.prototype.paintForeground = function(c, x, y, w, h)
+       {
+               if (this.style != null)
+               {
+                       if (this.style['double'] == 1)
+                       {
+                               var inset = Math.max(2, this.strokewidth + 1);
+       
+                               mxRectangleShape.prototype.paintBackground.call(this, c, x + inset, y + inset, w - 2 * inset, h - 2 * inset);
+                               mxRectangleShape.prototype.paintForeground.apply(this, arguments);
+                               
+                               x += inset;
+                               y += inset;
+                               w -= 2 * inset;
+                               h -= 2 * inset;
+                       }
+                       
+                       c.setDashed(false);
+                       
+                       // Draws the symbols defined in the style. The symbols are
+                       // numbered from 1...n. Possible postfixes are align,
+                       // verticalAlign, spacing, arcSpacing, width, height
+                       var counter = 0;
+                       var shape = null;
+                       
+                       do
+                       {
+                               shape = mxCellRenderer.prototype.defaultShapes[this.style['symbol' + counter]];
+                               
+                               if (shape != null)
+                               {
+                                       var align = this.style['symbol' + counter + 'Align'];
+                                       var valign = this.style['symbol' + counter + 'VerticalAlign'];
+                                       var width = this.style['symbol' + counter + 'Width'];
+                                       var height = this.style['symbol' + counter + 'Height'];
+                                       var spacing = this.style['symbol' + counter + 'Spacing'] || 0;
+                                       var arcspacing = this.style['symbol' + counter + 'ArcSpacing'];
+                                       
+                                       if (arcspacing != null)
+                                       {
+                                               spacing += this.getArcSize(w + this.strokewidth, h + this.strokewidth) * arcspacing;
+                                       }
+                                       
+                                       var x2 = x;
+                                       var y2 = y;
+                                       
+                                       if (align == mxConstants.ALIGN_CENTER)
+                                       {
+                                               x2 += (w - width) / 2;
+                                       }
+                                       else if (align == mxConstants.ALIGN_RIGHT)
+                                       {
+                                               x2 += w - width - spacing;
+                                       }
+                                       else
+                                       {
+                                               x2 += spacing;
+                                       }
+                                       
+                                       if (valign == mxConstants.ALIGN_MIDDLE)
+                                       {
+                                               y2 += (h - height) / 2;
+                                       }
+                                       else if (valign == mxConstants.ALIGN_BOTTOM)
+                                       {
+                                               y2 += h - height - spacing;
+                                       }
+                                       else
+                                       {
+                                               y2 += spacing;
+                                       }
+                                       
+                                       c.save();
+                                       
+                                       // Small hack to pass style along into subshape
+                                       var tmp = new shape();
+                                       // TODO: Clone style and override settings (eg. strokewidth)
+                                       tmp.style = this.style;
+                                       shape.prototype.paintVertexShape.call(tmp, c, x2, y2, width, height);
+                                       c.restore();
+                               }
+                               
+                               counter++;
+                       }
+                       while (shape != null);
+               }
+       };
+
+       mxCellRenderer.prototype.defaultShapes['ext'] = ExtendedShape;
+       
+       // Tape Shape, supports size style
+       function MessageShape() { };
+       MessageShape.prototype = new mxCylinder();
+       MessageShape.prototype.constructor = MessageShape;
+       MessageShape.prototype.redrawPath = function(path, x, y, w, h, isForeground)
+       {
+               if (isForeground)
+               {
+                       path.moveTo(0, 0);
+                       path.lineTo(w / 2, h / 2);
+                       path.lineTo(w, 0);
+                       path.end();
+               }
+               else
+               {
+                       path.moveTo(0, 0);
+                       path.lineTo(w, 0);
+                       path.lineTo(w, h);
+                       path.lineTo(0, h);
+                       path.close();
+               }
+       };
+
+       mxCellRenderer.prototype.defaultShapes['message'] = MessageShape;
+       
+       // New Actor Shape
+       function UmlActorShape() { };
+       UmlActorShape.prototype = new mxCylinder();
+       UmlActorShape.prototype.constructor = UmlActorShape;
+       UmlActorShape.prototype.addPipe = true;
+       UmlActorShape.prototype.redrawPath = function(path, x, y, w, h, isForeground)
+       {
+               var width = w / 3;
+               var height = h / 4;
+               
+               if (!isForeground)
+               {
+                       path.moveTo(w / 2, height);
+                       path.curveTo(w / 2 - width, height, w / 2 - width, 0, w / 2, 0);
+                       path.curveTo(w / 2 + width, 0, w / 2 + width, height, w / 2, height);
+                       path.close();
+
+                       path.moveTo(w / 2, height);
+                       path.lineTo(w / 2, 2 * h / 3);
+                       
+                       // Arms
+                       path.moveTo(w / 2, h / 3);
+                       path.lineTo(0, h / 3);
+                       path.moveTo(w / 2, h / 3);
+                       path.lineTo(w, h / 3);
+                       
+                       // Legs
+                       path.moveTo(w / 2, 2 * h / 3);
+                       path.lineTo(0, h);
+                       path.moveTo(w / 2, 2 * h / 3);
+                       path.lineTo(w, h);
+                       path.end();
+               }
+       };
+
+       // Replaces existing actor shape
+       mxCellRenderer.prototype.defaultShapes['umlActor'] = UmlActorShape;
+
+       // New Actor Shape
+       function LollipopShape() { };
+       LollipopShape.prototype = new mxCylinder();
+       LollipopShape.prototype.constructor = LollipopShape;
+       LollipopShape.prototype.size = 10;
+       LollipopShape.prototype.addPipe = true;
+       LollipopShape.prototype.redrawPath = function(path, x, y, w, h, isForeground)
+       {
+               var ss = mxUtils.getValue(this.style, 'size', this.size);
+               var width = ss * 2 / 3;
+               var height = ss;
+               
+               if (!isForeground)
+               {
+                       path.moveTo(w / 2, height);
+                       path.curveTo(w / 2 - width, height, w / 2 - width, 0, w / 2, 0);
+                       path.curveTo(w / 2 + width, 0, w / 2 + width, height, w / 2, height);
+                       path.close();
+
+                       path.moveTo(w / 2, height);
+                       path.lineTo(w / 2, h);
+                       path.end();
+               }
+       };
+
+       // Replaces existing actor shape
+       mxCellRenderer.prototype.defaultShapes['lollipop'] = LollipopShape;
+       
+       // Folder Shape, supports tabWidth, tabHeight styles
+       function ComponentShape() { };
+       ComponentShape.prototype = new mxCylinder();
+       ComponentShape.prototype.constructor = ComponentShape;
+       ComponentShape.prototype.jettyWidth = 32;
+       ComponentShape.prototype.jettyHeight = 12;
+       ComponentShape.prototype.redrawPath = function(path, x, y, w, h, isForeground)
+       {
+               var dx = mxUtils.getValue(this.style, 'jettyWidth', this.jettyWidth);
+               var dy = mxUtils.getValue(this.style, 'jettyHeight', this.jettyHeight);
+               var x0 = dx / 2;
+               var x1 = x0 + dx / 2;
+               var y0 = 0.3 * h - dy / 2;
+               var y1 = 0.7 * h - dy / 2;
+
+               if (isForeground)
+               {
+                       path.moveTo(x0, y0);
+                       path.lineTo(x1, y0);
+                       path.lineTo(x1, y0 + dy);
+                       path.lineTo(x0, y0 + dy);
+                       path.moveTo(x0, y1);
+                       path.lineTo(x1, y1);
+                       path.lineTo(x1, y1 + dy);
+                       path.lineTo(x0, y1 + dy);
+                       path.end();
+               }
+               else
+               {
+                       path.moveTo(x0, 0);
+                       path.lineTo(w, 0);
+                       path.lineTo(w, h);
+                       path.lineTo(x0, h);
+                       path.lineTo(x0, y1 + dy);
+                       path.lineTo(0, y1 + dy);
+                       path.lineTo(0, y1);
+                       path.lineTo(x0, y1);
+                       path.lineTo(x0, y0 + dy);
+                       path.lineTo(0, y0 + dy);
+                       path.lineTo(0, y0);
+                       path.lineTo(x0, y0);
+                       path.close();
+                       path.end();
+               }
+       };
+
+       mxCellRenderer.prototype.defaultShapes['component'] = ComponentShape;
+       
+       // State Shapes derives from double ellipse
+       function StateShape() { };
+       StateShape.prototype = new mxDoubleEllipse();
+       StateShape.prototype.constructor = StateShape;
+       StateShape.prototype.outerStroke = true;
+       StateShape.prototype.paintVertexShape = function(c, x, y, w, h)
+       {
+               var inset = Math.min(4, Math.min(w / 5, h / 5));
+               
+               if (w > 0 && h > 0)
+               {
+                       c.ellipse(x + inset, y + inset, w - 2 * inset, h - 2 * inset);
+                       c.fillAndStroke();
+               }
+               
+               c.setShadow(false);
+
+               if (this.outerStroke)
+               {
+                       c.ellipse(x, y, w, h);
+                       c.stroke();                     
+               }
+       };
+
+       mxCellRenderer.prototype.defaultShapes['endState'] = StateShape;
+
+       function StartStateShape() { };
+       StartStateShape.prototype = new StateShape();
+       StartStateShape.prototype.constructor = StartStateShape;
+       StartStateShape.prototype.outerStroke = false;
+       
+       mxCellRenderer.prototype.defaultShapes['startState'] = StartStateShape;
+
+       // Image export for state shapes
+       var imageExportInitShapes = mxImageExport.prototype.initShapes;
+       mxImageExport.prototype.initShapes = function()
+       {
+               imageExportInitShapes.apply(this, arguments);
+
+               function createStateShape(outerStroke)
+               {
+                       return {
+                               drawShape: function(canvas, state, bounds, background)
+                               {
+                                       var x = bounds.x;
+                                       var y = bounds.y;
+                                       var w = bounds.width;
+                                       var h = bounds.height;
+                                       
+                                       if (background)
+                                       {
+                                               var inset = Math.min(4, Math.min(w / 5, h / 5));
+                                               x += inset;
+                                               y += inset;
+                                               w -= 2 * inset;
+                                               h -= 2 * inset;
+                                               
+                                               if (w > 0 && h > 0)
+                                               {
+                                                       canvas.ellipse(x, y, w, h);
+                                               }
+                                               
+                                               return true;
+                                       }
+                                       else
+                                       {
+                                               canvas.fillAndStroke();
+               
+                                               if (outerStroke)
+                                               {
+                                                       canvas.ellipse(x, y, w, h);
+                                                       canvas.stroke();
+                                               }
+                                       }
+                               }
+                       };
+               };
+               
+               this.shapes['endState'] = createStateShape(true);
+               this.shapes['startState'] = createStateShape(false);
+       };
+
+       // Defines custom edge shape
+       function LinkShape()
+       {
+               mxArrow.call(this);
+       };
+       mxUtils.extend(LinkShape, mxArrow);
+       LinkShape.prototype.paintEdgeShape = function(c, pts)
+       {
+               var width = 10;
+
+               // Base vector (between end points)
+               var p0 = pts[0];
+               var pe = pts[pts.length - 1];
+               
+               var dx = pe.x - p0.x;
+               var dy = pe.y - p0.y;
+               var dist = Math.sqrt(dx * dx + dy * dy);
+               var length = dist;
+               
+               // Computes the norm and the inverse norm
+               var nx = dx / dist;
+               var ny = dy / dist;
+               var basex = length * nx;
+               var basey = length * ny;
+               var floorx = width * ny/3;
+               var floory = -width * nx/3;
+               
+               // Computes points
+               var p0x = p0.x - floorx / 2;
+               var p0y = p0.y - floory / 2;
+               var p1x = p0x + floorx;
+               var p1y = p0y + floory;
+               var p2x = p1x + basex;
+               var p2y = p1y + basey;
+               var p3x = p2x + floorx;
+               var p3y = p2y + floory;
+               // p4 not necessary
+               var p5x = p3x - 3 * floorx;
+               var p5y = p3y - 3 * floory;
+               
+               c.begin();
+               c.moveTo(p1x, p1y);
+               c.lineTo(p2x, p2y);
+               c.moveTo(p5x + floorx, p5y + floory);
+               c.lineTo(p0x, p0y);
+               c.stroke();
+       };
+
+       // Registers the link shape
+       mxCellRenderer.prototype.defaultShapes['link'] = LinkShape;
+
+       // Registers and defines the custom marker
+       mxMarker.addMarker('dash', function(canvas, shape, type, pe, unitX, unitY, size, source, sw, filled)
+       {
+               var nx = unitX * (size + sw + 1);
+               var ny = unitY * (size + sw + 1);
+
+               return function()
+               {
+                       canvas.begin();
+                       canvas.moveTo(pe.x - nx / 2 - ny / 2, pe.y - ny / 2 + nx / 2);
+                       canvas.lineTo(pe.x + ny / 2 - 3 * nx / 2, pe.y - 3 * ny / 2 - nx / 2);
+                       canvas.stroke();
+               };
+       });
+
+       // Implements custom handlers
+       var SPECIAL_HANDLE_INDEX = -99;
+
+       // Handlers are only added if mxVertexHandler is defined (ie. not in embedded graph)
+       if (typeof(mxVertexHandler) != 'undefined')
+       {
+               function mxExtVertexHandler(state)
+               {
+                       mxVertexHandler.call(this, state);
+               };
+       
+               mxUtils.extend(mxExtVertexHandler, mxVertexHandler);
+       
+               mxExtVertexHandler.prototype.useGridForSpecialHandle = false;
+               
+               mxExtVertexHandler.prototype.init = function()
+               {
+                       this.horizontal = mxUtils.getValue(this.state.style, mxConstants.STYLE_HORIZONTAL, true);
+                       var graph = this.state.view.graph;
+       
+                       if (this.handleImage != null)
+                       {
+                               var bounds = new mxRectangle(0, 0, this.handleImage.width, this.handleImage.height);
+                               this.specialHandle = new mxImageShape(bounds, this.handleImage.src);
+                       }
+                       else
+                       {
+                               var size = 10;
+                               var bounds = new mxRectangle(0, 0, size, size);
+                               this.specialHandle = new mxRhombus(bounds, mxConstants.HANDLE_FILLCOLOR, mxConstants.HANDLE_STROKECOLOR);
+                       }
+                       
+                       this.specialHandle.dialect = (graph.dialect != mxConstants.DIALECT_SVG) ?
+                                       mxConstants.DIALECT_VML : mxConstants.DIALECT_SVG;
+                       this.specialHandle.init(graph.getView().getOverlayPane());
+                       this.specialHandle.node.style.cursor = this.getSpecialHandleCursor();
+       
+                       mxEvent.redirectMouseEvents(this.specialHandle.node, graph, this.state);
+                       mxVertexHandler.prototype.init.apply(this, arguments);
+               };
+               
+               mxExtVertexHandler.prototype.getSpecialHandleCursor = function()
+               {
+                       return 'default';
+               };
+               
+               mxExtVertexHandler.prototype.redraw = function()
+               {
+                       mxVertexHandler.prototype.redraw.apply(this, arguments);
+       
+                       var size = this.specialHandle.bounds.width;
+                       this.specialHandle.bounds = this.getSpecialHandleBounds(size);
+                       this.specialHandle.redraw();
+               };
+
+               mxExtVertexHandler.prototype.destroy = function()
+               {
+                       mxVertexHandler.prototype.destroy.apply(this, arguments);
+                       
+                       if (this.specialHandle != null)
+                       {
+                               this.specialHandle.destroy();
+                               this.specialHandle = null;
+                       }
+               };
+               
+               mxExtVertexHandler.prototype.getHandleForEvent = function(me)
+               {
+                       if (me.isSource(this.specialHandle))
+                       {
+                               return SPECIAL_HANDLE_INDEX;
+                       }
+                       
+                       return mxVertexHandler.prototype.getHandleForEvent.apply(this, arguments);
+               };
+
+               mxExtVertexHandler.prototype.mouseMove = function(sender, me)
+               {
+                       if (!me.isConsumed() && this.index == SPECIAL_HANDLE_INDEX)
+                       {
+                               var point = new mxPoint(me.getGraphX(), me.getGraphY());
+                               this.constrainPoint(point);
+                               var gridEnabled = this.graph.isGridEnabledEvent(me.getEvent());
+                               var scale = this.graph.getView().scale;
+                               
+                               if (gridEnabled && this.useGridForSpecialHandle)
+                               {
+                                       point.x = this.graph.snap(point.x / scale) * scale;
+                                       point.y = this.graph.snap(point.y / scale) * scale;
+                               }
+                               
+                               this.updateStyle(point);                        
+                               this.moveSizerTo(this.specialHandle, point.x, point.y);
+                               this.state.view.graph.cellRenderer.redraw(this.state, true);
+                               me.consume();
+                       }
+                       else
+                       {
+                               mxVertexHandler.prototype.mouseMove.apply(this, arguments);
+                       }
+               };
+
+               mxExtVertexHandler.prototype.mouseUp = function(sender, me)
+               {
+                       if (!me.isConsumed() && this.index == SPECIAL_HANDLE_INDEX)
+                       {
+                               this.applyStyle();
+                               this.reset();
+                               me.consume();
+                       }
+                       else
+                       {
+                               mxVertexHandler.prototype.mouseUp.apply(this, arguments);
+                       }
+               };
+
+               mxExtVertexHandler.prototype.getSpecialHandleBounds = function(size)
+               {
+                       var rotation = this.state.shape.getShapeRotation();
+                       var alpha = mxUtils.toRadians(rotation);
+                       var cos = Math.cos(alpha);
+                       var sin = Math.sin(alpha);
+                       
+                       var bounds = new mxRectangle(this.state.x, this.state.y, this.state.width, this.state.height);
+                       
+                       if (this.state.shape.isPaintBoundsInverted())
+                       {
+                               var t = (bounds.width - bounds.height) / 2;
+                               bounds.x += t;
+                               bounds.y -= t;
+                               var tmp = bounds.width;
+                               bounds.width = bounds.height;
+                               bounds.height = tmp;
+                       }
+       
+                       var pt = this.getSpecialHandlePoint(bounds);
+
+                       if (this.state.shape.flipH)
+                       {
+                               pt.x = 2 * bounds.x + bounds.width - pt.x;
+                       }
+                       
+                       if (this.state.shape.flipV)
+                       {
+                               pt.y = 2 * bounds.y + bounds.height - pt.y;
+                       }
+                       
+                       pt = mxUtils.getRotatedPoint(pt, cos, sin,
+                               new mxPoint(this.state.getCenterX(), this.state.getCenterY()));
+
+                       return new mxRectangle(pt.x - size / 2, pt.y - size / 2, size, size);
+               };
+               
+               mxExtVertexHandler.prototype.getSpecialHandlePoint = function(bounds)
+               {
+                       // Hook for subclassers
+                       return null;
+               };
+       
+               mxExtVertexHandler.prototype.updateStyle = function(point)
+               {
+                       // Hook for subclassers
+               };
+               
+               mxExtVertexHandler.prototype.constrainPoint = function(point)
+               {
+                       point.x = Math.max(this.state.x, Math.min(this.state.x + this.state.width, point.x));
+                       point.y = Math.max(this.state.y, Math.min(this.state.y + this.state.height, point.y));
+               };
+               
+               mxExtVertexHandler.prototype.applyStyle = function()
+               {
+                       // Hook for subclassers
+               };
+
+               // Folder Handler
+               function mxFolderHandler(state)
+               {
+                       mxExtVertexHandler.call(this, state);
+               };
+       
+               mxUtils.extend(mxFolderHandler, mxExtVertexHandler);
+
+               mxFolderHandler.prototype.getSpecialHandlePoint = function(bounds)
+               {
+                       var scale = this.graph.getView().scale;
+                       var tw = Math.min(bounds.width, mxUtils.getValue(this.state.style, 'tabWidth', 60) * scale);
+                       var th = Math.min(bounds.height, mxUtils.getValue(this.state.style, 'tabHeight', 20) * scale);
+                       
+                       var tp = mxUtils.getValue(this.state.style, 'tabPosition', 'right');
+                       var x = (tp == 'left') ? bounds.x + tw : bounds.x + bounds.width - tw;
+       
+                       return new mxPoint(x, bounds.y + th);
+               };
+               
+               mxFolderHandler.prototype.updateStyle = function(point)
+               {
+                       var rotation = this.state.shape.getShapeRotation();
+                       var alpha = mxUtils.toRadians(rotation);
+                       var cos = Math.cos(-alpha);
+                       var sin = Math.sin(-alpha);
+
+                       var bounds = new mxRectangle(this.state.x, this.state.y, this.state.width, this.state.height);
+                       
+                       if (this.state.shape.isPaintBoundsInverted())
+                       {
+                               var t = (bounds.width - bounds.height) / 2;
+                               bounds.x += t;
+                               bounds.y -= t;
+                               var tmp = bounds.width;
+                               bounds.width = bounds.height;
+                               bounds.height = tmp;
+                       }
+       
+                       var pt = new mxPoint(point.x, point.y);
+                       pt = mxUtils.getRotatedPoint(pt, cos, sin,
+                               new mxPoint(this.state.getCenterX(), this.state.getCenterY()));
+
+                       if (this.state.shape.flipH)
+                       {
+                               pt.x = 2 * bounds.x + bounds.width - pt.x;
+                       }
+                       
+                       if (this.state.shape.flipV)
+                       {
+                               pt.y = 2 * bounds.y + bounds.height - pt.y;
+                       }
+                       
+                       var result = this.updateStyleUnrotated(pt, bounds);
+               
+                       // Modifies point to use rotated coordinates of return value
+                       if (result != null)
+                       {
+                               if (this.state.shape.flipH)
+                               {
+                                       result.x = 2 * bounds.x + bounds.width - result.x;
+                               }
+                               
+                               if (this.state.shape.flipV)
+                               {
+                                       result.y = 2 * bounds.y + bounds.height - result.y;
+                               }
+                               
+                               cos = Math.cos(alpha);
+                               sin = Math.sin(alpha);
+                               result = mxUtils.getRotatedPoint(result, cos, sin,
+                                               new mxPoint(this.state.getCenterX(), this.state.getCenterY()));
+                               point.x = result.x;
+                               point.y = result.y;
+                       }
+               };
+               
+               mxFolderHandler.prototype.updateStyleUnrotated = function(pt, bounds)
+               {
+                       var tp = mxUtils.getValue(this.state.style, 'tabPosition', 'right');
+                       var tw = (tp == 'left') ? pt.x - bounds.x : bounds.x + bounds.width - pt.x;
+                       var th = pt.y - bounds.y;
+                       
+                       var scale = this.graph.getView().scale;
+                       this.state.style['tabWidth'] = Math.round(Math.max(1, tw) / scale);
+                       this.state.style['tabHeight'] =  Math.round(Math.max(1, th) / scale);
+               };
+               
+               mxFolderHandler.prototype.applyStyle = function()
+               {
+                       var model = this.graph.getModel();
+                       model.beginUpdate();
+                       try
+                       {
+                               this.state.view.graph.setCellStyles('tabWidth', this.state.style['tabWidth'], [this.state.cell]);
+                               this.state.view.graph.setCellStyles('tabHeight', this.state.style['tabHeight'], [this.state.cell]);
+                       }
+                       finally
+                       {
+                               model.endUpdate();
+                       }
+               };
+               
+               // Swimlane Handler
+               function mxSwimlaneHandler(state)
+               {
+                       mxFolderHandler.call(this, state);
+               };
+               
+               mxUtils.extend(mxSwimlaneHandler, mxFolderHandler);
+               
+               mxSwimlaneHandler.prototype.getSpecialHandlePoint = function(bounds)
+               {
+                       var scale = this.graph.getView().scale;
+                       var startSize = mxUtils.getValue(this.state.style, mxConstants.STYLE_STARTSIZE, mxConstants.DEFAULT_STARTSIZE);
+
+                       return new mxPoint(bounds.x + bounds.width / 2, bounds.y + Math.min(bounds.height, startSize * scale));
+               };
+               
+               mxSwimlaneHandler.prototype.updateStyleUnrotated = function(point, bounds)
+               {
+                       point.x = bounds.x + bounds.width / 2;
+                       startSize = point.y - bounds.y;
+                       var scale = this.graph.getView().scale;
+                       this.state.style['startSize'] = Math.round(Math.max(1, startSize) / scale);
+                       
+                       return point;
+               };
+               
+               mxSwimlaneHandler.prototype.applyStyle = function()
+               {
+                       this.state.view.graph.setCellStyles('startSize', this.state.style['startSize'], [this.state.cell]);
+               };
+
+               // Cube Handler
+               function mxCubeHandler(state)
+               {
+                       mxFolderHandler.call(this, state);
+               };
+       
+               mxUtils.extend(mxCubeHandler, mxFolderHandler);
+               
+               mxCubeHandler.prototype.defaultValue = 20;
+       
+               mxCubeHandler.prototype.scaleFactor = 1;
+               
+               mxCubeHandler.prototype.getSpecialHandlePoint = function(bounds)
+               {
+                       var scale = this.graph.getView().scale;
+                       var sz = Math.min(bounds.width, Math.min(bounds.height,
+                               mxUtils.getValue(this.state.style, 'size', this.defaultValue) * scale / this.scaleFactor));
+                       
+                       return new mxPoint(bounds.x + sz, bounds.y + sz);
+               };
+       
+               mxCubeHandler.prototype.updateStyleUnrotated = function(pt, bounds)
+               {
+                       var size = Math.max(0, Math.min(Math.min(bounds.width / this.scaleFactor, pt.x - bounds.x),
+                                       Math.min(bounds.height / this.scaleFactor, pt.y - bounds.y)));
+                       var scale = this.graph.getView().scale;
+                       this.state.style['size'] = Math.round(Math.max(1, size) / scale) * this.scaleFactor;
+                       
+                       // Stays on the diagonal
+                       return new mxPoint(bounds.x + size, bounds.y + size);
+               };
+               
+               mxCubeHandler.prototype.applyStyle = function()
+               {
+                       this.state.view.graph.setCellStyles('size', this.state.style['size'], [this.state.cell]);
+               };
+               
+               // Card Handler
+               function mxCardHandler(state)
+               {
+                       mxCubeHandler.call(this, state);
+               };
+       
+               mxUtils.extend(mxCardHandler, mxCubeHandler);
+               
+               mxCardHandler.prototype.defaultValue = 30;
+       
+               mxCardHandler.prototype.scaleFactor = 2;
+               
+               // Note Handler
+               function mxNoteHandler(state)
+               {
+                       mxCubeHandler.call(this, state);
+               };
+       
+               mxUtils.extend(mxNoteHandler, mxCubeHandler);
+               
+               mxNoteHandler.prototype.defaultValue = 30;
+       
+               mxNoteHandler.prototype.scaleFactor = 1;
+               
+               mxNoteHandler.prototype.getSpecialHandlePoint = function(bounds)
+               {
+                       var scale = this.graph.getView().scale;
+                       var sz = Math.min(bounds.width, Math.min(bounds.height,
+                                       mxUtils.getValue(this.state.style, 'size', this.defaultValue) * scale / this.scaleFactor));
+                       
+                       return new mxPoint(bounds.x + bounds.width - sz, bounds.y + sz);
+               };
+               
+               mxNoteHandler.prototype.updateStyleUnrotated = function(pt, bounds)
+               {
+                       var size = Math.max(0, Math.min(Math.min(bounds.width / this.scaleFactor, pt.x - bounds.x + bounds.width),
+                                       Math.min(bounds.height / this.scaleFactor, pt.y - bounds.y)));
+                       var scale = this.graph.getView().scale;
+                       this.state.style['size'] = Math.round(Math.max(1, size) / scale) * this.scaleFactor;
+                       
+                       // Stays on the diagonal
+                       return new mxPoint(bounds.x + bounds.width - size, bounds.y + size);
+               };
+               
+               // Step Handler
+               function mxStepHandler(state)
+               {
+                       mxCubeHandler.call(this, state);
+               };
+       
+               mxUtils.extend(mxStepHandler, mxCubeHandler);
+               
+               mxStepHandler.prototype.defaultValue = 0.2;
+       
+               mxStepHandler.prototype.scaleFactor = 1;
+               
+               mxStepHandler.prototype.getSpecialHandlePoint = function(bounds)
+               {
+                       var sz = mxUtils.getValue(this.state.style, 'size', this.defaultValue);
+                       
+                       return new mxPoint(bounds.x + bounds.width * sz, bounds.y + bounds.height / 2);
+               };
+       
+               mxStepHandler.prototype.updateStyleUnrotated = function(pt, bounds)
+               {
+                       var size = Math.min(1, (pt.x - bounds.x) / bounds.width);
+                       this.state.style['size'] = size;
+                       
+                       return new mxPoint(bounds.x + size * bounds.width, bounds.y + bounds.height / 2);
+               };
+               
+               // Tape Handler
+               function mxTapeHandler(state)
+               {
+                       mxCubeHandler.call(this, state);
+               };
+       
+               mxUtils.extend(mxTapeHandler, mxCubeHandler);
+               
+               mxTapeHandler.prototype.defaultValue = 0.4;
+       
+               mxTapeHandler.prototype.scaleFactor = 1;
+               
+               mxTapeHandler.prototype.getSpecialHandlePoint = function(bounds)
+               {
+                       var sz = mxUtils.getValue(this.state.style, 'size', this.defaultValue);
+       
+                       return new mxPoint(bounds.x + bounds.width / 2, bounds.y + sz * bounds.height / 2);
+               };
+       
+               mxTapeHandler.prototype.updateStyleUnrotated = function(pt, bounds)
+               {
+                       var size = Math.max(0, Math.min(1, ((pt.y - bounds.y) / bounds.height) * 2));
+                       this.state.style['size'] = size;
+                       
+                       return new mxPoint(bounds.x + bounds.width / 2, bounds.y + size * bounds.height / 2);
+               };
+               
+               var handlers = {'swimlane': mxSwimlaneHandler, 'folder': mxFolderHandler, 'cube': mxCubeHandler,
+                               'card': mxCardHandler, 'note': mxNoteHandler, 'step': mxStepHandler, 'tape': mxTapeHandler};
+
+               var mxGraphCreateHandler = mxGraph.prototype.createHandler;
+               mxGraph.prototype.createHandler = function(state)
+               {
+                       if (state != null)
+                       {
+                               var ctor = handlers[state.style['shape']];
+
+                               if (ctor != null)
+                               {
+                                       return new ctor(state);
+                               }
+                       }
+                       
+                       return mxGraphCreateHandler.apply(this, arguments);
+               };
+       }
+       
+       // Constraints
+       mxGraph.prototype.getAllConnectionConstraints = function(terminal, source)
+       {
+               if (terminal != null && terminal.shape != null)
+               {
+                       if (terminal.shape.stencil != null)
+                       {
+                               if (terminal.shape.stencil != null)
+                               {
+                                       return terminal.shape.stencil.constraints;
+                               }
+                       }
+                       else if (terminal.shape.constraints != null)
+                       {
+                               return terminal.shape.constraints;
+                       }
+               }
+
+               return null;
+       };
+
+       mxRectangleShape.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.25, 0), true),
+                                                 new mxConnectionConstraint(new mxPoint(0.5, 0), true),
+                                                 new mxConnectionConstraint(new mxPoint(0.75, 0), true),
+                                                new mxConnectionConstraint(new mxPoint(0, 0.25), true),
+                                                new mxConnectionConstraint(new mxPoint(0, 0.5), true),
+                                                new mxConnectionConstraint(new mxPoint(0, 0.75), true),
+                                                new mxConnectionConstraint(new mxPoint(1, 0.25), true),
+                                                new mxConnectionConstraint(new mxPoint(1, 0.5), true),
+                                                new mxConnectionConstraint(new mxPoint(1, 0.75), true),
+                                                new mxConnectionConstraint(new mxPoint(0.25, 1), true),
+                                                new mxConnectionConstraint(new mxPoint(0.5, 1), true),
+                                                new mxConnectionConstraint(new mxPoint(0.75, 1), true)];
+       mxLabel.prototype.constraints = mxRectangleShape.prototype.constraints;
+       mxImageShape.prototype.constraints = mxRectangleShape.prototype.constraints;
+       mxSwimlane.prototype.constraints = mxRectangleShape.prototype.constraints;
+       PlusShape.prototype.constraints = mxRectangleShape.prototype.constraints;
+       NoteShape.prototype.constraints = mxRectangleShape.prototype.constraints;
+       CardShape.prototype.constraints = mxRectangleShape.prototype.constraints;
+       CubeShape.prototype.constraints = mxRectangleShape.prototype.constraints;
+       FolderShape.prototype.constraints = mxRectangleShape.prototype.constraints;
+       mxCylinder.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.15, 0.05), false),
+                                        new mxConnectionConstraint(new mxPoint(0.5, 0), true),
+                                        new mxConnectionConstraint(new mxPoint(0.85, 0.05), false),
+                                new mxConnectionConstraint(new mxPoint(0, 0.3), true),
+                                new mxConnectionConstraint(new mxPoint(0, 0.5), true),
+                                new mxConnectionConstraint(new mxPoint(0, 0.7), true),
+                                new mxConnectionConstraint(new mxPoint(1, 0.3), true),
+                                new mxConnectionConstraint(new mxPoint(1, 0.5), true),
+                                new mxConnectionConstraint(new mxPoint(1, 0.7), true),
+                                new mxConnectionConstraint(new mxPoint(0.15, 0.95), false),
+                                new mxConnectionConstraint(new mxPoint(0.5, 1), true),
+                                new mxConnectionConstraint(new mxPoint(0.85, 0.95), false)];
+       UmlActorShape.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.25, 0.1), false),
+                                                 new mxConnectionConstraint(new mxPoint(0.5, 0), false),
+                                                 new mxConnectionConstraint(new mxPoint(0.75, 0.1), false),
+                                                new mxConnectionConstraint(new mxPoint(0, 1/3), false),
+                                                new mxConnectionConstraint(new mxPoint(0, 1), false),
+                                                new mxConnectionConstraint(new mxPoint(1, 1/3), false),
+                                                new mxConnectionConstraint(new mxPoint(1, 1), false),
+                                                new mxConnectionConstraint(new mxPoint(0.5, 0.5), false)];
+       ComponentShape.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.25, 0), true),
+                                                 new mxConnectionConstraint(new mxPoint(0.5, 0), true),
+                                                 new mxConnectionConstraint(new mxPoint(0.75, 0), true),
+                                                new mxConnectionConstraint(new mxPoint(0, 0.3), true),
+                                                new mxConnectionConstraint(new mxPoint(0, 0.7), true),
+                                                new mxConnectionConstraint(new mxPoint(1, 0.25), true),
+                                                new mxConnectionConstraint(new mxPoint(1, 0.5), true),
+                                                new mxConnectionConstraint(new mxPoint(1, 0.75), true),
+                                                new mxConnectionConstraint(new mxPoint(0.25, 1), true),
+                                                new mxConnectionConstraint(new mxPoint(0.5, 1), true),
+                                                new mxConnectionConstraint(new mxPoint(0.75, 1), true)];
+       mxActor.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.5, 0), true),
+                                new mxConnectionConstraint(new mxPoint(0.25, 0.2), false),
+                                new mxConnectionConstraint(new mxPoint(0.1, 0.5), false),
+                                new mxConnectionConstraint(new mxPoint(0, 0.75), true),
+                                new mxConnectionConstraint(new mxPoint(0.75, 0.25), false),
+                                new mxConnectionConstraint(new mxPoint(0.9, 0.5), false),
+                                new mxConnectionConstraint(new mxPoint(1, 0.75), true),
+                                new mxConnectionConstraint(new mxPoint(0.25, 1), true),
+                                new mxConnectionConstraint(new mxPoint(0.5, 1), true),
+                                new mxConnectionConstraint(new mxPoint(0.75, 1), true)];
+       TapeShape.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0, 0.35), false),
+                                          new mxConnectionConstraint(new mxPoint(0, 0.5), false),
+                                          new mxConnectionConstraint(new mxPoint(0, 0.65), false),
+                                          new mxConnectionConstraint(new mxPoint(1, 0.35), false),
+                                               new mxConnectionConstraint(new mxPoint(1, 0.5), false),
+                                               new mxConnectionConstraint(new mxPoint(1, 0.65), false),
+                                                                               new mxConnectionConstraint(new mxPoint(0.25, 1), false),
+                                                                               new mxConnectionConstraint(new mxPoint(0.75, 0), false)];
+       // TODO: Relative ports
+       StepShape.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.25, 0), true),
+                                       new mxConnectionConstraint(new mxPoint(0.5, 0), true),
+                                       new mxConnectionConstraint(new mxPoint(0.75, 0), true),
+                                       new mxConnectionConstraint(new mxPoint(0.25, 1), true),
+                                                       new mxConnectionConstraint(new mxPoint(0.5, 1), true),
+                                                       new mxConnectionConstraint(new mxPoint(0.75, 1), true),
+                                          new mxConnectionConstraint(new mxPoint(0.1, 0.25), false),
+                                          new mxConnectionConstraint(new mxPoint(0.2, 0.5), false),
+                                          new mxConnectionConstraint(new mxPoint(0.1, 0.75), false),
+                                          new mxConnectionConstraint(new mxPoint(0.9, 0.25), false),
+                                               new mxConnectionConstraint(new mxPoint(1, 0.5), false),
+                                               new mxConnectionConstraint(new mxPoint(0.9, 0.75), false)];
+       mxLine.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0, 0.5), false),
+                                       new mxConnectionConstraint(new mxPoint(0.25, 0.5), false),
+                                       new mxConnectionConstraint(new mxPoint(0.75, 0.5), false),
+                                                                       new mxConnectionConstraint(new mxPoint(1, 0.5), false)];
+       LollipopShape.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.5, 0), false),
+                                                                               new mxConnectionConstraint(new mxPoint(0.5, 1), false)];
+       mxEllipse.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0, 0), true), new mxConnectionConstraint(new mxPoint(1, 0), true),
+                                          new mxConnectionConstraint(new mxPoint(0, 1), true), new mxConnectionConstraint(new mxPoint(1, 1), true),
+                                          new mxConnectionConstraint(new mxPoint(0.5, 0), true), new mxConnectionConstraint(new mxPoint(0.5, 1), true),
+                                                  new mxConnectionConstraint(new mxPoint(0, 0.5), true), new mxConnectionConstraint(new mxPoint(1, 0.5))];
+       mxDoubleEllipse.prototype.constraints = mxEllipse.prototype.constraints;
+       mxRhombus.prototype.constraints = mxEllipse.prototype.constraints;
+       mxTriangle.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0, 0.25), true),
+                                           new mxConnectionConstraint(new mxPoint(0, 0.5), true),
+                                          new mxConnectionConstraint(new mxPoint(0, 0.75), true),
+                                          new mxConnectionConstraint(new mxPoint(0.5, 0), true),
+                                          new mxConnectionConstraint(new mxPoint(0.5, 1), true),
+                                          new mxConnectionConstraint(new mxPoint(1, 0.5), true)];
+       mxHexagon.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.375, 0), true),
+                                           new mxConnectionConstraint(new mxPoint(0.5, 0), true),
+                                          new mxConnectionConstraint(new mxPoint(0.625, 0), true),
+                                          new mxConnectionConstraint(new mxPoint(0.125, 0.25), false),
+                                          new mxConnectionConstraint(new mxPoint(0, 0.5), true),
+                                          new mxConnectionConstraint(new mxPoint(0.125, 0.75), false),
+                                          new mxConnectionConstraint(new mxPoint(0.875, 0.25), false),
+                                          new mxConnectionConstraint(new mxPoint(0, 0.5), true),
+                                          new mxConnectionConstraint(new mxPoint(1, 0.5), true),
+                                          new mxConnectionConstraint(new mxPoint(0.875, 0.75), false),
+                                          new mxConnectionConstraint(new mxPoint(0.375, 1), true),
+                                           new mxConnectionConstraint(new mxPoint(0.5, 1), true),
+                                          new mxConnectionConstraint(new mxPoint(0.625, 1), true)];
+       mxCloud.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.25, 0.25), false),
+                                        new mxConnectionConstraint(new mxPoint(0.4, 0.1), false),
+                                        new mxConnectionConstraint(new mxPoint(0.16, 0.55), false),
+                                        new mxConnectionConstraint(new mxPoint(0.07, 0.4), false),
+                                        new mxConnectionConstraint(new mxPoint(0.31, 0.8), false),
+                                        new mxConnectionConstraint(new mxPoint(0.13, 0.77), false),
+                                        new mxConnectionConstraint(new mxPoint(0.8, 0.8), false),
+                                        new mxConnectionConstraint(new mxPoint(0.55, 0.95), false),
+                                        new mxConnectionConstraint(new mxPoint(0.875, 0.5), false),
+                                        new mxConnectionConstraint(new mxPoint(0.96, 0.7), false),
+                                        new mxConnectionConstraint(new mxPoint(0.625, 0.2), false),
+                                        new mxConnectionConstraint(new mxPoint(0.88, 0.25), false)];
+       mxArrow.prototype.constraints = null;
+})();
index 2d05e1a..970d060 100644 (file)
@@ -1 +1,782 @@
-var _0x626f=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x64\x69\x74\x6F\x72\x55\x69","\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x70\x61\x6C\x65\x74\x74\x65\x73","\x73\x68\x6F\x77\x54\x6F\x6F\x6C\x74\x69\x70\x73","\x67\x72\x61\x70\x68","\x64\x69\x76","\x63\x72\x65\x61\x74\x65\x45\x6C\x65\x6D\x65\x6E\x74","\x67\x65\x74\x53\x74\x79\x6C\x65\x73\x68\x65\x65\x74","\x65\x64\x69\x74\x6F\x72","\x72\x65\x73\x65\x74\x56\x69\x65\x77\x4F\x6E\x52\x6F\x6F\x74\x43\x68\x61\x6E\x67\x65","\x66\x6F\x6C\x64\x69\x6E\x67\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x43\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65","\x61\x75\x74\x6F\x53\x63\x72\x6F\x6C\x6C","\x73\x65\x74\x54\x6F\x6F\x6C\x74\x69\x70\x73","\x73\x65\x74\x45\x6E\x61\x62\x6C\x65\x64","\x76\x69\x73\x69\x62\x69\x6C\x69\x74\x79","\x73\x74\x79\x6C\x65","\x68\x69\x64\x64\x65\x6E","\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x61\x62\x73\x6F\x6C\x75\x74\x65","\x61\x70\x70\x65\x6E\x64\x43\x68\x69\x6C\x64","\x62\x6F\x64\x79","\x49\x53\x5F\x54\x4F\x55\x43\x48","\x6D\x6F\x75\x73\x65\x75\x70","\x62\x69\x6E\x64","\x61\x64\x64\x4C\x69\x73\x74\x65\x6E\x65\x72","\x73\x63\x72\x6F\x6C\x6C","\x6D\x6F\x75\x73\x65\x64\x6F\x77\x6E","\x68\x69\x64\x65\x54\x6F\x6F\x6C\x74\x69\x70","\x6D\x6F\x75\x73\x65\x6D\x6F\x76\x65","\x67\x65\x74\x53\x6F\x75\x72\x63\x65","\x63\x75\x72\x72\x65\x6E\x74\x45\x6C\x74","\x70\x61\x72\x65\x6E\x74\x4E\x6F\x64\x65","\x6D\x6F\x75\x73\x65\x6F\x75\x74","\x74\x6F\x45\x6C\x65\x6D\x65\x6E\x74","\x72\x65\x6C\x61\x74\x65\x64\x54\x61\x72\x67\x65\x74","\x69\x6E\x69\x74","\x73\x72\x63","\x2F\x74\x6F\x6F\x6C\x74\x69\x70\x2E\x70\x6E\x67","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x6C\x6F\x67","\x65\x6E\x74\x72\x79","\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x67\x65\x74","\x2F","\x5F\x31\x32\x38\x78\x31\x32\x38\x2E\x70\x6E\x67","\x73\x74\x61\x72\x74","\x71\x75\x65\x73\x74\x69\x6F\x6E","\x69\x6E\x70\x75\x74","\x65\x6E\x64","\x61\x64\x64\x49\x6D\x61\x67\x65\x50\x61\x6C\x65\x74\x74\x65","\x65\x6E\x61\x62\x6C\x65\x54\x6F\x6F\x6C\x74\x69\x70\x73","\x74\x6F\x6F\x6C\x74\x69\x70\x42\x6F\x72\x64\x65\x72","\x74\x68\x75\x6D\x62\x42\x6F\x72\x64\x65\x72","\x74\x6F\x6F\x6C\x74\x69\x70\x44\x65\x6C\x61\x79","\x69\x6E\x73\x74\x61\x6C\x6C\x45\x64\x67\x65\x73","\x67\x65\x61\x72\x49\x6D\x61\x67\x65","\x2F\x63\x6C\x69\x70\x61\x72\x74\x2F\x47\x65\x61\x72\x5F\x31\x32\x38\x78\x31\x32\x38\x2E\x70\x6E\x67","\x74\x68\x75\x6D\x62\x57\x69\x64\x74\x68","\x74\x68\x75\x6D\x62\x48\x65\x69\x67\x68\x74","\x74\x68\x75\x6D\x62\x50\x61\x64\x64\x69\x6E\x67","\x73\x69\x64\x65\x62\x61\x72\x54\x69\x74\x6C\x65\x53\x69\x7A\x65","\x73\x69\x64\x65\x62\x61\x72\x54\x69\x74\x6C\x65\x73","\x74\x6F\x6F\x6C\x74\x69\x70\x54\x69\x74\x6C\x65\x73","\x73\x68\x6F\x77\x54\x6F\x6F\x6C\x74\x69\x70","\x74\x68\x72\x65\x61\x64","\x63\x6C\x65\x61\x72\x54\x69\x6D\x65\x6F\x75\x74","\x74\x6F\x6F\x6C\x74\x69\x70","\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65","\x67\x65\x53\x69\x64\x65\x62\x61\x72\x54\x6F\x6F\x6C\x74\x69\x70","\x67\x72\x61\x70\x68\x32","\x73\x65\x74\x54\x72\x61\x6E\x73\x6C\x61\x74\x65","\x76\x69\x65\x77","\x49\x53\x5F\x53\x56\x47","\x63\x61\x6E\x76\x61\x73","\x72\x65\x6C\x61\x74\x69\x76\x65","\x74\x6F\x6F\x6C\x74\x69\x70\x49\x6D\x61\x67\x65","\x63\x72\x65\x61\x74\x65\x49\x6D\x61\x67\x65","\x77\x69\x64\x74\x68","\x31\x34\x70\x78","\x68\x65\x69\x67\x68\x74","\x32\x37\x70\x78","\x64\x69\x73\x70\x6C\x61\x79","\x62\x6C\x6F\x63\x6B","\x6C\x61\x62\x65\x6C\x73\x56\x69\x73\x69\x62\x6C\x65","\x63\x6C\x65\x61\x72","\x6D\x6F\x64\x65\x6C","\x61\x64\x64\x43\x65\x6C\x6C\x73","\x67\x65\x74\x47\x72\x61\x70\x68\x42\x6F\x75\x6E\x64\x73","\x49\x53\x5F\x51\x55\x49\x52\x4B\x53","\x6F\x76\x65\x72\x66\x6C\x6F\x77","\x76\x69\x73\x69\x62\x6C\x65","\x70\x78","\x6C\x65\x6E\x67\x74\x68","\x74\x6F\x6F\x6C\x74\x69\x70\x54\x69\x74\x6C\x65","\x62\x6F\x72\x64\x65\x72\x54\x6F\x70","\x31\x70\x78\x20\x73\x6F\x6C\x69\x64\x20\x67\x72\x61\x79","\x74\x65\x78\x74\x41\x6C\x69\x67\x6E","\x63\x65\x6E\x74\x65\x72","\x31\x30\x30\x25","\x70\x61\x64\x64\x69\x6E\x67\x54\x6F\x70","\x32\x70\x78","\x36\x70\x78","\x69\x6E\x6E\x65\x72\x48\x54\x4D\x4C","","\x77\x72\x69\x74\x65","\x6F\x66\x66\x73\x65\x74\x48\x65\x69\x67\x68\x74","\x6D\x61\x72\x67\x69\x6E\x54\x6F\x70","\x74\x6F\x70","\x6E\x6F\x6E\x65","\x78","\x6D\x69\x6E","\x79","\x63\x6C\x69\x65\x6E\x74\x57\x69\x64\x74\x68","\x73\x70\x6C\x69\x74\x53\x69\x7A\x65","\x6F\x66\x66\x73\x65\x74\x54\x6F\x70","\x73\x63\x72\x6F\x6C\x6C\x54\x6F\x70","\x6D\x61\x78","\x74\x72\x61\x6E\x73\x66\x6F\x72\x6D","\x74\x72\x61\x6E\x73\x6C\x61\x74\x65\x28","\x2C","\x29","\x73\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x6C\x65\x66\x74","\x64\x72\x61\x77\x50\x61\x6E\x65","\x73\x65\x74\x54\x69\x6D\x65\x6F\x75\x74","\x63\x72\x65\x61\x74\x65\x54\x69\x74\x6C\x65","\x61","\x68\x72\x65\x66","\x6A\x61\x76\x61\x73\x63\x72\x69\x70\x74\x3A\x76\x6F\x69\x64\x28\x30\x29\x3B","\x67\x65\x54\x69\x74\x6C\x65","\x63\x72\x65\x61\x74\x65\x54\x68\x75\x6D\x62","\x73\x63\x61\x6C\x65\x41\x6E\x64\x54\x72\x61\x6E\x73\x6C\x61\x74\x65","\x66\x6C\x6F\x6F\x72","\x64\x69\x61\x6C\x65\x63\x74","\x44\x49\x41\x4C\x45\x43\x54\x5F\x53\x56\x47","\x4E\x4F\x5F\x46\x4F","\x63\x6C\x6F\x6E\x65\x4E\x6F\x64\x65","\x6F\x77\x6E\x65\x72\x53\x56\x47\x45\x6C\x65\x6D\x65\x6E\x74","\x67\x65\x74\x43\x61\x6E\x76\x61\x73","\x67\x65\x74\x4D\x6F\x64\x65\x6C","\x49\x53\x5F\x49\x45\x36","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x75\x72\x6C\x28","\x74\x72\x61\x6E\x73\x70\x61\x72\x65\x6E\x74\x49\x6D\x61\x67\x65","\x63\x75\x72\x73\x6F\x72","\x70\x6F\x69\x6E\x74\x65\x72","\x6D\x69\x6E\x57\x69\x64\x74\x68","\x6D\x69\x6E\x48\x65\x69\x67\x68\x74","\x66\x6F\x6E\x74\x53\x69\x7A\x65","\x77\x68\x69\x74\x65\x53\x70\x61\x63\x65","\x6E\x6F\x77\x72\x61\x70","\x49\x53\x5F\x49\x45","\x34\x70\x78","\x63\x72\x65\x61\x74\x65\x49\x74\x65\x6D","\x67\x65\x49\x74\x65\x6D","\x70\x61\x64\x64\x69\x6E\x67","\x63\x6C\x69\x63\x6B","\x63\x6F\x6E\x73\x75\x6D\x65","\x63\x72\x65\x61\x74\x65\x44\x72\x6F\x70\x48\x61\x6E\x64\x6C\x65\x72","\x69\x73\x45\x6E\x61\x62\x6C\x65\x64","\x67\x65\x74\x49\x6D\x70\x6F\x72\x74\x61\x62\x6C\x65\x43\x65\x6C\x6C\x73","\x69\x73\x56\x61\x6C\x69\x64\x44\x72\x6F\x70\x54\x61\x72\x67\x65\x74","\x69\x73\x53\x70\x6C\x69\x74\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x53\x70\x6C\x69\x74\x54\x61\x72\x67\x65\x74","\x73\x70\x6C\x69\x74\x45\x64\x67\x65","\x69\x6D\x70\x6F\x72\x74\x43\x65\x6C\x6C\x73","\x73\x63\x72\x6F\x6C\x6C\x43\x65\x6C\x6C\x54\x6F\x56\x69\x73\x69\x62\x6C\x65","\x73\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73","\x63\x72\x65\x61\x74\x65\x44\x72\x61\x67\x50\x72\x65\x76\x69\x65\x77","\x62\x6F\x72\x64\x65\x72","\x31\x70\x78\x20\x64\x61\x73\x68\x65\x64\x20\x62\x6C\x61\x63\x6B","\x63\x72\x65\x61\x74\x65\x44\x72\x61\x67\x53\x6F\x75\x72\x63\x65","\x61\x75\x74\x6F\x73\x63\x72\x6F\x6C\x6C","\x6D\x61\x6B\x65\x44\x72\x61\x67\x67\x61\x62\x6C\x65","\x67\x65\x74\x44\x72\x6F\x70\x54\x61\x72\x67\x65\x74","\x61\x70\x70\x6C\x79","\x69\x73\x56\x61\x6C\x69\x64\x52\x6F\x6F\x74","\x61\x64\x64\x43\x6C\x69\x63\x6B\x48\x61\x6E\x64\x6C\x65\x72","\x67\x65\x74\x43\x6C\x69\x65\x6E\x74\x58","\x67\x65\x74\x43\x6C\x69\x65\x6E\x74\x59","\x61\x64\x64\x47\x65\x73\x74\x75\x72\x65\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x6D\x6F\x75\x73\x65\x55\x70","\x69\x73\x50\x6F\x70\x75\x70\x54\x72\x69\x67\x67\x65\x72","\x63\x75\x72\x72\x65\x6E\x74\x47\x72\x61\x70\x68","\x74\x6F\x6C\x65\x72\x61\x6E\x63\x65","\x61\x62\x73","\x67\x65\x74\x47\x72\x69\x64\x53\x69\x7A\x65","\x64\x72\x6F\x70","\x63\x72\x65\x61\x74\x65\x58\x6D\x6C\x44\x6F\x63\x75\x6D\x65\x6E\x74","\x6C\x61\x62\x65\x6C","\x66\x6F\x72\x45\x61\x63\x68","\x63\x72\x65\x61\x74\x65\x56\x65\x72\x74\x65\x78\x54\x65\x6D\x70\x6C\x61\x74\x65","\x6F\x74\x68\x65\x72","\x61\x64\x64","\x48\x6F\x73\x74","\x55\x73\x65\x72\x6E\x61\x6D\x65","\x50\x61\x73\x73\x77\x6F\x72\x64","\x54\x6F","\x53\x75\x62\x6A\x65\x63\x74","\x42\x6F\x64\x79","\x65\x6D\x61\x69\x6C","\x76\x65\x72\x74\x65\x78","\x63\x72\x65\x61\x74\x65\x56\x65\x72\x74\x65\x78\x54\x65\x6D\x70\x6C\x61\x74\x65\x46\x72\x6F\x6D\x43\x65\x6C\x6C\x73","\x69\x73\x47\x75\x69\x64\x65\x73\x45\x6E\x61\x62\x6C\x65\x64","\x67\x75\x69\x64\x65\x73\x45\x6E\x61\x62\x6C\x65\x64","\x67\x72\x61\x70\x68\x48\x61\x6E\x64\x6C\x65\x72","\x63\x72\x65\x61\x74\x65\x45\x64\x67\x65\x54\x65\x6D\x70\x6C\x61\x74\x65","\x73\x65\x74\x54\x65\x72\x6D\x69\x6E\x61\x6C\x50\x6F\x69\x6E\x74","\x67\x65\x6F\x6D\x65\x74\x72\x79","\x65\x64\x67\x65","\x63\x72\x65\x61\x74\x65\x45\x64\x67\x65\x54\x65\x6D\x70\x6C\x61\x74\x65\x46\x72\x6F\x6D\x43\x65\x6C\x6C\x73","\x73\x65\x74\x44\x65\x66\x61\x75\x6C\x74\x45\x64\x67\x65","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x43\x6F\x6C\x6F\x72","\x23\x66\x66\x66\x66\x66\x66","\x61\x64\x64\x50\x61\x6C\x65\x74\x74\x65","\x67\x65\x53\x69\x64\x65\x62\x61\x72","\x61\x64\x64\x46\x6F\x6C\x64\x69\x6E\x67\x48\x61\x6E\x64\x6C\x65\x72","\x2F\x63\x6F\x6C\x6C\x61\x70\x73\x65\x64\x2E\x67\x69\x66\x29","\x2F\x65\x78\x70\x61\x6E\x64\x65\x64\x2E\x67\x69\x66\x29","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x52\x65\x70\x65\x61\x74","\x6E\x6F\x2D\x72\x65\x70\x65\x61\x74","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x31\x30\x30\x25\x20\x35\x30\x25","\x77\x61\x69\x74","\x72\x65\x6D\x6F\x76\x65\x50\x61\x6C\x65\x74\x74\x65","\x72\x65\x6D\x6F\x76\x65\x43\x68\x69\x6C\x64","\x69\x6D\x61\x67\x65\x3B\x69\x6D\x61\x67\x65\x3D"];_0x626f[0];function Sidebar(_0xfd42x2,_0xfd42x3){this[_0x626f[1]]=_0xfd42x2;this[_0x626f[2]]=_0xfd42x3;this[_0x626f[3]]= new Object();this[_0x626f[4]]=true;this[_0x626f[5]]= new Graph(document[_0x626f[7]](_0x626f[6]),null,null,this[_0x626f[1]][_0x626f[9]][_0x626f[5]][_0x626f[8]]());this[_0x626f[5]][_0x626f[10]]=false;this[_0x626f[5]][_0x626f[11]]=false;this[_0x626f[5]][_0x626f[12]](false);this[_0x626f[5]][_0x626f[13]]=false;this[_0x626f[5]][_0x626f[14]](false);this[_0x626f[5]][_0x626f[15]](false);this[_0x626f[5]][_0x626f[2]][_0x626f[17]][_0x626f[16]]=_0x626f[18];this[_0x626f[5]][_0x626f[2]][_0x626f[17]][_0x626f[19]]=_0x626f[20];document[_0x626f[22]][_0x626f[21]](this[_0x626f[5]][_0x626f[2]]);if(!mxClient[_0x626f[23]]){mxEvent[_0x626f[26]](document,_0x626f[24],mxUtils[_0x626f[25]](this,function(){this[_0x626f[4]]=true}));mxEvent[_0x626f[26]](_0xfd42x3,_0x626f[27],mxUtils[_0x626f[25]](this,function(){this[_0x626f[4]]=true}));mxEvent[_0x626f[26]](document,_0x626f[28],mxUtils[_0x626f[25]](this,function(){this[_0x626f[4]]=false;this[_0x626f[29]]()}));mxEvent[_0x626f[26]](document,_0x626f[30],mxUtils[_0x626f[25]](this,function(_0xfd42x4){var _0xfd42x5=mxEvent[_0x626f[31]](_0xfd42x4);while(_0xfd42x5!=null){if(_0xfd42x5==this[_0x626f[32]]){return};_0xfd42x5=_0xfd42x5[_0x626f[33]]};this[_0x626f[29]]()}));mxEvent[_0x626f[26]](document,_0x626f[34],mxUtils[_0x626f[25]](this,function(_0xfd42x4){if(_0xfd42x4[_0x626f[35]]==null&&_0xfd42x4[_0x626f[36]]==null){this[_0x626f[29]]()}}))};this[_0x626f[37]](); new Image()[_0x626f[38]]=IMAGE_PATH+_0x626f[39]}Sidebar[_0x626f[40]][_0x626f[37]]=function(){var _0xfd42x6=STENCIL_PATH;console[_0x626f[41]](_0xfd42x6);this[_0x626f[51]](_0x626f[42],mxResources[_0x626f[44]](_0x626f[43]),_0xfd42x6+_0x626f[45],_0x626f[46],[_0x626f[47],_0x626f[48],_0x626f[49],_0x626f[50]],[mxResources[_0x626f[44]](_0x626f[47]),mxResources[_0x626f[44]](_0x626f[48]),mxResources[_0x626f[44]](_0x626f[49]),mxResources[_0x626f[44]](_0x626f[50])])};Sidebar[_0x626f[40]][_0x626f[52]]=!mxClient[_0x626f[23]];Sidebar[_0x626f[40]][_0x626f[53]]=16;Sidebar[_0x626f[40]][_0x626f[54]]=3;Sidebar[_0x626f[40]][_0x626f[55]]=300;Sidebar[_0x626f[40]][_0x626f[56]]=true;Sidebar[_0x626f[40]][_0x626f[57]]=STENCIL_PATH+_0x626f[58];Sidebar[_0x626f[40]][_0x626f[59]]=34;Sidebar[_0x626f[40]][_0x626f[60]]=34;Sidebar[_0x626f[40]][_0x626f[61]]=2;Sidebar[_0x626f[40]][_0x626f[62]]=9;Sidebar[_0x626f[40]][_0x626f[63]]=false;Sidebar[_0x626f[40]][_0x626f[64]]=false;Sidebar[_0x626f[40]][_0x626f[65]]=function(_0xfd42x7,_0xfd42x8,_0xfd42x9,_0xfd42xa){if(this[_0x626f[52]]&&this[_0x626f[4]]){if(this[_0x626f[32]]!=_0xfd42x7){if(this[_0x626f[66]]!=null){window[_0x626f[67]](this[_0x626f[66]]);this[_0x626f[66]]=null};var _0xfd42xb=mxUtils[_0x626f[25]](this,function(){if(this[_0x626f[68]]==null){this[_0x626f[68]]=document[_0x626f[7]](_0x626f[6]);this[_0x626f[68]][_0x626f[69]]=_0x626f[70];document[_0x626f[22]][_0x626f[21]](this[_0x626f[68]]);this[_0x626f[71]]= new Graph(this[_0x626f[68]],null,null,this[_0x626f[1]][_0x626f[9]][_0x626f[5]][_0x626f[8]]());this[_0x626f[71]][_0x626f[73]][_0x626f[72]](this[_0x626f[53]],this[_0x626f[53]]);this[_0x626f[71]][_0x626f[10]]=false;this[_0x626f[71]][_0x626f[11]]=false;this[_0x626f[71]][_0x626f[13]]=false;this[_0x626f[71]][_0x626f[14]](false);this[_0x626f[71]][_0x626f[12]](false);this[_0x626f[71]][_0x626f[15]](false);if(!mxClient[_0x626f[74]]){this[_0x626f[71]][_0x626f[73]][_0x626f[75]][_0x626f[17]][_0x626f[19]]=_0x626f[76]};this[_0x626f[77]]=mxUtils[_0x626f[78]](IMAGE_PATH+_0x626f[39]);this[_0x626f[77]][_0x626f[17]][_0x626f[19]]=_0x626f[20];this[_0x626f[77]][_0x626f[17]][_0x626f[79]]=_0x626f[80];this[_0x626f[77]][_0x626f[17]][_0x626f[81]]=_0x626f[82];document[_0x626f[22]][_0x626f[21]](this[_0x626f[77]])};this[_0x626f[68]][_0x626f[17]][_0x626f[83]]=_0x626f[84];this[_0x626f[71]][_0x626f[85]]=(_0xfd42xa==null||_0xfd42xa);this[_0x626f[71]][_0x626f[87]][_0x626f[86]]();this[_0x626f[71]][_0x626f[88]](_0xfd42x8);var _0xfd42xc=this[_0x626f[71]][_0x626f[89]]();var _0xfd42xd=_0xfd42xc[_0x626f[79]]+2*this[_0x626f[53]];var _0xfd42xe=_0xfd42xc[_0x626f[81]]+2*this[_0x626f[53]];if(mxClient[_0x626f[90]]){_0xfd42xd+=4;_0xfd42xe+=4;this[_0x626f[68]][_0x626f[17]][_0x626f[91]]=_0x626f[18]}else {this[_0x626f[68]][_0x626f[17]][_0x626f[91]]=_0x626f[92]};this[_0x626f[77]][_0x626f[17]][_0x626f[16]]=_0x626f[92];this[_0x626f[68]][_0x626f[17]][_0x626f[79]]=_0xfd42xd+_0x626f[93];if(this[_0x626f[64]]&&_0xfd42x9!=null&&_0xfd42x9[_0x626f[94]]>0){if(this[_0x626f[95]]==null){this[_0x626f[95]]=document[_0x626f[7]](_0x626f[6]);this[_0x626f[95]][_0x626f[17]][_0x626f[96]]=_0x626f[97];this[_0x626f[95]][_0x626f[17]][_0x626f[98]]=_0x626f[99];this[_0x626f[95]][_0x626f[17]][_0x626f[79]]=_0x626f[100];this[_0x626f[95]][_0x626f[17]][_0x626f[91]]=_0x626f[18];if(mxClient[_0x626f[74]]){this[_0x626f[95]][_0x626f[17]][_0x626f[101]]=_0x626f[102]}else {this[_0x626f[95]][_0x626f[17]][_0x626f[19]]=_0x626f[20];this[_0x626f[95]][_0x626f[17]][_0x626f[101]]=_0x626f[103]};this[_0x626f[68]][_0x626f[21]](this[_0x626f[95]])}else {this[_0x626f[95]][_0x626f[104]]=_0x626f[105]};this[_0x626f[95]][_0x626f[17]][_0x626f[83]]=_0x626f[105];mxUtils[_0x626f[106]](this[_0x626f[95]],_0xfd42x9);var _0xfd42xf=this[_0x626f[95]][_0x626f[107]]+10;_0xfd42xe+=_0xfd42xf;if(mxClient[_0x626f[74]]){this[_0x626f[95]][_0x626f[17]][_0x626f[108]]=(-_0xfd42xf)+_0x626f[93]}else {_0xfd42xe-=6;this[_0x626f[95]][_0x626f[17]][_0x626f[109]]=(_0xfd42xe-_0xfd42xf)+_0x626f[93]}}else {if(this[_0x626f[95]]!=null&&this[_0x626f[95]][_0x626f[33]]!=null){this[_0x626f[95]][_0x626f[17]][_0x626f[83]]=_0x626f[110]}};this[_0x626f[68]][_0x626f[17]][_0x626f[81]]=_0xfd42xe+_0x626f[93];var _0xfd42x10=-Math[_0x626f[112]](0,_0xfd42xc[_0x626f[111]]-this[_0x626f[53]]);var _0xfd42x11=-Math[_0x626f[112]](0,_0xfd42xc[_0x626f[113]]-this[_0x626f[53]]);var _0xfd42x12=this[_0x626f[2]][_0x626f[114]]+this[_0x626f[1]][_0x626f[115]]+3;var _0xfd42x13=Math[_0x626f[118]](0,(this[_0x626f[2]][_0x626f[116]]+_0xfd42x7[_0x626f[116]]-this[_0x626f[2]][_0x626f[117]]-_0xfd42xe/2+16));if(mxClient[_0x626f[74]]){this[_0x626f[71]][_0x626f[73]][_0x626f[75]][_0x626f[123]](_0x626f[119],_0x626f[120]+_0xfd42x10+_0x626f[121]+_0xfd42x11+_0x626f[122])}else {this[_0x626f[71]][_0x626f[73]][_0x626f[125]][_0x626f[17]][_0x626f[124]]=_0xfd42x10+_0x626f[93];this[_0x626f[71]][_0x626f[73]][_0x626f[125]][_0x626f[17]][_0x626f[109]]=_0xfd42x11+_0x626f[93]};_0xfd42x13+=90;this[_0x626f[68]][_0x626f[17]][_0x626f[19]]=_0x626f[20];this[_0x626f[68]][_0x626f[17]][_0x626f[124]]=_0xfd42x12+_0x626f[93];this[_0x626f[68]][_0x626f[17]][_0x626f[109]]=_0xfd42x13+_0x626f[93];this[_0x626f[77]][_0x626f[17]][_0x626f[124]]=(_0xfd42x12-13)+_0x626f[93];this[_0x626f[77]][_0x626f[17]][_0x626f[109]]=(_0xfd42x13+_0xfd42xe/2-13)+_0x626f[93]});if(this[_0x626f[68]]!=null&&this[_0x626f[68]][_0x626f[17]][_0x626f[83]]!=_0x626f[110]){_0xfd42xb()}else {this[_0x626f[66]]=window[_0x626f[126]](_0xfd42xb,this[_0x626f[55]])};this[_0x626f[32]]=_0xfd42x7}}};Sidebar[_0x626f[40]][_0x626f[29]]=function(){if(this[_0x626f[66]]!=null){window[_0x626f[67]](this[_0x626f[66]]);this[_0x626f[66]]=null};if(this[_0x626f[68]]!=null){this[_0x626f[68]][_0x626f[17]][_0x626f[83]]=_0x626f[110];this[_0x626f[77]][_0x626f[17]][_0x626f[16]]=_0x626f[18];this[_0x626f[32]]=null}};Sidebar[_0x626f[40]][_0x626f[127]]=function(_0xfd42x14){var _0xfd42x7=document[_0x626f[7]](_0x626f[128]);_0xfd42x7[_0x626f[123]](_0x626f[129],_0x626f[130]);_0xfd42x7[_0x626f[69]]=_0x626f[131];mxUtils[_0x626f[106]](_0xfd42x7,_0xfd42x14);return _0xfd42x7};Sidebar[_0x626f[40]][_0x626f[132]]=function(_0xfd42x8,_0xfd42xd,_0xfd42xe,_0xfd42x15,_0xfd42x9,_0xfd42xa){this[_0x626f[5]][_0x626f[85]]=(_0xfd42xa==null||_0xfd42xa);this[_0x626f[5]][_0x626f[73]][_0x626f[133]](1,0,0);this[_0x626f[5]][_0x626f[88]](_0xfd42x8);var _0xfd42xc=this[_0x626f[5]][_0x626f[89]]();var _0xfd42x16=this[_0x626f[54]];var _0xfd42x17=Math[_0x626f[112]]((_0xfd42xd-2)/(_0xfd42xc[_0x626f[79]]-_0xfd42xc[_0x626f[111]]+_0xfd42x16),(_0xfd42xe-2)/(_0xfd42xc[_0x626f[81]]-_0xfd42xc[_0x626f[113]]+_0xfd42x16));var _0xfd42x10=-Math[_0x626f[112]](_0xfd42xc[_0x626f[111]],0);var _0xfd42x11=-Math[_0x626f[112]](_0xfd42xc[_0x626f[113]],0);this[_0x626f[5]][_0x626f[73]][_0x626f[133]](_0xfd42x17,_0xfd42x10,_0xfd42x11);_0xfd42xc=this[_0x626f[5]][_0x626f[89]]();var _0xfd42x18=Math[_0x626f[118]](0,Math[_0x626f[134]]((_0xfd42xd-_0xfd42xc[_0x626f[79]]-_0xfd42xc[_0x626f[111]])/2));var _0xfd42xf=Math[_0x626f[118]](0,Math[_0x626f[134]]((_0xfd42xe-_0xfd42xc[_0x626f[81]]-_0xfd42xc[_0x626f[113]])/2));var _0xfd42x19=null;if(this[_0x626f[5]][_0x626f[135]]==mxConstants[_0x626f[136]]&&!mxClient[_0x626f[137]]){_0xfd42x19=this[_0x626f[5]][_0x626f[73]][_0x626f[140]]()[_0x626f[139]][_0x626f[138]](true)}else {_0xfd42x19=this[_0x626f[5]][_0x626f[2]][_0x626f[138]](false);_0xfd42x19[_0x626f[104]]=this[_0x626f[5]][_0x626f[2]][_0x626f[104]]};this[_0x626f[5]][_0x626f[141]]()[_0x626f[86]]();if(mxClient[_0x626f[142]]){_0xfd42x15[_0x626f[17]][_0x626f[143]]=_0x626f[144]+this[_0x626f[1]][_0x626f[9]][_0x626f[145]]+_0x626f[122]};var _0xfd42x1a=3;_0xfd42x19[_0x626f[17]][_0x626f[19]]=_0x626f[76];_0xfd42x19[_0x626f[17]][_0x626f[91]]=_0x626f[18];_0xfd42x19[_0x626f[17]][_0x626f[146]]=_0x626f[147];_0xfd42x19[_0x626f[17]][_0x626f[124]]=(_0xfd42x18+_0xfd42x1a)+_0x626f[93];_0xfd42x19[_0x626f[17]][_0x626f[109]]=(_0xfd42xf+_0xfd42x1a)+_0x626f[93];_0xfd42x19[_0x626f[17]][_0x626f[79]]=_0xfd42xd+_0x626f[93];_0xfd42x19[_0x626f[17]][_0x626f[81]]=_0xfd42xe+_0x626f[93];_0xfd42x19[_0x626f[17]][_0x626f[16]]=_0x626f[105];_0xfd42x19[_0x626f[17]][_0x626f[148]]=_0x626f[105];_0xfd42x19[_0x626f[17]][_0x626f[149]]=_0x626f[105];_0xfd42x15[_0x626f[21]](_0xfd42x19);if(this[_0x626f[63]]&&_0xfd42x9!=null){var _0xfd42x1b=(mxClient[_0x626f[90]])?2*this[_0x626f[61]]+2:0;_0xfd42x15[_0x626f[17]][_0x626f[81]]=(this[_0x626f[60]]+_0xfd42x1b+this[_0x626f[62]]+8)+_0x626f[93];var _0xfd42x1c=document[_0x626f[7]](_0x626f[6]);_0xfd42x1c[_0x626f[17]][_0x626f[150]]=this[_0x626f[62]]+_0x626f[93];_0xfd42x1c[_0x626f[17]][_0x626f[98]]=_0x626f[99];_0xfd42x1c[_0x626f[17]][_0x626f[151]]=_0x626f[152];if(mxClient[_0x626f[153]]){_0xfd42x1c[_0x626f[17]][_0x626f[81]]=(this[_0x626f[62]]+12)+_0x626f[93]};_0xfd42x1c[_0x626f[17]][_0x626f[101]]=_0x626f[154];mxUtils[_0x626f[106]](_0xfd42x1c,_0xfd42x9);_0xfd42x15[_0x626f[21]](_0xfd42x1c)}};Sidebar[_0x626f[40]][_0x626f[155]]=function(_0xfd42x8,_0xfd42x9,_0xfd42xa){var _0xfd42x7=document[_0x626f[7]](_0x626f[128]);_0xfd42x7[_0x626f[123]](_0x626f[129],_0x626f[130]);_0xfd42x7[_0x626f[69]]=_0x626f[156];_0xfd42x7[_0x626f[17]][_0x626f[91]]=_0x626f[18];var _0xfd42x1b=(mxClient[_0x626f[90]])?8+2*this[_0x626f[61]]:6;_0xfd42x7[_0x626f[17]][_0x626f[79]]=(this[_0x626f[59]]+_0xfd42x1b)+_0x626f[93];_0xfd42x7[_0x626f[17]][_0x626f[81]]=(this[_0x626f[60]]+_0xfd42x1b)+_0x626f[93];_0xfd42x7[_0x626f[17]][_0x626f[157]]=this[_0x626f[61]]+_0x626f[93];mxEvent[_0x626f[26]](_0xfd42x7,_0x626f[158],function(_0xfd42x4){mxEvent[_0x626f[159]](_0xfd42x4)});this[_0x626f[132]](_0xfd42x8,this[_0x626f[59]],this[_0x626f[60]],_0xfd42x7,_0xfd42x9,_0xfd42xa);return _0xfd42x7};Sidebar[_0x626f[40]][_0x626f[160]]=function(_0xfd42x8,_0xfd42x1d){return function(_0xfd42x1e,_0xfd42x4,_0xfd42x1f,_0xfd42x20,_0xfd42x21){if(_0xfd42x1e[_0x626f[161]]()){_0xfd42x8=_0xfd42x1e[_0x626f[162]](_0xfd42x8);if(_0xfd42x8[_0x626f[94]]>0){var _0xfd42x22=(_0xfd42x1f!=null)?_0xfd42x1e[_0x626f[163]](_0xfd42x1f,_0xfd42x8,_0xfd42x4):false;var _0xfd42x23=null;if(_0xfd42x1f!=null&& !_0xfd42x22){_0xfd42x1f=null};if(_0xfd42x1d&&_0xfd42x1e[_0x626f[164]]()&&_0xfd42x1e[_0x626f[165]](_0xfd42x1f,_0xfd42x8,_0xfd42x4)){_0xfd42x1e[_0x626f[166]](_0xfd42x1f,_0xfd42x8,null,_0xfd42x20,_0xfd42x21);_0xfd42x23=_0xfd42x8}else {if(_0xfd42x8[_0x626f[94]]>0){_0xfd42x23=_0xfd42x1e[_0x626f[167]](_0xfd42x8,_0xfd42x20,_0xfd42x21,_0xfd42x1f)}};if(_0xfd42x23!=null&&_0xfd42x23[_0x626f[94]]>0){_0xfd42x1e[_0x626f[168]](_0xfd42x23[0]);_0xfd42x1e[_0x626f[169]](_0xfd42x23)}}}}};Sidebar[_0x626f[40]][_0x626f[170]]=function(_0xfd42xd,_0xfd42xe){var _0xfd42x7=document[_0x626f[7]](_0x626f[6]);_0xfd42x7[_0x626f[17]][_0x626f[171]]=_0x626f[172];_0xfd42x7[_0x626f[17]][_0x626f[79]]=_0xfd42xd+_0x626f[93];_0xfd42x7[_0x626f[17]][_0x626f[81]]=_0xfd42xe+_0x626f[93];return _0xfd42x7};Sidebar[_0x626f[40]][_0x626f[173]]=function(_0xfd42x7,_0xfd42x24,_0xfd42x25){var _0xfd42x26=mxUtils[_0x626f[175]](_0xfd42x7,this[_0x626f[1]][_0x626f[9]][_0x626f[5]],_0xfd42x24,_0xfd42x25,0,0,this[_0x626f[1]][_0x626f[9]][_0x626f[5]][_0x626f[174]],true,true);_0xfd42x26[_0x626f[176]]=function(_0xfd42x1e,_0xfd42x20,_0xfd42x21){var _0xfd42x1f=mxDragSource[_0x626f[40]][_0x626f[176]][_0x626f[177]](this,arguments);if(!_0xfd42x1e[_0x626f[178]](_0xfd42x1f)){_0xfd42x1f=null};return _0xfd42x1f};return _0xfd42x26};Sidebar[_0x626f[40]][_0x626f[179]]=function(_0xfd42x7,_0xfd42x27){var _0xfd42x1e=this[_0x626f[1]][_0x626f[9]][_0x626f[5]];var _0xfd42x28=null;mxEvent[_0x626f[182]](_0xfd42x7,function(_0xfd42x4){_0xfd42x28= new mxPoint(mxEvent[_0x626f[180]](_0xfd42x4),mxEvent[_0x626f[181]](_0xfd42x4))});var _0xfd42x29=_0xfd42x27[_0x626f[183]];_0xfd42x27[_0x626f[183]]=function(_0xfd42x4){if(!mxEvent[_0x626f[184]](_0xfd42x4)&&this[_0x626f[185]]==null&&_0xfd42x28!=null){var _0xfd42x2a=_0xfd42x1e[_0x626f[186]];if(Math[_0x626f[187]](_0xfd42x28[_0x626f[111]]-mxEvent[_0x626f[180]](_0xfd42x4))<=_0xfd42x2a&&Math[_0x626f[187]](_0xfd42x28[_0x626f[113]]-mxEvent[_0x626f[181]](_0xfd42x4))<=_0xfd42x2a){var _0xfd42x2b=_0xfd42x1e[_0x626f[188]]();_0xfd42x27[_0x626f[189]](_0xfd42x1e,_0xfd42x4,null,_0xfd42x2b,_0xfd42x2b)}};_0xfd42x29[_0x626f[177]](this,arguments);_0xfd42x28=null}};Sidebar[_0x626f[40]][_0x626f[190]]=function(_0xfd42x2c,_0xfd42x14,_0xfd42x2d,_0xfd42x2e){var _0xfd42x2f=mxUtils[_0x626f[190]]();var _0xfd42x19=_0xfd42x2f[_0x626f[7]](_0xfd42x2c);_0xfd42x19[_0x626f[123]](_0x626f[191],_0xfd42x14);_0xfd42x2d[_0x626f[192]](function(_0xfd42x30,_0xfd42x31){_0xfd42x19[_0x626f[123]](_0xfd42x30,_0xfd42x2e[_0xfd42x31]?_0xfd42x2e[_0xfd42x31]:_0x626f[105])});return _0xfd42x19};Sidebar[_0x626f[40]][_0x626f[193]]=function(_0xfd42x32,_0xfd42xd,_0xfd42xe,_0xfd42x33,_0xfd42x9,_0xfd42xa){var _0xfd42x2d=[];var _0xfd42x2e=[];switch(_0xfd42x33){case _0x626f[48]:_0xfd42x2d=[_0x626f[48],_0x626f[194]];_0xfd42x2e=[_0x626f[105]];break;case _0x626f[49]:_0xfd42x2d=[_0x626f[48],_0x626f[195]];_0xfd42x2e=[_0x626f[105]];break;case _0x626f[202]:_0xfd42x2d=[_0x626f[196],_0x626f[197],_0x626f[198],_0x626f[199],_0x626f[200],_0x626f[201]];_0xfd42x2e=[_0x626f[105]];break;default:_0xfd42x2d=[];_0xfd42x2e=[];break};var _0xfd42x19=this[_0x626f[190]](_0xfd42x33,_0xfd42x9,_0xfd42x2d,_0xfd42x2e);var _0xfd42x8=[ new mxCell(_0xfd42x19, new mxGeometry(0,0,_0xfd42xd,_0xfd42xe),_0xfd42x32)];_0xfd42x8[0][_0x626f[203]]=true;return this[_0x626f[204]](_0xfd42x8,_0xfd42xd,_0xfd42xe,_0xfd42x9,_0xfd42xa)};Sidebar[_0x626f[40]][_0x626f[204]]=function(_0xfd42x8,_0xfd42xd,_0xfd42xe,_0xfd42x9,_0xfd42xa){var _0xfd42x7=this[_0x626f[155]](_0xfd42x8,_0xfd42x9,_0xfd42xa);var _0xfd42x27=this[_0x626f[173]](_0xfd42x7,this[_0x626f[160]](_0xfd42x8,true),this[_0x626f[170]](_0xfd42xd,_0xfd42xe));this[_0x626f[179]](_0xfd42x7,_0xfd42x27);_0xfd42x27[_0x626f[205]]=mxUtils[_0x626f[25]](this,function(){return this[_0x626f[1]][_0x626f[9]][_0x626f[5]][_0x626f[207]][_0x626f[206]]});if(!touchStyle){mxEvent[_0x626f[26]](_0xfd42x7,_0x626f[30],mxUtils[_0x626f[25]](this,function(_0xfd42x4){this[_0x626f[65]](_0xfd42x7,_0xfd42x8,_0xfd42x9,_0xfd42xa)}))};return _0xfd42x7};Sidebar[_0x626f[40]][_0x626f[208]]=function(_0xfd42x32,_0xfd42xd,_0xfd42xe,_0xfd42x33,_0xfd42x9,_0xfd42xa){var _0xfd42x8=[ new mxCell((_0xfd42x33!=null)?_0xfd42x33:_0x626f[105], new mxGeometry(0,0,_0xfd42xd,_0xfd42xe),_0xfd42x32)];_0xfd42x8[0][_0x626f[210]][_0x626f[209]]( new mxPoint(0,_0xfd42xe),true);_0xfd42x8[0][_0x626f[210]][_0x626f[209]]( new mxPoint(_0xfd42xd,0),false);_0xfd42x8[0][_0x626f[210]][_0x626f[76]]=true;_0xfd42x8[0][_0x626f[211]]=true;return this[_0x626f[212]](_0xfd42x8,_0xfd42xd,_0xfd42xe,_0xfd42x9,_0xfd42xa)};Sidebar[_0x626f[40]][_0x626f[212]]=function(_0xfd42x8,_0xfd42xd,_0xfd42xe,_0xfd42x9,_0xfd42xa){var _0xfd42x7=this[_0x626f[155]](_0xfd42x8,_0xfd42x9,_0xfd42xa);this[_0x626f[173]](_0xfd42x7,this[_0x626f[160]](_0xfd42x8,false),this[_0x626f[170]](_0xfd42xd,_0xfd42xe));var _0xfd42x1e=this[_0x626f[1]][_0x626f[9]][_0x626f[5]];mxEvent[_0x626f[26]](_0xfd42x7,_0x626f[158],mxUtils[_0x626f[25]](this,function(_0xfd42x4){if(this[_0x626f[56]]){_0xfd42x1e[_0x626f[213]](_0xfd42x8[0])};_0xfd42x7[_0x626f[17]][_0x626f[214]]=_0x626f[215];window[_0x626f[126]](function(){_0xfd42x7[_0x626f[17]][_0x626f[214]]=_0x626f[105]},300);mxEvent[_0x626f[159]](_0xfd42x4)}));touchStyle=false;if(!touchStyle){mxEvent[_0x626f[26]](_0xfd42x7,_0x626f[30],mxUtils[_0x626f[25]](this,function(_0xfd42x4){this[_0x626f[65]](_0xfd42x7,_0xfd42x8,_0xfd42x9,_0xfd42xa)}))};return _0xfd42x7};Sidebar[_0x626f[40]][_0x626f[216]]=function(_0xfd42x34,_0xfd42x9,_0xfd42x35,_0xfd42x36){var _0xfd42x7=this[_0x626f[127]](_0xfd42x9);this[_0x626f[2]][_0x626f[21]](_0xfd42x7);var _0xfd42x1c=document[_0x626f[7]](_0x626f[6]);_0xfd42x1c[_0x626f[69]]=_0x626f[217];if(_0xfd42x35){_0xfd42x36(_0xfd42x1c);_0xfd42x36=null}else {_0xfd42x1c[_0x626f[17]][_0x626f[83]]=_0x626f[110]};this[_0x626f[218]](_0xfd42x7,_0xfd42x1c,_0xfd42x36);var _0xfd42x37=document[_0x626f[7]](_0x626f[6]);_0xfd42x37[_0x626f[21]](_0xfd42x1c);this[_0x626f[2]][_0x626f[21]](_0xfd42x37);if(_0xfd42x34!=null){this[_0x626f[3]][_0xfd42x34]=[_0xfd42x7,_0xfd42x37]}};Sidebar[_0x626f[40]][_0x626f[218]]=function(_0xfd42x9,_0xfd42x38,_0xfd42x39){var _0xfd42x3a=false;_0xfd42x9[_0x626f[17]][_0x626f[143]]=(_0xfd42x38[_0x626f[17]][_0x626f[83]]==_0x626f[110])?_0x626f[144]+IMAGE_PATH+_0x626f[219]:_0x626f[144]+IMAGE_PATH+_0x626f[220];_0xfd42x9[_0x626f[17]][_0x626f[221]]=_0x626f[222];_0xfd42x9[_0x626f[17]][_0x626f[223]]=_0x626f[224];mxEvent[_0x626f[26]](_0xfd42x9,_0x626f[158],function(_0xfd42x4){if(_0xfd42x38[_0x626f[17]][_0x626f[83]]==_0x626f[110]){if(!_0xfd42x3a){_0xfd42x3a=true;if(_0xfd42x39!=null){_0xfd42x9[_0x626f[17]][_0x626f[146]]=_0x626f[225];window[_0x626f[126]](function(){_0xfd42x39(_0xfd42x38);_0xfd42x9[_0x626f[17]][_0x626f[146]]=_0x626f[105]},0)}};_0xfd42x9[_0x626f[17]][_0x626f[143]]=_0x626f[144]+IMAGE_PATH+_0x626f[220];_0xfd42x38[_0x626f[17]][_0x626f[83]]=_0x626f[84]}else {_0xfd42x9[_0x626f[17]][_0x626f[143]]=_0x626f[144]+IMAGE_PATH+_0x626f[219];_0xfd42x38[_0x626f[17]][_0x626f[83]]=_0x626f[110]};mxEvent[_0x626f[159]](_0xfd42x4)})};Sidebar[_0x626f[40]][_0x626f[226]]=function(_0xfd42x34){var _0xfd42x3b=this[_0x626f[3]][_0xfd42x34];if(_0xfd42x3b!=null){this[_0x626f[3]][_0xfd42x34]=null;for(var _0xfd42x3c=0;_0xfd42x3c<_0xfd42x3b[_0x626f[94]];_0xfd42x3c++){this[_0x626f[2]][_0x626f[227]](_0xfd42x3b[_0xfd42x3c])};return true};return false};Sidebar[_0x626f[40]][_0x626f[51]]=function(_0xfd42x34,_0xfd42x9,_0xfd42x3d,_0xfd42x3e,_0xfd42x3f,_0xfd42x40){this[_0x626f[216]](_0xfd42x34,_0xfd42x9,(_0xfd42x34===_0x626f[42]),mxUtils[_0x626f[25]](this,function(_0xfd42x38){var _0xfd42x41=_0xfd42x40!=null;for(var _0xfd42x3c=0;_0xfd42x3c<_0xfd42x3f[_0x626f[94]];_0xfd42x3c++){var _0xfd42x42=_0xfd42x3d+_0xfd42x3f[_0xfd42x3c]+_0xfd42x3e;_0xfd42x38[_0x626f[21]](this[_0x626f[193]](_0x626f[228]+_0xfd42x42,80,80,_0xfd42x3f[_0xfd42x3c],(_0xfd42x41)?_0xfd42x40[_0xfd42x3c]:null,_0xfd42x41))}}))}
\ No newline at end of file
+'use strict';
+
+/**
+ * Construcs a new sidebar for the given editor.
+ */
+function Sidebar(editorUi, container) {
+       this.editorUi = editorUi;
+       this.container = container;
+       this.palettes = new Object();
+       this.showTooltips = true;
+       this.graph = new Graph(document.createElement('div'), null, null, this.editorUi
+               .editor.graph.getStylesheet());
+       this.graph.resetViewOnRootChange = false;
+       this.graph.foldingEnabled = false;
+       this.graph.setConnectable(false);
+       this.graph.autoScroll = false;
+       this.graph.setTooltips(false);
+       this.graph.setEnabled(false);
+
+       // Container must be in the DOM for correct HTML rendering
+       this.graph.container.style.visibility = 'hidden';
+       this.graph.container.style.position = 'absolute';
+       document.body.appendChild(this.graph.container);
+
+       if (!mxClient.IS_TOUCH) {
+               mxEvent.addListener(document, 'mouseup', mxUtils.bind(this, function() {
+                       this.showTooltips = true;
+               }));
+
+               // Enables tooltips after scroll
+               mxEvent.addListener(container, 'scroll', mxUtils.bind(this, function() {
+                       this.showTooltips = true;
+               }));
+
+               mxEvent.addListener(document, 'mousedown', mxUtils.bind(this, function() {
+                       this.showTooltips = false;
+                       this.hideTooltip();
+               }));
+
+               mxEvent.addListener(document, 'mousemove', mxUtils.bind(this, function(evt) {
+                       var src = mxEvent.getSource(evt);
+
+                       while (src != null) {
+                               if (src == this.currentElt) {
+                                       return;
+                               }
+
+                               src = src.parentNode;
+                       }
+
+                       this.hideTooltip();
+               }));
+
+               // Handles mouse leaving the window
+               mxEvent.addListener(document, 'mouseout', mxUtils.bind(this, function(evt) {
+                       if (evt.toElement == null && evt.relatedTarget == null) {
+                               this.hideTooltip();
+                       }
+               }));
+       }
+
+       this.init();
+
+       // Pre-fetches tooltip image
+       new Image().src = IMAGE_PATH + '/tooltip.png';
+};
+
+/**
+ * Adds all palettes to the sidebar.
+ */
+Sidebar.prototype.init = function() {
+       var dir = STENCIL_PATH;
+       console.log(dir);
+
+       // this.addImagePalette('entry', mxResources.get('application'), dir + '/',
+       //      '_128x128.png', ['start', 'question', 'input', 'end', 'email'], [mxResources.get('start'),
+       //              mxResources.get('question'), mxResources.get('input'), mxResources.get('end'), mxResources.get('email')
+       //      ]);
+       this.addImagePalette('entry', mxResources.get('application'), dir + '/',
+               '_128x128.png', ['start', 'question', 'input', 'end'], [mxResources.get('start'),
+                       mxResources.get('question'), mxResources.get('input'), mxResources.get('end')
+               ]);
+       // this.addBpmnPalette(dir, false);
+
+};
+
+/**
+ * Specifies if tooltips should be visible. Default is true.
+ */
+Sidebar.prototype.enableTooltips = !mxClient.IS_TOUCH;
+
+/**
+ * Specifies the delay for the tooltip. Default is 16 px.
+ */
+Sidebar.prototype.tooltipBorder = 16;
+
+/**
+ * Specifies the delay for the tooltip. Default is 3 px.
+ */
+Sidebar.prototype.thumbBorder = 3;
+
+/**
+ * Specifies the delay for the tooltip. Default is 300 ms.
+ */
+Sidebar.prototype.tooltipDelay = 300;
+
+/**
+ * Specifies if edges should be used as templates if clicked. Default is true.
+ */
+Sidebar.prototype.installEdges = true;
+
+/**
+ * Specifies the URL of the gear image.
+ */
+Sidebar.prototype.gearImage = STENCIL_PATH + '/clipart/Gear_128x128.png';
+
+/**
+ * Specifies the width of the thumbnails.
+ */
+Sidebar.prototype.thumbWidth = 34;
+
+/**
+ * Specifies the height of the thumbnails.
+ */
+Sidebar.prototype.thumbHeight = 34;
+
+/**
+ * Specifies the padding for the thumbnails. Default is 3.
+ */
+Sidebar.prototype.thumbPadding = 2;
+
+/**
+ * Specifies the size of the sidebar titles.
+ */
+Sidebar.prototype.sidebarTitleSize = 9;
+
+/**
+ * Specifies if titles in the sidebar should be enabled.
+ */
+Sidebar.prototype.sidebarTitles = false;
+
+/**
+ * Specifies if titles in the tooltips should be enabled.
+ */
+Sidebar.prototype.tooltipTitles = false;
+
+/**
+ * Adds all palettes to the sidebar.
+ */
+Sidebar.prototype.showTooltip = function(elt, cells, title, showLabel) {
+       if (this.enableTooltips && this.showTooltips) {
+               if (this.currentElt != elt) {
+                       if (this.thread != null) {
+                               window.clearTimeout(this.thread);
+                               this.thread = null;
+                       }
+
+                       var show = mxUtils.bind(this, function() {
+                               // Lazy creation of the DOM nodes and graph instance
+                               if (this.tooltip == null) {
+                                       this.tooltip = document.createElement('div');
+                                       this.tooltip.className = 'geSidebarTooltip';
+                                       document.body.appendChild(this.tooltip);
+
+                                       this.graph2 = new Graph(this.tooltip, null, null, this.editorUi.editor.graph
+                                               .getStylesheet());
+                                       this.graph2.view.setTranslate(this.tooltipBorder, this.tooltipBorder);
+                                       this.graph2.resetViewOnRootChange = false;
+                                       this.graph2.foldingEnabled = false;
+                                       this.graph2.autoScroll = false;
+                                       this.graph2.setTooltips(false);
+                                       this.graph2.setConnectable(false);
+                                       this.graph2.setEnabled(false);
+
+                                       if (!mxClient.IS_SVG) {
+                                               this.graph2.view.canvas.style.position = 'relative';
+                                       }
+
+                                       this.tooltipImage = mxUtils.createImage(IMAGE_PATH + '/tooltip.png');
+                                       this.tooltipImage.style.position = 'absolute';
+                                       this.tooltipImage.style.width = '14px';
+                                       this.tooltipImage.style.height = '27px';
+
+                                       document.body.appendChild(this.tooltipImage);
+                               }
+
+                               this.tooltip.style.display = 'block';
+                               this.graph2.labelsVisible = (showLabel == null || showLabel);
+                               this.graph2.model.clear();
+                               this.graph2.addCells(cells);
+
+                               var bounds = this.graph2.getGraphBounds();
+                               var width = bounds.width + 2 * this.tooltipBorder;
+                               var height = bounds.height + 2 * this.tooltipBorder;
+
+                               if (mxClient.IS_QUIRKS) {
+                                       width += 4;
+                                       height += 4;
+                                       this.tooltip.style.overflow = 'hidden';
+                               } else {
+                                       this.tooltip.style.overflow = 'visible';
+                               }
+
+                               this.tooltipImage.style.visibility = 'visible';
+                               this.tooltip.style.width = width + 'px';
+
+                               // Adds title for entry
+                               if (this.tooltipTitles && title != null && title.length > 0) {
+                                       if (this.tooltipTitle == null) {
+                                               this.tooltipTitle = document.createElement('div');
+                                               this.tooltipTitle.style.borderTop = '1px solid gray';
+                                               this.tooltipTitle.style.textAlign = 'center';
+                                               this.tooltipTitle.style.width = '100%';
+
+                                               // Oversize titles are cut-off currently. Should make tooltip wider later.
+                                               this.tooltipTitle.style.overflow = 'hidden';
+
+                                               if (mxClient.IS_SVG) {
+                                                       this.tooltipTitle.style.paddingTop = '2px';
+                                               } else {
+                                                       this.tooltipTitle.style.position = 'absolute';
+                                                       this.tooltipTitle.style.paddingTop = '6px';
+                                               }
+
+                                               this.tooltip.appendChild(this.tooltipTitle);
+                                       } else {
+                                               this.tooltipTitle.innerHTML = '';
+                                       }
+
+                                       this.tooltipTitle.style.display = '';
+                                       mxUtils.write(this.tooltipTitle, title);
+
+                                       var dy = this.tooltipTitle.offsetHeight + 10;
+                                       height += dy;
+
+                                       if (mxClient.IS_SVG) {
+                                               this.tooltipTitle.style.marginTop = (-dy) + 'px';
+                                       } else {
+                                               height -= 6;
+                                               this.tooltipTitle.style.top = (height - dy) + 'px';
+                                       }
+                               } else if (this.tooltipTitle != null && this.tooltipTitle.parentNode !=
+                                       null) {
+                                       this.tooltipTitle.style.display = 'none';
+                               }
+
+                               this.tooltip.style.height = height + 'px';
+                               var x0 = -Math.min(0, bounds.x - this.tooltipBorder);
+                               var y0 = -Math.min(0, bounds.y - this.tooltipBorder);
+
+                               var left = this.container.clientWidth + this.editorUi.splitSize + 3;
+                               var top = Math.max(0, (this.container.offsetTop + elt.offsetTop - this.container
+                                       .scrollTop - height / 2 + 16));
+
+                               if (mxClient.IS_SVG) {
+                                       this.graph2.view.canvas.setAttribute('transform', 'translate(' + x0 +
+                                               ',' + y0 + ')');
+                               } else {
+                                       this.graph2.view.drawPane.style.left = x0 + 'px';
+                                       this.graph2.view.drawPane.style.top = y0 + 'px';
+                               }
+
+                               // Workaround for ignored position CSS style in IE9
+                               // (changes to relative without the following line)
+                               // Added width of the page-sidebar
+                               //              left += document.getElementById('page-sidebar').offsetWidth;
+                               // Added static height of the page-navbar
+                               top += 90;
+
+                               this.tooltip.style.position = 'absolute';
+                               this.tooltip.style.left = left + 'px';
+                               this.tooltip.style.top = top + 'px';
+                               this.tooltipImage.style.left = (left - 13) + 'px';
+                               this.tooltipImage.style.top = (top + height / 2 - 13) + 'px';
+                       });
+
+                       if (this.tooltip != null && this.tooltip.style.display != 'none') {
+                               show();
+                       } else {
+                               this.thread = window.setTimeout(show, this.tooltipDelay);
+                       }
+
+                       this.currentElt = elt;
+               }
+       }
+};
+
+/**
+ * Hides the current tooltip.
+ */
+Sidebar.prototype.hideTooltip = function() {
+       if (this.thread != null) {
+               window.clearTimeout(this.thread);
+               this.thread = null;
+       }
+
+       if (this.tooltip != null) {
+               this.tooltip.style.display = 'none';
+               this.tooltipImage.style.visibility = 'hidden';
+               this.currentElt = null;
+       }
+};
+
+/**
+ * Creates and returns the given title element.
+ */
+Sidebar.prototype.createTitle = function(label) {
+       var elt = document.createElement('a');
+       elt.setAttribute('href', 'javascript:void(0);');
+       elt.className = 'geTitle';
+       mxUtils.write(elt, label);
+
+       return elt;
+};
+
+/**
+ * Creates a thumbnail for the given cells.
+ */
+Sidebar.prototype.createThumb = function(cells, width, height, parent, title,
+       showLabel) {
+       this.graph.labelsVisible = (showLabel == null || showLabel);
+       this.graph.view.scaleAndTranslate(1, 0, 0);
+       this.graph.addCells(cells);
+       var bounds = this.graph.getGraphBounds();
+       var corr = this.thumbBorder;
+       var s = Math.min((width - 2) / (bounds.width - bounds.x + corr), (height - 2) /
+               (bounds.height - bounds.y + corr));
+       var x0 = -Math.min(bounds.x, 0);
+       var y0 = -Math.min(bounds.y, 0);
+       this.graph.view.scaleAndTranslate(s, x0, y0);
+
+       bounds = this.graph.getGraphBounds();
+       var dx = Math.max(0, Math.floor((width - bounds.width - bounds.x) / 2));
+       var dy = Math.max(0, Math.floor((height - bounds.height - bounds.y) / 2));
+
+       var node = null;
+
+       // For supporting HTML labels in IE9 standards mode the container is cloned instead
+       if (this.graph.dialect == mxConstants.DIALECT_SVG && !mxClient.NO_FO) {
+               node = this.graph.view.getCanvas().ownerSVGElement.cloneNode(true);
+       }
+       // LATER: Check if deep clone can be used for quirks if container in DOM
+       else {
+               node = this.graph.container.cloneNode(false);
+               node.innerHTML = this.graph.container.innerHTML;
+       }
+
+       this.graph.getModel().clear();
+
+       // Catch-all event handling
+       if (mxClient.IS_IE6) {
+               parent.style.backgroundImage = 'url(' + this.editorUi.editor.transparentImage +
+                       ')';
+       }
+
+       var dd = 3;
+       node.style.position = 'relative';
+       node.style.overflow = 'hidden';
+       node.style.cursor = 'pointer';
+       node.style.left = (dx + dd) + 'px';
+       node.style.top = (dy + dd) + 'px';
+       node.style.width = width + 'px';
+       node.style.height = height + 'px';
+       node.style.visibility = '';
+       node.style.minWidth = '';
+       node.style.minHeight = '';
+
+       parent.appendChild(node);
+
+       // Adds title for sidebar entries
+       if (this.sidebarTitles && title != null) {
+               var border = (mxClient.IS_QUIRKS) ? 2 * this.thumbPadding + 2 : 0;
+               parent.style.height = (this.thumbHeight + border + this.sidebarTitleSize + 8) +
+                       'px';
+
+               var div = document.createElement('div');
+               div.style.fontSize = this.sidebarTitleSize + 'px';
+               div.style.textAlign = 'center';
+               div.style.whiteSpace = 'nowrap';
+
+               if (mxClient.IS_IE) {
+                       div.style.height = (this.sidebarTitleSize + 12) + 'px';
+               }
+
+               div.style.paddingTop = '4px';
+               mxUtils.write(div, title);
+               parent.appendChild(div);
+       }
+};
+
+/**
+ * Creates and returns a new palette item for the given image.
+ */
+Sidebar.prototype.createItem = function(cells, title, showLabel) {
+       var elt = document.createElement('a');
+       elt.setAttribute('href', 'javascript:void(0);');
+       elt.className = 'geItem';
+       elt.style.overflow = 'hidden';
+       var border = (mxClient.IS_QUIRKS) ? 8 + 2 * this.thumbPadding : 6;
+       elt.style.width = (this.thumbWidth + border) + 'px';
+       elt.style.height = (this.thumbHeight + border) + 'px';
+       elt.style.padding = this.thumbPadding + 'px';
+
+       // Blocks default click action
+       mxEvent.addListener(elt, 'click', function(evt) {
+               mxEvent.consume(evt);
+       });
+
+       this.createThumb(cells, this.thumbWidth, this.thumbHeight, elt, title,
+               showLabel);
+
+       return elt;
+};
+
+
+/**
+ * Creates a drop handler for inserting the given cells.
+ */
+Sidebar.prototype.createDropHandler = function(cells, allowSplit) {
+       return function(graph, evt, target, x, y) {
+               if (graph.isEnabled()) {
+                       cells = graph.getImportableCells(cells);
+
+                       if (cells.length > 0) {
+                               var validDropTarget = (target != null) ?
+                                       graph.isValidDropTarget(target, cells, evt) : false;
+                               var select = null;
+
+                               if (target != null && !validDropTarget) {
+                                       target = null;
+                               }
+
+                               // Splits the target edge or inserts into target group
+                               if (allowSplit && graph.isSplitEnabled() && graph.isSplitTarget(target,
+                                               cells, evt)) {
+                                       graph.splitEdge(target, cells, null, x, y);
+                                       select = cells;
+                               } else if (cells.length > 0) {
+                                       select = graph.importCells(cells, x, y, target);
+                               }
+
+                               if (select != null && select.length > 0) {
+                                       graph.scrollCellToVisible(select[0]);
+                                       graph.setSelectionCells(select);
+                               }
+                       }
+               }
+       };
+};
+
+/**
+ * Creates and returns a preview element for the given width and height.
+ */
+Sidebar.prototype.createDragPreview = function(width, height) {
+       var elt = document.createElement('div');
+       elt.style.border = '1px dashed black';
+       elt.style.width = width + 'px';
+       elt.style.height = height + 'px';
+
+       return elt;
+};
+
+/**
+ * Creates a drag source for the given element.
+ */
+Sidebar.prototype.createDragSource = function(elt, dropHandler, preview) {
+       var dragSource = mxUtils.makeDraggable(elt, this.editorUi.editor.graph,
+               dropHandler,
+               preview, 0, 0, this.editorUi.editor.graph.autoscroll, true, true);
+
+
+
+       // Allows drop into cell only if target is a valid root
+       dragSource.getDropTarget = function(graph, x, y) {
+               var target = mxDragSource.prototype.getDropTarget.apply(this, arguments);
+               if (!graph.isValidRoot(target)) {
+                       target = null;
+               }
+
+               return target;
+       };
+
+       return dragSource;
+};
+
+
+
+/**
+ * Adds a handler for inserting the cell with a single click.
+ */
+Sidebar.prototype.addClickHandler = function(elt, ds) {
+       var graph = this.editorUi.editor.graph;
+       var first = null;
+
+       mxEvent.addGestureListeners(elt, function(evt) {
+               first = new mxPoint(mxEvent.getClientX(evt), mxEvent.getClientY(evt));
+       });
+
+       var oldMouseUp = ds.mouseUp;
+       ds.mouseUp = function(evt) {
+               if (!mxEvent.isPopupTrigger(evt) && this.currentGraph == null && first !=
+                       null) {
+                       var tol = graph.tolerance;
+
+                       if (Math.abs(first.x - mxEvent.getClientX(evt)) <= tol &&
+                               Math.abs(first.y - mxEvent.getClientY(evt)) <= tol) {
+                               var gs = graph.getGridSize();
+                               ds.drop(graph, evt, null, gs, gs);
+                       }
+               }
+
+               oldMouseUp.apply(this, arguments);
+               first = null;
+       };
+};
+
+/**
+ * Giuseppe Careri
+ * Create xml document vertex
+ */
+Sidebar.prototype.createXmlDocument = function(element, label, variables,
+       values) {
+       var doc = mxUtils.createXmlDocument();
+       var node = doc.createElement(element)
+       node.setAttribute('label', label);
+
+       variables.forEach(function(variable, index) {
+               node.setAttribute(variable, values[index] ? values[index] : '');
+       });
+
+       return node;
+}
+
+/**
+ * Giuseppe Careri
+ * Creates a drop handler for inserting the given cells.
+ */
+Sidebar.prototype.createVertexTemplate = function(style, width, height, value,
+       title, showLabel) {
+       var variables = [];
+       var values = [];
+
+       switch (value) {
+
+               case 'question':
+                       variables = ['question', 'other'];
+                       values = [''];
+                       break;
+               case 'input':
+                       variables = ['question', 'add'];
+                       values = [''];
+                       break;
+               case 'email':
+                       variables = ["Host", "Username", "Password", "To", "Subject", "Body"];
+                       values = [''];
+                       break;
+               default:
+                       variables = [];
+                       values = [];
+                       break;
+       }
+
+       var node = this.createXmlDocument(value, title, variables, values);
+
+       //var cells = [new mxCell((value != null) ? value : '', new mxGeometry(0, 0, width, height), style)];
+       var cells = [new mxCell(node, new mxGeometry(0, 0, width, height), style)];
+       cells[0].vertex = true;
+
+       return this.createVertexTemplateFromCells(cells, width, height, title,
+               showLabel);
+};
+
+
+
+/**
+ * Creates a drop handler for inserting the given cells.
+ */
+Sidebar.prototype.createVertexTemplateFromCells = function(cells, width, height,
+       title, showLabel) {
+       var elt = this.createItem(cells, title, showLabel);
+       var ds = this.createDragSource(elt, this.createDropHandler(cells, true), this
+               .createDragPreview(width, height));
+       this.addClickHandler(elt, ds);
+
+       // Uses guides for vertices only if enabled in graph
+       ds.isGuidesEnabled = mxUtils.bind(this, function() {
+               return this.editorUi.editor.graph.graphHandler.guidesEnabled;
+       });
+
+       // Shows a tooltip with the rendered cell
+       if (!touchStyle) {
+               mxEvent.addListener(elt, 'mousemove', mxUtils.bind(this, function(evt) {
+                       this.showTooltip(elt, cells, title, showLabel);
+               }));
+       }
+
+       return elt;
+};
+
+/**
+ * Creates a drop handler for inserting the given cells.
+ */
+Sidebar.prototype.createEdgeTemplate = function(style, width, height, value,
+       title, showLabel) {
+       var cells = [new mxCell((value != null) ? value : '', new mxGeometry(0, 0,
+               width, height), style)];
+       cells[0].geometry.setTerminalPoint(new mxPoint(0, height), true);
+       cells[0].geometry.setTerminalPoint(new mxPoint(width, 0), false);
+       cells[0].geometry.relative = true;
+       cells[0].edge = true;
+
+       return this.createEdgeTemplateFromCells(cells, width, height, title,
+               showLabel);
+};
+
+/**
+ * Creates a drop handler for inserting the given cells.
+ */
+Sidebar.prototype.createEdgeTemplateFromCells = function(cells, width, height,
+       title, showLabel) {
+       var elt = this.createItem(cells, title, showLabel);
+       this.createDragSource(elt, this.createDropHandler(cells, false), this.createDragPreview(
+               width, height));
+
+       // Installs the default edge
+       var graph = this.editorUi.editor.graph;
+       mxEvent.addListener(elt, 'click', mxUtils.bind(this, function(evt) {
+               if (this.installEdges) {
+                       graph.setDefaultEdge(cells[0]);
+               }
+
+               // Highlights the entry for 200ms
+               elt.style.backgroundColor = '#ffffff';
+
+               window.setTimeout(function() {
+                       elt.style.backgroundColor = '';
+               }, 300);
+
+               mxEvent.consume(evt);
+       }));
+
+       // Shows a tooltip with the rendered cell
+       touchStyle = false;
+       if (!touchStyle) {
+               mxEvent.addListener(elt, 'mousemove', mxUtils.bind(this, function(evt) {
+                       this.showTooltip(elt, cells, title, showLabel);
+               }));
+       }
+
+       return elt;
+};
+
+/**
+ * Adds the given palette.
+ */
+Sidebar.prototype.addPalette = function(id, title, expanded, onInit) {
+       var elt = this.createTitle(title);
+       this.container.appendChild(elt);
+
+       var div = document.createElement('div');
+       div.className = 'geSidebar';
+
+       if (expanded) {
+               onInit(div);
+               onInit = null;
+       } else {
+               div.style.display = 'none';
+       }
+
+       this.addFoldingHandler(elt, div, onInit);
+
+       var outer = document.createElement('div');
+       outer.appendChild(div);
+       this.container.appendChild(outer);
+
+       // Keeps references to the DOM nodes
+       if (id != null) {
+               this.palettes[id] = [elt, outer];
+       }
+};
+
+/**
+ * Create the given title element.
+ */
+Sidebar.prototype.addFoldingHandler = function(title, content, funct) {
+       var initialized = false;
+
+       title.style.backgroundImage = (content.style.display == 'none') ?
+               'url(' + IMAGE_PATH + '/collapsed.gif)' : 'url(' + IMAGE_PATH +
+               '/expanded.gif)';
+       title.style.backgroundRepeat = 'no-repeat';
+       title.style.backgroundPosition = '100% 50%';
+
+       mxEvent.addListener(title, 'click', function(evt) {
+               if (content.style.display == 'none') {
+                       if (!initialized) {
+                               initialized = true;
+
+                               if (funct != null) {
+                                       title.style.cursor = 'wait';
+                                       window.setTimeout(function() {
+                                               funct(content);
+                                               title.style.cursor = '';
+                                       }, 0);
+                               }
+                       }
+
+                       title.style.backgroundImage = 'url(' + IMAGE_PATH + '/expanded.gif)';
+                       content.style.display = 'block';
+               } else {
+                       title.style.backgroundImage = 'url(' + IMAGE_PATH + '/collapsed.gif)';
+                       content.style.display = 'none';
+               }
+
+               mxEvent.consume(evt);
+       });
+};
+
+/**
+ * Removes the palette for the given ID.
+ */
+Sidebar.prototype.removePalette = function(id) {
+       var elts = this.palettes[id];
+
+       if (elts != null) {
+               this.palettes[id] = null;
+
+               for (var i = 0; i < elts.length; i++) {
+                       this.container.removeChild(elts[i]);
+               }
+
+               return true;
+       }
+
+       return false;
+};
+
+/**
+ * Adds the given image palette.
+ */
+Sidebar.prototype.addImagePalette = function(id, title, prefix, postfix, items,
+       titles) {
+       // Giuseppe Careri
+       // Expanded Sidebar only entry
+       this.addPalette(id, title, (id === 'entry'), mxUtils.bind(this, function(
+               content) {
+               var showTitles = titles != null;
+
+               for (var i = 0; i < items.length; i++) {
+                       var icon = prefix + items[i] + postfix;
+                       content.appendChild(this.createVertexTemplate('image;image=' + icon, 80,
+                               80, items[i], (showTitles) ? titles[i] : null, showTitles));
+               }
+       }));
+};
+// ***********modified***************
+// Sidebar.prototype.addBpmnPalette = function(dir, expand) {
+//     //Abigael Dawit
+//
+//     var fns = [
+//             this.createVertexTemplate(
+//                     'text;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;overflow=hidden;',
+//                     40, 20, 'Text', 'Text', null),
+//             //this.createVertexTemplate('shape=ext;rounded=1;whiteSpace=wrap;dashed=1;dashPattern=1 4;', 120, 80, 'Event\nSub-Process', 'Event Sub-Process', null),
+//             this.createVertexTemplate('shape=swimlane;whiteSpace=wrap;startSize=60;',
+//                     120, 160, 'Container', 'Container', null),
+//             //      this.createVertexTemplate('shape=ellipse;', 120, 160, 'Ellips', 'Ellipse', null)
+//             this.createVertexTemplate(
+//                     'shape=swimlane;html=1;horizontal=0;swimlaneFillColor=white;swimlaneLine=0;fillColor=none;rounded=1;verticalAlign=middle',
+//                     300, 120, 'Lane', 'Lane', null)
+//
+//     ]
+//
+//     this.addPalette('utility', 'Utility ', false, mxUtils.bind(this, function(
+//             content) {
+//             //var showTitles = titles != null;
+//             for (var i = 0; i < fns.length; i++) {
+//                     content.appendChild(fns[i]);
+//             }
+//     }));
+//
+// };
index efbfd7d..7eab562 100644 (file)
@@ -1 +1,407 @@
-var _0xbe3c=["\x65\x64\x69\x74\x6F\x72\x55\x69","\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x69\x6E\x69\x74","\x68\x69\x64\x65\x4D\x65\x6E\x75","\x62\x69\x6E\x64","\x61\x64\x64\x47\x65\x73\x74\x75\x72\x65\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x73\x61\x76\x65","\x70\x75\x62\x6C\x69\x73\x68","\x2D","\x70\x72\x69\x6E\x74","\x75\x6E\x64\x6F","\x72\x65\x64\x6F","\x63\x6F\x70\x79","\x63\x75\x74","\x70\x61\x73\x74\x65","\x64\x65\x6C\x65\x74\x65","\x64\x75\x70\x6C\x69\x63\x61\x74\x65","\x61\x63\x74\x75\x61\x6C\x53\x69\x7A\x65","\x7A\x6F\x6F\x6D\x49\x6E","\x7A\x6F\x6F\x6D\x4F\x75\x74","\x61\x64\x64\x49\x74\x65\x6D\x73","\x48\x65\x6C\x76\x65\x74\x69\x63\x61","\x66\x6F\x6E\x74\x46\x61\x6D\x69\x6C\x79","\x67\x65\x74","\x61\x64\x64\x4D\x65\x6E\x75","\x77\x68\x69\x74\x65\x53\x70\x61\x63\x65","\x73\x74\x79\x6C\x65","\x6E\x6F\x77\x72\x61\x70","\x6F\x76\x65\x72\x66\x6C\x6F\x77","\x68\x69\x64\x64\x65\x6E","\x77\x69\x64\x74\x68","\x37\x30\x70\x78","\x61\x64\x64\x53\x65\x70\x61\x72\x61\x74\x6F\x72","\x31\x32","\x66\x6F\x6E\x74\x53\x69\x7A\x65","\x33\x30\x70\x78","\x62\x6F\x6C\x64","\x69\x74\x61\x6C\x69\x63","\x75\x6E\x64\x65\x72\x6C\x69\x6E\x65","\x67\x72\x61\x70\x68","\x65\x64\x69\x74\x6F\x72","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x67\x65\x74\x53\x74\x61\x74\x65","\x67\x65\x74\x56\x69\x65\x77","\x53\x54\x59\x4C\x45\x5F\x46\x4F\x4E\x54\x46\x41\x4D\x49\x4C\x59","\x53\x54\x59\x4C\x45\x5F\x46\x4F\x4E\x54\x53\x49\x5A\x45","\x6C\x65\x6E\x67\x74\x68","\x73\x75\x62\x73\x74\x72\x69\x6E\x67","\x2E\x2E\x2E","\x69\x6E\x6E\x65\x72\x48\x54\x4D\x4C","\x61\x64\x64\x4C\x69\x73\x74\x65\x6E\x65\x72","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x4D\x6F\x64\x65\x6C","\x67\x65\x74\x4D\x6F\x64\x65\x6C","\x63\x75\x72\x72\x65\x6E\x74\x4D\x65\x6E\x75","\x64\x65\x73\x74\x72\x6F\x79","\x6D\x65\x6E\x75\x73","\x66\x75\x6E\x63\x74","\x61\x64\x64\x4D\x65\x6E\x75\x46\x75\x6E\x63\x74\x69\x6F\x6E","\x73\x74\x61\x74\x65\x43\x68\x61\x6E\x67\x65\x64","\x65\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x45\x6E\x61\x62\x6C\x65\x64","\x63\x72\x65\x61\x74\x65\x4C\x61\x62\x65\x6C","\x63\x72\x65\x61\x74\x65\x42\x75\x74\x74\x6F\x6E","\x69\x6E\x69\x74\x45\x6C\x65\x6D\x65\x6E\x74","\x61\x64\x64\x4D\x65\x6E\x75\x48\x61\x6E\x64\x6C\x65\x72","\x61\x70\x70\x65\x6E\x64\x43\x68\x69\x6C\x64","\x64\x69\x76","\x63\x72\x65\x61\x74\x65\x45\x6C\x65\x6D\x65\x6E\x74","\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65","\x67\x65\x53\x65\x70\x61\x72\x61\x74\x6F\x72","\x67\x65\x53\x70\x72\x69\x74\x65\x2D","\x74\x6F\x4C\x6F\x77\x65\x72\x43\x61\x73\x65","\x61\x64\x64\x49\x74\x65\x6D","\x61\x63\x74\x69\x6F\x6E\x73","\x6C\x61\x62\x65\x6C","\x61\x64\x64\x42\x75\x74\x74\x6F\x6E","\x61\x64\x64\x43\x6C\x69\x63\x6B\x48\x61\x6E\x64\x6C\x65\x72","\x61\x64\x64\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x48\x61\x6E\x64\x6C\x65\x72","\x69\x73\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x45\x6D\x70\x74\x79","\x61\x64\x64\x45\x64\x67\x65\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x48\x61\x6E\x64\x6C\x65\x72","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73","\x69\x73\x45\x64\x67\x65","\x74\x61\x62\x69\x6E\x64\x65\x78","\x30","\x73\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x74\x69\x74\x6C\x65","\x61\x64\x64\x45\x6E\x61\x62\x6C\x65\x64\x53\x74\x61\x74\x65","\x20\x67\x65\x44\x69\x73\x61\x62\x6C\x65\x64","\x63\x6C\x69\x63\x6B","\x63\x6F\x6E\x73\x75\x6D\x65","\x61","\x68\x72\x65\x66","\x6A\x61\x76\x61\x73\x63\x72\x69\x70\x74\x3A\x76\x6F\x69\x64\x28\x30\x29\x3B","\x67\x65\x42\x75\x74\x74\x6F\x6E","\x67\x65\x53\x70\x72\x69\x74\x65\x20","\x67\x65\x4C\x61\x62\x65\x6C","\x77\x72\x69\x74\x65","\x70\x61\x6E\x6E\x69\x6E\x67\x48\x61\x6E\x64\x6C\x65\x72","\x20\x67\x65\x54\x6F\x6F\x6C\x62\x61\x72\x4D\x65\x6E\x75","\x73\x68\x6F\x77\x44\x69\x73\x61\x62\x6C\x65\x64","\x6C\x61\x62\x65\x6C\x73","\x61\x75\x74\x6F\x45\x78\x70\x61\x6E\x64","\x6F\x66\x66\x73\x65\x74\x4C\x65\x66\x74","\x6F\x66\x66\x73\x65\x74\x54\x6F\x70","\x6F\x66\x66\x73\x65\x74\x48\x65\x69\x67\x68\x74","\x70\x6F\x70\x75\x70"];function Toolbar(_0xae99x2,_0xae99x3){this[_0xbe3c[0]]=_0xae99x2;this[_0xbe3c[1]]=_0xae99x3;this[_0xbe3c[2]]();mxEvent[_0xbe3c[5]](document,mxUtils[_0xbe3c[4]](this,function(_0xae99x4){this[_0xbe3c[3]]()}))}Toolbar[_0xbe3c[6]][_0xbe3c[2]]=function(){this[_0xbe3c[21]]([_0xbe3c[7],_0xbe3c[8],_0xbe3c[9],_0xbe3c[10],_0xbe3c[11],_0xbe3c[12],_0xbe3c[9],_0xbe3c[13],_0xbe3c[14],_0xbe3c[15],_0xbe3c[16],_0xbe3c[9],_0xbe3c[17],_0xbe3c[9],_0xbe3c[18],_0xbe3c[19],_0xbe3c[20],_0xbe3c[9]]);var _0xae99x5=this[_0xbe3c[25]](_0xbe3c[22],mxResources[_0xbe3c[24]](_0xbe3c[23]),true,_0xbe3c[23]);_0xae99x5[_0xbe3c[27]][_0xbe3c[26]]=_0xbe3c[28];_0xae99x5[_0xbe3c[27]][_0xbe3c[29]]=_0xbe3c[30];_0xae99x5[_0xbe3c[27]][_0xbe3c[31]]=_0xbe3c[32];this[_0xbe3c[33]]();var _0xae99x6=this[_0xbe3c[25]](_0xbe3c[34],mxResources[_0xbe3c[24]](_0xbe3c[35]),true,_0xbe3c[35]);_0xae99x6[_0xbe3c[27]][_0xbe3c[26]]=_0xbe3c[28];_0xae99x6[_0xbe3c[27]][_0xbe3c[29]]=_0xbe3c[30];_0xae99x6[_0xbe3c[27]][_0xbe3c[31]]=_0xbe3c[36];this[_0xbe3c[21]]([_0xbe3c[9],_0xbe3c[37],_0xbe3c[38],_0xbe3c[39]]);var _0xae99x7=this[_0xbe3c[0]][_0xbe3c[41]][_0xbe3c[40]];var _0xae99x8=mxUtils[_0xbe3c[4]](this,function(){var _0xae99x9=_0xbe3c[22];var _0xae99xa=_0xbe3c[34];var _0xae99xb=_0xae99x7[_0xbe3c[44]]()[_0xbe3c[43]](_0xae99x7[_0xbe3c[42]]());if(_0xae99xb!=null){_0xae99x9=_0xae99xb[_0xbe3c[27]][mxConstants[_0xbe3c[45]]]||_0xae99x9;_0xae99xa=_0xae99xb[_0xbe3c[27]][mxConstants[_0xbe3c[46]]]||_0xae99xa;if(_0xae99x9[_0xbe3c[47]]>10){_0xae99x9=_0xae99x9[_0xbe3c[48]](0,8)+_0xbe3c[49]};_0xae99x5[_0xbe3c[50]]=_0xae99x9;_0xae99x6[_0xbe3c[50]]=_0xae99xa}});_0xae99x7[_0xbe3c[52]]()[_0xbe3c[51]](mxEvent.CHANGE,_0xae99x8);_0xae99x7[_0xbe3c[53]]()[_0xbe3c[51]](mxEvent.CHANGE,_0xae99x8)};Toolbar[_0xbe3c[6]][_0xbe3c[3]]=function(){if(this[_0xbe3c[54]]!=null){this[_0xbe3c[54]][_0xbe3c[3]]();this[_0xbe3c[54]][_0xbe3c[55]]();this[_0xbe3c[54]]=null}};Toolbar[_0xbe3c[6]][_0xbe3c[25]]=function(_0xae99xc,_0xae99xd,_0xae99xe,_0xae99xf){var _0xae99x10=this[_0xbe3c[0]][_0xbe3c[56]][_0xbe3c[24]](_0xae99xf);var _0xae99x11=this[_0xbe3c[58]](_0xae99xc,_0xae99xd,_0xae99xe,_0xae99x10[_0xbe3c[57]]);_0xae99x10[_0xbe3c[51]](_0xbe3c[59],function(){_0xae99x11[_0xbe3c[61]](_0xae99x10[_0xbe3c[60]])});return _0xae99x11};Toolbar[_0xbe3c[6]][_0xbe3c[58]]=function(_0xae99xc,_0xae99xd,_0xae99xe,_0xae99x12){var _0xae99x11=(_0xae99xe)?this[_0xbe3c[62]](_0xae99xc):this[_0xbe3c[63]](_0xae99xc);this[_0xbe3c[64]](_0xae99x11,_0xae99xd);this[_0xbe3c[65]](_0xae99x11,_0xae99xe,_0xae99x12);this[_0xbe3c[1]][_0xbe3c[66]](_0xae99x11);return _0xae99x11};Toolbar[_0xbe3c[6]][_0xbe3c[33]]=function(){var _0xae99x11=document[_0xbe3c[68]](_0xbe3c[67]);_0xae99x11[_0xbe3c[69]]=_0xbe3c[70];this[_0xbe3c[1]][_0xbe3c[66]](_0xae99x11);return _0xae99x11};Toolbar[_0xbe3c[6]][_0xbe3c[21]]=function(_0xae99x13){for(var _0xae99x14=0;_0xae99x14<_0xae99x13[_0xbe3c[47]];_0xae99x14++){var _0xae99x15=_0xae99x13[_0xae99x14];if(_0xae99x15==_0xbe3c[9]){this[_0xbe3c[33]]()}else {this[_0xbe3c[73]](_0xbe3c[71]+_0xae99x15[_0xbe3c[72]](),_0xae99x15)}}};Toolbar[_0xbe3c[6]][_0xbe3c[73]]=function(_0xae99x16,_0xae99x15){var _0xae99x17=this[_0xbe3c[0]][_0xbe3c[74]][_0xbe3c[24]](_0xae99x15);var _0xae99x11=null;if(_0xae99x17!=null){_0xae99x11=this[_0xbe3c[76]](_0xae99x16,_0xae99x17[_0xbe3c[75]],_0xae99x17[_0xbe3c[57]]);_0xae99x11[_0xbe3c[61]](_0xae99x17[_0xbe3c[60]]);_0xae99x17[_0xbe3c[51]](_0xbe3c[59],function(){_0xae99x11[_0xbe3c[61]](_0xae99x17[_0xbe3c[60]])})};return _0xae99x11};Toolbar[_0xbe3c[6]][_0xbe3c[76]]=function(_0xae99x18,_0xae99xd,_0xae99x12){var _0xae99x11=this[_0xbe3c[63]](_0xae99x18);this[_0xbe3c[64]](_0xae99x11,_0xae99xd);this[_0xbe3c[77]](_0xae99x11,_0xae99x12);this[_0xbe3c[1]][_0xbe3c[66]](_0xae99x11);return _0xae99x11};Toolbar[_0xbe3c[6]][_0xbe3c[78]]=function(_0xae99x19){var _0xae99x7=this[_0xbe3c[0]][_0xbe3c[41]][_0xbe3c[40]];var _0xae99x1a=function(){var _0xae99x1b=!_0xae99x7[_0xbe3c[79]]();for(var _0xae99x14=0;_0xae99x14<_0xae99x19[_0xbe3c[47]];_0xae99x14++){_0xae99x19[_0xae99x14][_0xbe3c[61]](_0xae99x1b)}};_0xae99x7[_0xbe3c[52]]()[_0xbe3c[51]](mxEvent.CHANGE,_0xae99x1a);_0xae99x1a()};Toolbar[_0xbe3c[6]][_0xbe3c[80]]=function(_0xae99x19){var _0xae99x7=this[_0xbe3c[0]][_0xbe3c[41]][_0xbe3c[40]];var _0xae99x1a=function(){var _0xae99x1c=false;if(!_0xae99x7[_0xbe3c[79]]()){var _0xae99x1d=_0xae99x7[_0xbe3c[81]]();for(var _0xae99x14=0;_0xae99x14<_0xae99x1d[_0xbe3c[47]];_0xae99x14++){if(_0xae99x7[_0xbe3c[53]]()[_0xbe3c[82]](_0xae99x1d[_0xae99x14])){_0xae99x1c=true;break}}};for(var _0xae99x14=0;_0xae99x14<_0xae99x19[_0xbe3c[47]];_0xae99x14++){_0xae99x19[_0xae99x14][_0xbe3c[61]](_0xae99x1c)}};_0xae99x7[_0xbe3c[52]]()[_0xbe3c[51]](mxEvent.CHANGE,_0xae99x1a);_0xae99x1a()};Toolbar[_0xbe3c[6]][_0xbe3c[64]]=function(_0xae99x11,_0xae99xd){_0xae99x11[_0xbe3c[85]](_0xbe3c[83],_0xbe3c[84]);if(_0xae99xd!=null){_0xae99x11[_0xbe3c[85]](_0xbe3c[86],_0xae99xd)};this[_0xbe3c[87]](_0xae99x11)};Toolbar[_0xbe3c[6]][_0xbe3c[87]]=function(_0xae99x11){var _0xae99x18=_0xae99x11[_0xbe3c[69]];_0xae99x11[_0xbe3c[61]]=function(_0xae99x1e){_0xae99x11[_0xbe3c[60]]=_0xae99x1e;if(_0xae99x1e){_0xae99x11[_0xbe3c[69]]=_0xae99x18}else {_0xae99x11[_0xbe3c[69]]=_0xae99x18+_0xbe3c[88]}};_0xae99x11[_0xbe3c[61]](true)};Toolbar[_0xbe3c[6]][_0xbe3c[77]]=function(_0xae99x11,_0xae99x12){if(_0xae99x12!=null){mxEvent[_0xbe3c[51]](_0xae99x11,_0xbe3c[89],function(_0xae99x4){if(_0xae99x11[_0xbe3c[60]]){_0xae99x12(_0xae99x4)};mxEvent[_0xbe3c[90]](_0xae99x4)})}};Toolbar[_0xbe3c[6]][_0xbe3c[63]]=function(_0xae99x18){var _0xae99x11=document[_0xbe3c[68]](_0xbe3c[91]);_0xae99x11[_0xbe3c[85]](_0xbe3c[92],_0xbe3c[93]);_0xae99x11[_0xbe3c[69]]=_0xbe3c[94];var _0xae99x1f=document[_0xbe3c[68]](_0xbe3c[67]);_0xae99x1f[_0xbe3c[69]]=_0xbe3c[95]+_0xae99x18;_0xae99x11[_0xbe3c[66]](_0xae99x1f);return _0xae99x11};Toolbar[_0xbe3c[6]][_0xbe3c[62]]=function(_0xae99xc,_0xae99xd){var _0xae99x11=document[_0xbe3c[68]](_0xbe3c[91]);_0xae99x11[_0xbe3c[85]](_0xbe3c[92],_0xbe3c[93]);_0xae99x11[_0xbe3c[69]]=_0xbe3c[96];mxUtils[_0xbe3c[97]](_0xae99x11,_0xae99xc);return _0xae99x11};Toolbar[_0xbe3c[6]][_0xbe3c[65]]=function(_0xae99x11,_0xae99xe,_0xae99x12,_0xae99x20){if(_0xae99x12!=null){var _0xae99x7=this[_0xbe3c[0]][_0xbe3c[41]][_0xbe3c[40]];var _0xae99x10=null;mxEvent[_0xbe3c[51]](_0xae99x11,_0xbe3c[89],mxUtils[_0xbe3c[4]](this,function(_0xae99x4){if(_0xae99x11[_0xbe3c[60]]==null||_0xae99x11[_0xbe3c[60]]){_0xae99x7[_0xbe3c[98]][_0xbe3c[3]]();_0xae99x10= new mxPopupMenu(_0xae99x12);_0xae99x10[_0xbe3c[67]][_0xbe3c[69]]+=_0xbe3c[99];_0xae99x10[_0xbe3c[100]]=_0xae99x20;_0xae99x10[_0xbe3c[101]]=_0xae99xe;_0xae99x10[_0xbe3c[102]]=true;_0xae99x10[_0xbe3c[106]](_0xae99x11[_0xbe3c[103]],_0xae99x11[_0xbe3c[104]]+_0xae99x11[_0xbe3c[105]]+34,null,_0xae99x4);this[_0xbe3c[54]]=_0xae99x10};mxEvent[_0xbe3c[90]](_0xae99x4)}))}}
\ No newline at end of file
+/**
+ * $Id: Toolbar.js,v 1.3 2013-02-20 16:21:29 gaudenz Exp $
+ * Copyright (c) 2006-2012, JGraph Ltd
+ */
+/**
+ * Construcs a new toolbar for the given editor.
+ */
+function Toolbar(editorUi, container)
+{
+       this.editorUi = editorUi;
+       this.container = container;
+       this.init();
+
+       // Global handler to hide the current menu
+       mxEvent.addGestureListeners(document, mxUtils.bind(this, function(evt)
+       {
+               this.hideMenu();
+       }));
+};
+
+/**
+ * Adds the toolbar elements.
+ */
+Toolbar.prototype.init = function()
+{
+       this.addItems(['save', 'publish', '-', 'print', 'undo', 'redo', '-', 'copy', 'cut', 'paste', 'delete', '-', 'duplicate', '-', 'actualSize', 'zoomIn', 'zoomOut', '-']);
+       var fontElt = this.addMenu('Helvetica', mxResources.get('fontFamily'), true, 'fontFamily');
+       fontElt.style.whiteSpace = 'nowrap';
+       fontElt.style.overflow = 'hidden';
+       fontElt.style.width = '70px';
+       this.addSeparator();
+       var sizeElt = this.addMenu('12', mxResources.get('fontSize'), true, 'fontSize');
+       sizeElt.style.whiteSpace = 'nowrap';
+       sizeElt.style.overflow = 'hidden';
+       sizeElt.style.width = '30px';
+
+       this.addItems(['-', 'bold', 'italic', 'underline']);
+       // Giuseppe Careri
+       // var align = this.addMenuFunction('geSprite-left', mxResources.get('align'), false, mxUtils.bind(this, function(menu)
+       // {
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ALIGN], [mxConstants.ALIGN_LEFT], 'geIcon geSprite geSprite-left', null).setAttribute('title', mxResources.get('left'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ALIGN], [mxConstants.ALIGN_CENTER], 'geIcon geSprite geSprite-center', null).setAttribute('title', mxResources.get('center'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ALIGN], [mxConstants.ALIGN_RIGHT], 'geIcon geSprite geSprite-right', null).setAttribute('title', mxResources.get('right'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_VERTICAL_ALIGN], [mxConstants.ALIGN_TOP], 'geIcon geSprite geSprite-top', null).setAttribute('title', mxResources.get('top'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_VERTICAL_ALIGN], [mxConstants.ALIGN_MIDDLE], 'geIcon geSprite geSprite-middle', null).setAttribute('title', mxResources.get('middle'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_VERTICAL_ALIGN], [mxConstants.ALIGN_BOTTOM], 'geIcon geSprite geSprite-bottom', null).setAttribute('title', mxResources.get('bottom'));
+       // }));
+       // this.addItems(['fontColor', '-']);
+       // var line = this.addMenuFunction('geSprite-straight', mxResources.get('line'), false, mxUtils.bind(this, function(menu)
+       // {
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_EDGE], [null], 'geIcon geSprite geSprite-straight', null).setAttribute('title', mxResources.get('straight'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_EDGE], ['entityRelationEdgeStyle'], 'geIcon geSprite geSprite-entity', null).setAttribute('title', mxResources.get('entityRelation'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_EDGE, mxConstants.STYLE_ELBOW], ['elbowEdgeStyle', 'horizontal'], 'geIcon geSprite geSprite-helbow', null).setAttribute('title', mxResources.get('horizontal'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_EDGE, mxConstants.STYLE_ELBOW], ['elbowEdgeStyle', 'vertical'], 'geIcon geSprite geSprite-velbow', null).setAttribute('title', mxResources.get('vertical'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_EDGE], ['segmentEdgeStyle'], 'geIcon geSprite geSprite-segment', null).setAttribute('title', mxResources.get('manual'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_EDGE], ['orthogonalEdgeStyle'], 'geIcon geSprite geSprite-orthogonal', null).setAttribute('title', mxResources.get('automatic'));
+       // }));
+       // var linestart = this.addMenuFunction('geSprite-startclassic', mxResources.get('lineend'), false, mxUtils.bind(this, function(menu)
+       // {
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.NONE, 0], 'geIcon geSprite geSprite-noarrow', null).setAttribute('title', mxResources.get('none'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_CLASSIC, 1], 'geIcon geSprite geSprite-startclassic', null).setAttribute('title', mxResources.get('classic'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_OPEN, 1], 'geIcon geSprite geSprite-startopen', null).setAttribute('title', mxResources.get('openArrow'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_BLOCK, 1], 'geIcon geSprite geSprite-startblock', null).setAttribute('title', mxResources.get('block'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_OVAL, 1], 'geIcon geSprite geSprite-startoval', null).setAttribute('title', mxResources.get('oval'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_DIAMOND, 1], 'geIcon geSprite geSprite-startdiamond', null).setAttribute('title', mxResources.get('diamond'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_DIAMOND_THIN, 1], 'geIcon geSprite geSprite-startthindiamond', null).setAttribute('title', mxResources.get('diamondThin'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_CLASSIC, 0], 'geIcon geSprite geSprite-startclassictrans', null).setAttribute('title', mxResources.get('classic'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_BLOCK, 0], 'geIcon geSprite geSprite-startblocktrans', null).setAttribute('title', mxResources.get('block'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_OVAL, 0], 'geIcon geSprite geSprite-startovaltrans', null).setAttribute('title', mxResources.get('oval'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_DIAMOND, 0], 'geIcon geSprite geSprite-startdiamondtrans', null).setAttribute('title', mxResources.get('diamond'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_DIAMOND_THIN, 0], 'geIcon geSprite geSprite-startthindiamondtrans', null).setAttribute('title', mxResources.get('diamondThin'));
+       // }));
+       // var lineend = this.addMenuFunction('geSprite-endclassic', mxResources.get('lineend'), false, mxUtils.bind(this, function(menu)
+       // {
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.NONE, 0], 'geIcon geSprite geSprite-noarrow', null).setAttribute('title', mxResources.get('none'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_CLASSIC, 1], 'geIcon geSprite geSprite-endclassic', null).setAttribute('title', mxResources.get('classic'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_OPEN, 1], 'geIcon geSprite geSprite-endopen', null).setAttribute('title', mxResources.get('openArrow'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_BLOCK, 1], 'geIcon geSprite geSprite-endblock', null).setAttribute('title', mxResources.get('block'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_OVAL, 1], 'geIcon geSprite geSprite-endoval', null).setAttribute('title', mxResources.get('oval'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_DIAMOND, 1], 'geIcon geSprite geSprite-enddiamond', null).setAttribute('title', mxResources.get('diamond'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_DIAMOND_THIN, 1], 'geIcon geSprite geSprite-endthindiamond', null).setAttribute('title', mxResources.get('diamondThin'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_CLASSIC, 0], 'geIcon geSprite geSprite-endclassictrans', null).setAttribute('title', mxResources.get('classic'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_BLOCK, 0], 'geIcon geSprite geSprite-endblocktrans', null).setAttribute('title', mxResources.get('block'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_OVAL, 0], 'geIcon geSprite geSprite-endovaltrans', null).setAttribute('title', mxResources.get('oval'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_DIAMOND, 0], 'geIcon geSprite geSprite-enddiamondtrans', null).setAttribute('title', mxResources.get('diamond'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_DIAMOND_THIN, 0], 'geIcon geSprite geSprite-endthindiamondtrans', null).setAttribute('title', mxResources.get('diamondThin'));
+       // }));
+       // this.addItems(['-', 'strokeColor', 'image', 'fillColor']);
+       // this.addItem('geSprite-gradientcolor', 'gradientColor').setAttribute('title', mxResources.get('gradient'));
+       // this.addItems(['shadow']);
+
+       var graph = this.editorUi.editor.graph;
+
+       // Update font size and font family labels
+       var update = mxUtils.bind(this, function()
+       {
+               var ff = 'Helvetica';
+               var fs = '12';
+       var state = graph.getView().getState(graph.getSelectionCell());
+
+       if (state != null)
+       {
+               ff = state.style[mxConstants.STYLE_FONTFAMILY] || ff;
+               fs = state.style[mxConstants.STYLE_FONTSIZE] || fs;
+
+               if (ff.length > 10)
+               {
+                       ff = ff.substring(0, 8) + '...';
+               }
+
+               fontElt.innerHTML = ff;
+               sizeElt.innerHTML = fs;
+       }
+       });
+
+    graph.getSelectionModel().addListener(mxEvent.CHANGE, update);
+    graph.getModel().addListener(mxEvent.CHANGE, update);
+
+       // Giuseppe Careri
+       // Updates button states
+  //this.addEdgeSelectionHandler([line, linestart, lineend]);
+       //this.addSelectionHandler([align]);
+};
+
+/**
+ * Hides the current menu.
+ */
+Toolbar.prototype.hideMenu = function()
+{
+       if (this.currentMenu != null)
+       {
+               this.currentMenu.hideMenu();
+               this.currentMenu.destroy();
+               this.currentMenu = null;
+       }
+};
+
+/**
+ * Adds a label to the toolbar.
+ */
+Toolbar.prototype.addMenu = function(label, tooltip, showLabels, name)
+{
+       var menu = this.editorUi.menus.get(name);
+       var elt = this.addMenuFunction(label, tooltip, showLabels, menu.funct);
+
+       menu.addListener('stateChanged', function()
+       {
+               elt.setEnabled(menu.enabled);
+       });
+
+       return elt;
+};
+
+/**
+ * Adds a label to the toolbar.
+ */
+Toolbar.prototype.addMenuFunction = function(label, tooltip, showLabels, funct)
+{
+       var elt = (showLabels) ? this.createLabel(label) : this.createButton(label);
+       this.initElement(elt, tooltip);
+       this.addMenuHandler(elt, showLabels, funct);
+       this.container.appendChild(elt);
+
+       return elt;
+};
+
+/**
+ * Adds a separator to the separator.
+ */
+Toolbar.prototype.addSeparator = function()
+{
+       var elt = document.createElement('div');
+       elt.className = 'geSeparator';
+       this.container.appendChild(elt);
+
+       return elt;
+};
+
+/**
+ * Adds given action item
+ */
+Toolbar.prototype.addItems = function(keys)
+{
+       for (var i = 0; i < keys.length; i++)
+       {
+               var key = keys[i];
+
+               if (key == '-')
+               {
+                       this.addSeparator();
+               }
+               else
+               {
+                       this.addItem('geSprite-' + key.toLowerCase(), key);
+               }
+       }
+};
+
+/**
+ * Adds given action item
+ */
+Toolbar.prototype.addItem = function(sprite, key)
+{
+       var action = this.editorUi.actions.get(key);
+       var elt = null;
+
+       if (action != null)
+       {
+               elt = this.addButton(sprite, action.label, action.funct);
+               elt.setEnabled(action.enabled);
+
+               action.addListener('stateChanged', function()
+               {
+                       elt.setEnabled(action.enabled);
+               });
+       }
+
+       return elt;
+};
+
+/**
+ * Adds a button to the toolbar.
+ */
+Toolbar.prototype.addButton = function(classname, tooltip, funct)
+{
+       var elt = this.createButton(classname);
+
+       this.initElement(elt, tooltip);
+       this.addClickHandler(elt, funct);
+       this.container.appendChild(elt);
+
+       return elt;
+};
+
+/**
+ * Updates the states of the given toolbar items based on the selection.
+ */
+Toolbar.prototype.addSelectionHandler = function(items)
+{
+       var graph = this.editorUi.editor.graph;
+
+       var selectionListener = function()
+    {
+       var selected = !graph.isSelectionEmpty();
+
+       for (var i = 0; i < items.length; i++)
+       {
+               items[i].setEnabled(selected);
+       }
+    };
+
+    graph.getSelectionModel().addListener(mxEvent.CHANGE, selectionListener);
+    selectionListener();
+};
+
+/**
+ * Updates the states of the given toolbar items based on the selection.
+ */
+Toolbar.prototype.addEdgeSelectionHandler = function(items)
+{
+       var graph = this.editorUi.editor.graph;
+
+       var selectionListener = function()
+    {
+               var edgeSelected = false;
+
+               if (!graph.isSelectionEmpty())
+               {
+                       var cells = graph.getSelectionCells();
+
+                       for (var i = 0; i < cells.length; i++)
+                       {
+                               if (graph.getModel().isEdge(cells[i]))
+                               {
+                                       edgeSelected = true;
+                                       break;
+                               }
+                       }
+               }
+
+       for (var i = 0; i < items.length; i++)
+       {
+               items[i].setEnabled(edgeSelected);
+       }
+    };
+
+    graph.getSelectionModel().addListener(mxEvent.CHANGE, selectionListener);
+    selectionListener();
+};
+
+/**
+ * Initializes the given toolbar element.
+ */
+Toolbar.prototype.initElement = function(elt, tooltip)
+{
+       elt.setAttribute('tabindex', '0');
+
+       // Adds tooltip
+       if (tooltip != null)
+       {
+               elt.setAttribute('title', tooltip);
+       }
+
+       this.addEnabledState(elt);
+};
+
+/**
+ * Adds enabled state with setter to DOM node (avoids JS wrapper).
+ */
+Toolbar.prototype.addEnabledState = function(elt)
+{
+       var classname = elt.className;
+
+       elt.setEnabled = function(value)
+       {
+               elt.enabled = value;
+
+               if (value)
+               {
+                       elt.className = classname;
+               }
+               else
+               {
+                       elt.className = classname + ' geDisabled';
+               }
+       };
+
+       elt.setEnabled(true);
+};
+
+/**
+ * Adds enabled state with setter to DOM node (avoids JS wrapper).
+ */
+Toolbar.prototype.addClickHandler = function(elt, funct)
+{
+       if (funct != null)
+       {
+               mxEvent.addListener(elt, 'click', function(evt)
+               {
+                       if (elt.enabled)
+                       {
+                               funct(evt);
+                       }
+
+                       mxEvent.consume(evt);
+               });
+       }
+};
+
+/**
+ * Creates and returns a new button.
+ */
+Toolbar.prototype.createButton = function(classname)
+{
+       var elt = document.createElement('a');
+       elt.setAttribute('href', 'javascript:void(0);');
+       elt.className = 'geButton';
+
+       var inner = document.createElement('div');
+       inner.className = 'geSprite ' + classname;
+       elt.appendChild(inner);
+
+       return elt;
+};
+
+/**
+ * Creates and returns a new button.
+ */
+Toolbar.prototype.createLabel = function(label, tooltip)
+{
+       var elt = document.createElement('a');
+       elt.setAttribute('href', 'javascript:void(0);');
+       elt.className = 'geLabel';
+       mxUtils.write(elt, label);
+
+       return elt;
+};
+
+/**
+ * Adds a handler for showing a menu in the given element.
+ */
+Toolbar.prototype.addMenuHandler = function(elt, showLabels, funct, showAll)
+{
+       if (funct != null)
+       {
+               var graph = this.editorUi.editor.graph;
+               var menu = null;
+
+               mxEvent.addListener(elt, 'click', mxUtils.bind(this, function(evt)
+               {
+                       if (elt.enabled == null || elt.enabled)
+                       {
+                               graph.panningHandler.hideMenu();
+                               menu = new mxPopupMenu(funct);
+                               menu.div.className += ' geToolbarMenu';
+                               menu.showDisabled = showAll;
+                               menu.labels = showLabels;
+                               menu.autoExpand = true;
+
+                               menu.popup(elt.offsetLeft, elt.offsetTop + elt.offsetHeight + 34, null, evt);
+                               this.currentMenu = menu;
+                       }
+
+                       mxEvent.consume(evt);
+               }));
+       }
+};
index 76d6753..a53e30b 100644 (file)
@@ -1 +1,283 @@
-var _0xc2aa=["\x68\x72\x65\x66","\x6C\x6F\x63\x61\x74\x69\x6F\x6E","\x3F","\x6C\x61\x73\x74\x49\x6E\x64\x65\x78\x4F\x66","\x26","\x73\x70\x6C\x69\x74","\x73\x75\x62\x73\x74\x72\x69\x6E\x67","\x6C\x65\x6E\x67\x74\x68","\x3D","\x69\x6E\x64\x65\x78\x4F\x66","\x68\x74\x74\x70\x3A\x2F\x2F\x65\x78\x70\x2E\x64\x72\x61\x77\x2E\x69\x6F\x2F\x49\x6D\x61\x67\x65\x45\x78\x70\x6F\x72\x74\x32\x2F\x65\x78\x70\x6F\x72\x74","\x68\x74\x74\x70\x3A\x2F\x2F\x6C\x6F\x63\x61\x6C\x68\x6F\x73\x74\x3A\x33\x30\x30\x30","\x61\x70\x69\x2F\x6A\x73\x63\x72\x69\x70\x74\x79\x2F\x70\x72\x6F\x6A\x65\x63\x74\x73\x2F","\x61\x70\x69\x2F\x73\x71\x75\x61\x72\x65\x2F\x76\x61\x72\x69\x61\x62\x6C\x65\x73\x2F","\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x6A\x73\x63\x72\x69\x70\x74\x79\x2F\x73\x74\x65\x6E\x63\x69\x6C\x73","\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x6D\x78\x67\x72\x61\x70\x68\x2F\x73\x68\x61\x70\x65\x73","\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x6D\x78\x67\x72\x61\x70\x68\x2F\x69\x6D\x61\x67\x65\x73","\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x6D\x78\x67\x72\x61\x70\x68\x2F\x73\x74\x79\x6C\x65\x73","\x61\x70\x69\x2F\x6A\x73\x63\x72\x69\x70\x74\x79\x2F\x70\x72\x6F\x6A\x65\x63\x74\x73\x2F\x6F\x70\x65\x6E","\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x6A\x73\x63\x72\x69\x70\x74\x79\x2F\x74\x65\x6D\x70\x6C\x61\x74\x65\x73","\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x6A\x73\x63\x72\x69\x70\x74\x79\x2F\x72\x65\x73\x6F\x75\x72\x63\x65\x73","\x2F\x64\x69\x61","\x63\x75\x73\x74\x6F\x6D","\x4E\x47\x5F\x54\x52\x41\x4E\x53\x4C\x41\x54\x45\x5F\x4C\x41\x4E\x47\x5F\x4B\x45\x59","\x67\x65\x74\x49\x74\x65\x6D","\x6C\x6F\x67","\x65\x6E","\x65\x6E\x5F\x45\x4E","\x69\x74","\x6D\x78\x4C\x61\x6E\x67\x75\x61\x67\x65","\x61\x72","\x62\x73","\x63\x73","\x64\x61","\x64\x65","\x65\x6C","\x65\x73","\x65\x73\x2D\x61\x72","\x66\x72","\x68\x75","\x69\x64","\x6A\x61","\x6B\x6F","\x6E\x6C","\x6E\x6F","\x70\x6C","\x70\x74\x2D\x62\x72","\x70\x74","\x72\x6F","\x72\x75","\x73\x72","\x73\x76","\x74\x68","\x74\x72","\x75\x6B","\x7A\x68","\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x6D\x78\x67\x72\x61\x70\x68","\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x6D\x78\x67\x72\x61\x70\x68\x2F\x6A\x73","\x55\x53\x20\x45\x6E\x67\x6C\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65","\x55\x53\x20\x45\x6E\x67\x6C\x69\x73\x68\x20\x4D\x61\x6C\x65","\x55\x4B\x20\x45\x6E\x67\x6C\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65","\x55\x4B\x20\x45\x6E\x67\x6C\x69\x73\x68\x20\x4D\x61\x6C\x65","\x41\x75\x73\x74\x72\x61\x6C\x69\x61\x6E\x20\x45\x6E\x67\x6C\x69\x73\x68","\x55\x53\x20\x53\x70\x61\x6E\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65","\x55\x53\x20\x53\x70\x61\x6E\x69\x73\x68\x20\x4D\x61\x6C\x65","\x43\x68\x69\x6E\x65\x73\x65\x20\x46\x65\x6D\x61\x6C\x65","\x43\x68\x69\x6E\x65\x73\x65\x20\x4D\x61\x6C\x65","\x48\x6F\x6E\x67\x20\x4B\x6F\x6E\x67\x20\x43\x61\x6E\x74\x6F\x6E\x65\x73\x65\x20\x46\x65\x6D\x61\x6C\x65","\x54\x61\x69\x77\x61\x6E\x20\x43\x68\x69\x6E\x65\x73\x65\x20\x46\x65\x6D\x61\x6C\x65","\x4A\x61\x70\x61\x6E\x65\x73\x65\x20\x46\x65\x6D\x61\x6C\x65","\x4A\x61\x70\x61\x6E\x65\x73\x65\x20\x4D\x61\x6C\x65","\x4B\x6F\x72\x65\x61\x6E\x20\x46\x65\x6D\x61\x6C\x65","\x4B\x6F\x72\x65\x61\x6E\x20\x4D\x61\x6C\x65","\x43\x61\x6E\x61\x64\x69\x61\x6E\x20\x45\x6E\x67\x6C\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65","\x48\x75\x6E\x67\x61\x72\x69\x61\x6E\x20\x46\x65\x6D\x61\x6C\x65","\x42\x72\x61\x7A\x69\x6C\x69\x61\x6E\x20\x50\x6F\x72\x74\x75\x67\x75\x65\x73\x65\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x50\x6F\x72\x74\x75\x67\x75\x65\x73\x65\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x50\x6F\x72\x74\x75\x67\x75\x65\x73\x65\x20\x4D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x53\x70\x61\x6E\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x53\x70\x61\x6E\x69\x73\x68\x20\x4D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x43\x61\x74\x61\x6C\x61\x6E\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x43\x7A\x65\x63\x68\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x44\x61\x6E\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x46\x69\x6E\x6E\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x46\x72\x65\x6E\x63\x68\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x46\x72\x65\x6E\x63\x68\x20\x4D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x4E\x6F\x72\x77\x65\x67\x69\x61\x6E\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x44\x75\x74\x63\x68\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x50\x6F\x6C\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x49\x74\x61\x6C\x69\x61\x6E\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x54\x75\x72\x6B\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65\x09","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x54\x75\x72\x6B\x69\x73\x68\x20\x4D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x47\x65\x72\x6D\x61\x6E\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x47\x65\x72\x6D\x61\x6E\x20\x4D\x61\x6C\x65","\x52\x75\x73\x73\x69\x61\x6E\x20\x46\x65\x6D\x61\x6C\x65","\x52\x75\x73\x73\x69\x61\x6E\x20\x4D\x61\x6C\x65","\x53\x77\x65\x64\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65","\x43\x61\x6E\x61\x64\x69\x61\x6E\x20\x46\x72\x65\x6E\x63\x68\x20\x46\x65\x6D\x61\x6C\x65","\x43\x61\x6E\x61\x64\x69\x61\x6E\x20\x46\x72\x65\x6E\x63\x68\x20\x4D\x61\x6C\x65","\x45\x6E\x67\x6C\x69\x73\x68\x20\x28\x55\x53\x29","\x45\x6E\x67\x6C\x69\x73\x68\x20\x28\x43\x61\x6E\x61\x64\x61\x29","\x45\x6E\x67\x6C\x69\x73\x68\x20\x28\x55\x4B\x29","\x45\x6E\x67\x6C\x69\x73\x68\x20\x28\x41\x75\x73\x74\x72\x61\x6C\x69\x61\x29","\x53\x70\x61\x6E\x69\x73\x68\x20\x28\x53\x70\x61\x69\x6E\x29","\x53\x70\x61\x6E\x69\x73\x68\x20\x28\x4D\x65\x78\x69\x63\x6F\x29","\x49\x74\x61\x6C\x69\x61\x6E\x20\x28\x49\x74\x61\x6C\x79\x29\x20\x2F\x20\x46\x69\x6E\x6E\x69\x73\x68\x20\x28\x46\x69\x6E\x6C\x61\x6E\x64\x29","\x46\x72\x65\x6E\x63\x68\x20\x28\x46\x72\x61\x6E\x63\x65\x29","\x46\x72\x65\x6E\x63\x68\x20\x28\x43\x61\x6E\x61\x64\x61\x29","\x50\x6F\x6C\x69\x73\x68\x20\x28\x50\x6F\x6C\x61\x6E\x64\x29","\x50\x6F\x72\x74\x75\x67\x75\x65\x73\x65\x20\x28\x50\x6F\x72\x74\x75\x67\x61\x6C\x29","\x43\x61\x74\x61\x6C\x61\x6E\x20\x28\x43\x61\x74\x61\x6C\x61\x6E\x29","\x43\x68\x69\x6E\x65\x73\x65\x20\x28\x54\x61\x69\x77\x61\x6E\x29","\x44\x61\x6E\x69\x73\x68\x20\x28\x44\x65\x6E\x6D\x61\x72\x6B\x29","\x47\x65\x72\x6D\x61\x6E\x20\x28\x47\x65\x72\x6D\x61\x6E\x79\x29","\x4A\x61\x70\x61\x6E\x65\x73\x65\x20\x28\x4A\x61\x70\x61\x6E\x29","\x4B\x6F\x72\x65\x61\x6E\x20\x28\x4B\x6F\x72\x65\x61\x29","\x44\x75\x74\x63\x68\x20\x28\x4E\x65\x74\x68\x65\x72\x6C\x61\x6E\x64\x73\x29","\x4E\x6F\x72\x77\x65\x67\x69\x61\x6E\x20\x28\x4E\x6F\x72\x77\x61\x79\x29","\x50\x6F\x72\x74\x75\x67\x75\x65\x73\x65\x20\x28\x42\x72\x61\x7A\x69\x6C\x29","\x52\x75\x73\x73\x69\x61\x6E\x20\x28\x52\x75\x73\x73\x69\x61\x29","\x53\x77\x65\x64\x69\x73\x68\x20\x28\x53\x77\x65\x64\x65\x6E\x29","\x43\x68\x69\x6E\x65\x73\x65\x20\x28\x43\x68\x69\x6E\x61\x29","\x43\x68\x69\x6E\x65\x73\x65\x20\x28\x48\x6F\x6E\x67\x20\x4B\x6F\x6E\x67\x29","\x44\x65\x66\x61\x75\x6C\x74","\x44\x61\x74\x65","\x55\x53\x20\x4D\x6F\x6E\x65\x79","\x4E\x75\x6D\x62\x65\x72\x73\x20\x74\x6F\x20\x39","\x4E\x75\x6D\x62\x65\x72\x73\x20\x74\x6F\x20\x39\x39","\x4E\x75\x6D\x62\x65\x72\x73\x20\x74\x6F\x20\x39\x39\x39","\x54\x69\x6D\x65","\x50\x68\x6F\x6E\x65\x20\x6E\x75\x6D\x62\x65\x72","\x53\x74\x72\x65\x65\x74\x73","\x55\x53\x20\x43\x69\x74\x79\x2F\x53\x74\x61\x74\x65\x73","\x41\x66\x72\x69\x6B\x61\x61\x6E\x73","\x41\x6C\x62\x61\x6E\x69\x61\x6E","\x41\x6D\x68\x61\x72\x69\x63","\x41\x72\x61\x62\x69\x63","\x41\x72\x6D\x65\x6E\x69\x61\x6E","\x41\x7A\x65\x72\x62\x61\x69\x6A\x61\x6E\x69","\x42\x61\x73\x71\x75\x65","\x42\x65\x6C\x61\x72\x75\x73\x69\x61\x6E","\x42\x65\x6E\x67\x61\x6C\x69","\x42\x69\x68\x61\x72\x69","\x42\x6F\x73\x6E\x69\x61\x6E","\x42\x72\x65\x74\x6F\x6E","\x42\x75\x6C\x67\x61\x72\x69\x61\x6E","\x43\x61\x6D\x62\x6F\x64\x69\x61\x6E","\x43\x61\x74\x61\x6C\x61\x6E","\x43\x68\x69\x6E\x65\x73\x65\x20\x28\x53\x69\x6D\x70\x6C\x69\x66\x69\x65\x64\x29","\x43\x68\x69\x6E\x65\x73\x65\x20\x28\x54\x72\x61\x64\x69\x74\x69\x6F\x6E\x61\x6C\x29","\x43\x6F\x72\x73\x69\x63\x61\x6E","\x43\x72\x6F\x61\x74\x69\x61\x6E","\x43\x7A\x65\x63\x68","\x44\x61\x6E\x69\x73\x68","\x44\x75\x74\x63\x68","\x45\x6E\x67\x6C\x69\x73\x68","\x45\x73\x70\x65\x72\x61\x6E\x74\x6F","\x45\x73\x74\x6F\x6E\x69\x61\x6E","\x46\x61\x72\x6F\x65\x73\x65","\x46\x69\x6C\x69\x70\x69\x6E\x6F","\x46\x69\x6E\x6E\x69\x73\x68","\x46\x72\x65\x6E\x63\x68","\x46\x72\x69\x73\x69\x61\x6E","\x47\x61\x6C\x69\x63\x69\x61\x6E","\x47\x65\x6F\x72\x67\x69\x61\x6E","\x47\x65\x72\x6D\x61\x6E","\x47\x72\x65\x65\x6B","\x47\x75\x61\x72\x61\x6E\x69","\x47\x75\x6A\x61\x72\x61\x74\x69","\x48\x61\x63\x6B\x65\x72","\x48\x61\x75\x73\x61","\x48\x65\x62\x72\x65\x77","\x48\x69\x6E\x64\x69","\x48\x75\x6E\x67\x61\x72\x69\x61\x6E","\x49\x63\x65\x6C\x61\x6E\x64\x69\x63","\x49\x6E\x64\x6F\x6E\x65\x73\x69\x61\x6E","\x49\x6E\x74\x65\x72\x6C\x69\x6E\x67\x75\x61","\x49\x72\x69\x73\x68","\x49\x74\x61\x6C\x69\x61\x6E","\x4A\x61\x76\x61\x6E\x65\x73\x65","\x4A\x61\x70\x61\x6E\x65\x73\x65","\x4B\x61\x6E\x6E\x61\x64\x61","\x4B\x61\x7A\x61\x6B\x68","\x4B\x69\x6E\x79\x61\x72\x77\x61\x6E\x64\x61","\x4B\x69\x72\x75\x6E\x64\x69","\x4B\x6C\x69\x6E\x67\x6F\x6E","\x4B\x75\x72\x64\x69\x73\x68","\x4B\x6F\x72\x65\x61\x6E","\x4B\x79\x72\x67\x79\x7A","\x4C\x61\x6F\x74\x68\x69\x61\x6E","\x4C\x61\x74\x69\x6E","\x4C\x61\x74\x76\x69\x61\x6E","\x4C\x69\x6E\x67\x61\x6C\x61","\x4C\x69\x74\x68\x75\x61\x6E\x69\x61\x6E","\x4D\x61\x63\x65\x64\x6F\x6E\x69\x61\x6E","\x4D\x61\x6C\x61\x67\x61\x73\x79","\x4D\x61\x6C\x61\x79","\x4D\x61\x6C\x61\x79\x61\x6C\x61\x6D","\x4D\x61\x6C\x74\x65\x73\x65","\x4D\x61\x6F\x72\x69","\x4D\x61\x72\x61\x74\x68\x69","\x4D\x6F\x6C\x64\x61\x76\x69\x61\x6E","\x4D\x6F\x6E\x67\x6F\x6C\x69\x61\x6E","\x4D\x6F\x6E\x74\x65\x6E\x65\x67\x72\x69\x6E","\x4E\x65\x70\x61\x6C\x69","\x4E\x6F\x72\x77\x65\x67\x69\x61\x6E","\x4E\x6F\x72\x77\x65\x67\x69\x61\x6E\x20\x28\x4E\x79\x6E\x6F\x72\x73\x6B\x29","\x4F\x63\x63\x69\x74\x61\x6E","\x4F\x72\x69\x79\x61","\x4F\x72\x6F\x6D\x6F","\x50\x61\x73\x68\x74\x6F","\x50\x65\x72\x73\x69\x61\x6E","\x50\x69\x72\x61\x74\x65","\x50\x6F\x6C\x69\x73\x68","\x50\x75\x6E\x6A\x61\x62\x69","\x51\x75\x65\x63\x68\x75\x61","\x52\x6F\x6D\x61\x6E\x69\x61\x6E","\x52\x6F\x6D\x61\x6E\x73\x68","\x52\x75\x73\x73\x69\x61\x6E","\x53\x63\x6F\x74\x73\x20\x47\x61\x65\x6C\x69\x63","\x53\x65\x72\x62\x69\x61\x6E","\x53\x65\x72\x62\x6F\x2D\x43\x72\x6F\x61\x74\x69\x61\x6E","\x53\x65\x73\x6F\x74\x68\x6F","\x53\x68\x6F\x6E\x61","\x53\x69\x6E\x64\x68\x69","\x53\x69\x6E\x68\x61\x6C\x65\x73\x65","\x53\x6C\x6F\x76\x61\x6B","\x53\x6C\x6F\x76\x65\x6E\x69\x61\x6E","\x53\x6F\x6D\x61\x6C\x69","\x53\x70\x61\x6E\x69\x73\x68","\x53\x75\x6E\x64\x61\x6E\x65\x73\x65","\x53\x77\x61\x68\x69\x6C\x69","\x53\x77\x65\x64\x69\x73\x68","\x54\x61\x6A\x69\x6B","\x54\x61\x6D\x69\x6C","\x54\x61\x74\x61\x72","\x54\x65\x6C\x75\x67\x75","\x54\x68\x61\x69","\x54\x69\x67\x72\x69\x6E\x79\x61","\x54\x6F\x6E\x67\x61","\x54\x75\x72\x6B\x69\x73\x68","\x54\x75\x72\x6B\x6D\x65\x6E","\x54\x77\x69","\x55\x69\x67\x68\x75\x72","\x55\x6B\x72\x61\x69\x6E\x69\x61\x6E","\x55\x72\x64\x75","\x55\x7A\x62\x65\x6B","\x56\x69\x65\x74\x6E\x61\x6D\x65\x73\x65","\x57\x65\x6C\x73\x68","\x58\x68\x6F\x73\x61","\x59\x69\x64\x64\x69\x73\x68","\x59\x6F\x72\x75\x62\x61","\x5A\x75\x6C\x75"];var urlParams=(function(_0xbe6cx2){var _0xbe6cx3= new Object();var _0xbe6cx4=_0xbe6cx2[_0xc2aa[3]](_0xc2aa[2]);if(_0xbe6cx4>0){var _0xbe6cx5=_0xbe6cx2[_0xc2aa[6]](_0xbe6cx4+1)[_0xc2aa[5]](_0xc2aa[4]);for(var _0xbe6cx6=0;_0xbe6cx6<_0xbe6cx5[_0xc2aa[7]];_0xbe6cx6++){_0xbe6cx4=_0xbe6cx5[_0xbe6cx6][_0xc2aa[9]](_0xc2aa[8]);if(_0xbe6cx4>0){_0xbe6cx3[_0xbe6cx5[_0xbe6cx6][_0xc2aa[6]](0,_0xbe6cx4)]=_0xbe6cx5[_0xbe6cx6][_0xc2aa[6]](_0xbe6cx4+1)}}};return _0xbe6cx3})(window[_0xc2aa[1]][_0xc2aa[0]]);var t0= new Date();var MAX_REQUEST_SIZE=10485760;var MAX_WIDTH=12000;var MAX_HEIGHT=12000;var EXPORT_URL=_0xc2aa[10];var SHARE_HOST=_0xc2aa[11];var SAVE_URL=_0xc2aa[12];var VARIABLE_URL=_0xc2aa[13];var STENCIL_PATH=_0xc2aa[14];var SHAPES_PATH=_0xc2aa[15];var IMAGE_PATH=_0xc2aa[16];var STYLE_PATH=_0xc2aa[17];var CSS_PATH=_0xc2aa[17];var OPEN_FORM=_0xc2aa[18];var TEMPLATE_PATH=_0xc2aa[19];var RESOURCES_PATH=_0xc2aa[20];var RESOURCE_BASE=RESOURCES_PATH+_0xc2aa[21];var tapAndHoldStartsConnection=true;var showConnectorImg=true;var mxLoadResources=false;console[_0xc2aa[25]](_0xc2aa[22],localStorage[_0xc2aa[24]](_0xc2aa[23]));switch(localStorage[_0xc2aa[24]](_0xc2aa[23])){case _0xc2aa[27]:mxLanguage=_0xc2aa[26];break;case _0xc2aa[28]:mxLanguage=_0xc2aa[28];break;default:mxLanguage=_0xc2aa[28]};console[_0xc2aa[25]](_0xc2aa[29],mxLanguage);var mxLanguages=[_0xc2aa[30],_0xc2aa[31],_0xc2aa[32],_0xc2aa[33],_0xc2aa[34],_0xc2aa[35],_0xc2aa[36],_0xc2aa[37],_0xc2aa[38],_0xc2aa[39],_0xc2aa[40],_0xc2aa[28],_0xc2aa[41],_0xc2aa[42],_0xc2aa[43],_0xc2aa[44],_0xc2aa[45],_0xc2aa[46],_0xc2aa[47],_0xc2aa[48],_0xc2aa[49],_0xc2aa[50],_0xc2aa[51],_0xc2aa[52],_0xc2aa[53],_0xc2aa[54],_0xc2aa[55]];var mxBasePath=_0xc2aa[56];var geBasePath=_0xc2aa[57];var ISPEECHLANG={usenglishfemale:_0xc2aa[58],usenglishmale:_0xc2aa[59],ukenglishfemale:_0xc2aa[60],ukenglishmale:_0xc2aa[61],auenglishfemale:_0xc2aa[62],usspanishfemale:_0xc2aa[63],usspanishmale:_0xc2aa[64],chchinesefemale:_0xc2aa[65],chchinesemale:_0xc2aa[66],hkchinesefemale:_0xc2aa[67],twchinesefemale:_0xc2aa[68],jpjapanesefemale:_0xc2aa[69],jpjapanesemale:_0xc2aa[70],krkoreanfemale:_0xc2aa[71],krkoreanmale:_0xc2aa[72],caenglishfemale:_0xc2aa[73],huhungarianfemale:_0xc2aa[74],brportuguesefemale:_0xc2aa[75],eurportuguesefemale:_0xc2aa[76],eurportuguesemale:_0xc2aa[77],eurspanishfemale:_0xc2aa[78],eurspanishmale:_0xc2aa[79],eurcatalanfemale:_0xc2aa[80],eurczechfemale:_0xc2aa[81],eurdanishfemale:_0xc2aa[82],eurfinnishfemale:_0xc2aa[83],eurfrenchfemale:_0xc2aa[84],eurfrenchmale:_0xc2aa[85],eurnorwegianfemale:_0xc2aa[86],eurdutchfemale:_0xc2aa[87],eurpolishfemale:_0xc2aa[88],euritalianfemale:_0xc2aa[89],eurturkishfemale:_0xc2aa[90],eurturkishmale:_0xc2aa[91],eurgermanfemale:_0xc2aa[92],eurgermanmale:_0xc2aa[93],rurussianfemale:_0xc2aa[94],rurussianmale:_0xc2aa[95],swswedishfemale:_0xc2aa[96],cafrenchfemale:_0xc2aa[97],cafrenchmale:_0xc2aa[98]};var ISPEECHASRLANG={"\x65\x6E\x2D\x55\x53":_0xc2aa[99],"\x65\x6E\x2D\x43\x41":_0xc2aa[100],"\x65\x6E\x2D\x47\x42":_0xc2aa[101],"\x65\x6E\x2D\x41\x55":_0xc2aa[102],"\x65\x73\x2D\x45\x53":_0xc2aa[103],"\x65\x73\x2D\x4D\x58":_0xc2aa[104],"\x69\x74\x2D\x49\x54":_0xc2aa[105],"\x66\x72\x2D\x46\x52":_0xc2aa[106],"\x66\x72\x2D\x43\x41":_0xc2aa[107],"\x70\x6C\x2D\x50\x4C":_0xc2aa[108],"\x70\x74\x2D\x50\x54":_0xc2aa[109],"\x63\x61\x2D\x45\x53":_0xc2aa[110],"\x7A\x68\x2D\x54\x57":_0xc2aa[111],"\x64\x61\x2D\x44\x4B":_0xc2aa[112],"\x66\x72\x2D\x46\x52":_0xc2aa[113],"\x6A\x61\x2D\x4A\x50":_0xc2aa[114],"\x6B\x6F\x2D\x4B\x52":_0xc2aa[115],"\x6E\x6C\x2D\x4E\x4C":_0xc2aa[116],"\x6E\x62\x2D\x4E\x4F":_0xc2aa[117],"\x70\x74\x2D\x42\x52":_0xc2aa[118],"\x72\x75\x2D\x52\x55":_0xc2aa[119],"\x73\x76\x2D\x53\x45":_0xc2aa[120],"\x7A\x68\x2D\x43\x4E":_0xc2aa[121],"\x7A\x68\x2D\x48\x4B":_0xc2aa[122]};var ISPEECHASRMODEL={0:_0xc2aa[123],date:_0xc2aa[124],usmoney:_0xc2aa[125],numbersto9:_0xc2aa[126],numbersto99:_0xc2aa[127],numbersto999:_0xc2aa[128],time:_0xc2aa[129],phonenumber:_0xc2aa[130],streets:_0xc2aa[131],citystate:_0xc2aa[132]};var GOOGLETTSLANG={"\x61\x66":_0xc2aa[133],"\x73\x71":_0xc2aa[134],"\x61\x6D":_0xc2aa[135],"\x61\x72":_0xc2aa[136],"\x68\x79":_0xc2aa[137],"\x61\x7A":_0xc2aa[138],"\x65\x75":_0xc2aa[139],"\x62\x65":_0xc2aa[140],"\x62\x6E":_0xc2aa[141],"\x62\x68":_0xc2aa[142],"\x62\x73":_0xc2aa[143],"\x62\x72":_0xc2aa[144],"\x62\x67":_0xc2aa[145],"\x6B\x6D":_0xc2aa[146],"\x63\x61":_0xc2aa[147],"\x7A\x68\x2D\x43\x4E":_0xc2aa[148],"\x7A\x68\x2D\x54\x57":_0xc2aa[149],"\x63\x6F":_0xc2aa[150],"\x68\x72":_0xc2aa[151],"\x63\x73":_0xc2aa[152],"\x64\x61":_0xc2aa[153],"\x6E\x6C":_0xc2aa[154],"\x65\x6E":_0xc2aa[155],"\x65\x6F":_0xc2aa[156],"\x65\x74":_0xc2aa[157],"\x66\x6F":_0xc2aa[158],"\x74\x6C":_0xc2aa[159],"\x66\x69":_0xc2aa[160],"\x66\x72":_0xc2aa[161],"\x66\x79":_0xc2aa[162],"\x67\x6C":_0xc2aa[163],"\x6B\x61":_0xc2aa[164],"\x64\x65":_0xc2aa[165],"\x65\x6C":_0xc2aa[166],"\x67\x6E":_0xc2aa[167],"\x67\x75":_0xc2aa[168],"\x78\x78\x2D\x68\x61\x63\x6B\x65\x72":_0xc2aa[169],"\x68\x61":_0xc2aa[170],"\x69\x77":_0xc2aa[171],"\x68\x69":_0xc2aa[172],"\x68\x75":_0xc2aa[173],"\x69\x73":_0xc2aa[174],"\x69\x64":_0xc2aa[175],"\x69\x61":_0xc2aa[176],"\x67\x61":_0xc2aa[177],"\x69\x74":_0xc2aa[178],"\x6A\x77":_0xc2aa[179],"\x6A\x61":_0xc2aa[180],"\x6B\x6E":_0xc2aa[181],"\x6B\x6B":_0xc2aa[182],"\x72\x77":_0xc2aa[183],"\x72\x6E":_0xc2aa[184],"\x78\x78\x2D\x6B\x6C\x69\x6E\x67\x6F\x6E":_0xc2aa[185],"\x6B\x75":_0xc2aa[186],"\x6B\x6F":_0xc2aa[187],"\x6B\x79":_0xc2aa[188],"\x6C\x6F":_0xc2aa[189],"\x6C\x61":_0xc2aa[190],"\x6C\x76":_0xc2aa[191],"\x6C\x6E":_0xc2aa[192],"\x6C\x74":_0xc2aa[193],"\x6D\x6B":_0xc2aa[194],"\x6D\x67":_0xc2aa[195],"\x6D\x73":_0xc2aa[196],"\x6D\x6C":_0xc2aa[197],"\x6D\x74":_0xc2aa[198],"\x6D\x69":_0xc2aa[199],"\x6D\x72":_0xc2aa[200],"\x6D\x6F":_0xc2aa[201],"\x6D\x6E":_0xc2aa[202],"\x73\x72\x2D\x4D\x45":_0xc2aa[203],"\x6E\x65":_0xc2aa[204],"\x6E\x6F":_0xc2aa[205],"\x6E\x6E":_0xc2aa[206],"\x6F\x63":_0xc2aa[207],"\x6F\x72":_0xc2aa[208],"\x6F\x6D":_0xc2aa[209],"\x70\x73":_0xc2aa[210],"\x66\x61":_0xc2aa[211],"\x78\x78\x2D\x70\x69\x72\x61\x74\x65":_0xc2aa[212],"\x70\x6C":_0xc2aa[213],"\x70\x74\x2D\x42\x52":_0xc2aa[118],"\x70\x74\x2D\x50\x54":_0xc2aa[109],"\x70\x61":_0xc2aa[214],"\x71\x75":_0xc2aa[215],"\x72\x6F":_0xc2aa[216],"\x72\x6D":_0xc2aa[217],"\x72\x75":_0xc2aa[218],"\x67\x64":_0xc2aa[219],"\x73\x72":_0xc2aa[220],"\x73\x68":_0xc2aa[221],"\x73\x74":_0xc2aa[222],"\x73\x6E":_0xc2aa[223],"\x73\x64":_0xc2aa[224],"\x73\x69":_0xc2aa[225],"\x73\x6B":_0xc2aa[226],"\x73\x6C":_0xc2aa[227],"\x73\x6F":_0xc2aa[228],"\x65\x73":_0xc2aa[229],"\x73\x75":_0xc2aa[230],"\x73\x77":_0xc2aa[231],"\x73\x76":_0xc2aa[232],"\x74\x67":_0xc2aa[233],"\x74\x61":_0xc2aa[234],"\x74\x74":_0xc2aa[235],"\x74\x65":_0xc2aa[236],"\x74\x68":_0xc2aa[237],"\x74\x69":_0xc2aa[238],"\x74\x6F":_0xc2aa[239],"\x74\x72":_0xc2aa[240],"\x74\x6B":_0xc2aa[241],"\x74\x77":_0xc2aa[242],"\x75\x67":_0xc2aa[243],"\x75\x6B":_0xc2aa[244],"\x75\x72":_0xc2aa[245],"\x75\x7A":_0xc2aa[246],"\x76\x69":_0xc2aa[247],"\x63\x79":_0xc2aa[248],"\x78\x68":_0xc2aa[249],"\x79\x69":_0xc2aa[250],"\x79\x6F":_0xc2aa[251],"\x7A\x75":_0xc2aa[252]}
\ No newline at end of file
+var urlParams = (function(url) {
+       var result = new Object();
+       var idx = url.lastIndexOf('?');
+
+       if (idx > 0) {
+               var params = url.substring(idx + 1).split('&');
+
+               for (var i = 0; i < params.length; i++) {
+                       idx = params[i].indexOf('=');
+
+                       if (idx > 0) {
+                               result[params[i].substring(0, idx)] = params[i].substring(idx + 1);
+                       }
+               }
+       }
+
+       return result;
+})(window.location.href);
+
+var t0 = new Date();
+
+// Public global variables
+var MAX_REQUEST_SIZE = 10485760;
+var MAX_WIDTH = 12000;
+var MAX_HEIGHT = 12000;
+
+// CUSTOM_PARAMETERS - URLs for save and export
+var EXPORT_URL = 'http://exp.draw.io/ImageExport2/export';
+var SHARE_HOST = 'http://localhost:3000';
+
+var SAVE_URL = 'api/jscripty/projects/';
+var VARIABLE_URL = 'api/square/variables/';
+
+// Paths and files
+var STENCIL_PATH = '/assets/plugins/jscripty/stencils';
+var SHAPES_PATH = '/assets/plugins/mxgraph/shapes';
+var IMAGE_PATH = '/assets/plugins/mxgraph/images';
+// Path for images inside the diagram
+//var GRAPH_IMAGE_PATH = 'assets/plugins/mxgraph/img';
+//var ICONFINDER_PATH = 'iconfinder';
+var STYLE_PATH = '/assets/plugins/mxgraph/styles';
+var CSS_PATH = '/assets/plugins/mxgraph/styles';
+var OPEN_FORM = 'api/jscripty/projects/open';
+var TEMPLATE_PATH = '/assets/plugins/jscripty/templates';
+
+// Directory for i18 files and basename for main i18n file
+var RESOURCES_PATH = '/assets/plugins/jscripty/resources';
+var RESOURCE_BASE = RESOURCES_PATH + '/dia';
+
+// Specifies connection mode for touch devices (at least one should be true)
+var tapAndHoldStartsConnection = true;
+var showConnectorImg = true;
+
+var mxLoadResources = false;
+// var mxLanguage = '';
+console.log('custom', localStorage.getItem("NG_TRANSLATE_LANG_KEY"));
+switch (localStorage.getItem("NG_TRANSLATE_LANG_KEY")) {
+       case 'en_EN':
+               mxLanguage = 'en';
+               break;
+       case 'it':
+               mxLanguage = 'it';
+               break;
+       default:
+               mxLanguage = 'it';
+}
+console.log('mxLanguage', mxLanguage);
+
+var mxLanguages = ['ar', 'bs', 'cs', 'da', 'de', 'el', 'es', 'es-ar', 'fr',
+       'hu', 'id', 'it', 'ja', 'ko', 'nl', 'no', 'pl', 'pt-br', 'pt', 'ro', 'ru',
+       'sr', 'sv', 'th', 'tr', 'uk', 'zh'
+];
+var mxBasePath = 'assets/plugins/mxgraph';
+var geBasePath = 'assets/plugins/mxgraph/js';
+
+var ISPEECHLANG = {
+       usenglishfemale: "US English Female",
+       usenglishmale: "US English Male",
+       ukenglishfemale: "UK English Female",
+       ukenglishmale: "UK English Male",
+       auenglishfemale: "Australian English",
+       usspanishfemale: "US Spanish Female",
+       usspanishmale: "US Spanish Male",
+       chchinesefemale: "Chinese Female",
+       chchinesemale: "Chinese Male",
+       hkchinesefemale: "Hong Kong Cantonese Female",
+       twchinesefemale: "Taiwan Chinese Female",
+       jpjapanesefemale: "Japanese Female",
+       jpjapanesemale: "Japanese Male",
+       krkoreanfemale: "Korean Female",
+       krkoreanmale: "Korean Male",
+       caenglishfemale: "Canadian English Female",
+       huhungarianfemale: "Hungarian Female",
+       brportuguesefemale: "Brazilian Portuguese Female",
+       eurportuguesefemale: "European Portuguese Female",
+       eurportuguesemale: "European Portuguese Male",
+       eurspanishfemale: "European Spanish Female",
+       eurspanishmale: "European Spanish Male",
+       eurcatalanfemale: "European Catalan Female",
+       eurczechfemale: "European Czech Female",
+       eurdanishfemale: "European Danish Female",
+       eurfinnishfemale: "European Finnish Female",
+       eurfrenchfemale: "European French Female",
+       eurfrenchmale: "European French Male",
+       eurnorwegianfemale: "European Norwegian Female",
+       eurdutchfemale: "European Dutch Female",
+       eurpolishfemale: "European Polish Female",
+       euritalianfemale: "European Italian Female",
+       eurturkishfemale: "European Turkish Female      ",
+       eurturkishmale: "European Turkish Male",
+       eurgermanfemale: "European German Female",
+       eurgermanmale: "European German Male",
+       rurussianfemale: "Russian Female",
+       rurussianmale: "Russian Male",
+       swswedishfemale: "Swedish Female",
+       cafrenchfemale: "Canadian French Female",
+       cafrenchmale: "Canadian French Male"
+};
+
+var ISPEECHASRLANG = {
+       "en-US": "English (US)",
+       "en-CA": "English (Canada)",
+       "en-GB": "English (UK)",
+       "en-AU": "English (Australia)",
+       "es-ES": "Spanish (Spain)",
+       "es-MX": "Spanish (Mexico)",
+       "it-IT": "Italian (Italy) / Finnish (Finland)",
+       "fr-FR": "French (France)",
+       "fr-CA": "French (Canada)",
+       "pl-PL": "Polish (Poland)",
+       "pt-PT": "Portuguese (Portugal)",
+       "ca-ES": "Catalan (Catalan)",
+       "zh-TW": "Chinese (Taiwan)",
+       "da-DK": "Danish (Denmark)",
+       "fr-FR": "German (Germany)",
+       "ja-JP": "Japanese (Japan)",
+       "ko-KR": "Korean (Korea)",
+       "nl-NL": "Dutch (Netherlands)",
+       "nb-NO": "Norwegian (Norway)",
+       "pt-BR": "Portuguese (Brazil)",
+       "ru-RU": "Russian (Russia)",
+       "sv-SE": "Swedish (Sweden)",
+       "zh-CN": "Chinese (China)",
+       "zh-HK": "Chinese (Hong Kong)"
+};
+
+var ISPEECHASRMODEL = {
+       0: "Default",
+       date: "Date",
+       usmoney: "US Money",
+       numbersto9: "Numbers to 9",
+       numbersto99: "Numbers to 99",
+       numbersto999: "Numbers to 999",
+       time: "Time",
+       phonenumber: "Phone number",
+       streets: "Streets",
+       citystate: "US City/States"
+};
+
+var GOOGLETTSLANG = {
+       "af": "Afrikaans",
+       "sq": "Albanian",
+       "am": "Amharic",
+       "ar": "Arabic",
+       "hy": "Armenian",
+       "az": "Azerbaijani",
+       "eu": "Basque",
+       "be": "Belarusian",
+       "bn": "Bengali",
+       "bh": "Bihari",
+       "bs": "Bosnian",
+       "br": "Breton",
+       "bg": "Bulgarian",
+       "km": "Cambodian",
+       "ca": "Catalan",
+       "zh-CN": "Chinese (Simplified)",
+       "zh-TW": "Chinese (Traditional)",
+       "co": "Corsican",
+       "hr": "Croatian",
+       "cs": "Czech",
+       "da": "Danish",
+       "nl": "Dutch",
+       "en": "English",
+       "eo": "Esperanto",
+       "et": "Estonian",
+       "fo": "Faroese",
+       "tl": "Filipino",
+       "fi": "Finnish",
+       "fr": "French",
+       "fy": "Frisian",
+       "gl": "Galician",
+       "ka": "Georgian",
+       "de": "German",
+       "el": "Greek",
+       "gn": "Guarani",
+       "gu": "Gujarati",
+       "xx-hacker": "Hacker",
+       "ha": "Hausa",
+       "iw": "Hebrew",
+       "hi": "Hindi",
+       "hu": "Hungarian",
+       "is": "Icelandic",
+       "id": "Indonesian",
+       "ia": "Interlingua",
+       "ga": "Irish",
+       "it": "Italian",
+       "jw": "Javanese",
+       "ja": "Japanese",
+       "kn": "Kannada",
+       "kk": "Kazakh",
+       "rw": "Kinyarwanda",
+       "rn": "Kirundi",
+       "xx-klingon": "Klingon",
+       "ku": "Kurdish",
+       "ko": "Korean",
+       "ky": "Kyrgyz",
+       "lo": "Laothian",
+       "la": "Latin",
+       "lv": "Latvian",
+       "ln": "Lingala",
+       "lt": "Lithuanian",
+       "mk": "Macedonian",
+       "mg": "Malagasy",
+       "ms": "Malay",
+       "ml": "Malayalam",
+       "mt": "Maltese",
+       "mi": "Maori",
+       "mr": "Marathi",
+       "mo": "Moldavian",
+       "mn": "Mongolian",
+       "sr-ME": "Montenegrin",
+       "ne": "Nepali",
+       "no": "Norwegian",
+       "nn": "Norwegian (Nynorsk)",
+       "oc": "Occitan",
+       "or": "Oriya",
+       "om": "Oromo",
+       "ps": "Pashto",
+       "fa": "Persian",
+       "xx-pirate": "Pirate",
+       "pl": "Polish",
+       "pt-BR": "Portuguese (Brazil)",
+       "pt-PT": "Portuguese (Portugal)",
+       "pa": "Punjabi",
+       "qu": "Quechua",
+       "ro": "Romanian",
+       "rm": "Romansh",
+       "ru": "Russian",
+       "gd": "Scots Gaelic",
+       "sr": "Serbian",
+       "sh": "Serbo-Croatian",
+       "st": "Sesotho",
+       "sn": "Shona",
+       "sd": "Sindhi",
+       "si": "Sinhalese",
+       "sk": "Slovak",
+       "sl": "Slovenian",
+       "so": "Somali",
+       "es": "Spanish",
+       "su": "Sundanese",
+       "sw": "Swahili",
+       "sv": "Swedish",
+       "tg": "Tajik",
+       "ta": "Tamil",
+       "tt": "Tatar",
+       "te": "Telugu",
+       "th": "Thai",
+       "ti": "Tigrinya",
+       "to": "Tonga",
+       "tr": "Turkish",
+       "tk": "Turkmen",
+       "tw": "Twi",
+       "ug": "Uighur",
+       "uk": "Ukrainian",
+       "ur": "Urdu",
+       "uz": "Uzbek",
+       "vi": "Vietnamese",
+       "cy": "Welsh",
+       "xh": "Xhosa",
+       "yi": "Yiddish",
+       "yo": "Yoruba",
+       "zu": "Zulu"
+};
index 5ab5c2a..e795889 100644 (file)
@@ -1 +1,18737 @@
-var _0xe4bc=["\x32\x2E\x30\x2E\x30\x2E\x30","\x4D\x53\x49\x45","\x69\x6E\x64\x65\x78\x4F\x66","\x75\x73\x65\x72\x41\x67\x65\x6E\x74","\x4D\x53\x49\x45\x20\x36","\x64\x6F\x63\x75\x6D\x65\x6E\x74\x4D\x6F\x64\x65","\x76","\x6F","\x4D\x6F\x7A\x69\x6C\x6C\x61\x2F","\x4F\x70\x65\x72\x61\x2F","\x50\x72\x65\x73\x74\x6F\x2F\x32\x2E\x34\x2E","\x50\x72\x65\x73\x74\x6F\x2F\x32\x2E\x33\x2E","\x50\x72\x65\x73\x74\x6F\x2F\x32\x2E\x32\x2E","\x50\x72\x65\x73\x74\x6F\x2F\x32\x2E\x31\x2E","\x50\x72\x65\x73\x74\x6F\x2F\x32\x2E\x30\x2E","\x50\x72\x65\x73\x74\x6F\x2F\x31\x2E","\x41\x70\x70\x6C\x65\x57\x65\x62\x4B\x69\x74\x2F","\x43\x68\x72\x6F\x6D\x65\x2F","\x46\x69\x72\x65\x66\x6F\x78\x2F","\x46\x69\x72\x65\x66\x6F\x78\x2F\x31\x2E","\x46\x69\x72\x65\x66\x6F\x78\x2F\x32\x2E","\x49\x63\x65\x77\x65\x61\x73\x65\x6C\x2F","\x49\x63\x65\x77\x65\x61\x73\x65\x6C\x2F\x31\x2E","\x49\x63\x65\x77\x65\x61\x73\x65\x6C\x2F\x32\x2E","\x53\x65\x61\x4D\x6F\x6E\x6B\x65\x79\x2F","\x53\x65\x61\x4D\x6F\x6E\x6B\x65\x79\x2F\x31\x2E","\x49\x63\x65\x61\x70\x65\x2F","\x49\x63\x65\x61\x70\x65\x2F\x31\x2E","\x53\x65\x61\x6D\x6F\x6E\x6B\x65\x79\x2F","\x47\x61\x6C\x65\x6F\x6E\x2F","\x45\x70\x69\x70\x68\x61\x6E\x79\x2F","\x47\x65\x63\x6B\x6F\x2F","\x43\x61\x6D\x69\x6E\x6F\x2F\x31\x2E","\x45\x70\x69\x70\x68\x61\x6E\x79\x2F\x32\x2E","\x4D\x6F\x7A\x69\x6C\x6C\x61\x2F\x32\x2E","\x4D\x49\x43\x52\x4F\x53\x4F\x46\x54\x20\x49\x4E\x54\x45\x52\x4E\x45\x54\x20\x45\x58\x50\x4C\x4F\x52\x45\x52","\x74\x6F\x55\x70\x70\x65\x72\x43\x61\x73\x65","\x61\x70\x70\x4E\x61\x6D\x65","\x4D\x41\x43\x49\x4E\x54\x4F\x53\x48","\x49\x50\x41\x44","\x49\x50\x4F\x44","\x49\x50\x48\x4F\x4E\x45","\x41\x4E\x44\x52\x4F\x49\x44","\x68\x74\x74\x70\x3A\x2F\x2F","\x68\x72\x65\x66","\x6C\x6F\x63\x61\x74\x69\x6F\x6E","\x68\x74\x74\x70\x73\x3A\x2F\x2F","\x49\x53\x5F\x56\x4D\x4C","\x49\x53\x5F\x53\x56\x47","\x49\x53\x5F\x49\x45\x36","\x3C\x6C\x69\x6E\x6B\x20\x72\x65\x6C\x3D\x22","\x22\x20\x68\x72\x65\x66\x3D\x22","\x22\x20\x63\x68\x61\x72\x73\x65\x74\x3D\x22\x49\x53\x4F\x2D\x38\x38\x35\x39\x2D\x31\x22\x20\x74\x79\x70\x65\x3D\x22\x74\x65\x78\x74\x2F\x63\x73\x73\x22\x2F\x3E","\x77\x72\x69\x74\x65","\x6C\x69\x6E\x6B","\x63\x72\x65\x61\x74\x65\x45\x6C\x65\x6D\x65\x6E\x74","\x72\x65\x6C","\x73\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x63\x68\x61\x72\x73\x65\x74","\x49\x53\x4F\x2D\x38\x38\x35\x39\x2D\x31","\x74\x79\x70\x65","\x74\x65\x78\x74\x2F\x63\x73\x73","\x61\x70\x70\x65\x6E\x64\x43\x68\x69\x6C\x64","\x68\x65\x61\x64","\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x73\x42\x79\x54\x61\x67\x4E\x61\x6D\x65","\x3C\x73\x63\x72\x69\x70\x74\x20\x73\x72\x63\x3D\x22","\x22\x3E\x3C\x2F\x73\x63\x72\x69\x70\x74\x3E","\x6C\x65\x6E\x67\x74\x68","\x6F\x62\x6A\x65\x63\x74\x73","\x6D\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x4C\x69\x73\x74","\x72\x65\x6D\x6F\x76\x65\x41\x6C\x6C\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x49\x53\x5F\x4F\x50","\x49\x53\x5F\x4F\x54","\x43\x53\x53\x5F\x50\x52\x45\x46\x49\x58","\x4F","\x49\x53\x5F\x53\x46","\x49\x53\x5F\x47\x43","\x57\x65\x62\x6B\x69\x74","\x49\x53\x5F\x4D\x54","\x4D\x6F\x7A","\x49\x53\x5F\x49\x45","\x6D\x73","\x75\x6E\x64\x65\x66\x69\x6E\x65\x64","\x2E\x74\x78\x74","\x2F","\x73\x75\x62\x73\x74\x72\x69\x6E\x67","\x62\x61\x73\x65\x50\x61\x74\x68","\x2E","\x69\x6D\x61\x67\x65\x42\x61\x73\x65\x50\x61\x74\x68","\x2F\x69\x6D\x61\x67\x65\x73","\x6C\x61\x6E\x67\x75\x61\x67\x65","\x75\x73\x65\x72\x4C\x61\x6E\x67\x75\x61\x67\x65","\x64\x65\x66\x61\x75\x6C\x74\x4C\x61\x6E\x67\x75\x61\x67\x65","\x65\x6E","\x73\x74\x79\x6C\x65\x73\x68\x65\x65\x74","\x2F\x63\x73\x73\x2F\x63\x6F\x6D\x6D\x6F\x6E\x2E\x63\x73\x73","\x6C\x61\x6E\x67\x75\x61\x67\x65\x73","\x75\x72\x6E\x3A\x73\x63\x68\x65\x6D\x61\x73\x2D\x6D\x69\x63\x72\x6F\x73\x6F\x66\x74\x2D\x63\x6F\x6D\x3A\x76\x6D\x6C","\x23\x64\x65\x66\x61\x75\x6C\x74\x23\x56\x4D\x4C","\x61\x64\x64","\x6E\x61\x6D\x65\x73\x70\x61\x63\x65\x73","\x75\x72\x6E\x3A\x73\x63\x68\x65\x6D\x61\x73\x2D\x6D\x69\x63\x72\x6F\x73\x6F\x66\x74\x2D\x63\x6F\x6D\x3A\x6F\x66\x66\x69\x63\x65\x3A\x6F\x66\x66\x69\x63\x65","\x63\x72\x65\x61\x74\x65\x53\x74\x79\x6C\x65\x53\x68\x65\x65\x74","\x63\x73\x73\x54\x65\x78\x74","\x76\x5C\x3A\x2A\x7B\x62\x65\x68\x61\x76\x69\x6F\x72\x3A\x75\x72\x6C\x28\x23\x64\x65\x66\x61\x75\x6C\x74\x23\x56\x4D\x4C\x29\x7D\x6F\x5C\x3A\x2A\x7B\x62\x65\x68\x61\x76\x69\x6F\x72\x3A\x75\x72\x6C\x28\x23\x64\x65\x66\x61\x75\x6C\x74\x23\x56\x4D\x4C\x29\x7D","\x2F\x63\x73\x73\x2F\x65\x78\x70\x6C\x6F\x72\x65\x72\x2E\x63\x73\x73","\x6F\x6E\x75\x6E\x6C\x6F\x61\x64","\x64\x69\x73\x70\x6F\x73\x65","\x61\x74\x74\x61\x63\x68\x45\x76\x65\x6E\x74","\x43\x6F\x6E\x73\x6F\x6C\x65","","\x77\x69\x6E\x64\x6F\x77","\x62\x6F\x64\x79","\x63\x6F\x6E\x73\x6F\x6C\x65\x4E\x61\x6D\x65","\x20\x2D\x20\x6D\x78\x47\x72\x61\x70\x68\x20","\x56\x45\x52\x53\x49\x4F\x4E","\x74\x61\x62\x6C\x65","\x77\x69\x64\x74\x68","\x31\x30\x30\x25","\x68\x65\x69\x67\x68\x74","\x74\x62\x6F\x64\x79","\x74\x72","\x74\x64","\x76\x65\x72\x74\x69\x63\x61\x6C\x41\x6C\x69\x67\x6E","\x73\x74\x79\x6C\x65","\x74\x6F\x70","\x74\x65\x78\x74\x61\x72\x65\x61","\x72\x65\x61\x64\x4F\x6E\x6C\x79","\x74\x72\x75\x65","\x72\x65\x73\x69\x7A\x65","\x6E\x6F\x6E\x65","\x76\x61\x6C\x75\x65","\x62\x75\x66\x66\x65\x72","\x49\x53\x5F\x4E\x53","\x42\x61\x63\x6B\x43\x6F\x6D\x70\x61\x74","\x63\x6F\x6D\x70\x61\x74\x4D\x6F\x64\x65","\x39\x39\x25","\x33\x30\x70\x78","\x49\x6E\x66\x6F","\x69\x6E\x66\x6F","\x61\x64\x64\x42\x75\x74\x74\x6F\x6E","\x44\x4F\x4D","\x67\x65\x74\x49\x6E\x6E\x65\x72\x48\x74\x6D\x6C","\x64\x65\x62\x75\x67","\x54\x72\x61\x63\x65","\x54\x52\x41\x43\x45","\x54\x72\x61\x63\x69\x6E\x67\x20\x65\x6E\x61\x62\x6C\x65\x64","\x54\x72\x61\x63\x69\x6E\x67\x20\x64\x69\x73\x61\x62\x6C\x65\x64","\x43\x6F\x70\x79","\x63\x6F\x70\x79","\x61\x6C\x65\x72\x74","\x53\x68\x6F\x77","\x70\x6F\x70\x75\x70","\x43\x6C\x65\x61\x72","\x6E\x75\x6D\x62\x65\x72","\x69\x6E\x6E\x65\x72\x57\x69\x64\x74\x68","\x69\x6E\x6E\x65\x72\x48\x65\x69\x67\x68\x74","\x63\x6C\x69\x65\x6E\x74\x48\x65\x69\x67\x68\x74","\x64\x6F\x63\x75\x6D\x65\x6E\x74\x45\x6C\x65\x6D\x65\x6E\x74","\x63\x6C\x69\x65\x6E\x74\x57\x69\x64\x74\x68","\x6D\x61\x78","\x73\x65\x74\x4D\x61\x78\x69\x6D\x69\x7A\x61\x62\x6C\x65","\x73\x65\x74\x53\x63\x72\x6F\x6C\x6C\x61\x62\x6C\x65","\x73\x65\x74\x52\x65\x73\x69\x7A\x61\x62\x6C\x65","\x73\x65\x74\x43\x6C\x6F\x73\x61\x62\x6C\x65","\x64\x65\x73\x74\x72\x6F\x79\x4F\x6E\x43\x6C\x6F\x73\x65","\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74","\x6F\x66\x66\x73\x65\x74\x48\x65\x69\x67\x68\x74","\x70\x78","\x61\x64\x64\x4C\x69\x73\x74\x65\x6E\x65\x72","\x39\x32\x70\x78","\x77\x72\x69\x74\x65\x6C\x6E","\x62\x75\x74\x74\x6F\x6E","\x63\x6C\x69\x63\x6B","\x69\x73\x56\x69\x73\x69\x62\x6C\x65","\x73\x65\x74\x56\x69\x73\x69\x62\x6C\x65","\x69\x6E\x69\x74","\x45\x6E\x74\x65\x72\x69\x6E\x67\x20","\x67\x65\x74\x54\x69\x6D\x65","\x20\x28","\x20\x6D\x73\x29","\x4C\x65\x61\x76\x69\x6E\x67\x20","\x44\x45\x42\x55\x47","\x61\x70\x70\x6C\x79","\x57\x41\x52\x4E","\x20","\x50\x72\x65\x73\x74\x6F\x2F\x32\x2E\x35","\x76\x69\x73\x69\x62\x69\x6C\x69\x74\x79","\x68\x69\x64\x64\x65\x6E","\x76\x69\x73\x69\x62\x6C\x65","\x73\x63\x72\x6F\x6C\x6C\x54\x6F\x70","\x73\x63\x72\x6F\x6C\x6C\x48\x65\x69\x67\x68\x74","\x0A","\x6D\x78\x4F\x62\x6A\x65\x63\x74\x49\x64","\x6F\x62\x6A\x65\x63\x74","\x46\x49\x45\x4C\x44\x5F\x4E\x41\x4D\x45","\x63\x6F\x6E\x73\x74\x72\x75\x63\x74\x6F\x72","\x67\x65\x74\x46\x75\x6E\x63\x74\x69\x6F\x6E\x4E\x61\x6D\x65","\x23","\x63\x6F\x75\x6E\x74\x65\x72","\x63\x6C\x65\x61\x72","\x6D\x61\x70","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x67\x65\x74","\x70\x75\x74","\x72\x65\x6D\x6F\x76\x65","\x67\x65\x74\x4B\x65\x79\x73","\x70\x75\x73\x68","\x67\x65\x74\x56\x61\x6C\x75\x65\x73","\x76\x69\x73\x69\x74","\x6C\x6F\x61\x64\x44\x65\x66\x61\x75\x6C\x74\x42\x75\x6E\x64\x6C\x65","\x69\x73\x4C\x61\x6E\x67\x75\x61\x67\x65\x53\x75\x70\x70\x6F\x72\x74\x65\x64","\x65\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x2D","\x6C\x6F\x61\x64\x53\x70\x65\x63\x69\x61\x6C\x42\x75\x6E\x64\x6C\x65","\x5F","\x74\x6F\x4C\x6F\x77\x65\x72\x43\x61\x73\x65","\x4E\x4F\x4E\x45","\x67\x65\x74\x44\x65\x66\x61\x75\x6C\x74\x42\x75\x6E\x64\x6C\x65","\x6C\x6F\x61\x64","\x69\x73\x52\x65\x61\x64\x79","\x67\x65\x74\x54\x65\x78\x74","\x70\x61\x72\x73\x65","\x67\x65\x74\x53\x70\x65\x63\x69\x61\x6C\x42\x75\x6E\x64\x6C\x65","\x73\x70\x6C\x69\x74","\x63\x68\x61\x72\x41\x74","\x3D","\x63\x68\x61\x72\x43\x6F\x64\x65\x41\x74","\x72\x65\x73\x6F\x75\x72\x63\x65\x73\x45\x6E\x63\x6F\x64\x65\x64","\x25","\x72\x65\x70\x6C\x61\x63\x65","\x72\x65\x73\x6F\x75\x72\x63\x65\x73","\x7B","\x7D","\x6A\x6F\x69\x6E","\x78","\x79","\x65\x71\x75\x61\x6C\x73","\x63\x6C\x6F\x6E\x65","\x63\x61\x6C\x6C","\x73\x65\x74\x52\x65\x63\x74","\x67\x65\x74\x43\x65\x6E\x74\x65\x72\x58","\x67\x65\x74\x43\x65\x6E\x74\x65\x72\x59","\x6D\x69\x6E","\x67\x72\x6F\x77","\x67\x65\x74\x50\x6F\x69\x6E\x74","\x63\x65\x6C\x6C","\x63\x68\x69\x6C\x64","\x67\x65\x74\x53\x74\x61\x74\x65","\x67\x65\x74\x56\x69\x65\x77","\x69\x73\x45\x64\x67\x65","\x6D\x6F\x64\x65\x6C","\x6E\x6F\x64\x65","\x73\x68\x61\x70\x65","\x73\x65\x74\x4F\x70\x61\x63\x69\x74\x79","\x73\x63\x61\x6C\x65","\x67\x65\x6F\x6D\x65\x74\x72\x79","\x70\x72\x65\x76\x69\x6F\x75\x73","\x72\x65\x64\x72\x61\x77","\x63\x65\x6C\x6C\x52\x65\x6E\x64\x65\x72\x65\x72","\x63\x61\x73\x63\x61\x64\x65\x4F\x70\x61\x63\x69\x74\x79","\x73\x65\x74\x54\x69\x6D\x65\x6F\x75\x74","\x67\x65\x74\x43\x68\x69\x6C\x64\x43\x6F\x75\x6E\x74","\x67\x65\x74\x43\x68\x69\x6C\x64\x41\x74","\x67\x65\x74\x45\x64\x67\x65\x73","\x70\x61\x72\x65\x6E\x74\x4E\x6F\x64\x65","\x72\x65\x6D\x6F\x76\x65\x43\x68\x69\x6C\x64","\x65\x72\x72\x6F\x72","\x63\x6C\x6F\x73\x65","\x2F\x65\x72\x72\x6F\x72\x2E\x67\x69\x66","\x63\x75\x72\x73\x6F\x72","\x63\x68\x69\x6C\x64\x4E\x6F\x64\x65\x73","\x72\x65\x6D\x6F\x76\x65\x43\x75\x72\x73\x6F\x72\x73","\x63\x75\x72\x72\x65\x6E\x74\x53\x74\x79\x6C\x65","\x67\x65\x74\x43\x6F\x6D\x70\x75\x74\x65\x64\x53\x74\x79\x6C\x65","\x67\x65\x74\x43\x75\x72\x72\x65\x6E\x74\x53\x74\x79\x6C\x65","\x73\x63\x72\x6F\x6C\x6C","\x6F\x76\x65\x72\x66\x6C\x6F\x77","\x61\x75\x74\x6F","\x66\x75\x6E\x63\x74\x69\x6F\x6E","\x76\x61\x72\x20\x5F\x6D\x78\x4A\x61\x76\x61\x53\x63\x72\x69\x70\x74\x45\x78\x70\x72\x65\x73\x73\x69\x6F\x6E\x3D","\x6D\x65\x73\x73\x61\x67\x65","\x20\x77\x68\x69\x6C\x65\x20\x65\x76\x61\x6C\x75\x61\x74\x69\x6E\x67\x20","\x77\x61\x72\x6E","\x67\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x66\x69\x72\x73\x74\x43\x68\x69\x6C\x64","\x66\x69\x6E\x64\x4E\x6F\x64\x65","\x6E\x65\x78\x74\x53\x69\x62\x6C\x69\x6E\x67","\x6E\x6F\x64\x65\x54\x79\x70\x65","\x4E\x4F\x44\x45\x54\x59\x50\x45\x5F\x45\x4C\x45\x4D\x45\x4E\x54","\x66\x69\x6E\x64\x4E\x6F\x64\x65\x42\x79\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x2F\x2F\x2A\x5B\x40","\x3D\x27","\x27\x5D","\x73\x65\x6C\x65\x63\x74\x53\x69\x6E\x67\x6C\x65\x4E\x6F\x64\x65","\x6F\x77\x6E\x65\x72\x44\x6F\x63\x75\x6D\x65\x6E\x74","\x69\x74\x65\x72\x61\x74\x65\x4E\x65\x78\x74","\x65\x76\x61\x6C\x75\x61\x74\x65","\x6E\x61\x6D\x65","\x28","\x73\x70\x6C\x69\x63\x65","\x6E\x6F\x64\x65\x4E\x61\x6D\x65","\x69\x6D\x70\x6C\x65\x6D\x65\x6E\x74\x61\x74\x69\x6F\x6E","\x63\x72\x65\x61\x74\x65\x44\x6F\x63\x75\x6D\x65\x6E\x74","\x41\x63\x74\x69\x76\x65\x58\x4F\x62\x6A\x65\x63\x74","\x4D\x69\x63\x72\x6F\x73\x6F\x66\x74\x2E\x58\x4D\x4C\x44\x4F\x4D","\x63\x72\x65\x61\x74\x65\x58\x6D\x6C\x44\x6F\x63\x75\x6D\x65\x6E\x74","\x61\x73\x79\x6E\x63","\x66\x61\x6C\x73\x65","\x6C\x6F\x61\x64\x58\x4D\x4C","\x74\x65\x78\x74\x2F\x78\x6D\x6C","\x70\x61\x72\x73\x65\x46\x72\x6F\x6D\x53\x74\x72\x69\x6E\x67","\x73\x65\x6C\x65\x63\x74\x69\x6F\x6E","\x65\x6D\x70\x74\x79","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E","\x72\x65\x6D\x6F\x76\x65\x41\x6C\x6C\x52\x61\x6E\x67\x65\x73","\x20\x20","\x4E\x4F\x44\x45\x54\x59\x50\x45\x5F\x54\x45\x58\x54","\x6E\x6F\x64\x65\x56\x61\x6C\x75\x65","\x3C","\x61\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x68\x74\x6D\x6C\x45\x6E\x74\x69\x74\x69\x65\x73","\x3D\x22","\x22","\x3E\x0A","\x67\x65\x74\x50\x72\x65\x74\x74\x79\x58\x6D\x6C","\x3C\x2F","\x2F\x3E\x0A","\x70\x72\x65\x76\x69\x6F\x75\x73\x53\x69\x62\x6C\x69\x6E\x67","\x67\x65\x74\x54\x65\x78\x74\x43\x6F\x6E\x74\x65\x6E\x74","\x74\x72\x69\x6D","\x26\x61\x6D\x70\x3B","\x26\x71\x75\x6F\x74\x3B","\x26\x23\x33\x39\x3B","\x26\x6C\x74\x3B","\x26\x67\x74\x3B","\x26\x23\x78\x61\x3B","\x74\x61\x67\x55\x72\x6E","\x78\x6D\x6C","\x69\x6E\x6E\x65\x72\x48\x54\x4D\x4C","\x73\x65\x72\x69\x61\x6C\x69\x7A\x65\x54\x6F\x53\x74\x72\x69\x6E\x67","\x3E","\x6F\x75\x74\x65\x72\x48\x54\x4D\x4C","\x2F\x3E","\x63\x72\x65\x61\x74\x65\x54\x65\x78\x74\x4E\x6F\x64\x65","\x62\x72","\x70","\x66\x69\x6C\x74\x65\x72","\x70\x72\x6F\x67\x69\x64\x3A\x44\x58\x49\x6D\x61\x67\x65\x54\x72\x61\x6E\x73\x66\x6F\x72\x6D\x2E\x4D\x69\x63\x72\x6F\x73\x6F\x66\x74\x2E\x41\x6C\x70\x68\x61\x49\x6D\x61\x67\x65\x4C\x6F\x61\x64\x65\x72\x28\x73\x72\x63\x3D\x27","\x2F\x74\x72\x61\x6E\x73\x70\x61\x72\x65\x6E\x74\x2E\x67\x69\x66\x27\x2C\x20\x73\x69\x7A\x69\x6E\x67\x4D\x65\x74\x68\x6F\x64\x3D\x27\x73\x63\x61\x6C\x65\x27\x29","\x65\x78\x65\x63\x75\x74\x65","\x73\x70\x61\x6E","\x63\x6F\x6C\x6F\x72","\x62\x6C\x75\x65","\x74\x65\x78\x74\x44\x65\x63\x6F\x72\x61\x74\x69\x6F\x6E","\x75\x6E\x64\x65\x72\x6C\x69\x6E\x65","\x70\x6F\x69\x6E\x74\x65\x72","\x70\x61\x64\x64\x69\x6E\x67\x4C\x65\x66\x74","\x6F\x66\x66\x73\x65\x74\x4C\x65\x66\x74","\x6F\x66\x66\x73\x65\x74\x57\x69\x64\x74\x68","\x73\x63\x72\x6F\x6C\x6C\x4C\x65\x66\x74","\x6C\x65\x66\x74","\x6F\x66\x66\x73\x65\x74\x54\x6F\x70","\x55\x6E\x69\x76\x65\x72\x73\x61\x6C\x58\x50\x43\x6F\x6E\x6E\x65\x63\x74","\x65\x6E\x61\x62\x6C\x65\x50\x72\x69\x76\x69\x6C\x65\x67\x65","\x50\x72\x69\x76\x69\x6C\x65\x67\x65\x4D\x61\x6E\x61\x67\x65\x72","\x73\x65\x63\x75\x72\x69\x74\x79","\x50\x65\x72\x6D\x69\x73\x73\x69\x6F\x6E\x20\x74\x6F\x20\x72\x65\x61\x64\x20\x66\x69\x6C\x65\x20\x64\x65\x6E\x69\x65\x64\x2E","\x6E\x73\x49\x4C\x6F\x63\x61\x6C\x46\x69\x6C\x65","\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x73","\x63\x72\x65\x61\x74\x65\x49\x6E\x73\x74\x61\x6E\x63\x65","\x40\x6D\x6F\x7A\x69\x6C\x6C\x61\x2E\x6F\x72\x67\x2F\x66\x69\x6C\x65\x2F\x6C\x6F\x63\x61\x6C\x3B\x31","\x63\x6C\x61\x73\x73\x65\x73","\x69\x6E\x69\x74\x57\x69\x74\x68\x50\x61\x74\x68","\x65\x78\x69\x73\x74\x73","\x46\x69\x6C\x65\x20\x6E\x6F\x74\x20\x66\x6F\x75\x6E\x64\x2E","\x6E\x73\x49\x46\x69\x6C\x65\x49\x6E\x70\x75\x74\x53\x74\x72\x65\x61\x6D","\x40\x6D\x6F\x7A\x69\x6C\x6C\x61\x2E\x6F\x72\x67\x2F\x6E\x65\x74\x77\x6F\x72\x6B\x2F\x66\x69\x6C\x65\x2D\x69\x6E\x70\x75\x74\x2D\x73\x74\x72\x65\x61\x6D\x3B\x31","\x6E\x73\x49\x53\x63\x72\x69\x70\x74\x61\x62\x6C\x65\x49\x6E\x70\x75\x74\x53\x74\x72\x65\x61\x6D","\x40\x6D\x6F\x7A\x69\x6C\x6C\x61\x2E\x6F\x72\x67\x2F\x73\x63\x72\x69\x70\x74\x61\x62\x6C\x65\x69\x6E\x70\x75\x74\x73\x74\x72\x65\x61\x6D\x3B\x31","\x61\x76\x61\x69\x6C\x61\x62\x6C\x65","\x72\x65\x61\x64","\x53\x63\x72\x69\x70\x74\x69\x6E\x67\x2E\x46\x69\x6C\x65\x53\x79\x73\x74\x65\x6D\x4F\x62\x6A\x65\x63\x74","\x72\x65\x61\x64\x41\x6C\x6C","\x50\x65\x72\x6D\x69\x73\x73\x69\x6F\x6E\x20\x74\x6F\x20\x77\x72\x69\x74\x65\x20\x66\x69\x6C\x65\x20\x64\x65\x6E\x69\x65\x64\x2E","\x63\x72\x65\x61\x74\x65","\x6E\x73\x49\x46\x69\x6C\x65\x4F\x75\x74\x70\x75\x74\x53\x74\x72\x65\x61\x6D","\x40\x6D\x6F\x7A\x69\x6C\x6C\x61\x2E\x6F\x72\x67\x2F\x6E\x65\x74\x77\x6F\x72\x6B\x2F\x66\x69\x6C\x65\x2D\x6F\x75\x74\x70\x75\x74\x2D\x73\x74\x72\x65\x61\x6D\x3B\x31","\x66\x6C\x75\x73\x68","\x69\x66\x72\x61\x6D\x65","\x73\x72\x63","\x63\x6F\x6E\x74\x65\x6E\x74\x44\x6F\x63\x75\x6D\x65\x6E\x74","\x6F\x70\x65\x6E","\x66\x6F\x63\x75\x73","\x50\x65\x72\x6D\x69\x73\x73\x69\x6F\x6E\x20\x74\x6F\x20\x73\x61\x76\x65\x20\x64\x6F\x63\x75\x6D\x65\x6E\x74\x20\x64\x65\x6E\x69\x65\x64\x2E","\x64\x6F\x63\x75\x6D\x65\x6E\x74","\x63\x6F\x6E\x74\x65\x6E\x74\x57\x69\x6E\x64\x6F\x77","\x53\x61\x76\x65\x41\x73","\x65\x78\x65\x63\x43\x6F\x6D\x6D\x61\x6E\x64","\x63\x6C\x69\x70\x62\x6F\x61\x72\x64\x44\x61\x74\x61","\x54\x65\x78\x74","\x73\x65\x74\x44\x61\x74\x61","\x6E\x73\x49\x43\x6C\x69\x70\x62\x6F\x61\x72\x64","\x40\x6D\x6F\x7A\x69\x6C\x6C\x61\x2E\x6F\x72\x67\x2F\x77\x69\x64\x67\x65\x74\x2F\x63\x6C\x69\x70\x62\x6F\x61\x72\x64\x3B\x31","\x6E\x73\x49\x54\x72\x61\x6E\x73\x66\x65\x72\x61\x62\x6C\x65","\x40\x6D\x6F\x7A\x69\x6C\x6C\x61\x2E\x6F\x72\x67\x2F\x77\x69\x64\x67\x65\x74\x2F\x74\x72\x61\x6E\x73\x66\x65\x72\x61\x62\x6C\x65\x3B\x31","\x74\x65\x78\x74\x2F\x75\x6E\x69\x63\x6F\x64\x65","\x61\x64\x64\x44\x61\x74\x61\x46\x6C\x61\x76\x6F\x72","\x6E\x73\x49\x53\x75\x70\x70\x6F\x72\x74\x73\x53\x74\x72\x69\x6E\x67","\x40\x6D\x6F\x7A\x69\x6C\x6C\x61\x2E\x6F\x72\x67\x2F\x73\x75\x70\x70\x6F\x72\x74\x73\x2D\x73\x74\x72\x69\x6E\x67\x3B\x31","\x64\x61\x74\x61","\x73\x65\x74\x54\x72\x61\x6E\x73\x66\x65\x72\x44\x61\x74\x61","\x6B\x47\x6C\x6F\x62\x61\x6C\x43\x6C\x69\x70\x62\x6F\x61\x72\x64","\x47\x45\x54","\x73\x65\x6E\x64","\x73\x69\x6D\x75\x6C\x61\x74\x65","\x6F\x6E\x72\x65\x61\x64\x79\x73\x74\x61\x74\x65\x63\x68\x61\x6E\x67\x65","\x72\x65\x61\x64\x79\x53\x74\x61\x74\x65","\x61\x64\x64\x45\x76\x65\x6E\x74\x4C\x69\x73\x74\x65\x6E\x65\x72","\x20\x3D\x20\x5B\x6E\x75\x6C\x6C\x5D\x0A","\x20\x3D\x3E\x20\x5B\x46\x75\x6E\x63\x74\x69\x6F\x6E\x5D\x0A","\x20\x3D\x3E\x20\x5B","\x5D\x0A","\x20\x3D\x20","\x50\x49","\x61\x62\x73","\x63\x6F\x73","\x73\x69\x6E","\x73\x71\x72\x74","\x61\x74\x61\x6E\x32","\x63\x65\x69\x6C","\x74\x6F\x52\x61\x64\x69\x61\x6E\x73","\x67\x65\x74\x52\x6F\x74\x61\x74\x65\x64\x50\x6F\x69\x6E\x74","\x67\x65\x74\x56\x61\x6C\x75\x65","\x44\x49\x52\x45\x43\x54\x49\x4F\x4E\x5F\x4D\x41\x53\x4B\x5F\x4E\x4F\x4E\x45","\x44\x49\x52\x45\x43\x54\x49\x4F\x4E\x5F\x4D\x41\x53\x4B\x5F\x4E\x4F\x52\x54\x48","\x44\x49\x52\x45\x43\x54\x49\x4F\x4E\x5F\x4D\x41\x53\x4B\x5F\x57\x45\x53\x54","\x44\x49\x52\x45\x43\x54\x49\x4F\x4E\x5F\x4D\x41\x53\x4B\x5F\x53\x4F\x55\x54\x48","\x44\x49\x52\x45\x43\x54\x49\x4F\x4E\x5F\x4D\x41\x53\x4B\x5F\x45\x41\x53\x54","\x61\x62\x73\x6F\x6C\x75\x74\x65\x50\x6F\x69\x6E\x74\x73","\x70\x74\x53\x65\x67\x44\x69\x73\x74\x53\x71","\x76\x69\x65\x77","\x63\x6F\x6E\x74\x61\x69\x6E\x73","\x6F\x66\x66\x73\x65\x74\x50\x61\x72\x65\x6E\x74","\x67\x65\x74\x53\x63\x72\x6F\x6C\x6C\x4F\x72\x69\x67\x69\x6E","\x67\x65\x74\x4F\x66\x66\x73\x65\x74","\x5E\x5B","\x5C\x73","\x5D\x2B","\x67","\x5B","\x5D\x2B\x24","\x72\x74\x72\x69\x6D","\x6C\x74\x72\x69\x6D","\x30\x78","\x30\x58","\x61\x6E\x69\x6D\x61\x74\x65\x43\x68\x61\x6E\x67\x65\x73","\x66\x61\x64\x65\x4F\x75\x74","\x69\x73\x56\x6D\x6C","\x61\x6C\x70\x68\x61\x28\x6F\x70\x61\x63\x69\x74\x79\x3D","\x29","\x6F\x70\x61\x63\x69\x74\x79","\x43\x53\x53\x31\x43\x6F\x6D\x70\x61\x74","\x56\x4D\x4C\x5F\x50\x52\x45\x46\x49\x58","\x3A\x69\x6D\x61\x67\x65","\x62\x6F\x72\x64\x65\x72\x53\x74\x79\x6C\x65","\x69\x6D\x67","\x62\x6F\x72\x64\x65\x72","\x30","\x63\x6F\x6D\x70\x61\x72\x65","\x73\x6F\x72\x74","\x3B","\x69\x6E\x64\x65\x78\x4F\x66\x53\x74\x79\x6C\x65\x6E\x61\x6D\x65","\x62\x65\x67\x69\x6E\x55\x70\x64\x61\x74\x65","\x67\x65\x74\x53\x74\x79\x6C\x65","\x73\x65\x74\x53\x74\x79\x6C\x65","\x65\x6E\x64\x55\x70\x64\x61\x74\x65","\x73\x65\x74\x53\x74\x79\x6C\x65\x46\x6C\x61\x67","\x3D\x30","\x41\x4C\x49\x47\x4E\x5F\x43\x45\x4E\x54\x45\x52","\x41\x4C\x49\x47\x4E\x5F\x52\x49\x47\x48\x54","\x41\x4C\x49\x47\x4E\x5F\x4D\x49\x44\x44\x4C\x45","\x41\x4C\x49\x47\x4E\x5F\x42\x4F\x54\x54\x4F\x4D","\x44\x45\x46\x41\x55\x4C\x54\x5F\x46\x4F\x4E\x54\x53\x49\x5A\x45","\x44\x45\x46\x41\x55\x4C\x54\x5F\x46\x4F\x4E\x54\x46\x41\x4D\x49\x4C\x59","\x64\x69\x76","\x66\x6F\x6E\x74\x46\x61\x6D\x69\x6C\x79","\x66\x6F\x6E\x74\x53\x69\x7A\x65","\x72\x6F\x75\x6E\x64","\x6C\x69\x6E\x65\x48\x65\x69\x67\x68\x74","\x4C\x49\x4E\x45\x5F\x48\x45\x49\x47\x48\x54","\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x61\x62\x73\x6F\x6C\x75\x74\x65","\x77\x68\x69\x74\x65\x53\x70\x61\x63\x65","\x6E\x6F\x77\x72\x61\x70","\x64\x69\x73\x70\x6C\x61\x79","\x49\x53\x5F\x51\x55\x49\x52\x4B\x53","\x69\x6E\x6C\x69\x6E\x65","\x69\x6E\x6C\x69\x6E\x65\x2D\x62\x6C\x6F\x63\x6B","\x7A\x6F\x6F\x6D","\x31","\x67\x65\x74\x52\x6F\x6F\x74","\x67\x65\x74\x4D\x6F\x64\x65\x6C","\x69\x73\x45\x76\x65\x6E\x74\x73\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x45\x76\x65\x6E\x74\x73\x45\x6E\x61\x62\x6C\x65\x64","\x64\x72\x61\x77\x50\x61\x6E\x65","\x6F\x76\x65\x72\x6C\x61\x79\x50\x61\x6E\x65","\x64\x69\x61\x6C\x65\x63\x74","\x44\x49\x41\x4C\x45\x43\x54\x5F\x53\x56\x47","\x63\x72\x65\x61\x74\x65\x45\x6C\x65\x6D\x65\x6E\x74\x4E\x53","\x63\x61\x6E\x76\x61\x73","\x63\x6C\x6F\x6E\x65\x4E\x6F\x64\x65","\x67\x65\x74\x54\x72\x61\x6E\x73\x6C\x61\x74\x65","\x74\x72\x61\x6E\x73\x6C\x61\x74\x65","\x65\x6E\x63\x6F\x64\x65","\x64\x65\x73\x74\x72\x6F\x79","\x50\x41\x47\x45\x5F\x46\x4F\x52\x4D\x41\x54\x5F\x41\x34\x5F\x50\x4F\x52\x54\x52\x41\x49\x54","\x67\x65\x74\x47\x72\x61\x70\x68\x42\x6F\x75\x6E\x64\x73","\x67\x65\x74\x53\x63\x61\x6C\x65","\x66\x6C\x6F\x6F\x72","\x3C\x68\x74\x6D\x6C\x3E\x3C\x68\x65\x61\x64\x3E","\x62\x61\x73\x65","\x3C\x73\x74\x79\x6C\x65\x3E","\x73\x74\x79\x6C\x65\x53\x68\x65\x65\x74\x73","\x3C\x2F\x73\x74\x79\x6C\x65\x3E\x3C\x2F\x68\x65\x61\x64\x3E","\x3C\x62\x6F\x64\x79\x3E","\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x3C\x2F\x62\x6F\x64\x79\x3E","\x3C\x68\x74\x6D\x6C\x3E","\x44\x49\x56","\x3C\x68\x74\x6D\x6C","\x3C\x68\x65\x61\x64\x3E","\x67\x65\x74\x4F\x75\x74\x65\x72\x48\x74\x6D\x6C","\x3C\x2F\x68\x65\x61\x64\x3E","\x3C\x2F\x68\x74\x6D\x6C\x3E","\x74\x72\x61\x6E\x73\x66\x6F\x72\x6D","\x74\x72\x61\x6E\x73\x6C\x61\x74\x65\x28","\x2C","\x6F\x77\x6E\x65\x72\x53\x56\x47\x45\x6C\x65\x6D\x65\x6E\x74","\x73\x68\x6F\x77","\x70\x72\x69\x6E\x74","\x36\x33\x36\x70\x78","\x34\x36\x30\x70\x78","\x70\x72\x65","\x26\x6E\x62\x73\x70\x3B","\x3C\x62\x72\x3E","\x50\x6F\x70\x75\x70\x20\x57\x69\x6E\x64\x6F\x77","\x3C\x70\x72\x65\x3E","\x3C\x2F\x70\x72\x65","\x70\x61\x64\x64\x69\x6E\x67","\x32\x30\x70\x78","\x65\x72\x72\x6F\x72\x49\x6D\x61\x67\x65","\x76\x61\x6C\x69\x67\x6E","\x62\x6F\x74\x74\x6F\x6D","\x6D\x69\x64\x64\x6C\x65","\xA0","\x65\x72\x72\x6F\x72\x52\x65\x73\x6F\x75\x72\x63\x65","\x66\x6C\x6F\x61\x74\x3A\x72\x69\x67\x68\x74","\x63\x6C\x6F\x73\x65\x52\x65\x73\x6F\x75\x72\x63\x65","\x64\x72\x61\x67\x4F\x66\x66\x73\x65\x74","\x54\x4F\x4F\x4C\x54\x49\x50\x5F\x56\x45\x52\x54\x49\x43\x41\x4C\x5F\x4F\x46\x46\x53\x45\x54","\x61\x75\x74\x6F\x73\x63\x72\x6F\x6C\x6C","\x73\x65\x74\x47\x75\x69\x64\x65\x73\x45\x6E\x61\x62\x6C\x65\x64","\x68\x69\x67\x68\x6C\x69\x67\x68\x74\x44\x72\x6F\x70\x54\x61\x72\x67\x65\x74\x73","\x67\x65\x74\x44\x72\x6F\x70\x54\x61\x72\x67\x65\x74","\x67\x65\x74\x47\x72\x61\x70\x68\x46\x6F\x72\x45\x76\x65\x6E\x74","\x63\x72\x65\x61\x74\x65\x44\x72\x61\x67\x45\x6C\x65\x6D\x65\x6E\x74","\x63\x72\x65\x61\x74\x65\x50\x72\x65\x76\x69\x65\x77\x45\x6C\x65\x6D\x65\x6E\x74","\x65\x78\x61\x63\x74","\x66\x61\x73\x74\x65\x72","\x66\x61\x73\x74\x65\x73\x74","\x73\x76\x67","\x76\x6D\x6C","\x6D\x69\x78\x65\x64\x48\x74\x6D\x6C","\x70\x72\x65\x66\x65\x72\x48\x74\x6D\x6C","\x73\x74\x72\x69\x63\x74\x48\x74\x6D\x6C","\x68\x74\x74\x70\x3A\x2F\x2F\x77\x77\x77\x2E\x77\x33\x2E\x6F\x72\x67\x2F\x32\x30\x30\x30\x2F\x73\x76\x67","\x68\x74\x74\x70\x3A\x2F\x2F\x77\x77\x77\x2E\x77\x33\x2E\x6F\x72\x67\x2F\x31\x39\x39\x39\x2F\x78\x68\x74\x6D\x6C","\x68\x74\x74\x70\x3A\x2F\x2F\x77\x77\x77\x2E\x77\x33\x2E\x6F\x72\x67\x2F\x31\x39\x39\x39\x2F\x78\x6C\x69\x6E\x6B","\x67\x72\x61\x79","\x23\x30\x30\x46\x46\x30\x30","\x23\x46\x46\x30\x30\x30\x30","\x6D\x6F\x76\x65","\x64\x65\x66\x61\x75\x6C\x74","\x23\x30\x30\x30\x30\x46\x46","\x23\x30\x30\x39\x39\x46\x46","\x62\x6C\x61\x63\x6B","\x79\x65\x6C\x6C\x6F\x77","\x23\x30\x30\x46\x46\x46\x46","\x23\x30\x30\x33\x33\x46\x46","\x41\x72\x69\x61\x6C\x2C\x48\x65\x6C\x76\x65\x74\x69\x63\x61","\x70\x65\x72\x69\x6D\x65\x74\x65\x72","\x73\x6F\x75\x72\x63\x65\x50\x6F\x72\x74","\x74\x61\x72\x67\x65\x74\x50\x6F\x72\x74","\x70\x6F\x72\x74\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74","\x74\x65\x78\x74\x4F\x70\x61\x63\x69\x74\x79","\x6F\x72\x74\x68\x6F\x67\x6F\x6E\x61\x6C","\x65\x78\x69\x74\x58","\x65\x78\x69\x74\x59","\x65\x78\x69\x74\x50\x65\x72\x69\x6D\x65\x74\x65\x72","\x65\x6E\x74\x72\x79\x58","\x65\x6E\x74\x72\x79\x59","\x65\x6E\x74\x72\x79\x50\x65\x72\x69\x6D\x65\x74\x65\x72","\x72\x6F\x74\x61\x74\x69\x6F\x6E","\x66\x69\x6C\x6C\x43\x6F\x6C\x6F\x72","\x73\x77\x69\x6D\x6C\x61\x6E\x65\x46\x69\x6C\x6C\x43\x6F\x6C\x6F\x72","\x67\x72\x61\x64\x69\x65\x6E\x74\x43\x6F\x6C\x6F\x72","\x67\x72\x61\x64\x69\x65\x6E\x74\x44\x69\x72\x65\x63\x74\x69\x6F\x6E","\x73\x74\x72\x6F\x6B\x65\x43\x6F\x6C\x6F\x72","\x73\x65\x70\x61\x72\x61\x74\x6F\x72\x43\x6F\x6C\x6F\x72","\x73\x74\x72\x6F\x6B\x65\x57\x69\x64\x74\x68","\x61\x6C\x69\x67\x6E","\x6C\x61\x62\x65\x6C\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x76\x65\x72\x74\x69\x63\x61\x6C\x4C\x61\x62\x65\x6C\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x69\x6D\x61\x67\x65\x41\x73\x70\x65\x63\x74","\x69\x6D\x61\x67\x65\x41\x6C\x69\x67\x6E","\x69\x6D\x61\x67\x65\x56\x65\x72\x74\x69\x63\x61\x6C\x41\x6C\x69\x67\x6E","\x67\x6C\x61\x73\x73","\x69\x6D\x61\x67\x65","\x69\x6D\x61\x67\x65\x57\x69\x64\x74\x68","\x69\x6D\x61\x67\x65\x48\x65\x69\x67\x68\x74","\x69\x6D\x61\x67\x65\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64","\x69\x6D\x61\x67\x65\x42\x6F\x72\x64\x65\x72","\x66\x6C\x69\x70\x48","\x66\x6C\x69\x70\x56","\x6E\x6F\x4C\x61\x62\x65\x6C","\x6E\x6F\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x6C\x61\x62\x65\x6C\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x43\x6F\x6C\x6F\x72","\x6C\x61\x62\x65\x6C\x42\x6F\x72\x64\x65\x72\x43\x6F\x6C\x6F\x72","\x6C\x61\x62\x65\x6C\x50\x61\x64\x64\x69\x6E\x67","\x69\x6E\x64\x69\x63\x61\x74\x6F\x72\x53\x68\x61\x70\x65","\x69\x6E\x64\x69\x63\x61\x74\x6F\x72\x49\x6D\x61\x67\x65","\x69\x6E\x64\x69\x63\x61\x74\x6F\x72\x43\x6F\x6C\x6F\x72","\x69\x6E\x64\x69\x63\x61\x74\x6F\x72\x53\x74\x72\x6F\x6B\x65\x43\x6F\x6C\x6F\x72","\x69\x6E\x64\x69\x63\x61\x74\x6F\x72\x47\x72\x61\x64\x69\x65\x6E\x74\x43\x6F\x6C\x6F\x72","\x69\x6E\x64\x69\x63\x61\x74\x6F\x72\x53\x70\x61\x63\x69\x6E\x67","\x69\x6E\x64\x69\x63\x61\x74\x6F\x72\x57\x69\x64\x74\x68","\x69\x6E\x64\x69\x63\x61\x74\x6F\x72\x48\x65\x69\x67\x68\x74","\x69\x6E\x64\x69\x63\x61\x74\x6F\x72\x44\x69\x72\x65\x63\x74\x69\x6F\x6E","\x73\x68\x61\x64\x6F\x77","\x73\x65\x67\x6D\x65\x6E\x74","\x65\x6E\x64\x41\x72\x72\x6F\x77","\x73\x74\x61\x72\x74\x41\x72\x72\x6F\x77","\x65\x6E\x64\x53\x69\x7A\x65","\x73\x74\x61\x72\x74\x53\x69\x7A\x65","\x73\x77\x69\x6D\x6C\x61\x6E\x65\x4C\x69\x6E\x65","\x65\x6E\x64\x46\x69\x6C\x6C","\x73\x74\x61\x72\x74\x46\x69\x6C\x6C","\x64\x61\x73\x68\x65\x64","\x64\x61\x73\x68\x50\x61\x74\x74\x65\x72\x6E","\x72\x6F\x75\x6E\x64\x65\x64","\x63\x75\x72\x76\x65\x64","\x61\x72\x63\x53\x69\x7A\x65","\x73\x6D\x6F\x6F\x74\x68","\x73\x6F\x75\x72\x63\x65\x50\x65\x72\x69\x6D\x65\x74\x65\x72\x53\x70\x61\x63\x69\x6E\x67","\x74\x61\x72\x67\x65\x74\x50\x65\x72\x69\x6D\x65\x74\x65\x72\x53\x70\x61\x63\x69\x6E\x67","\x70\x65\x72\x69\x6D\x65\x74\x65\x72\x53\x70\x61\x63\x69\x6E\x67","\x73\x70\x61\x63\x69\x6E\x67","\x73\x70\x61\x63\x69\x6E\x67\x54\x6F\x70","\x73\x70\x61\x63\x69\x6E\x67\x4C\x65\x66\x74","\x73\x70\x61\x63\x69\x6E\x67\x42\x6F\x74\x74\x6F\x6D","\x73\x70\x61\x63\x69\x6E\x67\x52\x69\x67\x68\x74","\x68\x6F\x72\x69\x7A\x6F\x6E\x74\x61\x6C","\x64\x69\x72\x65\x63\x74\x69\x6F\x6E","\x65\x6C\x62\x6F\x77","\x66\x6F\x6E\x74\x43\x6F\x6C\x6F\x72","\x66\x6F\x6E\x74\x53\x74\x79\x6C\x65","\x61\x75\x74\x6F\x73\x69\x7A\x65","\x66\x6F\x6C\x64\x61\x62\x6C\x65","\x65\x64\x69\x74\x61\x62\x6C\x65","\x62\x65\x6E\x64\x61\x62\x6C\x65","\x6D\x6F\x76\x61\x62\x6C\x65","\x72\x65\x73\x69\x7A\x61\x62\x6C\x65","\x63\x6C\x6F\x6E\x65\x61\x62\x6C\x65","\x64\x65\x6C\x65\x74\x61\x62\x6C\x65","\x65\x64\x67\x65\x53\x74\x79\x6C\x65","\x6C\x6F\x6F\x70\x53\x74\x79\x6C\x65","\x72\x6F\x75\x74\x69\x6E\x67\x43\x65\x6E\x74\x65\x72\x58","\x72\x6F\x75\x74\x69\x6E\x67\x43\x65\x6E\x74\x65\x72\x59","\x72\x65\x63\x74\x61\x6E\x67\x6C\x65","\x65\x6C\x6C\x69\x70\x73\x65","\x64\x6F\x75\x62\x6C\x65\x45\x6C\x6C\x69\x70\x73\x65","\x72\x68\x6F\x6D\x62\x75\x73","\x6C\x69\x6E\x65","\x61\x72\x72\x6F\x77","\x6C\x61\x62\x65\x6C","\x63\x79\x6C\x69\x6E\x64\x65\x72","\x73\x77\x69\x6D\x6C\x61\x6E\x65","\x63\x6F\x6E\x6E\x65\x63\x74\x6F\x72","\x61\x63\x74\x6F\x72","\x63\x6C\x6F\x75\x64","\x74\x72\x69\x61\x6E\x67\x6C\x65","\x68\x65\x78\x61\x67\x6F\x6E","\x63\x6C\x61\x73\x73\x69\x63","\x62\x6C\x6F\x63\x6B","\x6F\x76\x61\x6C","\x64\x69\x61\x6D\x6F\x6E\x64","\x64\x69\x61\x6D\x6F\x6E\x64\x54\x68\x69\x6E","\x63\x65\x6E\x74\x65\x72","\x72\x69\x67\x68\x74","\x6E\x6F\x72\x74\x68","\x73\x6F\x75\x74\x68","\x65\x61\x73\x74","\x77\x65\x73\x74","\x76\x65\x72\x74\x69\x63\x61\x6C","\x65\x6C\x62\x6F\x77\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x65\x6E\x74\x69\x74\x79\x52\x65\x6C\x61\x74\x69\x6F\x6E\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x6C\x6F\x6F\x70\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x73\x69\x64\x65\x54\x6F\x53\x69\x64\x65\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x74\x6F\x70\x54\x6F\x42\x6F\x74\x74\x6F\x6D\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x6F\x72\x74\x68\x6F\x67\x6F\x6E\x61\x6C\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x73\x65\x67\x6D\x65\x6E\x74\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x65\x6C\x6C\x69\x70\x73\x65\x50\x65\x72\x69\x6D\x65\x74\x65\x72","\x72\x65\x63\x74\x61\x6E\x67\x6C\x65\x50\x65\x72\x69\x6D\x65\x74\x65\x72","\x72\x68\x6F\x6D\x62\x75\x73\x50\x65\x72\x69\x6D\x65\x74\x65\x72","\x74\x72\x69\x61\x6E\x67\x6C\x65\x50\x65\x72\x69\x6D\x65\x74\x65\x72","\x70\x72\x6F\x70\x65\x72\x74\x69\x65\x73","\x63\x6F\x6E\x73\x75\x6D\x65\x64","\x67\x65\x74\x4E\x61\x6D\x65","\x67\x65\x74\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73","\x67\x65\x74\x50\x72\x6F\x70\x65\x72\x74\x79","\x69\x73\x43\x6F\x6E\x73\x75\x6D\x65\x64","\x63\x6F\x6E\x73\x75\x6D\x65","\x65\x76\x74","\x73\x74\x61\x74\x65","\x67\x72\x61\x70\x68\x58","\x67\x72\x61\x70\x68\x59","\x67\x65\x74\x45\x76\x65\x6E\x74","\x67\x65\x74\x53\x6F\x75\x72\x63\x65","\x69\x73\x53\x6F\x75\x72\x63\x65","\x67\x65\x74\x58","\x67\x65\x74\x43\x6C\x69\x65\x6E\x74\x58","\x67\x65\x74\x59","\x67\x65\x74\x43\x6C\x69\x65\x6E\x74\x59","\x67\x65\x74\x47\x72\x61\x70\x68\x58","\x67\x65\x74\x47\x72\x61\x70\x68\x59","\x67\x65\x74\x43\x65\x6C\x6C","\x69\x73\x50\x6F\x70\x75\x70\x54\x72\x69\x67\x67\x65\x72","\x70\x72\x65\x76\x65\x6E\x74\x44\x65\x66\x61\x75\x6C\x74","\x72\x65\x74\x75\x72\x6E\x56\x61\x6C\x75\x65","\x73\x65\x74\x45\x76\x65\x6E\x74\x53\x6F\x75\x72\x63\x65","\x65\x76\x65\x6E\x74\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x65\x76\x65\x6E\x74\x73\x45\x6E\x61\x62\x6C\x65\x64","\x65\x76\x65\x6E\x74\x53\x6F\x75\x72\x63\x65","\x67\x65\x74\x45\x76\x65\x6E\x74\x53\x6F\x75\x72\x63\x65","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72","\x66\x69\x72\x65\x45\x76\x65\x6E\x74","\x6F\x6E","\x66","\x72\x65\x6D\x6F\x76\x65\x45\x76\x65\x6E\x74\x4C\x69\x73\x74\x65\x6E\x65\x72","\x64\x65\x74\x61\x63\x68\x45\x76\x65\x6E\x74","\x6D\x6F\x75\x73\x65\x64\x6F\x77\x6E","\x6D\x6F\x75\x73\x65\x6D\x6F\x76\x65","\x6D\x6F\x75\x73\x65\x75\x70","\x49\x53\x5F\x54\x4F\x55\x43\x48","\x74\x6F\x75\x63\x68\x73\x74\x61\x72\x74","\x74\x6F\x75\x63\x68\x6D\x6F\x76\x65","\x74\x6F\x75\x63\x68\x65\x6E\x64","\x66\x69\x72\x65\x4D\x6F\x75\x73\x65\x45\x76\x65\x6E\x74","\x61\x64\x64\x47\x65\x73\x74\x75\x72\x65\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x64\x62\x6C\x63\x6C\x69\x63\x6B","\x64\x62\x6C\x43\x6C\x69\x63\x6B","\x72\x65\x6C\x65\x61\x73\x65","\x65\x76\x65\x6E\x74","\x64\x65\x74\x61\x69\x6C","\x77\x68\x65\x65\x6C\x44\x65\x6C\x74\x61","\x6D\x6F\x75\x73\x65\x77\x68\x65\x65\x6C","\x44\x4F\x4D\x4D\x6F\x75\x73\x65\x53\x63\x72\x6F\x6C\x6C","\x63\x6F\x6E\x74\x65\x78\x74\x6D\x65\x6E\x75","\x6F\x6E\x63\x6F\x6E\x74\x65\x78\x74\x6D\x65\x6E\x75","\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x3B","\x73\x72\x63\x45\x6C\x65\x6D\x65\x6E\x74","\x74\x61\x72\x67\x65\x74","\x69\x73\x52\x69\x67\x68\x74\x4D\x6F\x75\x73\x65\x42\x75\x74\x74\x6F\x6E","\x69\x73\x53\x68\x69\x66\x74\x44\x6F\x77\x6E","\x69\x73\x43\x6F\x6E\x74\x72\x6F\x6C\x44\x6F\x77\x6E","\x73\x68\x69\x66\x74\x4B\x65\x79","\x61\x6C\x74\x4B\x65\x79","\x63\x74\x72\x6C\x4B\x65\x79","\x6D\x65\x74\x61\x4B\x65\x79","\x74\x6F\x75\x63\x68\x65\x73","\x63\x68\x61\x6E\x67\x65\x64\x54\x6F\x75\x63\x68\x65\x73","\x63\x6C\x69\x65\x6E\x74\x58","\x67\x65\x74\x4D\x61\x69\x6E\x45\x76\x65\x6E\x74","\x63\x6C\x69\x65\x6E\x74\x59","\x73\x74\x6F\x70\x50\x72\x6F\x70\x61\x67\x61\x74\x69\x6F\x6E","\x63\x61\x6E\x63\x65\x6C\x42\x75\x62\x62\x6C\x65","\x6D\x6F\x75\x73\x65\x44\x6F\x77\x6E","\x6D\x6F\x75\x73\x65\x4D\x6F\x76\x65","\x6D\x6F\x75\x73\x65\x55\x70","\x61\x63\x74\x69\x76\x61\x74\x65","\x72\x65\x73\x69\x7A\x65\x53\x74\x61\x72\x74","\x72\x65\x73\x69\x7A\x65\x45\x6E\x64","\x6D\x6F\x76\x65\x53\x74\x61\x72\x74","\x6D\x6F\x76\x65\x45\x6E\x64","\x70\x61\x6E\x53\x74\x61\x72\x74","\x70\x61\x6E","\x70\x61\x6E\x45\x6E\x64","\x6D\x69\x6E\x69\x6D\x69\x7A\x65","\x6E\x6F\x72\x6D\x61\x6C\x69\x7A\x65","\x6D\x61\x78\x69\x6D\x69\x7A\x65","\x68\x69\x64\x65","\x72\x65\x66\x72\x65\x73\x68","\x73\x69\x7A\x65","\x73\x65\x6C\x65\x63\x74","\x66\x69\x72\x65\x64","\x72\x65\x63\x65\x69\x76\x65","\x63\x6F\x6E\x6E\x65\x63\x74","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x73\x75\x73\x70\x65\x6E\x64","\x72\x65\x73\x75\x6D\x65","\x6D\x61\x72\x6B","\x73\x65\x73\x73\x69\x6F\x6E","\x72\x6F\x6F\x74","\x70\x6F\x73\x74","\x73\x61\x76\x65","\x62\x65\x66\x6F\x72\x65\x41\x64\x64\x56\x65\x72\x74\x65\x78","\x61\x64\x64\x56\x65\x72\x74\x65\x78","\x61\x66\x74\x65\x72\x41\x64\x64\x56\x65\x72\x74\x65\x78","\x64\x6F\x6E\x65","\x65\x78\x65\x63\x75\x74\x65\x64","\x73\x74\x61\x72\x74\x45\x64\x69\x74","\x65\x6E\x64\x45\x64\x69\x74","\x62\x65\x66\x6F\x72\x65\x55\x6E\x64\x6F","\x75\x6E\x64\x6F","\x72\x65\x64\x6F","\x63\x68\x61\x6E\x67\x65","\x6E\x6F\x74\x69\x66\x79","\x6C\x61\x79\x6F\x75\x74\x43\x65\x6C\x6C\x73","\x73\x63\x61\x6C\x65\x41\x6E\x64\x54\x72\x61\x6E\x73\x6C\x61\x74\x65","\x75\x70","\x64\x6F\x77\x6E","\x61\x64\x64\x43\x65\x6C\x6C\x73","\x63\x65\x6C\x6C\x73\x41\x64\x64\x65\x64","\x6D\x6F\x76\x65\x43\x65\x6C\x6C\x73","\x63\x65\x6C\x6C\x73\x4D\x6F\x76\x65\x64","\x72\x65\x73\x69\x7A\x65\x43\x65\x6C\x6C\x73","\x63\x65\x6C\x6C\x73\x52\x65\x73\x69\x7A\x65\x64","\x74\x6F\x67\x67\x6C\x65\x43\x65\x6C\x6C\x73","\x63\x65\x6C\x6C\x73\x54\x6F\x67\x67\x6C\x65\x64","\x6F\x72\x64\x65\x72\x43\x65\x6C\x6C\x73","\x63\x65\x6C\x6C\x73\x4F\x72\x64\x65\x72\x65\x64","\x72\x65\x6D\x6F\x76\x65\x43\x65\x6C\x6C\x73","\x63\x65\x6C\x6C\x73\x52\x65\x6D\x6F\x76\x65\x64","\x67\x72\x6F\x75\x70\x43\x65\x6C\x6C\x73","\x75\x6E\x67\x72\x6F\x75\x70\x43\x65\x6C\x6C\x73","\x72\x65\x6D\x6F\x76\x65\x43\x65\x6C\x6C\x73\x46\x72\x6F\x6D\x50\x61\x72\x65\x6E\x74","\x66\x6F\x6C\x64\x43\x65\x6C\x6C\x73","\x63\x65\x6C\x6C\x73\x46\x6F\x6C\x64\x65\x64","\x61\x6C\x69\x67\x6E\x43\x65\x6C\x6C\x73","\x6C\x61\x62\x65\x6C\x43\x68\x61\x6E\x67\x65\x64","\x63\x6F\x6E\x6E\x65\x63\x74\x43\x65\x6C\x6C","\x63\x65\x6C\x6C\x43\x6F\x6E\x6E\x65\x63\x74\x65\x64","\x73\x70\x6C\x69\x74\x45\x64\x67\x65","\x66\x6C\x69\x70\x45\x64\x67\x65","\x73\x74\x61\x72\x74\x45\x64\x69\x74\x69\x6E\x67","\x61\x64\x64\x4F\x76\x65\x72\x6C\x61\x79","\x72\x65\x6D\x6F\x76\x65\x4F\x76\x65\x72\x6C\x61\x79","\x75\x70\x64\x61\x74\x65\x43\x65\x6C\x6C\x53\x69\x7A\x65","\x65\x73\x63\x61\x70\x65","\x64\x6F\x75\x62\x6C\x65\x43\x6C\x69\x63\x6B","\x73\x74\x61\x72\x74","\x72\x65\x73\x65\x74","\x75\x72\x6C","\x70\x61\x72\x61\x6D\x73","\x6D\x65\x74\x68\x6F\x64","\x50\x4F\x53\x54","\x75\x73\x65\x72\x6E\x61\x6D\x65","\x70\x61\x73\x73\x77\x6F\x72\x64","\x62\x69\x6E\x61\x72\x79","\x72\x65\x71\x75\x65\x73\x74","\x69\x73\x42\x69\x6E\x61\x72\x79","\x73\x65\x74\x42\x69\x6E\x61\x72\x79","\x72\x65\x73\x70\x6F\x6E\x73\x65\x54\x65\x78\x74","\x67\x65\x74\x44\x6F\x63\x75\x6D\x65\x6E\x74\x45\x6C\x65\x6D\x65\x6E\x74","\x67\x65\x74\x58\x6D\x6C","\x72\x65\x73\x70\x6F\x6E\x73\x65\x58\x4D\x4C","\x70\x61\x72\x73\x65\x58\x6D\x6C","\x67\x65\x74\x53\x74\x61\x74\x75\x73","\x73\x74\x61\x74\x75\x73","\x58\x4D\x4C\x48\x74\x74\x70\x52\x65\x71\x75\x65\x73\x74","\x6F\x76\x65\x72\x72\x69\x64\x65\x4D\x69\x6D\x65\x54\x79\x70\x65","\x74\x65\x78\x74\x2F\x70\x6C\x61\x69\x6E\x3B\x20\x63\x68\x61\x72\x73\x65\x74\x3D\x78\x2D\x75\x73\x65\x72\x2D\x64\x65\x66\x69\x6E\x65\x64","\x4D\x69\x63\x72\x6F\x73\x6F\x66\x74\x2E\x58\x4D\x4C\x48\x54\x54\x50","\x6F\x6E\x72\x65\x61\x64\x79\x73\x74\x61\x74\x65\x63\x68\x61\x61\x6E\x67\x65","\x62\x69\x6E\x64","\x73\x65\x74\x52\x65\x71\x75\x65\x73\x74\x48\x65\x61\x64\x65\x72\x73","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2F\x78\x2D\x77\x77\x77\x2D\x66\x6F\x72\x6D\x2D\x75\x72\x6C\x65\x6E\x63\x6F\x64\x65\x64","\x73\x65\x74\x52\x65\x71\x75\x65\x73\x74\x48\x65\x61\x64\x65\x72","\x6F\x6E\x62\x65\x66\x6F\x72\x65\x75\x6E\x6C\x6F\x61\x64","\x66\x6F\x72\x6D","\x61\x63\x74\x69\x6F\x6E","\x26","\x73\x75\x62\x6D\x69\x74","\x63\x65\x6C\x6C\x73","\x69\x6E\x73\x65\x72\x74\x43\x6F\x75\x6E\x74","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73","\x67\x65\x74\x45\x78\x70\x6F\x72\x74\x61\x62\x6C\x65\x43\x65\x6C\x6C\x73","\x63\x6C\x6F\x6E\x65\x43\x65\x6C\x6C\x73","\x67\x65\x74\x49\x6D\x70\x6F\x72\x74\x61\x62\x6C\x65\x43\x65\x6C\x6C\x73","\x53\x54\x45\x50\x53\x49\x5A\x45","\x67\x65\x74\x44\x65\x66\x61\x75\x6C\x74\x50\x61\x72\x65\x6E\x74","\x69\x6D\x70\x6F\x72\x74\x43\x65\x6C\x6C\x73","\x73\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73","\x63\x6F\x6E\x74\x65\x6E\x74","\x69\x6E\x73\x74\x61\x6C\x6C\x4D\x61\x78\x69\x6D\x69\x7A\x65\x48\x61\x6E\x64\x6C\x65\x72","\x69\x6E\x73\x74\x61\x6C\x6C\x4D\x69\x6E\x69\x6D\x69\x7A\x65\x48\x61\x6E\x64\x6C\x65\x72","\x69\x6E\x73\x74\x61\x6C\x6C\x43\x6C\x6F\x73\x65\x48\x61\x6E\x64\x6C\x65\x72","\x73\x65\x74\x4D\x69\x6E\x69\x6D\x69\x7A\x61\x62\x6C\x65","\x73\x65\x74\x54\x69\x74\x6C\x65","\x69\x6E\x73\x74\x61\x6C\x6C\x4D\x6F\x76\x65\x48\x61\x6E\x64\x6C\x65\x72","\x72\x65\x70\x6C\x61\x63\x65\x43\x68\x69\x6C\x64","\x63\x6C\x6F\x73\x65\x49\x6D\x61\x67\x65","\x2F\x63\x6C\x6F\x73\x65\x2E\x67\x69\x66","\x6D\x69\x6E\x69\x6D\x69\x7A\x65\x49\x6D\x61\x67\x65","\x2F\x6D\x69\x6E\x69\x6D\x69\x7A\x65\x2E\x67\x69\x66","\x6E\x6F\x72\x6D\x61\x6C\x69\x7A\x65\x49\x6D\x61\x67\x65","\x2F\x6E\x6F\x72\x6D\x61\x6C\x69\x7A\x65\x2E\x67\x69\x66","\x6D\x61\x78\x69\x6D\x69\x7A\x65\x49\x6D\x61\x67\x65","\x2F\x6D\x61\x78\x69\x6D\x69\x7A\x65\x2E\x67\x69\x66","\x72\x65\x73\x69\x7A\x65\x49\x6D\x61\x67\x65","\x2F\x72\x65\x73\x69\x7A\x65\x2E\x67\x69\x66","\x6D\x69\x6E\x69\x6D\x75\x6D\x53\x69\x7A\x65","\x74\x69\x74\x6C\x65","\x6D\x78\x57\x69\x6E\x64\x6F\x77","\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65","\x54\x69\x74\x6C\x65","\x50\x61\x6E\x65","\x63\x6F\x6E\x74\x65\x6E\x74\x57\x72\x61\x70\x70\x65\x72","\x61\x63\x74\x69\x76\x65\x57\x69\x6E\x64\x6F\x77","\x7A\x49\x6E\x64\x65\x78","\x70\x72\x65\x76\x69\x6F\x75\x73\x57\x69\x6E\x64\x6F\x77","\x66\x69\x74","\x69\x73\x52\x65\x73\x69\x7A\x61\x62\x6C\x65","\x32\x70\x78","\x6E\x77\x2D\x72\x65\x73\x69\x7A\x65","\x73\x65\x74\x53\x69\x7A\x65","\x72\x65\x6D\x6F\x76\x65\x47\x65\x73\x74\x75\x72\x65\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x67\x65\x74\x4D\x69\x6E\x69\x6D\x75\x6D\x53\x69\x7A\x65","\x4D\x69\x6E\x69\x6D\x69\x7A\x65","\x6D\x61\x72\x67\x69\x6E\x52\x69\x67\x68\x74","\x31\x70\x78","\x4E\x6F\x72\x6D\x61\x6C\x69\x7A\x65","\x4D\x61\x78\x69\x6D\x69\x7A\x65","\x6D\x61\x72\x67\x69\x6E\x4C\x65\x66\x74","\x30\x70\x78","\x73\x65\x74\x4C\x6F\x63\x61\x74\x69\x6F\x6E","\x63\x6C\x6F\x73\x65\x49\x6D\x67","\x43\x6C\x6F\x73\x65","\x69\x6E\x73\x65\x72\x74\x42\x65\x66\x6F\x72\x65","\x73\x65\x74\x49\x6D\x61\x67\x65","\x34\x70\x78","\x6D\x61\x72\x67\x69\x6E\x54\x6F\x70","\x2D\x32\x70\x78","\x67\x65\x74\x54\x61\x62\x6C\x65","\x61\x64\x64\x42\x75\x74\x74\x6F\x6E\x73","\x6F\x6B","\x4F\x4B","\x63\x61\x6E\x63\x65\x6C","\x43\x61\x6E\x63\x65\x6C","\x61\x64\x64\x54\x65\x78\x74","\x69\x6E\x70\x75\x74","\x74\x65\x78\x74","\x61\x64\x64\x46\x69\x65\x6C\x64","\x61\x64\x64\x43\x68\x65\x63\x6B\x62\x6F\x78","\x63\x68\x65\x63\x6B\x62\x6F\x78","\x63\x68\x65\x63\x6B\x65\x64","\x61\x64\x64\x54\x65\x78\x74\x61\x72\x65\x61","\x72\x6F\x77\x73","\x61\x64\x64\x43\x6F\x6D\x62\x6F","\x6D\x75\x6C\x74\x69\x70\x6C\x65","\x61\x64\x64\x4F\x70\x74\x69\x6F\x6E","\x6F\x70\x74\x69\x6F\x6E","\x73\x65\x6C\x65\x63\x74\x65\x64","\x72\x65\x73\x69\x7A\x65\x57\x69\x64\x74\x68","\x72\x65\x73\x69\x7A\x65\x48\x65\x69\x67\x68\x74","\x68\x61\x6E\x64\x6C\x69\x6E\x67\x52\x65\x73\x69\x7A\x65","\x67\x65\x74\x44\x6F\x63\x75\x6D\x65\x6E\x74\x57\x69\x64\x74\x68","\x67\x65\x74\x44\x6F\x63\x75\x6D\x65\x6E\x74\x48\x65\x69\x67\x68\x74","\x65\x6C\x65\x6D\x65\x6E\x74","\x64\x72\x6F\x70\x48\x61\x6E\x64\x6C\x65\x72","\x64\x72\x61\x67\x45\x6C\x65\x6D\x65\x6E\x74","\x70\x72\x65\x76\x69\x65\x77\x45\x6C\x65\x6D\x65\x6E\x74","\x65\x6E\x61\x62\x6C\x65\x64","\x63\x75\x72\x72\x65\x6E\x74\x47\x72\x61\x70\x68","\x63\x75\x72\x72\x65\x6E\x74\x44\x72\x6F\x70\x54\x61\x72\x67\x65\x74","\x63\x75\x72\x72\x65\x6E\x74\x50\x6F\x69\x6E\x74","\x63\x75\x72\x72\x65\x6E\x74\x47\x75\x69\x64\x65","\x63\x75\x72\x72\x65\x6E\x74\x48\x69\x67\x68\x6C\x69\x67\x68\x74","\x67\x75\x69\x64\x65\x73\x45\x6E\x61\x62\x6C\x65\x64","\x67\x72\x69\x64\x45\x6E\x61\x62\x6C\x65\x64","\x64\x72\x61\x67\x45\x6C\x65\x6D\x65\x6E\x74\x5A\x49\x6E\x64\x65\x78","\x64\x72\x61\x67\x45\x6C\x65\x6D\x65\x6E\x74\x4F\x70\x61\x63\x69\x74\x79","\x69\x73\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x47\x75\x69\x64\x65\x73\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x47\x72\x69\x64\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x47\x72\x69\x64\x45\x6E\x61\x62\x6C\x65\x64","\x67\x65\x74\x43\x65\x6C\x6C\x41\x74","\x6D\x6F\x75\x73\x65\x4D\x6F\x76\x65\x48\x61\x6E\x64\x6C\x65\x72","\x73\x74\x61\x72\x74\x44\x72\x61\x67","\x6D\x6F\x75\x73\x65\x55\x70\x48\x61\x6E\x64\x6C\x65\x72","\x73\x74\x6F\x70\x44\x72\x61\x67","\x67\x72\x61\x70\x68\x43\x6F\x6E\x74\x61\x69\x6E\x73\x45\x76\x65\x6E\x74","\x64\x72\x61\x67\x45\x78\x69\x74","\x64\x72\x61\x67\x45\x6E\x74\x65\x72","\x64\x72\x61\x67\x4F\x76\x65\x72","\x64\x72\x6F\x70","\x69\x73\x4D\x6F\x75\x73\x65\x44\x6F\x77\x6E","\x67\x65\x74\x47\x75\x69\x64\x65\x53\x74\x61\x74\x65\x73","\x67\x72\x61\x70\x68\x48\x61\x6E\x64\x6C\x65\x72","\x61\x75\x74\x6F\x53\x63\x72\x6F\x6C\x6C","\x61\x75\x74\x6F\x45\x78\x74\x65\x6E\x64","\x73\x63\x72\x6F\x6C\x6C\x50\x6F\x69\x6E\x74\x54\x6F\x56\x69\x73\x69\x62\x6C\x65","\x69\x73\x44\x72\x6F\x70\x45\x6E\x61\x62\x6C\x65\x64","\x68\x69\x67\x68\x6C\x69\x67\x68\x74","\x33","\x69\x73\x47\x72\x69\x64\x45\x6E\x61\x62\x6C\x65\x64\x45\x76\x65\x6E\x74","\x69\x73\x45\x6E\x61\x62\x6C\x65\x64\x46\x6F\x72\x45\x76\x65\x6E\x74","\x67\x72\x69\x64\x53\x69\x7A\x65","\x73\x6E\x61\x70","\x70\x72\x65\x76\x69\x65\x77\x4F\x66\x66\x73\x65\x74","\x6E\x6F\x52\x65\x73\x65\x74","\x75\x70\x64\x61\x74\x65\x44\x65\x66\x61\x75\x6C\x74\x4D\x6F\x64\x65","\x61\x64\x64\x49\x74\x65\x6D","\x6D\x78\x54\x6F\x6F\x6C\x62\x61\x72\x4D\x6F\x64\x65","\x6D\x78\x54\x6F\x6F\x6C\x62\x61\x72\x49\x74\x65\x6D","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x43\x6F\x6C\x6F\x72","\x6D\x65\x6E\x75","\x63\x75\x72\x72\x65\x6E\x74\x49\x6D\x67","\x69\x73\x4D\x65\x6E\x75\x53\x68\x6F\x77\x69\x6E\x67","\x68\x69\x64\x65\x4D\x65\x6E\x75","\x66\x61\x63\x74\x6F\x72\x79\x4D\x65\x74\x68\x6F\x64","\x53\x65\x6C\x65\x63\x74\x65\x64","\x6D\x6F\x75\x73\x65\x6F\x75\x74","\x6D\x78\x54\x6F\x6F\x6C\x62\x61\x72\x43\x6F\x6D\x62\x6F\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x6D\x78\x54\x6F\x6F\x6C\x62\x61\x72\x43\x6F\x6D\x62\x6F","\x61\x64\x64\x41\x63\x74\x69\x6F\x6E\x43\x6F\x6D\x62\x6F","\x73\x65\x6C\x65\x63\x74\x65\x64\x49\x6E\x64\x65\x78","\x6F\x70\x74\x69\x6F\x6E\x73","\x66\x75\x6E\x63\x74","\x61\x64\x64\x53\x77\x69\x74\x63\x68\x4D\x6F\x64\x65","\x69\x6E\x69\x74\x69\x61\x6C\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65","\x61\x6C\x74\x49\x63\x6F\x6E","\x73\x65\x6C\x65\x63\x74\x65\x64\x4D\x6F\x64\x65","\x64\x65\x66\x61\x75\x6C\x74\x4D\x6F\x64\x65","\x73\x65\x6C\x65\x63\x74\x4D\x6F\x64\x65","\x61\x64\x64\x4D\x6F\x64\x65","\x64\x65\x66\x61\x75\x6C\x74\x46\x75\x6E\x63\x74\x69\x6F\x6E","\x72\x65\x73\x65\x74\x4D\x6F\x64\x65","\x61\x64\x64\x53\x65\x70\x61\x72\x61\x74\x6F\x72","\x61\x64\x64\x42\x72\x65\x61\x6B","\x61\x64\x64\x4C\x69\x6E\x65","\x68\x72","\x36\x70\x78","\x75\x72\x6C\x49\x6E\x69\x74","\x75\x72\x6C\x50\x6F\x6C\x6C","\x75\x72\x6C\x4E\x6F\x74\x69\x66\x79","\x63\x6F\x64\x65\x63","\x6C\x6F\x6F\x6B\x75\x70","\x65\x64\x69\x74","\x63\x6F\x6E\x6E\x65\x63\x74\x65\x64","\x73\x75\x73\x70\x65\x6E\x64\x65\x64","\x3C\x65\x64\x69\x74\x3E","\x63\x68\x61\x6E\x67\x65\x73","\x75\x6E\x64\x6F\x6E\x65","\x65\x6E\x63\x6F\x64\x65\x43\x68\x61\x6E\x67\x65\x73","\x3C\x2F\x65\x64\x69\x74\x3E","\x6C\x69\x6E\x65\x66\x65\x65\x64","\x65\x73\x63\x61\x70\x65\x50\x6F\x73\x74\x44\x61\x74\x61","\x73\x69\x67\x6E\x69\x66\x69\x63\x61\x6E\x74\x52\x65\x6D\x6F\x74\x65\x43\x68\x61\x6E\x67\x65\x73","\x73\x65\x6E\x74","\x72\x65\x63\x65\x69\x76\x65\x64","\x70\x6F\x6C\x6C\x69\x6E\x67","\x70\x6F\x6C\x6C","\x73\x74\x6F\x70","\x72\x65\x61\x73\x6F\x6E","\x6D\x78\x53\x65\x73\x73\x69\x6F\x6E\x2E\x6E\x6F\x74\x69\x66\x79\x3A\x20","\x20\x78\x6D\x6C\x3D","\x3C\x6D\x65\x73\x73\x61\x67\x65\x3E\x3C\x64\x65\x6C\x74\x61\x3E","\x3C\x2F\x64\x65\x6C\x74\x61\x3E\x3C\x2F\x6D\x65\x73\x73\x61\x67\x65\x3E","\x78\x6D\x6C\x3D","\x69\x73\x56\x61\x6C\x69\x64\x52\x65\x73\x70\x6F\x6E\x73\x65","\x49\x6E\x76\x61\x6C\x69\x64\x20\x72\x65\x73\x70\x6F\x6E\x73\x65\x3A\x20","\x52\x65\x73\x70\x6F\x6E\x73\x65\x20\x6E\x6F\x74\x20\x72\x65\x61\x64\x79","\x54\x72\x61\x6E\x73\x6D\x69\x73\x73\x69\x6F\x6E\x20\x65\x72\x72\x6F\x72","\x3C\x3F\x70\x68\x70","\x6E\x61\x6D\x65\x73\x70\x61\x63\x65","\x70\x72\x65\x66\x69\x78","\x70\x72\x6F\x63\x65\x73\x73\x53\x74\x61\x74\x65","\x64\x65\x6C\x74\x61","\x70\x72\x6F\x63\x65\x73\x73\x44\x65\x6C\x74\x61","\x64\x65\x63\x6F\x64\x65","\x70\x72\x6F\x63\x65\x73\x73\x45\x64\x69\x74","\x64\x65\x63\x6F\x64\x65\x43\x68\x61\x6E\x67\x65\x73","\x63\x72\x65\x61\x74\x65\x55\x6E\x64\x6F\x61\x62\x6C\x65\x45\x64\x69\x74","\x73\x6F\x75\x72\x63\x65","\x64\x65\x63\x6F\x64\x65\x43\x68\x61\x6E\x67\x65","\x6D\x78\x52\x6F\x6F\x74\x43\x68\x61\x6E\x67\x65","\x6D\x78\x43\x68\x69\x6C\x64\x43\x68\x61\x6E\x67\x65","\x70\x61\x72\x65\x6E\x74","\x63\x65\x6C\x6C\x52\x65\x6D\x6F\x76\x65\x64","\x67\x65\x74\x49\x64","\x70\x75\x74\x4F\x62\x6A\x65\x63\x74","\x73\x69\x67\x6E\x69\x66\x69\x63\x61\x6E\x74","\x72\x65\x64\x6F\x6E\x65","\x69\x73\x45\x6D\x70\x74\x79","\x69\x73\x53\x69\x67\x6E\x69\x66\x69\x63\x61\x6E\x74","\x64\x69\x65","\x68\x69\x73\x74\x6F\x72\x79","\x69\x6E\x64\x65\x78\x4F\x66\x4E\x65\x78\x74\x41\x64\x64","\x63\x61\x6E\x55\x6E\x64\x6F","\x63\x61\x6E\x52\x65\x64\x6F","\x75\x6E\x64\x6F\x61\x62\x6C\x65\x45\x64\x69\x74\x48\x61\x70\x70\x65\x6E\x65\x64","\x73\x68\x69\x66\x74","\x64\x61\x74\x61\x3A\x69\x6D\x61\x67\x65","\x69\x73\x52\x65\x6C\x61\x74\x69\x76\x65\x55\x72\x6C","\x70\x72\x6F\x74\x6F\x63\x6F\x6C","\x2F\x2F","\x68\x6F\x73\x74","\x70\x61\x74\x68\x6E\x61\x6D\x65","\x6C\x61\x73\x74\x49\x6E\x64\x65\x78\x4F\x66","\x74\x68\x72\x65\x61\x64","\x61\x63\x74\x69\x76\x65","\x64\x79","\x64\x78","\x74\x30\x79","\x74\x30\x78","\x74\x64\x79","\x74\x64\x78","\x73\x63\x72\x6F\x6C\x6C\x62\x61\x72\x73","\x6D\x6F\x75\x73\x65\x4C\x69\x73\x74\x65\x6E\x65\x72","\x61\x64\x64\x4D\x6F\x75\x73\x65\x4C\x69\x73\x74\x65\x6E\x65\x72","\x68\x61\x73\x53\x63\x72\x6F\x6C\x6C\x62\x61\x72\x73","\x70\x61\x6E\x47\x72\x61\x70\x68","\x70\x61\x6E\x44\x78","\x70\x61\x6E\x44\x79","\x67\x65\x74\x44\x78","\x67\x65\x74\x44\x79","\x64\x65\x6C\x61\x79","\x73\x65\x74\x49\x6E\x74\x65\x72\x76\x61\x6C","\x69\x73\x41\x63\x74\x69\x76\x65","\x70\x61\x6E\x54\x6F","\x68\x61\x6E\x64\x6C\x65\x4D\x6F\x75\x73\x65\x4F\x75\x74","\x64\x61\x6D\x70\x65\x72","\x63\x6C\x65\x61\x72\x49\x6E\x74\x65\x72\x76\x61\x6C","\x73\x65\x74\x54\x72\x61\x6E\x73\x6C\x61\x74\x65","\x72\x65\x6D\x6F\x76\x65\x4D\x6F\x75\x73\x65\x4C\x69\x73\x74\x65\x6E\x65\x72","\x73\x75\x62\x6D\x65\x6E\x75\x49\x6D\x61\x67\x65","\x2F\x73\x75\x62\x6D\x65\x6E\x75\x2E\x67\x69\x66","\x75\x73\x65\x4C\x65\x66\x74\x42\x75\x74\x74\x6F\x6E\x46\x6F\x72\x50\x6F\x70\x75\x70","\x69\x74\x65\x6D\x43\x6F\x75\x6E\x74","\x61\x75\x74\x6F\x45\x78\x70\x61\x6E\x64","\x73\x6D\x61\x72\x74\x53\x65\x70\x61\x72\x61\x74\x6F\x72\x73","\x6C\x61\x62\x65\x6C\x73","\x6D\x78\x50\x6F\x70\x75\x70\x4D\x65\x6E\x75","\x64\x69\x73\x61\x62\x6C\x65\x43\x6F\x6E\x74\x65\x78\x74\x4D\x65\x6E\x75","\x69\x73\x4C\x65\x66\x74\x4D\x6F\x75\x73\x65\x42\x75\x74\x74\x6F\x6E","\x77\x69\x6C\x6C\x41\x64\x64\x53\x65\x70\x61\x72\x61\x74\x6F\x72","\x63\x6F\x6E\x74\x61\x69\x6E\x73\x49\x74\x65\x6D\x73","\x6D\x78\x50\x6F\x70\x75\x70\x4D\x65\x6E\x75\x49\x74\x65\x6D","\x6D\x78\x50\x6F\x70\x75\x70\x4D\x65\x6E\x75\x49\x63\x6F\x6E","\x20\x64\x69\x73\x61\x62\x6C\x65\x64","\x70\x61\x64\x64\x69\x6E\x67\x52\x69\x67\x68\x74","\x74\x65\x78\x74\x41\x6C\x69\x67\x6E","\x63\x72\x65\x61\x74\x65\x53\x75\x62\x6D\x65\x6E\x75","\x65\x76\x65\x6E\x74\x52\x65\x63\x65\x69\x76\x65\x72","\x61\x63\x74\x69\x76\x65\x52\x6F\x77","\x68\x69\x64\x65\x53\x75\x62\x6D\x65\x6E\x75","\x73\x68\x6F\x77\x53\x75\x62\x6D\x65\x6E\x75","\x6D\x78\x50\x6F\x70\x75\x70\x4D\x65\x6E\x75\x49\x74\x65\x6D\x48\x6F\x76\x65\x72","\x30\x20\x30\x20\x30\x20\x30\x70\x78","\x63\x6F\x6C\x53\x70\x61\x6E","\x32","\x73\x68\x6F\x77\x4D\x65\x6E\x75","\x63\x68\x61\x6E\x67\x65\x48\x61\x6E\x64\x6C\x65\x72","\x67\x72\x61\x70\x68\x4D\x6F\x64\x65\x6C\x43\x68\x61\x6E\x67\x65\x64","\x73\x65\x74\x47\x72\x61\x70\x68","\x67\x72\x61\x70\x68","\x61\x75\x74\x6F\x53\x61\x76\x65\x44\x65\x6C\x61\x79","\x61\x75\x74\x6F\x53\x61\x76\x65\x54\x68\x72\x6F\x74\x74\x6C\x65","\x61\x75\x74\x6F\x53\x61\x76\x65\x54\x68\x72\x65\x73\x68\x6F\x6C\x64","\x69\x67\x6E\x6F\x72\x65\x64\x43\x68\x61\x6E\x67\x65\x73","\x6C\x61\x73\x74\x53\x6E\x61\x70\x73\x68\x6F\x74","\x73\x74\x61\x72\x74\x41\x6E\x69\x6D\x61\x74\x69\x6F\x6E","\x75\x70\x64\x61\x74\x65\x41\x6E\x69\x6D\x61\x74\x69\x6F\x6E","\x73\x74\x6F\x70\x41\x6E\x69\x6D\x61\x74\x69\x6F\x6E","\x73\x74\x65\x70\x73","\x65\x61\x73\x65","\x73\x74\x65\x70","\x61\x6E\x69\x6D\x61\x74\x65\x43\x65\x6C\x6C","\x67\x65\x74\x44\x65\x6C\x74\x61","\x69\x73\x56\x65\x72\x74\x65\x78","\x6D\x6F\x76\x65\x53\x74\x61\x74\x65","\x73\x74\x6F\x70\x52\x65\x63\x75\x72\x73\x69\x6F\x6E","\x67\x65\x74\x4F\x72\x69\x67\x69\x6E\x46\x6F\x72\x43\x65\x6C\x6C","\x67\x65\x74\x50\x61\x72\x65\x6E\x74","\x67\x65\x74\x43\x65\x6C\x6C\x47\x65\x6F\x6D\x65\x74\x72\x79","\x69\x6D\x61\x67\x65\x73","\x61\x6C\x74","\x70\x75\x74\x49\x6D\x61\x67\x65","\x67\x65\x74\x49\x6D\x61\x67\x65","\x66\x61\x6C\x6C\x62\x61\x63\x6B","\x69\x6E\x63\x6C\x75\x64\x65\x4F\x76\x65\x72\x6C\x61\x79\x73","\x64\x72\x61\x77\x53\x74\x61\x74\x65","\x64\x72\x61\x77\x43\x65\x6C\x6C\x53\x74\x61\x74\x65","\x76\x69\x73\x69\x74\x53\x74\x61\x74\x65\x73\x52\x65\x63\x75\x72\x73\x69\x76\x65","\x64\x72\x61\x77\x4F\x76\x65\x72\x6C\x61\x79\x73","\x70\x61\x69\x6E\x74","\x72\x65\x73\x74\x6F\x72\x65","\x6F\x76\x65\x72\x6C\x61\x79\x73","\x63\x6F\x6E\x76\x65\x72\x74\x65\x72","\x63\x72\x65\x61\x74\x65\x55\x72\x6C\x43\x6F\x6E\x76\x65\x72\x74\x65\x72","\x73\x74\x61\x74\x65\x73","\x70\x61\x74\x68","\x72\x6F\x74\x61\x74\x65\x48\x74\x6D\x6C","\x6C\x61\x73\x74\x58","\x6C\x61\x73\x74\x59","\x6D\x6F\x76\x65\x4F\x70","\x4D","\x6C\x69\x6E\x65\x4F\x70","\x4C","\x71\x75\x61\x64\x4F\x70","\x51","\x63\x75\x72\x76\x65\x4F\x70","\x43","\x63\x6C\x6F\x73\x65\x4F\x70","\x5A","\x70\x6F\x69\x6E\x74\x65\x72\x45\x76\x65\x6E\x74\x73","\x63\x72\x65\x61\x74\x65\x53\x74\x61\x74\x65","\x33\x20\x33","\x66\x6C\x61\x74","\x6D\x69\x74\x65\x72","\x23\x30\x30\x30\x30\x30\x30","\x53\x48\x41\x44\x4F\x57\x43\x4F\x4C\x4F\x52","\x53\x48\x41\x44\x4F\x57\x5F\x4F\x50\x41\x43\x49\x54\x59","\x53\x48\x41\x44\x4F\x57\x5F\x4F\x46\x46\x53\x45\x54\x5F\x58","\x53\x48\x41\x44\x4F\x57\x5F\x4F\x46\x46\x53\x45\x54\x5F\x59","\x66\x6F\x72\x6D\x61\x74","\x61\x64\x64\x4F\x70","\x72\x6F\x74\x61\x74\x65\x50\x6F\x69\x6E\x74","\x70\x6F\x70","\x73\x65\x74\x41\x6C\x70\x68\x61","\x61\x6C\x70\x68\x61","\x73\x65\x74\x46\x69\x6C\x6C\x43\x6F\x6C\x6F\x72","\x73\x65\x74\x47\x72\x61\x64\x69\x65\x6E\x74","\x66\x69\x6C\x6C\x41\x6C\x70\x68\x61","\x67\x72\x61\x64\x69\x65\x6E\x74\x41\x6C\x70\x68\x61","\x73\x65\x74\x53\x74\x72\x6F\x6B\x65\x43\x6F\x6C\x6F\x72","\x73\x65\x74\x53\x74\x72\x6F\x6B\x65\x57\x69\x64\x74\x68","\x73\x65\x74\x44\x61\x73\x68\x65\x64","\x73\x65\x74\x44\x61\x73\x68\x50\x61\x74\x74\x65\x72\x6E","\x73\x65\x74\x4C\x69\x6E\x65\x43\x61\x70","\x6C\x69\x6E\x65\x43\x61\x70","\x73\x65\x74\x4C\x69\x6E\x65\x4A\x6F\x69\x6E","\x6C\x69\x6E\x65\x4A\x6F\x69\x6E","\x73\x65\x74\x4D\x69\x74\x65\x72\x4C\x69\x6D\x69\x74","\x6D\x69\x74\x65\x72\x4C\x69\x6D\x69\x74","\x73\x65\x74\x46\x6F\x6E\x74\x43\x6F\x6C\x6F\x72","\x73\x65\x74\x46\x6F\x6E\x74\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x43\x6F\x6C\x6F\x72","\x66\x6F\x6E\x74\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x43\x6F\x6C\x6F\x72","\x73\x65\x74\x46\x6F\x6E\x74\x42\x6F\x72\x64\x65\x72\x43\x6F\x6C\x6F\x72","\x66\x6F\x6E\x74\x42\x6F\x72\x64\x65\x72\x43\x6F\x6C\x6F\x72","\x73\x65\x74\x46\x6F\x6E\x74\x53\x69\x7A\x65","\x73\x65\x74\x46\x6F\x6E\x74\x46\x61\x6D\x69\x6C\x79","\x73\x65\x74\x46\x6F\x6E\x74\x53\x74\x79\x6C\x65","\x73\x65\x74\x53\x68\x61\x64\x6F\x77","\x73\x65\x74\x53\x68\x61\x64\x6F\x77\x43\x6F\x6C\x6F\x72","\x73\x68\x61\x64\x6F\x77\x43\x6F\x6C\x6F\x72","\x73\x65\x74\x53\x68\x61\x64\x6F\x77\x41\x6C\x70\x68\x61","\x73\x68\x61\x64\x6F\x77\x41\x6C\x70\x68\x61","\x73\x65\x74\x53\x68\x61\x64\x6F\x77\x4F\x66\x66\x73\x65\x74","\x73\x68\x61\x64\x6F\x77\x44\x78","\x73\x68\x61\x64\x6F\x77\x44\x79","\x62\x65\x67\x69\x6E","\x6D\x6F\x76\x65\x54\x6F","\x6C\x69\x6E\x65\x54\x6F","\x71\x75\x61\x64\x54\x6F","\x63\x75\x72\x76\x65\x54\x6F","\x61\x72\x63\x54\x6F","\x61\x72\x63\x54\x6F\x43\x75\x72\x76\x65\x73","\x65\x6E\x64","\x77\x72\x69\x74\x65\x44\x65\x66\x61\x75\x6C\x74\x73","\x65\x78\x74\x65\x6E\x64","\x74\x65\x78\x74\x45\x6E\x61\x62\x6C\x65\x64","\x63\x6F\x6D\x70\x72\x65\x73\x73\x65\x64","\x66\x6F\x6E\x74\x66\x61\x6D\x69\x6C\x79","\x66\x61\x6D\x69\x6C\x79","\x66\x6F\x6E\x74\x73\x69\x7A\x65","\x73\x68\x61\x64\x6F\x77\x63\x6F\x6C\x6F\x72","\x73\x68\x61\x64\x6F\x77\x61\x6C\x70\x68\x61","\x73\x68\x61\x64\x6F\x77\x6F\x66\x66\x73\x65\x74","\x74\x6F\x46\x69\x78\x65\x64","\x72\x6F\x74\x61\x74\x65","\x74\x68\x65\x74\x61","\x63\x78","\x63\x79","\x66\x69\x6C\x6C\x63\x6F\x6C\x6F\x72","\x67\x72\x61\x64\x69\x65\x6E\x74","\x63\x31","\x63\x32","\x77","\x68","\x61\x6C\x70\x68\x61\x31","\x61\x6C\x70\x68\x61\x32","\x73\x74\x72\x6F\x6B\x65\x63\x6F\x6C\x6F\x72","\x73\x74\x72\x6F\x6B\x65\x77\x69\x64\x74\x68","\x64\x61\x73\x68\x70\x61\x74\x74\x65\x72\x6E","\x70\x61\x74\x74\x65\x72\x6E","\x6C\x69\x6E\x65\x63\x61\x70","\x63\x61\x70","\x6C\x69\x6E\x65\x6A\x6F\x69\x6E","\x6D\x69\x74\x65\x72\x6C\x69\x6D\x69\x74","\x6C\x69\x6D\x69\x74","\x66\x6F\x6E\x74\x63\x6F\x6C\x6F\x72","\x66\x6F\x6E\x74\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x63\x6F\x6C\x6F\x72","\x66\x6F\x6E\x74\x62\x6F\x72\x64\x65\x72\x63\x6F\x6C\x6F\x72","\x66\x6F\x6E\x74\x73\x74\x79\x6C\x65","\x72\x65\x63\x74","\x72\x6F\x75\x6E\x64\x72\x65\x63\x74","\x63\x6F\x6E\x76\x65\x72\x74","\x61\x73\x70\x65\x63\x74","\x71\x75\x61\x64","\x78\x31","\x79\x31","\x78\x32","\x79\x32","\x63\x75\x72\x76\x65","\x78\x33","\x79\x33","\x69\x73\x4E\x6F\x64\x65","\x73\x74\x72","\x77\x72\x61\x70","\x66\x69\x6C\x6C","\x63\x6C\x69\x70","\x73\x74\x72\x6F\x6B\x65","\x66\x69\x6C\x6C\x41\x6E\x64\x53\x74\x72\x6F\x6B\x65","\x66\x69\x6C\x6C\x73\x74\x72\x6F\x6B\x65","\x67\x72\x61\x64\x69\x65\x6E\x74\x73","\x64\x65\x66\x73","\x73\x74\x79\x6C\x65\x45\x6E\x61\x62\x6C\x65\x64","\x63\x72\x65\x61\x74\x65\x53\x74\x79\x6C\x65","\x6D\x61\x74\x63\x68\x48\x74\x6D\x6C\x41\x6C\x69\x67\x6E\x6D\x65\x6E\x74","\x66\x6F\x45\x6E\x61\x62\x6C\x65\x64","\x73\x74\x72\x6F\x6B\x65\x54\x6F\x6C\x65\x72\x61\x6E\x63\x65","\x72\x65\x66\x43\x6F\x75\x6E\x74","\x62\x6C\x6F\x63\x6B\x49\x6D\x61\x67\x65\x50\x6F\x69\x6E\x74\x65\x72\x45\x76\x65\x6E\x74\x73","\x73\x76\x67\x7B\x66\x6F\x6E\x74\x2D\x66\x61\x6D\x69\x6C\x79\x3A","\x3B\x66\x6F\x6E\x74\x2D\x73\x69\x7A\x65\x3A","\x3B\x66\x69\x6C\x6C\x3A\x6E\x6F\x6E\x65\x3B\x73\x74\x72\x6F\x6B\x65\x2D\x6D\x69\x74\x65\x72\x6C\x69\x6D\x69\x74\x3A\x31\x30\x7D","\x4E\x53\x5F\x53\x56\x47","\x78\x6D\x6C\x6E\x73","\x63\x72\x65\x61\x74\x65\x47\x72\x61\x64\x69\x65\x6E\x74\x49\x64","\x44\x49\x52\x45\x43\x54\x49\x4F\x4E\x5F\x53\x4F\x55\x54\x48","\x73","\x44\x49\x52\x45\x43\x54\x49\x4F\x4E\x5F\x45\x41\x53\x54","\x65","\x44\x49\x52\x45\x43\x54\x49\x4F\x4E\x5F\x4E\x4F\x52\x54\x48","\x44\x49\x52\x45\x43\x54\x49\x4F\x4E\x5F\x57\x45\x53\x54","\x6D\x78\x2D\x67\x72\x61\x64\x69\x65\x6E\x74\x2D","\x67\x65\x74\x53\x76\x67\x47\x72\x61\x64\x69\x65\x6E\x74","\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x42\x79\x49\x64","\x69\x64","\x63\x72\x65\x61\x74\x65\x53\x76\x67\x47\x72\x61\x64\x69\x65\x6E\x74","\x6C\x69\x6E\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6E\x74","\x30\x25","\x3B\x73\x74\x6F\x70\x2D\x6F\x70\x61\x63\x69\x74\x79\x3A","\x6F\x66\x66\x73\x65\x74","\x73\x74\x6F\x70\x2D\x63\x6F\x6C\x6F\x72\x3A","\x61\x64\x64\x4E\x6F\x64\x65","\x64","\x75\x70\x64\x61\x74\x65\x46\x69\x6C\x6C","\x74\x72\x61\x6E\x73\x70\x61\x72\x65\x6E\x74","\x75\x70\x64\x61\x74\x65\x53\x74\x72\x6F\x6B\x65","\x63\x72\x65\x61\x74\x65\x53\x68\x61\x64\x6F\x77","\x63\x72\x65\x61\x74\x65\x54\x6F\x6C\x65\x72\x61\x6E\x63\x65","\x70\x6F\x69\x6E\x74\x65\x72\x2D\x65\x76\x65\x6E\x74\x73","\x61\x6C\x6C","\x66\x69\x6C\x6C\x2D\x6F\x70\x61\x63\x69\x74\x79","\x75\x72\x6C\x28\x23","\x73\x74\x72\x6F\x6B\x65\x2D\x6F\x70\x61\x63\x69\x74\x79","\x73\x74\x72\x6F\x6B\x65\x2D\x77\x69\x64\x74\x68","\x75\x70\x64\x61\x74\x65\x53\x74\x72\x6F\x6B\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x73\x74\x72\x6F\x6B\x65\x2D\x64\x61\x73\x68\x61\x72\x72\x61\x79","\x63\x72\x65\x61\x74\x65\x44\x61\x73\x68\x50\x61\x74\x74\x65\x72\x6E","\x73\x74\x72\x6F\x6B\x65\x2D\x6C\x69\x6E\x65\x6A\x6F\x69\x6E","\x62\x75\x74\x74","\x73\x74\x72\x6F\x6B\x65\x2D\x6C\x69\x6E\x65\x63\x61\x70","\x73\x74\x72\x6F\x6B\x65\x2D\x6D\x69\x74\x65\x72\x6C\x69\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x77\x68\x69\x74\x65","\x29\x73\x63\x61\x6C\x65\x28","\x29\x74\x72\x61\x6E\x73\x6C\x61\x74\x65\x28","\x72\x6F\x74\x61\x74\x65\x28","\x72\x6F\x74\x61\x74\x69\x6F\x6E\x43\x78","\x72\x6F\x74\x61\x74\x69\x6F\x6E\x43\x79","\x72\x78","\x72\x79","\x73\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65\x4E\x53","\x78\x6C\x69\x6E\x6B\x3A\x68\x72\x65\x66","\x70\x72\x65\x73\x65\x72\x76\x65\x41\x73\x70\x65\x63\x74\x52\x61\x74\x69\x6F","\x73\x63\x61\x6C\x65\x28","\x70\x6F\x69\x6E\x74\x65\x72\x2D\x65\x76\x65\x6E\x74\x73\x3A\x6E\x6F\x6E\x65","\x63\x72\x65\x61\x74\x65\x44\x69\x76","\x64\x69\x73\x70\x6C\x61\x79\x3A\x69\x6E\x6C\x69\x6E\x65\x2D\x62\x6C\x6F\x63\x6B\x3B\x66\x6F\x6E\x74\x2D\x73\x69\x7A\x65\x3A","\x70\x78\x3B\x66\x6F\x6E\x74\x2D\x66\x61\x6D\x69\x6C\x79\x3A","\x3B\x63\x6F\x6C\x6F\x72\x3A","\x3B\x6C\x69\x6E\x65\x2D\x68\x65\x69\x67\x68\x74\x3A","\x70\x78\x3B","\x46\x4F\x4E\x54\x5F\x42\x4F\x4C\x44","\x66\x6F\x6E\x74\x2D\x77\x65\x69\x67\x68\x74\x3A\x62\x6F\x6C\x64\x3B","\x46\x4F\x4E\x54\x5F\x49\x54\x41\x4C\x49\x43","\x66\x6F\x6E\x74\x2D\x73\x74\x79\x6C\x65\x3A\x69\x74\x61\x6C\x69\x63\x3B","\x46\x4F\x4E\x54\x5F\x55\x4E\x44\x45\x52\x4C\x49\x4E\x45","\x66\x6F\x6E\x74\x2D\x64\x65\x63\x6F\x72\x61\x74\x69\x6F\x6E\x3A\x75\x6E\x64\x65\x72\x6C\x69\x6E\x65\x3B","\x74\x65\x78\x74\x2D\x61\x6C\x69\x67\x6E\x3A\x63\x65\x6E\x74\x65\x72\x3B","\x74\x65\x78\x74\x2D\x61\x6C\x69\x67\x6E\x3A\x72\x69\x67\x68\x74\x3B","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x2D\x63\x6F\x6C\x6F\x72\x3A","\x62\x6F\x72\x64\x65\x72\x3A\x31\x70\x78\x20\x73\x6F\x6C\x69\x64\x20","\x26\x61\x6D\x70\x3B\x67\x74\x3B","\x26\x61\x6D\x70\x3B\x6C\x74\x3B","\x3C\x64\x69\x76\x20\x78\x6D\x6C\x6E\x73\x3D\x22\x68\x74\x74\x70\x3A\x2F\x2F\x77\x77\x77\x2E\x77\x33\x2E\x6F\x72\x67\x2F\x31\x39\x39\x39\x2F\x78\x68\x74\x6D\x6C\x22\x20\x73\x74\x79\x6C\x65\x3D\x22\x64\x69\x73\x70\x6C\x61\x79\x3A\x69\x6E\x6C\x69\x6E\x65\x2D\x62\x6C\x6F\x63\x6B\x3B","\x22\x3E","\x3C\x2F\x64\x69\x76\x3E","\x3C\x68\x72\x20\x2F\x3E","\x3C\x62\x72\x20\x2F\x3E","\x3C\x64\x69\x76\x20\x78\x6D\x6C\x6E\x73\x3D\x22\x68\x74\x74\x70\x3A\x2F\x2F\x77\x77\x77\x2E\x77\x33\x2E\x6F\x72\x67\x2F\x31\x39\x39\x39\x2F\x78\x68\x74\x6D\x6C\x22\x20\x73\x74\x79\x6C\x65\x3D\x22","\x68\x74\x6D\x6C","\x76\x65\x72\x74\x69\x63\x61\x6C\x2D\x61\x6C\x69\x67\x6E\x3A\x74\x6F\x70\x3B","\x6F\x76\x65\x72\x66\x6C\x6F\x77\x3A\x68\x69\x64\x64\x65\x6E\x3B","\x6D\x61\x78\x2D\x68\x65\x69\x67\x68\x74\x3A","\x77\x69\x64\x74\x68\x3A","\x77\x68\x69\x74\x65\x2D\x73\x70\x61\x63\x65\x3A\x6E\x6F\x72\x6D\x61\x6C\x3B","\x77\x68\x69\x74\x65\x2D\x73\x70\x61\x63\x65\x3A\x6E\x6F\x77\x72\x61\x70\x3B","\x66\x6F\x72\x65\x69\x67\x6E\x4F\x62\x6A\x65\x63\x74","\x70\x6C\x61\x69\x6E\x54\x65\x78\x74","\x63\x72\x65\x61\x74\x65\x43\x6C\x69\x70","\x6D\x78\x2D\x63\x6C\x69\x70\x2D","\x63\x6C\x69\x70\x50\x61\x74\x68","\x63\x6C\x69\x70\x2D\x70\x61\x74\x68","\x75\x70\x64\x61\x74\x65\x46\x6F\x6E\x74","\x74\x65\x78\x74\x2D\x61\x6E\x63\x68\x6F\x72","\x66\x6F\x6E\x74\x2D\x73\x69\x7A\x65","\x61\x64\x64\x54\x65\x78\x74\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64","\x66\x6F\x6E\x74\x2D\x66\x61\x6D\x69\x6C\x79","\x66\x6F\x6E\x74\x2D\x77\x65\x69\x67\x68\x74","\x62\x6F\x6C\x64","\x66\x6F\x6E\x74\x2D\x73\x74\x79\x6C\x65","\x69\x74\x61\x6C\x69\x63","\x74\x65\x78\x74\x2D\x64\x65\x63\x6F\x72\x61\x74\x69\x6F\x6E","\x67\x65\x74\x42\x42\x6F\x78","\x66\x6F\x6E\x74\x57\x65\x69\x67\x68\x74","\x3C\x62\x72\x2F\x3E","\x6D\x6F\x64","\x74\x72\x61\x6E\x73\x6C\x61\x74\x65\x28\x30\x2E\x35\x2C\x20\x30\x2E\x35\x29","\x6D","\x6C","\x63","\x72\x6F\x74\x61\x74\x65\x64\x48\x74\x6D\x6C\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64","\x76\x6D\x6C\x53\x63\x61\x6C\x65","\x20\x65","\x63\x6F\x6F\x72\x64\x73\x69\x7A\x65","\x73\x74\x72\x6F\x6B\x65\x77\x65\x69\x67\x68\x74","\x73\x74\x72\x6F\x6B\x65\x64","\x63\x72\x65\x61\x74\x65\x53\x74\x72\x6F\x6B\x65","\x63\x72\x65\x61\x74\x65\x46\x69\x6C\x6C","\x63\x72\x65\x61\x74\x65\x54\x72\x61\x6E\x73\x70\x61\x72\x65\x6E\x74\x46\x69\x6C\x6C","\x66\x69\x6C\x6C\x65\x64","\x3A\x66\x69\x6C\x6C","\x2F\x74\x72\x61\x6E\x73\x70\x61\x72\x65\x6E\x74\x2E\x67\x69\x66","\x74\x69\x6C\x65","\x63\x6F\x6C\x6F\x72\x32","\x66\x6C\x69\x70","\x61\x6E\x67\x6C\x65","\x4F\x46\x46\x49\x43\x45\x5F\x50\x52\x45\x46\x49\x58","\x3A\x6F\x70\x61\x63\x69\x74\x79\x32","\x3A\x73\x74\x72\x6F\x6B\x65","\x65\x6E\x64\x63\x61\x70","\x6A\x6F\x69\x6E\x73\x74\x79\x6C\x65","\x31\x30","\x64\x61\x73\x68\x73\x74\x79\x6C\x65","\x67\x65\x74\x56\x6D\x6C\x44\x61\x73\x68\x53\x74\x79\x6C\x65","\x64\x61\x73\x68","\x30\x20\x32","\x63\x72\x65\x61\x74\x65\x53\x68\x61\x64\x6F\x77\x53\x74\x72\x6F\x6B\x65","\x63\x72\x65\x61\x74\x65\x53\x68\x61\x64\x6F\x77\x46\x69\x6C\x6C","\x3A\x73\x68\x61\x70\x65","\x63\x20","\x63\x72\x65\x61\x74\x65\x52\x65\x63\x74","\x3A\x72\x65\x63\x74","\x3A\x72\x6F\x75\x6E\x64\x72\x65\x63\x74","\x61\x72\x63\x73\x69\x7A\x65","\x3A\x6F\x76\x61\x6C","\x61\x74\x6D\x6F\x73\x74","\x69\x67\x6E\x6F\x72\x65","\x66\x72\x61\x6D\x65","\x31\x38\x30","\x66\x6F\x6E\x74\x44\x65\x63\x6F\x72\x61\x74\x69\x6F\x6E","\x3A\x67\x72\x6F\x75\x70","\x72\x65\x6C\x61\x74\x69\x76\x65","\x67\x65\x74\x41\x6C\x69\x67\x6E\x6D\x65\x6E\x74\x41\x73\x50\x6F\x69\x6E\x74","\x6E\x6F\x72\x6D\x61\x6C","\x6D\x61\x78\x48\x65\x69\x67\x68\x74","\x67\x72\x6F\x75\x70","\x70\x72\x6F\x67\x69\x64\x3A\x44\x58\x49\x6D\x61\x67\x65\x54\x72\x61\x6E\x73\x66\x6F\x72\x6D\x2E\x4D\x69\x63\x72\x6F\x73\x6F\x66\x74\x2E\x4D\x61\x74\x72\x69\x78\x28\x4D\x31\x31\x3D","\x2C\x20\x4D\x31\x32\x3D","\x2C\x20\x4D\x32\x31\x3D","\x2C\x20\x4D\x32\x32\x3D","\x2C\x20\x73\x69\x7A\x69\x6E\x67\x4D\x65\x74\x68\x6F\x64\x3D\x27\x61\x75\x74\x6F\x20\x65\x78\x70\x61\x6E\x64\x27\x29","\x3A\x70\x61\x74\x68","\x74\x65\x78\x74\x70\x61\x74\x68\x6F\x6B","\x6D\x20","\x20\x6C\x20","\x3A\x74\x65\x78\x74\x70\x61\x74\x68","\x76\x2D\x74\x65\x78\x74\x2D\x61\x6C\x69\x67\x6E\x3A","\x73\x74\x72\x69\x6E\x67","\x73\x65\x74\x53\x74\x61\x74\x65\x73","\x67\x75\x69\x64\x65\x58","\x67\x75\x69\x64\x65\x59","\x67\x65\x74\x47\x75\x69\x64\x65\x54\x6F\x6C\x65\x72\x61\x6E\x63\x65","\x63\x72\x65\x61\x74\x65\x47\x75\x69\x64\x65\x53\x68\x61\x70\x65","\x69\x73\x44\x61\x73\x68\x65\x64","\x44\x49\x41\x4C\x45\x43\x54\x5F\x56\x4D\x4C","\x67\x65\x74\x4F\x76\x65\x72\x6C\x61\x79\x50\x61\x6E\x65","\x70\x6F\x69\x6E\x74\x73","\x73\x63\x72\x6F\x6C\x6C\x57\x69\x64\x74\x68","\x64\x65\x73\x63","\x70\x61\x72\x73\x65\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x70\x61\x72\x73\x65\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74\x73","\x64\x65\x66\x61\x75\x6C\x74\x4C\x6F\x63\x61\x6C\x69\x7A\x65\x64","\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74\x73","\x77\x30","\x68\x30","\x62\x67\x4E\x6F\x64\x65","\x66\x67\x4E\x6F\x64\x65","\x66\x6F\x72\x65\x67\x72\x6F\x75\x6E\x64","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64","\x76\x61\x72\x69\x61\x62\x6C\x65","\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x73","\x67\x65\x74\x43\x68\x69\x6C\x64\x4E\x6F\x64\x65\x73","\x70\x61\x72\x73\x65\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74","\x65\x76\x61\x6C\x75\x61\x74\x65\x54\x65\x78\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x65\x76\x61\x6C\x75\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x6C\x6F\x63\x61\x6C\x69\x7A\x65\x64","\x65\x76\x61\x6C","\x64\x72\x61\x77\x53\x68\x61\x70\x65","\x64\x72\x61\x77\x43\x68\x69\x6C\x64\x72\x65\x6E","\x63\x6F\x6D\x70\x75\x74\x65\x41\x73\x70\x65\x63\x74","\x69\x6E\x68\x65\x72\x69\x74","\x67\x65\x74\x4E\x75\x6D\x62\x65\x72","\x64\x72\x61\x77\x4E\x6F\x64\x65","\x66\x69\x78\x65\x64","\x61\x72\x63","\x78\x2D\x61\x78\x69\x73\x2D\x72\x6F\x74\x61\x74\x69\x6F\x6E","\x6C\x61\x72\x67\x65\x2D\x61\x72\x63\x2D\x66\x6C\x61\x67","\x73\x77\x65\x65\x70\x2D\x66\x6C\x61\x67","\x52\x45\x43\x54\x41\x4E\x47\x4C\x45\x5F\x52\x4F\x55\x4E\x44\x49\x4E\x47\x5F\x46\x41\x43\x54\x4F\x52","\x61\x6C\x69\x67\x6E\x2D\x73\x68\x61\x70\x65","\x69\x6E\x63\x6C\x75\x64\x65\x2D\x73\x68\x61\x70\x65","\x67\x65\x74\x53\x74\x65\x6E\x63\x69\x6C","\x73\x74\x65\x6E\x63\x69\x6C","\x62\x6F\x75\x6E\x64\x73","\x62\x6F\x75\x6E\x64\x69\x6E\x67\x42\x6F\x78","\x73\x76\x67\x53\x74\x72\x6F\x6B\x65\x54\x6F\x6C\x65\x72\x61\x6E\x63\x65","\x73\x74\x65\x6E\x63\x69\x6C\x50\x6F\x69\x6E\x74\x65\x72\x45\x76\x65\x6E\x74\x73","\x69\x73\x50\x61\x72\x73\x65\x56\x6D\x6C","\x69\x73\x48\x74\x6D\x6C\x41\x6C\x6C\x6F\x77\x65\x64","\x67\x65\x74\x53\x76\x67\x53\x63\x72\x65\x65\x6E\x4F\x66\x66\x73\x65\x74","\x63\x72\x65\x61\x74\x65\x53\x76\x67","\x63\x72\x65\x61\x74\x65\x48\x74\x6D\x6C","\x63\x72\x65\x61\x74\x65\x56\x6D\x6C","\x72\x65\x63\x6F\x6E\x66\x69\x67\x75\x72\x65","\x75\x70\x64\x61\x74\x65\x42\x6F\x75\x6E\x64\x73\x46\x72\x6F\x6D\x50\x6F\x69\x6E\x74\x73","\x63\x68\x65\x63\x6B\x42\x6F\x75\x6E\x64\x73","\x72\x65\x64\x72\x61\x77\x48\x74\x6D\x6C\x53\x68\x61\x70\x65","\x72\x65\x64\x72\x61\x77\x53\x68\x61\x70\x65","\x75\x70\x64\x61\x74\x65\x42\x6F\x75\x6E\x64\x69\x6E\x67\x42\x6F\x78","\x63\x72\x65\x61\x74\x65\x56\x6D\x6C\x47\x72\x6F\x75\x70","\x63\x72\x65\x61\x74\x65\x43\x61\x6E\x76\x61\x73","\x68\x61\x73\x43\x68\x69\x6C\x64\x4E\x6F\x64\x65\x73","\x6C\x61\x73\x74\x43\x68\x69\x6C\x64","\x62\x65\x66\x6F\x72\x65\x65\x6E\x64","\x69\x6E\x73\x65\x72\x74\x41\x64\x6A\x61\x63\x65\x6E\x74\x48\x54\x4D\x4C","\x61\x64\x64\x54\x72\x61\x6E\x73\x70\x61\x72\x65\x6E\x74\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x46\x69\x6C\x74\x65\x72","\x64\x65\x73\x74\x72\x6F\x79\x43\x61\x6E\x76\x61\x73","\x75\x70\x64\x61\x74\x65\x56\x6D\x6C\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x6D\x78\x52\x65\x66\x43\x6F\x75\x6E\x74","\x6F\x6C\x64\x47\x72\x61\x64\x69\x65\x6E\x74\x73","\x72\x65\x6C\x65\x61\x73\x65\x53\x76\x67\x47\x72\x61\x64\x69\x65\x6E\x74\x73","\x69\x73\x50\x61\x69\x6E\x74\x42\x6F\x75\x6E\x64\x73\x49\x6E\x76\x65\x72\x74\x65\x64","\x75\x70\x64\x61\x74\x65\x54\x72\x61\x6E\x73\x66\x6F\x72\x6D","\x63\x6F\x6E\x66\x69\x67\x75\x72\x65\x43\x61\x6E\x76\x61\x73","\x70\x61\x69\x6E\x74\x53\x74\x65\x6E\x63\x69\x6C\x53\x68\x61\x70\x65","\x70\x61\x69\x6E\x74\x45\x64\x67\x65\x53\x68\x61\x70\x65","\x70\x61\x69\x6E\x74\x56\x65\x72\x74\x65\x78\x53\x68\x61\x70\x65","\x69\x73\x53\x68\x61\x64\x6F\x77","\x67\x65\x74\x47\x72\x61\x64\x69\x65\x6E\x74\x42\x6F\x75\x6E\x64\x73","\x67\x65\x74\x53\x68\x61\x70\x65\x52\x6F\x74\x61\x74\x69\x6F\x6E","\x61\x64\x64\x54\x72\x61\x6E\x73\x70\x61\x72\x65\x6E\x74\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x52\x65\x63\x74\x61\x6E\x67\x6C\x65","\x73\x65\x74\x54\x72\x61\x6E\x73\x70\x61\x72\x65\x6E\x74\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x70\x61\x69\x6E\x74\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64","\x70\x61\x69\x6E\x74\x46\x6F\x72\x65\x67\x72\x6F\x75\x6E\x64","\x67\x65\x74\x41\x72\x63\x53\x69\x7A\x65","\x70\x61\x69\x6E\x74\x47\x6C\x61\x73\x73\x45\x66\x66\x65\x63\x74","\x23\x66\x66\x66\x66\x66\x66","\x69\x73\x52\x6F\x75\x6E\x64\x65\x64","\x73\x74\x65\x6E\x63\x69\x6C\x46\x6C\x69\x70\x48","\x73\x74\x65\x6E\x63\x69\x6C\x46\x6C\x69\x70\x56","\x73\x65\x74\x43\x75\x72\x73\x6F\x72","\x67\x65\x74\x43\x75\x72\x73\x6F\x72","\x63\x72\x65\x61\x74\x65\x42\x6F\x75\x6E\x64\x69\x6E\x67\x42\x6F\x78","\x61\x75\x67\x6D\x65\x6E\x74\x42\x6F\x75\x6E\x64\x69\x6E\x67\x42\x6F\x78","\x67\x65\x74\x42\x6F\x75\x6E\x64\x69\x6E\x67\x42\x6F\x78","\x67\x65\x74\x52\x6F\x74\x61\x74\x69\x6F\x6E","\x67\x65\x74\x54\x65\x78\x74\x52\x6F\x74\x61\x74\x69\x6F\x6E","\x76\x65\x72\x74\x69\x63\x61\x6C\x54\x65\x78\x74\x52\x6F\x74\x61\x74\x69\x6F\x6E","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x75\x72\x6C\x28\x27","\x2F\x74\x72\x61\x6E\x73\x70\x61\x72\x65\x6E\x74\x2E\x67\x69\x66\x27\x29","\x73\x74\x65\x6E\x63\x69\x6C\x73","\x6D\x61\x72\x6B\x65\x72\x73","\x41\x52\x52\x4F\x57\x5F\x43\x4C\x41\x53\x53\x49\x43","\x41\x52\x52\x4F\x57\x5F\x44\x49\x41\x4D\x4F\x4E\x44","\x61\x64\x64\x4D\x61\x72\x6B\x65\x72","\x72\x65\x64\x72\x61\x77\x50\x61\x74\x68","\x75\x70\x64\x61\x74\x65\x48\x74\x6D\x6C\x42\x6F\x75\x6E\x64\x73","\x75\x70\x64\x61\x74\x65\x48\x74\x6D\x6C\x46\x69\x6C\x74\x65\x72\x73","\x75\x70\x64\x61\x74\x65\x48\x74\x6D\x6C\x43\x6F\x6C\x6F\x72\x73","\x62\x6F\x72\x64\x65\x72\x57\x69\x64\x74\x68","\x62\x6F\x72\x64\x65\x72\x43\x6F\x6C\x6F\x72","\x73\x6F\x6C\x69\x64","\x70\x72\x6F\x67\x69\x64\x3A\x44\x58\x49\x6D\x61\x67\x65\x54\x72\x61\x6E\x73\x66\x6F\x72\x6D\x2E\x4D\x69\x63\x72\x6F\x73\x6F\x66\x74\x2E\x64\x72\x6F\x70\x53\x68\x61\x64\x6F\x77\x20\x28\x4F\x66\x66\x58\x3D\x27","\x27\x2C\x20\x4F\x66\x66\x59\x3D\x27","\x27\x2C\x20\x43\x6F\x6C\x6F\x72\x3D\x27","\x27\x29","\x70\x72\x6F\x67\x69\x64\x3A\x44\x58\x49\x6D\x61\x67\x65\x54\x72\x61\x6E\x73\x66\x6F\x72\x6D\x2E\x4D\x69\x63\x72\x6F\x73\x6F\x66\x74\x2E\x67\x72\x61\x64\x69\x65\x6E\x74\x28\x73\x74\x61\x72\x74\x43\x6F\x6C\x6F\x72\x53\x74\x72\x3D\x27","\x27\x2C\x20\x65\x6E\x64\x43\x6F\x6C\x6F\x72\x53\x74\x72\x3D\x27","\x27\x2C\x20\x67\x72\x61\x64\x69\x65\x6E\x74\x54\x79\x70\x65\x3D\x27","\x70\x61\x69\x6E\x74\x4C\x69\x6E\x65","\x61\x72\x72\x6F\x77\x57\x69\x64\x74\x68","\x41\x52\x52\x4F\x57\x5F\x57\x49\x44\x54\x48","\x41\x52\x52\x4F\x57\x5F\x53\x50\x41\x43\x49\x4E\x47","\x41\x52\x52\x4F\x57\x5F\x53\x49\x5A\x45","\x44\x45\x46\x41\x55\x4C\x54\x5F\x46\x4F\x4E\x54\x53\x54\x59\x4C\x45","\x63\x6C\x69\x70\x70\x65\x64","\x62\x61\x73\x65\x53\x70\x61\x63\x69\x6E\x67\x54\x6F\x70","\x62\x61\x73\x65\x53\x70\x61\x63\x69\x6E\x67\x42\x6F\x74\x74\x6F\x6D","\x62\x61\x73\x65\x53\x70\x61\x63\x69\x6E\x67\x4C\x65\x66\x74","\x62\x61\x73\x65\x53\x70\x61\x63\x69\x6E\x67\x52\x69\x67\x68\x74","\x72\x65\x70\x6C\x61\x63\x65\x4C\x69\x6E\x65\x66\x65\x65\x64\x73","\x69\x67\x6E\x6F\x72\x65\x43\x6C\x69\x70\x70\x65\x64\x53\x74\x72\x69\x6E\x67\x53\x69\x7A\x65","\x69\x67\x6E\x6F\x72\x65\x53\x74\x72\x69\x6E\x67\x53\x69\x7A\x65","\x74\x65\x78\x74\x44\x69\x76","\x75\x70\x64\x61\x74\x65\x53\x69\x7A\x65","\x6D\x61\x72\x67\x69\x6E","\x44\x49\x41\x4C\x45\x43\x54\x5F\x53\x54\x52\x49\x43\x54\x48\x54\x4D\x4C","\x75\x70\x64\x61\x74\x65\x56\x61\x6C\x75\x65","\x75\x70\x64\x61\x74\x65\x48\x74\x6D\x6C\x54\x72\x61\x6E\x73\x66\x6F\x72\x6D","\x75\x70\x64\x61\x74\x65\x48\x74\x6D\x6C\x46\x69\x6C\x74\x65\x72","\x54\x72\x61\x6E\x73\x66\x6F\x72\x6D\x4F\x72\x69\x67\x69\x6E","\x25\x20","\x54\x72\x61\x6E\x73\x66\x6F\x72\x6D","\x25\x2C","\x25\x29\x73\x63\x61\x6C\x65\x28","\x29\x20\x72\x6F\x74\x61\x74\x65\x28","\x64\x65\x67\x29","\x30\x25\x20\x30\x25","\x25\x29","\x31\x70\x78\x20\x73\x6F\x6C\x69\x64\x20","\x3C\x64\x69\x76\x20\x73\x74\x79\x6C\x65\x3D\x22\x7A\x6F\x6F\x6D\x3A\x31\x3B","\x64\x69\x73\x70\x6C\x61\x79\x3A\x69\x6E\x6C\x69\x6E\x65\x2D\x62\x6C\x6F\x63\x6B\x3B\x5F\x64\x69\x73\x70\x6C\x61\x79\x3A\x69\x6E\x6C\x69\x6E\x65\x3B\x70\x61\x64\x64\x69\x6E\x67\x2D\x62\x6F\x74\x74\x6F\x6D\x3A\x31\x70\x78\x3B\x70\x61\x64\x64\x69\x6E\x67\x2D\x72\x69\x67\x68\x74\x3A\x31\x70\x78\x3B\x6C\x69\x6E\x65\x2D\x68\x65\x69\x67\x68\x74\x3A","\x75\x70\x64\x61\x74\x65\x4D\x61\x72\x67\x69\x6E","\x67\x65\x74\x53\x70\x61\x63\x69\x6E\x67","\x70\x72\x65\x73\x65\x72\x76\x65\x49\x6D\x61\x67\x65\x41\x73\x70\x65\x63\x74","\x69\x6D\x61\x67\x65\x46\x6C\x69\x70\x48","\x69\x6D\x61\x67\x65\x46\x6C\x69\x70\x56","\x70\x72\x6F\x67\x69\x64\x3A\x44\x58\x49\x6D\x61\x67\x65\x54\x72\x61\x6E\x73\x66\x6F\x72\x6D\x2E\x4D\x69\x63\x72\x6F\x73\x6F\x66\x74\x2E\x42\x61\x73\x69\x63\x49\x6D\x61\x67\x65\x28\x72\x6F\x74\x61\x74\x69\x6F\x6E\x3D\x32\x29","\x70\x72\x6F\x67\x69\x64\x3A\x44\x58\x49\x6D\x61\x67\x65\x54\x72\x61\x6E\x73\x66\x6F\x72\x6D\x2E\x4D\x69\x63\x72\x6F\x73\x6F\x66\x74\x2E\x42\x61\x73\x69\x63\x49\x6D\x61\x67\x65\x28\x6D\x69\x72\x72\x6F\x72\x3D\x31\x29","\x70\x72\x6F\x67\x69\x64\x3A\x44\x58\x49\x6D\x61\x67\x65\x54\x72\x61\x6E\x73\x66\x6F\x72\x6D\x2E\x4D\x69\x63\x72\x6F\x73\x6F\x66\x74\x2E\x42\x61\x73\x69\x63\x49\x6D\x61\x67\x65\x28\x72\x6F\x74\x61\x74\x69\x6F\x6E\x3D\x32\x2C\x20\x6D\x69\x72\x72\x6F\x72\x3D\x31\x29","\x69\x6D\x61\x67\x65\x53\x69\x7A\x65","\x44\x45\x46\x41\x55\x4C\x54\x5F\x49\x4D\x41\x47\x45\x53\x49\x5A\x45","\x69\x6E\x64\x69\x63\x61\x74\x6F\x72\x53\x69\x7A\x65","\x69\x6E\x64\x69\x63\x61\x74\x6F\x72","\x70\x61\x69\x6E\x74\x49\x6D\x61\x67\x65","\x70\x61\x69\x6E\x74\x49\x6E\x64\x69\x63\x61\x74\x6F\x72","\x67\x65\x74\x49\x6D\x61\x67\x65\x42\x6F\x75\x6E\x64\x73","\x41\x4C\x49\x47\x4E\x5F\x54\x4F\x50","\x67\x65\x74\x49\x6E\x64\x69\x63\x61\x74\x6F\x72\x42\x6F\x75\x6E\x64\x73","\x63\x72\x65\x61\x74\x65\x4D\x61\x72\x6B\x65\x72","\x53\x54\x59\x4C\x45\x5F\x43\x55\x52\x56\x45\x44","\x70\x61\x69\x6E\x74\x43\x75\x72\x76\x65\x64\x4C\x69\x6E\x65","\x53\x54\x59\x4C\x45\x5F\x53\x54\x41\x52\x54\x53\x49\x5A\x45","\x53\x54\x59\x4C\x45\x5F\x45\x4E\x44\x53\x49\x5A\x45","\x53\x54\x59\x4C\x45\x5F\x53\x54\x41\x52\x54\x41\x52\x52\x4F\x57","\x53\x54\x59\x4C\x45\x5F\x45\x4E\x44\x41\x52\x52\x4F\x57","\x53\x54\x59\x4C\x45\x5F\x53\x54\x41\x52\x54\x46\x49\x4C\x4C","\x53\x54\x59\x4C\x45\x5F\x45\x4E\x44\x46\x49\x4C\x4C","\x70\x61\x69\x6E\x74\x52\x6F\x75\x6E\x64\x65\x64\x53\x77\x69\x6D\x6C\x61\x6E\x65","\x70\x61\x69\x6E\x74\x53\x77\x69\x6D\x6C\x61\x6E\x65","\x70\x61\x69\x6E\x74\x53\x65\x70\x61\x72\x61\x74\x6F\x72","\x75\x73\x65\x42\x6F\x75\x6E\x64\x69\x6E\x67\x42\x6F\x78","\x6D\x6F\x76\x65\x43\x65\x6C\x6C","\x67\x65\x74\x47\x72\x61\x70\x68","\x67\x65\x74\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74","\x67\x65\x74\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65","\x74\x72\x61\x76\x65\x72\x73\x65","\x67\x65\x74\x45\x64\x67\x65\x43\x6F\x75\x6E\x74","\x67\x65\x74\x45\x64\x67\x65\x41\x74","\x67\x65\x74\x54\x65\x72\x6D\x69\x6E\x61\x6C","\x67\x65\x74\x56\x69\x73\x69\x62\x6C\x65\x54\x65\x72\x6D\x69\x6E\x61\x6C","\x69\x73\x56\x65\x72\x74\x65\x78\x4D\x6F\x76\x61\x62\x6C\x65","\x69\x73\x43\x65\x6C\x6C\x4D\x6F\x76\x61\x62\x6C\x65","\x69\x73\x56\x65\x72\x74\x65\x78\x49\x67\x6E\x6F\x72\x65\x64","\x69\x73\x43\x65\x6C\x6C\x56\x69\x73\x69\x62\x6C\x65","\x69\x73\x45\x64\x67\x65\x49\x67\x6E\x6F\x72\x65\x64","\x73\x65\x74\x45\x64\x67\x65\x53\x74\x79\x6C\x65\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65\x73","\x73\x65\x74\x4F\x72\x74\x68\x6F\x67\x6F\x6E\x61\x6C\x45\x64\x67\x65","\x67\x65\x74\x50\x61\x72\x65\x6E\x74\x4F\x66\x66\x73\x65\x74","\x69\x73\x41\x6E\x63\x65\x73\x74\x6F\x72","\x67\x65\x74\x47\x65\x6F\x6D\x65\x74\x72\x79","\x73\x65\x74\x45\x64\x67\x65\x50\x6F\x69\x6E\x74\x73","\x73\x65\x74\x52\x65\x6C\x61\x74\x69\x76\x65","\x73\x65\x74\x47\x65\x6F\x6D\x65\x74\x72\x79","\x73\x65\x74\x56\x65\x72\x74\x65\x78\x4C\x6F\x63\x61\x74\x69\x6F\x6E","\x67\x65\x74\x56\x65\x72\x74\x65\x78\x42\x6F\x75\x6E\x64\x73","\x61\x72\x72\x61\x6E\x67\x65\x47\x72\x6F\x75\x70\x73","\x67\x65\x74\x43\x68\x69\x6C\x64\x56\x65\x72\x74\x69\x63\x65\x73","\x67\x65\x74\x42\x6F\x75\x6E\x64\x69\x6E\x67\x42\x6F\x78\x46\x72\x6F\x6D\x47\x65\x6F\x6D\x65\x74\x72\x79","\x69\x73\x53\x77\x69\x6D\x6C\x61\x6E\x65","\x67\x65\x74\x53\x74\x61\x72\x74\x53\x69\x7A\x65","\x78\x30","\x79\x30","\x6B\x65\x65\x70\x46\x69\x72\x73\x74\x4C\x6F\x63\x61\x74\x69\x6F\x6E","\x72\x65\x73\x69\x7A\x65\x50\x61\x72\x65\x6E\x74","\x72\x65\x73\x69\x7A\x65\x4C\x61\x73\x74","\x69\x73\x48\x6F\x72\x69\x7A\x6F\x6E\x74\x61\x6C","\x67\x65\x74\x49\x6E\x64\x65\x78","\x67\x65\x74\x50\x61\x72\x65\x6E\x74\x53\x69\x7A\x65","\x69\x73\x4C\x61\x79\x65\x72","\x63\x75\x72\x72\x65\x6E\x74\x52\x6F\x6F\x74","\x69\x73\x43\x65\x6C\x6C\x43\x6F\x6C\x6C\x61\x70\x73\x65\x64","\x72\x65\x73\x69\x7A\x65\x56\x65\x72\x74\x69\x63\x65\x73","\x69\x6E\x76\x65\x72\x74","\x67\x72\x6F\x75\x70\x50\x61\x64\x64\x69\x6E\x67","\x70\x61\x72\x65\x6E\x74\x73\x43\x68\x61\x6E\x67\x65\x64","\x6D\x6F\x76\x65\x54\x72\x65\x65","\x6C\x65\x76\x65\x6C\x44\x69\x73\x74\x61\x6E\x63\x65","\x6E\x6F\x64\x65\x44\x69\x73\x74\x61\x6E\x63\x65","\x72\x65\x73\x65\x74\x45\x64\x67\x65\x73","\x70\x72\x65\x66\x48\x6F\x7A\x45\x64\x67\x65\x53\x65\x70","\x70\x72\x65\x66\x56\x65\x72\x74\x45\x64\x67\x65\x4F\x66\x66","\x6D\x69\x6E\x45\x64\x67\x65\x4A\x65\x74\x74\x79","\x63\x68\x61\x6E\x6E\x65\x6C\x42\x75\x66\x66\x65\x72","\x65\x64\x67\x65\x52\x6F\x75\x74\x69\x6E\x67","\x67\x65\x74\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x73","\x66\x69\x6E\x64\x54\x72\x65\x65\x52\x6F\x6F\x74\x73","\x64\x66\x73","\x6C\x61\x79\x6F\x75\x74","\x68\x6F\x72\x69\x7A\x6F\x6E\x74\x61\x6C\x4C\x61\x79\x6F\x75\x74","\x76\x65\x72\x74\x69\x63\x61\x6C\x4C\x61\x79\x6F\x75\x74","\x6D\x6F\x76\x65\x4E\x6F\x64\x65","\x61\x64\x6A\x75\x73\x74\x50\x61\x72\x65\x6E\x74\x73","\x6C\x6F\x63\x61\x6C\x45\x64\x67\x65\x50\x72\x6F\x63\x65\x73\x73\x69\x6E\x67","\x6E\x65\x78\x74","\x63\x72\x65\x61\x74\x65\x4E\x6F\x64\x65","\x61\x74\x74\x61\x63\x68\x50\x61\x72\x65\x6E\x74","\x6C\x61\x79\x6F\x75\x74\x4C\x65\x61\x66","\x6F\x66\x66\x73\x65\x74\x58","\x6F\x66\x66\x73\x65\x74\x59","\x75\x70\x70\x65\x72\x48\x65\x61\x64","\x63\x6F\x6E\x74\x6F\x75\x72","\x63\x72\x65\x61\x74\x65\x4C\x69\x6E\x65","\x6C\x6F\x77\x65\x72\x48\x65\x61\x64","\x75\x70\x70\x65\x72\x54\x61\x69\x6C","\x6C\x6F\x77\x65\x72\x54\x61\x69\x6C","\x6D\x65\x72\x67\x65","\x62\x72\x69\x64\x67\x65","\x73\x6F\x72\x74\x43\x65\x6C\x6C\x73","\x70\x72\x6F\x63\x65\x73\x73\x4E\x6F\x64\x65\x4F\x75\x74\x67\x6F\x69\x6E\x67","\x67\x65\x74\x45\x64\x67\x65\x73\x42\x65\x74\x77\x65\x65\x6E","\x77\x65\x69\x67\x68\x74\x65\x64\x56\x61\x6C\x75\x65","\x6E\x75\x64\x67\x65","\x76\x69\x73\x69\x74\x65\x64","\x72\x61\x6E\x6B\x49\x6E\x64\x65\x78","\x75\x73\x65\x49\x6E\x70\x75\x74\x4F\x72\x69\x67\x69\x6E","\x64\x69\x73\x61\x62\x6C\x65\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x66\x6F\x72\x63\x65\x43\x6F\x6E\x73\x74\x61\x6E\x74","\x66\x6F\x72\x63\x65\x43\x6F\x6E\x73\x74\x61\x6E\x74\x53\x71\x75\x61\x72\x65\x64","\x6D\x69\x6E\x44\x69\x73\x74\x61\x6E\x63\x65\x4C\x69\x6D\x69\x74","\x6D\x61\x78\x44\x69\x73\x74\x61\x6E\x63\x65\x4C\x69\x6D\x69\x74","\x6D\x69\x6E\x44\x69\x73\x74\x61\x6E\x63\x65\x4C\x69\x6D\x69\x74\x53\x71\x75\x61\x72\x65\x64","\x69\x6E\x69\x74\x69\x61\x6C\x54\x65\x6D\x70","\x74\x65\x6D\x70\x65\x72\x61\x74\x75\x72\x65","\x6D\x61\x78\x49\x74\x65\x72\x61\x74\x69\x6F\x6E\x73","\x69\x74\x65\x72\x61\x74\x69\x6F\x6E","\x61\x6C\x6C\x6F\x77\x65\x64\x54\x6F\x52\x75\x6E","\x76\x65\x72\x74\x65\x78\x41\x72\x72\x61\x79","\x67\x65\x74\x42\x6F\x75\x6E\x64\x73","\x69\x6E\x64\x69\x63\x65\x73","\x64\x69\x73\x70\x58","\x64\x69\x73\x70\x59","\x63\x65\x6C\x6C\x4C\x6F\x63\x61\x74\x69\x6F\x6E","\x69\x73\x4D\x6F\x76\x65\x61\x62\x6C\x65","\x6E\x65\x69\x67\x68\x62\x6F\x75\x72\x73","\x72\x61\x64\x69\x75\x73","\x72\x61\x64\x69\x75\x73\x53\x71\x75\x61\x72\x65\x64","\x67\x65\x74\x4F\x70\x70\x6F\x73\x69\x74\x65\x73","\x72\x65\x73\x65\x74\x45\x64\x67\x65","\x63\x61\x6C\x63\x52\x65\x70\x75\x6C\x73\x69\x6F\x6E","\x63\x61\x6C\x63\x41\x74\x74\x72\x61\x63\x74\x69\x6F\x6E","\x63\x61\x6C\x63\x50\x6F\x73\x69\x74\x69\x6F\x6E\x73","\x72\x65\x64\x75\x63\x65\x54\x65\x6D\x70\x65\x72\x61\x74\x75\x72\x65","\x72\x61\x6E\x64\x6F\x6D","\x6D\x6F\x76\x65\x43\x69\x72\x63\x6C\x65","\x67\x65\x74\x52\x61\x64\x69\x75\x73","\x63\x69\x72\x63\x6C\x65","\x66\x69\x6E\x64\x50\x61\x72\x61\x6C\x6C\x65\x6C\x73","\x67\x65\x74\x45\x64\x67\x65\x49\x64","\x72\x6F\x75\x74\x65","\x6C\x61\x79\x6F\x75\x74\x73","\x6D\x61\x73\x74\x65\x72","\x70\x6C\x61\x63\x65\x4C\x61\x62\x65\x6C\x73","\x61\x76\x6F\x69\x64","\x69\x6E\x74\x65\x72\x73\x65\x63\x74\x73","\x74\x65\x6D\x70","\x6D\x61\x78\x52\x61\x6E\x6B","\x6D\x69\x6E\x52\x61\x6E\x6B","\x6E\x65\x78\x74\x4C\x61\x79\x65\x72\x43\x6F\x6E\x6E\x65\x63\x74\x65\x64\x43\x65\x6C\x6C\x73","\x70\x72\x65\x76\x69\x6F\x75\x73\x4C\x61\x79\x65\x72\x43\x6F\x6E\x6E\x65\x63\x74\x65\x64\x43\x65\x6C\x6C\x73","\x67\x65\x74\x4E\x65\x78\x74\x4C\x61\x79\x65\x72\x43\x6F\x6E\x6E\x65\x63\x74\x65\x64\x43\x65\x6C\x6C\x73","\x67\x65\x74\x50\x72\x65\x76\x69\x6F\x75\x73\x4C\x61\x79\x65\x72\x43\x6F\x6E\x6E\x65\x63\x74\x65\x64\x43\x65\x6C\x6C\x73","\x67\x65\x74\x47\x65\x6E\x65\x72\x61\x6C\x50\x75\x72\x70\x6F\x73\x65\x56\x61\x72\x69\x61\x62\x6C\x65","\x73\x65\x74\x47\x65\x6E\x65\x72\x61\x6C\x50\x75\x72\x70\x6F\x73\x65\x56\x61\x72\x69\x61\x62\x6C\x65","\x73\x65\x74\x58","\x73\x65\x74\x59","\x63\x6F\x6E\x6E\x65\x63\x74\x73\x41\x73\x54\x61\x72\x67\x65\x74","\x63\x6F\x6E\x6E\x65\x63\x74\x73\x41\x73\x53\x6F\x75\x72\x63\x65","\x68\x61\x73\x68\x43\x6F\x64\x65","\x67\x65\x74\x52\x61\x6E\x6B\x56\x61\x6C\x75\x65","\x67\x65\x74\x43\x6F\x72\x65\x43\x65\x6C\x6C","\x65\x64\x67\x65\x73","\x69\x73\x52\x65\x76\x65\x72\x73\x65\x64","\x74\x69\x67\x68\x74\x65\x6E\x54\x6F\x53\x6F\x75\x72\x63\x65","\x72\x6F\x6F\x74\x73","\x76\x65\x72\x74\x65\x78\x4D\x61\x70\x70\x65\x72","\x65\x64\x67\x65\x4D\x61\x70\x70\x65\x72","\x53\x4F\x55\x52\x43\x45\x53\x43\x41\x4E\x53\x54\x41\x52\x54\x52\x41\x4E\x4B","\x63\x72\x65\x61\x74\x65\x49\x6E\x74\x65\x72\x6E\x61\x6C\x43\x65\x6C\x6C\x73","\x72\x61\x6E\x6B\x73","\x64\x66\x73\x43\x6F\x75\x6E\x74","\x69\x6E\x69\x74\x69\x61\x6C\x52\x61\x6E\x6B","\x73\x6C\x69\x63\x65","\x66\x69\x78\x52\x61\x6E\x6B\x73","\x65\x78\x74\x65\x6E\x64\x65\x64\x44\x66\x73","\x6E\x65\x73\x74\x65\x64\x42\x65\x73\x74\x52\x61\x6E\x6B\x73","\x63\x75\x72\x72\x65\x6E\x74\x42\x65\x73\x74\x43\x72\x6F\x73\x73\x69\x6E\x67\x73","\x69\x74\x65\x72\x61\x74\x69\x6F\x6E\x73\x57\x69\x74\x68\x6F\x75\x74\x49\x6D\x70\x72\x6F\x76\x65\x6D\x65\x6E\x74","\x6D\x61\x78\x4E\x6F\x49\x6D\x70\x72\x6F\x76\x65\x6D\x65\x6E\x74\x49\x74\x65\x72\x61\x74\x69\x6F\x6E\x73","\x63\x61\x6C\x63\x75\x6C\x61\x74\x65\x43\x72\x6F\x73\x73\x69\x6E\x67\x73","\x77\x65\x69\x67\x68\x74\x65\x64\x4D\x65\x64\x69\x61\x6E","\x74\x72\x61\x6E\x73\x70\x6F\x73\x65","\x63\x61\x6C\x63\x75\x6C\x61\x74\x65\x52\x61\x6E\x6B\x43\x72\x6F\x73\x73\x69\x6E\x67","\x6D\x65\x64\x69\x61\x6E\x52\x61\x6E\x6B","\x6D\x65\x64\x69\x61\x6E\x56\x61\x6C\x75\x65","\x6C\x65\x6E\x74\x68","\x67\x65\x74\x49\x6E\x63\x6F\x6D\x69\x6E\x67\x45\x64\x67\x65\x73","\x69\x6E\x74\x72\x61\x43\x65\x6C\x6C\x53\x70\x61\x63\x69\x6E\x67","\x69\x6E\x74\x65\x72\x52\x61\x6E\x6B\x43\x65\x6C\x6C\x53\x70\x61\x63\x69\x6E\x67","\x6F\x72\x69\x65\x6E\x74\x61\x74\x69\x6F\x6E","\x69\x6E\x69\x74\x69\x61\x6C\x58","\x70\x61\x72\x61\x6C\x6C\x65\x6C\x45\x64\x67\x65\x53\x70\x61\x63\x69\x6E\x67","\x6A\x65\x74\x74\x79\x50\x6F\x73\x69\x74\x69\x6F\x6E\x73","\x6C\x69\x6D\x69\x74\x58","\x63\x75\x72\x72\x65\x6E\x74\x58\x44\x65\x6C\x74\x61","\x77\x69\x64\x65\x73\x74\x52\x61\x6E\x6B","\x72\x61\x6E\x6B\x54\x6F\x70\x59","\x72\x61\x6E\x6B\x42\x6F\x74\x74\x6F\x6D\x59","\x77\x69\x64\x65\x73\x74\x52\x61\x6E\x6B\x56\x61\x6C\x75\x65","\x72\x61\x6E\x6B\x57\x69\x64\x74\x68\x73","\x72\x61\x6E\x6B\x59","\x66\x69\x6E\x65\x54\x75\x6E\x69\x6E\x67","\x50\x4F\x4C\x59\x4C\x49\x4E\x45","\x6E\x65\x78\x74\x4C\x61\x79\x65\x72\x43\x6F\x6E\x6E\x65\x63\x74\x65\x64\x43\x61\x63\x68\x65","\x70\x72\x65\x76\x69\x6F\x75\x73\x4C\x61\x79\x65\x72\x43\x6F\x6E\x6E\x65\x63\x74\x65\x64\x43\x61\x63\x68\x65","\x70\x72\x69\x6E\x74\x53\x74\x61\x74\x75\x73","\x3D\x3D\x3D\x3D\x3D\x3D\x43\x6F\x6F\x72\x64\x20\x61\x73\x73\x69\x67\x6E\x6D\x65\x6E\x74\x20\x64\x65\x62\x75\x67\x3D\x3D\x3D\x3D\x3D\x3D\x3D","\x52\x61\x6E\x6B\x20","\x20\x3A\x20","\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D","\x69\x6E\x69\x74\x69\x61\x6C\x43\x6F\x6F\x72\x64\x73","\x6D\x69\x6E\x4E\x6F\x64\x65","\x6D\x65\x64\x69\x61\x6E\x50\x6F\x73","\x6D\x69\x6E\x50\x61\x74\x68","\x73\x65\x74\x43\x65\x6C\x6C\x4C\x6F\x63\x61\x74\x69\x6F\x6E\x73","\x6D\x65\x64\x69\x61\x6E\x58\x56\x61\x6C\x75\x65","\x72\x61\x6E\x6B\x4D\x65\x64\x69\x61\x6E\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x63\x61\x6C\x63\x75\x6C\x61\x74\x65\x64\x57\x65\x69\x67\x68\x74\x65\x64\x56\x61\x6C\x75\x65","\x63\x61\x6C\x63\x75\x6C\x61\x74\x65\x57\x69\x64\x65\x73\x74\x52\x61\x6E\x6B","\x72\x61\x6E\x6B\x43\x6F\x6F\x72\x64\x69\x6E\x61\x74\x65\x73","\x65\x64\x67\x65\x2E\x65\x64\x67\x65\x73\x20\x69\x73\x20\x6E\x75\x6C\x6C","\x41\x74\x20\x6C\x65\x61\x73\x74\x20\x6F\x6E\x65\x20\x63\x65\x6C\x6C\x20\x68\x61\x73\x20\x6E\x6F\x20\x62\x6F\x75\x6E\x64\x73","\x72\x65\x70\x6F\x73\x69\x74\x69\x6F\x6E\x56\x61\x6C\x69\x64","\x4D\x41\x58\x5F\x56\x41\x4C\x55\x45","\x4F\x52\x54\x48\x4F\x47\x4F\x4E\x41\x4C","\x43\x55\x52\x56\x45","\x73\x65\x74\x45\x64\x67\x65\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x69\x73\x50\x6F\x72\x74","\x70\x72\x6F\x63\x65\x73\x73\x52\x65\x76\x65\x72\x73\x65\x64\x45\x64\x67\x65","\x64\x65\x74\x65\x72\x6D\x69\x6E\x69\x73\x74\x69\x63","\x6D\x6F\x76\x65\x50\x61\x72\x65\x6E\x74","\x70\x61\x72\x65\x6E\x74\x42\x6F\x72\x64\x65\x72","\x69\x6E\x74\x65\x72\x48\x69\x65\x72\x61\x72\x63\x68\x79\x53\x70\x61\x63\x69\x6E\x67","\x74\x72\x61\x76\x65\x72\x73\x65\x41\x6E\x63\x65\x73\x74\x6F\x72\x73","\x65\x64\x67\x65\x73\x43\x61\x63\x68\x65","\x72\x75\x6E","\x75\x70\x64\x61\x74\x65\x47\x72\x6F\x75\x70\x42\x6F\x75\x6E\x64\x73","\x66\x69\x6E\x64\x52\x6F\x6F\x74\x73","\x63\x6F\x6E\x63\x61\x74","\x69\x73\x56\x61\x6C\x69\x64\x41\x6E\x63\x65\x73\x74\x6F\x72","\x66\x69\x6C\x74\x65\x72\x44\x65\x73\x63\x65\x6E\x64\x61\x6E\x74\x73","\x63\x79\x63\x6C\x65\x53\x74\x61\x67\x65","\x6C\x61\x79\x65\x72\x69\x6E\x67\x53\x74\x61\x67\x65","\x63\x72\x6F\x73\x73\x69\x6E\x67\x53\x74\x61\x67\x65","\x70\x6C\x61\x63\x65\x6D\x65\x6E\x74\x53\x74\x61\x67\x65","\x63\x75\x72\x72\x65\x6E\x74\x45\x64\x69\x74","\x73\x65\x74\x52\x6F\x6F\x74","\x6D\x61\x69\x6E\x74\x61\x69\x6E\x45\x64\x67\x65\x50\x61\x72\x65\x6E\x74","\x63\x72\x65\x61\x74\x65\x49\x64\x73","\x70\x6F\x73\x74\x66\x69\x78","\x6E\x65\x78\x74\x49\x64","\x75\x70\x64\x61\x74\x65\x4C\x65\x76\x65\x6C","\x65\x6E\x64\x69\x6E\x67\x55\x70\x64\x61\x74\x65","\x63\x72\x65\x61\x74\x65\x52\x6F\x6F\x74","\x69\x73\x43\x72\x65\x61\x74\x65\x49\x64\x73","\x73\x65\x74\x43\x72\x65\x61\x74\x65\x49\x64\x73","\x69\x6E\x73\x65\x72\x74","\x66\x69\x6C\x74\x65\x72\x43\x65\x6C\x6C\x73","\x67\x65\x74\x44\x65\x73\x63\x65\x6E\x64\x61\x6E\x74\x73","\x72\x6F\x6F\x74\x43\x68\x61\x6E\x67\x65\x64","\x63\x65\x6C\x6C\x41\x64\x64\x65\x64","\x69\x73\x52\x6F\x6F\x74","\x75\x70\x64\x61\x74\x65\x45\x64\x67\x65\x50\x61\x72\x65\x6E\x74\x73","\x63\x72\x65\x61\x74\x65\x49\x64","\x73\x65\x74\x49\x64","\x69\x73\x4E\x75\x6D\x65\x72\x69\x63","\x75\x70\x64\x61\x74\x65\x45\x64\x67\x65\x50\x61\x72\x65\x6E\x74","\x67\x65\x74\x4E\x65\x61\x72\x65\x73\x74\x43\x6F\x6D\x6D\x6F\x6E\x41\x6E\x63\x65\x73\x74\x6F\x72","\x67\x65\x74\x4F\x72\x69\x67\x69\x6E","\x50\x41\x54\x48\x5F\x53\x45\x50\x41\x52\x41\x54\x4F\x52","\x67\x65\x74\x50\x61\x72\x65\x6E\x74\x50\x61\x74\x68","\x70\x61\x72\x65\x6E\x74\x46\x6F\x72\x43\x65\x6C\x6C\x43\x68\x61\x6E\x67\x65\x64","\x67\x65\x74\x43\x68\x69\x6C\x64\x72\x65\x6E","\x63\x68\x69\x6C\x64\x72\x65\x6E","\x67\x65\x74\x43\x68\x69\x6C\x64\x43\x65\x6C\x6C\x73","\x67\x65\x74\x43\x68\x69\x6C\x64\x45\x64\x67\x65\x73","\x73\x65\x74\x54\x65\x72\x6D\x69\x6E\x61\x6C","\x73\x65\x74\x54\x65\x72\x6D\x69\x6E\x61\x6C\x73","\x74\x65\x72\x6D\x69\x6E\x61\x6C\x46\x6F\x72\x43\x65\x6C\x6C\x43\x68\x61\x6E\x67\x65\x64","\x69\x6E\x73\x65\x72\x74\x45\x64\x67\x65","\x72\x65\x6D\x6F\x76\x65\x45\x64\x67\x65","\x67\x65\x74\x44\x69\x72\x65\x63\x74\x65\x64\x45\x64\x67\x65\x43\x6F\x75\x6E\x74","\x67\x65\x74\x4F\x75\x74\x67\x6F\x69\x6E\x67\x45\x64\x67\x65\x73","\x67\x65\x74\x54\x6F\x70\x6D\x6F\x73\x74\x43\x65\x6C\x6C\x73","\x69\x73\x43\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65","\x73\x65\x74\x56\x61\x6C\x75\x65","\x76\x61\x6C\x75\x65\x46\x6F\x72\x43\x65\x6C\x6C\x43\x68\x61\x6E\x67\x65\x64","\x76\x61\x6C\x75\x65\x43\x68\x61\x6E\x67\x65\x64","\x67\x65\x6F\x6D\x65\x74\x72\x79\x46\x6F\x72\x43\x65\x6C\x6C\x43\x68\x61\x6E\x67\x65\x64","\x73\x74\x79\x6C\x65\x46\x6F\x72\x43\x65\x6C\x6C\x43\x68\x61\x6E\x67\x65\x64","\x69\x73\x43\x6F\x6C\x6C\x61\x70\x73\x65\x64","\x73\x65\x74\x43\x6F\x6C\x6C\x61\x70\x73\x65\x64","\x63\x6F\x6C\x6C\x61\x70\x73\x65\x64\x53\x74\x61\x74\x65\x46\x6F\x72\x43\x65\x6C\x6C\x43\x68\x61\x6E\x67\x65\x64","\x76\x69\x73\x69\x62\x6C\x65\x53\x74\x61\x74\x65\x46\x6F\x72\x43\x65\x6C\x6C\x43\x68\x61\x6E\x67\x65\x64","\x6D\x65\x72\x67\x65\x43\x68\x69\x6C\x64\x72\x65\x6E","\x6D\x65\x72\x67\x65\x43\x68\x69\x6C\x64\x72\x65\x6E\x49\x6D\x70\x6C","\x67\x65\x74\x50\x61\x72\x65\x6E\x74\x73","\x63\x6C\x6F\x6E\x65\x43\x65\x6C\x6C","\x63\x6C\x6F\x6E\x65\x43\x65\x6C\x6C\x49\x6D\x70\x6C","\x72\x65\x73\x74\x6F\x72\x65\x43\x6C\x6F\x6E\x65","\x63\x65\x6C\x6C\x43\x6C\x6F\x6E\x65\x64","\x70\x72\x65\x76\x69\x6F\x75\x73\x49\x6E\x64\x65\x78","\x69\x6E\x64\x65\x78","\x74\x65\x72\x6D\x69\x6E\x61\x6C","\x63\x6F\x6C\x6C\x61\x70\x73\x65\x64","\x61\x74\x74\x72\x69\x62\x75\x74\x65","\x6F\x6E\x49\x6E\x69\x74","\x76\x65\x72\x74\x65\x78","\x65\x64\x67\x65","\x63\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65","\x6D\x78\x54\x72\x61\x6E\x73\x69\x65\x6E\x74","\x69\x64\x20\x76\x61\x6C\x75\x65\x20\x70\x61\x72\x65\x6E\x74\x20\x73\x6F\x75\x72\x63\x65\x20\x74\x61\x72\x67\x65\x74\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x20\x65\x64\x67\x65\x73","\x73\x65\x74\x56\x65\x72\x74\x65\x78","\x73\x65\x74\x45\x64\x67\x65","\x73\x65\x74\x43\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65","\x73\x65\x74\x50\x61\x72\x65\x6E\x74","\x72\x65\x6D\x6F\x76\x65\x46\x72\x6F\x6D\x50\x61\x72\x65\x6E\x74","\x67\x65\x74\x45\x64\x67\x65\x49\x6E\x64\x65\x78","\x72\x65\x6D\x6F\x76\x65\x46\x72\x6F\x6D\x54\x65\x72\x6D\x69\x6E\x61\x6C","\x63\x6C\x6F\x6E\x65\x56\x61\x6C\x75\x65","\x54\x52\x41\x4E\x53\x4C\x41\x54\x45\x5F\x43\x4F\x4E\x54\x52\x4F\x4C\x5F\x50\x4F\x49\x4E\x54\x53","\x61\x6C\x74\x65\x72\x6E\x61\x74\x65\x42\x6F\x75\x6E\x64\x73","\x73\x6F\x75\x72\x63\x65\x50\x6F\x69\x6E\x74","\x74\x61\x72\x67\x65\x74\x50\x6F\x69\x6E\x74","\x73\x77\x61\x70","\x67\x65\x74\x54\x65\x72\x6D\x69\x6E\x61\x6C\x50\x6F\x69\x6E\x74","\x73\x65\x74\x54\x65\x72\x6D\x69\x6E\x61\x6C\x50\x6F\x69\x6E\x74","\x74\x61\x6E","\x70\x6F\x77","\x69\x6E\x74\x65\x72\x73\x65\x63\x74\x69\x6F\x6E","\x53\x54\x59\x4C\x45\x5F\x44\x49\x52\x45\x43\x54\x49\x4F\x4E","\x70\x61\x67\x65\x53\x63\x61\x6C\x65","\x70\x61\x67\x65\x46\x6F\x72\x6D\x61\x74","\x50\x72\x69\x6E\x74\x65\x72\x2D\x66\x72\x69\x65\x6E\x64\x6C\x79\x20\x76\x65\x72\x73\x69\x6F\x6E","\x70\x61\x67\x65\x53\x65\x6C\x65\x63\x74\x6F\x72","\x61\x75\x74\x6F\x4F\x72\x69\x67\x69\x6E","\x70\x72\x69\x6E\x74\x4F\x76\x65\x72\x6C\x61\x79\x73","\x77\x6E\x64","\x70\x61\x67\x65\x43\x6F\x75\x6E\x74","\x67\x65\x74\x57\x69\x6E\x64\x6F\x77","\x67\x65\x74\x44\x6F\x63\x74\x79\x70\x65","\x3C\x6D\x65\x74\x61\x20\x68\x74\x74\x70\x2D\x65\x71\x75\x69\x76\x3D\x22\x58\x2D\x55\x41\x2D\x43\x6F\x6D\x70\x61\x74\x69\x62\x6C\x65\x22\x20\x63\x6F\x6E\x74\x65\x6E\x74\x3D\x22\x49\x45\x3D\x38\x22\x3E","\x69\x6E\x69\x74\x69\x61\x6C\x69\x7A\x65\x4F\x76\x65\x72\x6C\x61\x79","\x67\x65\x74\x44\x72\x61\x77\x50\x61\x6E\x65","\x77\x72\x69\x74\x65\x48\x65\x61\x64","\x3C\x62\x6F\x64\x79\x20\x63\x6C\x61\x73\x73\x3D\x22\x6D\x78\x50\x61\x67\x65\x22\x3E","\x63\x72\x65\x61\x74\x65\x50\x61\x67\x65\x53\x65\x6C\x65\x63\x74\x6F\x72","\x70\x61\x67\x65\x42\x72\x65\x61\x6B\x41\x66\x74\x65\x72","\x61\x6C\x77\x61\x79\x73","\x6D\x78\x50\x61\x67\x65\x42\x72\x65\x61\x6B","\x67\x65\x74\x43\x6F\x76\x65\x72\x50\x61\x67\x65\x73","\x67\x65\x74\x41\x70\x70\x65\x6E\x64\x69\x63\x65\x73","\x61\x64\x64\x47\x72\x61\x70\x68\x46\x72\x61\x67\x6D\x65\x6E\x74","\x72\x65\x6E\x64\x65\x72\x50\x61\x67\x65","\x6D\x78\x50\x61\x67\x65\x2D","\x3C\x74\x69\x74\x6C\x65\x3E","\x3C\x2F\x74\x69\x74\x6C\x65\x3E","\x3C\x73\x74\x79\x6C\x65\x20\x74\x79\x70\x65\x3D\x22\x74\x65\x78\x74\x2F\x63\x73\x73\x22\x3E","\x40\x6D\x65\x64\x69\x61\x20\x70\x72\x69\x6E\x74\x20\x7B","\x20\x20\x74\x61\x62\x6C\x65\x2E\x6D\x78\x50\x61\x67\x65\x53\x65\x6C\x65\x63\x74\x6F\x72\x20\x7B\x20\x64\x69\x73\x70\x6C\x61\x79\x3A\x20\x6E\x6F\x6E\x65\x3B\x20\x7D","\x20\x20\x68\x72\x2E\x6D\x78\x50\x61\x67\x65\x42\x72\x65\x61\x6B\x20\x7B\x20\x64\x69\x73\x70\x6C\x61\x79\x3A\x20\x6E\x6F\x6E\x65\x3B\x20\x7D","\x40\x6D\x65\x64\x69\x61\x20\x73\x63\x72\x65\x65\x6E\x20\x7B","\x20\x20\x74\x61\x62\x6C\x65\x2E\x6D\x78\x50\x61\x67\x65\x53\x65\x6C\x65\x63\x74\x6F\x72\x20\x7B\x20\x70\x6F\x73\x69\x74\x69\x6F\x6E\x3A\x20\x66\x69\x78\x65\x64\x3B\x20\x72\x69\x67\x68\x74\x3A\x20\x31\x30\x70\x78\x3B\x20\x74\x6F\x70\x3A\x20\x31\x30\x70\x78\x3B\x66\x6F\x6E\x74\x2D\x66\x61\x6D\x69\x6C\x79\x3A\x20\x41\x72\x69\x61\x6C\x3B\x20\x66\x6F\x6E\x74\x2D\x73\x69\x7A\x65\x3A\x31\x30\x70\x74\x3B\x20\x62\x6F\x72\x64\x65\x72\x3A\x20\x73\x6F\x6C\x69\x64\x20\x31\x70\x78\x20\x64\x61\x72\x6B\x67\x72\x61\x79\x3B\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x3A\x20\x77\x68\x69\x74\x65\x3B\x20\x62\x6F\x72\x64\x65\x72\x2D\x63\x6F\x6C\x6C\x61\x70\x73\x65\x3A\x63\x6F\x6C\x6C\x61\x70\x73\x65\x3B\x20\x7D","\x20\x20\x74\x61\x62\x6C\x65\x2E\x6D\x78\x50\x61\x67\x65\x53\x65\x6C\x65\x63\x74\x6F\x72\x20\x74\x64\x20\x7B\x20\x62\x6F\x72\x64\x65\x72\x3A\x20\x73\x6F\x6C\x69\x64\x20\x31\x70\x78\x20\x67\x72\x61\x79\x3B\x20\x70\x61\x64\x64\x69\x6E\x67\x3A\x34\x70\x78\x3B\x20\x7D","\x20\x20\x62\x6F\x64\x79\x2E\x6D\x78\x50\x61\x67\x65\x20\x7B\x20\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x3A\x20\x67\x72\x61\x79\x3B\x20\x7D","\x3C\x2F\x73\x74\x79\x6C\x65\x3E","\x6D\x78\x50\x61\x67\x65\x53\x65\x6C\x65\x63\x74\x6F\x72","\x61","\x23\x6D\x78\x50\x61\x67\x65\x2D","\x70\x61\x67\x65\x42\x72\x65\x61\x6B\x49\x6E\x73\x69\x64\x65","\x67\x65\x74\x43\x61\x6E\x76\x61\x73","\x67\x65\x74\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x61\x6E\x65","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x61\x6E\x65","\x73\x74\x79\x6C\x65\x73","\x63\x72\x65\x61\x74\x65\x44\x65\x66\x61\x75\x6C\x74\x56\x65\x72\x74\x65\x78\x53\x74\x79\x6C\x65","\x70\x75\x74\x44\x65\x66\x61\x75\x6C\x74\x56\x65\x72\x74\x65\x78\x53\x74\x79\x6C\x65","\x63\x72\x65\x61\x74\x65\x44\x65\x66\x61\x75\x6C\x74\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x70\x75\x74\x44\x65\x66\x61\x75\x6C\x74\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x53\x54\x59\x4C\x45\x5F\x53\x48\x41\x50\x45","\x53\x48\x41\x50\x45\x5F\x52\x45\x43\x54\x41\x4E\x47\x4C\x45","\x53\x54\x59\x4C\x45\x5F\x50\x45\x52\x49\x4D\x45\x54\x45\x52","\x52\x65\x63\x74\x61\x6E\x67\x6C\x65\x50\x65\x72\x69\x6D\x65\x74\x65\x72","\x53\x54\x59\x4C\x45\x5F\x56\x45\x52\x54\x49\x43\x41\x4C\x5F\x41\x4C\x49\x47\x4E","\x53\x54\x59\x4C\x45\x5F\x41\x4C\x49\x47\x4E","\x53\x54\x59\x4C\x45\x5F\x46\x49\x4C\x4C\x43\x4F\x4C\x4F\x52","\x23\x43\x33\x44\x39\x46\x46","\x53\x54\x59\x4C\x45\x5F\x53\x54\x52\x4F\x4B\x45\x43\x4F\x4C\x4F\x52","\x23\x36\x34\x38\x32\x42\x39","\x53\x54\x59\x4C\x45\x5F\x46\x4F\x4E\x54\x43\x4F\x4C\x4F\x52","\x23\x37\x37\x34\x34\x30\x30","\x53\x48\x41\x50\x45\x5F\x43\x4F\x4E\x4E\x45\x43\x54\x4F\x52","\x23\x34\x34\x36\x32\x39\x39","\x64\x65\x66\x61\x75\x6C\x74\x56\x65\x72\x74\x65\x78","\x70\x75\x74\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65","\x64\x65\x66\x61\x75\x6C\x74\x45\x64\x67\x65","\x67\x65\x74\x44\x65\x66\x61\x75\x6C\x74\x56\x65\x72\x74\x65\x78\x53\x74\x79\x6C\x65","\x67\x65\x74\x44\x65\x66\x61\x75\x6C\x74\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x6F\x72\x69\x67\x69\x6E","\x61\x62\x73\x6F\x6C\x75\x74\x65\x4F\x66\x66\x73\x65\x74","\x69\x6E\x76\x61\x6C\x69\x64","\x69\x6E\x76\x61\x6C\x69\x64\x4F\x72\x64\x65\x72","\x6F\x72\x64\x65\x72\x43\x68\x61\x6E\x67\x65\x64","\x76\x69\x73\x69\x62\x6C\x65\x53\x6F\x75\x72\x63\x65\x53\x74\x61\x74\x65","\x76\x69\x73\x69\x62\x6C\x65\x54\x61\x72\x67\x65\x74\x53\x74\x61\x74\x65","\x74\x65\x72\x6D\x69\x6E\x61\x6C\x44\x69\x73\x74\x61\x6E\x63\x65","\x73\x65\x67\x6D\x65\x6E\x74\x73","\x67\x65\x74\x50\x65\x72\x69\x6D\x65\x74\x65\x72\x42\x6F\x75\x6E\x64\x73","\x73\x65\x74\x41\x62\x73\x6F\x6C\x75\x74\x65\x54\x65\x72\x6D\x69\x6E\x61\x6C\x50\x6F\x69\x6E\x74","\x67\x65\x74\x56\x69\x73\x69\x62\x6C\x65\x54\x65\x72\x6D\x69\x6E\x61\x6C\x53\x74\x61\x74\x65","\x73\x65\x74\x56\x69\x73\x69\x62\x6C\x65\x54\x65\x72\x6D\x69\x6E\x61\x6C\x53\x74\x61\x74\x65","\x64\x6F\x6E\x65\x52\x65\x73\x6F\x75\x72\x63\x65","\x75\x70\x64\x61\x74\x69\x6E\x67\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x52\x65\x73\x6F\x75\x72\x63\x65","\x75\x70\x64\x61\x74\x69\x6E\x67\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E","\x73\x69\x6E\x67\x6C\x65\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E","\x69\x73\x53\x69\x6E\x67\x6C\x65\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E","\x73\x65\x74\x53\x69\x6E\x67\x6C\x65\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E","\x69\x73\x53\x65\x6C\x65\x63\x74\x65\x64","\x63\x68\x61\x6E\x67\x65\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E","\x73\x65\x74\x43\x65\x6C\x6C","\x73\x65\x74\x43\x65\x6C\x6C\x73","\x67\x65\x74\x46\x69\x72\x73\x74\x53\x65\x6C\x65\x63\x74\x61\x62\x6C\x65\x43\x65\x6C\x6C","\x69\x73\x43\x65\x6C\x6C\x53\x65\x6C\x65\x63\x74\x61\x62\x6C\x65","\x61\x64\x64\x43\x65\x6C\x6C","\x72\x65\x6D\x6F\x76\x65\x43\x65\x6C\x6C","\x73\x65\x6C\x65\x63\x74\x69\x6F\x6E\x4D\x6F\x64\x65\x6C","\x61\x64\x64\x65\x64","\x72\x65\x6D\x6F\x76\x65\x64","\x6D\x78\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x68\x61\x6E\x67\x65\x2E\x65\x78\x65\x63\x75\x74\x65","\x65\x6E\x74\x65\x72","\x6C\x65\x61\x76\x65","\x65\x64\x69\x74\x69\x6E\x67\x43\x65\x6C\x6C","\x74\x72\x69\x67\x67\x65\x72","\x6D\x6F\x64\x69\x66\x69\x65\x64","\x61\x75\x74\x6F\x53\x69\x7A\x65","\x65\x6D\x70\x74\x79\x4C\x61\x62\x65\x6C\x54\x65\x78\x74","\x74\x65\x78\x74\x4E\x6F\x64\x65","\x6D\x78\x43\x65\x6C\x6C\x45\x64\x69\x74\x6F\x72","\x63\x6F\x6C\x73","\x32\x30","\x34","\x62\x6C\x75\x72","\x66\x6F\x63\x75\x73\x4C\x6F\x73\x74","\x6B\x65\x79\x64\x6F\x77\x6E","\x6B\x65\x79\x43\x6F\x64\x65","\x69\x73\x45\x6E\x74\x65\x72\x53\x74\x6F\x70\x73\x43\x65\x6C\x6C\x45\x64\x69\x74\x69\x6E\x67","\x73\x74\x6F\x70\x45\x64\x69\x74\x69\x6E\x67","\x63\x6C\x65\x61\x72\x4F\x6E\x43\x68\x61\x6E\x67\x65","\x73\x65\x74\x4D\x6F\x64\x69\x66\x69\x65\x64","\x6B\x65\x79\x70\x72\x65\x73\x73","\x69\x73\x4C\x61\x62\x65\x6C\x43\x6C\x69\x70\x70\x65\x64","\x69\x73\x57\x72\x61\x70\x70\x69\x6E\x67","\x41\x4C\x49\x47\x4E\x5F\x4C\x45\x46\x54","\x69\x73\x4D\x6F\x64\x69\x66\x69\x65\x64","\x69\x73\x49\x6E\x76\x6F\x6B\x65\x73\x53\x74\x6F\x70\x43\x65\x6C\x6C\x45\x64\x69\x74\x69\x6E\x67","\x69\x73\x48\x69\x64\x65\x4C\x61\x62\x65\x6C","\x6F\x75\x74\x6C\x69\x6E\x65","\x67\x65\x74\x45\x64\x69\x74\x6F\x72\x42\x6F\x75\x6E\x64\x73","\x67\x65\x74\x49\x6E\x69\x74\x69\x61\x6C\x56\x61\x6C\x75\x65","\x67\x65\x74\x45\x6D\x70\x74\x79\x4C\x61\x62\x65\x6C\x54\x65\x78\x74","\x63\x72\x65\x61\x74\x65\x54\x65\x78\x74\x44\x69\x76","\x67\x65\x74\x43\x75\x72\x72\x65\x6E\x74\x56\x61\x6C\x75\x65","\x67\x65\x74\x45\x64\x69\x74\x69\x6E\x67\x56\x61\x6C\x75\x65","\x53\x54\x59\x4C\x45\x5F\x53\x50\x41\x43\x49\x4E\x47","\x53\x54\x59\x4C\x45\x5F\x53\x50\x41\x43\x49\x4E\x47\x5F\x54\x4F\x50","\x53\x54\x59\x4C\x45\x5F\x53\x50\x41\x43\x49\x4E\x47\x5F\x52\x49\x47\x48\x54","\x53\x54\x59\x4C\x45\x5F\x53\x50\x41\x43\x49\x4E\x47\x5F\x42\x4F\x54\x54\x4F\x4D","\x53\x54\x59\x4C\x45\x5F\x53\x50\x41\x43\x49\x4E\x47\x5F\x4C\x45\x46\x54","\x67\x65\x74\x45\x64\x69\x74\x69\x6E\x67\x43\x65\x6C\x6C","\x64\x65\x66\x61\x75\x6C\x74\x45\x64\x67\x65\x53\x68\x61\x70\x65","\x64\x65\x66\x61\x75\x6C\x74\x56\x65\x72\x74\x65\x78\x53\x68\x61\x70\x65","\x64\x65\x66\x61\x75\x6C\x74\x54\x65\x78\x74\x53\x68\x61\x70\x65","\x6C\x65\x67\x61\x63\x79\x43\x6F\x6E\x74\x72\x6F\x6C\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x64\x65\x66\x61\x75\x6C\x74\x53\x68\x61\x70\x65\x73","\x72\x65\x67\x69\x73\x74\x65\x72\x53\x68\x61\x70\x65","\x69\x6E\x69\x74\x69\x61\x6C\x69\x7A\x65","\x63\x72\x65\x61\x74\x65\x53\x68\x61\x70\x65","\x69\x6E\x69\x74\x69\x61\x6C\x69\x7A\x65\x53\x68\x61\x70\x65","\x6F\x72\x64\x65\x72\x65\x64","\x6B\x65\x65\x70\x45\x64\x67\x65\x73\x49\x6E\x46\x6F\x72\x65\x67\x72\x6F\x75\x6E\x64","\x66\x69\x72\x73\x74\x45\x64\x67\x65","\x69\x6E\x73\x65\x72\x74\x53\x74\x61\x74\x65","\x63\x72\x65\x61\x74\x65\x43\x65\x6C\x6C\x4F\x76\x65\x72\x6C\x61\x79\x73","\x69\x6E\x73\x74\x61\x6C\x6C\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x67\x65\x74\x50\x72\x65\x76\x69\x6F\x75\x73\x53\x74\x61\x74\x65\x49\x6E\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x66\x69\x6E\x64\x50\x72\x65\x76\x69\x6F\x75\x73\x53\x74\x61\x74\x65\x49\x6E\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x6F\x72\x64\x65\x72","\x6F\x72\x64\x65\x72\x45\x64\x67\x65","\x6B\x65\x65\x70\x45\x64\x67\x65\x73\x49\x6E\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64","\x67\x65\x74\x53\x68\x61\x70\x65\x43\x6F\x6E\x73\x74\x72\x75\x63\x74\x6F\x72","\x63\x6F\x6E\x66\x69\x67\x75\x72\x65\x53\x68\x61\x70\x65","\x67\x65\x74\x53\x68\x61\x70\x65","\x67\x65\x74\x49\x6E\x64\x69\x63\x61\x74\x6F\x72\x53\x68\x61\x70\x65","\x67\x65\x74\x49\x6E\x64\x69\x63\x61\x74\x6F\x72\x43\x6F\x6C\x6F\x72","\x67\x65\x74\x49\x6E\x64\x69\x63\x61\x74\x6F\x72\x47\x72\x61\x64\x69\x65\x6E\x74\x43\x6F\x6C\x6F\x72","\x53\x54\x59\x4C\x45\x5F\x49\x4E\x44\x49\x43\x41\x54\x4F\x52\x5F\x44\x49\x52\x45\x43\x54\x49\x4F\x4E","\x67\x65\x74\x49\x6E\x64\x69\x63\x61\x74\x6F\x72\x49\x6D\x61\x67\x65","\x70\x6F\x73\x74\x43\x6F\x6E\x66\x69\x67\x75\x72\x65\x53\x68\x61\x70\x65","\x72\x65\x73\x6F\x6C\x76\x65\x43\x6F\x6C\x6F\x72","\x67\x65\x74\x53\x77\x69\x6D\x6C\x61\x6E\x65","\x73\x77\x69\x6D\x6C\x61\x6E\x65\x49\x6E\x64\x69\x63\x61\x74\x6F\x72\x43\x6F\x6C\x6F\x72\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x69\x6E\x64\x69\x63\x61\x74\x65\x64","\x67\x65\x74\x4C\x61\x62\x65\x6C\x56\x61\x6C\x75\x65","\x67\x65\x74\x4C\x61\x62\x65\x6C","\x63\x72\x65\x61\x74\x65\x4C\x61\x62\x65\x6C","\x53\x54\x59\x4C\x45\x5F\x46\x4F\x4E\x54\x53\x49\x5A\x45","\x69\x73\x48\x74\x6D\x6C\x4C\x61\x62\x65\x6C","\x67\x65\x74\x56\x65\x72\x74\x69\x63\x61\x6C\x41\x6C\x69\x67\x6E","\x53\x54\x59\x4C\x45\x5F\x46\x4F\x4E\x54\x46\x41\x4D\x49\x4C\x59","\x53\x54\x59\x4C\x45\x5F\x46\x4F\x4E\x54\x53\x54\x59\x4C\x45","\x53\x54\x59\x4C\x45\x5F\x48\x4F\x52\x49\x5A\x4F\x4E\x54\x41\x4C","\x53\x54\x59\x4C\x45\x5F\x4C\x41\x42\x45\x4C\x5F\x42\x41\x43\x4B\x47\x52\x4F\x55\x4E\x44\x43\x4F\x4C\x4F\x52","\x53\x54\x59\x4C\x45\x5F\x4C\x41\x42\x45\x4C\x5F\x42\x4F\x52\x44\x45\x52\x43\x4F\x4C\x4F\x52","\x53\x54\x59\x4C\x45\x5F\x4F\x56\x45\x52\x46\x4C\x4F\x57","\x53\x54\x59\x4C\x45\x5F\x4C\x41\x42\x45\x4C\x5F\x50\x41\x44\x44\x49\x4E\x47","\x69\x6E\x69\x74\x69\x61\x6C\x69\x7A\x65\x4C\x61\x62\x65\x6C","\x63\x6F\x6E\x76\x65\x72\x74\x50\x6F\x69\x6E\x74","\x69\x73\x4C\x61\x62\x65\x6C\x45\x76\x65\x6E\x74","\x49\x4D\x47","\x4E\x4F\x5F\x46\x4F","\x67\x65\x74\x43\x65\x6C\x6C\x4F\x76\x65\x72\x6C\x61\x79\x73","\x6F\x76\x65\x72\x6C\x61\x79","\x69\x6E\x73\x74\x61\x6C\x6C\x43\x65\x6C\x6C\x4F\x76\x65\x72\x6C\x61\x79\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x69\x73\x45\x64\x69\x74\x69\x6E\x67","\x63\x72\x65\x61\x74\x65\x43\x6F\x6E\x74\x72\x6F\x6C","\x67\x65\x74\x46\x6F\x6C\x64\x69\x6E\x67\x49\x6D\x61\x67\x65","\x66\x6F\x6C\x64\x69\x6E\x67\x45\x6E\x61\x62\x6C\x65\x64","\x63\x6F\x6E\x74\x72\x6F\x6C","\x69\x6E\x69\x74\x43\x6F\x6E\x74\x72\x6F\x6C","\x44\x49\x41\x4C\x45\x43\x54\x5F\x50\x52\x45\x46\x45\x52\x48\x54\x4D\x4C","\x69\x6E\x6E\x65\x72\x4E\x6F\x64\x65","\x69\x73\x53\x68\x61\x70\x65\x45\x76\x65\x6E\x74","\x67\x65\x73\x74\x75\x72\x65\x73\x74\x61\x72\x74","\x6C\x61\x73\x74\x54\x6F\x75\x63\x68\x54\x69\x6D\x65","\x67\x65\x73\x74\x75\x72\x65\x65\x6E\x64","\x67\x65\x73\x74\x75\x72\x65\x45\x6E\x61\x62\x6C\x65\x64","\x68\x61\x6E\x64\x6C\x65\x47\x65\x73\x74\x75\x72\x65","\x72\x65\x64\x72\x61\x77\x4C\x61\x62\x65\x6C","\x67\x65\x74\x4C\x61\x62\x65\x6C\x42\x6F\x75\x6E\x64\x73","\x69\x73\x43\x6C\x69\x70\x70\x69\x6E\x67","\x67\x65\x74\x54\x65\x78\x74\x53\x63\x61\x6C\x65","\x72\x6F\x74\x61\x74\x65\x4C\x61\x62\x65\x6C\x42\x6F\x75\x6E\x64\x73","\x72\x65\x64\x72\x61\x77\x43\x65\x6C\x6C\x4F\x76\x65\x72\x6C\x61\x79\x73","\x72\x65\x64\x72\x61\x77\x43\x6F\x6E\x74\x72\x6F\x6C","\x67\x65\x74\x43\x6F\x6E\x74\x72\x6F\x6C\x42\x6F\x75\x6E\x64\x73","\x65\x71\x75\x61\x6C\x45\x6E\x74\x72\x69\x65\x73","\x65\x71\x75\x61\x6C\x50\x6F\x69\x6E\x74\x73","\x67\x65\x74\x50\x6F\x72\x74\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74\x73","\x67\x65\x74\x52\x6F\x75\x74\x69\x6E\x67\x43\x65\x6E\x74\x65\x72\x59","\x74\x72\x61\x6E\x73\x66\x6F\x72\x6D\x43\x6F\x6E\x74\x72\x6F\x6C\x50\x6F\x69\x6E\x74","\x67\x65\x74\x52\x6F\x75\x74\x69\x6E\x67\x43\x65\x6E\x74\x65\x72\x58","\x53\x54\x59\x4C\x45\x5F\x45\x4C\x42\x4F\x57","\x45\x4C\x42\x4F\x57\x5F\x56\x45\x52\x54\x49\x43\x41\x4C","\x6F\x72\x74\x68\x42\x75\x66\x66\x65\x72","\x44\x49\x52\x45\x43\x54\x49\x4F\x4E\x5F\x4D\x41\x53\x4B\x5F\x41\x4C\x4C","\x6C\x69\x6D\x69\x74\x73","\x76\x65\x72\x74\x65\x78\x53\x65\x70\x65\x72\x61\x74\x69\x6F\x6E\x73","\x72\x65\x76\x65\x72\x73\x65\x50\x6F\x72\x74\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74\x73","\x72\x6F\x75\x74\x65\x50\x61\x74\x74\x65\x72\x6E\x73","\x77\x61\x79\x50\x6F\x69\x6E\x74\x73\x31","\x64\x69\x72\x56\x65\x63\x74\x6F\x72\x73","\x54\x41\x52\x47\x45\x54\x5F\x4D\x41\x53\x4B","\x53\x4F\x55\x52\x43\x45\x5F\x4D\x41\x53\x4B","\x53\x49\x44\x45\x5F\x4D\x41\x53\x4B","\x43\x45\x4E\x54\x45\x52\x5F\x4D\x41\x53\x4B","\x76\x61\x6C\x75\x65\x73","\x70\x75\x74\x56\x61\x6C\x75\x65","\x67\x72\x61\x70\x68\x42\x6F\x75\x6E\x64\x73","\x45\x4D\x50\x54\x59\x5F\x50\x4F\x49\x4E\x54","\x75\x70\x64\x61\x74\x69\x6E\x67\x44\x6F\x63\x75\x6D\x65\x6E\x74\x52\x65\x73\x6F\x75\x72\x63\x65","\x75\x70\x64\x61\x74\x69\x6E\x67\x44\x6F\x63\x75\x6D\x65\x6E\x74","\x61\x6C\x6C\x6F\x77\x45\x76\x61\x6C","\x63\x61\x70\x74\x75\x72\x65\x44\x6F\x63\x75\x6D\x65\x6E\x74\x47\x65\x73\x74\x75\x72\x65","\x6F\x70\x74\x69\x6D\x69\x7A\x65\x56\x6D\x6C\x52\x65\x66\x6C\x6F\x77\x73","\x72\x65\x6E\x64\x65\x72\x69\x6E\x67","\x75\x70\x64\x61\x74\x65\x53\x74\x79\x6C\x65","\x73\x65\x74\x47\x72\x61\x70\x68\x42\x6F\x75\x6E\x64\x73","\x73\x65\x74\x43\x75\x72\x72\x65\x6E\x74\x52\x6F\x6F\x74","\x73\x69\x7A\x65\x44\x69\x64\x43\x68\x61\x6E\x67\x65","\x72\x65\x76\x61\x6C\x69\x64\x61\x74\x65","\x70\x72\x65\x76\x69\x6F\x75\x73\x53\x63\x61\x6C\x65","\x70\x72\x65\x76\x69\x6F\x75\x73\x54\x72\x61\x6E\x73\x6C\x61\x74\x65","\x73\x65\x74\x53\x63\x61\x6C\x65","\x69\x6E\x76\x61\x6C\x69\x64\x61\x74\x65","\x76\x61\x6C\x69\x64\x61\x74\x65","\x72\x65\x6D\x6F\x76\x65\x53\x74\x61\x74\x65","\x6D\x78\x47\x72\x61\x70\x68\x56\x69\x65\x77\x2E\x76\x61\x6C\x69\x64\x61\x74\x65","\x76\x61\x6C\x69\x64\x61\x74\x65\x42\x6F\x75\x6E\x64\x73","\x76\x61\x6C\x69\x64\x61\x74\x65\x50\x6F\x69\x6E\x74\x73","\x76\x61\x6C\x69\x64\x61\x74\x65\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64","\x63\x72\x65\x61\x74\x65\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x61\x67\x65\x53\x68\x61\x70\x65","\x67\x65\x74\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x72\x65\x64\x72\x61\x77\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x70\x61\x67\x65\x56\x69\x73\x69\x62\x6C\x65","\x67\x65\x74\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x61\x67\x65\x42\x6F\x75\x6E\x64\x73","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x61\x67\x65\x53\x68\x61\x70\x65","\x74\x6F\x6F\x6C\x74\x69\x70\x48\x61\x6E\x64\x6C\x65\x72","\x69\x73\x48\x69\x64\x65\x4F\x6E\x48\x6F\x76\x65\x72","\x53\x54\x59\x4C\x45\x5F\x52\x4F\x54\x41\x54\x49\x4F\x4E","\x75\x70\x64\x61\x74\x65\x56\x65\x72\x74\x65\x78\x4C\x61\x62\x65\x6C\x4F\x66\x66\x73\x65\x74","\x67\x65\x74\x43\x68\x69\x6C\x64\x4F\x66\x66\x73\x65\x74\x46\x6F\x72\x43\x65\x6C\x6C","\x75\x70\x64\x61\x74\x65\x46\x69\x78\x65\x64\x54\x65\x72\x6D\x69\x6E\x61\x6C\x50\x6F\x69\x6E\x74\x73","\x75\x70\x64\x61\x74\x65\x50\x6F\x69\x6E\x74\x73","\x75\x70\x64\x61\x74\x65\x46\x6C\x6F\x61\x74\x69\x6E\x67\x54\x65\x72\x6D\x69\x6E\x61\x6C\x50\x6F\x69\x6E\x74\x73","\x75\x70\x64\x61\x74\x65\x45\x64\x67\x65\x42\x6F\x75\x6E\x64\x73","\x75\x70\x64\x61\x74\x65\x45\x64\x67\x65\x4C\x61\x62\x65\x6C\x4F\x66\x66\x73\x65\x74","\x63\x68\x69\x6C\x64\x4D\x6F\x76\x65\x64","\x69\x73\x52\x65\x6E\x64\x65\x72\x69\x6E\x67","\x67\x65\x74\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74","\x75\x70\x64\x61\x74\x65\x46\x69\x78\x65\x64\x54\x65\x72\x6D\x69\x6E\x61\x6C\x50\x6F\x69\x6E\x74","\x67\x65\x74\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x50\x6F\x69\x6E\x74","\x67\x65\x74\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x67\x65\x74\x54\x65\x72\x6D\x69\x6E\x61\x6C\x50\x6F\x72\x74","\x64\x65\x66\x61\x75\x6C\x74\x4C\x6F\x6F\x70\x53\x74\x79\x6C\x65","\x53\x54\x59\x4C\x45\x5F\x45\x44\x47\x45","\x69\x73\x41\x6C\x6C\x6F\x77\x45\x76\x61\x6C","\x75\x70\x64\x61\x74\x65\x46\x6C\x6F\x61\x74\x69\x6E\x67\x54\x65\x72\x6D\x69\x6E\x61\x6C\x50\x6F\x69\x6E\x74","\x67\x65\x74\x4E\x65\x78\x74\x50\x6F\x69\x6E\x74","\x69\x73\x4F\x72\x74\x68\x6F\x67\x6F\x6E\x61\x6C","\x53\x54\x59\x4C\x45\x5F\x50\x45\x52\x49\x4D\x45\x54\x45\x52\x5F\x53\x50\x41\x43\x49\x4E\x47","\x53\x54\x59\x4C\x45\x5F\x53\x4F\x55\x52\x43\x45\x5F\x50\x45\x52\x49\x4D\x45\x54\x45\x52\x5F\x53\x50\x41\x43\x49\x4E\x47","\x53\x54\x59\x4C\x45\x5F\x54\x41\x52\x47\x45\x54\x5F\x50\x45\x52\x49\x4D\x45\x54\x45\x52\x5F\x53\x50\x41\x43\x49\x4E\x47","\x67\x65\x74\x50\x65\x72\x69\x6D\x65\x74\x65\x72\x50\x6F\x69\x6E\x74","\x53\x54\x59\x4C\x45\x5F\x53\x4F\x55\x52\x43\x45\x5F\x50\x4F\x52\x54","\x53\x54\x59\x4C\x45\x5F\x54\x41\x52\x47\x45\x54\x5F\x50\x4F\x52\x54","\x67\x65\x74\x50\x65\x72\x69\x6D\x65\x74\x65\x72\x46\x75\x6E\x63\x74\x69\x6F\x6E","\x53\x54\x59\x4C\x45\x5F\x52\x4F\x55\x54\x49\x4E\x47\x5F\x43\x45\x4E\x54\x45\x52\x5F\x58","\x53\x54\x59\x4C\x45\x5F\x52\x4F\x55\x54\x49\x4E\x47\x5F\x43\x45\x4E\x54\x45\x52\x5F\x59","\x67\x65\x74\x52\x65\x6C\x61\x74\x69\x76\x65\x50\x6F\x69\x6E\x74","\x72\x65\x6C\x61\x74\x69\x76\x65\x43\x63\x77","\x73\x65\x74\x52\x65\x6E\x64\x65\x72\x69\x6E\x67","\x73\x65\x74\x41\x6C\x6C\x6F\x77\x45\x76\x61\x6C","\x67\x65\x74\x53\x74\x61\x74\x65\x73","\x67\x65\x74\x43\x65\x6C\x6C\x53\x74\x61\x74\x65\x73","\x69\x73\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72\x45\x76\x65\x6E\x74","\x69\x73\x53\x63\x72\x6F\x6C\x6C\x45\x76\x65\x6E\x74","\x70\x61\x6E\x6E\x69\x6E\x67\x48\x61\x6E\x64\x6C\x65\x72","\x6D\x6F\x76\x65\x48\x61\x6E\x64\x6C\x65\x72","\x65\x6E\x64\x48\x61\x6E\x64\x6C\x65\x72","\x63\x72\x65\x61\x74\x65\x48\x74\x6D\x6C\x50\x61\x6E\x65","\x75\x70\x64\x61\x74\x65\x48\x74\x6D\x6C\x43\x61\x6E\x76\x61\x73\x53\x69\x7A\x65","\x63\x72\x65\x61\x74\x65\x56\x6D\x6C\x50\x61\x6E\x65","\x63\x6F\x6F\x72\x64\x6F\x72\x69\x67\x69\x6E","\x30\x2C\x30","\x73\x74\x61\x74\x69\x63","\x69\x73\x55\x70","\x67\x65\x74\x54\x72\x61\x6E\x73\x6C\x61\x74\x65\x46\x6F\x72\x52\x6F\x6F\x74","\x55\x50","\x44\x4F\x57\x4E","\x6D\x6F\x75\x73\x65\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x72\x65\x6E\x64\x65\x72\x48\x69\x6E\x74","\x52\x45\x4E\x44\x45\x52\x49\x4E\x47\x5F\x48\x49\x4E\x54\x5F\x45\x58\x41\x43\x54","\x52\x45\x4E\x44\x45\x52\x49\x4E\x47\x5F\x48\x49\x4E\x54\x5F\x46\x41\x53\x54\x45\x53\x54","\x52\x45\x4E\x44\x45\x52\x49\x4E\x47\x5F\x48\x49\x4E\x54\x5F\x46\x41\x53\x54\x45\x52","\x44\x49\x41\x4C\x45\x43\x54\x5F\x4D\x49\x58\x45\x44\x48\x54\x4D\x4C","\x6D\x75\x6C\x74\x69\x70\x6C\x69\x63\x69\x74\x69\x65\x73","\x69\x6D\x61\x67\x65\x42\x75\x6E\x64\x6C\x65\x73","\x63\x72\x65\x61\x74\x65\x43\x65\x6C\x6C\x52\x65\x6E\x64\x65\x72\x65\x72","\x63\x72\x65\x61\x74\x65\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x4D\x6F\x64\x65\x6C","\x73\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x4D\x6F\x64\x65\x6C","\x63\x72\x65\x61\x74\x65\x53\x74\x79\x6C\x65\x73\x68\x65\x65\x74","\x73\x65\x74\x53\x74\x79\x6C\x65\x73\x68\x65\x65\x74","\x63\x72\x65\x61\x74\x65\x47\x72\x61\x70\x68\x56\x69\x65\x77","\x67\x72\x61\x70\x68\x4D\x6F\x64\x65\x6C\x43\x68\x61\x6E\x67\x65\x4C\x69\x73\x74\x65\x6E\x65\x72","\x63\x72\x65\x61\x74\x65\x48\x61\x6E\x64\x6C\x65\x72\x73","\x2F\x72\x65\x73\x6F\x75\x72\x63\x65\x73\x2F\x67\x72\x61\x70\x68","\x45\x4D\x50\x54\x59\x5F\x41\x52\x52\x41\x59","\x63\x65\x6C\x6C\x45\x64\x69\x74\x6F\x72","\x70\x6F\x72\x74\x73\x45\x6E\x61\x62\x6C\x65\x64","\x64\x6F\x75\x62\x6C\x65\x54\x61\x70\x45\x6E\x61\x62\x6C\x65\x64","\x64\x6F\x75\x62\x6C\x65\x54\x61\x70\x54\x69\x6D\x65\x6F\x75\x74","\x64\x6F\x75\x62\x6C\x65\x54\x61\x70\x54\x6F\x6C\x65\x72\x61\x6E\x63\x65","\x6C\x61\x73\x74\x54\x6F\x75\x63\x68\x59","\x74\x6F\x6C\x65\x72\x61\x6E\x63\x65","\x64\x65\x66\x61\x75\x6C\x74\x4F\x76\x65\x72\x6C\x61\x70","\x64\x65\x66\x61\x75\x6C\x74\x50\x61\x72\x65\x6E\x74","\x61\x6C\x74\x65\x72\x6E\x61\x74\x65\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x70\x61\x67\x65\x42\x72\x65\x61\x6B\x73\x56\x69\x73\x69\x62\x6C\x65","\x70\x61\x67\x65\x42\x72\x65\x61\x6B\x43\x6F\x6C\x6F\x72","\x70\x61\x67\x65\x42\x72\x65\x61\x6B\x44\x61\x73\x68\x65\x64","\x6D\x69\x6E\x50\x61\x67\x65\x42\x72\x65\x61\x6B\x44\x69\x73\x74","\x70\x72\x65\x66\x65\x72\x50\x61\x67\x65\x53\x69\x7A\x65","\x65\x73\x63\x61\x70\x65\x45\x6E\x61\x62\x6C\x65\x64","\x69\x6E\x76\x6F\x6B\x65\x73\x53\x74\x6F\x70\x43\x65\x6C\x6C\x45\x64\x69\x74\x69\x6E\x67","\x65\x6E\x74\x65\x72\x53\x74\x6F\x70\x73\x43\x65\x6C\x6C\x45\x64\x69\x74\x69\x6E\x67","\x75\x73\x65\x53\x63\x72\x6F\x6C\x6C\x62\x61\x72\x73\x46\x6F\x72\x50\x61\x6E\x6E\x69\x6E\x67","\x65\x78\x70\x6F\x72\x74\x45\x6E\x61\x62\x6C\x65\x64","\x69\x6D\x70\x6F\x72\x74\x45\x6E\x61\x62\x6C\x65\x64","\x63\x65\x6C\x6C\x73\x4C\x6F\x63\x6B\x65\x64","\x63\x65\x6C\x6C\x73\x43\x6C\x6F\x6E\x65\x61\x62\x6C\x65","\x63\x65\x6C\x6C\x73\x45\x64\x69\x74\x61\x62\x6C\x65","\x63\x65\x6C\x6C\x73\x44\x65\x6C\x65\x74\x61\x62\x6C\x65","\x63\x65\x6C\x6C\x73\x4D\x6F\x76\x61\x62\x6C\x65","\x65\x64\x67\x65\x4C\x61\x62\x65\x6C\x73\x4D\x6F\x76\x61\x62\x6C\x65","\x76\x65\x72\x74\x65\x78\x4C\x61\x62\x65\x6C\x73\x4D\x6F\x76\x61\x62\x6C\x65","\x64\x72\x6F\x70\x45\x6E\x61\x62\x6C\x65\x64","\x73\x70\x6C\x69\x74\x45\x6E\x61\x62\x6C\x65\x64","\x63\x65\x6C\x6C\x73\x52\x65\x73\x69\x7A\x61\x62\x6C\x65","\x63\x65\x6C\x6C\x73\x42\x65\x6E\x64\x61\x62\x6C\x65","\x63\x65\x6C\x6C\x73\x53\x65\x6C\x65\x63\x74\x61\x62\x6C\x65","\x63\x65\x6C\x6C\x73\x44\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65","\x61\x75\x74\x6F\x53\x69\x7A\x65\x43\x65\x6C\x6C\x73","\x74\x69\x6D\x65\x72\x41\x75\x74\x6F\x53\x63\x72\x6F\x6C\x6C","\x61\x6C\x6C\x6F\x77\x41\x75\x74\x6F\x50\x61\x6E\x6E\x69\x6E\x67","\x69\x67\x6E\x6F\x72\x65\x53\x63\x72\x6F\x6C\x6C\x62\x61\x72\x73","\x6D\x61\x78\x69\x6D\x75\x6D\x47\x72\x61\x70\x68\x42\x6F\x75\x6E\x64\x73","\x6D\x69\x6E\x69\x6D\x75\x6D\x47\x72\x61\x70\x68\x53\x69\x7A\x65","\x6D\x69\x6E\x69\x6D\x75\x6D\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72\x53\x69\x7A\x65","\x6D\x61\x78\x69\x6D\x75\x6D\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72\x53\x69\x7A\x65","\x72\x65\x73\x69\x7A\x65\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x61\x6C\x6C\x6F\x77\x4E\x65\x67\x61\x74\x69\x76\x65\x43\x6F\x6F\x72\x64\x69\x6E\x61\x74\x65\x73","\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x43\x68\x69\x6C\x64\x72\x65\x6E","\x65\x78\x74\x65\x6E\x64\x50\x61\x72\x65\x6E\x74\x73","\x65\x78\x74\x65\x6E\x64\x50\x61\x72\x65\x6E\x74\x73\x4F\x6E\x41\x64\x64","\x63\x6F\x6C\x6C\x61\x70\x73\x65\x54\x6F\x50\x72\x65\x66\x65\x72\x72\x65\x64\x53\x69\x7A\x65","\x7A\x6F\x6F\x6D\x46\x61\x63\x74\x6F\x72","\x6B\x65\x65\x70\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x56\x69\x73\x69\x62\x6C\x65\x4F\x6E\x5A\x6F\x6F\x6D","\x63\x65\x6E\x74\x65\x72\x5A\x6F\x6F\x6D","\x72\x65\x73\x65\x74\x56\x69\x65\x77\x4F\x6E\x52\x6F\x6F\x74\x43\x68\x61\x6E\x67\x65","\x72\x65\x73\x65\x74\x45\x64\x67\x65\x73\x4F\x6E\x52\x65\x73\x69\x7A\x65","\x72\x65\x73\x65\x74\x45\x64\x67\x65\x73\x4F\x6E\x4D\x6F\x76\x65","\x72\x65\x73\x65\x74\x45\x64\x67\x65\x73\x4F\x6E\x43\x6F\x6E\x6E\x65\x63\x74","\x61\x6C\x6C\x6F\x77\x4C\x6F\x6F\x70\x73","\x4C\x6F\x6F\x70","\x6D\x75\x6C\x74\x69\x67\x72\x61\x70\x68","\x63\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65\x45\x64\x67\x65\x73","\x61\x6C\x6C\x6F\x77\x44\x61\x6E\x67\x6C\x69\x6E\x67\x45\x64\x67\x65\x73","\x63\x6C\x6F\x6E\x65\x49\x6E\x76\x61\x6C\x69\x64\x45\x64\x67\x65\x73","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x4F\x6E\x4D\x6F\x76\x65","\x6C\x61\x62\x65\x6C\x73\x56\x69\x73\x69\x62\x6C\x65","\x68\x74\x6D\x6C\x4C\x61\x62\x65\x6C\x73","\x73\x77\x69\x6D\x6C\x61\x6E\x65\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x45\x6E\x61\x62\x6C\x65\x64","\x73\x77\x69\x6D\x6C\x61\x6E\x65\x4E\x65\x73\x74\x69\x6E\x67","\x6D\x69\x6E\x46\x69\x74\x53\x63\x61\x6C\x65","\x6D\x61\x78\x46\x69\x74\x53\x63\x61\x6C\x65","\x63\x6F\x6C\x6C\x61\x70\x73\x65\x64\x49\x6D\x61\x67\x65","\x2F\x63\x6F\x6C\x6C\x61\x70\x73\x65\x64\x2E\x67\x69\x66","\x65\x78\x70\x61\x6E\x64\x65\x64\x49\x6D\x61\x67\x65","\x2F\x65\x78\x70\x61\x6E\x64\x65\x64\x2E\x67\x69\x66","\x77\x61\x72\x6E\x69\x6E\x67\x49\x6D\x61\x67\x65","\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x6D\x78\x67\x72\x61\x70\x68\x2F\x69\x6D\x61\x67\x65\x73\x2F\x77\x61\x72\x6E\x69\x6E\x67\x2E\x67\x69\x66","\x61\x6C\x72\x65\x61\x64\x79\x43\x6F\x6E\x6E\x65\x63\x74\x65\x64\x52\x65\x73\x6F\x75\x72\x63\x65","\x61\x6C\x72\x65\x61\x64\x79\x43\x6F\x6E\x6E\x65\x63\x74\x65\x64","\x63\x6F\x6E\x74\x61\x69\x6E\x73\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E\x45\x72\x72\x6F\x72\x73\x52\x65\x73\x6F\x75\x72\x63\x65","\x63\x6F\x6E\x74\x61\x69\x6E\x73\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E\x45\x72\x72\x6F\x72\x73","\x63\x6F\x6C\x6C\x61\x70\x73\x65\x45\x78\x70\x61\x6E\x64\x52\x65\x73\x6F\x75\x72\x63\x65","\x63\x6F\x6C\x6C\x61\x70\x73\x65\x2D\x65\x78\x70\x61\x6E\x64","\x63\x72\x65\x61\x74\x65\x43\x65\x6C\x6C\x45\x64\x69\x74\x6F\x72","\x75\x6E\x6C\x6F\x61\x64","\x73\x65\x6C\x65\x63\x74\x73\x74\x61\x72\x74","\x3C\x76\x3A\x67\x72\x6F\x75\x70\x20\x73\x74\x79\x6C\x65\x3D\x22\x44\x49\x53\x50\x4C\x41\x59\x3A\x20\x6E\x6F\x6E\x65\x3B\x22\x3E\x3C\x2F\x76\x3A\x67\x72\x6F\x75\x70\x3E","\x70\x61\x6E\x6E\x69\x6E\x67\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73\x48\x61\x6E\x64\x6C\x65\x72","\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x48\x61\x6E\x64\x6C\x65\x72","\x67\x65\x74\x53\x74\x79\x6C\x65\x73\x68\x65\x65\x74","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x4D\x6F\x64\x65\x6C","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73\x46\x6F\x72\x43\x68\x61\x6E\x67\x65\x73","\x70\x72\x6F\x63\x65\x73\x73\x43\x68\x61\x6E\x67\x65","\x67\x65\x74\x52\x65\x6D\x6F\x76\x65\x64\x43\x65\x6C\x6C\x73\x46\x6F\x72\x43\x68\x61\x6E\x67\x65\x73","\x72\x65\x6D\x6F\x76\x65\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73","\x63\x6C\x65\x61\x72\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E","\x72\x65\x6D\x6F\x76\x65\x53\x74\x61\x74\x65\x46\x6F\x72\x43\x65\x6C\x6C","\x68\x6F\x6D\x65","\x61\x64\x64\x43\x65\x6C\x6C\x4F\x76\x65\x72\x6C\x61\x79","\x72\x65\x6D\x6F\x76\x65\x43\x65\x6C\x6C\x4F\x76\x65\x72\x6C\x61\x79","\x72\x65\x6D\x6F\x76\x65\x43\x65\x6C\x6C\x4F\x76\x65\x72\x6C\x61\x79\x73","\x63\x6C\x65\x61\x72\x43\x65\x6C\x6C\x4F\x76\x65\x72\x6C\x61\x79\x73","\x73\x65\x74\x43\x65\x6C\x6C\x57\x61\x72\x6E\x69\x6E\x67","\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x72\x65\x64\x3E","\x3C\x2F\x66\x6F\x6E\x74\x3E","\x73\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x73\x74\x61\x72\x74\x45\x64\x69\x74\x69\x6E\x67\x41\x74\x43\x65\x6C\x6C","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x69\x73\x43\x65\x6C\x6C\x45\x64\x69\x74\x61\x62\x6C\x65","\x63\x6F\x6E\x76\x65\x72\x74\x56\x61\x6C\x75\x65\x54\x6F\x53\x74\x72\x69\x6E\x67","\x69\x73\x41\x75\x74\x6F\x53\x69\x7A\x65\x43\x65\x6C\x6C","\x63\x65\x6C\x6C\x4C\x61\x62\x65\x6C\x43\x68\x61\x6E\x67\x65\x64","\x63\x65\x6C\x6C\x53\x69\x7A\x65\x55\x70\x64\x61\x74\x65\x64","\x68\x61\x6E\x64\x6C\x65\x72","\x73\x65\x6C\x65\x63\x74\x43\x65\x6C\x6C\x46\x6F\x72\x45\x76\x65\x6E\x74","\x69\x73\x53\x77\x69\x6D\x6C\x61\x6E\x65\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x45\x6E\x61\x62\x6C\x65\x64","\x67\x65\x74\x53\x77\x69\x6D\x6C\x61\x6E\x65\x41\x74","\x69\x73\x54\x6F\x67\x67\x6C\x65\x45\x76\x65\x6E\x74","\x70\x61\x6E\x6E\x69\x6E\x67\x4D\x61\x6E\x61\x67\x65\x72","\x63\x72\x65\x61\x74\x65\x50\x61\x6E\x6E\x69\x6E\x67\x4D\x61\x6E\x61\x67\x65\x72","\x67\x65\x74\x42\x6F\x72\x64\x65\x72\x53\x69\x7A\x65\x73","\x74\x68\x69\x6E","\x6D\x65\x64\x69\x75\x6D","\x74\x68\x69\x63\x6B","\x62\x6F\x72\x64\x65\x72\x4C\x65\x66\x74\x57\x69\x64\x74\x68","\x62\x6F\x72\x64\x65\x72\x54\x6F\x70\x57\x69\x64\x74\x68","\x70\x61\x64\x64\x69\x6E\x67\x54\x6F\x70","\x62\x6F\x72\x64\x65\x72\x52\x69\x67\x68\x74\x57\x69\x64\x74\x68","\x62\x6F\x72\x64\x65\x72\x42\x6F\x74\x74\x6F\x6D\x57\x69\x64\x74\x68","\x70\x61\x64\x64\x69\x6E\x67\x42\x6F\x74\x74\x6F\x6D","\x67\x65\x74\x50\x72\x65\x66\x65\x72\x72\x65\x64\x50\x61\x67\x65\x53\x69\x7A\x65","\x67\x65\x74\x42\x6F\x72\x64\x65\x72","\x64\x6F\x52\x65\x73\x69\x7A\x65\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x6D\x69\x6E\x57\x69\x64\x74\x68","\x6D\x69\x6E\x48\x65\x69\x67\x68\x74","\x75\x70\x64\x61\x74\x65\x50\x61\x67\x65\x42\x72\x65\x61\x6B\x73","\x68\x6F\x72\x69\x7A\x6F\x6E\x74\x61\x6C\x50\x61\x67\x65\x42\x72\x65\x61\x6B\x73","\x76\x65\x72\x74\x69\x63\x61\x6C\x50\x61\x67\x65\x42\x72\x65\x61\x6B\x73","\x70\x6F\x73\x74\x50\x72\x6F\x63\x65\x73\x73\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65","\x53\x54\x59\x4C\x45\x5F\x49\x4D\x41\x47\x45","\x67\x65\x74\x49\x6D\x61\x67\x65\x46\x72\x6F\x6D\x42\x75\x6E\x64\x6C\x65\x73","\x64\x61\x74\x61\x3A\x69\x6D\x61\x67\x65\x2F","\x3B\x62\x61\x73\x65\x36\x34\x2C","\x73\x65\x74\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65","\x74\x6F\x67\x67\x6C\x65\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65","\x74\x6F\x67\x67\x6C\x65\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65\x73","\x74\x6F\x67\x67\x6C\x65\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65\x46\x6C\x61\x67\x73","\x73\x65\x74\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65\x46\x6C\x61\x67\x73","\x61\x64\x64\x49\x6D\x61\x67\x65\x42\x75\x6E\x64\x6C\x65","\x72\x65\x6D\x6F\x76\x65\x49\x6D\x61\x67\x65\x42\x75\x6E\x64\x6C\x65","\x62\x61\x63\x6B","\x67\x65\x74\x43\x65\x6C\x6C\x73\x46\x6F\x72\x47\x72\x6F\x75\x70","\x63\x72\x65\x61\x74\x65\x47\x72\x6F\x75\x70\x43\x65\x6C\x6C","\x67\x65\x74\x42\x6F\x75\x6E\x64\x73\x46\x6F\x72\x47\x72\x6F\x75\x70","\x61\x64\x64\x41\x6C\x6C\x45\x64\x67\x65\x73","\x67\x65\x74\x45\x64\x67\x65\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E\x45\x72\x72\x6F\x72","\x69\x6E\x73\x65\x72\x74\x56\x65\x72\x74\x65\x78","\x63\x72\x65\x61\x74\x65\x56\x65\x72\x74\x65\x78","\x63\x72\x65\x61\x74\x65\x45\x64\x67\x65","\x61\x64\x64\x45\x64\x67\x65","\x69\x73\x41\x6C\x6C\x6F\x77\x4E\x65\x67\x61\x74\x69\x76\x65\x43\x6F\x6F\x72\x64\x69\x6E\x61\x74\x65\x73","\x69\x73\x45\x78\x74\x65\x6E\x64\x50\x61\x72\x65\x6E\x74\x73\x4F\x6E\x41\x64\x64","\x69\x73\x45\x78\x74\x65\x6E\x64\x50\x61\x72\x65\x6E\x74","\x65\x78\x74\x65\x6E\x64\x50\x61\x72\x65\x6E\x74","\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x43\x68\x69\x6C\x64","\x67\x65\x74\x44\x65\x6C\x65\x74\x61\x62\x6C\x65\x43\x65\x6C\x6C\x73","\x69\x6E\x63\x6C\x75\x64\x65\x45\x64\x67\x65\x73","\x6E\x65\x77\x45\x64\x67\x65","\x67\x65\x74\x46\x6F\x6C\x64\x61\x62\x6C\x65\x43\x65\x6C\x6C\x73","\x63\x6F\x6C\x6C\x61\x70\x73\x65","\x72\x65\x63\x75\x72\x73\x65","\x69\x73\x43\x65\x6C\x6C\x46\x6F\x6C\x64\x61\x62\x6C\x65","\x73\x77\x61\x70\x42\x6F\x75\x6E\x64\x73","\x75\x70\x64\x61\x74\x65\x41\x6C\x74\x65\x72\x6E\x61\x74\x65\x42\x6F\x75\x6E\x64\x73","\x67\x65\x74\x50\x72\x65\x66\x65\x72\x72\x65\x64\x53\x69\x7A\x65\x46\x6F\x72\x43\x65\x6C\x6C","\x67\x65\x74\x41\x6C\x6C\x45\x64\x67\x65\x73","\x69\x67\x6E\x6F\x72\x65\x43\x68\x69\x6C\x64\x72\x65\x6E","\x53\x48\x41\x50\x45\x5F\x4C\x41\x42\x45\x4C","\x53\x54\x59\x4C\x45\x5F\x49\x4D\x41\x47\x45\x5F\x57\x49\x44\x54\x48","\x53\x54\x59\x4C\x45\x5F\x49\x4D\x41\x47\x45\x5F\x48\x45\x49\x47\x48\x54","\x67\x65\x74\x53\x69\x7A\x65\x46\x6F\x72\x53\x74\x72\x69\x6E\x67","\x72\x65\x73\x69\x7A\x65\x43\x65\x6C\x6C","\x69\x73\x43\x6C\x6F\x6E\x65\x49\x6E\x76\x61\x6C\x69\x64\x45\x64\x67\x65\x73","\x73\x65\x74\x41\x6C\x6C\x6F\x77\x4E\x65\x67\x61\x74\x69\x76\x65\x43\x6F\x6F\x72\x64\x69\x6E\x61\x74\x65\x73","\x69\x73\x44\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x4F\x6E\x4D\x6F\x76\x65","\x69\x73\x41\x6C\x6C\x6F\x77\x44\x61\x6E\x67\x6C\x69\x6E\x67\x45\x64\x67\x65\x73","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x47\x72\x61\x70\x68","\x74\x72\x61\x6E\x73\x6C\x61\x74\x65\x43\x65\x6C\x6C","\x67\x65\x74\x43\x65\x6C\x6C\x43\x6F\x6E\x74\x61\x69\x6E\x6D\x65\x6E\x74\x41\x72\x65\x61","\x67\x65\x74\x43\x75\x72\x72\x65\x6E\x74\x52\x6F\x6F\x74","\x67\x65\x74\x4D\x61\x78\x69\x6D\x75\x6D\x47\x72\x61\x70\x68\x42\x6F\x75\x6E\x64\x73","\x69\x73\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x43\x68\x69\x6C\x64","\x67\x65\x74\x4F\x76\x65\x72\x6C\x61\x70","\x67\x65\x74\x41\x6C\x6C\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74\x73","\x53\x54\x59\x4C\x45\x5F\x45\x58\x49\x54\x5F\x58","\x53\x54\x59\x4C\x45\x5F\x45\x4E\x54\x52\x59\x5F\x58","\x53\x54\x59\x4C\x45\x5F\x45\x58\x49\x54\x5F\x59","\x53\x54\x59\x4C\x45\x5F\x45\x4E\x54\x52\x59\x5F\x59","\x53\x54\x59\x4C\x45\x5F\x45\x58\x49\x54\x5F\x50\x45\x52\x49\x4D\x45\x54\x45\x52","\x53\x54\x59\x4C\x45\x5F\x45\x4E\x54\x52\x59\x5F\x50\x45\x52\x49\x4D\x45\x54\x45\x52","\x73\x65\x74\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74","\x70\x6F\x69\x6E\x74","\x53\x54\x59\x4C\x45\x5F\x46\x4C\x49\x50\x48","\x53\x54\x59\x4C\x45\x5F\x46\x4C\x49\x50\x56","\x69\x73\x50\x6F\x72\x74\x73\x45\x6E\x61\x62\x6C\x65\x64","\x67\x65\x74\x54\x65\x72\x6D\x69\x6E\x61\x6C\x46\x6F\x72\x50\x6F\x72\x74","\x69\x73\x43\x65\x6C\x6C\x44\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65","\x65\x6E\x74\x65\x72\x47\x72\x6F\x75\x70","\x69\x73\x56\x61\x6C\x69\x64\x52\x6F\x6F\x74","\x65\x78\x69\x74\x47\x72\x6F\x75\x70","\x67\x65\x74\x43\x65\x6C\x6C\x42\x6F\x75\x6E\x64\x73","\x73\x68\x69\x66\x74\x50\x72\x65\x76\x69\x65\x77\x31","\x73\x68\x69\x66\x74\x50\x72\x65\x76\x69\x65\x77\x32","\x7A\x6F\x6F\x6D\x49\x6E","\x7A\x6F\x6F\x6D\x4F\x75\x74","\x7A\x6F\x6F\x6D\x41\x63\x74\x75\x61\x6C","\x7A\x6F\x6F\x6D\x54\x6F","\x73\x63\x72\x6F\x6C\x6C\x52\x65\x63\x74\x54\x6F\x56\x69\x73\x69\x62\x6C\x65","\x7A\x6F\x6F\x6D\x54\x6F\x52\x65\x63\x74","\x73\x63\x72\x6F\x6C\x6C\x43\x65\x6C\x6C\x54\x6F\x56\x69\x73\x69\x62\x6C\x65","\x69\x73\x43\x65\x6C\x6C\x43\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65","\x53\x54\x59\x4C\x45\x5F\x4F\x52\x54\x48\x4F\x47\x4F\x4E\x41\x4C","\x53\x65\x67\x6D\x65\x6E\x74\x43\x6F\x6E\x6E\x65\x63\x74\x6F\x72","\x45\x6C\x62\x6F\x77\x43\x6F\x6E\x6E\x65\x63\x74\x6F\x72","\x53\x69\x64\x65\x54\x6F\x53\x69\x64\x65","\x54\x6F\x70\x54\x6F\x42\x6F\x74\x74\x6F\x6D","\x45\x6E\x74\x69\x74\x79\x52\x65\x6C\x61\x74\x69\x6F\x6E","\x4F\x72\x74\x68\x43\x6F\x6E\x6E\x65\x63\x74\x6F\x72","\x69\x73\x4C\x6F\x6F\x70","\x69\x73\x43\x6C\x6F\x6E\x65\x45\x76\x65\x6E\x74","\x49\x53\x5F\x4D\x41\x43","\x69\x73\x4D\x65\x74\x61\x44\x6F\x77\x6E","\x69\x73\x41\x6C\x74\x44\x6F\x77\x6E","\x69\x73\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x65\x64\x45\x76\x65\x6E\x74","\x69\x73\x46\x6F\x72\x63\x65\x4D\x61\x72\x71\x75\x65\x65\x45\x76\x65\x6E\x74","\x76\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E\x41\x6C\x65\x72\x74","\x69\x73\x45\x64\x67\x65\x56\x61\x6C\x69\x64","\x69\x73\x56\x61\x6C\x69\x64\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E","\x63\x68\x65\x63\x6B","\x76\x61\x6C\x69\x64\x61\x74\x65\x45\x64\x67\x65","\x76\x61\x6C\x69\x64\x61\x74\x65\x47\x72\x61\x70\x68","\x67\x65\x74\x43\x65\x6C\x6C\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E\x45\x72\x72\x6F\x72","\x76\x61\x6C\x69\x64\x61\x74\x65\x43\x65\x6C\x6C","\x61\x74\x74\x72","\x63\x6F\x75\x6E\x74\x45\x72\x72\x6F\x72","\x73\x65\x74\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x74\x6F\x53\x74\x72\x69\x6E\x67","\x69\x73\x48\x74\x6D\x6C\x4C\x61\x62\x65\x6C\x73","\x73\x65\x74\x48\x74\x6D\x6C\x4C\x61\x62\x65\x6C\x73","\x53\x54\x59\x4C\x45\x5F\x57\x48\x49\x54\x45\x5F\x53\x50\x41\x43\x45","\x67\x65\x74\x54\x6F\x6F\x6C\x74\x69\x70","\x67\x65\x74\x48\x61\x6E\x64\x6C\x65\x72","\x67\x65\x74\x54\x6F\x6F\x6C\x74\x69\x70\x46\x6F\x72\x4E\x6F\x64\x65","\x67\x65\x74\x54\x6F\x6F\x6C\x74\x69\x70\x46\x6F\x72\x43\x65\x6C\x6C","\x67\x65\x74\x43\x75\x72\x73\x6F\x72\x46\x6F\x72\x43\x65\x6C\x6C","\x53\x54\x59\x4C\x45\x5F\x49\x4E\x44\x49\x43\x41\x54\x4F\x52\x5F\x43\x4F\x4C\x4F\x52","\x53\x54\x59\x4C\x45\x5F\x49\x4E\x44\x49\x43\x41\x54\x4F\x52\x5F\x47\x52\x41\x44\x49\x45\x4E\x54\x43\x4F\x4C\x4F\x52","\x53\x54\x59\x4C\x45\x5F\x49\x4E\x44\x49\x43\x41\x54\x4F\x52\x5F\x53\x48\x41\x50\x45","\x53\x54\x59\x4C\x45\x5F\x49\x4E\x44\x49\x43\x41\x54\x4F\x52\x5F\x49\x4D\x41\x47\x45","\x73\x65\x74\x42\x6F\x72\x64\x65\x72","\x53\x48\x41\x50\x45\x5F\x53\x57\x49\x4D\x4C\x41\x4E\x45","\x69\x73\x52\x65\x73\x69\x7A\x65\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x73\x65\x74\x52\x65\x73\x69\x7A\x65\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x69\x73\x45\x73\x63\x61\x70\x65\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x45\x73\x63\x61\x70\x65\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x49\x6E\x76\x6F\x6B\x65\x73\x53\x74\x6F\x70\x43\x65\x6C\x6C\x45\x64\x69\x74\x69\x6E\x67","\x73\x65\x74\x45\x6E\x74\x65\x72\x53\x74\x6F\x70\x73\x43\x65\x6C\x6C\x45\x64\x69\x74\x69\x6E\x67","\x69\x73\x43\x65\x6C\x6C\x4C\x6F\x63\x6B\x65\x64","\x69\x73\x43\x65\x6C\x6C\x73\x4C\x6F\x63\x6B\x65\x64","\x73\x65\x74\x43\x65\x6C\x6C\x73\x4C\x6F\x63\x6B\x65\x64","\x67\x65\x74\x43\x6C\x6F\x6E\x65\x61\x62\x6C\x65\x43\x65\x6C\x6C\x73","\x69\x73\x43\x65\x6C\x6C\x43\x6C\x6F\x6E\x65\x61\x62\x6C\x65","\x69\x73\x43\x65\x6C\x6C\x73\x43\x6C\x6F\x6E\x65\x61\x62\x6C\x65","\x53\x54\x59\x4C\x45\x5F\x43\x4C\x4F\x4E\x45\x41\x42\x4C\x45","\x73\x65\x74\x43\x65\x6C\x6C\x73\x43\x6C\x6F\x6E\x65\x61\x62\x6C\x65","\x63\x61\x6E\x45\x78\x70\x6F\x72\x74\x43\x65\x6C\x6C","\x63\x61\x6E\x49\x6D\x70\x6F\x72\x74\x43\x65\x6C\x6C","\x69\x73\x43\x65\x6C\x6C\x73\x53\x65\x6C\x65\x63\x74\x61\x62\x6C\x65","\x73\x65\x74\x43\x65\x6C\x6C\x73\x53\x65\x6C\x65\x63\x74\x61\x62\x6C\x65","\x69\x73\x43\x65\x6C\x6C\x44\x65\x6C\x65\x74\x61\x62\x6C\x65","\x69\x73\x43\x65\x6C\x6C\x73\x44\x65\x6C\x65\x74\x61\x62\x6C\x65","\x53\x54\x59\x4C\x45\x5F\x44\x45\x4C\x45\x54\x41\x42\x4C\x45","\x73\x65\x74\x43\x65\x6C\x6C\x73\x44\x65\x6C\x65\x74\x61\x62\x6C\x65","\x69\x73\x4C\x61\x62\x65\x6C\x4D\x6F\x76\x61\x62\x6C\x65","\x67\x65\x74\x4D\x6F\x76\x61\x62\x6C\x65\x43\x65\x6C\x6C\x73","\x69\x73\x43\x65\x6C\x6C\x73\x4D\x6F\x76\x61\x62\x6C\x65","\x53\x54\x59\x4C\x45\x5F\x4D\x4F\x56\x41\x42\x4C\x45","\x73\x65\x74\x43\x65\x6C\x6C\x73\x4D\x6F\x76\x61\x62\x6C\x65","\x73\x65\x74\x50\x6F\x72\x74\x73\x45\x6E\x61\x62\x6C\x65\x64","\x67\x65\x74\x47\x72\x69\x64\x53\x69\x7A\x65","\x73\x65\x74\x47\x72\x69\x64\x53\x69\x7A\x65","\x67\x65\x74\x54\x6F\x6C\x65\x72\x61\x6E\x63\x65","\x73\x65\x74\x54\x6F\x6C\x65\x72\x61\x6E\x63\x65","\x69\x73\x56\x65\x72\x74\x65\x78\x4C\x61\x62\x65\x6C\x73\x4D\x6F\x76\x61\x62\x6C\x65","\x73\x65\x74\x56\x65\x72\x74\x65\x78\x4C\x61\x62\x65\x6C\x73\x4D\x6F\x76\x61\x62\x6C\x65","\x69\x73\x45\x64\x67\x65\x4C\x61\x62\x65\x6C\x73\x4D\x6F\x76\x61\x62\x6C\x65","\x73\x65\x74\x45\x64\x67\x65\x4C\x61\x62\x65\x6C\x73\x4D\x6F\x76\x61\x62\x6C\x65","\x69\x73\x53\x77\x69\x6D\x6C\x61\x6E\x65\x4E\x65\x73\x74\x69\x6E\x67","\x73\x65\x74\x53\x77\x69\x6D\x6C\x61\x6E\x65\x4E\x65\x73\x74\x69\x6E\x67","\x73\x65\x74\x53\x77\x69\x6D\x6C\x61\x6E\x65\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x4D\x75\x6C\x74\x69\x67\x72\x61\x70\x68","\x73\x65\x74\x4D\x75\x6C\x74\x69\x67\x72\x61\x70\x68","\x69\x73\x41\x6C\x6C\x6F\x77\x4C\x6F\x6F\x70\x73","\x73\x65\x74\x41\x6C\x6C\x6F\x77\x44\x61\x6E\x67\x6C\x69\x6E\x67\x45\x64\x67\x65\x73","\x73\x65\x74\x43\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65\x45\x64\x67\x65\x73","\x69\x73\x43\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65\x45\x64\x67\x65\x73","\x73\x65\x74\x43\x6C\x6F\x6E\x65\x49\x6E\x76\x61\x6C\x69\x64\x45\x64\x67\x65\x73","\x73\x65\x74\x41\x6C\x6C\x6F\x77\x4C\x6F\x6F\x70\x73","\x73\x65\x74\x44\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x4F\x6E\x4D\x6F\x76\x65","\x73\x65\x74\x44\x72\x6F\x70\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x53\x70\x6C\x69\x74\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x53\x70\x6C\x69\x74\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x43\x65\x6C\x6C\x52\x65\x73\x69\x7A\x61\x62\x6C\x65","\x69\x73\x43\x65\x6C\x6C\x73\x52\x65\x73\x69\x7A\x61\x62\x6C\x65","\x53\x54\x59\x4C\x45\x5F\x52\x45\x53\x49\x5A\x41\x42\x4C\x45","\x73\x65\x74\x43\x65\x6C\x6C\x73\x52\x65\x73\x69\x7A\x61\x62\x6C\x65","\x69\x73\x54\x65\x72\x6D\x69\x6E\x61\x6C\x50\x6F\x69\x6E\x74\x4D\x6F\x76\x61\x62\x6C\x65","\x69\x73\x43\x65\x6C\x6C\x42\x65\x6E\x64\x61\x62\x6C\x65","\x69\x73\x43\x65\x6C\x6C\x73\x42\x65\x6E\x64\x61\x62\x6C\x65","\x53\x54\x59\x4C\x45\x5F\x42\x45\x4E\x44\x41\x42\x4C\x45","\x73\x65\x74\x43\x65\x6C\x6C\x73\x42\x65\x6E\x64\x61\x62\x6C\x65","\x69\x73\x43\x65\x6C\x6C\x73\x45\x64\x69\x74\x61\x62\x6C\x65","\x53\x54\x59\x4C\x45\x5F\x45\x44\x49\x54\x41\x42\x4C\x45","\x73\x65\x74\x43\x65\x6C\x6C\x73\x45\x64\x69\x74\x61\x62\x6C\x65","\x69\x73\x43\x65\x6C\x6C\x73\x44\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65","\x73\x65\x74\x43\x65\x6C\x6C\x73\x44\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65","\x69\x73\x56\x61\x6C\x69\x64\x53\x6F\x75\x72\x63\x65","\x69\x73\x56\x61\x6C\x69\x64\x54\x61\x72\x67\x65\x74","\x73\x65\x74\x54\x6F\x6F\x6C\x74\x69\x70\x73","\x73\x65\x74\x50\x61\x6E\x6E\x69\x6E\x67","\x69\x73\x41\x75\x74\x6F\x53\x69\x7A\x65\x43\x65\x6C\x6C\x73","\x53\x54\x59\x4C\x45\x5F\x41\x55\x54\x4F\x53\x49\x5A\x45","\x73\x65\x74\x41\x75\x74\x6F\x53\x69\x7A\x65\x43\x65\x6C\x6C\x73","\x69\x73\x45\x78\x74\x65\x6E\x64\x50\x61\x72\x65\x6E\x74\x73","\x73\x65\x74\x45\x78\x74\x65\x6E\x64\x50\x61\x72\x65\x6E\x74\x73","\x73\x65\x74\x45\x78\x74\x65\x6E\x64\x50\x61\x72\x65\x6E\x74\x73\x4F\x6E\x41\x64\x64","\x69\x73\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x43\x68\x69\x6C\x64\x72\x65\x6E","\x73\x65\x74\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x43\x68\x69\x6C\x64\x72\x65\x6E","\x69\x73\x41\x6C\x6C\x6F\x77\x4F\x76\x65\x72\x6C\x61\x70\x50\x61\x72\x65\x6E\x74","\x53\x54\x59\x4C\x45\x5F\x46\x4F\x4C\x44\x41\x42\x4C\x45","\x69\x73\x56\x61\x6C\x69\x64\x44\x72\x6F\x70\x54\x61\x72\x67\x65\x74","\x69\x73\x53\x70\x6C\x69\x74\x54\x61\x72\x67\x65\x74","\x73\x65\x74\x44\x65\x66\x61\x75\x6C\x74\x50\x61\x72\x65\x6E\x74","\x68\x69\x74\x73\x53\x77\x69\x6D\x6C\x61\x6E\x65\x43\x6F\x6E\x74\x65\x6E\x74","\x67\x65\x74\x50\x6F\x69\x6E\x74\x46\x6F\x72\x45\x76\x65\x6E\x74","\x67\x65\x74\x43\x65\x6C\x6C\x73","\x67\x65\x74\x43\x65\x6C\x6C\x73\x42\x65\x79\x6F\x6E\x64","\x69\x73\x43\x65\x6C\x6C\x53\x65\x6C\x65\x63\x74\x65\x64","\x69\x73\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x45\x6D\x70\x74\x79","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x6F\x75\x6E\x74","\x61\x64\x64\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x61\x64\x64\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73","\x72\x65\x6D\x6F\x76\x65\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x73\x65\x6C\x65\x63\x74\x52\x65\x67\x69\x6F\x6E","\x73\x65\x6C\x65\x63\x74\x43\x65\x6C\x6C\x73\x46\x6F\x72\x45\x76\x65\x6E\x74","\x73\x65\x6C\x65\x63\x74\x4E\x65\x78\x74\x43\x65\x6C\x6C","\x73\x65\x6C\x65\x63\x74\x43\x65\x6C\x6C","\x73\x65\x6C\x65\x63\x74\x50\x72\x65\x76\x69\x6F\x75\x73\x43\x65\x6C\x6C","\x73\x65\x6C\x65\x63\x74\x50\x61\x72\x65\x6E\x74\x43\x65\x6C\x6C","\x73\x65\x6C\x65\x63\x74\x43\x68\x69\x6C\x64\x43\x65\x6C\x6C","\x73\x65\x6C\x65\x63\x74\x41\x6C\x6C","\x73\x65\x6C\x65\x63\x74\x56\x65\x72\x74\x69\x63\x65\x73","\x73\x65\x6C\x65\x63\x74\x43\x65\x6C\x6C\x73","\x73\x65\x6C\x65\x63\x74\x45\x64\x67\x65\x73","\x63\x72\x65\x61\x74\x65\x48\x61\x6E\x64\x6C\x65\x72","\x75\x70\x64\x61\x74\x65\x4D\x6F\x75\x73\x65\x45\x76\x65\x6E\x74","\x4D\x4F\x55\x53\x45\x5F\x44\x4F\x57\x4E","\x6C\x61\x73\x74\x54\x6F\x75\x63\x68\x58","\x6C\x61\x73\x74\x4D\x6F\x75\x73\x65\x58","\x6C\x61\x73\x74\x4D\x6F\x75\x73\x65\x59","\x4D\x4F\x55\x53\x45\x5F\x55\x50","\x4D\x4F\x55\x53\x45\x5F\x4D\x4F\x56\x45","\x64\x65\x73\x74\x72\x6F\x79\x65\x64","\x74\x6F\x6F\x6C\x74\x69\x70","\x68\x65\x6C\x70","\x67\x72\x61\x70\x68\x52\x65\x6E\x64\x65\x72\x48\x69\x6E\x74","\x73\x68\x6F\x77\x56\x69\x65\x77\x70\x6F\x72\x74","\x73\x69\x7A\x65\x72\x53\x69\x7A\x65","\x75\x70\x64\x61\x74\x65\x4F\x6E\x50\x61\x6E","\x73\x69\x7A\x65\x72\x49\x6D\x61\x67\x65","\x73\x68\x61\x70\x65\x2D\x72\x65\x6E\x64\x65\x72\x69\x6E\x67","\x6F\x70\x74\x69\x6D\x69\x7A\x65\x53\x70\x65\x65\x64","\x69\x6D\x61\x67\x65\x2D\x72\x65\x6E\x64\x65\x72\x69\x6E\x67","\x75\x70\x64\x61\x74\x65\x48\x61\x6E\x64\x6C\x65\x72","\x75\x70\x64\x61\x74\x65","\x70\x61\x6E\x48\x61\x6E\x64\x6C\x65\x72","\x72\x65\x66\x72\x65\x73\x68\x48\x61\x6E\x64\x6C\x65\x72","\x73\x65\x6C\x65\x63\x74\x69\x6F\x6E\x42\x6F\x72\x64\x65\x72","\x72\x65\x64\x69\x72\x65\x63\x74\x4D\x6F\x75\x73\x65\x45\x76\x65\x6E\x74\x73","\x73\x69\x7A\x65\x72","\x63\x72\x65\x61\x74\x65\x53\x69\x7A\x65\x72","\x73\x65\x74\x5A\x6F\x6F\x6D\x45\x6E\x61\x62\x6C\x65\x64","\x67\x65\x74\x53\x6F\x75\x72\x63\x65\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72\x53\x69\x7A\x65","\x67\x65\x74\x4F\x75\x74\x6C\x69\x6E\x65\x4F\x66\x66\x73\x65\x74","\x73\x74\x61\x72\x74\x58","\x73\x74\x61\x72\x74\x59","\x64\x78\x30","\x64\x79\x30","\x6E","\x76\x61\x6C\x69\x64\x4E\x65\x69\x67\x68\x62\x6F\x72\x73","\x74\x79\x70\x65\x45\x72\x72\x6F\x72","\x76\x61\x6C\x69\x64\x4E\x65\x69\x67\x68\x62\x6F\x72\x73\x41\x6C\x6C\x6F\x77\x65\x64","\x63\x68\x65\x63\x6B\x54\x65\x72\x6D\x69\x6E\x61\x6C","\x63\x68\x65\x63\x6B\x4E\x65\x69\x67\x68\x62\x6F\x72\x73","\x63\x68\x65\x63\x6B\x54\x79\x70\x65","\x75\x6E\x64\x6F\x48\x61\x6E\x64\x6C\x65\x72","\x62\x75\x62\x62\x6C\x69\x6E\x67","\x69\x73\x42\x75\x62\x62\x6C\x69\x6E\x67","\x73\x65\x74\x42\x75\x62\x62\x6C\x69\x6E\x67","\x67\x65\x74\x4C\x61\x79\x6F\x75\x74","\x67\x65\x74\x43\x65\x6C\x6C\x73\x46\x6F\x72\x43\x68\x61\x6E\x67\x65\x73","\x67\x65\x74\x43\x65\x6C\x6C\x73\x46\x6F\x72\x43\x68\x61\x6E\x67\x65","\x65\x78\x65\x63\x75\x74\x65\x4C\x61\x79\x6F\x75\x74","\x72\x65\x73\x69\x7A\x65\x48\x61\x6E\x64\x6C\x65\x72","\x66\x6F\x6C\x64\x48\x61\x6E\x64\x6C\x65\x72","\x73\x68\x69\x66\x74\x52\x69\x67\x68\x74\x77\x61\x72\x64\x73","\x73\x68\x69\x66\x74\x44\x6F\x77\x6E\x77\x61\x72\x64\x73","\x69\x73\x43\x65\x6C\x6C\x49\x67\x6E\x6F\x72\x65\x64","\x69\x73\x43\x65\x6C\x6C\x53\x68\x69\x66\x74\x61\x62\x6C\x65","\x69\x73\x53\x68\x69\x66\x74\x52\x69\x67\x68\x74\x77\x61\x72\x64\x73","\x73\x65\x74\x53\x68\x69\x66\x74\x52\x69\x67\x68\x74\x77\x61\x72\x64\x73","\x69\x73\x53\x68\x69\x66\x74\x44\x6F\x77\x6E\x77\x61\x72\x64\x73","\x73\x65\x74\x53\x68\x69\x66\x74\x44\x6F\x77\x6E\x77\x61\x72\x64\x73","\x63\x65\x6C\x6C\x52\x65\x73\x69\x7A\x65\x64","\x67\x65\x74\x43\x65\x6C\x6C\x73\x54\x6F\x53\x68\x69\x66\x74","\x73\x68\x69\x66\x74\x43\x65\x6C\x6C","\x61\x64\x64\x45\x6E\x61\x62\x6C\x65\x64","\x72\x65\x73\x69\x7A\x65\x45\x6E\x61\x62\x6C\x65\x64","\x61\x64\x64\x48\x61\x6E\x64\x6C\x65\x72","\x69\x73\x41\x64\x64\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x52\x65\x73\x69\x7A\x65\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x48\x6F\x72\x69\x7A\x6F\x6E\x74\x61\x6C","\x73\x65\x74\x41\x64\x64\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x52\x65\x73\x69\x7A\x65\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x53\x77\x69\x6D\x6C\x61\x6E\x65\x49\x67\x6E\x6F\x72\x65\x64","\x69\x73\x43\x65\x6C\x6C\x48\x6F\x72\x69\x7A\x6F\x6E\x74\x61\x6C","\x73\x77\x69\x6D\x6C\x61\x6E\x65\x41\x64\x64\x65\x64","\x72\x65\x73\x69\x7A\x65\x53\x77\x69\x6D\x6C\x61\x6E\x65","\x6F\x6C\x64\x42\x6F\x75\x6E\x64\x73","\x6F\x6C\x64\x53\x74\x61\x74\x65\x73","\x6F\x6C\x64\x53\x63\x61\x6C\x65","\x64\x65\x6C\x74\x61\x73","\x63\x6F\x75\x6E\x74","\x58","\x59","\x61\x64\x64\x45\x64\x67\x65\x73","\x72\x65\x73\x6F\x6C\x76\x65","\x74\x72\x61\x6E\x73\x6C\x61\x74\x65\x53\x74\x61\x74\x65","\x72\x65\x76\x61\x6C\x69\x64\x61\x74\x65\x53\x74\x61\x74\x65","\x75\x70\x64\x61\x74\x65\x50\x72\x65\x76\x69\x65\x77\x53\x68\x61\x70\x65","\x6D\x61\x78\x43\x65\x6C\x6C\x73","\x68\x69\x67\x68\x6C\x69\x67\x68\x74\x45\x6E\x61\x62\x6C\x65\x64","\x63\x6C\x6F\x6E\x65\x45\x6E\x61\x62\x6C\x65\x64","\x6D\x6F\x76\x65\x45\x6E\x61\x62\x6C\x65\x64","\x67\x75\x69\x64\x65","\x63\x75\x72\x72\x65\x6E\x74\x44\x78","\x63\x75\x72\x72\x65\x6E\x74\x44\x79","\x75\x70\x64\x61\x74\x65\x43\x75\x72\x73\x6F\x72","\x73\x65\x6C\x65\x63\x74\x45\x6E\x61\x62\x6C\x65\x64","\x63\x6F\x6E\x6E\x65\x63\x74\x4F\x6E\x44\x72\x6F\x70","\x73\x63\x72\x6F\x6C\x6C\x4F\x6E\x4D\x6F\x76\x65","\x70\x72\x65\x76\x69\x65\x77\x43\x6F\x6C\x6F\x72","\x68\x74\x6D\x6C\x50\x72\x65\x76\x69\x65\x77","\x73\x63\x61\x6C\x65\x47\x72\x69\x64","\x72\x6F\x74\x61\x74\x69\x6F\x6E\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x43\x6C\x6F\x6E\x65\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x43\x6C\x6F\x6E\x65\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x4D\x6F\x76\x65\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x4D\x6F\x76\x65\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x53\x65\x6C\x65\x63\x74\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x53\x65\x6C\x65\x63\x74\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x52\x65\x6D\x6F\x76\x65\x43\x65\x6C\x6C\x73\x46\x72\x6F\x6D\x50\x61\x72\x65\x6E\x74","\x73\x65\x74\x52\x65\x6D\x6F\x76\x65\x43\x65\x6C\x6C\x73\x46\x72\x6F\x6D\x50\x61\x72\x65\x6E\x74","\x67\x65\x74\x49\x6E\x69\x74\x69\x61\x6C\x43\x65\x6C\x6C\x46\x6F\x72\x45\x76\x65\x6E\x74","\x69\x73\x44\x65\x6C\x61\x79\x65\x64\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E","\x64\x65\x6C\x61\x79\x65\x64\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E","\x63\x65\x6C\x6C\x57\x61\x73\x43\x6C\x69\x63\x6B\x65\x64","\x53\x45\x4C\x45\x43\x54","\x66\x69\x72\x73\x74","\x67\x65\x74\x50\x72\x65\x76\x69\x65\x77\x42\x6F\x75\x6E\x64\x73","\x63\x72\x65\x61\x74\x65\x50\x72\x65\x76\x69\x65\x77\x53\x68\x61\x70\x65","\x70\x42\x6F\x75\x6E\x64\x73","\x75\x73\x65\x47\x75\x69\x64\x65\x73\x46\x6F\x72\x45\x76\x65\x6E\x74","\x73\x65\x74\x48\x69\x67\x68\x6C\x69\x67\x68\x74\x43\x6F\x6C\x6F\x72","\x56\x41\x4C\x49\x44\x5F\x43\x4F\x4C\x4F\x52","\x49\x4E\x56\x41\x4C\x49\x44\x5F\x43\x4F\x4E\x4E\x45\x43\x54\x5F\x54\x41\x52\x47\x45\x54\x5F\x43\x4F\x4C\x4F\x52","\x43\x55\x52\x53\x4F\x52\x5F\x4D\x4F\x56\x41\x42\x4C\x45\x5F\x45\x44\x47\x45","\x43\x55\x52\x53\x4F\x52\x5F\x4D\x4F\x56\x41\x42\x4C\x45\x5F\x56\x45\x52\x54\x45\x58","\x73\x65\x6C\x65\x63\x74\x44\x65\x6C\x61\x79\x65\x64","\x64\x65\x73\x74\x72\x6F\x79\x53\x68\x61\x70\x65\x73","\x67\x75\x69\x64\x65\x73","\x73\x68\x6F\x75\x6C\x64\x52\x65\x6D\x6F\x76\x65\x43\x65\x6C\x6C\x73\x46\x72\x6F\x6D\x50\x61\x72\x65\x6E\x74","\x74\x72\x69\x67\x67\x65\x72\x58","\x74\x72\x69\x67\x67\x65\x72\x59","\x75\x73\x65\x50\x6F\x70\x75\x70\x54\x72\x69\x67\x67\x65\x72","\x75\x73\x65\x4C\x65\x66\x74\x42\x75\x74\x74\x6F\x6E\x46\x6F\x72\x50\x61\x6E\x6E\x69\x6E\x67","\x73\x65\x6C\x65\x63\x74\x4F\x6E\x50\x6F\x70\x75\x70","\x63\x6C\x65\x61\x72\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x4F\x6E\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64","\x69\x67\x6E\x6F\x72\x65\x43\x65\x6C\x6C","\x70\x72\x65\x76\x69\x65\x77\x45\x6E\x61\x62\x6C\x65\x64","\x75\x73\x65\x47\x72\x69\x64","\x69\x73\x50\x61\x6E\x6E\x69\x6E\x67\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x50\x61\x6E\x6E\x69\x6E\x67\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x50\x61\x6E\x6E\x69\x6E\x67\x54\x72\x69\x67\x67\x65\x72","\x70\x6F\x70\x75\x70\x54\x72\x69\x67\x67\x65\x72","\x70\x61\x6E\x6E\x69\x6E\x67\x54\x72\x69\x67\x67\x65\x72","\x63\x6F\x6E\x73\x75\x6D\x65\x50\x61\x6E\x6E\x69\x6E\x67\x54\x72\x69\x67\x67\x65\x72","\x67\x65\x74\x43\x65\x6C\x6C\x46\x6F\x72\x50\x6F\x70\x75\x70\x45\x76\x65\x6E\x74","\x76\x61\x6C\x69\x64\x43\x6F\x6C\x6F\x72","\x44\x45\x46\x41\x55\x4C\x54\x5F\x56\x41\x4C\x49\x44\x5F\x43\x4F\x4C\x4F\x52","\x69\x6E\x76\x61\x6C\x69\x64\x43\x6F\x6C\x6F\x72","\x44\x45\x46\x41\x55\x4C\x54\x5F\x49\x4E\x56\x41\x4C\x49\x44\x5F\x43\x4F\x4C\x4F\x52","\x68\x6F\x74\x73\x70\x6F\x74","\x44\x45\x46\x41\x55\x4C\x54\x5F\x48\x4F\x54\x53\x50\x4F\x54","\x68\x6F\x74\x73\x70\x6F\x74\x45\x6E\x61\x62\x6C\x65\x64","\x63\x75\x72\x72\x65\x6E\x74\x43\x6F\x6C\x6F\x72","\x76\x61\x6C\x69\x64\x53\x74\x61\x74\x65","\x6D\x61\x72\x6B\x65\x64\x53\x74\x61\x74\x65","\x73\x65\x74\x48\x6F\x74\x73\x70\x6F\x74","\x67\x65\x74\x48\x6F\x74\x73\x70\x6F\x74","\x73\x65\x74\x48\x6F\x74\x73\x70\x6F\x74\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x48\x6F\x74\x73\x70\x6F\x74\x45\x6E\x61\x62\x6C\x65\x64","\x68\x61\x73\x56\x61\x6C\x69\x64\x53\x74\x61\x74\x65","\x67\x65\x74\x56\x61\x6C\x69\x64\x53\x74\x61\x74\x65","\x67\x65\x74\x4D\x61\x72\x6B\x65\x64\x53\x74\x61\x74\x65","\x75\x6E\x6D\x61\x72\x6B","\x70\x72\x6F\x63\x65\x73\x73","\x69\x73\x56\x61\x6C\x69\x64\x53\x74\x61\x74\x65","\x67\x65\x74\x4D\x61\x72\x6B\x65\x72\x43\x6F\x6C\x6F\x72","\x6D\x61\x72\x6B\x43\x65\x6C\x6C","\x67\x65\x74\x53\x74\x61\x74\x65\x54\x6F\x4D\x61\x72\x6B","\x69\x6E\x74\x65\x72\x73\x65\x63\x74\x73\x48\x6F\x74\x73\x70\x6F\x74","\x72\x65\x73\x65\x74\x48\x61\x6E\x64\x6C\x65\x72","\x68\x61\x6E\x64\x6C\x65\x72\x73","\x6D\x61\x78\x48\x61\x6E\x64\x6C\x65\x72\x73","\x6D\x6F\x76\x65\x49\x63\x6F\x6E\x46\x72\x6F\x6E\x74","\x6D\x6F\x76\x65\x49\x63\x6F\x6E\x42\x61\x63\x6B","\x63\x6F\x6E\x6E\x65\x63\x74\x49\x6D\x61\x67\x65","\x74\x61\x72\x67\x65\x74\x43\x6F\x6E\x6E\x65\x63\x74\x49\x6D\x61\x67\x65","\x63\x72\x65\x61\x74\x65\x54\x61\x72\x67\x65\x74","\x6D\x61\x72\x6B\x65\x72","\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74\x48\x61\x6E\x64\x6C\x65\x72","\x77\x61\x79\x70\x6F\x69\x6E\x74\x73\x45\x6E\x61\x62\x6C\x65\x64","\x74\x61\x70\x41\x6E\x64\x48\x6F\x6C\x64\x45\x6E\x61\x62\x6C\x65\x64","\x74\x61\x70\x41\x6E\x64\x48\x6F\x6C\x64\x44\x65\x6C\x61\x79","\x74\x61\x70\x41\x6E\x64\x48\x6F\x6C\x64\x49\x6E\x50\x72\x6F\x67\x72\x65\x73\x73","\x74\x61\x70\x41\x6E\x64\x48\x6F\x6C\x64\x56\x61\x6C\x69\x64","\x74\x61\x70\x41\x6E\x64\x48\x6F\x6C\x64\x54\x6F\x6C\x65\x72\x61\x6E\x63\x65","\x69\x6E\x69\x74\x69\x61\x6C\x54\x6F\x75\x63\x68\x58","\x69\x6E\x69\x74\x69\x61\x6C\x54\x6F\x75\x63\x68\x59","\x69\x67\x6E\x6F\x72\x65\x4D\x6F\x75\x73\x65\x44\x6F\x77\x6E","\x63\x6F\x6E\x6E\x65\x63\x74\x49\x63\x6F\x6E\x4F\x66\x66\x73\x65\x74","\x65\x64\x67\x65\x53\x74\x61\x74\x65","\x64\x72\x69\x6C\x6C\x48\x61\x6E\x64\x6C\x65\x72","\x6D\x6F\x75\x73\x65\x44\x6F\x77\x6E\x43\x6F\x75\x6E\x74\x65\x72","\x6D\x6F\x76\x65\x50\x72\x65\x76\x69\x65\x77\x41\x77\x61\x79","\x69\x73\x43\x72\x65\x61\x74\x65\x54\x61\x72\x67\x65\x74","\x73\x65\x74\x43\x72\x65\x61\x74\x65\x54\x61\x72\x67\x65\x74","\x69\x63\x6F\x6E\x53\x74\x61\x74\x65","\x69\x63\x6F\x6E\x73","\x72\x65\x64\x72\x61\x77\x49\x63\x6F\x6E\x73","\x64\x65\x73\x74\x72\x6F\x79\x49\x63\x6F\x6E\x73","\x69\x73\x43\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65\x43\x65\x6C\x6C","\x69\x73\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6E\x67","\x76\x61\x6C\x69\x64\x61\x74\x65\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E","\x63\x72\x65\x61\x74\x65\x45\x64\x67\x65\x53\x74\x61\x74\x65","\x67\x65\x74\x43\x6F\x6E\x6E\x65\x63\x74\x49\x6D\x61\x67\x65","\x69\x73\x4D\x6F\x76\x65\x49\x63\x6F\x6E\x54\x6F\x46\x72\x6F\x6E\x74\x46\x6F\x72\x53\x74\x61\x74\x65","\x63\x72\x65\x61\x74\x65\x49\x63\x6F\x6E\x73","\x43\x55\x52\x53\x4F\x52\x5F\x43\x4F\x4E\x4E\x45\x43\x54","\x63\x75\x72\x72\x65\x6E\x74\x53\x74\x61\x74\x65","\x69\x63\x6F\x6E","\x67\x65\x74\x49\x63\x6F\x6E\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x69\x73\x53\x74\x61\x72\x74\x45\x76\x65\x6E\x74","\x63\x75\x72\x72\x65\x6E\x74\x46\x6F\x63\x75\x73","\x63\x75\x72\x72\x65\x6E\x74\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74","\x73\x6F\x75\x72\x63\x65\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74","\x77\x61\x79\x70\x6F\x69\x6E\x74\x73","\x74\x61\x70\x41\x6E\x64\x48\x6F\x6C\x64\x54\x68\x72\x65\x61\x64","\x63\x6C\x65\x61\x72\x54\x69\x6D\x65\x6F\x75\x74","\x74\x61\x70\x41\x6E\x64\x48\x6F\x6C\x64","\x73\x65\x6C\x65\x63\x74\x65\x64\x49\x63\x6F\x6E","\x69\x73\x49\x6D\x6D\x65\x64\x69\x61\x74\x65\x43\x6F\x6E\x6E\x65\x63\x74\x53\x6F\x75\x72\x63\x65","\x75\x70\x64\x61\x74\x65\x43\x75\x72\x72\x65\x6E\x74\x53\x74\x61\x74\x65","\x63\x6F\x6E\x76\x65\x72\x74\x57\x61\x79\x70\x6F\x69\x6E\x74","\x67\x65\x74\x54\x61\x72\x67\x65\x74\x50\x65\x72\x69\x6D\x65\x74\x65\x72\x50\x6F\x69\x6E\x74","\x67\x65\x74\x53\x6F\x75\x72\x63\x65\x50\x65\x72\x69\x6D\x65\x74\x65\x72\x50\x6F\x69\x6E\x74","\x64\x72\x61\x77\x50\x72\x65\x76\x69\x65\x77","\x75\x70\x64\x61\x74\x65\x49\x63\x6F\x6E\x73","\x69\x73\x53\x74\x6F\x70\x45\x76\x65\x6E\x74","\x61\x64\x64\x57\x61\x79\x70\x6F\x69\x6E\x74\x46\x6F\x72\x45\x76\x65\x6E\x74","\x67\x65\x74\x45\x64\x67\x65\x57\x69\x64\x74\x68","\x67\x65\x74\x45\x64\x67\x65\x43\x6F\x6C\x6F\x72","\x49\x4E\x56\x41\x4C\x49\x44\x5F\x43\x4F\x4C\x4F\x52","\x63\x72\x65\x61\x74\x65\x54\x61\x72\x67\x65\x74\x56\x65\x72\x74\x65\x78","\x67\x65\x74\x41\x6C\x69\x67\x6E\x6D\x65\x6E\x74\x54\x6F\x6C\x65\x72\x61\x6E\x63\x65","\x70\x6F\x69\x6E\x74\x49\x6D\x61\x67\x65","\x2F\x70\x6F\x69\x6E\x74\x2E\x67\x69\x66","\x68\x69\x67\x68\x6C\x69\x67\x68\x74\x43\x6F\x6C\x6F\x72","\x66\x6F\x63\x75\x73\x49\x63\x6F\x6E\x73","\x66\x6F\x63\x75\x73\x48\x69\x67\x68\x6C\x69\x67\x68\x74","\x66\x6F\x63\x75\x73\x50\x6F\x69\x6E\x74\x73","\x63\x75\x72\x72\x65\x6E\x74\x46\x6F\x63\x75\x73\x41\x72\x65\x61","\x67\x65\x74\x49\x6D\x61\x67\x65\x46\x6F\x72\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74","\x69\x73\x45\x76\x65\x6E\x74\x49\x67\x6E\x6F\x72\x65\x64","\x72\x65\x70\x61\x69\x6E\x74","\x64\x65\x66\x61\x75\x6C\x74\x4F\x70\x61\x63\x69\x74\x79","\x73\x68\x61\x72\x65\x64\x44\x69\x76","\x63\x75\x72\x72\x65\x6E\x74\x58","\x63\x75\x72\x72\x65\x6E\x74\x59","\x64\x72\x61\x67\x48\x61\x6E\x64\x6C\x65\x72","\x6D\x78\x52\x75\x62\x62\x65\x72\x62\x61\x6E\x64","\x73\x69\x6E\x67\x6C\x65\x53\x69\x7A\x65\x72","\x61\x6C\x6C\x6F\x77\x48\x61\x6E\x64\x6C\x65\x42\x6F\x75\x6E\x64\x73\x43\x68\x65\x63\x6B","\x68\x61\x6E\x64\x6C\x65\x49\x6D\x61\x67\x65","\x72\x6F\x74\x61\x74\x69\x6F\x6E\x52\x61\x73\x74\x65\x72","\x73\x65\x6C\x65\x63\x74\x69\x6F\x6E\x42\x6F\x75\x6E\x64\x73","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x42\x6F\x75\x6E\x64\x73","\x63\x72\x65\x61\x74\x65\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x53\x68\x61\x70\x65","\x73\x69\x7A\x65\x72\x73","\x6E\x2D\x72\x65\x73\x69\x7A\x65","\x6E\x65\x2D\x72\x65\x73\x69\x7A\x65","\x77\x2D\x72\x65\x73\x69\x7A\x65","\x65\x2D\x72\x65\x73\x69\x7A\x65","\x73\x77\x2D\x72\x65\x73\x69\x7A\x65","\x73\x2D\x72\x65\x73\x69\x7A\x65","\x73\x65\x2D\x72\x65\x73\x69\x7A\x65","\x6C\x61\x62\x65\x6C\x53\x68\x61\x70\x65","\x72\x6F\x74\x61\x74\x69\x6F\x6E\x53\x68\x61\x70\x65","\x48\x41\x4E\x44\x4C\x45\x5F\x53\x49\x5A\x45","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x6F\x6C\x6F\x72","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x53\x74\x72\x6F\x6B\x65\x57\x69\x64\x74\x68","\x69\x73\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x44\x61\x73\x68\x65\x64","\x56\x45\x52\x54\x45\x58\x5F\x53\x45\x4C\x45\x43\x54\x49\x4F\x4E\x5F\x43\x4F\x4C\x4F\x52","\x56\x45\x52\x54\x45\x58\x5F\x53\x45\x4C\x45\x43\x54\x49\x4F\x4E\x5F\x53\x54\x52\x4F\x4B\x45\x57\x49\x44\x54\x48","\x56\x45\x52\x54\x45\x58\x5F\x53\x45\x4C\x45\x43\x54\x49\x4F\x4E\x5F\x44\x41\x53\x48\x45\x44","\x63\x72\x65\x61\x74\x65\x53\x69\x7A\x65\x72\x53\x68\x61\x70\x65","\x69\x73\x53\x69\x7A\x65\x72\x56\x69\x73\x69\x62\x6C\x65","\x52\x4F\x54\x41\x54\x49\x4F\x4E\x5F\x48\x41\x4E\x44\x4C\x45","\x48\x41\x4E\x44\x4C\x45\x5F\x46\x49\x4C\x4C\x43\x4F\x4C\x4F\x52","\x6D\x6F\x76\x65\x53\x69\x7A\x65\x72\x54\x6F","\x67\x65\x74\x48\x61\x6E\x64\x6C\x65\x46\x6F\x72\x45\x76\x65\x6E\x74","\x4C\x41\x42\x45\x4C\x5F\x48\x41\x4E\x44\x4C\x45","\x70\x72\x65\x76\x69\x65\x77","\x63\x75\x72\x72\x65\x6E\x74\x41\x6C\x70\x68\x61","\x61\x74\x61\x6E","\x75\x6E\x69\x6F\x6E","\x72\x6F\x74\x61\x74\x65\x43\x65\x6C\x6C","\x6D\x6F\x76\x65\x43\x68\x69\x6C\x64\x72\x65\x6E","\x62\x65\x6E\x64\x73","\x72\x65\x6D\x6F\x76\x65\x45\x6E\x61\x62\x6C\x65\x64","\x73\x6E\x61\x70\x54\x6F\x54\x65\x72\x6D\x69\x6E\x61\x6C\x73","\x61\x62\x73\x70\x6F\x69\x6E\x74\x73","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x50\x6F\x69\x6E\x74\x73","\x69\x73\x41\x64\x64\x50\x6F\x69\x6E\x74\x45\x76\x65\x6E\x74","\x61\x64\x64\x50\x6F\x69\x6E\x74","\x63\x72\x65\x61\x74\x65\x42\x65\x6E\x64\x73","\x69\x6E\x69\x74\x42\x65\x6E\x64","\x43\x55\x52\x53\x4F\x52\x5F\x4C\x41\x42\x45\x4C\x5F\x48\x41\x4E\x44\x4C\x45","\x69\x73\x52\x65\x6D\x6F\x76\x65\x50\x6F\x69\x6E\x74\x45\x76\x65\x6E\x74","\x45\x44\x47\x45\x5F\x53\x45\x4C\x45\x43\x54\x49\x4F\x4E\x5F\x43\x4F\x4C\x4F\x52","\x45\x44\x47\x45\x5F\x53\x45\x4C\x45\x43\x54\x49\x4F\x4E\x5F\x53\x54\x52\x4F\x4B\x45\x57\x49\x44\x54\x48","\x45\x44\x47\x45\x5F\x53\x45\x4C\x45\x43\x54\x49\x4F\x4E\x5F\x44\x41\x53\x48\x45\x44","\x69\x73\x48\x61\x6E\x64\x6C\x65\x56\x69\x73\x69\x62\x6C\x65","\x63\x72\x65\x61\x74\x65\x48\x61\x6E\x64\x6C\x65\x53\x68\x61\x70\x65","\x69\x73\x48\x61\x6E\x64\x6C\x65\x45\x6E\x61\x62\x6C\x65\x64","\x43\x55\x52\x53\x4F\x52\x5F\x42\x45\x4E\x44\x5F\x48\x41\x4E\x44\x4C\x45","\x72\x65\x6D\x6F\x76\x65\x50\x6F\x69\x6E\x74","\x69\x73\x54\x61\x72\x67\x65\x74","\x69\x73\x4C\x61\x62\x65\x6C","\x63\x6C\x6F\x6E\x65\x50\x72\x65\x76\x69\x65\x77\x53\x74\x61\x74\x65","\x67\x65\x74\x53\x6E\x61\x70\x54\x6F\x54\x65\x72\x6D\x69\x6E\x61\x6C\x54\x6F\x6C\x65\x72\x61\x6E\x63\x65","\x67\x65\x74\x50\x72\x65\x76\x69\x65\x77\x54\x65\x72\x6D\x69\x6E\x61\x6C\x53\x74\x61\x74\x65","\x67\x65\x74\x50\x72\x65\x76\x69\x65\x77\x50\x6F\x69\x6E\x74\x73","\x75\x70\x64\x61\x74\x65\x50\x72\x65\x76\x69\x65\x77\x53\x74\x61\x74\x65","\x73\x65\x74\x50\x72\x65\x76\x69\x65\x77\x43\x6F\x6C\x6F\x72","\x6D\x6F\x76\x65\x4C\x61\x62\x65\x6C","\x63\x68\x61\x6E\x67\x65\x54\x65\x72\x6D\x69\x6E\x61\x6C\x50\x6F\x69\x6E\x74","\x63\x68\x61\x6E\x67\x65\x50\x6F\x69\x6E\x74\x73","\x61\x64\x64\x50\x6F\x69\x6E\x74\x41\x74","\x66\x69\x6E\x64\x4E\x65\x61\x72\x65\x73\x74\x53\x65\x67\x6D\x65\x6E\x74","\x67\x65\x74\x48\x61\x6E\x64\x6C\x65\x46\x69\x6C\x6C\x43\x6F\x6C\x6F\x72","\x4C\x4F\x43\x4B\x45\x44\x5F\x48\x41\x4E\x44\x4C\x45\x5F\x46\x49\x4C\x4C\x43\x4F\x4C\x4F\x52","\x43\x4F\x4E\x4E\x45\x43\x54\x5F\x48\x41\x4E\x44\x4C\x45\x5F\x46\x49\x4C\x4C\x43\x4F\x4C\x4F\x52","\x4C\x41\x42\x45\x4C\x5F\x48\x41\x4E\x44\x4C\x45\x5F\x53\x49\x5A\x45","\x72\x65\x64\x72\x61\x77\x49\x6E\x6E\x65\x72\x42\x65\x6E\x64\x73","\x66\x6C\x69\x70\x45\x6E\x61\x62\x6C\x65\x64","\x64\x6F\x75\x62\x6C\x65\x43\x6C\x69\x63\x6B\x4F\x72\x69\x65\x6E\x74\x61\x74\x69\x6F\x6E\x52\x65\x73\x6F\x75\x72\x63\x65","\x64\x6F\x75\x62\x6C\x65\x43\x6C\x69\x63\x6B\x4F\x72\x69\x65\x6E\x74\x61\x74\x69\x6F\x6E","\x63\x72\x65\x61\x74\x65\x56\x69\x72\x74\x75\x61\x6C\x42\x65\x6E\x64","\x67\x65\x74\x43\x75\x72\x73\x6F\x72\x46\x6F\x72\x42\x65\x6E\x64","\x45\x44\x47\x45\x53\x54\x59\x4C\x45\x5F\x54\x4F\x50\x54\x4F\x42\x4F\x54\x54\x4F\x4D","\x45\x44\x47\x45\x53\x54\x59\x4C\x45\x5F\x45\x4C\x42\x4F\x57","\x72\x6F\x77\x2D\x72\x65\x73\x69\x7A\x65","\x63\x6F\x6C\x2D\x72\x65\x73\x69\x7A\x65","\x6E\x6F\x72\x6D\x61\x6C\x4B\x65\x79\x73","\x73\x68\x69\x66\x74\x4B\x65\x79\x73","\x63\x6F\x6E\x74\x72\x6F\x6C\x4B\x65\x79\x73","\x63\x6F\x6E\x74\x72\x6F\x6C\x53\x68\x69\x66\x74\x4B\x65\x79\x73","\x6B\x65\x79\x44\x6F\x77\x6E","\x62\x69\x6E\x64\x4B\x65\x79","\x62\x69\x6E\x64\x53\x68\x69\x66\x74\x4B\x65\x79","\x62\x69\x6E\x64\x43\x6F\x6E\x74\x72\x6F\x6C\x4B\x65\x79","\x62\x69\x6E\x64\x43\x6F\x6E\x74\x72\x6F\x6C\x53\x68\x69\x66\x74\x4B\x65\x79","\x67\x65\x74\x46\x75\x6E\x63\x74\x69\x6F\x6E","\x69\x73\x47\x72\x61\x70\x68\x45\x76\x65\x6E\x74","\x68\x69\x64\x65\x4F\x6E\x48\x6F\x76\x65\x72","\x73\x65\x74\x48\x69\x64\x65\x4F\x6E\x48\x6F\x76\x65\x72","\x6D\x78\x54\x6F\x6F\x6C\x74\x69\x70","\x68\x69\x64\x65\x54\x6F\x6F\x6C\x74\x69\x70","\x73\x74\x61\x74\x65\x53\x6F\x75\x72\x63\x65","\x72\x65\x73\x65\x74\x54\x69\x6D\x65\x72","\x48\x49\x47\x48\x4C\x49\x47\x48\x54\x5F\x53\x54\x52\x4F\x4B\x45\x57\x49\x44\x54\x48","\x72\x65\x70\x61\x69\x6E\x74\x48\x61\x6E\x64\x6C\x65\x72","\x6B\x65\x65\x70\x4F\x6E\x54\x6F\x70","\x64\x72\x61\x77\x48\x69\x67\x68\x6C\x69\x67\x68\x74","\x65\x64\x69\x74\x6F\x72","\x68\x69\x64\x65\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73","\x62\x69\x6E\x64\x41\x63\x74\x69\x6F\x6E","\x63\x6F\x6E\x66\x69\x67","\x63\x72\x65\x61\x74\x65\x4D\x65\x6E\x75","\x63\x72\x65\x61\x74\x65\x43\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73","\x61\x64\x64\x49\x74\x65\x6D\x73","\x69\x66","\x61\x73","\x69\x63\x6F\x6E\x43\x6C\x73","\x61\x64\x64\x41\x63\x74\x69\x6F\x6E","\x73\x65\x70\x61\x72\x61\x74\x6F\x72","\x6E\x6F\x63\x65\x6C\x6C","\x6E\x63\x65\x6C\x6C\x73","\x6E\x6F\x74\x52\x6F\x6F\x74","\x6E\x6F\x6E\x45\x6D\x70\x74\x79","\x65\x78\x70\x61\x6E\x64\x61\x62\x6C\x65","\x63\x6F\x6C\x6C\x61\x70\x73\x61\x62\x6C\x65","\x76\x61\x6C\x69\x64\x52\x6F\x6F\x74","\x65\x6D\x70\x74\x79\x56\x61\x6C\x69\x64\x52\x6F\x6F\x74","\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E","\x74\x6F\x6F\x6C\x62\x61\x72","\x69\x6E\x73\x65\x72\x74\x46\x75\x6E\x63\x74\x69\x6F\x6E","\x2F\x73\x65\x70\x61\x72\x61\x74\x6F\x72\x2E\x67\x69\x66","\x61\x64\x64\x41\x63\x74\x69\x6F\x6E\x4F\x70\x74\x69\x6F\x6E","\x73\x65\x74\x4D\x6F\x64\x65","\x61\x64\x64\x50\x72\x6F\x74\x6F\x74\x79\x70\x65","\x69\x6E\x73\x74\x61\x6C\x6C\x44\x72\x6F\x70\x48\x61\x6E\x64\x6C\x65\x72","\x68\x6F\x72\x69\x7A\x6F\x6E\x74\x61\x6C\x46\x6C\x6F\x77","\x6D\x61\x6B\x65\x44\x72\x61\x67\x67\x61\x62\x6C\x65","\x61\x63\x74\x69\x6F\x6E\x73","\x61\x64\x64\x41\x63\x74\x69\x6F\x6E\x73","\x63\x79\x63\x6C\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x56\x61\x6C\x75\x65\x73","\x70\x6F\x70\x75\x70\x48\x61\x6E\x64\x6C\x65\x72","\x75\x6E\x64\x6F\x4D\x61\x6E\x61\x67\x65\x72","\x63\x72\x65\x61\x74\x65\x47\x72\x61\x70\x68","\x63\x72\x65\x61\x74\x65\x54\x6F\x6F\x6C\x62\x61\x72","\x6B\x65\x79\x48\x61\x6E\x64\x6C\x65\x72","\x63\x6F\x6E\x66\x69\x67\x75\x72\x65","\x63\x79\x63\x6C\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x4E\x61\x6D\x65","\x49\x53\x5F\x4C\x4F\x43\x41\x4C","\x63\x72\x65\x61\x74\x65\x53\x65\x73\x73\x69\x6F\x6E","\x2F\x72\x65\x73\x6F\x75\x72\x63\x65\x73\x2F\x65\x64\x69\x74\x6F\x72","\x61\x73\x6B\x5A\x6F\x6F\x6D\x52\x65\x73\x6F\x75\x72\x63\x65","\x61\x73\x6B\x5A\x6F\x6F\x6D","\x6C\x61\x73\x74\x53\x61\x76\x65\x64\x52\x65\x73\x6F\x75\x72\x63\x65","\x6C\x61\x73\x74\x53\x61\x76\x65\x64","\x63\x75\x72\x72\x65\x6E\x74\x46\x69\x6C\x65\x52\x65\x73\x6F\x75\x72\x63\x65","\x63\x75\x72\x72\x65\x6E\x74\x46\x69\x6C\x65","\x70\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x52\x65\x73\x6F\x75\x72\x63\x65","\x74\x61\x73\x6B\x73\x52\x65\x73\x6F\x75\x72\x63\x65","\x74\x61\x73\x6B\x73","\x68\x65\x6C\x70\x52\x65\x73\x6F\x75\x72\x63\x65","\x6F\x75\x74\x6C\x69\x6E\x65\x52\x65\x73\x6F\x75\x72\x63\x65","\x64\x62\x6C\x43\x6C\x69\x63\x6B\x41\x63\x74\x69\x6F\x6E","\x73\x77\x69\x6D\x6C\x61\x6E\x65\x52\x65\x71\x75\x69\x72\x65\x64","\x66\x6F\x72\x63\x65\x64\x49\x6E\x73\x65\x72\x74\x69\x6E\x67","\x74\x65\x6D\x70\x6C\x61\x74\x65\x73","\x64\x65\x66\x61\x75\x6C\x74\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x64\x65\x66\x61\x75\x6C\x74\x47\x72\x6F\x75\x70","\x67\x72\x6F\x75\x70\x42\x6F\x72\x64\x65\x72\x53\x69\x7A\x65","\x66\x69\x6C\x65\x6E\x61\x6D\x65","\x70\x6F\x73\x74\x50\x61\x72\x61\x6D\x65\x74\x65\x72\x4E\x61\x6D\x65","\x75\x72\x6C\x50\x6F\x73\x74","\x75\x72\x6C\x49\x6D\x61\x67\x65","\x6C\x61\x79\x6F\x75\x74\x44\x69\x61\x67\x72\x61\x6D","\x73\x77\x69\x6D\x6C\x61\x6E\x65\x53\x70\x61\x63\x69\x6E\x67","\x6D\x61\x69\x6E\x74\x61\x69\x6E\x53\x77\x69\x6D\x6C\x61\x6E\x65\x73","\x6C\x61\x79\x6F\x75\x74\x53\x77\x69\x6D\x6C\x61\x6E\x65\x73","\x63\x79\x63\x6C\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x49\x6E\x64\x65\x78","\x74\x61\x73\x6B\x73\x57\x69\x6E\x64\x6F\x77\x49\x6D\x61\x67\x65","\x74\x61\x73\x6B\x73\x54\x6F\x70","\x68\x65\x6C\x70\x57\x69\x6E\x64\x6F\x77\x49\x6D\x61\x67\x65","\x75\x72\x6C\x48\x65\x6C\x70","\x68\x65\x6C\x70\x57\x69\x64\x74\x68","\x68\x65\x6C\x70\x48\x65\x69\x67\x68\x74","\x70\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x57\x69\x64\x74\x68","\x70\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x48\x65\x69\x67\x68\x74","\x6D\x6F\x76\x65\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x44\x69\x61\x6C\x6F\x67","\x76\x61\x6C\x69\x64\x61\x74\x69\x6E\x67","\x65\x78\x70\x6F\x72\x74\x49\x6D\x61\x67\x65","\x67\x65\x74\x55\x72\x6C\x49\x6D\x61\x67\x65","\x67\x65\x74\x56\x69\x65\x77\x58\x6D\x6C","\x5F\x62\x6C\x61\x6E\x6B","\x63\x75\x74","\x70\x61\x73\x74\x65","\x64\x65\x6C\x65\x74\x65","\x75\x6E\x67\x72\x6F\x75\x70","\x61\x63\x74\x75\x61\x6C\x53\x69\x7A\x65","\x73\x68\x6F\x77\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73","\x73\x65\x6C\x65\x63\x74\x4E\x6F\x6E\x65","\x74\x6F\x42\x61\x63\x6B","\x74\x6F\x46\x72\x6F\x6E\x74","\x73\x65\x6C\x65\x63\x74\x50\x72\x65\x76\x69\x6F\x75\x73","\x73\x65\x6C\x65\x63\x74\x4E\x65\x78\x74","\x73\x65\x6C\x65\x63\x74\x50\x61\x72\x65\x6E\x74","\x73\x65\x6C\x65\x63\x74\x43\x68\x69\x6C\x64","\x63\x6F\x6C\x6C\x61\x70\x73\x65\x41\x6C\x6C","\x65\x78\x70\x61\x6E\x64","\x65\x78\x70\x61\x6E\x64\x41\x6C\x6C","\x61\x6C\x69\x67\x6E\x43\x65\x6C\x6C\x73\x4C\x65\x66\x74","\x61\x6C\x69\x67\x6E\x43\x65\x6C\x6C\x73\x43\x65\x6E\x74\x65\x72","\x61\x6C\x69\x67\x6E\x43\x65\x6C\x6C\x73\x52\x69\x67\x68\x74","\x61\x6C\x69\x67\x6E\x43\x65\x6C\x6C\x73\x54\x6F\x70","\x61\x6C\x69\x67\x6E\x43\x65\x6C\x6C\x73\x4D\x69\x64\x64\x6C\x65","\x61\x6C\x69\x67\x6E\x43\x65\x6C\x6C\x73\x42\x6F\x74\x74\x6F\x6D","\x61\x6C\x69\x67\x6E\x46\x6F\x6E\x74\x4C\x65\x66\x74","\x61\x6C\x69\x67\x6E\x46\x6F\x6E\x74\x43\x65\x6E\x74\x65\x72","\x61\x6C\x69\x67\x6E\x46\x6F\x6E\x74\x52\x69\x67\x68\x74","\x61\x6C\x69\x67\x6E\x46\x6F\x6E\x74\x54\x6F\x70","\x61\x6C\x69\x67\x6E\x46\x6F\x6E\x74\x4D\x69\x64\x64\x6C\x65","\x61\x6C\x69\x67\x6E\x46\x6F\x6E\x74\x42\x6F\x74\x74\x6F\x6D","\x70\x72\x6F\x6D\x70\x74","\x74\x6F\x67\x67\x6C\x65\x54\x61\x73\x6B\x73","\x73\x68\x6F\x77\x54\x61\x73\x6B\x73","\x74\x6F\x67\x67\x6C\x65\x48\x65\x6C\x70","\x73\x68\x6F\x77\x48\x65\x6C\x70","\x74\x6F\x67\x67\x6C\x65\x4F\x75\x74\x6C\x69\x6E\x65","\x73\x68\x6F\x77\x4F\x75\x74\x6C\x69\x6E\x65","\x74\x6F\x67\x67\x6C\x65\x43\x6F\x6E\x73\x6F\x6C\x65","\x72\x65\x73\x65\x74\x48\x69\x73\x74\x6F\x72\x79","\x72\x65\x73\x65\x74\x46\x69\x72\x73\x74\x54\x69\x6D\x65","\x63\x6F\x6F\x6B\x69\x65","\x6D\x78\x67\x72\x61\x70\x68\x3D\x73\x65\x65\x6E\x3B\x20\x65\x78\x70\x69\x72\x65\x73\x3D\x46\x72\x69\x2C\x20\x32\x37\x20\x4A\x75\x6C\x20\x32\x30\x30\x31\x20\x30\x32\x3A\x34\x37\x3A\x31\x31\x20\x55\x54\x43\x3B\x20\x70\x61\x74\x68\x3D\x2F","\x43\x61\x6E\x6E\x6F\x74\x20\x65\x78\x65\x63\x75\x74\x65\x20","\x3A\x20","\x43\x61\x6E\x6E\x6F\x74\x20\x66\x69\x6E\x64\x20\x61\x63\x74\x69\x6F\x6E\x20","\x61\x64\x64\x54\x65\x6D\x70\x6C\x61\x74\x65","\x67\x65\x74\x54\x65\x6D\x70\x6C\x61\x74\x65","\x69\x6E\x73\x74\x61\x6C\x6C\x44\x62\x6C\x43\x6C\x69\x63\x6B\x48\x61\x6E\x64\x6C\x65\x72","\x69\x6E\x73\x74\x61\x6C\x6C\x55\x6E\x64\x6F\x48\x61\x6E\x64\x6C\x65\x72","\x69\x6E\x73\x74\x61\x6C\x6C\x44\x72\x69\x6C\x6C\x48\x61\x6E\x64\x6C\x65\x72","\x69\x6E\x73\x74\x61\x6C\x6C\x43\x68\x61\x6E\x67\x65\x48\x61\x6E\x64\x6C\x65\x72","\x69\x6E\x73\x74\x61\x6C\x6C\x49\x6E\x73\x65\x72\x74\x48\x61\x6E\x64\x6C\x65\x72","\x63\x72\x65\x61\x74\x65\x50\x6F\x70\x75\x70\x4D\x65\x6E\x75","\x63\x72\x65\x61\x74\x65\x53\x77\x69\x6D\x6C\x61\x6E\x65\x4D\x61\x6E\x61\x67\x65\x72","\x63\x72\x65\x61\x74\x65\x4C\x61\x79\x6F\x75\x74\x4D\x61\x6E\x61\x67\x65\x72","\x73\x77\x69\x6D\x6C\x61\x6E\x65\x4C\x61\x79\x6F\x75\x74","\x63\x72\x65\x61\x74\x65\x53\x77\x69\x6D\x6C\x61\x6E\x65\x4C\x61\x79\x6F\x75\x74","\x64\x69\x61\x67\x72\x61\x6D\x4C\x61\x79\x6F\x75\x74","\x63\x72\x65\x61\x74\x65\x44\x69\x61\x67\x72\x61\x6D\x4C\x61\x79\x6F\x75\x74","\x73\x65\x74\x47\x72\x61\x70\x68\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x72\x75\x62\x62\x65\x72\x62\x61\x6E\x64","\x73\x65\x74\x54\x6F\x6F\x6C\x62\x61\x72\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x73\x65\x74\x53\x74\x61\x74\x75\x73\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x74\x6F\x4C\x6F\x63\x61\x6C\x65\x53\x74\x72\x69\x6E\x67","\x73\x65\x74\x53\x74\x61\x74\x75\x73","\x73\x65\x74\x54\x69\x74\x6C\x65\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x67\x65\x74\x54\x69\x74\x6C\x65","\x74\x72\x65\x65\x4C\x61\x79\x6F\x75\x74","\x20\x3E\x20","\x67\x65\x74\x52\x6F\x6F\x74\x54\x69\x74\x6C\x65","\x63\x72\x65\x61\x74\x65\x47\x72\x6F\x75\x70","\x72\x65\x61\x64\x47\x72\x61\x70\x68\x4D\x6F\x64\x65\x6C","\x67\x65\x74\x55\x72\x6C\x50\x6F\x73\x74","\x77\x72\x69\x74\x65\x47\x72\x61\x70\x68\x4D\x6F\x64\x65\x6C","\x70\x6F\x73\x74\x44\x69\x61\x67\x72\x61\x6D","\x73\x77\x61\x70\x53\x74\x79\x6C\x65\x73","\x63\x72\x65\x61\x74\x65\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73","\x69\x73\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x56\x69\x73\x69\x62\x6C\x65","\x72\x65\x61\x64\x6F\x6E\x6C\x79","\x49\x44","\x53\x74\x79\x6C\x65","\x63\x72\x65\x61\x74\x65\x54\x61\x73\x6B\x73","\x72\x65\x66\x72\x65\x73\x68\x54\x61\x73\x6B\x73","\x66\x72\x61\x6D\x65\x42\x6F\x72\x64\x65\x72","\x63\x6F\x6E\x73\x75\x6D\x65\x43\x79\x63\x6C\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x63\x79\x63\x6C\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x69\x73\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x65\x64\x4D\x6F\x76\x69\x6E\x67","\x63\x6F\x64\x65\x63\x73","\x74\x65\x6D\x70\x6C\x61\x74\x65","\x61\x64\x64\x41\x6C\x69\x61\x73","\x61\x6C\x69\x61\x73\x65\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x65\x6E\x63\x6F\x64\x65\x44\x65\x66\x61\x75\x6C\x74\x73","\x67\x65\x74\x4F\x62\x6A\x65\x63\x74","\x72\x65\x66\x65\x72\x65\x6E\x63\x65","\x67\x65\x74\x43\x6F\x64\x65\x63","\x69\x6D\x70\x6F\x72\x74\x4E\x6F\x64\x65","\x6D\x78\x43\x6F\x64\x65\x63\x2E\x65\x6E\x63\x6F\x64\x65\x3A\x20\x4E\x6F\x20\x63\x6F\x64\x65\x63\x20\x66\x6F\x72\x20","\x43\x61\x6E\x6E\x6F\x74\x20\x64\x65\x63\x6F\x64\x65\x20","\x65\x6E\x63\x6F\x64\x65\x43\x65\x6C\x6C","\x69\x73\x43\x65\x6C\x6C\x43\x6F\x64\x65\x63","\x64\x65\x63\x6F\x64\x65\x43\x65\x6C\x6C","\x69\x6E\x73\x65\x72\x74\x49\x6E\x74\x6F\x47\x72\x61\x70\x68","\x65\x78\x63\x6C\x75\x64\x65","\x69\x64\x72\x65\x66\x73","\x6D\x61\x70\x70\x69\x6E\x67","\x72\x65\x76\x65\x72\x73\x65","\x63\x6C\x6F\x6E\x65\x54\x65\x6D\x70\x6C\x61\x74\x65","\x67\x65\x74\x46\x69\x65\x6C\x64\x4E\x61\x6D\x65","\x67\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65\x4E\x61\x6D\x65","\x69\x73\x45\x78\x63\x6C\x75\x64\x65\x64","\x69\x73\x52\x65\x66\x65\x72\x65\x6E\x63\x65","\x62\x65\x66\x6F\x72\x65\x45\x6E\x63\x6F\x64\x65","\x65\x6E\x63\x6F\x64\x65\x4F\x62\x6A\x65\x63\x74","\x61\x66\x74\x65\x72\x45\x6E\x63\x6F\x64\x65","\x65\x6E\x63\x6F\x64\x65\x56\x61\x6C\x75\x65","\x6D\x78\x4F\x62\x6A\x65\x63\x74\x43\x6F\x64\x65\x63\x2E\x65\x6E\x63\x6F\x64\x65\x3A\x20\x4E\x6F\x20\x49\x44\x20\x66\x6F\x72\x20","\x77\x72\x69\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x77\x72\x69\x74\x65\x50\x72\x69\x6D\x69\x74\x69\x76\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x77\x72\x69\x74\x65\x43\x6F\x6D\x70\x6C\x65\x78\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x63\x6F\x6E\x76\x65\x72\x74\x56\x61\x6C\x75\x65\x54\x6F\x58\x6D\x6C","\x6D\x78\x4F\x62\x6A\x65\x63\x74\x43\x6F\x64\x65\x63\x2E\x65\x6E\x63\x6F\x64\x65\x3A\x20\x4E\x6F\x20\x6E\x6F\x64\x65\x20\x66\x6F\x72\x20","\x63\x6F\x6E\x76\x65\x72\x74\x56\x61\x6C\x75\x65\x46\x72\x6F\x6D\x58\x6D\x6C","\x62\x65\x66\x6F\x72\x65\x44\x65\x63\x6F\x64\x65","\x64\x65\x63\x6F\x64\x65\x4E\x6F\x64\x65","\x61\x66\x74\x65\x72\x44\x65\x63\x6F\x64\x65","\x64\x65\x63\x6F\x64\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x63\x6F\x64\x65\x43\x68\x69\x6C\x64\x72\x65\x6E","\x64\x65\x63\x6F\x64\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x6D\x78\x4F\x62\x6A\x65\x63\x74\x43\x6F\x64\x65\x63\x2E\x64\x65\x63\x6F\x64\x65\x3A\x20\x4E\x6F\x20\x6F\x62\x6A\x65\x63\x74\x20\x66\x6F\x72\x20","\x70\x72\x6F\x63\x65\x73\x73\x49\x6E\x63\x6C\x75\x64\x65","\x64\x65\x63\x6F\x64\x65\x43\x68\x69\x6C\x64","\x67\x65\x74\x46\x69\x65\x6C\x64\x54\x65\x6D\x70\x6C\x61\x74\x65","\x61\x64\x64\x4F\x62\x6A\x65\x63\x74\x56\x61\x6C\x75\x65","\x69\x6E\x63\x6C\x75\x64\x65","\x72\x65\x6D\x6F\x76\x65\x57\x68\x69\x74\x65\x73\x70\x61\x63\x65","\x64\x65\x63\x6F\x64\x65\x52\x6F\x6F\x74","\x67\x72\x61\x70\x68\x4C\x69\x73\x74\x65\x6E\x65\x72\x73\x20\x65\x76\x65\x6E\x74\x4C\x69\x73\x74\x65\x6E\x65\x72\x73\x20\x76\x69\x65\x77\x20\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72\x20\x63\x65\x6C\x6C\x52\x65\x6E\x64\x65\x72\x65\x72\x20\x65\x64\x69\x74\x6F\x72\x20\x73\x65\x6C\x65\x63\x74\x69\x6F\x6E","\x6C\x61\x79\x65\x72","\x67\x65\x74\x53\x74\x72\x69\x6E\x67\x56\x61\x6C\x75\x65","\x6D\x78\x53\x74\x79\x6C\x65\x73\x68\x65\x65\x74\x43\x6F\x64\x65\x63\x2E\x64\x65\x63\x6F\x64\x65\x3A\x20\x73\x74\x79\x6C\x65\x73\x68\x65\x65\x74\x20","\x20\x6E\x6F\x74\x20\x66\x6F\x75\x6E\x64\x20\x74\x6F\x20\x65\x78\x74\x65\x6E\x64","\x70\x72\x65\x73\x73\x65\x64\x49\x63\x6F\x6E","\x6D\x6F\x64\x65","\x74\x6F\x67\x67\x6C\x65","\x2D\x2D\x2D","\x63\x65\x6C\x6C\x53\x74\x79\x6C\x65","\x54\x65\x6D\x70\x6C\x61\x74\x65\x20","\x20\x6E\x6F\x74\x20\x66\x6F\x75\x6E\x64","\x6D\x6F\x64\x69\x66\x69\x65\x64\x20\x6C\x61\x73\x74\x53\x6E\x61\x70\x73\x68\x6F\x74\x20\x69\x67\x6E\x6F\x72\x65\x64\x43\x68\x61\x6E\x67\x65\x73\x20\x75\x6E\x64\x6F\x4D\x61\x6E\x61\x67\x65\x72\x20\x67\x72\x61\x70\x68\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72\x20\x74\x6F\x6F\x6C\x62\x61\x72\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x41\x72\x72\x61\x79","\x64\x65\x63\x6F\x64\x65\x54\x65\x6D\x70\x6C\x61\x74\x65\x73","\x75\x69","\x64\x65\x63\x6F\x64\x65\x55\x69","\x73\x65\x74\x4D\x61\x70\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x72\x65\x73\x6F\x75\x72\x63\x65","\x62\x61\x73\x65\x6E\x61\x6D\x65"];var mxClient={VERSION:_0xe4bc[0],IS_IE:0<=navigator[_0xe4bc[3]][_0xe4bc[2]](_0xe4bc[1]),IS_IE6:0<=navigator[_0xe4bc[3]][_0xe4bc[2]](_0xe4bc[4]),IS_QUIRKS:0<=navigator[_0xe4bc[3]][_0xe4bc[2]](_0xe4bc[1])&&(null==document[_0xe4bc[5]]||5==document[_0xe4bc[5]]),VML_PREFIX:_0xe4bc[6],OFFICE_PREFIX:_0xe4bc[7],IS_NS:0<=navigator[_0xe4bc[3]][_0xe4bc[2]](_0xe4bc[8])&&0>navigator[_0xe4bc[3]][_0xe4bc[2]](_0xe4bc[1]),IS_OP:0<=navigator[_0xe4bc[3]][_0xe4bc[2]](_0xe4bc[9]),IS_OT:0>navigator[_0xe4bc[3]][_0xe4bc[2]](_0xe4bc[10])&&0>navigator[_0xe4bc[3]][_0xe4bc[2]](_0xe4bc[11])&&0>navigator[_0xe4bc[3]][_0xe4bc[2]](_0xe4bc[12])&&0>navigator[_0xe4bc[3]][_0xe4bc[2]](_0xe4bc[13])&&0>navigator[_0xe4bc[3]][_0xe4bc[2]](_0xe4bc[14])&&0>navigator[_0xe4bc[3]][_0xe4bc[2]](_0xe4bc[15]),IS_SF:0<=navigator[_0xe4bc[3]][_0xe4bc[2]](_0xe4bc[16])&&0>navigator[_0xe4bc[3]][_0xe4bc[2]](_0xe4bc[17]),IS_GC:0<=navigator[_0xe4bc[3]][_0xe4bc[2]](_0xe4bc[17]),IS_MT:0<=navigator[_0xe4bc[3]][_0xe4bc[2]](_0xe4bc[18])&&0>navigator[_0xe4bc[3]][_0xe4bc[2]](_0xe4bc[19])&&0>navigator[_0xe4bc[3]][_0xe4bc[2]](_0xe4bc[20])||0<=navigator[_0xe4bc[3]][_0xe4bc[2]](_0xe4bc[21])&&0>navigator[_0xe4bc[3]][_0xe4bc[2]](_0xe4bc[22])&&0>navigator[_0xe4bc[3]][_0xe4bc[2]](_0xe4bc[23])||0<=navigator[_0xe4bc[3]][_0xe4bc[2]](_0xe4bc[24])&&0>navigator[_0xe4bc[3]][_0xe4bc[2]](_0xe4bc[25])||0<=navigator[_0xe4bc[3]][_0xe4bc[2]](_0xe4bc[26])&&0>navigator[_0xe4bc[3]][_0xe4bc[2]](_0xe4bc[27]),IS_SVG:0<=navigator[_0xe4bc[3]][_0xe4bc[2]](_0xe4bc[18])||0<=navigator[_0xe4bc[3]][_0xe4bc[2]](_0xe4bc[21])||0<=navigator[_0xe4bc[3]][_0xe4bc[2]](_0xe4bc[28])||0<=navigator[_0xe4bc[3]][_0xe4bc[2]](_0xe4bc[26])||0<=navigator[_0xe4bc[3]][_0xe4bc[2]](_0xe4bc[29])||0<=navigator[_0xe4bc[3]][_0xe4bc[2]](_0xe4bc[30])||0<=navigator[_0xe4bc[3]][_0xe4bc[2]](_0xe4bc[16])||0<=navigator[_0xe4bc[3]][_0xe4bc[2]](_0xe4bc[31])||0<=navigator[_0xe4bc[3]][_0xe4bc[2]](_0xe4bc[9]),NO_FO:0<=navigator[_0xe4bc[3]][_0xe4bc[2]](_0xe4bc[19])||0<=navigator[_0xe4bc[3]][_0xe4bc[2]](_0xe4bc[22])||0<=navigator[_0xe4bc[3]][_0xe4bc[2]](_0xe4bc[20])||0<=navigator[_0xe4bc[3]][_0xe4bc[2]](_0xe4bc[23])||0<=navigator[_0xe4bc[3]][_0xe4bc[2]](_0xe4bc[25])||0<=navigator[_0xe4bc[3]][_0xe4bc[2]](_0xe4bc[27])||0<=navigator[_0xe4bc[3]][_0xe4bc[2]](_0xe4bc[32])||0<=navigator[_0xe4bc[3]][_0xe4bc[2]](_0xe4bc[33])||0<=navigator[_0xe4bc[3]][_0xe4bc[2]](_0xe4bc[9])||0<=navigator[_0xe4bc[3]][_0xe4bc[2]](_0xe4bc[1])||0<=navigator[_0xe4bc[3]][_0xe4bc[2]](_0xe4bc[34]),IS_VML:_0xe4bc[35]==navigator[_0xe4bc[37]][_0xe4bc[36]](),IS_MAC:0<navigator[_0xe4bc[3]][_0xe4bc[36]]()[_0xe4bc[2]](_0xe4bc[38]),IS_TOUCH:0<navigator[_0xe4bc[3]][_0xe4bc[36]]()[_0xe4bc[2]](_0xe4bc[39])||0<navigator[_0xe4bc[3]][_0xe4bc[36]]()[_0xe4bc[2]](_0xe4bc[40])||0<navigator[_0xe4bc[3]][_0xe4bc[36]]()[_0xe4bc[2]](_0xe4bc[41])||0<navigator[_0xe4bc[3]][_0xe4bc[36]]()[_0xe4bc[2]](_0xe4bc[42]),IS_LOCAL:0>document[_0xe4bc[45]][_0xe4bc[44]][_0xe4bc[2]](_0xe4bc[43])&&0>document[_0xe4bc[45]][_0xe4bc[44]][_0xe4bc[2]](_0xe4bc[46]),isBrowserSupported:function(){return mxClient[_0xe4bc[47]]||mxClient[_0xe4bc[48]]},link:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){_0x5d2ax4=_0x5d2ax4||document;if(mxClient[_0xe4bc[49]]){_0x5d2ax4[_0xe4bc[53]](_0xe4bc[50]+_0x5d2ax2+_0xe4bc[51]+_0x5d2ax3+_0xe4bc[52])}else {var _0x5d2ax5=_0x5d2ax4[_0xe4bc[55]](_0xe4bc[54]);_0x5d2ax5[_0xe4bc[57]](_0xe4bc[56],_0x5d2ax2);_0x5d2ax5[_0xe4bc[57]](_0xe4bc[44],_0x5d2ax3);_0x5d2ax5[_0xe4bc[57]](_0xe4bc[58],_0xe4bc[59]);_0x5d2ax5[_0xe4bc[57]](_0xe4bc[60],_0xe4bc[61]);_0x5d2ax4[_0xe4bc[64]](_0xe4bc[63])[0][_0xe4bc[62]](_0x5d2ax5)}},include:function(_0x5d2ax2){document[_0xe4bc[53]](_0xe4bc[65]+_0x5d2ax2+_0xe4bc[66])},dispose:function(){for(var _0x5d2ax2=0;_0x5d2ax2<mxEvent[_0xe4bc[68]][_0xe4bc[67]];_0x5d2ax2++){null!=mxEvent[_0xe4bc[68]][_0x5d2ax2][_0xe4bc[69]]&&mxEvent[_0xe4bc[70]](mxEvent[_0xe4bc[68]][_0x5d2ax2])}}};mxClient[_0xe4bc[71]]&&mxClient[_0xe4bc[72]]?mxClient[_0xe4bc[73]]=_0xe4bc[74]:mxClient[_0xe4bc[75]]||mxClient[_0xe4bc[76]]?mxClient[_0xe4bc[73]]=_0xe4bc[77]:mxClient[_0xe4bc[78]]?mxClient[_0xe4bc[73]]=_0xe4bc[79]:mxClient[_0xe4bc[80]]&&9<=document[_0xe4bc[5]]&&(mxClient[_0xe4bc[73]]=_0xe4bc[81]);_0xe4bc[82]== typeof mxLoadResources&&(mxLoadResources= !0);_0xe4bc[82]== typeof mxResourceExtension&&(mxResourceExtension=_0xe4bc[83]);_0xe4bc[82]== typeof mxLoadStylesheets&&(mxLoadStylesheets= !0);_0xe4bc[82]!= typeof mxBasePath&&0<mxBasePath[_0xe4bc[67]]?(_0xe4bc[84]==mxBasePath[_0xe4bc[85]](mxBasePath[_0xe4bc[67]]-1)&&(mxBasePath=mxBasePath[_0xe4bc[85]](0,mxBasePath[_0xe4bc[67]]-1)),mxClient[_0xe4bc[86]]=mxBasePath):mxClient[_0xe4bc[86]]=_0xe4bc[87];_0xe4bc[82]!= typeof mxImageBasePath&&0<mxImageBasePath[_0xe4bc[67]]?(_0xe4bc[84]==mxImageBasePath[_0xe4bc[85]](mxImageBasePath[_0xe4bc[67]]-1)&&(mxImageBasePath=mxImageBasePath[_0xe4bc[85]](0,mxImageBasePath[_0xe4bc[67]]-1)),mxClient[_0xe4bc[88]]=mxImageBasePath):mxClient[_0xe4bc[88]]=mxClient[_0xe4bc[86]]+_0xe4bc[89];mxClient[_0xe4bc[90]]=_0xe4bc[82]!= typeof mxLanguage?mxLanguage:mxClient[_0xe4bc[80]]?navigator[_0xe4bc[91]]:navigator[_0xe4bc[90]];mxClient[_0xe4bc[92]]=_0xe4bc[82]!= typeof mxDefaultLanguage?mxDefaultLanguage:_0xe4bc[93];mxLoadStylesheets&&mxClient[_0xe4bc[54]](_0xe4bc[94],mxClient[_0xe4bc[86]]+_0xe4bc[95]);_0xe4bc[82]!= typeof mxLanguages&&(mxClient[_0xe4bc[96]]=mxLanguages);if(mxClient[_0xe4bc[80]]){if(9<=document[_0xe4bc[5]]){mxClient[_0xe4bc[47]]= !1,mxClient[_0xe4bc[48]]= !0}else {8==document[_0xe4bc[5]]?(document[_0xe4bc[100]][_0xe4bc[99]](mxClient.VML_PREFIX,_0xe4bc[97],_0xe4bc[98]),document[_0xe4bc[100]][_0xe4bc[99]](mxClient.OFFICE_PREFIX,_0xe4bc[101],_0xe4bc[98])):(document[_0xe4bc[100]][_0xe4bc[99]](mxClient.VML_PREFIX,_0xe4bc[97]),document[_0xe4bc[100]][_0xe4bc[99]](mxClient.OFFICE_PREFIX,_0xe4bc[101]));var ss=document[_0xe4bc[102]]();ss[_0xe4bc[103]]=_0xe4bc[104];mxLoadStylesheets&&mxClient[_0xe4bc[54]](_0xe4bc[94],mxClient[_0xe4bc[86]]+_0xe4bc[105])};window[_0xe4bc[108]](_0xe4bc[106],mxClient[_0xe4bc[107]])};var mxLog={consoleName:_0xe4bc[109],TRACE:!1,DEBUG:!0,WARN:!0,buffer:_0xe4bc[110],init:function(){if(null==mxLog[_0xe4bc[111]]&&null!=document[_0xe4bc[112]]){var _0x5d2ax2=mxLog[_0xe4bc[113]]+_0xe4bc[114]+mxClient[_0xe4bc[115]],_0x5d2ax3=document[_0xe4bc[55]](_0xe4bc[116]);_0x5d2ax3[_0xe4bc[57]](_0xe4bc[117],_0xe4bc[118]);_0x5d2ax3[_0xe4bc[57]](_0xe4bc[119],_0xe4bc[118]);var _0x5d2ax4=document[_0xe4bc[55]](_0xe4bc[120]),_0x5d2ax5=document[_0xe4bc[55]](_0xe4bc[121]),_0x5d2ax9=document[_0xe4bc[55]](_0xe4bc[122]);_0x5d2ax9[_0xe4bc[124]][_0xe4bc[123]]=_0xe4bc[125];mxLog[_0xe4bc[126]]=document[_0xe4bc[55]](_0xe4bc[126]);mxLog[_0xe4bc[126]][_0xe4bc[57]](_0xe4bc[127],_0xe4bc[128]);mxLog[_0xe4bc[126]][_0xe4bc[124]][_0xe4bc[119]]=_0xe4bc[118];mxLog[_0xe4bc[126]][_0xe4bc[124]][_0xe4bc[129]]=_0xe4bc[130];mxLog[_0xe4bc[126]][_0xe4bc[131]]=mxLog[_0xe4bc[132]];mxLog[_0xe4bc[126]][_0xe4bc[124]][_0xe4bc[117]]=mxClient[_0xe4bc[133]]&&_0xe4bc[134]!=document[_0xe4bc[135]]?_0xe4bc[136]:_0xe4bc[118];_0x5d2ax9[_0xe4bc[62]](mxLog[_0xe4bc[126]]);_0x5d2ax5[_0xe4bc[62]](_0x5d2ax9);_0x5d2ax4[_0xe4bc[62]](_0x5d2ax5);_0x5d2ax5=document[_0xe4bc[55]](_0xe4bc[121]);mxLog[_0xe4bc[122]]=document[_0xe4bc[55]](_0xe4bc[122]);mxLog[_0xe4bc[122]][_0xe4bc[124]][_0xe4bc[123]]=_0xe4bc[125];mxLog[_0xe4bc[122]][_0xe4bc[57]](_0xe4bc[119],_0xe4bc[137]);_0x5d2ax5[_0xe4bc[62]](mxLog[_0xe4bc[122]]);_0x5d2ax4[_0xe4bc[62]](_0x5d2ax5);_0x5d2ax3[_0xe4bc[62]](_0x5d2ax4);mxLog[_0xe4bc[140]](_0xe4bc[138],function(_0x5d2ax2){mxLog[_0xe4bc[139]]()});mxLog[_0xe4bc[140]](_0xe4bc[141],function(_0x5d2ax2){_0x5d2ax2=mxUtils[_0xe4bc[142]](document[_0xe4bc[112]]);mxLog[_0xe4bc[143]](_0x5d2ax2)});mxLog[_0xe4bc[140]](_0xe4bc[144],function(_0x5d2ax2){mxLog[_0xe4bc[145]]=!mxLog[_0xe4bc[145]];mxLog[_0xe4bc[145]]?mxLog[_0xe4bc[143]](_0xe4bc[146]):mxLog[_0xe4bc[143]](_0xe4bc[147])});mxLog[_0xe4bc[140]](_0xe4bc[148],function(_0x5d2ax2){try{mxUtils[_0xe4bc[149]](mxLog[_0xe4bc[126]][_0xe4bc[131]])}catch(_0x5d2ax3){mxUtils[_0xe4bc[150]](_0x5d2ax3)}});mxLog[_0xe4bc[140]](_0xe4bc[151],function(_0x5d2ax2){try{mxUtils[_0xe4bc[152]](mxLog[_0xe4bc[126]][_0xe4bc[131]])}catch(_0x5d2ax3){mxUtils[_0xe4bc[150]](_0x5d2ax3)}});mxLog[_0xe4bc[140]](_0xe4bc[153],function(_0x5d2ax2){mxLog[_0xe4bc[126]][_0xe4bc[131]]=_0xe4bc[110]});_0x5d2ax5=_0x5d2ax4=0;_0xe4bc[154]=== typeof window[_0xe4bc[155]]?(_0x5d2ax4=window[_0xe4bc[156]],_0x5d2ax5=window[_0xe4bc[155]]):(_0x5d2ax4=document[_0xe4bc[158]][_0xe4bc[157]]||document[_0xe4bc[112]][_0xe4bc[157]],_0x5d2ax5=document[_0xe4bc[112]][_0xe4bc[159]]);mxLog[_0xe4bc[111]]= new mxWindow(_0x5d2ax2,_0x5d2ax3,Math[_0xe4bc[160]](0,_0x5d2ax5-320),Math[_0xe4bc[160]](0,_0x5d2ax4-210),300,160);mxLog[_0xe4bc[111]][_0xe4bc[161]](!0);mxLog[_0xe4bc[111]][_0xe4bc[162]](!1);mxLog[_0xe4bc[111]][_0xe4bc[163]](!0);mxLog[_0xe4bc[111]][_0xe4bc[164]](!0);mxLog[_0xe4bc[111]][_0xe4bc[165]]= !1;if((mxClient[_0xe4bc[133]]||mxClient[_0xe4bc[80]])&&!mxClient[_0xe4bc[76]]&&!mxClient[_0xe4bc[75]]&&_0xe4bc[134]!=document[_0xe4bc[135]]){var _0x5d2axa=mxLog[_0xe4bc[111]][_0xe4bc[166]](),_0x5d2ax2=function(_0x5d2ax2,_0x5d2ax3){mxLog[_0xe4bc[126]][_0xe4bc[124]][_0xe4bc[119]]=Math[_0xe4bc[160]](0,_0x5d2axa[_0xe4bc[167]]-70)+_0xe4bc[168]};mxLog[_0xe4bc[111]][_0xe4bc[169]](mxEvent.RESIZE_END,_0x5d2ax2);mxLog[_0xe4bc[111]][_0xe4bc[169]](mxEvent.MAXIMIZE,_0x5d2ax2);mxLog[_0xe4bc[111]][_0xe4bc[169]](mxEvent.NORMALIZE,_0x5d2ax2);mxLog[_0xe4bc[126]][_0xe4bc[124]][_0xe4bc[119]]=_0xe4bc[170]}}},info:function(){mxLog[_0xe4bc[171]](mxUtils.toString(navigator))},addButton:function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=document[_0xe4bc[55]](_0xe4bc[172]);mxUtils[_0xe4bc[53]](_0x5d2ax4,_0x5d2ax2);mxEvent[_0xe4bc[169]](_0x5d2ax4,_0xe4bc[173],_0x5d2ax3);mxLog[_0xe4bc[122]][_0xe4bc[62]](_0x5d2ax4)},isVisible:function(){return null!=mxLog[_0xe4bc[111]]?mxLog[_0xe4bc[111]][_0xe4bc[174]]():!1},show:function(){mxLog[_0xe4bc[175]](!0)},setVisible:function(_0x5d2ax2){null==mxLog[_0xe4bc[111]]&&mxLog[_0xe4bc[176]]();null!=mxLog[_0xe4bc[111]]&&mxLog[_0xe4bc[111]][_0xe4bc[175]](_0x5d2ax2)},enter:function(_0x5d2ax2){if(mxLog[_0xe4bc[145]]){return mxLog[_0xe4bc[171]](_0xe4bc[177]+_0x5d2ax2),( new Date)[_0xe4bc[178]]()}},leave:function(_0x5d2ax2,_0x5d2ax3){if(mxLog[_0xe4bc[145]]){var _0x5d2ax4=0!=_0x5d2ax3?_0xe4bc[179]+(( new Date)[_0xe4bc[178]]()-_0x5d2ax3)+_0xe4bc[180]:_0xe4bc[110];mxLog[_0xe4bc[171]](_0xe4bc[181]+_0x5d2ax2+_0x5d2ax4)}},debug:function(){mxLog[_0xe4bc[182]]&&mxLog[_0xe4bc[171]][_0xe4bc[183]](this,arguments)},warn:function(){mxLog[_0xe4bc[184]]&&mxLog[_0xe4bc[171]][_0xe4bc[183]](this,arguments)},write:function(){for(var _0x5d2ax2=_0xe4bc[110],_0x5d2ax3=0;_0x5d2ax3<arguments[_0xe4bc[67]];_0x5d2ax3++){_0x5d2ax2+=arguments[_0x5d2ax3],_0x5d2ax3<arguments[_0xe4bc[67]]-1&&(_0x5d2ax2+=_0xe4bc[185])};null!=mxLog[_0xe4bc[126]]?(mxLog[_0xe4bc[126]][_0xe4bc[131]]+=_0x5d2ax2,0<=navigator[_0xe4bc[3]][_0xe4bc[2]](_0xe4bc[186])&&(mxLog[_0xe4bc[126]][_0xe4bc[124]][_0xe4bc[187]]=_0xe4bc[188],mxLog[_0xe4bc[126]][_0xe4bc[124]][_0xe4bc[187]]=_0xe4bc[189]),mxLog[_0xe4bc[126]][_0xe4bc[190]]=mxLog[_0xe4bc[126]][_0xe4bc[191]]):mxLog[_0xe4bc[132]]+=_0x5d2ax2},writeln:function(){for(var _0x5d2ax2=_0xe4bc[110],_0x5d2ax3=0;_0x5d2ax3<arguments[_0xe4bc[67]];_0x5d2ax3++){_0x5d2ax2+=arguments[_0x5d2ax3],_0x5d2ax3<arguments[_0xe4bc[67]]-1&&(_0x5d2ax2+=_0xe4bc[185])};mxLog[_0xe4bc[53]](_0x5d2ax2+_0xe4bc[192])}},mxObjectIdentity={FIELD_NAME:_0xe4bc[193],counter:0,get:function(_0x5d2ax2){if(_0xe4bc[194]== typeof _0x5d2ax2&&null==_0x5d2ax2[mxObjectIdentity[_0xe4bc[195]]]){var _0x5d2ax3=mxUtils[_0xe4bc[197]](_0x5d2ax2[_0xe4bc[196]]);_0x5d2ax2[mxObjectIdentity[_0xe4bc[195]]]=_0x5d2ax3+_0xe4bc[198]+mxObjectIdentity[_0xe4bc[199]]++};return _0x5d2ax2[mxObjectIdentity[_0xe4bc[195]]]},clear:function(_0x5d2ax2){_0xe4bc[194]== typeof _0x5d2ax2&& delete _0x5d2ax2[mxObjectIdentity[_0xe4bc[195]]]}};function mxDictionary(){this[_0xe4bc[200]]()}mxDictionary[_0xe4bc[202]][_0xe4bc[201]]=null;mxDictionary[_0xe4bc[202]][_0xe4bc[200]]=function(){this[_0xe4bc[201]]={}};mxDictionary[_0xe4bc[202]][_0xe4bc[203]]=function(_0x5d2ax2){_0x5d2ax2=mxObjectIdentity[_0xe4bc[203]](_0x5d2ax2);return this[_0xe4bc[201]][_0x5d2ax2]};mxDictionary[_0xe4bc[202]][_0xe4bc[204]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=mxObjectIdentity[_0xe4bc[203]](_0x5d2ax2),_0x5d2ax5=this[_0xe4bc[201]][_0x5d2ax4];this[_0xe4bc[201]][_0x5d2ax4]=_0x5d2ax3;return _0x5d2ax5};mxDictionary[_0xe4bc[202]][_0xe4bc[205]]=function(_0x5d2ax2){_0x5d2ax2=mxObjectIdentity[_0xe4bc[203]](_0x5d2ax2);var _0x5d2ax3=this[_0xe4bc[201]][_0x5d2ax2];delete this[_0xe4bc[201]][_0x5d2ax2];return _0x5d2ax3};mxDictionary[_0xe4bc[202]][_0xe4bc[206]]=function(){var _0x5d2ax2=[],_0x5d2ax3;for(_0x5d2ax3 in this[_0xe4bc[201]]){_0x5d2ax2[_0xe4bc[207]](_0x5d2ax3)};return _0x5d2ax2};mxDictionary[_0xe4bc[202]][_0xe4bc[208]]=function(){var _0x5d2ax2=[],_0x5d2ax3;for(_0x5d2ax3 in this[_0xe4bc[201]]){_0x5d2ax2[_0xe4bc[207]](this[_0xe4bc[201]][_0x5d2ax3])};return _0x5d2ax2};mxDictionary[_0xe4bc[202]][_0xe4bc[209]]=function(_0x5d2ax2){for(var _0x5d2ax3 in this[_0xe4bc[201]]){_0x5d2ax2(_0x5d2ax3,this[_0xe4bc[201]][_0x5d2ax3])}};var mxResources={resources:[],extension:mxResourceExtension,resourcesEncoded:!1,loadDefaultBundle:!0,loadSpecialBundle:!0,isLanguageSupported:function(_0x5d2ax2){return null!=mxClient[_0xe4bc[96]]?0<=mxUtils[_0xe4bc[2]](mxClient[_0xe4bc[96]],_0x5d2ax2):!0},getDefaultBundle:function(_0x5d2ax2,_0x5d2ax3){return mxResources[_0xe4bc[210]]||!mxResources[_0xe4bc[211]](_0x5d2ax3)?_0x5d2ax2+mxResources[_0xe4bc[212]]:null},getSpecialBundle:function(_0x5d2ax2,_0x5d2ax3){if(null==mxClient[_0xe4bc[96]]||!this[_0xe4bc[211]](_0x5d2ax3)){var _0x5d2ax4=_0x5d2ax3[_0xe4bc[2]](_0xe4bc[213]);0<_0x5d2ax4&&(_0x5d2ax3=_0x5d2ax3[_0xe4bc[85]](0,_0x5d2ax4))};return mxResources[_0xe4bc[214]]&&mxResources[_0xe4bc[211]](_0x5d2ax3)&&_0x5d2ax3!=mxClient[_0xe4bc[92]]?_0x5d2ax2+_0xe4bc[215]+_0x5d2ax3+mxResources[_0xe4bc[212]]:null},add:function(_0x5d2ax2,_0x5d2ax3){_0x5d2ax3=null!=_0x5d2ax3?_0x5d2ax3:mxClient[_0xe4bc[90]][_0xe4bc[216]]();if(_0x5d2ax3!=mxConstants[_0xe4bc[217]]){var _0x5d2ax4=mxResources[_0xe4bc[218]](_0x5d2ax2,_0x5d2ax3);if(null!=_0x5d2ax4){try{var _0x5d2ax5=mxUtils[_0xe4bc[219]](_0x5d2ax4);_0x5d2ax5[_0xe4bc[220]]()&&mxResources[_0xe4bc[222]](_0x5d2ax5[_0xe4bc[221]]())}catch(e){}};_0x5d2ax4=mxResources[_0xe4bc[223]](_0x5d2ax2,_0x5d2ax3);if(null!=_0x5d2ax4){try{_0x5d2ax5=mxUtils[_0xe4bc[219]](_0x5d2ax4),_0x5d2ax5[_0xe4bc[220]]()&&mxResources[_0xe4bc[222]](_0x5d2ax5[_0xe4bc[221]]())}catch(f){}}}},parse:function(_0x5d2ax2){if(null!=_0x5d2ax2){_0x5d2ax2=_0x5d2ax2[_0xe4bc[224]](_0xe4bc[192]);for(var _0x5d2ax3=0;_0x5d2ax3<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax3++){if(_0xe4bc[198]!=_0x5d2ax2[_0x5d2ax3][_0xe4bc[225]](0)){var _0x5d2ax4=_0x5d2ax2[_0x5d2ax3][_0xe4bc[2]](_0xe4bc[226]);if(0<_0x5d2ax4){var _0x5d2ax5=_0x5d2ax2[_0x5d2ax3][_0xe4bc[85]](0,_0x5d2ax4),_0x5d2ax9=_0x5d2ax2[_0x5d2ax3][_0xe4bc[67]];13==_0x5d2ax2[_0x5d2ax3][_0xe4bc[227]](_0x5d2ax9-1)&&_0x5d2ax9--;_0x5d2ax4=_0x5d2ax2[_0x5d2ax3][_0xe4bc[85]](_0x5d2ax4+1,_0x5d2ax9);this[_0xe4bc[228]]?(_0x5d2ax4=_0x5d2ax4[_0xe4bc[230]](/\\(?=u[a-fA-F\d]{4})/g,_0xe4bc[229]),mxResources[_0xe4bc[231]][_0x5d2ax5]=unescape(_0x5d2ax4)):mxResources[_0xe4bc[231]][_0x5d2ax5]=_0x5d2ax4}}}}},get:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){_0x5d2ax2=mxResources[_0xe4bc[231]][_0x5d2ax2];null==_0x5d2ax2&&(_0x5d2ax2=_0x5d2ax4);if(null!=_0x5d2ax2&&null!=_0x5d2ax3){_0x5d2ax4=[];for(var _0x5d2ax5=null,_0x5d2ax9=0;_0x5d2ax9<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax9++){var _0x5d2axa=_0x5d2ax2[_0xe4bc[225]](_0x5d2ax9);_0xe4bc[232]==_0x5d2axa?_0x5d2ax5=_0xe4bc[110]:null!=_0x5d2ax5&&_0xe4bc[233]==_0x5d2axa?(_0x5d2ax5=parseInt(_0x5d2ax5)-1,0<=_0x5d2ax5&&_0x5d2ax5<_0x5d2ax3[_0xe4bc[67]]&&_0x5d2ax4[_0xe4bc[207]](_0x5d2ax3[_0x5d2ax5]),_0x5d2ax5=null):null!=_0x5d2ax5?_0x5d2ax5+=_0x5d2axa:_0x5d2ax4[_0xe4bc[207]](_0x5d2axa)};_0x5d2ax2=_0x5d2ax4[_0xe4bc[234]](_0xe4bc[110])};return _0x5d2ax2}};function mxPoint(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[235]]=null!=_0x5d2ax2?_0x5d2ax2:0;this[_0xe4bc[236]]=null!=_0x5d2ax3?_0x5d2ax3:0}mxPoint[_0xe4bc[202]][_0xe4bc[235]]=null;mxPoint[_0xe4bc[202]][_0xe4bc[236]]=null;mxPoint[_0xe4bc[202]][_0xe4bc[237]]=function(_0x5d2ax2){return _0x5d2ax2[_0xe4bc[235]]==this[_0xe4bc[235]]&&_0x5d2ax2[_0xe4bc[236]]==this[_0xe4bc[236]]};mxPoint[_0xe4bc[202]][_0xe4bc[238]]=function(){return mxUtils[_0xe4bc[238]](this)};function mxRectangle(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){mxPoint[_0xe4bc[239]](this,_0x5d2ax2,_0x5d2ax3);this[_0xe4bc[117]]=null!=_0x5d2ax4?_0x5d2ax4:0;this[_0xe4bc[119]]=null!=_0x5d2ax5?_0x5d2ax5:0}mxRectangle[_0xe4bc[202]]= new mxPoint;mxRectangle[_0xe4bc[202]][_0xe4bc[196]]=mxRectangle;mxRectangle[_0xe4bc[202]][_0xe4bc[117]]=null;mxRectangle[_0xe4bc[202]][_0xe4bc[119]]=null;mxRectangle[_0xe4bc[202]][_0xe4bc[240]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){this[_0xe4bc[235]]=_0x5d2ax2;this[_0xe4bc[236]]=_0x5d2ax3;this[_0xe4bc[117]]=_0x5d2ax4;this[_0xe4bc[119]]=_0x5d2ax5};mxRectangle[_0xe4bc[202]][_0xe4bc[241]]=function(){return this[_0xe4bc[235]]+this[_0xe4bc[117]]/2};mxRectangle[_0xe4bc[202]][_0xe4bc[242]]=function(){return this[_0xe4bc[236]]+this[_0xe4bc[119]]/2};mxRectangle[_0xe4bc[202]][_0xe4bc[99]]=function(_0x5d2ax2){if(null!=_0x5d2ax2){var _0x5d2ax3=Math[_0xe4bc[243]](this[_0xe4bc[235]],_0x5d2ax2[_0xe4bc[235]]),_0x5d2ax4=Math[_0xe4bc[243]](this[_0xe4bc[236]],_0x5d2ax2[_0xe4bc[236]]),_0x5d2ax5=Math[_0xe4bc[160]](this[_0xe4bc[235]]+this[_0xe4bc[117]],_0x5d2ax2[_0xe4bc[235]]+_0x5d2ax2[_0xe4bc[117]]);_0x5d2ax2=Math[_0xe4bc[160]](this[_0xe4bc[236]]+this[_0xe4bc[119]],_0x5d2ax2[_0xe4bc[236]]+_0x5d2ax2[_0xe4bc[119]]);this[_0xe4bc[235]]=_0x5d2ax3;this[_0xe4bc[236]]=_0x5d2ax4;this[_0xe4bc[117]]=_0x5d2ax5-_0x5d2ax3;this[_0xe4bc[119]]=_0x5d2ax2-_0x5d2ax4}};mxRectangle[_0xe4bc[202]][_0xe4bc[244]]=function(_0x5d2ax2){this[_0xe4bc[235]]-=_0x5d2ax2;this[_0xe4bc[236]]-=_0x5d2ax2;this[_0xe4bc[117]]+=2*_0x5d2ax2;this[_0xe4bc[119]]+=2*_0x5d2ax2};mxRectangle[_0xe4bc[202]][_0xe4bc[245]]=function(){return  new mxPoint(this[_0xe4bc[235]],this[_0xe4bc[236]])};mxRectangle[_0xe4bc[202]][_0xe4bc[237]]=function(_0x5d2ax2){return _0x5d2ax2[_0xe4bc[235]]==this[_0xe4bc[235]]&&_0x5d2ax2[_0xe4bc[236]]==this[_0xe4bc[236]]&&_0x5d2ax2[_0xe4bc[117]]==this[_0xe4bc[117]]&&_0x5d2ax2[_0xe4bc[119]]==this[_0xe4bc[119]]};var mxEffects={animateChanges:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){var _0x5d2ax5=0,_0x5d2ax9=function(){for(var _0x5d2ax12=!1,_0x5d2ax13=0;_0x5d2ax13<_0x5d2ax3[_0xe4bc[67]];_0x5d2ax13++){var _0x5d2ax14=_0x5d2ax3[_0x5d2ax13];if(_0x5d2ax14 instanceof mxGeometryChange||_0x5d2ax14 instanceof mxTerminalChange||_0x5d2ax14 instanceof mxValueChange||_0x5d2ax14 instanceof mxChildChange||_0x5d2ax14 instanceof mxStyleChange){var _0x5d2ax15=_0x5d2ax2[_0xe4bc[249]]()[_0xe4bc[248]](_0x5d2ax14[_0xe4bc[246]]||_0x5d2ax14[_0xe4bc[247]],!1);if(null!=_0x5d2ax15){if(_0x5d2ax12= !0,_0x5d2ax14[_0xe4bc[196]]!=mxGeometryChange||_0x5d2ax2[_0xe4bc[251]][_0xe4bc[250]](_0x5d2ax14[_0xe4bc[246]])){mxUtils[_0xe4bc[254]](_0x5d2ax15[_0xe4bc[253]][_0xe4bc[252]],100*_0x5d2ax5/10)}else {var _0x5d2ax16=_0x5d2ax2[_0xe4bc[249]]()[_0xe4bc[255]],_0x5d2ax17=(_0x5d2ax14[_0xe4bc[256]][_0xe4bc[235]]-_0x5d2ax14[_0xe4bc[257]][_0xe4bc[235]])*_0x5d2ax16,_0x5d2ax18=(_0x5d2ax14[_0xe4bc[256]][_0xe4bc[236]]-_0x5d2ax14[_0xe4bc[257]][_0xe4bc[236]])*_0x5d2ax16,_0x5d2ax19=(_0x5d2ax14[_0xe4bc[256]][_0xe4bc[117]]-_0x5d2ax14[_0xe4bc[257]][_0xe4bc[117]])*_0x5d2ax16,_0x5d2ax16=(_0x5d2ax14[_0xe4bc[256]][_0xe4bc[119]]-_0x5d2ax14[_0xe4bc[257]][_0xe4bc[119]])*_0x5d2ax16;0==_0x5d2ax5?(_0x5d2ax15[_0xe4bc[235]]-=_0x5d2ax17,_0x5d2ax15[_0xe4bc[236]]-=_0x5d2ax18,_0x5d2ax15[_0xe4bc[117]]-=_0x5d2ax19,_0x5d2ax15[_0xe4bc[119]]-=_0x5d2ax16):(_0x5d2ax15[_0xe4bc[235]]+=_0x5d2ax17/10,_0x5d2ax15[_0xe4bc[236]]+=_0x5d2ax18/10,_0x5d2ax15[_0xe4bc[117]]+=_0x5d2ax19/10,_0x5d2ax15[_0xe4bc[119]]+=_0x5d2ax16/10);_0x5d2ax2[_0xe4bc[259]][_0xe4bc[258]](_0x5d2ax15);mxEffects[_0xe4bc[260]](_0x5d2ax2,_0x5d2ax14[_0xe4bc[246]],100*_0x5d2ax5/10)}}}};10>_0x5d2ax5&&_0x5d2ax12?(_0x5d2ax5++,window[_0xe4bc[261]](_0x5d2ax9,_0x5d2axa)):null!=_0x5d2ax4&&_0x5d2ax4()},_0x5d2axa=30;_0x5d2ax9()},cascadeOpacity:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){for(var _0x5d2ax5=_0x5d2ax2[_0xe4bc[251]][_0xe4bc[262]](_0x5d2ax3),_0x5d2ax9=0;_0x5d2ax9<_0x5d2ax5;_0x5d2ax9++){var _0x5d2axa=_0x5d2ax2[_0xe4bc[251]][_0xe4bc[263]](_0x5d2ax3,_0x5d2ax9),_0x5d2ax12=_0x5d2ax2[_0xe4bc[249]]()[_0xe4bc[248]](_0x5d2axa);null!=_0x5d2ax12&&(mxUtils[_0xe4bc[254]](_0x5d2ax12[_0xe4bc[253]][_0xe4bc[252]],_0x5d2ax4),mxEffects[_0xe4bc[260]](_0x5d2ax2,_0x5d2axa,_0x5d2ax4))};_0x5d2ax3=_0x5d2ax2[_0xe4bc[251]][_0xe4bc[264]](_0x5d2ax3);if(null!=_0x5d2ax3){for(_0x5d2ax9=0;_0x5d2ax9<_0x5d2ax3[_0xe4bc[67]];_0x5d2ax9++){_0x5d2ax5=_0x5d2ax2[_0xe4bc[249]]()[_0xe4bc[248]](_0x5d2ax3[_0x5d2ax9]),null!=_0x5d2ax5&&mxUtils[_0xe4bc[254]](_0x5d2ax5[_0xe4bc[253]][_0xe4bc[252]],_0x5d2ax4)}}},fadeOut:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa){_0x5d2ax5=_0x5d2ax5||40;_0x5d2ax9=_0x5d2ax9||30;var _0x5d2ax12=_0x5d2ax3||100;mxUtils[_0xe4bc[254]](_0x5d2ax2,_0x5d2ax12);if(_0x5d2axa||null==_0x5d2axa){var _0x5d2ax13=function(){_0x5d2ax12=Math[_0xe4bc[160]](_0x5d2ax12-_0x5d2ax5,0);mxUtils[_0xe4bc[254]](_0x5d2ax2,_0x5d2ax12);0<_0x5d2ax12?window[_0xe4bc[261]](_0x5d2ax13,_0x5d2ax9):(_0x5d2ax2[_0xe4bc[124]][_0xe4bc[187]]=_0xe4bc[188],_0x5d2ax4&&_0x5d2ax2[_0xe4bc[265]]&&_0x5d2ax2[_0xe4bc[265]][_0xe4bc[266]](_0x5d2ax2))};window[_0xe4bc[261]](_0x5d2ax13,_0x5d2ax9)}else {_0x5d2ax2[_0xe4bc[124]][_0xe4bc[187]]=_0xe4bc[188],_0x5d2ax4&&_0x5d2ax2[_0xe4bc[265]]&&_0x5d2ax2[_0xe4bc[265]][_0xe4bc[266]](_0x5d2ax2)}}},mxUtils={errorResource:_0xe4bc[130]!=mxClient[_0xe4bc[90]]?_0xe4bc[267]:_0xe4bc[110],closeResource:_0xe4bc[130]!=mxClient[_0xe4bc[90]]?_0xe4bc[268]:_0xe4bc[110],errorImage:mxClient[_0xe4bc[88]]+_0xe4bc[269],removeCursors:function(_0x5d2ax2){null!=_0x5d2ax2[_0xe4bc[124]]&&(_0x5d2ax2[_0xe4bc[124]][_0xe4bc[270]]=_0xe4bc[110]);_0x5d2ax2=_0x5d2ax2[_0xe4bc[271]];if(null!=_0x5d2ax2){for(var _0x5d2ax3=_0x5d2ax2[_0xe4bc[67]],_0x5d2ax4=0;_0x5d2ax4<_0x5d2ax3;_0x5d2ax4+=1){mxUtils[_0xe4bc[272]](_0x5d2ax2[_0x5d2ax4])}}},getCurrentStyle:function(){return mxClient[_0xe4bc[80]]?function(_0x5d2ax2){return null!=_0x5d2ax2?_0x5d2ax2[_0xe4bc[273]]:null}:function(_0x5d2ax2){return null!=_0x5d2ax2?window[_0xe4bc[274]](_0x5d2ax2,_0xe4bc[110]):null}}(),hasScrollbars:function(_0x5d2ax2){_0x5d2ax2=mxUtils[_0xe4bc[275]](_0x5d2ax2);return null!=_0x5d2ax2&&(_0xe4bc[276]==_0x5d2ax2[_0xe4bc[277]]||_0xe4bc[278]==_0x5d2ax2[_0xe4bc[277]])},bind:function(_0x5d2ax2,_0x5d2ax3){return function(){return _0x5d2ax3[_0xe4bc[183]](_0x5d2ax2,arguments)}},eval:function(_0x5d2ax2){var _0x5d2ax3=null;if(0<=_0x5d2ax2[_0xe4bc[2]](_0xe4bc[279])){try{eval(_0xe4bc[280]+_0x5d2ax2),_0x5d2ax3=_mxJavaScriptExpression,_mxJavaScriptExpression=null}catch(c){mxLog[_0xe4bc[283]](c[_0xe4bc[281]]+_0xe4bc[282]+_0x5d2ax2)}}else {try{_0x5d2ax3=eval(_0x5d2ax2)}catch(d){mxLog[_0xe4bc[283]](d[_0xe4bc[281]]+_0xe4bc[282]+_0x5d2ax2)}};return _0x5d2ax3},findNode:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){var _0x5d2ax5=_0x5d2ax2[_0xe4bc[284]](_0x5d2ax3);if(null!=_0x5d2ax5&&_0x5d2ax5==_0x5d2ax4){return _0x5d2ax2};for(_0x5d2ax2=_0x5d2ax2[_0xe4bc[285]];null!=_0x5d2ax2;){_0x5d2ax5=mxUtils[_0xe4bc[286]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4);if(null!=_0x5d2ax5){return _0x5d2ax5};_0x5d2ax2=_0x5d2ax2[_0xe4bc[287]]};return null},findNodeByAttribute:function(){return 9<=document[_0xe4bc[5]]?function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){var _0x5d2ax5=null;if(null!=_0x5d2ax2){if(_0x5d2ax2[_0xe4bc[288]]==mxConstants[_0xe4bc[289]]&&_0x5d2ax2[_0xe4bc[284]](_0x5d2ax3)==_0x5d2ax4){_0x5d2ax5=_0x5d2ax2}else {for(_0x5d2ax2=_0x5d2ax2[_0xe4bc[285]];null!=_0x5d2ax2&&null==_0x5d2ax5;){_0x5d2ax5=mxUtils[_0xe4bc[290]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4),_0x5d2ax2=_0x5d2ax2[_0xe4bc[287]]}}};return _0x5d2ax5}:mxClient[_0xe4bc[80]]?function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){return null==_0x5d2ax2?null:_0x5d2ax2[_0xe4bc[295]][_0xe4bc[294]](_0xe4bc[291]+_0x5d2ax3+_0xe4bc[292]+_0x5d2ax4+_0xe4bc[293])}:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){return null==_0x5d2ax2?null:_0x5d2ax2[_0xe4bc[295]][_0xe4bc[297]](_0xe4bc[291]+_0x5d2ax3+_0xe4bc[292]+_0x5d2ax4+_0xe4bc[293],_0x5d2ax2[_0xe4bc[295]],null,XPathResult.ANY_TYPE,null)[_0xe4bc[296]]()}}(),getFunctionName:function(_0x5d2ax2){var _0x5d2ax3=null;if(null!=_0x5d2ax2){if(null!=_0x5d2ax2[_0xe4bc[298]]){_0x5d2ax3=_0x5d2ax2[_0xe4bc[298]]}else {_0x5d2ax2=_0x5d2ax2.toString();for(_0x5d2ax3=9;_0xe4bc[185]==_0x5d2ax2[_0xe4bc[225]](_0x5d2ax3);){_0x5d2ax3++};var _0x5d2ax4=_0x5d2ax2[_0xe4bc[2]](_0xe4bc[299],_0x5d2ax3),_0x5d2ax3=_0x5d2ax2[_0xe4bc[85]](_0x5d2ax3,_0x5d2ax4)}};return _0x5d2ax3},indexOf:function(_0x5d2ax2,_0x5d2ax3){if(null!=_0x5d2ax2&&null!=_0x5d2ax3){for(var _0x5d2ax4=0;_0x5d2ax4<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax4++){if(_0x5d2ax2[_0x5d2ax4]==_0x5d2ax3){return _0x5d2ax4}}};return -1},remove:function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=null;if(_0xe4bc[194]== typeof _0x5d2ax3){for(var _0x5d2ax5=mxUtils[_0xe4bc[2]](_0x5d2ax3,_0x5d2ax2);0<=_0x5d2ax5;){_0x5d2ax3[_0xe4bc[300]](_0x5d2ax5,1),_0x5d2ax4=_0x5d2ax2,_0x5d2ax5=mxUtils[_0xe4bc[2]](_0x5d2ax3,_0x5d2ax2)}};for(var _0x5d2ax9 in _0x5d2ax3){_0x5d2ax3[_0x5d2ax9]==_0x5d2ax2&&( delete _0x5d2ax3[_0x5d2ax9],_0x5d2ax4=_0x5d2ax2)};return _0x5d2ax4},isNode:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){return null!=_0x5d2ax2&&!isNaN(_0x5d2ax2[_0xe4bc[288]])&&(null==_0x5d2ax3||_0x5d2ax2[_0xe4bc[301]][_0xe4bc[216]]()==_0x5d2ax3[_0xe4bc[216]]())?null==_0x5d2ax4||_0x5d2ax2[_0xe4bc[284]](_0x5d2ax4)==_0x5d2ax5:!1},getChildNodes:function(_0x5d2ax2,_0x5d2ax3){_0x5d2ax3=_0x5d2ax3||mxConstants[_0xe4bc[289]];for(var _0x5d2ax4=[],_0x5d2ax5=_0x5d2ax2[_0xe4bc[285]];null!=_0x5d2ax5;){_0x5d2ax5[_0xe4bc[288]]==_0x5d2ax3&&_0x5d2ax4[_0xe4bc[207]](_0x5d2ax5),_0x5d2ax5=_0x5d2ax5[_0xe4bc[287]]};return _0x5d2ax4},createXmlDocument:function(){var _0x5d2ax2=null;document[_0xe4bc[302]]&&document[_0xe4bc[302]][_0xe4bc[303]]?_0x5d2ax2=document[_0xe4bc[302]][_0xe4bc[303]](_0xe4bc[110],_0xe4bc[110],null):window[_0xe4bc[304]]&&(_0x5d2ax2= new ActiveXObject(_0xe4bc[305]));return _0x5d2ax2},parseXml:function(){return mxClient[_0xe4bc[80]]&&(_0xe4bc[82]=== typeof document[_0xe4bc[5]]||9>document[_0xe4bc[5]])?function(_0x5d2ax2){var _0x5d2ax3=mxUtils[_0xe4bc[306]]();_0x5d2ax3[_0xe4bc[307]]=_0xe4bc[308];_0x5d2ax3[_0xe4bc[309]](_0x5d2ax2);return _0x5d2ax3}:function(_0x5d2ax2){return ( new DOMParser)[_0xe4bc[311]](_0x5d2ax2,_0xe4bc[310])}}(),clearSelection:function(){if(document[_0xe4bc[312]]){return function(){document[_0xe4bc[312]][_0xe4bc[313]]()}};if(window[_0xe4bc[314]]){return function(){window[_0xe4bc[314]]()[_0xe4bc[315]]()}}}(),getPrettyXml:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){var _0x5d2ax5=[];if(null!=_0x5d2ax2){if(_0x5d2ax3=_0x5d2ax3||_0xe4bc[316],_0x5d2ax4=_0x5d2ax4||_0xe4bc[110],_0x5d2ax2[_0xe4bc[288]]==mxConstants[_0xe4bc[317]]){_0x5d2ax5[_0xe4bc[207]](_0x5d2ax2[_0xe4bc[318]])}else {_0x5d2ax5[_0xe4bc[207]](_0x5d2ax4+_0xe4bc[319]+_0x5d2ax2[_0xe4bc[301]]);var _0x5d2ax9=_0x5d2ax2[_0xe4bc[320]];if(null!=_0x5d2ax9){for(var _0x5d2axa=0;_0x5d2axa<_0x5d2ax9[_0xe4bc[67]];_0x5d2axa++){var _0x5d2ax12=mxUtils[_0xe4bc[321]](_0x5d2ax9[_0x5d2axa][_0xe4bc[318]]);_0x5d2ax5[_0xe4bc[207]](_0xe4bc[185]+_0x5d2ax9[_0x5d2axa][_0xe4bc[301]]+_0xe4bc[322]+_0x5d2ax12+_0xe4bc[323])}};_0x5d2ax9=_0x5d2ax2[_0xe4bc[285]];if(null!=_0x5d2ax9){for(_0x5d2ax5[_0xe4bc[207]](_0xe4bc[324]);null!=_0x5d2ax9;){_0x5d2ax5[_0xe4bc[207]](mxUtils[_0xe4bc[325]](_0x5d2ax9,_0x5d2ax3,_0x5d2ax4+_0x5d2ax3)),_0x5d2ax9=_0x5d2ax9[_0xe4bc[287]]};_0x5d2ax5[_0xe4bc[207]](_0x5d2ax4+_0xe4bc[326]+_0x5d2ax2[_0xe4bc[301]]+_0xe4bc[324])}else {_0x5d2ax5[_0xe4bc[207]](_0xe4bc[327])}}};return _0x5d2ax5[_0xe4bc[234]](_0xe4bc[110])},removeWhitespace:function(_0x5d2ax2,_0x5d2ax3){for(var _0x5d2ax4=_0x5d2ax3?_0x5d2ax2[_0xe4bc[328]]:_0x5d2ax2[_0xe4bc[287]];null!=_0x5d2ax4&&_0x5d2ax4[_0xe4bc[288]]==mxConstants[_0xe4bc[317]];){var _0x5d2ax5=_0x5d2ax3?_0x5d2ax4[_0xe4bc[328]]:_0x5d2ax4[_0xe4bc[287]],_0x5d2ax9=mxUtils[_0xe4bc[329]](_0x5d2ax4);0==mxUtils[_0xe4bc[330]](_0x5d2ax9)[_0xe4bc[67]]&&_0x5d2ax4[_0xe4bc[265]][_0xe4bc[266]](_0x5d2ax4);_0x5d2ax4=_0x5d2ax5}},htmlEntities:function(_0x5d2ax2,_0x5d2ax3){_0x5d2ax2=(_0x5d2ax2||_0xe4bc[110])[_0xe4bc[230]](/&/g,_0xe4bc[331]);_0x5d2ax2=_0x5d2ax2[_0xe4bc[230]](/"/g,_0xe4bc[332]);_0x5d2ax2=_0x5d2ax2[_0xe4bc[230]](/\'/g,_0xe4bc[333]);_0x5d2ax2=_0x5d2ax2[_0xe4bc[230]](/</g,_0xe4bc[334]);_0x5d2ax2=_0x5d2ax2[_0xe4bc[230]](/>/g,_0xe4bc[335]);if(null==_0x5d2ax3||_0x5d2ax3){_0x5d2ax2=_0x5d2ax2[_0xe4bc[230]](/\n/g,_0xe4bc[336])};return _0x5d2ax2},isVml:function(_0x5d2ax2){return null!=_0x5d2ax2&&_0xe4bc[97]==_0x5d2ax2[_0xe4bc[337]]},getXml:function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=_0xe4bc[110];null!=_0x5d2ax2&&(_0x5d2ax4=_0x5d2ax2[_0xe4bc[338]],_0x5d2ax4=null==_0x5d2ax4?_0x5d2ax2[_0xe4bc[339]]?_0x5d2ax2[_0xe4bc[339]]:( new XMLSerializer)[_0xe4bc[340]](_0x5d2ax2):_0x5d2ax4[_0xe4bc[230]](/\r\n\t[\t]*/g,_0xe4bc[110])[_0xe4bc[230]](/>\r\n/g,_0xe4bc[341])[_0xe4bc[230]](/\r\n/g,_0xe4bc[192]));return _0x5d2ax4=_0x5d2ax4[_0xe4bc[230]](/\n/g,_0x5d2ax3||_0xe4bc[336])},getTextContent:function(_0x5d2ax2){var _0x5d2ax3=_0xe4bc[110];null!=_0x5d2ax2&&(null!=_0x5d2ax2[_0xe4bc[285]]&&(_0x5d2ax2=_0x5d2ax2[_0xe4bc[285]]),_0x5d2ax3=_0x5d2ax2[_0xe4bc[318]]||_0xe4bc[110]);return _0x5d2ax3},getInnerHtml:function(){return mxClient[_0xe4bc[80]]?function(_0x5d2ax2){return null!=_0x5d2ax2?_0x5d2ax2[_0xe4bc[339]]:_0xe4bc[110]}:function(_0x5d2ax2){return null!=_0x5d2ax2?( new XMLSerializer)[_0xe4bc[340]](_0x5d2ax2):_0xe4bc[110]}}(),getOuterHtml:function(){return mxClient[_0xe4bc[80]]?function(_0x5d2ax2){if(null!=_0x5d2ax2){if(null!=_0x5d2ax2[_0xe4bc[342]]){return _0x5d2ax2[_0xe4bc[342]]};var _0x5d2ax3=[];_0x5d2ax3[_0xe4bc[207]](_0xe4bc[319]+_0x5d2ax2[_0xe4bc[301]]);var _0x5d2ax4=_0x5d2ax2[_0xe4bc[320]];if(null!=_0x5d2ax4){for(var _0x5d2ax5=0;_0x5d2ax5<_0x5d2ax4[_0xe4bc[67]];_0x5d2ax5++){var _0x5d2ax9=_0x5d2ax4[_0x5d2ax5][_0xe4bc[318]];null!=_0x5d2ax9&&0<_0x5d2ax9[_0xe4bc[67]]&&(_0x5d2ax3[_0xe4bc[207]](_0xe4bc[185]),_0x5d2ax3[_0xe4bc[207]](_0x5d2ax4[_0x5d2ax5][_0xe4bc[301]]),_0x5d2ax3[_0xe4bc[207]](_0xe4bc[322]),_0x5d2ax3[_0xe4bc[207]](_0x5d2ax9),_0x5d2ax3[_0xe4bc[207]](_0xe4bc[323]))}};0==_0x5d2ax2[_0xe4bc[339]][_0xe4bc[67]]?_0x5d2ax3[_0xe4bc[207]](_0xe4bc[343]):(_0x5d2ax3[_0xe4bc[207]](_0xe4bc[341]),_0x5d2ax3[_0xe4bc[207]](_0x5d2ax2[_0xe4bc[339]]),_0x5d2ax3[_0xe4bc[207]](_0xe4bc[326]+_0x5d2ax2[_0xe4bc[301]]+_0xe4bc[341]));return _0x5d2ax3[_0xe4bc[234]](_0xe4bc[110])};return _0xe4bc[110]}:function(_0x5d2ax2){return null!=_0x5d2ax2?( new XMLSerializer)[_0xe4bc[340]](_0x5d2ax2):_0xe4bc[110]}}(),write:function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=_0x5d2ax2[_0xe4bc[295]][_0xe4bc[344]](_0x5d2ax3);null!=_0x5d2ax2&&_0x5d2ax2[_0xe4bc[62]](_0x5d2ax4);return _0x5d2ax4},writeln:function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=_0x5d2ax2[_0xe4bc[295]][_0xe4bc[344]](_0x5d2ax3);null!=_0x5d2ax2&&(_0x5d2ax2[_0xe4bc[62]](_0x5d2ax4),_0x5d2ax2[_0xe4bc[62]](document[_0xe4bc[55]](_0xe4bc[345])));return _0x5d2ax4},br:function(_0x5d2ax2,_0x5d2ax3){_0x5d2ax3=_0x5d2ax3||1;for(var _0x5d2ax4=null,_0x5d2ax5=0;_0x5d2ax5<_0x5d2ax3;_0x5d2ax5++){null!=_0x5d2ax2&&(_0x5d2ax4=_0x5d2ax2[_0xe4bc[295]][_0xe4bc[55]](_0xe4bc[345]),_0x5d2ax2[_0xe4bc[62]](_0x5d2ax4))};return _0x5d2ax4},button:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){_0x5d2ax4=null!=_0x5d2ax4?_0x5d2ax4:document;_0x5d2ax4=_0x5d2ax4[_0xe4bc[55]](_0xe4bc[172]);mxUtils[_0xe4bc[53]](_0x5d2ax4,_0x5d2ax2);mxEvent[_0xe4bc[169]](_0x5d2ax4,_0xe4bc[173],function(_0x5d2ax2){_0x5d2ax3(_0x5d2ax2)});return _0x5d2ax4},para:function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=document[_0xe4bc[55]](_0xe4bc[346]);mxUtils[_0xe4bc[53]](_0x5d2ax4,_0x5d2ax3);null!=_0x5d2ax2&&_0x5d2ax2[_0xe4bc[62]](_0x5d2ax4);return _0x5d2ax4},addTransparentBackgroundFilter:function(_0x5d2ax2){_0x5d2ax2[_0xe4bc[124]][_0xe4bc[347]]+=_0xe4bc[348]+mxClient[_0xe4bc[88]]+_0xe4bc[349]},linkAction:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){return mxUtils[_0xe4bc[54]](_0x5d2ax2,_0x5d2ax3,function(){_0x5d2ax4[_0xe4bc[350]](_0x5d2ax5)},_0x5d2ax9)},linkInvoke:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa){return mxUtils[_0xe4bc[54]](_0x5d2ax2,_0x5d2ax3,function(){_0x5d2ax4[_0x5d2ax5](_0x5d2ax9)},_0x5d2axa)},link:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){var _0x5d2ax9=document[_0xe4bc[55]](_0xe4bc[351]);_0x5d2ax9[_0xe4bc[124]][_0xe4bc[352]]=_0xe4bc[353];_0x5d2ax9[_0xe4bc[124]][_0xe4bc[354]]=_0xe4bc[355];_0x5d2ax9[_0xe4bc[124]][_0xe4bc[270]]=_0xe4bc[356];null!=_0x5d2ax5&&(_0x5d2ax9[_0xe4bc[124]][_0xe4bc[357]]=_0x5d2ax5+_0xe4bc[168]);mxEvent[_0xe4bc[169]](_0x5d2ax9,_0xe4bc[173],_0x5d2ax4);mxUtils[_0xe4bc[53]](_0x5d2ax9,_0x5d2ax3);null!=_0x5d2ax2&&_0x5d2ax2[_0xe4bc[62]](_0x5d2ax9);return _0x5d2ax9},fit:function(_0x5d2ax2){var _0x5d2ax3=parseInt(_0x5d2ax2[_0xe4bc[358]]),_0x5d2ax4=parseInt(_0x5d2ax2[_0xe4bc[359]]),_0x5d2ax5=document[_0xe4bc[112]],_0x5d2ax9=document[_0xe4bc[158]],_0x5d2axa=(_0x5d2ax5[_0xe4bc[360]]||_0x5d2ax9[_0xe4bc[360]])+(_0x5d2ax5[_0xe4bc[159]]||_0x5d2ax9[_0xe4bc[159]]);_0x5d2ax3+_0x5d2ax4>_0x5d2axa&&(_0x5d2ax2[_0xe4bc[124]][_0xe4bc[361]]=Math[_0xe4bc[160]](_0x5d2ax5[_0xe4bc[360]]||_0x5d2ax9[_0xe4bc[360]],_0x5d2axa-_0x5d2ax4)+_0xe4bc[168]);_0x5d2ax3=parseInt(_0x5d2ax2[_0xe4bc[362]]);_0x5d2ax4=parseInt(_0x5d2ax2[_0xe4bc[167]]);_0x5d2axa=(_0x5d2ax5[_0xe4bc[190]]||_0x5d2ax9[_0xe4bc[190]])+Math[_0xe4bc[160]](_0x5d2ax5[_0xe4bc[157]]||0,_0x5d2ax9[_0xe4bc[157]]);_0x5d2ax3+_0x5d2ax4>_0x5d2axa&&(_0x5d2ax2[_0xe4bc[124]][_0xe4bc[125]]=Math[_0xe4bc[160]](_0x5d2ax5[_0xe4bc[190]]||_0x5d2ax9[_0xe4bc[190]],_0x5d2axa-_0x5d2ax4)+_0xe4bc[168])},open:function(_0x5d2ax2){if(mxClient[_0xe4bc[133]]){try{netscape[_0xe4bc[366]][_0xe4bc[365]][_0xe4bc[364]](_0xe4bc[363])}catch(b){return mxUtils[_0xe4bc[150]](_0xe4bc[367]),_0xe4bc[110]};var _0x5d2ax4=Components[_0xe4bc[372]][_0xe4bc[371]][_0xe4bc[370]](Components[_0xe4bc[369]][_0xe4bc[368]]);_0x5d2ax4[_0xe4bc[373]](_0x5d2ax2);if(!_0x5d2ax4[_0xe4bc[374]]()){return mxUtils[_0xe4bc[150]](_0xe4bc[375]),_0xe4bc[110]};_0x5d2ax2=Components[_0xe4bc[372]][_0xe4bc[377]][_0xe4bc[370]](Components[_0xe4bc[369]][_0xe4bc[376]]);_0x5d2ax2[_0xe4bc[176]](_0x5d2ax4,1,4,null);_0x5d2ax4=Components[_0xe4bc[372]][_0xe4bc[379]][_0xe4bc[370]](Components[_0xe4bc[369]][_0xe4bc[378]]);_0x5d2ax4[_0xe4bc[176]](_0x5d2ax2);return _0x5d2ax4[_0xe4bc[381]](_0x5d2ax4[_0xe4bc[380]]())};_0x5d2ax4=( new ActiveXObject(_0xe4bc[382])).OpenTextFile(_0x5d2ax2,1);_0x5d2ax2=_0x5d2ax4[_0xe4bc[383]]();_0x5d2ax4[_0xe4bc[268]]();return _0x5d2ax2},save:function(_0x5d2ax2,_0x5d2ax3){if(mxClient[_0xe4bc[133]]){try{netscape[_0xe4bc[366]][_0xe4bc[365]][_0xe4bc[364]](_0xe4bc[363])}catch(c){mxUtils[_0xe4bc[150]](_0xe4bc[384]);return};var _0x5d2ax5=Components[_0xe4bc[372]][_0xe4bc[371]][_0xe4bc[370]](Components[_0xe4bc[369]][_0xe4bc[368]]);_0x5d2ax5[_0xe4bc[373]](_0x5d2ax2);_0x5d2ax5[_0xe4bc[374]]()||_0x5d2ax5[_0xe4bc[385]](0,420);var _0x5d2ax9=Components[_0xe4bc[372]][_0xe4bc[387]][_0xe4bc[370]](Components[_0xe4bc[369]][_0xe4bc[386]]);_0x5d2ax9[_0xe4bc[176]](_0x5d2ax5,34,4,null);_0x5d2ax9[_0xe4bc[53]](_0x5d2ax3,_0x5d2ax3[_0xe4bc[67]]);_0x5d2ax9[_0xe4bc[388]]();_0x5d2ax9[_0xe4bc[268]]()}else {_0x5d2ax5=( new ActiveXObject(_0xe4bc[382])).CreateTextFile(_0x5d2ax2,!0),_0x5d2ax5.Write(_0x5d2ax3),_0x5d2ax5.Close()}},saveAs:function(_0x5d2ax2){var _0x5d2ax3=document[_0xe4bc[55]](_0xe4bc[389]);_0x5d2ax3[_0xe4bc[57]](_0xe4bc[390],_0xe4bc[110]);_0x5d2ax3[_0xe4bc[124]][_0xe4bc[187]]=_0xe4bc[188];document[_0xe4bc[112]][_0xe4bc[62]](_0x5d2ax3);try{if(mxClient[_0xe4bc[133]]){var _0x5d2ax4=_0x5d2ax3[_0xe4bc[391]];_0x5d2ax4[_0xe4bc[392]]();_0x5d2ax4[_0xe4bc[53]](_0x5d2ax2);_0x5d2ax4[_0xe4bc[268]]();try{netscape[_0xe4bc[366]][_0xe4bc[365]][_0xe4bc[364]](_0xe4bc[363]),_0x5d2ax3[_0xe4bc[393]](),saveDocument(_0x5d2ax4)}catch(d){mxUtils[_0xe4bc[150]](_0xe4bc[394])}}else {_0x5d2ax4=_0x5d2ax3[_0xe4bc[396]][_0xe4bc[395]],_0x5d2ax4[_0xe4bc[53]](_0x5d2ax2),_0x5d2ax4[_0xe4bc[398]](_0xe4bc[397],!1,document[_0xe4bc[45]])}}finally{document[_0xe4bc[112]][_0xe4bc[266]](_0x5d2ax3)}},copy:function(_0x5d2ax2){if(window[_0xe4bc[399]]){window[_0xe4bc[399]][_0xe4bc[401]](_0xe4bc[400],_0x5d2ax2)}else {netscape[_0xe4bc[366]][_0xe4bc[365]][_0xe4bc[364]](_0xe4bc[363]);var _0x5d2ax3=Components[_0xe4bc[372]][_0xe4bc[403]][_0xe4bc[370]](Components[_0xe4bc[369]][_0xe4bc[402]]);if(_0x5d2ax3){var _0x5d2ax4=Components[_0xe4bc[372]][_0xe4bc[405]][_0xe4bc[370]](Components[_0xe4bc[369]][_0xe4bc[404]]);if(_0x5d2ax4){_0x5d2ax4[_0xe4bc[407]](_0xe4bc[406]);var _0x5d2ax5=Components[_0xe4bc[372]][_0xe4bc[409]][_0xe4bc[370]](Components[_0xe4bc[369]][_0xe4bc[408]]);_0x5d2ax5[_0xe4bc[410]]=_0x5d2ax2;_0x5d2ax4[_0xe4bc[411]](_0xe4bc[406],_0x5d2ax5,2*_0x5d2ax2[_0xe4bc[67]]);_0x5d2ax3[_0xe4bc[401]](_0x5d2ax4,null,Components[_0xe4bc[369]][_0xe4bc[402]][_0xe4bc[412]])}}}},load:function(_0x5d2ax2){_0x5d2ax2= new mxXmlRequest(_0x5d2ax2,null,_0xe4bc[413],!1);_0x5d2ax2[_0xe4bc[414]]();return _0x5d2ax2},get:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){return ( new mxXmlRequest(_0x5d2ax2,null,_0xe4bc[413]))[_0xe4bc[414]](_0x5d2ax3,_0x5d2ax4)},post:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){return ( new mxXmlRequest(_0x5d2ax2,_0x5d2ax3))[_0xe4bc[414]](_0x5d2ax4,_0x5d2ax5)},submit:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){return ( new mxXmlRequest(_0x5d2ax2,_0x5d2ax3))[_0xe4bc[415]](_0x5d2ax4,_0x5d2ax5)},loadInto:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){mxClient[_0xe4bc[80]]?_0x5d2ax3[_0xe4bc[416]]=function(){4==_0x5d2ax3[_0xe4bc[417]]&&_0x5d2ax4()}:_0x5d2ax3[_0xe4bc[418]](_0xe4bc[219],_0x5d2ax4,!1);_0x5d2ax3[_0xe4bc[219]](_0x5d2ax2)},getValue:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){_0x5d2ax2=null!=_0x5d2ax2?_0x5d2ax2[_0x5d2ax3]:null;null==_0x5d2ax2&&(_0x5d2ax2=_0x5d2ax4);return _0x5d2ax2},getNumber:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){_0x5d2ax2=null!=_0x5d2ax2?_0x5d2ax2[_0x5d2ax3]:null;null==_0x5d2ax2&&(_0x5d2ax2=_0x5d2ax4||0);return Number(_0x5d2ax2)},getColor:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){_0x5d2ax2=null!=_0x5d2ax2?_0x5d2ax2[_0x5d2ax3]:null;null==_0x5d2ax2?_0x5d2ax2=_0x5d2ax4:_0x5d2ax2==mxConstants[_0xe4bc[217]]&&(_0x5d2ax2=null);return _0x5d2ax2},clone:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){_0x5d2ax4=null!=_0x5d2ax4?_0x5d2ax4:!1;var _0x5d2ax5=null;if(null!=_0x5d2ax2&&_0xe4bc[279]== typeof _0x5d2ax2[_0xe4bc[196]]){var _0x5d2ax5= new _0x5d2ax2[_0xe4bc[196]],_0x5d2ax9;for(_0x5d2ax9 in _0x5d2ax2){if(_0x5d2ax9!=mxObjectIdentity[_0xe4bc[195]]&&(null==_0x5d2ax3||0>mxUtils[_0xe4bc[2]](_0x5d2ax3,_0x5d2ax9))){_0x5d2ax5[_0x5d2ax9]=!_0x5d2ax4&&_0xe4bc[194]== typeof _0x5d2ax2[_0x5d2ax9]?mxUtils[_0xe4bc[238]](_0x5d2ax2[_0x5d2ax9]):_0x5d2ax2[_0x5d2ax9]}}};return _0x5d2ax5},equalPoints:function(_0x5d2ax2,_0x5d2ax3){if(null==_0x5d2ax2&&null!=_0x5d2ax3||null!=_0x5d2ax2&&null==_0x5d2ax3||null!=_0x5d2ax2&&null!=_0x5d2ax3&&_0x5d2ax2[_0xe4bc[67]]!=_0x5d2ax3[_0xe4bc[67]]){return !1};if(null!=_0x5d2ax2&&null!=_0x5d2ax3){for(var _0x5d2ax4=0;_0x5d2ax4<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax4++){if(_0x5d2ax2[_0x5d2ax4]==_0x5d2ax3[_0x5d2ax4]||null!=_0x5d2ax2[_0x5d2ax4]&&!_0x5d2ax2[_0x5d2ax4][_0xe4bc[237]](_0x5d2ax3[_0x5d2ax4])){return !1}}};return !0},equalEntries:function(_0x5d2ax2,_0x5d2ax3){if(null==_0x5d2ax2&&null!=_0x5d2ax3||null!=_0x5d2ax2&&null==_0x5d2ax3||null!=_0x5d2ax2&&null!=_0x5d2ax3&&_0x5d2ax2[_0xe4bc[67]]!=_0x5d2ax3[_0xe4bc[67]]){return !1};if(null!=_0x5d2ax2&&null!=_0x5d2ax3){for(var _0x5d2ax4 in _0x5d2ax2){if(_0x5d2ax2[_0x5d2ax4]!=_0x5d2ax3[_0x5d2ax4]){return !1}}};return !0},extend:function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=function(){};_0x5d2ax4[_0xe4bc[202]]=_0x5d2ax3[_0xe4bc[202]];_0x5d2ax2[_0xe4bc[202]]= new _0x5d2ax4;_0x5d2ax2[_0xe4bc[202]][_0xe4bc[196]]=_0x5d2ax2},toString:function(_0x5d2ax2){var _0x5d2ax3=_0xe4bc[110],_0x5d2ax4;for(_0x5d2ax4 in _0x5d2ax2){try{if(null==_0x5d2ax2[_0x5d2ax4]){_0x5d2ax3+=_0x5d2ax4+_0xe4bc[419]}else {if(_0xe4bc[279]== typeof _0x5d2ax2[_0x5d2ax4]){_0x5d2ax3+=_0x5d2ax4+_0xe4bc[420]}else {if(_0xe4bc[194]== typeof _0x5d2ax2[_0x5d2ax4]){var _0x5d2ax5=mxUtils[_0xe4bc[197]](_0x5d2ax2[_0x5d2ax4][_0xe4bc[196]]),_0x5d2ax3=_0x5d2ax3+(_0x5d2ax4+_0xe4bc[421]+_0x5d2ax5+_0xe4bc[422])}else {_0x5d2ax3+=_0x5d2ax4+_0xe4bc[423]+_0x5d2ax2[_0x5d2ax4]+_0xe4bc[192]}}}}catch(e){_0x5d2ax3+=_0x5d2ax4+_0xe4bc[226]+e[_0xe4bc[281]]}};return _0x5d2ax3},toRadians:function(_0x5d2ax2){return Math[_0xe4bc[424]]*_0x5d2ax2/180},arcToCurves:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa,_0x5d2ax12,_0x5d2ax13,_0x5d2ax14){_0x5d2ax13-=_0x5d2ax2;_0x5d2ax14-=_0x5d2ax3;if(0===_0x5d2ax4||0===_0x5d2ax5){return _0x5d2ax18};_0x5d2ax4=Math[_0xe4bc[425]](_0x5d2ax4);_0x5d2ax5=Math[_0xe4bc[425]](_0x5d2ax5);var _0x5d2ax15=-_0x5d2ax13/2,_0x5d2ax16=-_0x5d2ax14/2,_0x5d2ax17=Math[_0xe4bc[426]](_0x5d2ax9*Math[_0xe4bc[424]]/180),_0x5d2ax18=Math[_0xe4bc[427]](_0x5d2ax9*Math[_0xe4bc[424]]/180);_0x5d2ax9=_0x5d2ax17*_0x5d2ax15+_0x5d2ax18*_0x5d2ax16;var _0x5d2ax15=-1*_0x5d2ax18*_0x5d2ax15+_0x5d2ax17*_0x5d2ax16,_0x5d2ax16=_0x5d2ax9*_0x5d2ax9,_0x5d2ax19=_0x5d2ax15*_0x5d2ax15,_0x5d2ax1a=_0x5d2ax4*_0x5d2ax4,_0x5d2ax1b=_0x5d2ax5*_0x5d2ax5,_0x5d2ax1c=_0x5d2ax16/_0x5d2ax1a+_0x5d2ax19/_0x5d2ax1b;1<_0x5d2ax1c?(_0x5d2ax4*=Math[_0xe4bc[428]](_0x5d2ax1c),_0x5d2ax5*=Math[_0xe4bc[428]](_0x5d2ax1c),_0x5d2axa=0):(_0x5d2ax1c=1,_0x5d2axa===_0x5d2ax12&&(_0x5d2ax1c= -1),_0x5d2axa=_0x5d2ax1c*Math[_0xe4bc[428]]((_0x5d2ax1a*_0x5d2ax1b-_0x5d2ax1a*_0x5d2ax19-_0x5d2ax1b*_0x5d2ax16)/(_0x5d2ax1a*_0x5d2ax19+_0x5d2ax1b*_0x5d2ax16)));_0x5d2ax16=_0x5d2axa*_0x5d2ax4*_0x5d2ax15/_0x5d2ax5;_0x5d2ax19=-1*_0x5d2axa*_0x5d2ax5*_0x5d2ax9/_0x5d2ax4;_0x5d2ax13=_0x5d2ax17*_0x5d2ax16-_0x5d2ax18*_0x5d2ax19+_0x5d2ax13/2;_0x5d2ax14=_0x5d2ax18*_0x5d2ax16+_0x5d2ax17*_0x5d2ax19+_0x5d2ax14/2;_0x5d2ax1a=Math[_0xe4bc[429]]((_0x5d2ax15-_0x5d2ax19)/_0x5d2ax5,(_0x5d2ax9-_0x5d2ax16)/_0x5d2ax4)-Math[_0xe4bc[429]](0,1);_0x5d2axa=0<=_0x5d2ax1a?_0x5d2ax1a:2*Math[_0xe4bc[424]]+_0x5d2ax1a;_0x5d2ax1a=Math[_0xe4bc[429]]((-_0x5d2ax15-_0x5d2ax19)/_0x5d2ax5,(-_0x5d2ax9-_0x5d2ax16)/_0x5d2ax4)-Math[_0xe4bc[429]]((_0x5d2ax15-_0x5d2ax19)/_0x5d2ax5,(_0x5d2ax9-_0x5d2ax16)/_0x5d2ax4);_0x5d2ax9=0<=_0x5d2ax1a?_0x5d2ax1a:2*Math[_0xe4bc[424]]+_0x5d2ax1a;0==_0x5d2ax12&&0<_0x5d2ax9?_0x5d2ax9-=2*Math[_0xe4bc[424]]:0!=_0x5d2ax12&&0>_0x5d2ax9&&(_0x5d2ax9+=2*Math[_0xe4bc[424]]);_0x5d2ax12=2*_0x5d2ax9/Math[_0xe4bc[424]];_0x5d2ax12=Math[_0xe4bc[430]](0>_0x5d2ax12?-1*_0x5d2ax12:_0x5d2ax12);_0x5d2ax9/=_0x5d2ax12;_0x5d2ax15=8/3*Math[_0xe4bc[427]](_0x5d2ax9/4)*Math[_0xe4bc[427]](_0x5d2ax9/4)/Math[_0xe4bc[427]](_0x5d2ax9/2);_0x5d2ax16=_0x5d2ax17*_0x5d2ax4;_0x5d2ax17*=_0x5d2ax5;_0x5d2ax4*=_0x5d2ax18;_0x5d2ax5*=_0x5d2ax18;for(var _0x5d2ax1d=Math[_0xe4bc[426]](_0x5d2axa),_0x5d2ax1e=Math[_0xe4bc[427]](_0x5d2axa),_0x5d2ax19=-_0x5d2ax15*(_0x5d2ax16*_0x5d2ax1e+_0x5d2ax5*_0x5d2ax1d),_0x5d2ax1a=-_0x5d2ax15*(_0x5d2ax4*_0x5d2ax1e-_0x5d2ax17*_0x5d2ax1d),_0x5d2ax1c=_0x5d2ax1b=0,_0x5d2ax18=[],_0x5d2ax1f=0;_0x5d2ax1f<_0x5d2ax12;++_0x5d2ax1f){_0x5d2axa+=_0x5d2ax9;var _0x5d2ax1d=Math[_0xe4bc[426]](_0x5d2axa),_0x5d2ax1e=Math[_0xe4bc[427]](_0x5d2axa),_0x5d2ax1b=_0x5d2ax16*_0x5d2ax1d-_0x5d2ax5*_0x5d2ax1e+_0x5d2ax13,_0x5d2ax1c=_0x5d2ax4*_0x5d2ax1d+_0x5d2ax17*_0x5d2ax1e+_0x5d2ax14,_0x5d2ax20=-_0x5d2ax15*(_0x5d2ax16*_0x5d2ax1e+_0x5d2ax5*_0x5d2ax1d),_0x5d2ax1d=-_0x5d2ax15*(_0x5d2ax4*_0x5d2ax1e-_0x5d2ax17*_0x5d2ax1d),_0x5d2ax1e=6*_0x5d2ax1f;_0x5d2ax18[_0x5d2ax1e]=Number(_0x5d2ax19+_0x5d2ax2);_0x5d2ax18[_0x5d2ax1e+1]=Number(_0x5d2ax1a+_0x5d2ax3);_0x5d2ax18[_0x5d2ax1e+2]=Number(_0x5d2ax1b-_0x5d2ax20+_0x5d2ax2);_0x5d2ax18[_0x5d2ax1e+3]=Number(_0x5d2ax1c-_0x5d2ax1d+_0x5d2ax3);_0x5d2ax18[_0x5d2ax1e+4]=Number(_0x5d2ax1b+_0x5d2ax2);_0x5d2ax18[_0x5d2ax1e+5]=Number(_0x5d2ax1c+_0x5d2ax3);_0x5d2ax19=_0x5d2ax1b+_0x5d2ax20;_0x5d2ax1a=_0x5d2ax1c+_0x5d2ax1d};return _0x5d2ax18},getBoundingBox:function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=null;if(null!=_0x5d2ax2&&null!=_0x5d2ax3&&0!=_0x5d2ax3){var _0x5d2ax5=mxUtils[_0xe4bc[431]](_0x5d2ax3),_0x5d2ax4=Math[_0xe4bc[426]](_0x5d2ax5),_0x5d2ax9=Math[_0xe4bc[427]](_0x5d2ax5),_0x5d2axa= new mxPoint(_0x5d2ax2[_0xe4bc[235]]+_0x5d2ax2[_0xe4bc[117]]/2,_0x5d2ax2[_0xe4bc[236]]+_0x5d2ax2[_0xe4bc[119]]/2),_0x5d2ax12= new mxPoint(_0x5d2ax2[_0xe4bc[235]],_0x5d2ax2[_0xe4bc[236]]),_0x5d2ax5= new mxPoint(_0x5d2ax2[_0xe4bc[235]]+_0x5d2ax2[_0xe4bc[117]],_0x5d2ax2[_0xe4bc[236]]),_0x5d2ax13= new mxPoint(_0x5d2ax5[_0xe4bc[235]],_0x5d2ax2[_0xe4bc[236]]+_0x5d2ax2[_0xe4bc[119]]),_0x5d2ax14= new mxPoint(_0x5d2ax2[_0xe4bc[235]],_0x5d2ax13[_0xe4bc[236]]),_0x5d2ax12=mxUtils[_0xe4bc[432]](_0x5d2ax12,_0x5d2ax4,_0x5d2ax9,_0x5d2axa),_0x5d2ax5=mxUtils[_0xe4bc[432]](_0x5d2ax5,_0x5d2ax4,_0x5d2ax9,_0x5d2axa),_0x5d2ax13=mxUtils[_0xe4bc[432]](_0x5d2ax13,_0x5d2ax4,_0x5d2ax9,_0x5d2axa),_0x5d2ax14=mxUtils[_0xe4bc[432]](_0x5d2ax14,_0x5d2ax4,_0x5d2ax9,_0x5d2axa),_0x5d2ax4= new mxRectangle(_0x5d2ax12[_0xe4bc[235]],_0x5d2ax12[_0xe4bc[236]],0,0);_0x5d2ax4[_0xe4bc[99]]( new mxRectangle(_0x5d2ax5[_0xe4bc[235]],_0x5d2ax5[_0xe4bc[236]],0,0));_0x5d2ax4[_0xe4bc[99]]( new mxRectangle(_0x5d2ax13[_0xe4bc[235]],_0x5d2ax13[_0xe4bc[236]],0,0));_0x5d2ax4[_0xe4bc[99]]( new mxRectangle(_0x5d2ax14[_0xe4bc[235]],_0x5d2ax14[_0xe4bc[236]],0,0))};return _0x5d2ax4},getRotatedPoint:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){_0x5d2ax5=null!=_0x5d2ax5?_0x5d2ax5: new mxPoint;var _0x5d2ax9=_0x5d2ax2[_0xe4bc[235]]-_0x5d2ax5[_0xe4bc[235]];_0x5d2ax2=_0x5d2ax2[_0xe4bc[236]]-_0x5d2ax5[_0xe4bc[236]];return  new mxPoint(_0x5d2ax9*_0x5d2ax3-_0x5d2ax2*_0x5d2ax4+_0x5d2ax5[_0xe4bc[235]],_0x5d2ax2*_0x5d2ax3+_0x5d2ax9*_0x5d2ax4+_0x5d2ax5[_0xe4bc[236]])},getPortConstraints:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){_0x5d2ax2=mxUtils[_0xe4bc[433]](_0x5d2ax2[_0xe4bc[124]],mxConstants.STYLE_PORT_CONSTRAINT,null);if(null==_0x5d2ax2){return _0x5d2ax5};_0x5d2ax5=_0x5d2ax2.toString();_0x5d2ax2=mxConstants[_0xe4bc[434]];0<=_0x5d2ax5[_0xe4bc[2]](mxConstants.DIRECTION_NORTH)&&(_0x5d2ax2|=mxConstants[_0xe4bc[435]]);0<=_0x5d2ax5[_0xe4bc[2]](mxConstants.DIRECTION_WEST)&&(_0x5d2ax2|=mxConstants[_0xe4bc[436]]);0<=_0x5d2ax5[_0xe4bc[2]](mxConstants.DIRECTION_SOUTH)&&(_0x5d2ax2|=mxConstants[_0xe4bc[437]]);0<=_0x5d2ax5[_0xe4bc[2]](mxConstants.DIRECTION_EAST)&&(_0x5d2ax2|=mxConstants[_0xe4bc[438]]);return _0x5d2ax2},reversePortConstraints:function(_0x5d2ax2){var _0x5d2ax3=0,_0x5d2ax3=(_0x5d2ax2&mxConstants[_0xe4bc[436]])<<3,_0x5d2ax3=_0x5d2ax3|(_0x5d2ax2&mxConstants[_0xe4bc[435]])<<1,_0x5d2ax3=_0x5d2ax3|(_0x5d2ax2&mxConstants[_0xe4bc[437]])>>1;return _0x5d2ax3|=(_0x5d2ax2&mxConstants[_0xe4bc[438]])>>3},findNearestSegment:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){var _0x5d2ax5=-1;if(0<_0x5d2ax2[_0xe4bc[439]][_0xe4bc[67]]){for(var _0x5d2ax9=_0x5d2ax2[_0xe4bc[439]][0],_0x5d2axa=null,_0x5d2ax12=1;_0x5d2ax12<_0x5d2ax2[_0xe4bc[439]][_0xe4bc[67]];_0x5d2ax12++){var _0x5d2ax13=_0x5d2ax2[_0xe4bc[439]][_0x5d2ax12],_0x5d2ax9=mxUtils[_0xe4bc[440]](_0x5d2ax9[_0xe4bc[235]],_0x5d2ax9[_0xe4bc[236]],_0x5d2ax13[_0xe4bc[235]],_0x5d2ax13[_0xe4bc[236]],_0x5d2ax3,_0x5d2ax4);if(null==_0x5d2axa||_0x5d2ax9<_0x5d2axa){_0x5d2axa=_0x5d2ax9,_0x5d2ax5=_0x5d2ax12-1};_0x5d2ax9=_0x5d2ax13}};return _0x5d2ax5},rectangleIntersectsSegment:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){var _0x5d2ax5=_0x5d2ax2[_0xe4bc[236]],_0x5d2ax9=_0x5d2ax2[_0xe4bc[235]],_0x5d2axa=_0x5d2ax5+_0x5d2ax2[_0xe4bc[119]],_0x5d2ax12=_0x5d2ax9+_0x5d2ax2[_0xe4bc[117]];_0x5d2ax2=_0x5d2ax3[_0xe4bc[235]];var _0x5d2ax13=_0x5d2ax4[_0xe4bc[235]];_0x5d2ax3[_0xe4bc[235]]>_0x5d2ax4[_0xe4bc[235]]&&(_0x5d2ax2=_0x5d2ax4[_0xe4bc[235]],_0x5d2ax13=_0x5d2ax3[_0xe4bc[235]]);_0x5d2ax13>_0x5d2ax12&&(_0x5d2ax13=_0x5d2ax12);_0x5d2ax2<_0x5d2ax9&&(_0x5d2ax2=_0x5d2ax9);if(_0x5d2ax2>_0x5d2ax13){return !1};var _0x5d2ax9=_0x5d2ax3[_0xe4bc[236]],_0x5d2ax12=_0x5d2ax4[_0xe4bc[236]],_0x5d2ax14=_0x5d2ax4[_0xe4bc[235]]-_0x5d2ax3[_0xe4bc[235]];1E-7<Math[_0xe4bc[425]](_0x5d2ax14)&&(_0x5d2ax4=(_0x5d2ax4[_0xe4bc[236]]-_0x5d2ax3[_0xe4bc[236]])/_0x5d2ax14,_0x5d2ax3=_0x5d2ax3[_0xe4bc[236]]-_0x5d2ax4*_0x5d2ax3[_0xe4bc[235]],_0x5d2ax9=_0x5d2ax4*_0x5d2ax2+_0x5d2ax3,_0x5d2ax12=_0x5d2ax4*_0x5d2ax13+_0x5d2ax3);_0x5d2ax9>_0x5d2ax12&&(_0x5d2ax3=_0x5d2ax12,_0x5d2ax12=_0x5d2ax9,_0x5d2ax9=_0x5d2ax3);_0x5d2ax12>_0x5d2axa&&(_0x5d2ax12=_0x5d2axa);_0x5d2ax9<_0x5d2ax5&&(_0x5d2ax9=_0x5d2ax5);return _0x5d2ax9>_0x5d2ax12?!1:!0},contains:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){return _0x5d2ax2[_0xe4bc[235]]<=_0x5d2ax3&&_0x5d2ax2[_0xe4bc[235]]+_0x5d2ax2[_0xe4bc[117]]>=_0x5d2ax3&&_0x5d2ax2[_0xe4bc[236]]<=_0x5d2ax4&&_0x5d2ax2[_0xe4bc[236]]+_0x5d2ax2[_0xe4bc[119]]>=_0x5d2ax4},intersects:function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=_0x5d2ax2[_0xe4bc[117]],_0x5d2ax5=_0x5d2ax2[_0xe4bc[119]],_0x5d2ax9=_0x5d2ax3[_0xe4bc[117]],_0x5d2axa=_0x5d2ax3[_0xe4bc[119]];if(0>=_0x5d2ax9||0>=_0x5d2axa||0>=_0x5d2ax4||0>=_0x5d2ax5){return !1};var _0x5d2ax12=_0x5d2ax2[_0xe4bc[235]],_0x5d2ax13=_0x5d2ax2[_0xe4bc[236]],_0x5d2ax14=_0x5d2ax3[_0xe4bc[235]],_0x5d2ax15=_0x5d2ax3[_0xe4bc[236]],_0x5d2ax9=_0x5d2ax9+_0x5d2ax14,_0x5d2axa=_0x5d2axa+_0x5d2ax15,_0x5d2ax4=_0x5d2ax4+_0x5d2ax12,_0x5d2ax5=_0x5d2ax5+_0x5d2ax13;return (_0x5d2ax9<_0x5d2ax14||_0x5d2ax9>_0x5d2ax12)&&(_0x5d2axa<_0x5d2ax15||_0x5d2axa>_0x5d2ax13)&&(_0x5d2ax4<_0x5d2ax12||_0x5d2ax4>_0x5d2ax14)&&(_0x5d2ax5<_0x5d2ax13||_0x5d2ax5>_0x5d2ax15)},intersectsHotspot:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa){_0x5d2ax5=null!=_0x5d2ax5?_0x5d2ax5:1;_0x5d2ax9=null!=_0x5d2ax9?_0x5d2ax9:0;_0x5d2axa=null!=_0x5d2axa?_0x5d2axa:0;if(0<_0x5d2ax5){var _0x5d2ax12=_0x5d2ax2[_0xe4bc[241]](),_0x5d2ax13=_0x5d2ax2[_0xe4bc[242]](),_0x5d2ax14=_0x5d2ax2[_0xe4bc[117]],_0x5d2ax15=_0x5d2ax2[_0xe4bc[119]],_0x5d2ax16=mxUtils[_0xe4bc[433]](_0x5d2ax2[_0xe4bc[124]],mxConstants.STYLE_STARTSIZE)*_0x5d2ax2[_0xe4bc[441]][_0xe4bc[255]];0<_0x5d2ax16&&(mxUtils[_0xe4bc[433]](_0x5d2ax2[_0xe4bc[124]],mxConstants.STYLE_HORIZONTAL,!0)?(_0x5d2ax13=_0x5d2ax2[_0xe4bc[236]]+_0x5d2ax16/2,_0x5d2ax15=_0x5d2ax16):(_0x5d2ax12=_0x5d2ax2[_0xe4bc[235]]+_0x5d2ax16/2,_0x5d2ax14=_0x5d2ax16));_0x5d2ax14=Math[_0xe4bc[160]](_0x5d2ax9,_0x5d2ax14*_0x5d2ax5);_0x5d2ax15=Math[_0xe4bc[160]](_0x5d2ax9,_0x5d2ax15*_0x5d2ax5);0<_0x5d2axa&&(_0x5d2ax14=Math[_0xe4bc[243]](_0x5d2ax14,_0x5d2axa),_0x5d2ax15=Math[_0xe4bc[243]](_0x5d2ax15,_0x5d2axa));_0x5d2ax5= new mxRectangle(_0x5d2ax12-_0x5d2ax14/2,_0x5d2ax13-_0x5d2ax15/2,_0x5d2ax14,_0x5d2ax15);_0x5d2ax12=mxUtils[_0xe4bc[431]](mxUtils[_0xe4bc[433]](_0x5d2ax2[_0xe4bc[124]],mxConstants.STYLE_ROTATION)||0);0!=_0x5d2ax12&&(_0x5d2ax9=Math[_0xe4bc[426]](-_0x5d2ax12),_0x5d2axa=Math[_0xe4bc[427]](-_0x5d2ax12),_0x5d2ax12= new mxPoint(_0x5d2ax2[_0xe4bc[241]](),_0x5d2ax2[_0xe4bc[242]]()),_0x5d2ax2=mxUtils[_0xe4bc[432]]( new mxPoint(_0x5d2ax3,_0x5d2ax4),_0x5d2ax9,_0x5d2axa,_0x5d2ax12),_0x5d2ax3=_0x5d2ax2[_0xe4bc[235]],_0x5d2ax4=_0x5d2ax2[_0xe4bc[236]]);return mxUtils[_0xe4bc[442]](_0x5d2ax5,_0x5d2ax3,_0x5d2ax4)};return !0},getOffset:function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=0,_0x5d2ax5=0;if(null!=_0x5d2ax3&&_0x5d2ax3){var _0x5d2ax9=document[_0xe4bc[112]],_0x5d2axa=document[_0xe4bc[158]],_0x5d2ax4=_0x5d2ax4+(_0x5d2ax9[_0xe4bc[360]]||_0x5d2axa[_0xe4bc[360]]),_0x5d2ax5=_0x5d2ax5+(_0x5d2ax9[_0xe4bc[190]]||_0x5d2axa[_0xe4bc[190]])};for(;_0x5d2ax2[_0xe4bc[443]];){_0x5d2ax4+=_0x5d2ax2[_0xe4bc[358]],_0x5d2ax5+=_0x5d2ax2[_0xe4bc[362]],_0x5d2ax2=_0x5d2ax2[_0xe4bc[443]]};return  new mxPoint(_0x5d2ax4,_0x5d2ax5)},getScrollOrigin:function(_0x5d2ax2){for(var _0x5d2ax3=document[_0xe4bc[112]],_0x5d2ax4=document[_0xe4bc[158]],_0x5d2ax5= new mxPoint(_0x5d2ax3[_0xe4bc[360]]||_0x5d2ax4[_0xe4bc[360]],_0x5d2ax3[_0xe4bc[190]]||_0x5d2ax4[_0xe4bc[190]]);null!=_0x5d2ax2&&_0x5d2ax2!=_0x5d2ax3&&_0x5d2ax2!=_0x5d2ax4;){!isNaN(_0x5d2ax2[_0xe4bc[360]])&&!isNaN(_0x5d2ax2[_0xe4bc[190]])&&(_0x5d2ax5[_0xe4bc[235]]+=_0x5d2ax2[_0xe4bc[360]],_0x5d2ax5[_0xe4bc[236]]+=_0x5d2ax2[_0xe4bc[190]]),_0x5d2ax2=_0x5d2ax2[_0xe4bc[265]]};return _0x5d2ax5},convertPoint:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){var _0x5d2ax5=mxUtils[_0xe4bc[444]](_0x5d2ax2);_0x5d2ax2=mxUtils[_0xe4bc[445]](_0x5d2ax2);_0x5d2ax2[_0xe4bc[235]]-=_0x5d2ax5[_0xe4bc[235]];_0x5d2ax2[_0xe4bc[236]]-=_0x5d2ax5[_0xe4bc[236]];return  new mxPoint(_0x5d2ax3-_0x5d2ax2[_0xe4bc[235]],_0x5d2ax4-_0x5d2ax2[_0xe4bc[236]])},ltrim:function(_0x5d2ax2,_0x5d2ax3){return _0x5d2ax2[_0xe4bc[230]](RegExp(_0xe4bc[446]+(_0x5d2ax3||_0xe4bc[447])+_0xe4bc[448],_0xe4bc[449]),_0xe4bc[110])},rtrim:function(_0x5d2ax2,_0x5d2ax3){return _0x5d2ax2[_0xe4bc[230]](RegExp(_0xe4bc[450]+(_0x5d2ax3||_0xe4bc[447])+_0xe4bc[451],_0xe4bc[449]),_0xe4bc[110])},trim:function(_0x5d2ax2,_0x5d2ax3){return mxUtils[_0xe4bc[453]](mxUtils[_0xe4bc[452]](_0x5d2ax2,_0x5d2ax3),_0x5d2ax3)},isNumeric:function(_0x5d2ax2){return null!=_0x5d2ax2&&(null==_0x5d2ax2[_0xe4bc[67]]||0<_0x5d2ax2[_0xe4bc[67]]&&0>_0x5d2ax2[_0xe4bc[2]](_0xe4bc[454])&&0>_0x5d2ax2[_0xe4bc[2]](_0xe4bc[455]))&&!isNaN(_0x5d2ax2)},mod:function(_0x5d2ax2,_0x5d2ax3){return (_0x5d2ax2%_0x5d2ax3+_0x5d2ax3)%_0x5d2ax3},intersection:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa,_0x5d2ax12,_0x5d2ax13){var _0x5d2ax14=(_0x5d2ax13-_0x5d2axa)*(_0x5d2ax4-_0x5d2ax2)-(_0x5d2ax12-_0x5d2ax9)*(_0x5d2ax5-_0x5d2ax3);_0x5d2ax12=((_0x5d2ax12-_0x5d2ax9)*(_0x5d2ax3-_0x5d2axa)-(_0x5d2ax13-_0x5d2axa)*(_0x5d2ax2-_0x5d2ax9))/_0x5d2ax14;_0x5d2ax9=((_0x5d2ax4-_0x5d2ax2)*(_0x5d2ax3-_0x5d2axa)-(_0x5d2ax5-_0x5d2ax3)*(_0x5d2ax2-_0x5d2ax9))/_0x5d2ax14;return 0<=_0x5d2ax12&&1>=_0x5d2ax12&&0<=_0x5d2ax9&&1>=_0x5d2ax9? new mxPoint(_0x5d2ax2+_0x5d2ax12*(_0x5d2ax4-_0x5d2ax2),_0x5d2ax3+_0x5d2ax12*(_0x5d2ax5-_0x5d2ax3)):null},ptSegDistSq:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa){_0x5d2ax4-=_0x5d2ax2;_0x5d2ax5-=_0x5d2ax3;_0x5d2ax9-=_0x5d2ax2;_0x5d2axa-=_0x5d2ax3;0>=_0x5d2ax9*_0x5d2ax4+_0x5d2axa*_0x5d2ax5?_0x5d2ax4=0:(_0x5d2ax9=_0x5d2ax4-_0x5d2ax9,_0x5d2axa=_0x5d2ax5-_0x5d2axa,_0x5d2ax2=_0x5d2ax9*_0x5d2ax4+_0x5d2axa*_0x5d2ax5,_0x5d2ax4=0>=_0x5d2ax2?0:_0x5d2ax2*_0x5d2ax2/(_0x5d2ax4*_0x5d2ax4+_0x5d2ax5*_0x5d2ax5));_0x5d2ax9=_0x5d2ax9*_0x5d2ax9+_0x5d2axa*_0x5d2axa-_0x5d2ax4;0>_0x5d2ax9&&(_0x5d2ax9=0);return _0x5d2ax9},relativeCcw:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa){_0x5d2ax4-=_0x5d2ax2;_0x5d2ax5-=_0x5d2ax3;_0x5d2ax9-=_0x5d2ax2;_0x5d2axa-=_0x5d2ax3;_0x5d2ax2=_0x5d2ax9*_0x5d2ax5-_0x5d2axa*_0x5d2ax4;0==_0x5d2ax2&&(_0x5d2ax2=_0x5d2ax9*_0x5d2ax4+_0x5d2axa*_0x5d2ax5,0<_0x5d2ax2&&(_0x5d2ax2=(_0x5d2ax9-_0x5d2ax4)*_0x5d2ax4+(_0x5d2axa-_0x5d2ax5)*_0x5d2ax5,0>_0x5d2ax2&&(_0x5d2ax2=0)));return 0>_0x5d2ax2?-1:0<_0x5d2ax2?1:0},animateChanges:function(_0x5d2ax2,_0x5d2ax3){mxEffects[_0xe4bc[456]][_0xe4bc[183]](this,arguments)},cascadeOpacity:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){mxEffects[_0xe4bc[260]][_0xe4bc[183]](this,arguments)},fadeOut:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa){mxEffects[_0xe4bc[457]][_0xe4bc[183]](this,arguments)},setOpacity:function(_0x5d2ax2,_0x5d2ax3){mxUtils[_0xe4bc[458]](_0x5d2ax2)?_0x5d2ax2[_0xe4bc[124]][_0xe4bc[347]]=100<=_0x5d2ax3?null:_0xe4bc[459]+_0x5d2ax3/5+_0xe4bc[460]:mxClient[_0xe4bc[80]]&&(_0xe4bc[82]=== typeof document[_0xe4bc[5]]||9>document[_0xe4bc[5]])?_0x5d2ax2[_0xe4bc[124]][_0xe4bc[347]]=100<=_0x5d2ax3?null:_0xe4bc[459]+_0x5d2ax3+_0xe4bc[460]:_0x5d2ax2[_0xe4bc[124]][_0xe4bc[461]]=_0x5d2ax3/100},createImage:function(_0x5d2ax2){var _0x5d2ax3=null;mxClient[_0xe4bc[49]]&&_0xe4bc[462]!=document[_0xe4bc[135]]?(_0x5d2ax3=document[_0xe4bc[55]](mxClient[_0xe4bc[463]]+_0xe4bc[464]),_0x5d2ax3[_0xe4bc[57]](_0xe4bc[390],_0x5d2ax2),_0x5d2ax3[_0xe4bc[124]][_0xe4bc[465]]=_0xe4bc[130]):(_0x5d2ax3=document[_0xe4bc[55]](_0xe4bc[466]),_0x5d2ax3[_0xe4bc[57]](_0xe4bc[390],_0x5d2ax2),_0x5d2ax3[_0xe4bc[57]](_0xe4bc[467],_0xe4bc[468]));return _0x5d2ax3},sortCells:function(_0x5d2ax2,_0x5d2ax3){_0x5d2ax3=null!=_0x5d2ax3?_0x5d2ax3:!0;var _0x5d2ax4= new mxDictionary;_0x5d2ax2[_0xe4bc[470]](function(_0x5d2ax2,_0x5d2ax9){var _0x5d2axa=_0x5d2ax4[_0xe4bc[203]](_0x5d2ax2);null==_0x5d2axa&&(_0x5d2axa=mxCellPath[_0xe4bc[385]](_0x5d2ax2)[_0xe4bc[224]](mxCellPath.PATH_SEPARATOR),_0x5d2ax4[_0xe4bc[204]](_0x5d2ax2,_0x5d2axa));var _0x5d2ax12=_0x5d2ax4[_0xe4bc[203]](_0x5d2ax9);null==_0x5d2ax12&&(_0x5d2ax12=mxCellPath[_0xe4bc[385]](_0x5d2ax9)[_0xe4bc[224]](mxCellPath.PATH_SEPARATOR),_0x5d2ax4[_0xe4bc[204]](_0x5d2ax9,_0x5d2ax12));_0x5d2axa=mxCellPath[_0xe4bc[469]](_0x5d2axa,_0x5d2ax12);return 0==_0x5d2axa?0:0<_0x5d2axa==_0x5d2ax3?1:-1});return _0x5d2ax2},getStylename:function(_0x5d2ax2){return null!=_0x5d2ax2&&(_0x5d2ax2=_0x5d2ax2[_0xe4bc[224]](_0xe4bc[471])[0],0>_0x5d2ax2[_0xe4bc[2]](_0xe4bc[226]))?_0x5d2ax2:_0xe4bc[110]},getStylenames:function(_0x5d2ax2){var _0x5d2ax3=[];if(null!=_0x5d2ax2){_0x5d2ax2=_0x5d2ax2[_0xe4bc[224]](_0xe4bc[471]);for(var _0x5d2ax4=0;_0x5d2ax4<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax4++){0>_0x5d2ax2[_0x5d2ax4][_0xe4bc[2]](_0xe4bc[226])&&_0x5d2ax3[_0xe4bc[207]](_0x5d2ax2[_0x5d2ax4])}};return _0x5d2ax3},indexOfStylename:function(_0x5d2ax2,_0x5d2ax3){if(null!=_0x5d2ax2&&null!=_0x5d2ax3){for(var _0x5d2ax4=_0x5d2ax2[_0xe4bc[224]](_0xe4bc[471]),_0x5d2ax5=0,_0x5d2ax9=0;_0x5d2ax9<_0x5d2ax4[_0xe4bc[67]];_0x5d2ax9++){if(_0x5d2ax4[_0x5d2ax9]==_0x5d2ax3){return _0x5d2ax5};_0x5d2ax5+=_0x5d2ax4[_0x5d2ax9][_0xe4bc[67]]+1}};return -1},addStylename:function(_0x5d2ax2,_0x5d2ax3){0>mxUtils[_0xe4bc[472]](_0x5d2ax2,_0x5d2ax3)&&(null==_0x5d2ax2?_0x5d2ax2=_0xe4bc[110]:0<_0x5d2ax2[_0xe4bc[67]]&&_0xe4bc[471]!=_0x5d2ax2[_0xe4bc[225]](_0x5d2ax2[_0xe4bc[67]]-1)&&(_0x5d2ax2+=_0xe4bc[471]),_0x5d2ax2+=_0x5d2ax3);return _0x5d2ax2},removeStylename:function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=[];if(null!=_0x5d2ax2){for(var _0x5d2ax5=_0x5d2ax2[_0xe4bc[224]](_0xe4bc[471]),_0x5d2ax9=0;_0x5d2ax9<_0x5d2ax5[_0xe4bc[67]];_0x5d2ax9++){_0x5d2ax5[_0x5d2ax9]!=_0x5d2ax3&&_0x5d2ax4[_0xe4bc[207]](_0x5d2ax5[_0x5d2ax9])}};return _0x5d2ax4[_0xe4bc[234]](_0xe4bc[471])},removeAllStylenames:function(_0x5d2ax2){var _0x5d2ax3=[];if(null!=_0x5d2ax2){_0x5d2ax2=_0x5d2ax2[_0xe4bc[224]](_0xe4bc[471]);for(var _0x5d2ax4=0;_0x5d2ax4<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax4++){0<=_0x5d2ax2[_0x5d2ax4][_0xe4bc[2]](_0xe4bc[226])&&_0x5d2ax3[_0xe4bc[207]](_0x5d2ax2[_0x5d2ax4])}};return _0x5d2ax3[_0xe4bc[234]](_0xe4bc[471])},setCellStyles:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){if(null!=_0x5d2ax3&&0<_0x5d2ax3[_0xe4bc[67]]){_0x5d2ax2[_0xe4bc[473]]();try{for(var _0x5d2ax9=0;_0x5d2ax9<_0x5d2ax3[_0xe4bc[67]];_0x5d2ax9++){if(null!=_0x5d2ax3[_0x5d2ax9]){var _0x5d2axa=mxUtils[_0xe4bc[475]](_0x5d2ax2[_0xe4bc[474]](_0x5d2ax3[_0x5d2ax9]),_0x5d2ax4,_0x5d2ax5);_0x5d2ax2[_0xe4bc[475]](_0x5d2ax3[_0x5d2ax9],_0x5d2axa)}}}finally{_0x5d2ax2[_0xe4bc[476]]()}}},setStyle:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){var _0x5d2ax5=null!=_0x5d2ax4&&(_0xe4bc[82]== typeof _0x5d2ax4[_0xe4bc[67]]||0<_0x5d2ax4[_0xe4bc[67]]);if(null==_0x5d2ax2||0==_0x5d2ax2[_0xe4bc[67]]){_0x5d2ax5&&(_0x5d2ax2=_0x5d2ax3+_0xe4bc[226]+_0x5d2ax4)}else {var _0x5d2ax9=_0x5d2ax2[_0xe4bc[2]](_0x5d2ax3+_0xe4bc[226]);0>_0x5d2ax9?_0x5d2ax5&&(_0x5d2ax5=_0xe4bc[471]==_0x5d2ax2[_0xe4bc[225]](_0x5d2ax2[_0xe4bc[67]]-1)?_0xe4bc[110]:_0xe4bc[471],_0x5d2ax2=_0x5d2ax2+_0x5d2ax5+_0x5d2ax3+_0xe4bc[226]+_0x5d2ax4):(_0x5d2ax3=_0x5d2ax5?_0x5d2ax3+_0xe4bc[226]+_0x5d2ax4:_0xe4bc[110],_0x5d2ax4=_0x5d2ax2[_0xe4bc[2]](_0xe4bc[471],_0x5d2ax9),_0x5d2ax5||_0x5d2ax4++,_0x5d2ax2=_0x5d2ax2[_0xe4bc[85]](0,_0x5d2ax9)+_0x5d2ax3+(_0x5d2ax4>_0x5d2ax9?_0x5d2ax2[_0xe4bc[85]](_0x5d2ax4):_0xe4bc[110]))};return _0x5d2ax2},setCellStyleFlags:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){if(null!=_0x5d2ax3&&0<_0x5d2ax3[_0xe4bc[67]]){_0x5d2ax2[_0xe4bc[473]]();try{for(var _0x5d2axa=0;_0x5d2axa<_0x5d2ax3[_0xe4bc[67]];_0x5d2axa++){if(null!=_0x5d2ax3[_0x5d2axa]){var _0x5d2ax12=mxUtils[_0xe4bc[477]](_0x5d2ax2[_0xe4bc[474]](_0x5d2ax3[_0x5d2axa]),_0x5d2ax4,_0x5d2ax5,_0x5d2ax9);_0x5d2ax2[_0xe4bc[475]](_0x5d2ax3[_0x5d2axa],_0x5d2ax12)}}}finally{_0x5d2ax2[_0xe4bc[476]]()}}},setStyleFlag:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){if(null==_0x5d2ax2||0==_0x5d2ax2[_0xe4bc[67]]){_0x5d2ax2=_0x5d2ax5||null==_0x5d2ax5?_0x5d2ax3+_0xe4bc[226]+_0x5d2ax4:_0x5d2ax3+_0xe4bc[478]}else {var _0x5d2ax9=_0x5d2ax2[_0xe4bc[2]](_0x5d2ax3+_0xe4bc[226]);if(0>_0x5d2ax9){_0x5d2ax9=_0xe4bc[471]==_0x5d2ax2[_0xe4bc[225]](_0x5d2ax2[_0xe4bc[67]]-1)?_0xe4bc[110]:_0xe4bc[471],_0x5d2ax2=_0x5d2ax5||null==_0x5d2ax5?_0x5d2ax2+_0x5d2ax9+_0x5d2ax3+_0xe4bc[226]+_0x5d2ax4:_0x5d2ax2+_0x5d2ax9+_0x5d2ax3+_0xe4bc[478]}else {var _0x5d2axa=_0x5d2ax2[_0xe4bc[2]](_0xe4bc[471],_0x5d2ax9),_0x5d2ax12=_0xe4bc[110],_0x5d2ax12=0>_0x5d2axa?_0x5d2ax2[_0xe4bc[85]](_0x5d2ax9+_0x5d2ax3[_0xe4bc[67]]+1):_0x5d2ax2[_0xe4bc[85]](_0x5d2ax9+_0x5d2ax3[_0xe4bc[67]]+1,_0x5d2axa),_0x5d2ax12=null==_0x5d2ax5?parseInt(_0x5d2ax12)^_0x5d2ax4:_0x5d2ax5?parseInt(_0x5d2ax12)|_0x5d2ax4:parseInt(_0x5d2ax12)& ~_0x5d2ax4;_0x5d2ax2=_0x5d2ax2[_0xe4bc[85]](0,_0x5d2ax9)+_0x5d2ax3+_0xe4bc[226]+_0x5d2ax12+(0<=_0x5d2axa?_0x5d2ax2[_0xe4bc[85]](_0x5d2axa):_0xe4bc[110])}};return _0x5d2ax2},getAlignmentAsPoint:function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=0,_0x5d2ax5=0;_0x5d2ax2==mxConstants[_0xe4bc[479]]?_0x5d2ax4= -0.5:_0x5d2ax2==mxConstants[_0xe4bc[480]]&&(_0x5d2ax4= -1);_0x5d2ax3==mxConstants[_0xe4bc[481]]?_0x5d2ax5= -0.5:_0x5d2ax3==mxConstants[_0xe4bc[482]]&&(_0x5d2ax5= -1);return  new mxPoint(_0x5d2ax4,_0x5d2ax5)},getSizeForString:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){_0x5d2ax3=null!=_0x5d2ax3?_0x5d2ax3:mxConstants[_0xe4bc[483]];_0x5d2ax4=null!=_0x5d2ax4?_0x5d2ax4:mxConstants[_0xe4bc[484]];var _0x5d2ax5=document[_0xe4bc[55]](_0xe4bc[485]);_0x5d2ax5[_0xe4bc[124]][_0xe4bc[486]]=_0x5d2ax4;_0x5d2ax5[_0xe4bc[124]][_0xe4bc[487]]=Math[_0xe4bc[488]](_0x5d2ax3)+_0xe4bc[168];_0x5d2ax5[_0xe4bc[124]][_0xe4bc[489]]=Math[_0xe4bc[488]](_0x5d2ax3*mxConstants[_0xe4bc[490]])+_0xe4bc[168];_0x5d2ax5[_0xe4bc[124]][_0xe4bc[491]]=_0xe4bc[492];_0x5d2ax5[_0xe4bc[124]][_0xe4bc[493]]=_0xe4bc[494];_0x5d2ax5[_0xe4bc[124]][_0xe4bc[187]]=_0xe4bc[188];_0x5d2ax5[_0xe4bc[124]][_0xe4bc[495]]=mxClient[_0xe4bc[496]]?_0xe4bc[497]:_0xe4bc[498];_0x5d2ax5[_0xe4bc[124]][_0xe4bc[499]]=_0xe4bc[500];_0x5d2ax5[_0xe4bc[339]]=_0x5d2ax2;document[_0xe4bc[112]][_0xe4bc[62]](_0x5d2ax5);_0x5d2ax2= new mxRectangle(0,0,_0x5d2ax5[_0xe4bc[359]],_0x5d2ax5[_0xe4bc[167]]);document[_0xe4bc[112]][_0xe4bc[266]](_0x5d2ax5);return _0x5d2ax2},getViewXml:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){_0x5d2ax5=null!=_0x5d2ax5?_0x5d2ax5:0;_0x5d2ax9=null!=_0x5d2ax9?_0x5d2ax9:0;_0x5d2ax3=null!=_0x5d2ax3?_0x5d2ax3:1;null==_0x5d2ax4&&(_0x5d2ax4=[_0x5d2ax2[_0xe4bc[502]]()[_0xe4bc[501]]()]);var _0x5d2axa=_0x5d2ax2[_0xe4bc[249]](),_0x5d2ax12=null,_0x5d2ax13=_0x5d2axa[_0xe4bc[503]]();_0x5d2axa[_0xe4bc[504]](!1);var _0x5d2ax14=_0x5d2axa[_0xe4bc[505]],_0x5d2ax15=_0x5d2axa[_0xe4bc[506]];_0x5d2ax2[_0xe4bc[507]]==mxConstants[_0xe4bc[508]]?(_0x5d2axa[_0xe4bc[505]]=document[_0xe4bc[509]](mxConstants.NS_SVG,_0xe4bc[449]),_0x5d2axa[_0xe4bc[510]][_0xe4bc[62]](_0x5d2axa[_0xe4bc[505]]),_0x5d2axa[_0xe4bc[506]]=document[_0xe4bc[509]](mxConstants.NS_SVG,_0xe4bc[449])):(_0x5d2axa[_0xe4bc[505]]=_0x5d2axa[_0xe4bc[505]][_0xe4bc[511]](!1),_0x5d2axa[_0xe4bc[510]][_0xe4bc[62]](_0x5d2axa[_0xe4bc[505]]),_0x5d2axa[_0xe4bc[506]]=_0x5d2axa[_0xe4bc[506]][_0xe4bc[511]](!1));_0x5d2axa[_0xe4bc[510]][_0xe4bc[62]](_0x5d2axa[_0xe4bc[506]]);var _0x5d2ax16=_0x5d2axa[_0xe4bc[512]]();_0x5d2axa[_0xe4bc[513]]= new mxPoint(_0x5d2ax5,_0x5d2ax9);_0x5d2ax3= new mxTemporaryCellStates(_0x5d2ax2[_0xe4bc[249]](),_0x5d2ax3,_0x5d2ax4);try{_0x5d2ax12=( new mxCodec)[_0xe4bc[514]](_0x5d2ax2[_0xe4bc[249]]())}finally{_0x5d2ax3[_0xe4bc[515]](),_0x5d2axa[_0xe4bc[513]]=_0x5d2ax16,_0x5d2axa[_0xe4bc[510]][_0xe4bc[266]](_0x5d2axa[_0xe4bc[505]]),_0x5d2axa[_0xe4bc[510]][_0xe4bc[266]](_0x5d2axa[_0xe4bc[506]]),_0x5d2axa[_0xe4bc[505]]=_0x5d2ax14,_0x5d2axa[_0xe4bc[506]]=_0x5d2ax15,_0x5d2axa[_0xe4bc[504]](_0x5d2ax13)};return _0x5d2ax12},getScaleForPageCount:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){if(1>_0x5d2ax2){return 1};_0x5d2ax4=null!=_0x5d2ax4?_0x5d2ax4:mxConstants[_0xe4bc[516]];_0x5d2ax5=null!=_0x5d2ax5?_0x5d2ax5:0;var _0x5d2ax9=_0x5d2ax4[_0xe4bc[117]]-2*_0x5d2ax5;_0x5d2ax4=_0x5d2ax4[_0xe4bc[119]]-2*_0x5d2ax5;_0x5d2ax5=_0x5d2ax3[_0xe4bc[517]]()[_0xe4bc[238]]();_0x5d2ax3=_0x5d2ax3[_0xe4bc[249]]()[_0xe4bc[518]]();_0x5d2ax5[_0xe4bc[117]]/=_0x5d2ax3;_0x5d2ax5[_0xe4bc[119]]/=_0x5d2ax3;_0x5d2ax3=_0x5d2ax5[_0xe4bc[117]];_0x5d2ax4=_0x5d2ax3/_0x5d2ax5[_0xe4bc[119]]/(_0x5d2ax9/_0x5d2ax4);_0x5d2ax5=Math[_0xe4bc[428]](_0x5d2ax2);var _0x5d2axa=Math[_0xe4bc[428]](_0x5d2ax4);_0x5d2ax4=_0x5d2ax5*_0x5d2axa;_0x5d2ax5/=_0x5d2axa;if(1>_0x5d2ax4&&_0x5d2ax5>_0x5d2ax2){var _0x5d2ax12=_0x5d2ax5/_0x5d2ax2;_0x5d2ax5=_0x5d2ax2;_0x5d2ax4/=_0x5d2ax12};1>_0x5d2ax5&&_0x5d2ax4>_0x5d2ax2&&(_0x5d2ax12=_0x5d2ax4/_0x5d2ax2,_0x5d2ax4=_0x5d2ax2,_0x5d2ax5/=_0x5d2ax12);_0x5d2ax12=Math[_0xe4bc[430]](_0x5d2ax4)*Math[_0xe4bc[430]](_0x5d2ax5);for(_0x5d2axa=0;_0x5d2ax12>_0x5d2ax2;){var _0x5d2ax12=Math[_0xe4bc[519]](_0x5d2ax4)/_0x5d2ax4,_0x5d2ax13=Math[_0xe4bc[519]](_0x5d2ax5)/_0x5d2ax5;1==_0x5d2ax12&&(_0x5d2ax12=Math[_0xe4bc[519]](_0x5d2ax4-1)/_0x5d2ax4);1==_0x5d2ax13&&(_0x5d2ax13=Math[_0xe4bc[519]](_0x5d2ax5-1)/_0x5d2ax5);_0x5d2ax12=_0x5d2ax12>_0x5d2ax13?_0x5d2ax12:_0x5d2ax13;_0x5d2ax4*=_0x5d2ax12;_0x5d2ax5*=_0x5d2ax12;_0x5d2ax12=Math[_0xe4bc[430]](_0x5d2ax4)*Math[_0xe4bc[430]](_0x5d2ax5);_0x5d2axa++;if(10<_0x5d2axa){break}};return 0.99999*(_0x5d2ax9*_0x5d2ax4/_0x5d2ax3)},show:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){_0x5d2ax4=null!=_0x5d2ax4?_0x5d2ax4:0;_0x5d2ax5=null!=_0x5d2ax5?_0x5d2ax5:0;null==_0x5d2ax3?_0x5d2ax3=window[_0xe4bc[392]]()[_0xe4bc[395]]:_0x5d2ax3[_0xe4bc[392]]();var _0x5d2ax9=_0x5d2ax2[_0xe4bc[517]]();_0x5d2ax4=-_0x5d2ax9[_0xe4bc[235]]+_0x5d2ax4;_0x5d2ax5=-_0x5d2ax9[_0xe4bc[236]]+_0x5d2ax5;if(mxClient[_0xe4bc[80]]){for(var _0x5d2ax9=_0xe4bc[520],_0x5d2axa=document[_0xe4bc[64]](_0xe4bc[521]),_0x5d2ax12=0;_0x5d2ax12<_0x5d2axa[_0xe4bc[67]];_0x5d2ax12++){_0x5d2ax9+=_0x5d2axa[_0x5d2ax12][_0xe4bc[342]]};_0x5d2ax9+=_0xe4bc[522];for(_0x5d2ax12=0;_0x5d2ax12<document[_0xe4bc[523]][_0xe4bc[67]];_0x5d2ax12++){try{_0x5d2ax9+=document[_0xe4bc[523]](_0x5d2ax12)[_0xe4bc[103]]}catch(h){}};_0x5d2ax9+=_0xe4bc[524];_0x5d2ax9+=_0xe4bc[525];_0x5d2ax9+=_0x5d2ax2[_0xe4bc[526]][_0xe4bc[339]];_0x5d2ax9+=_0xe4bc[527];_0x5d2ax9+=_0xe4bc[528];_0x5d2ax3[_0xe4bc[171]](_0x5d2ax9);_0x5d2ax3[_0xe4bc[268]]();_0x5d2ax2=_0x5d2ax3[_0xe4bc[112]][_0xe4bc[64]](_0xe4bc[529])[0];null!=_0x5d2ax2&&(_0x5d2ax2[_0xe4bc[124]][_0xe4bc[491]]=_0xe4bc[492],_0x5d2ax2[_0xe4bc[124]][_0xe4bc[361]]=_0x5d2ax4+_0xe4bc[168],_0x5d2ax2[_0xe4bc[124]][_0xe4bc[125]]=_0x5d2ax5+_0xe4bc[168])}else {_0x5d2ax3[_0xe4bc[171]](_0xe4bc[530]);_0x5d2ax3[_0xe4bc[171]](_0xe4bc[531]);_0x5d2axa=document[_0xe4bc[64]](_0xe4bc[521]);for(_0x5d2ax12=0;_0x5d2ax12<_0x5d2axa[_0xe4bc[67]];_0x5d2ax12++){_0x5d2ax3[_0xe4bc[171]](mxUtils[_0xe4bc[532]](_0x5d2axa[_0x5d2ax12]))};_0x5d2axa=document[_0xe4bc[64]](_0xe4bc[54]);for(_0x5d2ax12=0;_0x5d2ax12<_0x5d2axa[_0xe4bc[67]];_0x5d2ax12++){_0x5d2ax3[_0xe4bc[171]](mxUtils[_0xe4bc[532]](_0x5d2axa[_0x5d2ax12]))};_0x5d2axa=document[_0xe4bc[64]](_0xe4bc[124]);for(_0x5d2ax12=0;_0x5d2ax12<_0x5d2axa[_0xe4bc[67]];_0x5d2ax12++){_0x5d2ax3[_0xe4bc[171]](mxUtils[_0xe4bc[532]](_0x5d2axa[_0x5d2ax12]))};_0x5d2ax3[_0xe4bc[171]](_0xe4bc[533]);_0x5d2ax3[_0xe4bc[171]](_0xe4bc[534]);_0x5d2ax3[_0xe4bc[268]]();null==_0x5d2ax3[_0xe4bc[112]]&&_0x5d2ax3[_0xe4bc[158]][_0xe4bc[62]](_0x5d2ax3[_0xe4bc[55]](_0xe4bc[112]));_0x5d2ax3[_0xe4bc[112]][_0xe4bc[124]][_0xe4bc[277]]=_0xe4bc[278];for(_0x5d2ax2=_0x5d2ax2[_0xe4bc[526]][_0xe4bc[285]];null!=_0x5d2ax2;){_0x5d2ax12=_0x5d2ax2[_0xe4bc[511]](!0),_0x5d2ax3[_0xe4bc[112]][_0xe4bc[62]](_0x5d2ax12),_0x5d2ax2=_0x5d2ax2[_0xe4bc[287]]};_0x5d2ax2=_0x5d2ax3[_0xe4bc[64]](_0xe4bc[449])[0];null!=_0x5d2ax2&&(_0x5d2ax2[_0xe4bc[57]](_0xe4bc[535],_0xe4bc[536]+_0x5d2ax4+_0xe4bc[537]+_0x5d2ax5+_0xe4bc[460]),_0x5d2ax4=_0x5d2ax2[_0xe4bc[538]],_0x5d2ax4[_0xe4bc[57]](_0xe4bc[117],_0x5d2ax9[_0xe4bc[117]]+Math[_0xe4bc[160]](_0x5d2ax9[_0xe4bc[235]],0)+3),_0x5d2ax4[_0xe4bc[57]](_0xe4bc[119],_0x5d2ax9[_0xe4bc[119]]+Math[_0xe4bc[160]](_0x5d2ax9[_0xe4bc[236]],0)+3))};mxUtils[_0xe4bc[272]](_0x5d2ax3[_0xe4bc[112]]);return _0x5d2ax3},printScreen:function(_0x5d2ax2){var _0x5d2ax3=window[_0xe4bc[392]]();mxUtils[_0xe4bc[539]](_0x5d2ax2,_0x5d2ax3[_0xe4bc[395]]);_0x5d2ax2=function(){_0x5d2ax3[_0xe4bc[393]]();_0x5d2ax3[_0xe4bc[540]]();_0x5d2ax3[_0xe4bc[268]]()};mxClient[_0xe4bc[76]]?_0x5d2ax3[_0xe4bc[261]](_0x5d2ax2,500):_0x5d2ax2()},popup:function(_0x5d2ax2,_0x5d2ax3){if(_0x5d2ax3){var _0x5d2ax4=document[_0xe4bc[55]](_0xe4bc[485]);_0x5d2ax4[_0xe4bc[124]][_0xe4bc[277]]=_0xe4bc[276];_0x5d2ax4[_0xe4bc[124]][_0xe4bc[117]]=_0xe4bc[541];_0x5d2ax4[_0xe4bc[124]][_0xe4bc[119]]=_0xe4bc[542];var _0x5d2ax5=document[_0xe4bc[55]](_0xe4bc[543]);_0x5d2ax5[_0xe4bc[339]]=mxUtils[_0xe4bc[321]](_0x5d2ax2,!1)[_0xe4bc[230]](/\n/g,_0xe4bc[545])[_0xe4bc[230]](/ /g,_0xe4bc[544]);_0x5d2ax4[_0xe4bc[62]](_0x5d2ax5);_0x5d2ax4= new mxWindow(_0xe4bc[546],_0x5d2ax4,document[_0xe4bc[112]][_0xe4bc[159]]/2-320,(document[_0xe4bc[112]][_0xe4bc[157]]||document[_0xe4bc[158]][_0xe4bc[157]])/2-240,640,480,!1,!0);_0x5d2ax4[_0xe4bc[164]](!0);_0x5d2ax4[_0xe4bc[175]](!0)}else {mxClient[_0xe4bc[133]]?(_0x5d2ax4=window[_0xe4bc[392]](),_0x5d2ax4[_0xe4bc[395]][_0xe4bc[171]](_0xe4bc[547]+mxUtils[_0xe4bc[321]](_0x5d2ax2)+_0xe4bc[548]),_0x5d2ax4[_0xe4bc[395]][_0xe4bc[268]]()):(_0x5d2ax4=window[_0xe4bc[392]](),_0x5d2ax5=_0x5d2ax4[_0xe4bc[395]][_0xe4bc[55]](_0xe4bc[543]),_0x5d2ax5[_0xe4bc[339]]=mxUtils[_0xe4bc[321]](_0x5d2ax2,!1)[_0xe4bc[230]](/\n/g,_0xe4bc[545])[_0xe4bc[230]](/ /g,_0xe4bc[544]),_0x5d2ax4[_0xe4bc[395]][_0xe4bc[112]][_0xe4bc[62]](_0x5d2ax5))}},alert:function(_0x5d2ax2){alert(_0x5d2ax2)},prompt:function(_0x5d2ax2,_0x5d2ax3){return prompt(_0x5d2ax2,_0x5d2ax3)},confirm:function(_0x5d2ax2){return confirm(_0x5d2ax2)},error:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){var _0x5d2ax9=document[_0xe4bc[55]](_0xe4bc[485]);_0x5d2ax9[_0xe4bc[124]][_0xe4bc[549]]=_0xe4bc[550];var _0x5d2axa=document[_0xe4bc[55]](_0xe4bc[466]);_0x5d2axa[_0xe4bc[57]](_0xe4bc[390],_0x5d2ax5||mxUtils[_0xe4bc[551]]);_0x5d2axa[_0xe4bc[57]](_0xe4bc[552],_0xe4bc[553]);_0x5d2axa[_0xe4bc[124]][_0xe4bc[123]]=_0xe4bc[554];_0x5d2ax9[_0xe4bc[62]](_0x5d2axa);_0x5d2ax9[_0xe4bc[62]](document[_0xe4bc[344]](_0xe4bc[555]));_0x5d2ax9[_0xe4bc[62]](document[_0xe4bc[344]](_0xe4bc[555]));_0x5d2ax9[_0xe4bc[62]](document[_0xe4bc[344]](_0xe4bc[555]));mxUtils[_0xe4bc[53]](_0x5d2ax9,_0x5d2ax2);_0x5d2ax2=document[_0xe4bc[112]][_0xe4bc[159]];_0x5d2ax5=document[_0xe4bc[112]][_0xe4bc[157]]||document[_0xe4bc[158]][_0xe4bc[157]];var _0x5d2ax12= new mxWindow(mxResources[_0xe4bc[203]](mxUtils[_0xe4bc[556]])||mxUtils[_0xe4bc[556]],_0x5d2ax9,(_0x5d2ax2-_0x5d2ax3)/2,_0x5d2ax5/4,_0x5d2ax3,null,!1,!0);_0x5d2ax4&&(mxUtils[_0xe4bc[345]](_0x5d2ax9),_0x5d2ax3=document[_0xe4bc[55]](_0xe4bc[346]),_0x5d2ax4=document[_0xe4bc[55]](_0xe4bc[172]),mxClient[_0xe4bc[80]]?_0x5d2ax4[_0xe4bc[124]][_0xe4bc[103]]=_0xe4bc[557]:_0x5d2ax4[_0xe4bc[57]](_0xe4bc[124],_0xe4bc[557]),mxEvent[_0xe4bc[169]](_0x5d2ax4,_0xe4bc[173],function(_0x5d2ax2){_0x5d2ax12[_0xe4bc[515]]()}),mxUtils[_0xe4bc[53]](_0x5d2ax4,mxResources[_0xe4bc[203]](mxUtils[_0xe4bc[558]])||mxUtils[_0xe4bc[558]]),_0x5d2ax3[_0xe4bc[62]](_0x5d2ax4),_0x5d2ax9[_0xe4bc[62]](_0x5d2ax3),mxUtils[_0xe4bc[345]](_0x5d2ax9),_0x5d2ax12[_0xe4bc[164]](!0));_0x5d2ax12[_0xe4bc[175]](!0);return _0x5d2ax12},makeDraggable:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa,_0x5d2ax12,_0x5d2ax13,_0x5d2ax14,_0x5d2ax15){_0x5d2ax2= new mxDragSource(_0x5d2ax2,_0x5d2ax4);_0x5d2ax2[_0xe4bc[559]]= new mxPoint(null!=_0x5d2ax9?_0x5d2ax9:0,null!=_0x5d2axa?_0x5d2axa:mxConstants[_0xe4bc[560]]);_0x5d2ax2[_0xe4bc[561]]=_0x5d2ax12;_0x5d2ax2[_0xe4bc[562]](!1);null!=_0x5d2ax14&&(_0x5d2ax2[_0xe4bc[563]]=_0x5d2ax14);null!=_0x5d2ax15&&(_0x5d2ax2[_0xe4bc[564]]=_0x5d2ax15);_0x5d2ax2[_0xe4bc[565]]=function(_0x5d2ax2){return _0xe4bc[279]== typeof _0x5d2ax3?_0x5d2ax3(_0x5d2ax2):_0x5d2ax3};null!=_0x5d2ax5&&(_0x5d2ax2[_0xe4bc[566]]=function(){return _0x5d2ax5[_0xe4bc[511]](!0)},_0x5d2ax13&&(_0x5d2ax2[_0xe4bc[567]]=function(_0x5d2ax2){var _0x5d2ax3=_0x5d2ax5[_0xe4bc[511]](!0),_0x5d2ax4=parseInt(_0x5d2ax3[_0xe4bc[124]][_0xe4bc[117]]),_0x5d2ax9=parseInt(_0x5d2ax3[_0xe4bc[124]][_0xe4bc[119]]);_0x5d2ax3[_0xe4bc[124]][_0xe4bc[117]]=Math[_0xe4bc[488]](_0x5d2ax4*_0x5d2ax2[_0xe4bc[441]][_0xe4bc[255]])+_0xe4bc[168];_0x5d2ax3[_0xe4bc[124]][_0xe4bc[119]]=Math[_0xe4bc[488]](_0x5d2ax9*_0x5d2ax2[_0xe4bc[441]][_0xe4bc[255]])+_0xe4bc[168];return _0x5d2ax3}));return _0x5d2ax2}},mxConstants={DEFAULT_HOTSPOT:0.3,MIN_HOTSPOT_SIZE:8,MAX_HOTSPOT_SIZE:0,RENDERING_HINT_EXACT:_0xe4bc[568],RENDERING_HINT_FASTER:_0xe4bc[569],RENDERING_HINT_FASTEST:_0xe4bc[570],DIALECT_SVG:_0xe4bc[571],DIALECT_VML:_0xe4bc[572],DIALECT_MIXEDHTML:_0xe4bc[573],DIALECT_PREFERHTML:_0xe4bc[574],DIALECT_STRICTHTML:_0xe4bc[575],NS_SVG:_0xe4bc[576],NS_XHTML:_0xe4bc[577],NS_XLINK:_0xe4bc[578],SHADOWCOLOR:_0xe4bc[579],SHADOW_OFFSET_X:2,SHADOW_OFFSET_Y:3,SHADOW_OPACITY:1,NODETYPE_ELEMENT:1,NODETYPE_ATTRIBUTE:2,NODETYPE_TEXT:3,NODETYPE_CDATA:4,NODETYPE_ENTITY_REFERENCE:5,NODETYPE_ENTITY:6,NODETYPE_PROCESSING_INSTRUCTION:7,NODETYPE_COMMENT:8,NODETYPE_DOCUMENT:9,NODETYPE_DOCUMENTTYPE:10,NODETYPE_DOCUMENT_FRAGMENT:11,NODETYPE_NOTATION:12,TOOLTIP_VERTICAL_OFFSET:16,DEFAULT_VALID_COLOR:_0xe4bc[580],DEFAULT_INVALID_COLOR:_0xe4bc[581],HIGHLIGHT_STROKEWIDTH:3,CURSOR_MOVABLE_VERTEX:_0xe4bc[582],CURSOR_MOVABLE_EDGE:_0xe4bc[582],CURSOR_LABEL_HANDLE:_0xe4bc[583],CURSOR_BEND_HANDLE:_0xe4bc[356],CURSOR_CONNECT:_0xe4bc[356],HIGHLIGHT_COLOR:_0xe4bc[580],CONNECT_TARGET_COLOR:_0xe4bc[584],INVALID_CONNECT_TARGET_COLOR:_0xe4bc[581],DROP_TARGET_COLOR:_0xe4bc[584],VALID_COLOR:_0xe4bc[580],INVALID_COLOR:_0xe4bc[581],EDGE_SELECTION_COLOR:_0xe4bc[580],VERTEX_SELECTION_COLOR:_0xe4bc[580],VERTEX_SELECTION_STROKEWIDTH:1,EDGE_SELECTION_STROKEWIDTH:1,VERTEX_SELECTION_DASHED:!0,EDGE_SELECTION_DASHED:!0,GUIDE_COLOR:_0xe4bc[581],GUIDE_STROKEWIDTH:1,OUTLINE_COLOR:_0xe4bc[585],OUTLINE_STROKEWIDTH:mxClient[_0xe4bc[80]]?2:3,HANDLE_SIZE:7,LABEL_HANDLE_SIZE:4,HANDLE_FILLCOLOR:_0xe4bc[580],HANDLE_STROKECOLOR:_0xe4bc[586],LABEL_HANDLE_FILLCOLOR:_0xe4bc[587],CONNECT_HANDLE_FILLCOLOR:_0xe4bc[584],LOCKED_HANDLE_FILLCOLOR:_0xe4bc[581],OUTLINE_HANDLE_FILLCOLOR:_0xe4bc[588],OUTLINE_HANDLE_STROKECOLOR:_0xe4bc[589],DEFAULT_FONTFAMILY:_0xe4bc[590],DEFAULT_FONTSIZE:11,LINE_HEIGHT:1.2,DEFAULT_FONTSTYLE:0,DEFAULT_STARTSIZE:40,DEFAULT_MARKERSIZE:6,DEFAULT_IMAGESIZE:24,ENTITY_SEGMENT:30,RECTANGLE_ROUNDING_FACTOR:0.15,LINE_ARCSIZE:20,ARROW_SPACING:10,ARROW_WIDTH:30,ARROW_SIZE:30,PAGE_FORMAT_A4_PORTRAIT: new mxRectangle(0,0,826,1169),PAGE_FORMAT_A4_LANDSCAPE: new mxRectangle(0,0,1169,826),PAGE_FORMAT_LETTER_PORTRAIT: new mxRectangle(0,0,850,1100),PAGE_FORMAT_LETTER_LANDSCAPE: new mxRectangle(0,0,1100,850),NONE:_0xe4bc[130],STYLE_PERIMETER:_0xe4bc[591],STYLE_SOURCE_PORT:_0xe4bc[592],STYLE_TARGET_PORT:_0xe4bc[593],STYLE_PORT_CONSTRAINT:_0xe4bc[594],STYLE_OPACITY:_0xe4bc[461],STYLE_TEXT_OPACITY:_0xe4bc[595],STYLE_OVERFLOW:_0xe4bc[277],STYLE_ORTHOGONAL:_0xe4bc[596],STYLE_EXIT_X:_0xe4bc[597],STYLE_EXIT_Y:_0xe4bc[598],STYLE_EXIT_PERIMETER:_0xe4bc[599],STYLE_ENTRY_X:_0xe4bc[600],STYLE_ENTRY_Y:_0xe4bc[601],STYLE_ENTRY_PERIMETER:_0xe4bc[602],STYLE_WHITE_SPACE:_0xe4bc[493],STYLE_ROTATION:_0xe4bc[603],STYLE_FILLCOLOR:_0xe4bc[604],STYLE_SWIMLANE_FILLCOLOR:_0xe4bc[605],STYLE_GRADIENTCOLOR:_0xe4bc[606],STYLE_GRADIENT_DIRECTION:_0xe4bc[607],STYLE_STROKECOLOR:_0xe4bc[608],STYLE_SEPARATORCOLOR:_0xe4bc[609],STYLE_STROKEWIDTH:_0xe4bc[610],STYLE_ALIGN:_0xe4bc[611],STYLE_VERTICAL_ALIGN:_0xe4bc[123],STYLE_LABEL_POSITION:_0xe4bc[612],STYLE_VERTICAL_LABEL_POSITION:_0xe4bc[613],STYLE_IMAGE_ASPECT:_0xe4bc[614],STYLE_IMAGE_ALIGN:_0xe4bc[615],STYLE_IMAGE_VERTICAL_ALIGN:_0xe4bc[616],STYLE_GLASS:_0xe4bc[617],STYLE_IMAGE:_0xe4bc[618],STYLE_IMAGE_WIDTH:_0xe4bc[619],STYLE_IMAGE_HEIGHT:_0xe4bc[620],STYLE_IMAGE_BACKGROUND:_0xe4bc[621],STYLE_IMAGE_BORDER:_0xe4bc[622],STYLE_FLIPH:_0xe4bc[623],STYLE_FLIPV:_0xe4bc[624],STYLE_NOLABEL:_0xe4bc[625],STYLE_NOEDGESTYLE:_0xe4bc[626],STYLE_LABEL_BACKGROUNDCOLOR:_0xe4bc[627],STYLE_LABEL_BORDERCOLOR:_0xe4bc[628],STYLE_LABEL_PADDING:_0xe4bc[629],STYLE_INDICATOR_SHAPE:_0xe4bc[630],STYLE_INDICATOR_IMAGE:_0xe4bc[631],STYLE_INDICATOR_COLOR:_0xe4bc[632],STYLE_INDICATOR_STROKECOLOR:_0xe4bc[633],STYLE_INDICATOR_GRADIENTCOLOR:_0xe4bc[634],STYLE_INDICATOR_SPACING:_0xe4bc[635],STYLE_INDICATOR_WIDTH:_0xe4bc[636],STYLE_INDICATOR_HEIGHT:_0xe4bc[637],STYLE_INDICATOR_DIRECTION:_0xe4bc[638],STYLE_SHADOW:_0xe4bc[639],STYLE_SEGMENT:_0xe4bc[640],STYLE_ENDARROW:_0xe4bc[641],STYLE_STARTARROW:_0xe4bc[642],STYLE_ENDSIZE:_0xe4bc[643],STYLE_STARTSIZE:_0xe4bc[644],STYLE_SWIMLANE_LINE:_0xe4bc[645],STYLE_ENDFILL:_0xe4bc[646],STYLE_STARTFILL:_0xe4bc[647],STYLE_DASHED:_0xe4bc[648],STYLE_DASH_PATTERN:_0xe4bc[649],STYLE_ROUNDED:_0xe4bc[650],STYLE_CURVED:_0xe4bc[651],STYLE_ARCSIZE:_0xe4bc[652],STYLE_SMOOTH:_0xe4bc[653],STYLE_SOURCE_PERIMETER_SPACING:_0xe4bc[654],STYLE_TARGET_PERIMETER_SPACING:_0xe4bc[655],STYLE_PERIMETER_SPACING:_0xe4bc[656],STYLE_SPACING:_0xe4bc[657],STYLE_SPACING_TOP:_0xe4bc[658],STYLE_SPACING_LEFT:_0xe4bc[659],STYLE_SPACING_BOTTOM:_0xe4bc[660],STYLE_SPACING_RIGHT:_0xe4bc[661],STYLE_HORIZONTAL:_0xe4bc[662],STYLE_DIRECTION:_0xe4bc[663],STYLE_ELBOW:_0xe4bc[664],STYLE_FONTCOLOR:_0xe4bc[665],STYLE_FONTFAMILY:_0xe4bc[486],STYLE_FONTSIZE:_0xe4bc[487],STYLE_FONTSTYLE:_0xe4bc[666],STYLE_AUTOSIZE:_0xe4bc[667],STYLE_FOLDABLE:_0xe4bc[668],STYLE_EDITABLE:_0xe4bc[669],STYLE_BENDABLE:_0xe4bc[670],STYLE_MOVABLE:_0xe4bc[671],STYLE_RESIZABLE:_0xe4bc[672],STYLE_CLONEABLE:_0xe4bc[673],STYLE_DELETABLE:_0xe4bc[674],STYLE_SHAPE:_0xe4bc[253],STYLE_EDGE:_0xe4bc[675],STYLE_LOOP:_0xe4bc[676],STYLE_ROUTING_CENTER_X:_0xe4bc[677],STYLE_ROUTING_CENTER_Y:_0xe4bc[678],FONT_BOLD:1,FONT_ITALIC:2,FONT_UNDERLINE:4,FONT_SHADOW:8,SHAPE_RECTANGLE:_0xe4bc[679],SHAPE_ELLIPSE:_0xe4bc[680],SHAPE_DOUBLE_ELLIPSE:_0xe4bc[681],SHAPE_RHOMBUS:_0xe4bc[682],SHAPE_LINE:_0xe4bc[683],SHAPE_IMAGE:_0xe4bc[618],SHAPE_ARROW:_0xe4bc[684],SHAPE_LABEL:_0xe4bc[685],SHAPE_CYLINDER:_0xe4bc[686],SHAPE_SWIMLANE:_0xe4bc[687],SHAPE_CONNECTOR:_0xe4bc[688],SHAPE_ACTOR:_0xe4bc[689],SHAPE_CLOUD:_0xe4bc[690],SHAPE_TRIANGLE:_0xe4bc[691],SHAPE_HEXAGON:_0xe4bc[692],ARROW_CLASSIC:_0xe4bc[693],ARROW_BLOCK:_0xe4bc[694],ARROW_OPEN:_0xe4bc[392],ARROW_OVAL:_0xe4bc[695],ARROW_DIAMOND:_0xe4bc[696],ARROW_DIAMOND_THIN:_0xe4bc[697],ALIGN_LEFT:_0xe4bc[361],ALIGN_CENTER:_0xe4bc[698],ALIGN_RIGHT:_0xe4bc[699],ALIGN_TOP:_0xe4bc[125],ALIGN_MIDDLE:_0xe4bc[554],ALIGN_BOTTOM:_0xe4bc[553],DIRECTION_NORTH:_0xe4bc[700],DIRECTION_SOUTH:_0xe4bc[701],DIRECTION_EAST:_0xe4bc[702],DIRECTION_WEST:_0xe4bc[703],DIRECTION_MASK_NONE:0,DIRECTION_MASK_WEST:1,DIRECTION_MASK_NORTH:2,DIRECTION_MASK_SOUTH:4,DIRECTION_MASK_EAST:8,DIRECTION_MASK_ALL:15,ELBOW_VERTICAL:_0xe4bc[704],ELBOW_HORIZONTAL:_0xe4bc[662],EDGESTYLE_ELBOW:_0xe4bc[705],EDGESTYLE_ENTITY_RELATION:_0xe4bc[706],EDGESTYLE_LOOP:_0xe4bc[707],EDGESTYLE_SIDETOSIDE:_0xe4bc[708],EDGESTYLE_TOPTOBOTTOM:_0xe4bc[709],EDGESTYLE_ORTHOGONAL:_0xe4bc[710],EDGESTYLE_SEGMENT:_0xe4bc[711],PERIMETER_ELLIPSE:_0xe4bc[712],PERIMETER_RECTANGLE:_0xe4bc[713],PERIMETER_RHOMBUS:_0xe4bc[714],PERIMETER_TRIANGLE:_0xe4bc[715]};function mxEventObject(_0x5d2ax2){this[_0xe4bc[298]]=_0x5d2ax2;this[_0xe4bc[716]]=[];for(var _0x5d2ax3=1;_0x5d2ax3<arguments[_0xe4bc[67]];_0x5d2ax3+=2){null!=arguments[_0x5d2ax3+1]&&(this[_0xe4bc[716]][arguments[_0x5d2ax3]]=arguments[_0x5d2ax3+1])}}mxEventObject[_0xe4bc[202]][_0xe4bc[298]]=null;mxEventObject[_0xe4bc[202]][_0xe4bc[716]]=null;mxEventObject[_0xe4bc[202]][_0xe4bc[717]]= !1;mxEventObject[_0xe4bc[202]][_0xe4bc[718]]=function(){return this[_0xe4bc[298]]};mxEventObject[_0xe4bc[202]][_0xe4bc[719]]=function(){return this[_0xe4bc[716]]};mxEventObject[_0xe4bc[202]][_0xe4bc[720]]=function(_0x5d2ax2){return this[_0xe4bc[716]][_0x5d2ax2]};mxEventObject[_0xe4bc[202]][_0xe4bc[721]]=function(){return this[_0xe4bc[717]]};mxEventObject[_0xe4bc[202]][_0xe4bc[722]]=function(){this[_0xe4bc[717]]= !0};function mxMouseEvent(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[723]]=_0x5d2ax2;this[_0xe4bc[724]]=_0x5d2ax3}mxMouseEvent[_0xe4bc[202]][_0xe4bc[717]]= !1;mxMouseEvent[_0xe4bc[202]][_0xe4bc[723]]=null;mxMouseEvent[_0xe4bc[202]][_0xe4bc[725]]=null;mxMouseEvent[_0xe4bc[202]][_0xe4bc[726]]=null;mxMouseEvent[_0xe4bc[202]][_0xe4bc[724]]=null;mxMouseEvent[_0xe4bc[202]][_0xe4bc[727]]=function(){return this[_0xe4bc[723]]};mxMouseEvent[_0xe4bc[202]][_0xe4bc[728]]=function(){return mxEvent[_0xe4bc[728]](this[_0xe4bc[723]])};mxMouseEvent[_0xe4bc[202]][_0xe4bc[729]]=function(_0x5d2ax2){if(null!=_0x5d2ax2){for(var _0x5d2ax3=this[_0xe4bc[728]]();null!=_0x5d2ax3;){if(_0x5d2ax3==_0x5d2ax2[_0xe4bc[252]]){return !0};_0x5d2ax3=_0x5d2ax3[_0xe4bc[265]]}};return !1};mxMouseEvent[_0xe4bc[202]][_0xe4bc[730]]=function(){return mxEvent[_0xe4bc[731]](this[_0xe4bc[727]]())};mxMouseEvent[_0xe4bc[202]][_0xe4bc[732]]=function(){return mxEvent[_0xe4bc[733]](this[_0xe4bc[727]]())};mxMouseEvent[_0xe4bc[202]][_0xe4bc[734]]=function(){return this[_0xe4bc[725]]};mxMouseEvent[_0xe4bc[202]][_0xe4bc[735]]=function(){return this[_0xe4bc[726]]};mxMouseEvent[_0xe4bc[202]][_0xe4bc[248]]=function(){return this[_0xe4bc[724]]};mxMouseEvent[_0xe4bc[202]][_0xe4bc[736]]=function(){var _0x5d2ax2=this[_0xe4bc[248]]();return null!=_0x5d2ax2?_0x5d2ax2[_0xe4bc[246]]:null};mxMouseEvent[_0xe4bc[202]][_0xe4bc[737]]=function(){return mxEvent[_0xe4bc[737]](this[_0xe4bc[727]]())};mxMouseEvent[_0xe4bc[202]][_0xe4bc[721]]=function(){return this[_0xe4bc[717]]};mxMouseEvent[_0xe4bc[202]][_0xe4bc[722]]=function(_0x5d2ax2){(null!=_0x5d2ax2?_0x5d2ax2:1)&&this[_0xe4bc[723]][_0xe4bc[738]]&&this[_0xe4bc[723]][_0xe4bc[738]]();this[_0xe4bc[723]][_0xe4bc[739]]= !1;this[_0xe4bc[717]]= !0};function mxEventSource(_0x5d2ax2){this[_0xe4bc[740]](_0x5d2ax2)}mxEventSource[_0xe4bc[202]][_0xe4bc[741]]=null;mxEventSource[_0xe4bc[202]][_0xe4bc[742]]= !0;mxEventSource[_0xe4bc[202]][_0xe4bc[743]]=null;mxEventSource[_0xe4bc[202]][_0xe4bc[503]]=function(){return this[_0xe4bc[742]]};mxEventSource[_0xe4bc[202]][_0xe4bc[504]]=function(_0x5d2ax2){this[_0xe4bc[742]]=_0x5d2ax2};mxEventSource[_0xe4bc[202]][_0xe4bc[744]]=function(){return this[_0xe4bc[743]]};mxEventSource[_0xe4bc[202]][_0xe4bc[740]]=function(_0x5d2ax2){this[_0xe4bc[743]]=_0x5d2ax2};mxEventSource[_0xe4bc[202]][_0xe4bc[169]]=function(_0x5d2ax2,_0x5d2ax3){null==this[_0xe4bc[741]]&&(this[_0xe4bc[741]]=[]);this[_0xe4bc[741]][_0xe4bc[207]](_0x5d2ax2);this[_0xe4bc[741]][_0xe4bc[207]](_0x5d2ax3)};mxEventSource[_0xe4bc[202]][_0xe4bc[745]]=function(_0x5d2ax2){if(null!=this[_0xe4bc[741]]){for(var _0x5d2ax3=0;_0x5d2ax3<this[_0xe4bc[741]][_0xe4bc[67]];){this[_0xe4bc[741]][_0x5d2ax3+1]==_0x5d2ax2?this[_0xe4bc[741]][_0xe4bc[300]](_0x5d2ax3,2):_0x5d2ax3+=2}}};mxEventSource[_0xe4bc[202]][_0xe4bc[746]]=function(_0x5d2ax2,_0x5d2ax3){if(null!=this[_0xe4bc[741]]&&this[_0xe4bc[503]]()){null==_0x5d2ax2&&(_0x5d2ax2= new mxEventObject);null==_0x5d2ax3&&(_0x5d2ax3=this[_0xe4bc[744]]());null==_0x5d2ax3&&(_0x5d2ax3=this);for(var _0x5d2ax4=[_0x5d2ax3,_0x5d2ax2],_0x5d2ax5=0;_0x5d2ax5<this[_0xe4bc[741]][_0xe4bc[67]];_0x5d2ax5+=2){var _0x5d2ax9=this[_0xe4bc[741]][_0x5d2ax5];(null==_0x5d2ax9||_0x5d2ax9==_0x5d2ax2[_0xe4bc[718]]())&&this[_0xe4bc[741]][_0x5d2ax5+1][_0xe4bc[183]](this,_0x5d2ax4)}}};var mxEvent={objects:[],addListener:function(){var _0x5d2ax2=function(_0x5d2ax2,_0x5d2ax4,_0x5d2ax5){null==_0x5d2ax2[_0xe4bc[69]]&&(_0x5d2ax2[_0xe4bc[69]]=[],mxEvent[_0xe4bc[68]][_0xe4bc[207]](_0x5d2ax2));_0x5d2ax2[_0xe4bc[69]][_0xe4bc[207]]({name:_0x5d2ax4,f:_0x5d2ax5})};return window[_0xe4bc[418]]?function(_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){_0x5d2ax3[_0xe4bc[418]](_0x5d2ax4,_0x5d2ax5,!1);_0x5d2ax2(_0x5d2ax3,_0x5d2ax4,_0x5d2ax5)}:function(_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){_0x5d2ax3[_0xe4bc[108]](_0xe4bc[747]+_0x5d2ax4,_0x5d2ax5);_0x5d2ax2(_0x5d2ax3,_0x5d2ax4,_0x5d2ax5)}}(),removeListener:function(){var _0x5d2ax2=function(_0x5d2ax2,_0x5d2ax4,_0x5d2ax5){if(null!=_0x5d2ax2[_0xe4bc[69]]){_0x5d2ax4=_0x5d2ax2[_0xe4bc[69]][_0xe4bc[67]];for(var _0x5d2ax9=0;_0x5d2ax9<_0x5d2ax4;_0x5d2ax9++){if(_0x5d2ax2[_0xe4bc[69]][_0x5d2ax9][_0xe4bc[748]]==_0x5d2ax5){_0x5d2ax2[_0xe4bc[69]][_0xe4bc[300]](_0x5d2ax9,1);break}};0==_0x5d2ax2[_0xe4bc[69]][_0xe4bc[67]]&&(_0x5d2ax2[_0xe4bc[69]]=null)}};return window[_0xe4bc[749]]?function(_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){_0x5d2ax3[_0xe4bc[749]](_0x5d2ax4,_0x5d2ax5,!1);_0x5d2ax2(_0x5d2ax3,_0x5d2ax4,_0x5d2ax5)}:function(_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){_0x5d2ax3[_0xe4bc[750]](_0xe4bc[747]+_0x5d2ax4,_0x5d2ax5);_0x5d2ax2(_0x5d2ax3,_0x5d2ax4,_0x5d2ax5)}}(),removeAllListeners:function(_0x5d2ax2){var _0x5d2ax3=_0x5d2ax2[_0xe4bc[69]];if(null!=_0x5d2ax3){for(;0<_0x5d2ax3[_0xe4bc[67]];){var _0x5d2ax4=_0x5d2ax3[0];mxEvent[_0xe4bc[745]](_0x5d2ax2,_0x5d2ax4[_0xe4bc[298]],_0x5d2ax4[_0xe4bc[748]])}}},addGestureListeners:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){null!=_0x5d2ax3&&mxEvent[_0xe4bc[169]](_0x5d2ax2,_0xe4bc[751],_0x5d2ax3);null!=_0x5d2ax4&&mxEvent[_0xe4bc[169]](_0x5d2ax2,_0xe4bc[752],_0x5d2ax4);null!=_0x5d2ax5&&mxEvent[_0xe4bc[169]](_0x5d2ax2,_0xe4bc[753],_0x5d2ax5);mxClient[_0xe4bc[754]]&&(null!=_0x5d2ax3&&mxEvent[_0xe4bc[169]](_0x5d2ax2,_0xe4bc[755],_0x5d2ax3),null!=_0x5d2ax4&&mxEvent[_0xe4bc[169]](_0x5d2ax2,_0xe4bc[756],_0x5d2ax4),null!=_0x5d2ax5&&mxEvent[_0xe4bc[169]](_0x5d2ax2,_0xe4bc[757],_0x5d2ax5))},removeGestureListeners:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){null!=_0x5d2ax3&&mxEvent[_0xe4bc[745]](_0x5d2ax2,_0xe4bc[751],_0x5d2ax3);null!=_0x5d2ax4&&mxEvent[_0xe4bc[745]](_0x5d2ax2,_0xe4bc[752],_0x5d2ax4);null!=_0x5d2ax5&&mxEvent[_0xe4bc[745]](_0x5d2ax2,_0xe4bc[753],_0x5d2ax5);mxClient[_0xe4bc[754]]&&(null!=_0x5d2ax3&&mxEvent[_0xe4bc[745]](_0x5d2ax2,_0xe4bc[755],_0x5d2ax3),null!=_0x5d2ax4&&mxEvent[_0xe4bc[745]](_0x5d2ax2,_0xe4bc[756],_0x5d2ax4),null!=_0x5d2ax5&&mxEvent[_0xe4bc[745]](_0x5d2ax2,_0xe4bc[757],_0x5d2ax5))},redirectMouseEvents:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa,_0x5d2ax12){var _0x5d2ax13=function(_0x5d2ax2){return _0xe4bc[279]== typeof _0x5d2ax4?_0x5d2ax4(_0x5d2ax2):_0x5d2ax4};mxEvent[_0xe4bc[759]](_0x5d2ax2,function(_0x5d2ax2){null!=_0x5d2ax5?_0x5d2ax5(_0x5d2ax2):mxEvent[_0xe4bc[721]](_0x5d2ax2)||_0x5d2ax3[_0xe4bc[758]](mxEvent.MOUSE_DOWN, new mxMouseEvent(_0x5d2ax2,_0x5d2ax13(_0x5d2ax2)))},function(_0x5d2ax2){null!=_0x5d2ax9?_0x5d2ax9(_0x5d2ax2):mxEvent[_0xe4bc[721]](_0x5d2ax2)||_0x5d2ax3[_0xe4bc[758]](mxEvent.MOUSE_MOVE, new mxMouseEvent(_0x5d2ax2,_0x5d2ax13(_0x5d2ax2)))},function(_0x5d2ax2){null!=_0x5d2axa?_0x5d2axa(_0x5d2ax2):mxEvent[_0xe4bc[721]](_0x5d2ax2)||_0x5d2ax3[_0xe4bc[758]](mxEvent.MOUSE_UP, new mxMouseEvent(_0x5d2ax2,_0x5d2ax13(_0x5d2ax2)))});mxEvent[_0xe4bc[169]](_0x5d2ax2,_0xe4bc[760],function(_0x5d2ax2){if(null!=_0x5d2ax12){_0x5d2ax12(_0x5d2ax2)}else {if(!mxEvent[_0xe4bc[721]](_0x5d2ax2)){var _0x5d2ax4=_0x5d2ax13(_0x5d2ax2);_0x5d2ax3[_0xe4bc[761]](_0x5d2ax2,null!=_0x5d2ax4?_0x5d2ax4[_0xe4bc[246]]:null)}}})},release:function(_0x5d2ax2){if(null!=_0x5d2ax2&&(mxEvent[_0xe4bc[70]](_0x5d2ax2),_0x5d2ax2=_0x5d2ax2[_0xe4bc[271]],null!=_0x5d2ax2)){for(var _0x5d2ax3=_0x5d2ax2[_0xe4bc[67]],_0x5d2ax4=0;_0x5d2ax4<_0x5d2ax3;_0x5d2ax4+=1){mxEvent[_0xe4bc[762]](_0x5d2ax2[_0x5d2ax4])}}},addMouseWheelListener:function(_0x5d2ax2){if(null!=_0x5d2ax2){var _0x5d2ax3=function(_0x5d2ax3){null==_0x5d2ax3&&(_0x5d2ax3=window[_0xe4bc[763]]);var _0x5d2ax5=0,_0x5d2ax5=mxClient[_0xe4bc[133]]&&!mxClient[_0xe4bc[75]]&&!mxClient[_0xe4bc[76]]?-_0x5d2ax3[_0xe4bc[764]]/2:_0x5d2ax3[_0xe4bc[765]]/120;0!=_0x5d2ax5&&_0x5d2ax2(_0x5d2ax3,0<_0x5d2ax5)};mxClient[_0xe4bc[133]]?mxEvent[_0xe4bc[169]](window,mxClient[_0xe4bc[75]]||mxClient[_0xe4bc[76]]?_0xe4bc[766]:_0xe4bc[767],_0x5d2ax3):mxEvent[_0xe4bc[169]](document,_0xe4bc[766],_0x5d2ax3)}},disableContextMenu:function(){return mxClient[_0xe4bc[80]]&&(_0xe4bc[82]=== typeof document[_0xe4bc[5]]||9>document[_0xe4bc[5]])?function(_0x5d2ax2){mxEvent[_0xe4bc[169]](_0x5d2ax2,_0xe4bc[768],function(){return !1})}:function(_0x5d2ax2){_0x5d2ax2[_0xe4bc[57]](_0xe4bc[769],_0xe4bc[770])}}(),getSource:function(_0x5d2ax2){return null!=_0x5d2ax2[_0xe4bc[771]]?_0x5d2ax2[_0xe4bc[771]]:_0x5d2ax2[_0xe4bc[772]]},isConsumed:function(_0x5d2ax2){return null!=_0x5d2ax2[_0xe4bc[721]]&&_0x5d2ax2[_0xe4bc[721]]},isLeftMouseButton:function(_0x5d2ax2){return _0x5d2ax2[_0xe4bc[172]]==(mxClient[_0xe4bc[80]]&&(_0xe4bc[82]=== typeof document[_0xe4bc[5]]||9>document[_0xe4bc[5]])?1:0)},isRightMouseButton:function(_0x5d2ax2){return 2==_0x5d2ax2[_0xe4bc[172]]},isPopupTrigger:function(_0x5d2ax2){return mxEvent[_0xe4bc[773]](_0x5d2ax2)||mxEvent[_0xe4bc[774]](_0x5d2ax2)&&!mxEvent[_0xe4bc[775]](_0x5d2ax2)},isShiftDown:function(_0x5d2ax2){return null!=_0x5d2ax2?_0x5d2ax2[_0xe4bc[776]]:!1},isAltDown:function(_0x5d2ax2){return null!=_0x5d2ax2?_0x5d2ax2[_0xe4bc[777]]:!1},isControlDown:function(_0x5d2ax2){return null!=_0x5d2ax2?_0x5d2ax2[_0xe4bc[778]]:!1},isMetaDown:function(_0x5d2ax2){return null!=_0x5d2ax2?_0x5d2ax2[_0xe4bc[779]]:!1},getMainEvent:function(_0x5d2ax2){(_0xe4bc[755]==_0x5d2ax2[_0xe4bc[60]]||_0xe4bc[756]==_0x5d2ax2[_0xe4bc[60]])&&null!=_0x5d2ax2[_0xe4bc[780]]&&null!=_0x5d2ax2[_0xe4bc[780]][0]?_0x5d2ax2=_0x5d2ax2[_0xe4bc[780]][0]:_0xe4bc[757]==_0x5d2ax2[_0xe4bc[60]]&&(null!=_0x5d2ax2[_0xe4bc[781]]&&null!=_0x5d2ax2[_0xe4bc[781]][0])&&(_0x5d2ax2=_0x5d2ax2[_0xe4bc[781]][0]);return _0x5d2ax2},getClientX:function(_0x5d2ax2){return mxEvent[_0xe4bc[783]](_0x5d2ax2)[_0xe4bc[782]]},getClientY:function(_0x5d2ax2){return mxEvent[_0xe4bc[783]](_0x5d2ax2)[_0xe4bc[784]]},consume:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){_0x5d2ax4=null!=_0x5d2ax4?_0x5d2ax4:!0;if(null!=_0x5d2ax3?_0x5d2ax3:1){_0x5d2ax2[_0xe4bc[738]]?(_0x5d2ax4&&_0x5d2ax2[_0xe4bc[785]](),_0x5d2ax2[_0xe4bc[738]]()):_0x5d2ax4&&(_0x5d2ax2[_0xe4bc[786]]= !0)};_0x5d2ax2[_0xe4bc[721]]= !0;_0x5d2ax2[_0xe4bc[739]]= !1},LABEL_HANDLE:-1,ROTATION_HANDLE:-2,MOUSE_DOWN:_0xe4bc[787],MOUSE_MOVE:_0xe4bc[788],MOUSE_UP:_0xe4bc[789],ACTIVATE:_0xe4bc[790],RESIZE_START:_0xe4bc[791],RESIZE:_0xe4bc[129],RESIZE_END:_0xe4bc[792],MOVE_START:_0xe4bc[793],MOVE:_0xe4bc[582],MOVE_END:_0xe4bc[794],PAN_START:_0xe4bc[795],PAN:_0xe4bc[796],PAN_END:_0xe4bc[797],MINIMIZE:_0xe4bc[798],NORMALIZE:_0xe4bc[799],MAXIMIZE:_0xe4bc[800],HIDE:_0xe4bc[801],SHOW:_0xe4bc[539],CLOSE:_0xe4bc[268],DESTROY:_0xe4bc[515],REFRESH:_0xe4bc[802],SIZE:_0xe4bc[803],SELECT:_0xe4bc[804],FIRED:_0xe4bc[805],GET:_0xe4bc[203],RECEIVE:_0xe4bc[806],CONNECT:_0xe4bc[807],DISCONNECT:_0xe4bc[808],SUSPEND:_0xe4bc[809],RESUME:_0xe4bc[810],MARK:_0xe4bc[811],SESSION:_0xe4bc[812],ROOT:_0xe4bc[813],POST:_0xe4bc[814],OPEN:_0xe4bc[392],SAVE:_0xe4bc[815],BEFORE_ADD_VERTEX:_0xe4bc[816],ADD_VERTEX:_0xe4bc[817],AFTER_ADD_VERTEX:_0xe4bc[818],DONE:_0xe4bc[819],EXECUTE:_0xe4bc[350],EXECUTED:_0xe4bc[820],BEGIN_UPDATE:_0xe4bc[473],START_EDIT:_0xe4bc[821],END_UPDATE:_0xe4bc[476],END_EDIT:_0xe4bc[822],BEFORE_UNDO:_0xe4bc[823],UNDO:_0xe4bc[824],REDO:_0xe4bc[825],CHANGE:_0xe4bc[826],NOTIFY:_0xe4bc[827],LAYOUT_CELLS:_0xe4bc[828],CLICK:_0xe4bc[173],SCALE:_0xe4bc[255],TRANSLATE:_0xe4bc[513],SCALE_AND_TRANSLATE:_0xe4bc[829],UP:_0xe4bc[830],DOWN:_0xe4bc[831],ADD:_0xe4bc[99],REMOVE:_0xe4bc[205],CLEAR:_0xe4bc[200],ADD_CELLS:_0xe4bc[832],CELLS_ADDED:_0xe4bc[833],MOVE_CELLS:_0xe4bc[834],CELLS_MOVED:_0xe4bc[835],RESIZE_CELLS:_0xe4bc[836],CELLS_RESIZED:_0xe4bc[837],TOGGLE_CELLS:_0xe4bc[838],CELLS_TOGGLED:_0xe4bc[839],ORDER_CELLS:_0xe4bc[840],CELLS_ORDERED:_0xe4bc[841],REMOVE_CELLS:_0xe4bc[842],CELLS_REMOVED:_0xe4bc[843],GROUP_CELLS:_0xe4bc[844],UNGROUP_CELLS:_0xe4bc[845],REMOVE_CELLS_FROM_PARENT:_0xe4bc[846],FOLD_CELLS:_0xe4bc[847],CELLS_FOLDED:_0xe4bc[848],ALIGN_CELLS:_0xe4bc[849],LABEL_CHANGED:_0xe4bc[850],CONNECT_CELL:_0xe4bc[851],CELL_CONNECTED:_0xe4bc[852],SPLIT_EDGE:_0xe4bc[853],FLIP_EDGE:_0xe4bc[854],START_EDITING:_0xe4bc[855],ADD_OVERLAY:_0xe4bc[856],REMOVE_OVERLAY:_0xe4bc[857],UPDATE_CELL_SIZE:_0xe4bc[858],ESCAPE:_0xe4bc[859],CLICK:_0xe4bc[173],DOUBLE_CLICK:_0xe4bc[860],START:_0xe4bc[861],RESET:_0xe4bc[862]};function mxXmlRequest(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa){this[_0xe4bc[863]]=_0x5d2ax2;this[_0xe4bc[864]]=_0x5d2ax3;this[_0xe4bc[865]]=_0x5d2ax4||_0xe4bc[866];this[_0xe4bc[307]]=null!=_0x5d2ax5?_0x5d2ax5:!0;this[_0xe4bc[867]]=_0x5d2ax9;this[_0xe4bc[868]]=_0x5d2axa}mxXmlRequest[_0xe4bc[202]][_0xe4bc[863]]=null;mxXmlRequest[_0xe4bc[202]][_0xe4bc[864]]=null;mxXmlRequest[_0xe4bc[202]][_0xe4bc[865]]=null;mxXmlRequest[_0xe4bc[202]][_0xe4bc[307]]=null;mxXmlRequest[_0xe4bc[202]][_0xe4bc[869]]= !1;mxXmlRequest[_0xe4bc[202]][_0xe4bc[867]]=null;mxXmlRequest[_0xe4bc[202]][_0xe4bc[868]]=null;mxXmlRequest[_0xe4bc[202]][_0xe4bc[870]]=null;mxXmlRequest[_0xe4bc[202]][_0xe4bc[871]]=function(){return this[_0xe4bc[869]]};mxXmlRequest[_0xe4bc[202]][_0xe4bc[872]]=function(_0x5d2ax2){this[_0xe4bc[869]]=_0x5d2ax2};mxXmlRequest[_0xe4bc[202]][_0xe4bc[221]]=function(){return this[_0xe4bc[870]][_0xe4bc[873]]};mxXmlRequest[_0xe4bc[202]][_0xe4bc[220]]=function(){return 4==this[_0xe4bc[870]][_0xe4bc[417]]};mxXmlRequest[_0xe4bc[202]][_0xe4bc[874]]=function(){var _0x5d2ax2=this[_0xe4bc[875]]();return null!=_0x5d2ax2?_0x5d2ax2[_0xe4bc[158]]:null};mxXmlRequest[_0xe4bc[202]][_0xe4bc[875]]=function(){var _0x5d2ax2=this[_0xe4bc[870]][_0xe4bc[876]];if(9<=document[_0xe4bc[5]]||null==_0x5d2ax2||null==_0x5d2ax2[_0xe4bc[158]]){_0x5d2ax2=mxUtils[_0xe4bc[877]](this[_0xe4bc[870]][_0xe4bc[873]])};return _0x5d2ax2};mxXmlRequest[_0xe4bc[202]][_0xe4bc[221]]=function(){return this[_0xe4bc[870]][_0xe4bc[873]]};mxXmlRequest[_0xe4bc[202]][_0xe4bc[878]]=function(){return this[_0xe4bc[870]][_0xe4bc[879]]};mxXmlRequest[_0xe4bc[202]][_0xe4bc[385]]=function(){if(window[_0xe4bc[880]]){return function(){var _0x5d2ax2= new XMLHttpRequest;this[_0xe4bc[871]]()&&_0x5d2ax2[_0xe4bc[881]]&&_0x5d2ax2[_0xe4bc[881]](_0xe4bc[882]);return _0x5d2ax2}};if(_0xe4bc[82]!= typeof ActiveXObject){return function(){return  new ActiveXObject(_0xe4bc[883])}}}();mxXmlRequest[_0xe4bc[202]][_0xe4bc[414]]=function(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[870]]=this[_0xe4bc[385]]();null!=this[_0xe4bc[870]]&&(null!=_0x5d2ax2&&(this[_0xe4bc[870]][_0xe4bc[416]]=mxUtils[_0xe4bc[885]](this,function(){this[_0xe4bc[220]]()&&(_0x5d2ax2(this),this[_0xe4bc[884]]=null)})),this[_0xe4bc[870]][_0xe4bc[392]](this[_0xe4bc[865]],this[_0xe4bc[863]],this[_0xe4bc[307]],this[_0xe4bc[867]],this[_0xe4bc[868]]),this[_0xe4bc[886]](this[_0xe4bc[870]],this[_0xe4bc[864]]),this[_0xe4bc[870]][_0xe4bc[414]](this[_0xe4bc[864]]))};mxXmlRequest[_0xe4bc[202]][_0xe4bc[886]]=function(_0x5d2ax2,_0x5d2ax3){null!=_0x5d2ax3&&_0x5d2ax2[_0xe4bc[889]](_0xe4bc[887],_0xe4bc[888])};mxXmlRequest[_0xe4bc[202]][_0xe4bc[415]]=function(_0x5d2ax2,_0x5d2ax3){_0x5d2ax2=_0x5d2ax2||document;var _0x5d2ax4=null;_0x5d2ax2==document&&(_0x5d2ax4=window[_0xe4bc[890]],window[_0xe4bc[890]]=null);var _0x5d2ax5=_0x5d2ax2[_0xe4bc[55]](_0xe4bc[891]);_0x5d2ax5[_0xe4bc[57]](_0xe4bc[865],this[_0xe4bc[865]]);_0x5d2ax5[_0xe4bc[57]](_0xe4bc[892],this[_0xe4bc[863]]);null!=_0x5d2ax3&&_0x5d2ax5[_0xe4bc[57]](_0xe4bc[772],_0x5d2ax3);_0x5d2ax5[_0xe4bc[124]][_0xe4bc[495]]=_0xe4bc[130];_0x5d2ax5[_0xe4bc[124]][_0xe4bc[187]]=_0xe4bc[188];for(var _0x5d2ax9=0<this[_0xe4bc[864]][_0xe4bc[2]](_0xe4bc[893])?this[_0xe4bc[864]][_0xe4bc[224]](_0xe4bc[893]):this[_0xe4bc[864]][_0xe4bc[224]](),_0x5d2axa=0;_0x5d2axa<_0x5d2ax9[_0xe4bc[67]];_0x5d2axa++){var _0x5d2ax12=_0x5d2ax9[_0x5d2axa][_0xe4bc[2]](_0xe4bc[226]);if(0<_0x5d2ax12){var _0x5d2ax13=_0x5d2ax9[_0x5d2axa][_0xe4bc[85]](0,_0x5d2ax12),_0x5d2ax14=_0x5d2ax9[_0x5d2axa][_0xe4bc[85]](_0x5d2ax12+1),_0x5d2ax12=_0x5d2ax2[_0xe4bc[55]](_0xe4bc[126]);_0x5d2ax12[_0xe4bc[57]](_0xe4bc[298],_0x5d2ax13);_0x5d2ax14=_0x5d2ax14[_0xe4bc[230]](/\n/g,_0xe4bc[336]);_0x5d2ax13=_0x5d2ax2[_0xe4bc[344]](_0x5d2ax14);_0x5d2ax12[_0xe4bc[62]](_0x5d2ax13);_0x5d2ax5[_0xe4bc[62]](_0x5d2ax12)}};_0x5d2ax2[_0xe4bc[112]][_0xe4bc[62]](_0x5d2ax5);_0x5d2ax5[_0xe4bc[894]]();_0x5d2ax2[_0xe4bc[112]][_0xe4bc[266]](_0x5d2ax5);null!=_0x5d2ax4&&(window[_0xe4bc[890]]=_0x5d2ax4)};var mxClipboard={STEPSIZE:10,insertCount:1,cells:null,isEmpty:function(){return null==mxClipboard[_0xe4bc[895]]},cut:function(_0x5d2ax2,_0x5d2ax3){_0x5d2ax3=mxClipboard[_0xe4bc[149]](_0x5d2ax2,_0x5d2ax3);mxClipboard[_0xe4bc[896]]=0;mxClipboard[_0xe4bc[842]](_0x5d2ax2,_0x5d2ax3);return _0x5d2ax3},removeCells:function(_0x5d2ax2,_0x5d2ax3){_0x5d2ax2[_0xe4bc[842]](_0x5d2ax3)},copy:function(_0x5d2ax2,_0x5d2ax3){_0x5d2ax3=_0x5d2ax3||_0x5d2ax2[_0xe4bc[897]]();var _0x5d2ax4=_0x5d2ax2[_0xe4bc[898]](_0x5d2ax3);mxClipboard[_0xe4bc[896]]=1;mxClipboard[_0xe4bc[895]]=_0x5d2ax2[_0xe4bc[899]](_0x5d2ax4);return _0x5d2ax4},paste:function(_0x5d2ax2){if(null!=mxClipboard[_0xe4bc[895]]){var _0x5d2ax3=_0x5d2ax2[_0xe4bc[900]](mxClipboard[_0xe4bc[895]]),_0x5d2ax4=mxClipboard[_0xe4bc[896]]*mxClipboard[_0xe4bc[901]],_0x5d2ax5=_0x5d2ax2[_0xe4bc[902]](),_0x5d2ax3=_0x5d2ax2[_0xe4bc[903]](_0x5d2ax3,_0x5d2ax4,_0x5d2ax4,_0x5d2ax5);mxClipboard[_0xe4bc[896]]++;_0x5d2ax2[_0xe4bc[904]](_0x5d2ax3)}}};function mxWindow(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa,_0x5d2ax12,_0x5d2ax13,_0x5d2ax14,_0x5d2ax15){null!=_0x5d2ax3&&(_0x5d2ax12=null!=_0x5d2ax12?_0x5d2ax12:!0,this[_0xe4bc[905]]=_0x5d2ax3,this[_0xe4bc[176]](_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa,_0x5d2ax15),this[_0xe4bc[906]](),this[_0xe4bc[907]](),this[_0xe4bc[908]](),this[_0xe4bc[909]](_0x5d2ax12),this[_0xe4bc[910]](_0x5d2ax2),(null==_0x5d2ax13||_0x5d2ax13)&&this[_0xe4bc[911]](),null!=_0x5d2ax14&&null!=_0x5d2ax14[_0xe4bc[265]]?_0x5d2ax14[_0xe4bc[265]][_0xe4bc[912]](this[_0xe4bc[485]],_0x5d2ax14):document[_0xe4bc[112]][_0xe4bc[62]](this[_0xe4bc[485]]))}mxWindow[_0xe4bc[202]]= new mxEventSource;mxWindow[_0xe4bc[202]][_0xe4bc[196]]=mxWindow;mxWindow[_0xe4bc[202]][_0xe4bc[913]]=mxClient[_0xe4bc[88]]+_0xe4bc[914];mxWindow[_0xe4bc[202]][_0xe4bc[915]]=mxClient[_0xe4bc[88]]+_0xe4bc[916];mxWindow[_0xe4bc[202]][_0xe4bc[917]]=mxClient[_0xe4bc[88]]+_0xe4bc[918];mxWindow[_0xe4bc[202]][_0xe4bc[919]]=mxClient[_0xe4bc[88]]+_0xe4bc[920];mxWindow[_0xe4bc[202]][_0xe4bc[921]]=mxClient[_0xe4bc[88]]+_0xe4bc[922];mxWindow[_0xe4bc[202]][_0xe4bc[189]]= !1;mxWindow[_0xe4bc[202]][_0xe4bc[905]]= !1;mxWindow[_0xe4bc[202]][_0xe4bc[923]]= new mxRectangle(0,0,50,40);mxWindow[_0xe4bc[202]][_0xe4bc[924]]= !1;mxWindow[_0xe4bc[202]][_0xe4bc[905]]= !1;mxWindow[_0xe4bc[202]][_0xe4bc[165]]= !0;mxWindow[_0xe4bc[202]][_0xe4bc[176]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){_0x5d2ax9=null!=_0x5d2ax9?_0x5d2ax9:_0xe4bc[925];this[_0xe4bc[485]]=document[_0xe4bc[55]](_0xe4bc[485]);this[_0xe4bc[485]][_0xe4bc[926]]=_0x5d2ax9;this[_0xe4bc[485]][_0xe4bc[124]][_0xe4bc[361]]=_0x5d2ax2+_0xe4bc[168];this[_0xe4bc[485]][_0xe4bc[124]][_0xe4bc[125]]=_0x5d2ax3+_0xe4bc[168];this[_0xe4bc[116]]=document[_0xe4bc[55]](_0xe4bc[116]);this[_0xe4bc[116]][_0xe4bc[926]]=_0x5d2ax9;null!=_0x5d2ax4&&(mxClient[_0xe4bc[80]]||(this[_0xe4bc[485]][_0xe4bc[124]][_0xe4bc[117]]=_0x5d2ax4+_0xe4bc[168]),this[_0xe4bc[116]][_0xe4bc[124]][_0xe4bc[117]]=_0x5d2ax4+_0xe4bc[168]);null!=_0x5d2ax5&&(mxClient[_0xe4bc[80]]||(this[_0xe4bc[485]][_0xe4bc[124]][_0xe4bc[119]]=_0x5d2ax5+_0xe4bc[168]),this[_0xe4bc[116]][_0xe4bc[124]][_0xe4bc[119]]=_0x5d2ax5+_0xe4bc[168]);_0x5d2ax2=document[_0xe4bc[55]](_0xe4bc[120]);_0x5d2ax3=document[_0xe4bc[55]](_0xe4bc[121]);this[_0xe4bc[924]]=document[_0xe4bc[55]](_0xe4bc[122]);this[_0xe4bc[924]][_0xe4bc[926]]=_0x5d2ax9+_0xe4bc[927];_0x5d2ax3[_0xe4bc[62]](this[_0xe4bc[924]]);_0x5d2ax2[_0xe4bc[62]](_0x5d2ax3);_0x5d2ax3=document[_0xe4bc[55]](_0xe4bc[121]);this[_0xe4bc[122]]=document[_0xe4bc[55]](_0xe4bc[122]);this[_0xe4bc[122]][_0xe4bc[926]]=_0x5d2ax9+_0xe4bc[928];this[_0xe4bc[929]]=document[_0xe4bc[55]](_0xe4bc[485]);this[_0xe4bc[929]][_0xe4bc[926]]=_0x5d2ax9+_0xe4bc[928];this[_0xe4bc[929]][_0xe4bc[124]][_0xe4bc[117]]=_0xe4bc[118];this[_0xe4bc[929]][_0xe4bc[62]](this[_0xe4bc[905]]);if(mxClient[_0xe4bc[80]]||_0xe4bc[529]!=this[_0xe4bc[905]][_0xe4bc[301]][_0xe4bc[36]]()){this[_0xe4bc[929]][_0xe4bc[124]][_0xe4bc[119]]=_0xe4bc[118]};this[_0xe4bc[122]][_0xe4bc[62]](this[_0xe4bc[929]]);_0x5d2ax3[_0xe4bc[62]](this[_0xe4bc[122]]);_0x5d2ax2[_0xe4bc[62]](_0x5d2ax3);this[_0xe4bc[116]][_0xe4bc[62]](_0x5d2ax2);this[_0xe4bc[485]][_0xe4bc[62]](this[_0xe4bc[116]]);_0x5d2ax9=mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){this[_0xe4bc[790]]()});mxEvent[_0xe4bc[169]](this[_0xe4bc[924]],_0xe4bc[751],_0x5d2ax9);mxEvent[_0xe4bc[169]](this[_0xe4bc[116]],_0xe4bc[751],_0x5d2ax9);mxClient[_0xe4bc[754]]&&(mxEvent[_0xe4bc[169]](this[_0xe4bc[924]],_0xe4bc[755],_0x5d2ax9),mxEvent[_0xe4bc[169]](this[_0xe4bc[116]],_0xe4bc[755],_0x5d2ax9));this[_0xe4bc[801]]()};mxWindow[_0xe4bc[202]][_0xe4bc[910]]=function(_0x5d2ax2){for(var _0x5d2ax3=this[_0xe4bc[924]][_0xe4bc[285]];null!=_0x5d2ax3;){var _0x5d2ax4=_0x5d2ax3[_0xe4bc[287]];_0x5d2ax3[_0xe4bc[288]]==mxConstants[_0xe4bc[317]]&&_0x5d2ax3[_0xe4bc[265]][_0xe4bc[266]](_0x5d2ax3);_0x5d2ax3=_0x5d2ax4};mxUtils[_0xe4bc[53]](this[_0xe4bc[924]],_0x5d2ax2||_0xe4bc[110])};mxWindow[_0xe4bc[202]][_0xe4bc[162]]=function(_0x5d2ax2){0>navigator[_0xe4bc[3]][_0xe4bc[2]](_0xe4bc[186])&&(this[_0xe4bc[929]][_0xe4bc[124]][_0xe4bc[277]]=_0x5d2ax2?_0xe4bc[278]:_0xe4bc[188])};mxWindow[_0xe4bc[202]][_0xe4bc[790]]=function(){if(mxWindow[_0xe4bc[930]]!=this){var _0x5d2ax2=mxUtils[_0xe4bc[275]](this[_0xe4bc[166]]()),_0x5d2ax2=null!=_0x5d2ax2?_0x5d2ax2[_0xe4bc[931]]:3;if(mxWindow[_0xe4bc[930]]){var _0x5d2ax3=mxWindow[_0xe4bc[930]][_0xe4bc[166]]();null!=_0x5d2ax3&&null!=_0x5d2ax3[_0xe4bc[124]]&&(_0x5d2ax3[_0xe4bc[124]][_0xe4bc[931]]=_0x5d2ax2)};_0x5d2ax3=mxWindow[_0xe4bc[930]];this[_0xe4bc[166]]()[_0xe4bc[124]][_0xe4bc[931]]=parseInt(_0x5d2ax2)+1;mxWindow[_0xe4bc[930]]=this;this[_0xe4bc[746]]( new mxEventObject(mxEvent.ACTIVATE,_0xe4bc[932],_0x5d2ax3))}};mxWindow[_0xe4bc[202]][_0xe4bc[166]]=function(){return this[_0xe4bc[485]]};mxWindow[_0xe4bc[202]][_0xe4bc[933]]=function(){mxUtils[_0xe4bc[933]](this[_0xe4bc[485]])};mxWindow[_0xe4bc[202]][_0xe4bc[934]]=function(){return null!=this[_0xe4bc[129]]?_0xe4bc[130]!=this[_0xe4bc[129]][_0xe4bc[124]][_0xe4bc[495]]:!1};mxWindow[_0xe4bc[202]][_0xe4bc[163]]=function(_0x5d2ax2){_0x5d2ax2?null==this[_0xe4bc[129]]?(this[_0xe4bc[129]]=document[_0xe4bc[55]](_0xe4bc[466]),this[_0xe4bc[129]][_0xe4bc[124]][_0xe4bc[491]]=_0xe4bc[492],this[_0xe4bc[129]][_0xe4bc[124]][_0xe4bc[553]]=_0xe4bc[935],this[_0xe4bc[129]][_0xe4bc[124]][_0xe4bc[699]]=_0xe4bc[935],this[_0xe4bc[129]][_0xe4bc[57]](_0xe4bc[390],mxClient[_0xe4bc[88]]+_0xe4bc[922]),this[_0xe4bc[129]][_0xe4bc[124]][_0xe4bc[270]]=_0xe4bc[936],mxEvent[_0xe4bc[759]](this[_0xe4bc[129]],mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){this[_0xe4bc[790]]();var _0x5d2ax4=mxEvent[_0xe4bc[731]](_0x5d2ax2),_0x5d2ax5=mxEvent[_0xe4bc[733]](_0x5d2ax2),_0x5d2ax9=this[_0xe4bc[485]][_0xe4bc[359]],_0x5d2axa=this[_0xe4bc[485]][_0xe4bc[167]],_0x5d2ax12=mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){var _0x5d2ax3=mxEvent[_0xe4bc[731]](_0x5d2ax2)-_0x5d2ax4,_0x5d2ax12=mxEvent[_0xe4bc[733]](_0x5d2ax2)-_0x5d2ax5;this[_0xe4bc[937]](_0x5d2ax9+_0x5d2ax3,_0x5d2axa+_0x5d2ax12);this[_0xe4bc[746]]( new mxEventObject(mxEvent.RESIZE,_0xe4bc[763],_0x5d2ax2));mxEvent[_0xe4bc[722]](_0x5d2ax2)}),_0x5d2ax13=mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){mxEvent[_0xe4bc[938]](document,null,_0x5d2ax12,_0x5d2ax13);this[_0xe4bc[746]]( new mxEventObject(mxEvent.RESIZE_END,_0xe4bc[763],_0x5d2ax2));mxEvent[_0xe4bc[722]](_0x5d2ax2)});mxEvent[_0xe4bc[759]](document,null,_0x5d2ax12,_0x5d2ax13);this[_0xe4bc[746]]( new mxEventObject(mxEvent.RESIZE_START,_0xe4bc[763],_0x5d2ax2));mxEvent[_0xe4bc[722]](_0x5d2ax2)}),null,null),this[_0xe4bc[485]][_0xe4bc[62]](this[_0xe4bc[129]])):this[_0xe4bc[129]][_0xe4bc[124]][_0xe4bc[495]]=_0xe4bc[497]:null!=this[_0xe4bc[129]]&&(this[_0xe4bc[129]][_0xe4bc[124]][_0xe4bc[495]]=_0xe4bc[130])};mxWindow[_0xe4bc[202]][_0xe4bc[937]]=function(_0x5d2ax2,_0x5d2ax3){_0x5d2ax2=Math[_0xe4bc[160]](this[_0xe4bc[923]][_0xe4bc[117]],_0x5d2ax2);_0x5d2ax3=Math[_0xe4bc[160]](this[_0xe4bc[923]][_0xe4bc[119]],_0x5d2ax3);mxClient[_0xe4bc[80]]||(this[_0xe4bc[485]][_0xe4bc[124]][_0xe4bc[117]]=_0x5d2ax2+_0xe4bc[168],this[_0xe4bc[485]][_0xe4bc[124]][_0xe4bc[119]]=_0x5d2ax3+_0xe4bc[168]);this[_0xe4bc[116]][_0xe4bc[124]][_0xe4bc[117]]=_0x5d2ax2+_0xe4bc[168];this[_0xe4bc[116]][_0xe4bc[124]][_0xe4bc[119]]=_0x5d2ax3+_0xe4bc[168];mxClient[_0xe4bc[80]]||(this[_0xe4bc[929]][_0xe4bc[124]][_0xe4bc[119]]=this[_0xe4bc[485]][_0xe4bc[167]]-this[_0xe4bc[924]][_0xe4bc[167]]-2+_0xe4bc[168])};mxWindow[_0xe4bc[202]][_0xe4bc[909]]=function(_0x5d2ax2){this[_0xe4bc[798]][_0xe4bc[124]][_0xe4bc[495]]=_0x5d2ax2?_0xe4bc[110]:_0xe4bc[130]};mxWindow[_0xe4bc[202]][_0xe4bc[939]]=function(){return  new mxRectangle(0,0,0,this[_0xe4bc[924]][_0xe4bc[167]])};mxWindow[_0xe4bc[202]][_0xe4bc[907]]=function(){this[_0xe4bc[798]]=document[_0xe4bc[55]](_0xe4bc[466]);this[_0xe4bc[798]][_0xe4bc[57]](_0xe4bc[390],this[_0xe4bc[915]]);this[_0xe4bc[798]][_0xe4bc[57]](_0xe4bc[611],_0xe4bc[699]);this[_0xe4bc[798]][_0xe4bc[57]](_0xe4bc[924],_0xe4bc[940]);this[_0xe4bc[798]][_0xe4bc[124]][_0xe4bc[270]]=_0xe4bc[356];this[_0xe4bc[798]][_0xe4bc[124]][_0xe4bc[941]]=_0xe4bc[942];this[_0xe4bc[798]][_0xe4bc[124]][_0xe4bc[495]]=_0xe4bc[130];this[_0xe4bc[924]][_0xe4bc[62]](this[_0xe4bc[798]]);var _0x5d2ax2=!1,_0x5d2ax3=null,_0x5d2ax4=null,_0x5d2ax5=mxUtils[_0xe4bc[885]](this,function(_0x5d2ax5){this[_0xe4bc[790]]();if(_0x5d2ax2){_0x5d2ax2= !1,this[_0xe4bc[798]][_0xe4bc[57]](_0xe4bc[390],this[_0xe4bc[915]]),this[_0xe4bc[798]][_0xe4bc[57]](_0xe4bc[924],_0xe4bc[940]),this[_0xe4bc[929]][_0xe4bc[124]][_0xe4bc[495]]=_0xe4bc[110],this[_0xe4bc[800]][_0xe4bc[124]][_0xe4bc[495]]=_0x5d2ax3,mxClient[_0xe4bc[80]]||(this[_0xe4bc[485]][_0xe4bc[124]][_0xe4bc[119]]=_0x5d2ax4),this[_0xe4bc[116]][_0xe4bc[124]][_0xe4bc[119]]=_0x5d2ax4,null!=this[_0xe4bc[129]]&&(this[_0xe4bc[129]][_0xe4bc[124]][_0xe4bc[187]]=_0xe4bc[110]),this[_0xe4bc[746]]( new mxEventObject(mxEvent.NORMALIZE,_0xe4bc[763],_0x5d2ax5))}else {_0x5d2ax2= !0;this[_0xe4bc[798]][_0xe4bc[57]](_0xe4bc[390],this[_0xe4bc[917]]);this[_0xe4bc[798]][_0xe4bc[57]](_0xe4bc[924],_0xe4bc[943]);this[_0xe4bc[929]][_0xe4bc[124]][_0xe4bc[495]]=_0xe4bc[130];_0x5d2ax3=this[_0xe4bc[800]][_0xe4bc[124]][_0xe4bc[495]];this[_0xe4bc[800]][_0xe4bc[124]][_0xe4bc[495]]=_0xe4bc[130];_0x5d2ax4=this[_0xe4bc[116]][_0xe4bc[124]][_0xe4bc[119]];var _0x5d2axa=this[_0xe4bc[939]]();0<_0x5d2axa[_0xe4bc[119]]&&(mxClient[_0xe4bc[80]]||(this[_0xe4bc[485]][_0xe4bc[124]][_0xe4bc[119]]=_0x5d2axa[_0xe4bc[119]]+_0xe4bc[168]),this[_0xe4bc[116]][_0xe4bc[124]][_0xe4bc[119]]=_0x5d2axa[_0xe4bc[119]]+_0xe4bc[168]);0<_0x5d2axa[_0xe4bc[117]]&&(mxClient[_0xe4bc[80]]||(this[_0xe4bc[485]][_0xe4bc[124]][_0xe4bc[117]]=_0x5d2axa[_0xe4bc[117]]+_0xe4bc[168]),this[_0xe4bc[116]][_0xe4bc[124]][_0xe4bc[117]]=_0x5d2axa[_0xe4bc[117]]+_0xe4bc[168]);null!=this[_0xe4bc[129]]&&(this[_0xe4bc[129]][_0xe4bc[124]][_0xe4bc[187]]=_0xe4bc[188]);this[_0xe4bc[746]]( new mxEventObject(mxEvent.MINIMIZE,_0xe4bc[763],_0x5d2ax5))};mxEvent[_0xe4bc[722]](_0x5d2ax5)});mxEvent[_0xe4bc[169]](this[_0xe4bc[798]],_0xe4bc[751],_0x5d2ax5);mxClient[_0xe4bc[754]]&&mxEvent[_0xe4bc[169]](this[_0xe4bc[798]],_0xe4bc[755],_0x5d2ax5)};mxWindow[_0xe4bc[202]][_0xe4bc[161]]=function(_0x5d2ax2){this[_0xe4bc[800]][_0xe4bc[124]][_0xe4bc[495]]=_0x5d2ax2?_0xe4bc[110]:_0xe4bc[130]};mxWindow[_0xe4bc[202]][_0xe4bc[906]]=function(){this[_0xe4bc[800]]=document[_0xe4bc[55]](_0xe4bc[466]);this[_0xe4bc[800]][_0xe4bc[57]](_0xe4bc[390],this[_0xe4bc[919]]);this[_0xe4bc[800]][_0xe4bc[57]](_0xe4bc[611],_0xe4bc[699]);this[_0xe4bc[800]][_0xe4bc[57]](_0xe4bc[924],_0xe4bc[944]);this[_0xe4bc[800]][_0xe4bc[124]][_0xe4bc[270]]=_0xe4bc[583];this[_0xe4bc[800]][_0xe4bc[124]][_0xe4bc[945]]=_0xe4bc[942];this[_0xe4bc[800]][_0xe4bc[124]][_0xe4bc[270]]=_0xe4bc[356];this[_0xe4bc[800]][_0xe4bc[124]][_0xe4bc[495]]=_0xe4bc[130];this[_0xe4bc[924]][_0xe4bc[62]](this[_0xe4bc[800]]);var _0x5d2ax2=!1,_0x5d2ax3=null,_0x5d2ax4=null,_0x5d2ax5=null,_0x5d2ax9=null,_0x5d2axa=mxUtils[_0xe4bc[885]](this,function(_0x5d2axa){this[_0xe4bc[790]]();if(_0xe4bc[130]!=this[_0xe4bc[800]][_0xe4bc[124]][_0xe4bc[495]]){if(_0x5d2ax2){_0x5d2ax2= !1;this[_0xe4bc[800]][_0xe4bc[57]](_0xe4bc[390],this[_0xe4bc[919]]);this[_0xe4bc[800]][_0xe4bc[57]](_0xe4bc[924],_0xe4bc[944]);this[_0xe4bc[929]][_0xe4bc[124]][_0xe4bc[495]]=_0xe4bc[110];this[_0xe4bc[798]][_0xe4bc[124]][_0xe4bc[187]]=_0xe4bc[110];this[_0xe4bc[485]][_0xe4bc[124]][_0xe4bc[361]]=_0x5d2ax3+_0xe4bc[168];this[_0xe4bc[485]][_0xe4bc[124]][_0xe4bc[125]]=_0x5d2ax4+_0xe4bc[168];if(!mxClient[_0xe4bc[80]]&&(this[_0xe4bc[485]][_0xe4bc[124]][_0xe4bc[119]]=_0x5d2ax5,this[_0xe4bc[485]][_0xe4bc[124]][_0xe4bc[117]]=_0x5d2ax9,_0x5d2ax13=mxUtils[_0xe4bc[275]](this[_0xe4bc[929]]),_0xe4bc[278]==_0x5d2ax13[_0xe4bc[277]]||null!=this[_0xe4bc[129]])){this[_0xe4bc[929]][_0xe4bc[124]][_0xe4bc[119]]=this[_0xe4bc[485]][_0xe4bc[167]]-this[_0xe4bc[924]][_0xe4bc[167]]-2+_0xe4bc[168]};this[_0xe4bc[116]][_0xe4bc[124]][_0xe4bc[119]]=_0x5d2ax5;this[_0xe4bc[116]][_0xe4bc[124]][_0xe4bc[117]]=_0x5d2ax9;null!=this[_0xe4bc[129]]&&(this[_0xe4bc[129]][_0xe4bc[124]][_0xe4bc[187]]=_0xe4bc[110]);this[_0xe4bc[746]]( new mxEventObject(mxEvent.NORMALIZE,_0xe4bc[763],_0x5d2axa))}else {_0x5d2ax2= !0;this[_0xe4bc[800]][_0xe4bc[57]](_0xe4bc[390],this[_0xe4bc[917]]);this[_0xe4bc[800]][_0xe4bc[57]](_0xe4bc[924],_0xe4bc[943]);this[_0xe4bc[929]][_0xe4bc[124]][_0xe4bc[495]]=_0xe4bc[110];this[_0xe4bc[798]][_0xe4bc[124]][_0xe4bc[187]]=_0xe4bc[188];_0x5d2ax3=parseInt(this[_0xe4bc[485]][_0xe4bc[124]][_0xe4bc[361]]);_0x5d2ax4=parseInt(this[_0xe4bc[485]][_0xe4bc[124]][_0xe4bc[125]]);_0x5d2ax5=this[_0xe4bc[116]][_0xe4bc[124]][_0xe4bc[119]];_0x5d2ax9=this[_0xe4bc[116]][_0xe4bc[124]][_0xe4bc[117]];this[_0xe4bc[485]][_0xe4bc[124]][_0xe4bc[361]]=_0xe4bc[946];this[_0xe4bc[485]][_0xe4bc[124]][_0xe4bc[125]]=_0xe4bc[946];mxClient[_0xe4bc[80]]||(this[_0xe4bc[485]][_0xe4bc[124]][_0xe4bc[119]]=document[_0xe4bc[112]][_0xe4bc[157]]-2+_0xe4bc[168],this[_0xe4bc[485]][_0xe4bc[124]][_0xe4bc[117]]=document[_0xe4bc[112]][_0xe4bc[159]]-2+_0xe4bc[168]);this[_0xe4bc[116]][_0xe4bc[124]][_0xe4bc[117]]=document[_0xe4bc[112]][_0xe4bc[159]]-2+_0xe4bc[168];this[_0xe4bc[116]][_0xe4bc[124]][_0xe4bc[119]]=document[_0xe4bc[112]][_0xe4bc[157]]-2+_0xe4bc[168];null!=this[_0xe4bc[129]]&&(this[_0xe4bc[129]][_0xe4bc[124]][_0xe4bc[187]]=_0xe4bc[188]);if(!mxClient[_0xe4bc[80]]){var _0x5d2ax13=mxUtils[_0xe4bc[275]](this[_0xe4bc[929]]);if(_0xe4bc[278]==_0x5d2ax13[_0xe4bc[277]]||null!=this[_0xe4bc[129]]){this[_0xe4bc[929]][_0xe4bc[124]][_0xe4bc[119]]=this[_0xe4bc[485]][_0xe4bc[167]]-this[_0xe4bc[924]][_0xe4bc[167]]-2+_0xe4bc[168]}};this[_0xe4bc[746]]( new mxEventObject(mxEvent.MAXIMIZE,_0xe4bc[763],_0x5d2axa))};mxEvent[_0xe4bc[722]](_0x5d2axa)}});mxEvent[_0xe4bc[759]](this[_0xe4bc[800]],_0x5d2axa);mxEvent[_0xe4bc[169]](this[_0xe4bc[924]],_0xe4bc[760],_0x5d2axa)};mxWindow[_0xe4bc[202]][_0xe4bc[911]]=function(){this[_0xe4bc[924]][_0xe4bc[124]][_0xe4bc[270]]=_0xe4bc[582];mxEvent[_0xe4bc[759]](this[_0xe4bc[924]],mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){var _0x5d2ax3=mxEvent[_0xe4bc[731]](_0x5d2ax2),_0x5d2ax4=mxEvent[_0xe4bc[733]](_0x5d2ax2),_0x5d2ax5=this[_0xe4bc[730]](),_0x5d2ax9=this[_0xe4bc[732]](),_0x5d2axa=mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){var _0x5d2axa=mxEvent[_0xe4bc[731]](_0x5d2ax2)-_0x5d2ax3,_0x5d2ax12=mxEvent[_0xe4bc[733]](_0x5d2ax2)-_0x5d2ax4;this[_0xe4bc[947]](_0x5d2ax5+_0x5d2axa,_0x5d2ax9+_0x5d2ax12);this[_0xe4bc[746]]( new mxEventObject(mxEvent.MOVE,_0xe4bc[763],_0x5d2ax2));mxEvent[_0xe4bc[722]](_0x5d2ax2)}),_0x5d2ax12=mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){mxEvent[_0xe4bc[938]](document,null,_0x5d2axa,_0x5d2ax12);this[_0xe4bc[746]]( new mxEventObject(mxEvent.MOVE_END,_0xe4bc[763],_0x5d2ax2));mxEvent[_0xe4bc[722]](_0x5d2ax2)});mxEvent[_0xe4bc[759]](document,null,_0x5d2axa,_0x5d2ax12);this[_0xe4bc[746]]( new mxEventObject(mxEvent.MOVE_START,_0xe4bc[763],_0x5d2ax2));mxEvent[_0xe4bc[722]](_0x5d2ax2)}))};mxWindow[_0xe4bc[202]][_0xe4bc[947]]=function(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[485]][_0xe4bc[124]][_0xe4bc[361]]=_0x5d2ax2+_0xe4bc[168];this[_0xe4bc[485]][_0xe4bc[124]][_0xe4bc[125]]=_0x5d2ax3+_0xe4bc[168]};mxWindow[_0xe4bc[202]][_0xe4bc[730]]=function(){return parseInt(this[_0xe4bc[485]][_0xe4bc[124]][_0xe4bc[361]])};mxWindow[_0xe4bc[202]][_0xe4bc[732]]=function(){return parseInt(this[_0xe4bc[485]][_0xe4bc[124]][_0xe4bc[125]])};mxWindow[_0xe4bc[202]][_0xe4bc[908]]=function(){this[_0xe4bc[948]]=document[_0xe4bc[55]](_0xe4bc[466]);this[_0xe4bc[948]][_0xe4bc[57]](_0xe4bc[390],this[_0xe4bc[913]]);this[_0xe4bc[948]][_0xe4bc[57]](_0xe4bc[611],_0xe4bc[699]);this[_0xe4bc[948]][_0xe4bc[57]](_0xe4bc[924],_0xe4bc[949]);this[_0xe4bc[948]][_0xe4bc[124]][_0xe4bc[945]]=_0xe4bc[935];this[_0xe4bc[948]][_0xe4bc[124]][_0xe4bc[270]]=_0xe4bc[356];this[_0xe4bc[948]][_0xe4bc[124]][_0xe4bc[495]]=_0xe4bc[130];this[_0xe4bc[924]][_0xe4bc[950]](this[_0xe4bc[948]],this[_0xe4bc[924]][_0xe4bc[285]]);mxEvent[_0xe4bc[759]](this[_0xe4bc[948]],mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){this[_0xe4bc[746]]( new mxEventObject(mxEvent.CLOSE,_0xe4bc[763],_0x5d2ax2));this[_0xe4bc[165]]?this[_0xe4bc[515]]():this[_0xe4bc[175]](!1);mxEvent[_0xe4bc[722]](_0x5d2ax2)}))};mxWindow[_0xe4bc[202]][_0xe4bc[951]]=function(_0x5d2ax2){this[_0xe4bc[618]]=document[_0xe4bc[55]](_0xe4bc[466]);this[_0xe4bc[618]][_0xe4bc[57]](_0xe4bc[390],_0x5d2ax2);this[_0xe4bc[618]][_0xe4bc[57]](_0xe4bc[611],_0xe4bc[361]);this[_0xe4bc[618]][_0xe4bc[124]][_0xe4bc[941]]=_0xe4bc[952];this[_0xe4bc[618]][_0xe4bc[124]][_0xe4bc[945]]=_0xe4bc[946];this[_0xe4bc[618]][_0xe4bc[124]][_0xe4bc[953]]=_0xe4bc[954];this[_0xe4bc[924]][_0xe4bc[950]](this[_0xe4bc[618]],this[_0xe4bc[924]][_0xe4bc[285]])};mxWindow[_0xe4bc[202]][_0xe4bc[164]]=function(_0x5d2ax2){this[_0xe4bc[948]][_0xe4bc[124]][_0xe4bc[495]]=_0x5d2ax2?_0xe4bc[110]:_0xe4bc[130]};mxWindow[_0xe4bc[202]][_0xe4bc[174]]=function(){return null!=this[_0xe4bc[485]]?_0xe4bc[188]!=this[_0xe4bc[485]][_0xe4bc[124]][_0xe4bc[187]]:!1};mxWindow[_0xe4bc[202]][_0xe4bc[175]]=function(_0x5d2ax2){null!=this[_0xe4bc[485]]&&this[_0xe4bc[174]]()!=_0x5d2ax2&&(_0x5d2ax2?this[_0xe4bc[539]]():this[_0xe4bc[801]]())};mxWindow[_0xe4bc[202]][_0xe4bc[539]]=function(){this[_0xe4bc[485]][_0xe4bc[124]][_0xe4bc[187]]=_0xe4bc[110];this[_0xe4bc[790]]();var _0x5d2ax2=mxUtils[_0xe4bc[275]](this[_0xe4bc[929]]);if(!mxClient[_0xe4bc[80]]&&(_0xe4bc[278]==_0x5d2ax2[_0xe4bc[277]]||null!=this[_0xe4bc[129]])){this[_0xe4bc[929]][_0xe4bc[124]][_0xe4bc[119]]=this[_0xe4bc[485]][_0xe4bc[167]]-this[_0xe4bc[924]][_0xe4bc[167]]-2+_0xe4bc[168]};this[_0xe4bc[746]]( new mxEventObject(mxEvent.SHOW))};mxWindow[_0xe4bc[202]][_0xe4bc[801]]=function(){this[_0xe4bc[485]][_0xe4bc[124]][_0xe4bc[187]]=_0xe4bc[188];this[_0xe4bc[746]]( new mxEventObject(mxEvent.HIDE))};mxWindow[_0xe4bc[202]][_0xe4bc[515]]=function(){this[_0xe4bc[746]]( new mxEventObject(mxEvent.DESTROY));null!=this[_0xe4bc[485]]&&(mxEvent[_0xe4bc[762]](this[_0xe4bc[485]]),this[_0xe4bc[485]][_0xe4bc[265]][_0xe4bc[266]](this[_0xe4bc[485]]),this[_0xe4bc[485]]=null);this[_0xe4bc[929]]=this[_0xe4bc[905]]=this[_0xe4bc[924]]=null};function mxForm(_0x5d2ax2){this[_0xe4bc[116]]=document[_0xe4bc[55]](_0xe4bc[116]);this[_0xe4bc[116]][_0xe4bc[926]]=_0x5d2ax2;this[_0xe4bc[112]]=document[_0xe4bc[55]](_0xe4bc[120]);this[_0xe4bc[116]][_0xe4bc[62]](this[_0xe4bc[112]])}mxForm[_0xe4bc[202]][_0xe4bc[116]]=null;mxForm[_0xe4bc[202]][_0xe4bc[112]]= !1;mxForm[_0xe4bc[202]][_0xe4bc[955]]=function(){return this[_0xe4bc[116]]};mxForm[_0xe4bc[202]][_0xe4bc[956]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=document[_0xe4bc[55]](_0xe4bc[121]),_0x5d2ax5=document[_0xe4bc[55]](_0xe4bc[122]);_0x5d2ax4[_0xe4bc[62]](_0x5d2ax5);var _0x5d2ax5=document[_0xe4bc[55]](_0xe4bc[122]),_0x5d2ax9=document[_0xe4bc[55]](_0xe4bc[172]);mxUtils[_0xe4bc[53]](_0x5d2ax9,mxResources[_0xe4bc[203]](_0xe4bc[957])||_0xe4bc[958]);_0x5d2ax5[_0xe4bc[62]](_0x5d2ax9);mxEvent[_0xe4bc[169]](_0x5d2ax9,_0xe4bc[173],function(){_0x5d2ax2()});_0x5d2ax9=document[_0xe4bc[55]](_0xe4bc[172]);mxUtils[_0xe4bc[53]](_0x5d2ax9,mxResources[_0xe4bc[203]](_0xe4bc[959])||_0xe4bc[960]);_0x5d2ax5[_0xe4bc[62]](_0x5d2ax9);mxEvent[_0xe4bc[169]](_0x5d2ax9,_0xe4bc[173],function(){_0x5d2ax3()});_0x5d2ax4[_0xe4bc[62]](_0x5d2ax5);this[_0xe4bc[112]][_0xe4bc[62]](_0x5d2ax4)};mxForm[_0xe4bc[202]][_0xe4bc[961]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=document[_0xe4bc[55]](_0xe4bc[962]);_0x5d2ax4[_0xe4bc[57]](_0xe4bc[60],_0xe4bc[963]);_0x5d2ax4[_0xe4bc[131]]=_0x5d2ax3;return this[_0xe4bc[964]](_0x5d2ax2,_0x5d2ax4)};mxForm[_0xe4bc[202]][_0xe4bc[965]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=document[_0xe4bc[55]](_0xe4bc[962]);_0x5d2ax4[_0xe4bc[57]](_0xe4bc[60],_0xe4bc[966]);this[_0xe4bc[964]](_0x5d2ax2,_0x5d2ax4);_0x5d2ax3&&(_0x5d2ax4[_0xe4bc[967]]= !0);return _0x5d2ax4};mxForm[_0xe4bc[202]][_0xe4bc[968]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){var _0x5d2ax5=document[_0xe4bc[55]](_0xe4bc[126]);mxClient[_0xe4bc[133]]&&_0x5d2ax4--;_0x5d2ax5[_0xe4bc[57]](_0xe4bc[969],_0x5d2ax4||2);_0x5d2ax5[_0xe4bc[131]]=_0x5d2ax3;return this[_0xe4bc[964]](_0x5d2ax2,_0x5d2ax5)};mxForm[_0xe4bc[202]][_0xe4bc[970]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){var _0x5d2ax5=document[_0xe4bc[55]](_0xe4bc[804]);null!=_0x5d2ax4&&_0x5d2ax5[_0xe4bc[57]](_0xe4bc[803],_0x5d2ax4);_0x5d2ax3&&_0x5d2ax5[_0xe4bc[57]](_0xe4bc[971],_0xe4bc[128]);return this[_0xe4bc[964]](_0x5d2ax2,_0x5d2ax5)};mxForm[_0xe4bc[202]][_0xe4bc[972]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){var _0x5d2ax9=document[_0xe4bc[55]](_0xe4bc[973]);mxUtils[_0xe4bc[171]](_0x5d2ax9,_0x5d2ax3);_0x5d2ax9[_0xe4bc[57]](_0xe4bc[131],_0x5d2ax4);_0x5d2ax5&&_0x5d2ax9[_0xe4bc[57]](_0xe4bc[974],_0x5d2ax5);_0x5d2ax2[_0xe4bc[62]](_0x5d2ax9)};mxForm[_0xe4bc[202]][_0xe4bc[964]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=document[_0xe4bc[55]](_0xe4bc[121]),_0x5d2ax5=document[_0xe4bc[55]](_0xe4bc[122]);mxUtils[_0xe4bc[53]](_0x5d2ax5,_0x5d2ax2);_0x5d2ax4[_0xe4bc[62]](_0x5d2ax5);_0x5d2ax5=document[_0xe4bc[55]](_0xe4bc[122]);_0x5d2ax5[_0xe4bc[62]](_0x5d2ax3);_0x5d2ax4[_0xe4bc[62]](_0x5d2ax5);this[_0xe4bc[112]][_0xe4bc[62]](_0x5d2ax4);return _0x5d2ax3};function mxImage(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){this[_0xe4bc[390]]=_0x5d2ax2;this[_0xe4bc[117]]=_0x5d2ax3;this[_0xe4bc[119]]=_0x5d2ax4}mxImage[_0xe4bc[202]][_0xe4bc[390]]=null;mxImage[_0xe4bc[202]][_0xe4bc[117]]=null;mxImage[_0xe4bc[202]][_0xe4bc[119]]=null;function mxDivResizer(_0x5d2ax2,_0x5d2ax3){if(_0xe4bc[485]==_0x5d2ax2[_0xe4bc[301]][_0xe4bc[216]]()){null==_0x5d2ax3&&(_0x5d2ax3=window);this[_0xe4bc[485]]=_0x5d2ax2;var _0x5d2ax4=mxUtils[_0xe4bc[275]](_0x5d2ax2);null!=_0x5d2ax4&&(this[_0xe4bc[975]]=_0xe4bc[278]==_0x5d2ax4[_0xe4bc[117]],this[_0xe4bc[976]]=_0xe4bc[278]==_0x5d2ax4[_0xe4bc[119]]);mxEvent[_0xe4bc[169]](_0x5d2ax3,_0xe4bc[129],mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){this[_0xe4bc[977]]||(this[_0xe4bc[977]]= !0,this[_0xe4bc[129]](),this[_0xe4bc[977]]= !1)}));this[_0xe4bc[129]]()}}mxDivResizer[_0xe4bc[202]][_0xe4bc[975]]= !0;mxDivResizer[_0xe4bc[202]][_0xe4bc[976]]= !0;mxDivResizer[_0xe4bc[202]][_0xe4bc[977]]= !1;mxDivResizer[_0xe4bc[202]][_0xe4bc[129]]=function(){var _0x5d2ax2=this[_0xe4bc[978]](),_0x5d2ax3=this[_0xe4bc[979]](),_0x5d2ax4=parseInt(this[_0xe4bc[485]][_0xe4bc[124]][_0xe4bc[361]]),_0x5d2ax5=parseInt(this[_0xe4bc[485]][_0xe4bc[124]][_0xe4bc[699]]),_0x5d2ax9=parseInt(this[_0xe4bc[485]][_0xe4bc[124]][_0xe4bc[125]]),_0x5d2axa=parseInt(this[_0xe4bc[485]][_0xe4bc[124]][_0xe4bc[553]]);this[_0xe4bc[975]]&&(!isNaN(_0x5d2ax4)&&!isNaN(_0x5d2ax5)&&0<=_0x5d2ax4&&0<=_0x5d2ax5&&0<_0x5d2ax2-_0x5d2ax5-_0x5d2ax4)&&(this[_0xe4bc[485]][_0xe4bc[124]][_0xe4bc[117]]=_0x5d2ax2-_0x5d2ax5-_0x5d2ax4+_0xe4bc[168]);this[_0xe4bc[976]]&&(!isNaN(_0x5d2ax9)&&!isNaN(_0x5d2axa)&&0<=_0x5d2ax9&&0<=_0x5d2axa&&0<_0x5d2ax3-_0x5d2ax9-_0x5d2axa)&&(this[_0xe4bc[485]][_0xe4bc[124]][_0xe4bc[119]]=_0x5d2ax3-_0x5d2ax9-_0x5d2axa+_0xe4bc[168])};mxDivResizer[_0xe4bc[202]][_0xe4bc[978]]=function(){return document[_0xe4bc[112]][_0xe4bc[159]]};mxDivResizer[_0xe4bc[202]][_0xe4bc[979]]=function(){return document[_0xe4bc[112]][_0xe4bc[157]]};function mxDragSource(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[980]]=_0x5d2ax2;this[_0xe4bc[981]]=_0x5d2ax3;mxEvent[_0xe4bc[759]](_0x5d2ax2,mxUtils[_0xe4bc[885]](this,this[_0xe4bc[787]]))}mxDragSource[_0xe4bc[202]][_0xe4bc[980]]=null;mxDragSource[_0xe4bc[202]][_0xe4bc[981]]=null;mxDragSource[_0xe4bc[202]][_0xe4bc[559]]=null;mxDragSource[_0xe4bc[202]][_0xe4bc[982]]=null;mxDragSource[_0xe4bc[202]][_0xe4bc[983]]=null;mxDragSource[_0xe4bc[202]][_0xe4bc[984]]= !0;mxDragSource[_0xe4bc[202]][_0xe4bc[985]]=null;mxDragSource[_0xe4bc[202]][_0xe4bc[986]]=null;mxDragSource[_0xe4bc[202]][_0xe4bc[987]]=null;mxDragSource[_0xe4bc[202]][_0xe4bc[988]]=null;mxDragSource[_0xe4bc[202]][_0xe4bc[989]]=null;mxDragSource[_0xe4bc[202]][_0xe4bc[561]]= !0;mxDragSource[_0xe4bc[202]][_0xe4bc[990]]= !0;mxDragSource[_0xe4bc[202]][_0xe4bc[991]]= !0;mxDragSource[_0xe4bc[202]][_0xe4bc[563]]= !0;mxDragSource[_0xe4bc[202]][_0xe4bc[992]]=100;mxDragSource[_0xe4bc[202]][_0xe4bc[993]]=70;mxDragSource[_0xe4bc[202]][_0xe4bc[994]]=function(){return this[_0xe4bc[984]]};mxDragSource[_0xe4bc[202]][_0xe4bc[995]]=function(_0x5d2ax2){this[_0xe4bc[984]]=_0x5d2ax2};mxDragSource[_0xe4bc[202]][_0xe4bc[996]]=function(){return this[_0xe4bc[990]]};mxDragSource[_0xe4bc[202]][_0xe4bc[562]]=function(_0x5d2ax2){this[_0xe4bc[990]]=_0x5d2ax2};mxDragSource[_0xe4bc[202]][_0xe4bc[997]]=function(){return this[_0xe4bc[991]]};mxDragSource[_0xe4bc[202]][_0xe4bc[998]]=function(_0x5d2ax2){this[_0xe4bc[991]]=_0x5d2ax2};mxDragSource[_0xe4bc[202]][_0xe4bc[565]]=function(_0x5d2ax2){return null};mxDragSource[_0xe4bc[202]][_0xe4bc[564]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){return _0x5d2ax2[_0xe4bc[999]](_0x5d2ax3,_0x5d2ax4)};mxDragSource[_0xe4bc[202]][_0xe4bc[566]]=function(_0x5d2ax2){return this[_0xe4bc[980]][_0xe4bc[511]](!0)};mxDragSource[_0xe4bc[202]][_0xe4bc[567]]=function(_0x5d2ax2){return null};mxDragSource[_0xe4bc[202]][_0xe4bc[787]]=function(_0x5d2ax2){this[_0xe4bc[984]]&&(!mxEvent[_0xe4bc[721]](_0x5d2ax2)&&null==this[_0xe4bc[1000]])&&(this[_0xe4bc[1001]](_0x5d2ax2),this[_0xe4bc[1000]]=mxUtils[_0xe4bc[885]](this,this[_0xe4bc[788]]),this[_0xe4bc[1002]]=mxUtils[_0xe4bc[885]](this,this[_0xe4bc[789]]),mxEvent[_0xe4bc[759]](document,null,this[_0xe4bc[1000]],this[_0xe4bc[1002]]),mxEvent[_0xe4bc[722]](_0x5d2ax2,!0,!1))};mxDragSource[_0xe4bc[202]][_0xe4bc[1001]]=function(_0x5d2ax2){this[_0xe4bc[982]]=this[_0xe4bc[566]](_0x5d2ax2);this[_0xe4bc[982]][_0xe4bc[124]][_0xe4bc[491]]=_0xe4bc[492];this[_0xe4bc[982]][_0xe4bc[124]][_0xe4bc[931]]=this[_0xe4bc[992]];mxUtils[_0xe4bc[254]](this[_0xe4bc[982]],this[_0xe4bc[993]])};mxDragSource[_0xe4bc[202]][_0xe4bc[1003]]=function(_0x5d2ax2){null!=this[_0xe4bc[982]]&&(null!=this[_0xe4bc[982]][_0xe4bc[265]]&&this[_0xe4bc[982]][_0xe4bc[265]][_0xe4bc[266]](this[_0xe4bc[982]]),this[_0xe4bc[982]]=null)};mxDragSource[_0xe4bc[202]][_0xe4bc[1004]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=mxEvent[_0xe4bc[731]](_0x5d2ax3),_0x5d2ax5=mxEvent[_0xe4bc[733]](_0x5d2ax3),_0x5d2ax9=mxUtils[_0xe4bc[445]](_0x5d2ax2[_0xe4bc[526]]),_0x5d2axa=mxUtils[_0xe4bc[444]]();return _0x5d2ax4>=_0x5d2ax9[_0xe4bc[235]]-_0x5d2axa[_0xe4bc[235]]&&_0x5d2ax5>=_0x5d2ax9[_0xe4bc[236]]-_0x5d2axa[_0xe4bc[236]]&&_0x5d2ax4<=_0x5d2ax9[_0xe4bc[235]]-_0x5d2axa[_0xe4bc[235]]+_0x5d2ax2[_0xe4bc[526]][_0xe4bc[359]]&&_0x5d2ax5<=_0x5d2ax9[_0xe4bc[236]]-_0x5d2axa[_0xe4bc[236]]+_0x5d2ax2[_0xe4bc[526]][_0xe4bc[167]]};mxDragSource[_0xe4bc[202]][_0xe4bc[788]]=function(_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[565]](_0x5d2ax2);null!=_0x5d2ax3&&!this[_0xe4bc[1004]](_0x5d2ax3,_0x5d2ax2)&&(_0x5d2ax3=null);_0x5d2ax3!=this[_0xe4bc[985]]&&(null!=this[_0xe4bc[985]]&&this[_0xe4bc[1005]](this[_0xe4bc[985]]),this[_0xe4bc[985]]=_0x5d2ax3,null!=this[_0xe4bc[985]]&&this[_0xe4bc[1006]](this[_0xe4bc[985]]));null!=this[_0xe4bc[985]]&&this[_0xe4bc[1007]](this[_0xe4bc[985]],_0x5d2ax2);if(null!=this[_0xe4bc[982]]&&(null==this[_0xe4bc[983]]||_0xe4bc[189]!=this[_0xe4bc[983]][_0xe4bc[124]][_0xe4bc[187]])){var _0x5d2ax3=mxEvent[_0xe4bc[731]](_0x5d2ax2),_0x5d2ax4=mxEvent[_0xe4bc[733]](_0x5d2ax2);null==this[_0xe4bc[982]][_0xe4bc[265]]&&document[_0xe4bc[112]][_0xe4bc[62]](this[_0xe4bc[982]]);this[_0xe4bc[982]][_0xe4bc[124]][_0xe4bc[187]]=_0xe4bc[189];null!=this[_0xe4bc[559]]&&(_0x5d2ax3+=this[_0xe4bc[559]][_0xe4bc[235]],_0x5d2ax4+=this[_0xe4bc[559]][_0xe4bc[236]]);_0x5d2ax3+=document[_0xe4bc[112]][_0xe4bc[360]]||document[_0xe4bc[158]][_0xe4bc[360]];_0x5d2ax4+=document[_0xe4bc[112]][_0xe4bc[190]]||document[_0xe4bc[158]][_0xe4bc[190]];this[_0xe4bc[982]][_0xe4bc[124]][_0xe4bc[361]]=_0x5d2ax3+_0xe4bc[168];this[_0xe4bc[982]][_0xe4bc[124]][_0xe4bc[125]]=_0x5d2ax4+_0xe4bc[168]}else {null!=this[_0xe4bc[982]]&&(this[_0xe4bc[982]][_0xe4bc[124]][_0xe4bc[187]]=_0xe4bc[188])};mxEvent[_0xe4bc[722]](_0x5d2ax2)};mxDragSource[_0xe4bc[202]][_0xe4bc[789]]=function(_0x5d2ax2){if(null!=this[_0xe4bc[985]]){if(null!=this[_0xe4bc[987]]&&(null==this[_0xe4bc[983]]||_0xe4bc[188]!=this[_0xe4bc[983]][_0xe4bc[124]][_0xe4bc[187]])){var _0x5d2ax3=this[_0xe4bc[985]][_0xe4bc[441]][_0xe4bc[255]],_0x5d2ax4=this[_0xe4bc[985]][_0xe4bc[441]][_0xe4bc[513]];this[_0xe4bc[1008]](this[_0xe4bc[985]],_0x5d2ax2,this[_0xe4bc[986]],this[_0xe4bc[987]][_0xe4bc[235]]/_0x5d2ax3-_0x5d2ax4[_0xe4bc[235]],this[_0xe4bc[987]][_0xe4bc[236]]/_0x5d2ax3-_0x5d2ax4[_0xe4bc[236]])};this[_0xe4bc[1005]](this[_0xe4bc[985]])};this[_0xe4bc[1003]](_0x5d2ax2);mxEvent[_0xe4bc[938]](document,null,this[_0xe4bc[1000]],this[_0xe4bc[1002]]);this[_0xe4bc[985]]=this[_0xe4bc[1002]]=this[_0xe4bc[1000]]=null;mxEvent[_0xe4bc[722]](_0x5d2ax2)};mxDragSource[_0xe4bc[202]][_0xe4bc[1006]]=function(_0x5d2ax2){_0x5d2ax2[_0xe4bc[1009]]= !0;this[_0xe4bc[983]]=this[_0xe4bc[567]](_0x5d2ax2);this[_0xe4bc[996]]()&&null!=this[_0xe4bc[983]]&&(this[_0xe4bc[988]]= new mxGuide(_0x5d2ax2,_0x5d2ax2[_0xe4bc[1011]][_0xe4bc[1010]]()));this[_0xe4bc[563]]&&(this[_0xe4bc[989]]= new mxCellHighlight(_0x5d2ax2,mxConstants.DROP_TARGET_COLOR))};mxDragSource[_0xe4bc[202]][_0xe4bc[1005]]=function(_0x5d2ax2){this[_0xe4bc[987]]=this[_0xe4bc[986]]=null;_0x5d2ax2[_0xe4bc[1009]]= !1;null!=this[_0xe4bc[983]]&&(null!=this[_0xe4bc[983]][_0xe4bc[265]]&&this[_0xe4bc[983]][_0xe4bc[265]][_0xe4bc[266]](this[_0xe4bc[983]]),this[_0xe4bc[983]]=null);null!=this[_0xe4bc[988]]&&(this[_0xe4bc[988]][_0xe4bc[515]](),this[_0xe4bc[988]]=null);null!=this[_0xe4bc[989]]&&(this[_0xe4bc[989]][_0xe4bc[515]](),this[_0xe4bc[989]]=null)};mxDragSource[_0xe4bc[202]][_0xe4bc[1007]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=mxUtils[_0xe4bc[445]](_0x5d2ax2[_0xe4bc[526]]),_0x5d2ax5=mxUtils[_0xe4bc[444]](_0x5d2ax2[_0xe4bc[526]]),_0x5d2ax9=mxEvent[_0xe4bc[731]](_0x5d2ax3)-_0x5d2ax4[_0xe4bc[235]]+_0x5d2ax5[_0xe4bc[235]],_0x5d2ax4=mxEvent[_0xe4bc[733]](_0x5d2ax3)-_0x5d2ax4[_0xe4bc[236]]+_0x5d2ax5[_0xe4bc[236]];_0x5d2ax2[_0xe4bc[1012]]&&(null==this[_0xe4bc[561]]||this[_0xe4bc[561]])&&_0x5d2ax2[_0xe4bc[1014]](_0x5d2ax9,_0x5d2ax4,_0x5d2ax2[_0xe4bc[1013]]);null!=this[_0xe4bc[989]]&&_0x5d2ax2[_0xe4bc[1015]]()&&(this[_0xe4bc[986]]=this[_0xe4bc[564]](_0x5d2ax2,_0x5d2ax9,_0x5d2ax4),_0x5d2ax5=_0x5d2ax2[_0xe4bc[249]]()[_0xe4bc[248]](this[_0xe4bc[986]]),this[_0xe4bc[989]][_0xe4bc[1016]](_0x5d2ax5));if(null!=this[_0xe4bc[983]]){null==this[_0xe4bc[983]][_0xe4bc[265]]&&(_0x5d2ax2[_0xe4bc[526]][_0xe4bc[62]](this[_0xe4bc[983]]),this[_0xe4bc[983]][_0xe4bc[124]][_0xe4bc[931]]=_0xe4bc[1017],this[_0xe4bc[983]][_0xe4bc[124]][_0xe4bc[491]]=_0xe4bc[492]);var _0x5d2ax5=this[_0xe4bc[997]]()&&_0x5d2ax2[_0xe4bc[1018]](_0x5d2ax3),_0x5d2axa=!0;if(null!=this[_0xe4bc[988]]&&this[_0xe4bc[988]][_0xe4bc[1019]](_0x5d2ax3)){var _0x5d2axa=parseInt(this[_0xe4bc[983]][_0xe4bc[124]][_0xe4bc[117]]),_0x5d2ax12=parseInt(this[_0xe4bc[983]][_0xe4bc[124]][_0xe4bc[119]]),_0x5d2axa= new mxRectangle(0,0,_0x5d2axa,_0x5d2ax12),_0x5d2ax4= new mxPoint(_0x5d2ax9,_0x5d2ax4),_0x5d2ax4=this[_0xe4bc[988]][_0xe4bc[582]](_0x5d2axa,_0x5d2ax4,_0x5d2ax5),_0x5d2axa=!1,_0x5d2ax9=_0x5d2ax4[_0xe4bc[235]],_0x5d2ax4=_0x5d2ax4[_0xe4bc[236]]}else {if(_0x5d2ax5){var _0x5d2ax5=_0x5d2ax2[_0xe4bc[441]][_0xe4bc[255]],_0x5d2ax12=_0x5d2ax2[_0xe4bc[441]][_0xe4bc[513]],_0x5d2ax13=_0x5d2ax2[_0xe4bc[1020]]/2,_0x5d2ax9=(_0x5d2ax2[_0xe4bc[1021]](_0x5d2ax9/_0x5d2ax5-_0x5d2ax12[_0xe4bc[235]]-_0x5d2ax13)+_0x5d2ax12[_0xe4bc[235]])*_0x5d2ax5,_0x5d2ax4=(_0x5d2ax2[_0xe4bc[1021]](_0x5d2ax4/_0x5d2ax5-_0x5d2ax12[_0xe4bc[236]]-_0x5d2ax13)+_0x5d2ax12[_0xe4bc[236]])*_0x5d2ax5}};null!=this[_0xe4bc[988]]&&_0x5d2axa&&this[_0xe4bc[988]][_0xe4bc[801]]();null!=this[_0xe4bc[1022]]&&(_0x5d2ax9+=this[_0xe4bc[1022]][_0xe4bc[235]],_0x5d2ax4+=this[_0xe4bc[1022]][_0xe4bc[236]]);this[_0xe4bc[983]][_0xe4bc[124]][_0xe4bc[361]]=Math[_0xe4bc[488]](_0x5d2ax9)+_0xe4bc[168];this[_0xe4bc[983]][_0xe4bc[124]][_0xe4bc[125]]=Math[_0xe4bc[488]](_0x5d2ax4)+_0xe4bc[168];this[_0xe4bc[983]][_0xe4bc[124]][_0xe4bc[187]]=_0xe4bc[189]};this[_0xe4bc[987]]= new mxPoint(_0x5d2ax9,_0x5d2ax4)};mxDragSource[_0xe4bc[202]][_0xe4bc[1008]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){this[_0xe4bc[981]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9);_0x5d2ax2[_0xe4bc[526]][_0xe4bc[393]]()};function mxToolbar(_0x5d2ax2){this[_0xe4bc[526]]=_0x5d2ax2}mxToolbar[_0xe4bc[202]]= new mxEventSource;mxToolbar[_0xe4bc[202]][_0xe4bc[196]]=mxToolbar;mxToolbar[_0xe4bc[202]][_0xe4bc[526]]=null;mxToolbar[_0xe4bc[202]][_0xe4bc[984]]= !0;mxToolbar[_0xe4bc[202]][_0xe4bc[1023]]= !1;mxToolbar[_0xe4bc[202]][_0xe4bc[1024]]= !0;mxToolbar[_0xe4bc[202]][_0xe4bc[1025]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa){var _0x5d2ax12=document[_0xe4bc[55]](null!=_0x5d2ax3?_0xe4bc[466]:_0xe4bc[172]),_0x5d2ax13=_0x5d2ax9||(null!=_0x5d2axa?_0xe4bc[1026]:_0xe4bc[1027]);_0x5d2ax12[_0xe4bc[926]]=_0x5d2ax13;_0x5d2ax12[_0xe4bc[57]](_0xe4bc[390],_0x5d2ax3);null!=_0x5d2ax2&&(null!=_0x5d2ax3?_0x5d2ax12[_0xe4bc[57]](_0xe4bc[924],_0x5d2ax2):mxUtils[_0xe4bc[53]](_0x5d2ax12,_0x5d2ax2));this[_0xe4bc[526]][_0xe4bc[62]](_0x5d2ax12);null!=_0x5d2ax4&&(mxEvent[_0xe4bc[169]](_0x5d2ax12,_0xe4bc[173],_0x5d2ax4),mxClient[_0xe4bc[754]]&&mxEvent[_0xe4bc[169]](_0x5d2ax12,_0xe4bc[757],_0x5d2ax4));_0x5d2ax2=mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){null!=_0x5d2ax5?_0x5d2ax12[_0xe4bc[57]](_0xe4bc[390],_0x5d2ax3):_0x5d2ax12[_0xe4bc[124]][_0xe4bc[1028]]=_0xe4bc[110]});mxEvent[_0xe4bc[759]](_0x5d2ax12,mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){null!=_0x5d2ax5?_0x5d2ax12[_0xe4bc[57]](_0xe4bc[390],_0x5d2ax5):_0x5d2ax12[_0xe4bc[124]][_0xe4bc[1028]]=_0xe4bc[579];if(null!=_0x5d2axa){null==this[_0xe4bc[1029]]&&(this[_0xe4bc[1029]]= new mxPopupMenu,this[_0xe4bc[1029]][_0xe4bc[176]]());var _0x5d2ax3=this[_0xe4bc[1030]];this[_0xe4bc[1029]][_0xe4bc[1031]]()&&this[_0xe4bc[1029]][_0xe4bc[1032]]();_0x5d2ax3!=_0x5d2ax12&&(this[_0xe4bc[1030]]=_0x5d2ax12,this[_0xe4bc[1029]][_0xe4bc[1033]]=_0x5d2axa,_0x5d2ax3= new mxPoint(_0x5d2ax12[_0xe4bc[358]],_0x5d2ax12[_0xe4bc[362]]+_0x5d2ax12[_0xe4bc[167]]),this[_0xe4bc[1029]][_0xe4bc[152]](_0x5d2ax3[_0xe4bc[235]],_0x5d2ax3[_0xe4bc[236]],null,_0x5d2ax2),this[_0xe4bc[1029]][_0xe4bc[1031]]()&&(_0x5d2ax12[_0xe4bc[926]]=_0x5d2ax13+_0xe4bc[1034],this[_0xe4bc[1029]][_0xe4bc[1032]]=function(){mxPopupMenu[_0xe4bc[202]][_0xe4bc[1032]][_0xe4bc[183]](this);_0x5d2ax12[_0xe4bc[926]]=_0x5d2ax13;this[_0xe4bc[1030]]=null}))}}),null,_0x5d2ax2);mxEvent[_0xe4bc[169]](_0x5d2ax12,_0xe4bc[1035],_0x5d2ax2);return _0x5d2ax12};mxToolbar[_0xe4bc[202]][_0xe4bc[970]]=function(_0x5d2ax2){var _0x5d2ax3=document[_0xe4bc[55]](_0xe4bc[485]);_0x5d2ax3[_0xe4bc[124]][_0xe4bc[495]]=_0xe4bc[497];_0x5d2ax3[_0xe4bc[926]]=_0xe4bc[1036];var _0x5d2ax4=document[_0xe4bc[55]](_0xe4bc[804]);_0x5d2ax4[_0xe4bc[926]]=_0x5d2ax2||_0xe4bc[1037];_0x5d2ax3[_0xe4bc[62]](_0x5d2ax4);this[_0xe4bc[526]][_0xe4bc[62]](_0x5d2ax3);return _0x5d2ax4};mxToolbar[_0xe4bc[202]][_0xe4bc[1038]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=document[_0xe4bc[55]](_0xe4bc[804]);_0x5d2ax4[_0xe4bc[926]]=_0x5d2ax3||_0xe4bc[1037];this[_0xe4bc[972]](_0x5d2ax4,_0x5d2ax2,null);mxEvent[_0xe4bc[169]](_0x5d2ax4,_0xe4bc[826],function(_0x5d2ax2){var _0x5d2ax3=_0x5d2ax4[_0xe4bc[1040]][_0x5d2ax4[_0xe4bc[1039]]];_0x5d2ax4[_0xe4bc[1039]]=0;null!=_0x5d2ax3[_0xe4bc[1041]]&&_0x5d2ax3[_0xe4bc[1041]](_0x5d2ax2)});this[_0xe4bc[526]][_0xe4bc[62]](_0x5d2ax4);return _0x5d2ax4};mxToolbar[_0xe4bc[202]][_0xe4bc[972]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){var _0x5d2ax5=document[_0xe4bc[55]](_0xe4bc[973]);mxUtils[_0xe4bc[171]](_0x5d2ax5,_0x5d2ax3);_0xe4bc[279]== typeof _0x5d2ax4?_0x5d2ax5[_0xe4bc[1041]]=_0x5d2ax4:_0x5d2ax5[_0xe4bc[57]](_0xe4bc[131],_0x5d2ax4);_0x5d2ax2[_0xe4bc[62]](_0x5d2ax5);return _0x5d2ax5};mxToolbar[_0xe4bc[202]][_0xe4bc[1042]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){var _0x5d2axa=document[_0xe4bc[55]](_0xe4bc[466]);_0x5d2axa[_0xe4bc[1043]]=_0x5d2ax9||_0xe4bc[1026];_0x5d2axa[_0xe4bc[926]]=_0x5d2axa[_0xe4bc[1043]];_0x5d2axa[_0xe4bc[57]](_0xe4bc[390],_0x5d2ax3);_0x5d2axa[_0xe4bc[1044]]=_0x5d2ax5;null!=_0x5d2ax2&&_0x5d2axa[_0xe4bc[57]](_0xe4bc[924],_0x5d2ax2);mxEvent[_0xe4bc[169]](_0x5d2axa,_0xe4bc[173],mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){_0x5d2ax2=this[_0xe4bc[1045]][_0xe4bc[1044]];null!=_0x5d2ax2?(this[_0xe4bc[1045]][_0xe4bc[1044]]=this[_0xe4bc[1045]][_0xe4bc[284]](_0xe4bc[390]),this[_0xe4bc[1045]][_0xe4bc[57]](_0xe4bc[390],_0x5d2ax2)):this[_0xe4bc[1045]][_0xe4bc[926]]=this[_0xe4bc[1045]][_0xe4bc[1043]];this[_0xe4bc[1024]]&&(this[_0xe4bc[1046]]=_0x5d2axa);this[_0xe4bc[1045]]=_0x5d2axa;_0x5d2ax2=_0x5d2axa[_0xe4bc[1044]];null!=_0x5d2ax2?(_0x5d2axa[_0xe4bc[1044]]=_0x5d2axa[_0xe4bc[284]](_0xe4bc[390]),_0x5d2axa[_0xe4bc[57]](_0xe4bc[390],_0x5d2ax2)):_0x5d2axa[_0xe4bc[926]]=_0x5d2axa[_0xe4bc[1043]]+_0xe4bc[1034];this[_0xe4bc[746]]( new mxEventObject(mxEvent.SELECT));_0x5d2ax4()}));this[_0xe4bc[526]][_0xe4bc[62]](_0x5d2axa);null==this[_0xe4bc[1046]]&&(this[_0xe4bc[1046]]=_0x5d2axa,this[_0xe4bc[1047]](_0x5d2axa),_0x5d2ax4());return _0x5d2axa};mxToolbar[_0xe4bc[202]][_0xe4bc[1048]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa){_0x5d2axa=null!=_0x5d2axa?_0x5d2axa:!0;var _0x5d2ax12=document[_0xe4bc[55]](null!=_0x5d2ax3?_0xe4bc[466]:_0xe4bc[172]);_0x5d2ax12[_0xe4bc[1043]]=_0x5d2ax9||_0xe4bc[1026];_0x5d2ax12[_0xe4bc[926]]=_0x5d2ax12[_0xe4bc[1043]];_0x5d2ax12[_0xe4bc[57]](_0xe4bc[390],_0x5d2ax3);_0x5d2ax12[_0xe4bc[1044]]=_0x5d2ax5;null!=_0x5d2ax2&&_0x5d2ax12[_0xe4bc[57]](_0xe4bc[924],_0x5d2ax2);this[_0xe4bc[984]]&&_0x5d2axa&&(mxEvent[_0xe4bc[169]](_0x5d2ax12,_0xe4bc[173],mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){this[_0xe4bc[1047]](_0x5d2ax12,_0x5d2ax4);this[_0xe4bc[1023]]= !1})),mxEvent[_0xe4bc[169]](_0x5d2ax12,_0xe4bc[760],mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){this[_0xe4bc[1047]](_0x5d2ax12,_0x5d2ax4);this[_0xe4bc[1023]]= !0})),null==this[_0xe4bc[1046]]&&(this[_0xe4bc[1046]]=_0x5d2ax12,this[_0xe4bc[1049]]=_0x5d2ax4,this[_0xe4bc[1047]](_0x5d2ax12,_0x5d2ax4)));this[_0xe4bc[526]][_0xe4bc[62]](_0x5d2ax12);return _0x5d2ax12};mxToolbar[_0xe4bc[202]][_0xe4bc[1047]]=function(_0x5d2ax2,_0x5d2ax3){if(this[_0xe4bc[1045]]!=_0x5d2ax2){if(null!=this[_0xe4bc[1045]]){var _0x5d2ax4=this[_0xe4bc[1045]][_0xe4bc[1044]];null!=_0x5d2ax4?(this[_0xe4bc[1045]][_0xe4bc[1044]]=this[_0xe4bc[1045]][_0xe4bc[284]](_0xe4bc[390]),this[_0xe4bc[1045]][_0xe4bc[57]](_0xe4bc[390],_0x5d2ax4)):this[_0xe4bc[1045]][_0xe4bc[926]]=this[_0xe4bc[1045]][_0xe4bc[1043]]};this[_0xe4bc[1045]]=_0x5d2ax2;_0x5d2ax4=this[_0xe4bc[1045]][_0xe4bc[1044]];null!=_0x5d2ax4?(this[_0xe4bc[1045]][_0xe4bc[1044]]=this[_0xe4bc[1045]][_0xe4bc[284]](_0xe4bc[390]),this[_0xe4bc[1045]][_0xe4bc[57]](_0xe4bc[390],_0x5d2ax4)):this[_0xe4bc[1045]][_0xe4bc[926]]=this[_0xe4bc[1045]][_0xe4bc[1043]]+_0xe4bc[1034];this[_0xe4bc[746]]( new mxEventObject(mxEvent.SELECT,_0xe4bc[279],_0x5d2ax3))}};mxToolbar[_0xe4bc[202]][_0xe4bc[1050]]=function(_0x5d2ax2){(_0x5d2ax2||!this[_0xe4bc[1023]])&&this[_0xe4bc[1045]]!=this[_0xe4bc[1046]]&&this[_0xe4bc[1047]](this[_0xe4bc[1046]],this[_0xe4bc[1049]])};mxToolbar[_0xe4bc[202]][_0xe4bc[1051]]=function(_0x5d2ax2){return this[_0xe4bc[1025]](null,_0x5d2ax2,null)};mxToolbar[_0xe4bc[202]][_0xe4bc[1052]]=function(){mxUtils[_0xe4bc[345]](this[_0xe4bc[526]])};mxToolbar[_0xe4bc[202]][_0xe4bc[1053]]=function(){var _0x5d2ax2=document[_0xe4bc[55]](_0xe4bc[1054]);_0x5d2ax2[_0xe4bc[124]][_0xe4bc[941]]=_0xe4bc[1055];_0x5d2ax2[_0xe4bc[57]](_0xe4bc[803],_0xe4bc[500]);this[_0xe4bc[526]][_0xe4bc[62]](_0x5d2ax2)};mxToolbar[_0xe4bc[202]][_0xe4bc[515]]=function(){mxEvent[_0xe4bc[762]](this[_0xe4bc[526]]);this[_0xe4bc[1045]]=this[_0xe4bc[1049]]=this[_0xe4bc[1046]]=this[_0xe4bc[526]]=null;null!=this[_0xe4bc[1029]]&&this[_0xe4bc[1029]][_0xe4bc[515]]()};function mxSession(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){this[_0xe4bc[251]]=_0x5d2ax2;this[_0xe4bc[1056]]=_0x5d2ax3;this[_0xe4bc[1057]]=_0x5d2ax4;this[_0xe4bc[1058]]=_0x5d2ax5;null!=_0x5d2ax2&&(this[_0xe4bc[1059]]= new mxCodec,this[_0xe4bc[1059]][_0xe4bc[1060]]=function(_0x5d2ax3){return _0x5d2ax2[_0xe4bc[736]](_0x5d2ax3)});_0x5d2ax2[_0xe4bc[169]](mxEvent.NOTIFY,mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=_0x5d2ax3[_0xe4bc[720]](_0xe4bc[1061]);(null!=_0x5d2ax4&&this[_0xe4bc[143]]||this[_0xe4bc[1062]]&&!this[_0xe4bc[1063]])&&this[_0xe4bc[827]](_0xe4bc[1064]+this[_0xe4bc[1067]](_0x5d2ax4[_0xe4bc[1065]],_0x5d2ax4[_0xe4bc[1066]])+_0xe4bc[1068])}))}mxSession[_0xe4bc[202]]= new mxEventSource;mxSession[_0xe4bc[202]][_0xe4bc[196]]=mxSession;mxSession[_0xe4bc[202]][_0xe4bc[251]]=null;mxSession[_0xe4bc[202]][_0xe4bc[1056]]=null;mxSession[_0xe4bc[202]][_0xe4bc[1057]]=null;mxSession[_0xe4bc[202]][_0xe4bc[1058]]=null;mxSession[_0xe4bc[202]][_0xe4bc[1059]]=null;mxSession[_0xe4bc[202]][_0xe4bc[1069]]=_0xe4bc[336];mxSession[_0xe4bc[202]][_0xe4bc[1070]]= !0;mxSession[_0xe4bc[202]][_0xe4bc[1071]]= !0;mxSession[_0xe4bc[202]][_0xe4bc[1072]]=0;mxSession[_0xe4bc[202]][_0xe4bc[1073]]=0;mxSession[_0xe4bc[202]][_0xe4bc[143]]= !1;mxSession[_0xe4bc[202]][_0xe4bc[1062]]= !1;mxSession[_0xe4bc[202]][_0xe4bc[1063]]= !1;mxSession[_0xe4bc[202]][_0xe4bc[1074]]= !1;mxSession[_0xe4bc[202]][_0xe4bc[861]]=function(){this[_0xe4bc[143]]?(this[_0xe4bc[1062]]= !0,this[_0xe4bc[746]]( new mxEventObject(mxEvent.CONNECT))):this[_0xe4bc[1062]]||this[_0xe4bc[203]](this[_0xe4bc[1056]],mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){this[_0xe4bc[1062]]= !0;this[_0xe4bc[746]]( new mxEventObject(mxEvent.CONNECT));this[_0xe4bc[1075]]()}))};mxSession[_0xe4bc[202]][_0xe4bc[809]]=function(){this[_0xe4bc[1062]]&&!this[_0xe4bc[1063]]&&(this[_0xe4bc[1063]]= !0,this[_0xe4bc[746]]( new mxEventObject(mxEvent.SUSPEND)))};mxSession[_0xe4bc[202]][_0xe4bc[810]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){this[_0xe4bc[1062]]&&this[_0xe4bc[1063]]&&(this[_0xe4bc[1063]]= !1,this[_0xe4bc[746]]( new mxEventObject(mxEvent.RESUME)),this[_0xe4bc[1074]]||this[_0xe4bc[1075]]())};mxSession[_0xe4bc[202]][_0xe4bc[1076]]=function(_0x5d2ax2){this[_0xe4bc[1062]]&&(this[_0xe4bc[1062]]= !1);this[_0xe4bc[746]]( new mxEventObject(mxEvent.DISCONNECT,_0xe4bc[1077],_0x5d2ax2))};mxSession[_0xe4bc[202]][_0xe4bc[1075]]=function(){this[_0xe4bc[1062]]&&!this[_0xe4bc[1063]]&&null!=this[_0xe4bc[1057]]?(this[_0xe4bc[1074]]= !0,this[_0xe4bc[203]](this[_0xe4bc[1057]],mxUtils[_0xe4bc[885]](this,function(){this[_0xe4bc[1075]]()}))):this[_0xe4bc[1074]]= !1};mxSession[_0xe4bc[202]][_0xe4bc[827]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){null!=_0x5d2ax2&&0<_0x5d2ax2[_0xe4bc[67]]&&(null!=this[_0xe4bc[1058]]&&(this[_0xe4bc[143]]?(mxLog[_0xe4bc[539]](),mxLog[_0xe4bc[143]](_0xe4bc[1078]+this[_0xe4bc[1058]]+_0xe4bc[1079]+_0x5d2ax2)):(_0x5d2ax2=_0xe4bc[1080]+_0x5d2ax2+_0xe4bc[1081],this[_0xe4bc[1070]]&&(_0x5d2ax2=encodeURIComponent(_0x5d2ax2)),mxUtils[_0xe4bc[814]](this[_0xe4bc[1058]],_0xe4bc[1082]+_0x5d2ax2,_0x5d2ax3,_0x5d2ax4))),this[_0xe4bc[1072]]+=_0x5d2ax2[_0xe4bc[67]],this[_0xe4bc[746]]( new mxEventObject(mxEvent.NOTIFY,_0xe4bc[863],this[_0xe4bc[1058]],_0xe4bc[338],_0x5d2ax2)))};mxSession[_0xe4bc[202]][_0xe4bc[203]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){if(_0xe4bc[82]!= typeof mxUtils){var _0x5d2ax5=mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){null!=_0x5d2ax4?_0x5d2ax4(_0x5d2ax2):this[_0xe4bc[1076]](_0x5d2ax2)});mxUtils[_0xe4bc[203]](_0x5d2ax2,mxUtils[_0xe4bc[885]](this,function(_0x5d2ax4){if(_0xe4bc[82]!= typeof mxUtils){if(_0x5d2ax4[_0xe4bc[220]]()&&404!=_0x5d2ax4[_0xe4bc[878]]()){if(this[_0xe4bc[1073]]+=_0x5d2ax4[_0xe4bc[221]]()[_0xe4bc[67]],this[_0xe4bc[746]]( new mxEventObject(mxEvent.GET,_0xe4bc[863],_0x5d2ax2,_0xe4bc[870],_0x5d2ax4)),this[_0xe4bc[1083]](_0x5d2ax4)){if(0<_0x5d2ax4[_0xe4bc[221]]()[_0xe4bc[67]]){var _0x5d2axa=_0x5d2ax4[_0xe4bc[874]]();null==_0x5d2axa?_0x5d2ax5(_0xe4bc[1084]+_0x5d2ax4[_0xe4bc[221]]()):this[_0xe4bc[806]](_0x5d2axa)};null!=_0x5d2ax3&&_0x5d2ax3(_0x5d2ax4)}}else {_0x5d2ax5(_0xe4bc[1085])}}}),function(_0x5d2ax2){_0x5d2ax5(_0xe4bc[1086])})}};mxSession[_0xe4bc[202]][_0xe4bc[1083]]=function(_0x5d2ax2){return 0>_0x5d2ax2[_0xe4bc[221]]()[_0xe4bc[2]](_0xe4bc[1087])};mxSession[_0xe4bc[202]][_0xe4bc[1067]]=function(_0x5d2ax2,_0x5d2ax3){for(var _0x5d2ax4=_0xe4bc[110],_0x5d2ax5=_0x5d2ax3?-1:1,_0x5d2ax9=_0x5d2ax3?_0x5d2ax2[_0xe4bc[67]]-1:0;0<=_0x5d2ax9&&_0x5d2ax9<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax9+=_0x5d2ax5){var _0x5d2axa=this[_0xe4bc[1059]][_0xe4bc[514]](_0x5d2ax2[_0x5d2ax9]),_0x5d2ax4=_0x5d2ax4+mxUtils[_0xe4bc[875]](_0x5d2axa,this[_0xe4bc[1069]])};return _0x5d2ax4};mxSession[_0xe4bc[202]][_0xe4bc[806]]=function(_0x5d2ax2){if(null!=_0x5d2ax2&&_0x5d2ax2[_0xe4bc[288]]==mxConstants[_0xe4bc[289]]){var _0x5d2ax3=_0x5d2ax2[_0xe4bc[284]](_0xe4bc[1088]);null!=_0x5d2ax3&&(this[_0xe4bc[251]][_0xe4bc[1089]]=_0x5d2ax3+_0xe4bc[213]);for(_0x5d2ax3=_0x5d2ax2[_0xe4bc[285]];null!=_0x5d2ax3;){var _0x5d2ax4=_0x5d2ax3[_0xe4bc[301]][_0xe4bc[216]]();_0xe4bc[724]==_0x5d2ax4?this[_0xe4bc[1090]](_0x5d2ax3):_0xe4bc[1091]==_0x5d2ax4&&this[_0xe4bc[1092]](_0x5d2ax3);_0x5d2ax3=_0x5d2ax3[_0xe4bc[287]]};this[_0xe4bc[746]]( new mxEventObject(mxEvent.RECEIVE,_0xe4bc[252],_0x5d2ax2))}};mxSession[_0xe4bc[202]][_0xe4bc[1090]]=function(_0x5d2ax2){( new mxCodec(_0x5d2ax2[_0xe4bc[295]]))[_0xe4bc[1093]](_0x5d2ax2[_0xe4bc[285]],this[_0xe4bc[251]])};mxSession[_0xe4bc[202]][_0xe4bc[1092]]=function(_0x5d2ax2){for(_0x5d2ax2=_0x5d2ax2[_0xe4bc[285]];null!=_0x5d2ax2;){_0xe4bc[1061]==_0x5d2ax2[_0xe4bc[301]]&&this[_0xe4bc[1094]](_0x5d2ax2),_0x5d2ax2=_0x5d2ax2[_0xe4bc[287]]}};mxSession[_0xe4bc[202]][_0xe4bc[1094]]=function(_0x5d2ax2){_0x5d2ax2=this[_0xe4bc[1095]](_0x5d2ax2);if(0<_0x5d2ax2[_0xe4bc[67]]){var _0x5d2ax3=this[_0xe4bc[1096]](_0x5d2ax2);this[_0xe4bc[251]][_0xe4bc[746]]( new mxEventObject(mxEvent.CHANGE,_0xe4bc[1061],_0x5d2ax3,_0xe4bc[1065],_0x5d2ax2));this[_0xe4bc[251]][_0xe4bc[746]]( new mxEventObject(mxEvent.UNDO,_0xe4bc[1061],_0x5d2ax3));this[_0xe4bc[746]]( new mxEventObject(mxEvent.FIRED,_0xe4bc[1061],_0x5d2ax3))}};mxSession[_0xe4bc[202]][_0xe4bc[1096]]=function(_0x5d2ax2){var _0x5d2ax3= new mxUndoableEdit(this[_0xe4bc[251]],this[_0xe4bc[1071]]);_0x5d2ax3[_0xe4bc[1065]]=_0x5d2ax2;_0x5d2ax3[_0xe4bc[827]]=function(){_0x5d2ax3[_0xe4bc[1097]][_0xe4bc[746]]( new mxEventObject(mxEvent.CHANGE,_0xe4bc[1061],_0x5d2ax3,_0xe4bc[1065],_0x5d2ax3[_0xe4bc[1065]]));_0x5d2ax3[_0xe4bc[1097]][_0xe4bc[746]]( new mxEventObject(mxEvent.NOTIFY,_0xe4bc[1061],_0x5d2ax3,_0xe4bc[1065],_0x5d2ax3[_0xe4bc[1065]]))};return _0x5d2ax3};mxSession[_0xe4bc[202]][_0xe4bc[1095]]=function(_0x5d2ax2){this[_0xe4bc[1059]][_0xe4bc[395]]=_0x5d2ax2[_0xe4bc[295]];var _0x5d2ax3=[];for(_0x5d2ax2=_0x5d2ax2[_0xe4bc[285]];null!=_0x5d2ax2;){var _0x5d2ax4=this[_0xe4bc[1098]](_0x5d2ax2);null!=_0x5d2ax4&&_0x5d2ax3[_0xe4bc[207]](_0x5d2ax4);_0x5d2ax2=_0x5d2ax2[_0xe4bc[287]]};return _0x5d2ax3};mxSession[_0xe4bc[202]][_0xe4bc[1098]]=function(_0x5d2ax2){var _0x5d2ax3=null;_0x5d2ax2[_0xe4bc[288]]==mxConstants[_0xe4bc[289]]&&(_0x5d2ax3=_0xe4bc[1099]==_0x5d2ax2[_0xe4bc[301]]?( new mxCodec(_0x5d2ax2[_0xe4bc[295]]))[_0xe4bc[1093]](_0x5d2ax2):this[_0xe4bc[1059]][_0xe4bc[1093]](_0x5d2ax2),null!=_0x5d2ax3&&(_0x5d2ax3[_0xe4bc[251]]=this[_0xe4bc[251]],_0x5d2ax3[_0xe4bc[350]](),_0xe4bc[1100]==_0x5d2ax2[_0xe4bc[301]]&&null==_0x5d2ax3[_0xe4bc[1101]]&&this[_0xe4bc[1102]](_0x5d2ax3[_0xe4bc[247]])));return _0x5d2ax3};mxSession[_0xe4bc[202]][_0xe4bc[1102]]=function(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[1059]][_0xe4bc[1104]](_0x5d2ax2[_0xe4bc[1103]](),_0x5d2ax2);for(var _0x5d2ax4=this[_0xe4bc[251]][_0xe4bc[262]](_0x5d2ax2),_0x5d2ax5=0;_0x5d2ax5<_0x5d2ax4;_0x5d2ax5++){this[_0xe4bc[1102]](this[_0xe4bc[251]][_0xe4bc[263]](_0x5d2ax2,_0x5d2ax5))}};function mxUndoableEdit(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[1097]]=_0x5d2ax2;this[_0xe4bc[1065]]=[];this[_0xe4bc[1105]]=null!=_0x5d2ax3?_0x5d2ax3:!0}mxUndoableEdit[_0xe4bc[202]][_0xe4bc[1097]]=null;mxUndoableEdit[_0xe4bc[202]][_0xe4bc[1065]]=null;mxUndoableEdit[_0xe4bc[202]][_0xe4bc[1105]]=null;mxUndoableEdit[_0xe4bc[202]][_0xe4bc[1066]]= !1;mxUndoableEdit[_0xe4bc[202]][_0xe4bc[1106]]= !1;mxUndoableEdit[_0xe4bc[202]][_0xe4bc[1107]]=function(){return 0==this[_0xe4bc[1065]][_0xe4bc[67]]};mxUndoableEdit[_0xe4bc[202]][_0xe4bc[1108]]=function(){return this[_0xe4bc[1105]]};mxUndoableEdit[_0xe4bc[202]][_0xe4bc[99]]=function(_0x5d2ax2){this[_0xe4bc[1065]][_0xe4bc[207]](_0x5d2ax2)};mxUndoableEdit[_0xe4bc[202]][_0xe4bc[827]]=function(){};mxUndoableEdit[_0xe4bc[202]][_0xe4bc[1109]]=function(){};mxUndoableEdit[_0xe4bc[202]][_0xe4bc[824]]=function(){if(!this[_0xe4bc[1066]]){this[_0xe4bc[1097]][_0xe4bc[746]]( new mxEventObject(mxEvent.START_EDIT));for(var _0x5d2ax2=this[_0xe4bc[1065]][_0xe4bc[67]]-1;0<=_0x5d2ax2;_0x5d2ax2--){var _0x5d2ax3=this[_0xe4bc[1065]][_0x5d2ax2];null!=_0x5d2ax3[_0xe4bc[350]]?_0x5d2ax3[_0xe4bc[350]]():null!=_0x5d2ax3[_0xe4bc[824]]&&_0x5d2ax3[_0xe4bc[824]]();this[_0xe4bc[1097]][_0xe4bc[746]]( new mxEventObject(mxEvent.EXECUTED,_0xe4bc[826],_0x5d2ax3))};this[_0xe4bc[1066]]= !0;this[_0xe4bc[1106]]= !1;this[_0xe4bc[1097]][_0xe4bc[746]]( new mxEventObject(mxEvent.END_EDIT))};this[_0xe4bc[827]]()};mxUndoableEdit[_0xe4bc[202]][_0xe4bc[825]]=function(){if(!this[_0xe4bc[1106]]){this[_0xe4bc[1097]][_0xe4bc[746]]( new mxEventObject(mxEvent.START_EDIT));for(var _0x5d2ax2=this[_0xe4bc[1065]][_0xe4bc[67]],_0x5d2ax3=0;_0x5d2ax3<_0x5d2ax2;_0x5d2ax3++){var _0x5d2ax4=this[_0xe4bc[1065]][_0x5d2ax3];null!=_0x5d2ax4[_0xe4bc[350]]?_0x5d2ax4[_0xe4bc[350]]():null!=_0x5d2ax4[_0xe4bc[825]]&&_0x5d2ax4[_0xe4bc[825]]();this[_0xe4bc[1097]][_0xe4bc[746]]( new mxEventObject(mxEvent.EXECUTED,_0xe4bc[826],_0x5d2ax4))};this[_0xe4bc[1066]]= !1;this[_0xe4bc[1106]]= !0;this[_0xe4bc[1097]][_0xe4bc[746]]( new mxEventObject(mxEvent.END_EDIT))};this[_0xe4bc[827]]()};function mxUndoManager(_0x5d2ax2){this[_0xe4bc[803]]=null!=_0x5d2ax2?_0x5d2ax2:100;this[_0xe4bc[200]]()}mxUndoManager[_0xe4bc[202]]= new mxEventSource;mxUndoManager[_0xe4bc[202]][_0xe4bc[196]]=mxUndoManager;mxUndoManager[_0xe4bc[202]][_0xe4bc[803]]=null;mxUndoManager[_0xe4bc[202]][_0xe4bc[1110]]=null;mxUndoManager[_0xe4bc[202]][_0xe4bc[1111]]=0;mxUndoManager[_0xe4bc[202]][_0xe4bc[1107]]=function(){return 0==this[_0xe4bc[1110]][_0xe4bc[67]]};mxUndoManager[_0xe4bc[202]][_0xe4bc[200]]=function(){this[_0xe4bc[1110]]=[];this[_0xe4bc[1111]]=0;this[_0xe4bc[746]]( new mxEventObject(mxEvent.CLEAR))};mxUndoManager[_0xe4bc[202]][_0xe4bc[1112]]=function(){return 0<this[_0xe4bc[1111]]};mxUndoManager[_0xe4bc[202]][_0xe4bc[824]]=function(){for(;0<this[_0xe4bc[1111]];){var _0x5d2ax2=this[_0xe4bc[1110]][--this[_0xe4bc[1111]]];_0x5d2ax2[_0xe4bc[824]]();if(_0x5d2ax2[_0xe4bc[1108]]()){this[_0xe4bc[746]]( new mxEventObject(mxEvent.UNDO,_0xe4bc[1061],_0x5d2ax2));break}}};mxUndoManager[_0xe4bc[202]][_0xe4bc[1113]]=function(){return this[_0xe4bc[1111]]<this[_0xe4bc[1110]][_0xe4bc[67]]};mxUndoManager[_0xe4bc[202]][_0xe4bc[825]]=function(){for(var _0x5d2ax2=this[_0xe4bc[1110]][_0xe4bc[67]];this[_0xe4bc[1111]]<_0x5d2ax2;){var _0x5d2ax3=this[_0xe4bc[1110]][this[_0xe4bc[1111]]++];_0x5d2ax3[_0xe4bc[825]]();if(_0x5d2ax3[_0xe4bc[1108]]()){this[_0xe4bc[746]]( new mxEventObject(mxEvent.REDO,_0xe4bc[1061],_0x5d2ax3));break}}};mxUndoManager[_0xe4bc[202]][_0xe4bc[1114]]=function(_0x5d2ax2){this[_0xe4bc[330]]();0<this[_0xe4bc[803]]&&this[_0xe4bc[803]]==this[_0xe4bc[1110]][_0xe4bc[67]]&&this[_0xe4bc[1110]][_0xe4bc[1115]]();this[_0xe4bc[1110]][_0xe4bc[207]](_0x5d2ax2);this[_0xe4bc[1111]]=this[_0xe4bc[1110]][_0xe4bc[67]];this[_0xe4bc[746]]( new mxEventObject(mxEvent.ADD,_0xe4bc[1061],_0x5d2ax2))};mxUndoManager[_0xe4bc[202]][_0xe4bc[330]]=function(){if(this[_0xe4bc[1110]][_0xe4bc[67]]>this[_0xe4bc[1111]]){for(var _0x5d2ax2=this[_0xe4bc[1110]][_0xe4bc[300]](this[_0xe4bc[1111]],this[_0xe4bc[1110]][_0xe4bc[67]]-this[_0xe4bc[1111]]),_0x5d2ax3=0;_0x5d2ax3<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax3++){_0x5d2ax2[_0x5d2ax3][_0xe4bc[1109]]()}}};var mxUrlConverter=function(_0x5d2ax2){var _0x5d2ax3=!0,_0x5d2ax4=null,_0x5d2ax5=null;return {isEnabled:function(){return _0x5d2ax3},setEnabled:function(_0x5d2ax2){_0x5d2ax3=_0x5d2ax2},getBaseUrl:function(){return _0x5d2ax4},setBaseUrl:function(_0x5d2ax2){_0x5d2ax4=_0x5d2ax2},getBaseDomain:function(){return _0x5d2ax4},setBaseDomain:function(_0x5d2ax2){_0x5d2ax4=_0x5d2ax2},isRelativeUrl:function(_0x5d2ax2){return _0xe4bc[43]!=_0x5d2ax2[_0xe4bc[85]](0,7)&&_0xe4bc[46]!=_0x5d2ax2[_0xe4bc[85]](0,8)&&_0xe4bc[1116]!=_0x5d2ax2[_0xe4bc[85]](0,10)},convert:function(_0x5d2ax2){if(_0x5d2ax3&&this[_0xe4bc[1117]](_0x5d2ax2)){if(null==_0x5d2ax4){_0x5d2ax5=location[_0xe4bc[1118]]+_0xe4bc[1119]+location[_0xe4bc[1120]];_0x5d2ax4=_0x5d2ax5+location[_0xe4bc[1121]];var _0x5d2axa=_0x5d2ax4[_0xe4bc[1122]](_0xe4bc[84]);0<_0x5d2axa&&(_0x5d2ax4=_0x5d2ax4[_0xe4bc[85]](0,_0x5d2axa+1))};_0x5d2ax2=_0xe4bc[84]==_0x5d2ax2[_0xe4bc[225]](0)?_0x5d2ax5+_0x5d2ax2:_0x5d2ax4+_0x5d2ax2};return _0x5d2ax2}}};function mxPanningManager(_0x5d2ax2){this[_0xe4bc[1123]]=null;this[_0xe4bc[1124]]= !1;this[_0xe4bc[1125]]=this[_0xe4bc[1126]]=this[_0xe4bc[1127]]=this[_0xe4bc[1128]]=this[_0xe4bc[1129]]=this[_0xe4bc[1130]]=0;this[_0xe4bc[1131]]= !1;this[_0xe4bc[190]]=this[_0xe4bc[360]]=0;this[_0xe4bc[1132]]={mouseDown:function(_0x5d2ax2,_0x5d2ax3){},mouseMove:function(_0x5d2ax2,_0x5d2ax3){},mouseUp:mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[1124]]&&this[_0xe4bc[1076]]()})};_0x5d2ax2[_0xe4bc[1133]](this[_0xe4bc[1132]]);mxEvent[_0xe4bc[169]](document,_0xe4bc[753],mxUtils[_0xe4bc[885]](this,function(){this[_0xe4bc[1124]]&&this[_0xe4bc[1076]]()}));var _0x5d2ax3=mxUtils[_0xe4bc[885]](this,function(){this[_0xe4bc[1131]]=mxUtils[_0xe4bc[1134]](_0x5d2ax2[_0xe4bc[526]]);this[_0xe4bc[360]]=_0x5d2ax2[_0xe4bc[526]][_0xe4bc[360]];this[_0xe4bc[190]]=_0x5d2ax2[_0xe4bc[526]][_0xe4bc[190]];return window[_0xe4bc[1141]](mxUtils[_0xe4bc[885]](this,function(){this[_0xe4bc[1130]]-=this[_0xe4bc[1126]];this[_0xe4bc[1129]]-=this[_0xe4bc[1125]];if(this[_0xe4bc[1131]]){var _0x5d2ax3=-_0x5d2ax2[_0xe4bc[526]][_0xe4bc[360]]-Math[_0xe4bc[430]](this[_0xe4bc[1126]]),_0x5d2ax5=-_0x5d2ax2[_0xe4bc[526]][_0xe4bc[190]]-Math[_0xe4bc[430]](this[_0xe4bc[1125]]);_0x5d2ax2[_0xe4bc[1135]](_0x5d2ax3,_0x5d2ax5);_0x5d2ax2[_0xe4bc[1136]]=this[_0xe4bc[360]]-_0x5d2ax2[_0xe4bc[526]][_0xe4bc[360]];_0x5d2ax2[_0xe4bc[1137]]=this[_0xe4bc[190]]-_0x5d2ax2[_0xe4bc[526]][_0xe4bc[190]];_0x5d2ax2[_0xe4bc[746]]( new mxEventObject(mxEvent.PAN))}else {_0x5d2ax2[_0xe4bc[1135]](this[_0xe4bc[1138]](),this[_0xe4bc[1139]]())}}),this[_0xe4bc[1140]])});this[_0xe4bc[1142]]=function(){return active};this[_0xe4bc[1138]]=function(){return Math[_0xe4bc[488]](this[_0xe4bc[1130]])};this[_0xe4bc[1139]]=function(){return Math[_0xe4bc[488]](this[_0xe4bc[1129]])};this[_0xe4bc[861]]=function(){this[_0xe4bc[1128]]=_0x5d2ax2[_0xe4bc[441]][_0xe4bc[513]][_0xe4bc[235]];this[_0xe4bc[1127]]=_0x5d2ax2[_0xe4bc[441]][_0xe4bc[513]][_0xe4bc[236]];this[_0xe4bc[1124]]= !0};this[_0xe4bc[1143]]=function(_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa){this[_0xe4bc[1124]]||this[_0xe4bc[861]]();this[_0xe4bc[360]]=_0x5d2ax2[_0xe4bc[526]][_0xe4bc[360]];this[_0xe4bc[190]]=_0x5d2ax2[_0xe4bc[526]][_0xe4bc[190]];_0x5d2axa=null!=_0x5d2axa?_0x5d2axa:0;var _0x5d2ax12=_0x5d2ax2[_0xe4bc[526]];this[_0xe4bc[1126]]=_0x5d2ax4+(null!=_0x5d2ax9?_0x5d2ax9:0)-_0x5d2ax12[_0xe4bc[360]]-_0x5d2ax12[_0xe4bc[159]];0>this[_0xe4bc[1126]]&&Math[_0xe4bc[425]](this[_0xe4bc[1126]])<this[_0xe4bc[467]]?this[_0xe4bc[1126]]=this[_0xe4bc[467]]+this[_0xe4bc[1126]]:this[_0xe4bc[1126]]=this[_0xe4bc[1144]]?Math[_0xe4bc[160]](this[_0xe4bc[1126]],0):0;0==this[_0xe4bc[1126]]&&(this[_0xe4bc[1126]]=_0x5d2ax4-_0x5d2ax12[_0xe4bc[360]],this[_0xe4bc[1126]]=0<this[_0xe4bc[1126]]&&this[_0xe4bc[1126]]<this[_0xe4bc[467]]?this[_0xe4bc[1126]]-this[_0xe4bc[467]]:this[_0xe4bc[1144]]?Math[_0xe4bc[243]](0,this[_0xe4bc[1126]]):0);this[_0xe4bc[1125]]=_0x5d2ax5+_0x5d2axa-_0x5d2ax12[_0xe4bc[190]]-_0x5d2ax12[_0xe4bc[157]];0>this[_0xe4bc[1125]]&&Math[_0xe4bc[425]](this[_0xe4bc[1125]])<this[_0xe4bc[467]]?this[_0xe4bc[1125]]=this[_0xe4bc[467]]+this[_0xe4bc[1125]]:this[_0xe4bc[1125]]=this[_0xe4bc[1144]]?Math[_0xe4bc[160]](this[_0xe4bc[1125]],0):0;0==this[_0xe4bc[1125]]&&(this[_0xe4bc[1125]]=_0x5d2ax5-_0x5d2ax12[_0xe4bc[190]],this[_0xe4bc[1125]]=0<this[_0xe4bc[1125]]&&this[_0xe4bc[1125]]<this[_0xe4bc[467]]?this[_0xe4bc[1125]]-this[_0xe4bc[467]]:this[_0xe4bc[1144]]?Math[_0xe4bc[243]](0,this[_0xe4bc[1125]]):0);0!=this[_0xe4bc[1126]]||0!=this[_0xe4bc[1125]]?(this[_0xe4bc[1126]]*=this[_0xe4bc[1145]],this[_0xe4bc[1125]]*=this[_0xe4bc[1145]],null==this[_0xe4bc[1123]]&&(this[_0xe4bc[1123]]=_0x5d2ax3())):null!=this[_0xe4bc[1123]]&&(window[_0xe4bc[1146]](this[_0xe4bc[1123]]),this[_0xe4bc[1123]]=null)};this[_0xe4bc[1076]]=function(){if(this[_0xe4bc[1124]]){if(this[_0xe4bc[1124]]= !1,null!=this[_0xe4bc[1123]]&&(window[_0xe4bc[1146]](this[_0xe4bc[1123]]),this[_0xe4bc[1123]]=null),this[_0xe4bc[1129]]=this[_0xe4bc[1130]]=0,this[_0xe4bc[1131]]){_0x5d2ax2[_0xe4bc[1136]]=0,_0x5d2ax2[_0xe4bc[1137]]=0,_0x5d2ax2[_0xe4bc[746]]( new mxEventObject(mxEvent.PAN))}else {var _0x5d2ax3=_0x5d2ax2[_0xe4bc[1136]],_0x5d2ax5=_0x5d2ax2[_0xe4bc[1137]];if(0!=_0x5d2ax3||0!=_0x5d2ax5){_0x5d2ax2[_0xe4bc[1135]](0,0),_0x5d2ax2[_0xe4bc[441]][_0xe4bc[1147]](this[_0xe4bc[1128]]+_0x5d2ax3/_0x5d2ax2[_0xe4bc[441]][_0xe4bc[255]],this[_0xe4bc[1127]]+_0x5d2ax5/_0x5d2ax2[_0xe4bc[441]][_0xe4bc[255]])}}}};this[_0xe4bc[515]]=function(){_0x5d2ax2[_0xe4bc[1148]](this[_0xe4bc[1132]])}}mxPanningManager[_0xe4bc[202]][_0xe4bc[1145]]=1/6;mxPanningManager[_0xe4bc[202]][_0xe4bc[1140]]=10;mxPanningManager[_0xe4bc[202]][_0xe4bc[1144]]= !0;mxPanningManager[_0xe4bc[202]][_0xe4bc[467]]=0;function mxPopupMenu(_0x5d2ax2){this[_0xe4bc[1033]]=_0x5d2ax2;null!=_0x5d2ax2&&this[_0xe4bc[176]]()}mxPopupMenu[_0xe4bc[202]]= new mxEventSource;mxPopupMenu[_0xe4bc[202]][_0xe4bc[196]]=mxPopupMenu;mxPopupMenu[_0xe4bc[202]][_0xe4bc[1149]]=mxClient[_0xe4bc[88]]+_0xe4bc[1150];mxPopupMenu[_0xe4bc[202]][_0xe4bc[931]]=10006;mxPopupMenu[_0xe4bc[202]][_0xe4bc[1033]]=null;mxPopupMenu[_0xe4bc[202]][_0xe4bc[1151]]= !1;mxPopupMenu[_0xe4bc[202]][_0xe4bc[984]]= !0;mxPopupMenu[_0xe4bc[202]][_0xe4bc[1152]]=0;mxPopupMenu[_0xe4bc[202]][_0xe4bc[1153]]= !1;mxPopupMenu[_0xe4bc[202]][_0xe4bc[1154]]= !1;mxPopupMenu[_0xe4bc[202]][_0xe4bc[1155]]= !0;mxPopupMenu[_0xe4bc[202]][_0xe4bc[176]]=function(){this[_0xe4bc[116]]=document[_0xe4bc[55]](_0xe4bc[116]);this[_0xe4bc[116]][_0xe4bc[926]]=_0xe4bc[1156];this[_0xe4bc[120]]=document[_0xe4bc[55]](_0xe4bc[120]);this[_0xe4bc[116]][_0xe4bc[62]](this[_0xe4bc[120]]);this[_0xe4bc[485]]=document[_0xe4bc[55]](_0xe4bc[485]);this[_0xe4bc[485]][_0xe4bc[926]]=_0xe4bc[1156];this[_0xe4bc[485]][_0xe4bc[124]][_0xe4bc[495]]=_0xe4bc[497];this[_0xe4bc[485]][_0xe4bc[124]][_0xe4bc[931]]=this[_0xe4bc[931]];this[_0xe4bc[485]][_0xe4bc[62]](this[_0xe4bc[116]]);mxEvent[_0xe4bc[1157]](this[_0xe4bc[485]])};mxPopupMenu[_0xe4bc[202]][_0xe4bc[994]]=function(){return this[_0xe4bc[984]]};mxPopupMenu[_0xe4bc[202]][_0xe4bc[995]]=function(_0x5d2ax2){this[_0xe4bc[984]]=_0x5d2ax2};mxPopupMenu[_0xe4bc[202]][_0xe4bc[737]]=function(_0x5d2ax2){return _0x5d2ax2[_0xe4bc[737]]()||this[_0xe4bc[1151]]&&mxEvent[_0xe4bc[1158]](_0x5d2ax2[_0xe4bc[727]]())};mxPopupMenu[_0xe4bc[202]][_0xe4bc[1025]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa){_0x5d2ax5=_0x5d2ax5||this;this[_0xe4bc[1152]]++;_0x5d2ax5[_0xe4bc[1159]]&&(_0x5d2ax5[_0xe4bc[1160]]&&this[_0xe4bc[1051]](_0x5d2ax5,!0),_0x5d2ax5[_0xe4bc[1159]]= !1);_0x5d2ax5[_0xe4bc[1160]]= !0;var _0x5d2ax12=document[_0xe4bc[55]](_0xe4bc[121]);_0x5d2ax12[_0xe4bc[926]]=_0xe4bc[1161];var _0x5d2ax13=document[_0xe4bc[55]](_0xe4bc[122]);_0x5d2ax13[_0xe4bc[926]]=_0xe4bc[1162];null!=_0x5d2ax3?(_0x5d2ax9=document[_0xe4bc[55]](_0xe4bc[466]),_0x5d2ax9[_0xe4bc[390]]=_0x5d2ax3,_0x5d2ax13[_0xe4bc[62]](_0x5d2ax9)):null!=_0x5d2ax9&&(_0x5d2ax3=document[_0xe4bc[55]](_0xe4bc[485]),_0x5d2ax3[_0xe4bc[926]]=_0x5d2ax9,_0x5d2ax13[_0xe4bc[62]](_0x5d2ax3));_0x5d2ax12[_0xe4bc[62]](_0x5d2ax13);this[_0xe4bc[1155]]&&(_0x5d2ax13=document[_0xe4bc[55]](_0xe4bc[122]),_0x5d2ax13[_0xe4bc[926]]=_0xe4bc[1161]+(null!=_0x5d2axa&&!_0x5d2axa?_0xe4bc[1163]:_0xe4bc[110]),mxUtils[_0xe4bc[53]](_0x5d2ax13,_0x5d2ax2),_0x5d2ax13[_0xe4bc[611]]=_0xe4bc[361],_0x5d2ax12[_0xe4bc[62]](_0x5d2ax13),_0x5d2ax2=document[_0xe4bc[55]](_0xe4bc[122]),_0x5d2ax2[_0xe4bc[926]]=_0xe4bc[1161]+(null!=_0x5d2axa&&!_0x5d2axa?_0xe4bc[1163]:_0xe4bc[110]),_0x5d2ax2[_0xe4bc[124]][_0xe4bc[1164]]=_0xe4bc[1055],_0x5d2ax2[_0xe4bc[124]][_0xe4bc[1165]]=_0xe4bc[699],_0x5d2ax12[_0xe4bc[62]](_0x5d2ax2),null==_0x5d2ax5[_0xe4bc[485]]&&this[_0xe4bc[1166]](_0x5d2ax5));_0x5d2ax5[_0xe4bc[120]][_0xe4bc[62]](_0x5d2ax12);if(null==_0x5d2axa||_0x5d2axa){mxEvent[_0xe4bc[759]](_0x5d2ax12,mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){this[_0xe4bc[1167]]=_0x5d2ax12;_0x5d2ax5[_0xe4bc[1168]]!=_0x5d2ax12&&_0x5d2ax5[_0xe4bc[1168]]!=_0x5d2ax5&&(null!=_0x5d2ax5[_0xe4bc[1168]]&&null!=_0x5d2ax5[_0xe4bc[1168]][_0xe4bc[485]][_0xe4bc[265]]&&this[_0xe4bc[1169]](_0x5d2ax5),null!=_0x5d2ax12[_0xe4bc[485]]&&(this[_0xe4bc[1170]](_0x5d2ax5,_0x5d2ax12),_0x5d2ax5[_0xe4bc[1168]]=_0x5d2ax12));mxEvent[_0xe4bc[722]](_0x5d2ax2)}),mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){_0x5d2ax5[_0xe4bc[1168]]!=_0x5d2ax12&&_0x5d2ax5[_0xe4bc[1168]]!=_0x5d2ax5&&(null!=_0x5d2ax5[_0xe4bc[1168]]&&null!=_0x5d2ax5[_0xe4bc[1168]][_0xe4bc[485]][_0xe4bc[265]]&&this[_0xe4bc[1169]](_0x5d2ax5),this[_0xe4bc[1153]]&&null!=_0x5d2ax12[_0xe4bc[485]]&&(this[_0xe4bc[1170]](_0x5d2ax5,_0x5d2ax12),_0x5d2ax5[_0xe4bc[1168]]=_0x5d2ax12));_0x5d2ax12[_0xe4bc[926]]=_0xe4bc[1171]}),mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){this[_0xe4bc[1167]]==_0x5d2ax12&&(_0x5d2ax5[_0xe4bc[1168]]!=_0x5d2ax12&&this[_0xe4bc[1032]](),null!=_0x5d2ax4&&_0x5d2ax4(_0x5d2ax2));this[_0xe4bc[1167]]=null;mxEvent[_0xe4bc[722]](_0x5d2ax2)})),mxEvent[_0xe4bc[169]](_0x5d2ax12,_0xe4bc[1035],mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){_0x5d2ax12[_0xe4bc[926]]=_0xe4bc[1161]}))};return _0x5d2ax12};mxPopupMenu[_0xe4bc[202]][_0xe4bc[1166]]=function(_0x5d2ax2){_0x5d2ax2[_0xe4bc[116]]=document[_0xe4bc[55]](_0xe4bc[116]);_0x5d2ax2[_0xe4bc[116]][_0xe4bc[926]]=_0xe4bc[1156];_0x5d2ax2[_0xe4bc[120]]=document[_0xe4bc[55]](_0xe4bc[120]);_0x5d2ax2[_0xe4bc[116]][_0xe4bc[62]](_0x5d2ax2[_0xe4bc[120]]);_0x5d2ax2[_0xe4bc[485]]=document[_0xe4bc[55]](_0xe4bc[485]);_0x5d2ax2[_0xe4bc[485]][_0xe4bc[926]]=_0xe4bc[1156];_0x5d2ax2[_0xe4bc[485]][_0xe4bc[124]][_0xe4bc[491]]=_0xe4bc[492];_0x5d2ax2[_0xe4bc[485]][_0xe4bc[124]][_0xe4bc[495]]=_0xe4bc[497];_0x5d2ax2[_0xe4bc[485]][_0xe4bc[124]][_0xe4bc[931]]=this[_0xe4bc[931]];_0x5d2ax2[_0xe4bc[485]][_0xe4bc[62]](_0x5d2ax2[_0xe4bc[116]]);var _0x5d2ax3=document[_0xe4bc[55]](_0xe4bc[466]);_0x5d2ax3[_0xe4bc[57]](_0xe4bc[390],this[_0xe4bc[1149]]);td=_0x5d2ax2[_0xe4bc[285]][_0xe4bc[287]][_0xe4bc[287]];td[_0xe4bc[62]](_0x5d2ax3)};mxPopupMenu[_0xe4bc[202]][_0xe4bc[1170]]=function(_0x5d2ax2,_0x5d2ax3){if(null!=_0x5d2ax3[_0xe4bc[485]]){_0x5d2ax3[_0xe4bc[485]][_0xe4bc[124]][_0xe4bc[361]]=_0x5d2ax2[_0xe4bc[485]][_0xe4bc[358]]+_0x5d2ax3[_0xe4bc[358]]+_0x5d2ax3[_0xe4bc[359]]-1+_0xe4bc[168];_0x5d2ax3[_0xe4bc[485]][_0xe4bc[124]][_0xe4bc[125]]=_0x5d2ax2[_0xe4bc[485]][_0xe4bc[362]]+_0x5d2ax3[_0xe4bc[362]]+_0xe4bc[168];document[_0xe4bc[112]][_0xe4bc[62]](_0x5d2ax3[_0xe4bc[485]]);var _0x5d2ax4=parseInt(_0x5d2ax3[_0xe4bc[485]][_0xe4bc[358]]),_0x5d2ax5=parseInt(_0x5d2ax3[_0xe4bc[485]][_0xe4bc[359]]),_0x5d2ax9=document[_0xe4bc[112]],_0x5d2axa=document[_0xe4bc[158]];if(_0x5d2ax4+_0x5d2ax5>(_0x5d2ax9[_0xe4bc[360]]||_0x5d2axa[_0xe4bc[360]])+(_0x5d2ax9[_0xe4bc[159]]||_0x5d2axa[_0xe4bc[159]])){_0x5d2ax3[_0xe4bc[485]][_0xe4bc[124]][_0xe4bc[361]]=_0x5d2ax2[_0xe4bc[485]][_0xe4bc[358]]-_0x5d2ax5+(mxClient[_0xe4bc[80]]?6:-6)+_0xe4bc[168]};mxUtils[_0xe4bc[933]](_0x5d2ax3[_0xe4bc[485]])}};mxPopupMenu[_0xe4bc[202]][_0xe4bc[1051]]=function(_0x5d2ax2,_0x5d2ax3){_0x5d2ax2=_0x5d2ax2||this;if(this[_0xe4bc[1154]]&& !_0x5d2ax3){_0x5d2ax2[_0xe4bc[1159]]= !0}else {if(null!=_0x5d2ax2[_0xe4bc[120]]){_0x5d2ax2[_0xe4bc[1159]]= !1;var _0x5d2ax4=document[_0xe4bc[55]](_0xe4bc[121]),_0x5d2ax5=document[_0xe4bc[55]](_0xe4bc[122]);_0x5d2ax5[_0xe4bc[926]]=_0xe4bc[1162];_0x5d2ax5[_0xe4bc[124]][_0xe4bc[549]]=_0xe4bc[1172];_0x5d2ax4[_0xe4bc[62]](_0x5d2ax5);_0x5d2ax5=document[_0xe4bc[55]](_0xe4bc[122]);_0x5d2ax5[_0xe4bc[124]][_0xe4bc[549]]=_0xe4bc[1172];_0x5d2ax5[_0xe4bc[57]](_0xe4bc[1173],_0xe4bc[1174]);var _0x5d2ax9=document[_0xe4bc[55]](_0xe4bc[1054]);_0x5d2ax9[_0xe4bc[57]](_0xe4bc[803],_0xe4bc[500]);_0x5d2ax5[_0xe4bc[62]](_0x5d2ax9);_0x5d2ax4[_0xe4bc[62]](_0x5d2ax5);_0x5d2ax2[_0xe4bc[120]][_0xe4bc[62]](_0x5d2ax4)}}};mxPopupMenu[_0xe4bc[202]][_0xe4bc[152]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){if(null!=this[_0xe4bc[485]]&&null!=this[_0xe4bc[120]]&&null!=this[_0xe4bc[1033]]){this[_0xe4bc[485]][_0xe4bc[124]][_0xe4bc[361]]=_0x5d2ax2+_0xe4bc[168];for(this[_0xe4bc[485]][_0xe4bc[124]][_0xe4bc[125]]=_0x5d2ax3+_0xe4bc[168];null!=this[_0xe4bc[120]][_0xe4bc[285]];){mxEvent[_0xe4bc[762]](this[_0xe4bc[120]][_0xe4bc[285]]),this[_0xe4bc[120]][_0xe4bc[266]](this[_0xe4bc[120]][_0xe4bc[285]])};this[_0xe4bc[1152]]=0;this[_0xe4bc[1033]](this,_0x5d2ax4,_0x5d2ax5);0<this[_0xe4bc[1152]]&&(this[_0xe4bc[1175]](),this[_0xe4bc[746]]( new mxEventObject(mxEvent.SHOW)))}};mxPopupMenu[_0xe4bc[202]][_0xe4bc[1031]]=function(){return null!=this[_0xe4bc[485]]&&this[_0xe4bc[485]][_0xe4bc[265]]==document[_0xe4bc[112]]};mxPopupMenu[_0xe4bc[202]][_0xe4bc[1175]]=function(){9<=document[_0xe4bc[5]]&&(this[_0xe4bc[485]][_0xe4bc[124]][_0xe4bc[347]]=_0xe4bc[130]);document[_0xe4bc[112]][_0xe4bc[62]](this[_0xe4bc[485]]);mxUtils[_0xe4bc[933]](this[_0xe4bc[485]])};mxPopupMenu[_0xe4bc[202]][_0xe4bc[1032]]=function(){null!=this[_0xe4bc[485]]&&(null!=this[_0xe4bc[485]][_0xe4bc[265]]&&this[_0xe4bc[485]][_0xe4bc[265]][_0xe4bc[266]](this[_0xe4bc[485]]),this[_0xe4bc[1169]](this),this[_0xe4bc[1160]]= !1)};mxPopupMenu[_0xe4bc[202]][_0xe4bc[1169]]=function(_0x5d2ax2){null!=_0x5d2ax2[_0xe4bc[1168]]&&(this[_0xe4bc[1169]](_0x5d2ax2[_0xe4bc[1168]]),null!=_0x5d2ax2[_0xe4bc[1168]][_0xe4bc[485]][_0xe4bc[265]]&&_0x5d2ax2[_0xe4bc[1168]][_0xe4bc[485]][_0xe4bc[265]][_0xe4bc[266]](_0x5d2ax2[_0xe4bc[1168]][_0xe4bc[485]]),_0x5d2ax2[_0xe4bc[1168]]=null)};mxPopupMenu[_0xe4bc[202]][_0xe4bc[515]]=function(){null!=this[_0xe4bc[485]]&&(mxEvent[_0xe4bc[762]](this[_0xe4bc[485]]),null!=this[_0xe4bc[485]][_0xe4bc[265]]&&this[_0xe4bc[485]][_0xe4bc[265]][_0xe4bc[266]](this[_0xe4bc[485]]),this[_0xe4bc[485]]=null)};function mxAutoSaveManager(_0x5d2ax2){this[_0xe4bc[1176]]=mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2,_0x5d2ax4){this[_0xe4bc[994]]()&&this[_0xe4bc[1177]](_0x5d2ax4[_0xe4bc[720]](_0xe4bc[1061])[_0xe4bc[1065]])});this[_0xe4bc[1178]](_0x5d2ax2)}mxAutoSaveManager[_0xe4bc[202]]= new mxEventSource;mxAutoSaveManager[_0xe4bc[202]][_0xe4bc[196]]=mxAutoSaveManager;mxAutoSaveManager[_0xe4bc[202]][_0xe4bc[1179]]=null;mxAutoSaveManager[_0xe4bc[202]][_0xe4bc[1180]]=10;mxAutoSaveManager[_0xe4bc[202]][_0xe4bc[1181]]=2;mxAutoSaveManager[_0xe4bc[202]][_0xe4bc[1182]]=5;mxAutoSaveManager[_0xe4bc[202]][_0xe4bc[1183]]=0;mxAutoSaveManager[_0xe4bc[202]][_0xe4bc[1184]]=0;mxAutoSaveManager[_0xe4bc[202]][_0xe4bc[984]]= !0;mxAutoSaveManager[_0xe4bc[202]][_0xe4bc[1176]]=null;mxAutoSaveManager[_0xe4bc[202]][_0xe4bc[994]]=function(){return this[_0xe4bc[984]]};mxAutoSaveManager[_0xe4bc[202]][_0xe4bc[995]]=function(_0x5d2ax2){this[_0xe4bc[984]]=_0x5d2ax2};mxAutoSaveManager[_0xe4bc[202]][_0xe4bc[1178]]=function(_0x5d2ax2){null!=this[_0xe4bc[1179]]&&this[_0xe4bc[1179]][_0xe4bc[502]]()[_0xe4bc[745]](this[_0xe4bc[1176]]);this[_0xe4bc[1179]]=_0x5d2ax2;null!=this[_0xe4bc[1179]]&&this[_0xe4bc[1179]][_0xe4bc[502]]()[_0xe4bc[169]](mxEvent.CHANGE,this[_0xe4bc[1176]])};mxAutoSaveManager[_0xe4bc[202]][_0xe4bc[815]]=function(){};mxAutoSaveManager[_0xe4bc[202]][_0xe4bc[1177]]=function(_0x5d2ax2){_0x5d2ax2=(( new Date)[_0xe4bc[178]]()-this[_0xe4bc[1184]])/1E3;_0x5d2ax2>this[_0xe4bc[1180]]||this[_0xe4bc[1183]]>=this[_0xe4bc[1182]]&&_0x5d2ax2>this[_0xe4bc[1181]]?(this[_0xe4bc[815]](),this[_0xe4bc[862]]()):this[_0xe4bc[1183]]++};mxAutoSaveManager[_0xe4bc[202]][_0xe4bc[862]]=function(){this[_0xe4bc[1184]]=( new Date)[_0xe4bc[178]]();this[_0xe4bc[1183]]=0};mxAutoSaveManager[_0xe4bc[202]][_0xe4bc[515]]=function(){this[_0xe4bc[1178]](null)};function mxAnimation(_0x5d2ax2){this[_0xe4bc[1140]]=null!=_0x5d2ax2?_0x5d2ax2:20}mxAnimation[_0xe4bc[202]]= new mxEventSource;mxAnimation[_0xe4bc[202]][_0xe4bc[196]]=mxAnimation;mxAnimation[_0xe4bc[202]][_0xe4bc[1140]]=null;mxAnimation[_0xe4bc[202]][_0xe4bc[1123]]=null;mxAnimation[_0xe4bc[202]][_0xe4bc[1185]]=function(){null==this[_0xe4bc[1123]]&&(this[_0xe4bc[1123]]=window[_0xe4bc[1141]](mxUtils[_0xe4bc[885]](this,this[_0xe4bc[1186]]),this[_0xe4bc[1140]]))};mxAnimation[_0xe4bc[202]][_0xe4bc[1186]]=function(){this[_0xe4bc[746]]( new mxEventObject(mxEvent.EXECUTE))};mxAnimation[_0xe4bc[202]][_0xe4bc[1187]]=function(){null!=this[_0xe4bc[1123]]&&(window[_0xe4bc[1146]](this[_0xe4bc[1123]]),this[_0xe4bc[1123]]=null,this[_0xe4bc[746]]( new mxEventObject(mxEvent.DONE)))};function mxMorphing(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){mxAnimation[_0xe4bc[239]](this,_0x5d2ax5);this[_0xe4bc[1179]]=_0x5d2ax2;this[_0xe4bc[1188]]=null!=_0x5d2ax3?_0x5d2ax3:6;this[_0xe4bc[1189]]=null!=_0x5d2ax4?_0x5d2ax4:1.5}mxMorphing[_0xe4bc[202]]= new mxAnimation;mxMorphing[_0xe4bc[202]][_0xe4bc[196]]=mxMorphing;mxMorphing[_0xe4bc[202]][_0xe4bc[1179]]=null;mxMorphing[_0xe4bc[202]][_0xe4bc[1188]]=null;mxMorphing[_0xe4bc[202]][_0xe4bc[1190]]=0;mxMorphing[_0xe4bc[202]][_0xe4bc[1189]]=null;mxMorphing[_0xe4bc[202]][_0xe4bc[895]]=null;mxMorphing[_0xe4bc[202]][_0xe4bc[1186]]=function(){var _0x5d2ax2= new mxCellStatePreview(this[_0xe4bc[1179]]);if(null!=this[_0xe4bc[895]]){for(var _0x5d2ax3=0;_0x5d2ax3<this[_0xe4bc[895]][_0xe4bc[67]];_0x5d2ax3++){this[_0xe4bc[1191]](cells[_0x5d2ax3],_0x5d2ax2,!1)}}else {this[_0xe4bc[1191]](this[_0xe4bc[1179]][_0xe4bc[502]]()[_0xe4bc[501]](),_0x5d2ax2,!0)};this[_0xe4bc[539]](_0x5d2ax2);(_0x5d2ax2[_0xe4bc[1107]]()||this[_0xe4bc[1190]]++ >=this[_0xe4bc[1188]])&&this[_0xe4bc[1187]]()};mxMorphing[_0xe4bc[202]][_0xe4bc[539]]=function(_0x5d2ax2){_0x5d2ax2[_0xe4bc[539]]()};mxMorphing[_0xe4bc[202]][_0xe4bc[1191]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){var _0x5d2ax5=this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[248]](_0x5d2ax2),_0x5d2ax9=null;if(null!=_0x5d2ax5&&(_0x5d2ax9=this[_0xe4bc[1192]](_0x5d2ax5),this[_0xe4bc[1179]][_0xe4bc[502]]()[_0xe4bc[1193]](_0x5d2ax2)&&(0!=_0x5d2ax9[_0xe4bc[235]]||0!=_0x5d2ax9[_0xe4bc[236]]))){var _0x5d2axa=this[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[512]](),_0x5d2ax12=this[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[518]]();_0x5d2ax9[_0xe4bc[235]]+=_0x5d2axa[_0xe4bc[235]]*_0x5d2ax12;_0x5d2ax9[_0xe4bc[236]]+=_0x5d2axa[_0xe4bc[236]]*_0x5d2ax12;_0x5d2ax3[_0xe4bc[1194]](_0x5d2ax5,-_0x5d2ax9[_0xe4bc[235]]/this[_0xe4bc[1189]],-_0x5d2ax9[_0xe4bc[236]]/this[_0xe4bc[1189]])};if(_0x5d2ax4&&!this[_0xe4bc[1195]](_0x5d2ax5,_0x5d2ax9)){_0x5d2ax5=this[_0xe4bc[1179]][_0xe4bc[502]]()[_0xe4bc[262]](_0x5d2ax2);for(_0x5d2ax9=0;_0x5d2ax9<_0x5d2ax5;_0x5d2ax9++){this[_0xe4bc[1191]](this[_0xe4bc[1179]][_0xe4bc[502]]()[_0xe4bc[263]](_0x5d2ax2,_0x5d2ax9),_0x5d2ax3,_0x5d2ax4)}}};mxMorphing[_0xe4bc[202]][_0xe4bc[1195]]=function(_0x5d2ax2,_0x5d2ax3){return null!=_0x5d2ax3&&(0!=_0x5d2ax3[_0xe4bc[235]]||0!=_0x5d2ax3[_0xe4bc[236]])};mxMorphing[_0xe4bc[202]][_0xe4bc[1192]]=function(_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[1196]](_0x5d2ax2[_0xe4bc[246]]),_0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[512]](),_0x5d2ax5=this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[518]]();_0x5d2ax2= new mxPoint(_0x5d2ax2[_0xe4bc[235]]/_0x5d2ax5-_0x5d2ax4[_0xe4bc[235]],_0x5d2ax2[_0xe4bc[236]]/_0x5d2ax5-_0x5d2ax4[_0xe4bc[236]]);return  new mxPoint((_0x5d2ax3[_0xe4bc[235]]-_0x5d2ax2[_0xe4bc[235]])*_0x5d2ax5,(_0x5d2ax3[_0xe4bc[236]]-_0x5d2ax2[_0xe4bc[236]])*_0x5d2ax5)};mxMorphing[_0xe4bc[202]][_0xe4bc[1196]]=function(_0x5d2ax2){var _0x5d2ax3=null;null!=_0x5d2ax2&&(_0x5d2ax3=this[_0xe4bc[1196]](this[_0xe4bc[1179]][_0xe4bc[502]]()[_0xe4bc[1197]](_0x5d2ax2)),_0x5d2ax2=this[_0xe4bc[1179]][_0xe4bc[1198]](_0x5d2ax2),null!=_0x5d2ax2&&(_0x5d2ax3[_0xe4bc[235]]+=_0x5d2ax2[_0xe4bc[235]],_0x5d2ax3[_0xe4bc[236]]+=_0x5d2ax2[_0xe4bc[236]]));null==_0x5d2ax3&&(_0x5d2ax3=this[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[512]](),_0x5d2ax3= new mxPoint(-_0x5d2ax3[_0xe4bc[235]],-_0x5d2ax3[_0xe4bc[236]]));return _0x5d2ax3};function mxImageBundle(_0x5d2ax2){this[_0xe4bc[1199]]=[];this[_0xe4bc[1200]]=null!=_0x5d2ax2?_0x5d2ax2:!1}mxImageBundle[_0xe4bc[202]][_0xe4bc[1199]]=null;mxImageBundle[_0xe4bc[202]][_0xe4bc[1199]]=null;mxImageBundle[_0xe4bc[202]][_0xe4bc[1201]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){this[_0xe4bc[1199]][_0x5d2ax2]={value:_0x5d2ax3,fallback:_0x5d2ax4}};mxImageBundle[_0xe4bc[202]][_0xe4bc[1202]]=function(_0x5d2ax2){var _0x5d2ax3=null;null!=_0x5d2ax2&&(_0x5d2ax2=this[_0xe4bc[1199]][_0x5d2ax2],null!=_0x5d2ax2&&(_0x5d2ax3=this[_0xe4bc[1200]]?_0x5d2ax2[_0xe4bc[1203]]:_0x5d2ax2[_0xe4bc[131]]));return _0x5d2ax3};function mxImageExport(){}mxImageExport[_0xe4bc[202]][_0xe4bc[1204]]= !1;mxImageExport[_0xe4bc[202]][_0xe4bc[1205]]=function(_0x5d2ax2,_0x5d2ax3){null!=_0x5d2ax2&&(this[_0xe4bc[1207]](_0x5d2ax2,_0x5d2ax3,this[_0xe4bc[1206]]),this[_0xe4bc[1204]]&&this[_0xe4bc[1207]](_0x5d2ax2,_0x5d2ax3,this[_0xe4bc[1208]]))};mxImageExport[_0xe4bc[202]][_0xe4bc[1207]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){if(null!=_0x5d2ax2){_0x5d2ax4(_0x5d2ax2,_0x5d2ax3);for(var _0x5d2ax5=_0x5d2ax2[_0xe4bc[441]][_0xe4bc[1179]],_0x5d2ax9=_0x5d2ax5[_0xe4bc[251]][_0xe4bc[262]](_0x5d2ax2[_0xe4bc[246]]),_0x5d2axa=0;_0x5d2axa<_0x5d2ax9;_0x5d2axa++){var _0x5d2ax12=_0x5d2ax5[_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax5[_0xe4bc[251]][_0xe4bc[263]](_0x5d2ax2[_0xe4bc[246]],_0x5d2axa));this[_0xe4bc[1207]](_0x5d2ax12,_0x5d2ax3,_0x5d2ax4)}}};mxImageExport[_0xe4bc[202]][_0xe4bc[1206]]=function(_0x5d2ax2,_0x5d2ax3){_0x5d2ax2[_0xe4bc[253]] instanceof mxShape&&(_0x5d2ax3[_0xe4bc[815]](),_0x5d2ax2[_0xe4bc[253]][_0xe4bc[1209]](_0x5d2ax3),_0x5d2ax3[_0xe4bc[1210]]());null!=_0x5d2ax2[_0xe4bc[963]]&&(_0x5d2ax3[_0xe4bc[815]](),_0x5d2ax2[_0xe4bc[963]][_0xe4bc[1209]](_0x5d2ax3),_0x5d2ax3[_0xe4bc[1210]]())};mxImageExport[_0xe4bc[202]][_0xe4bc[1208]]=function(_0x5d2ax2,_0x5d2ax3){null!=_0x5d2ax2[_0xe4bc[1211]]&&_0x5d2ax2[_0xe4bc[1211]][_0xe4bc[209]](function(_0x5d2ax2,_0x5d2ax5){_0x5d2ax5 instanceof mxShape&&_0x5d2ax5[_0xe4bc[1209]](_0x5d2ax3)})};function mxAbstractCanvas2D(){this[_0xe4bc[1212]]=this[_0xe4bc[1213]]();this[_0xe4bc[862]]()}mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[724]]=null;mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1214]]=null;mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1215]]=null;mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1216]]= !0;mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1217]]=0;mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1218]]=0;mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1219]]=_0xe4bc[1220];mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1221]]=_0xe4bc[1222];mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1223]]=_0xe4bc[1224];mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1225]]=_0xe4bc[1226];mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1227]]=_0xe4bc[1228];mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1229]]= !1;mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1213]]=function(){return  new mxUrlConverter};mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[862]]=function(){this[_0xe4bc[724]]=this[_0xe4bc[1230]]();this[_0xe4bc[1214]]=[]};mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1230]]=function(){return {dx:0,dy:0,scale:1,alpha:1,fillColor:null,fillAlpha:1,gradientColor:null,gradientAlpha:1,gradientDirection:null,strokeColor:null,strokeWidth:1,dashed:!1,dashPattern:_0xe4bc[1231],lineCap:_0xe4bc[1232],lineJoin:_0xe4bc[1233],miterLimit:10,fontColor:_0xe4bc[1234],fontBackgroundColor:null,fontBorderColor:null,fontSize:mxConstants[_0xe4bc[483]],fontFamily:mxConstants[_0xe4bc[484]],fontStyle:0,shadow:!1,shadowColor:mxConstants[_0xe4bc[1235]],shadowAlpha:mxConstants[_0xe4bc[1236]],shadowDx:mxConstants[_0xe4bc[1237]],shadowDy:mxConstants[_0xe4bc[1238]],rotation:0,rotationCx:0,rotationCy:0}};mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1239]]=function(_0x5d2ax2){return Math[_0xe4bc[488]](parseFloat(_0x5d2ax2))};mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1240]]=function(){if(null!=this[_0xe4bc[1215]]&&(this[_0xe4bc[1215]][_0xe4bc[207]](arguments[0]),2<arguments[_0xe4bc[67]])){for(var _0x5d2ax2=this[_0xe4bc[724]],_0x5d2ax3=2;_0x5d2ax3<arguments[_0xe4bc[67]];_0x5d2ax3+=2){this[_0xe4bc[1217]]=arguments[_0x5d2ax3-1],this[_0xe4bc[1218]]=arguments[_0x5d2ax3],this[_0xe4bc[1215]][_0xe4bc[207]](this[_0xe4bc[1239]]((this[_0xe4bc[1217]]+_0x5d2ax2[_0xe4bc[1126]])*_0x5d2ax2[_0xe4bc[255]])),this[_0xe4bc[1215]][_0xe4bc[207]](this[_0xe4bc[1239]]((this[_0xe4bc[1218]]+_0x5d2ax2[_0xe4bc[1125]])*_0x5d2ax2[_0xe4bc[255]]))}}};mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1241]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){_0x5d2ax4*=Math[_0xe4bc[424]]/180;return mxUtils[_0xe4bc[432]]( new mxPoint(_0x5d2ax2,_0x5d2ax3),Math[_0xe4bc[426]](_0x5d2ax4),Math[_0xe4bc[427]](_0x5d2ax4), new mxPoint(_0x5d2ax5,_0x5d2ax9))};mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[815]]=function(){this[_0xe4bc[1214]][_0xe4bc[207]](this[_0xe4bc[724]]);this[_0xe4bc[724]]=mxUtils[_0xe4bc[238]](this[_0xe4bc[724]])};mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1210]]=function(){this[_0xe4bc[724]]=this[_0xe4bc[1214]][_0xe4bc[1242]]()};mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[255]]=function(_0x5d2ax2){this[_0xe4bc[724]][_0xe4bc[255]]*=_0x5d2ax2;this[_0xe4bc[724]][_0xe4bc[610]]*=_0x5d2ax2};mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[513]]=function(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[724]][_0xe4bc[1126]]+=_0x5d2ax2;this[_0xe4bc[724]][_0xe4bc[1125]]+=_0x5d2ax3};mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1243]]=function(_0x5d2ax2){this[_0xe4bc[724]][_0xe4bc[1244]]=_0x5d2ax2};mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1245]]=function(_0x5d2ax2){_0x5d2ax2==mxConstants[_0xe4bc[217]]&&(_0x5d2ax2=null);this[_0xe4bc[724]][_0xe4bc[604]]=_0x5d2ax2;this[_0xe4bc[724]][_0xe4bc[606]]=null};mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1246]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa,_0x5d2ax12,_0x5d2ax13,_0x5d2ax14){_0x5d2ax4=this[_0xe4bc[724]];_0x5d2ax4[_0xe4bc[604]]=_0x5d2ax2;_0x5d2ax4[_0xe4bc[1247]]=null!=_0x5d2ax13?_0x5d2ax13:1;_0x5d2ax4[_0xe4bc[606]]=_0x5d2ax3;_0x5d2ax4[_0xe4bc[1248]]=null!=_0x5d2ax14?_0x5d2ax14:1;_0x5d2ax4[_0xe4bc[607]]=_0x5d2ax12};mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1249]]=function(_0x5d2ax2){_0x5d2ax2==mxConstants[_0xe4bc[217]]&&(_0x5d2ax2=null);this[_0xe4bc[724]][_0xe4bc[608]]=_0x5d2ax2};mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1250]]=function(_0x5d2ax2){this[_0xe4bc[724]][_0xe4bc[610]]=_0x5d2ax2};mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1251]]=function(_0x5d2ax2){this[_0xe4bc[724]][_0xe4bc[648]]=_0x5d2ax2};mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1252]]=function(_0x5d2ax2){this[_0xe4bc[724]][_0xe4bc[649]]=_0x5d2ax2};mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1253]]=function(_0x5d2ax2){this[_0xe4bc[724]][_0xe4bc[1254]]=_0x5d2ax2};mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1255]]=function(_0x5d2ax2){this[_0xe4bc[724]][_0xe4bc[1256]]=_0x5d2ax2};mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1257]]=function(_0x5d2ax2){this[_0xe4bc[724]][_0xe4bc[1258]]=_0x5d2ax2};mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1259]]=function(_0x5d2ax2){_0x5d2ax2==mxConstants[_0xe4bc[217]]&&(_0x5d2ax2=null);this[_0xe4bc[724]][_0xe4bc[665]]=_0x5d2ax2};mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1260]]=function(_0x5d2ax2){_0x5d2ax2==mxConstants[_0xe4bc[217]]&&(_0x5d2ax2=null);this[_0xe4bc[724]][_0xe4bc[1261]]=_0x5d2ax2};mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1262]]=function(_0x5d2ax2){_0x5d2ax2==mxConstants[_0xe4bc[217]]&&(_0x5d2ax2=null);this[_0xe4bc[724]][_0xe4bc[1263]]=_0x5d2ax2};mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1264]]=function(_0x5d2ax2){this[_0xe4bc[724]][_0xe4bc[487]]=_0x5d2ax2};mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1265]]=function(_0x5d2ax2){this[_0xe4bc[724]][_0xe4bc[486]]=_0x5d2ax2};mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1266]]=function(_0x5d2ax2){null==_0x5d2ax2&&(_0x5d2ax2=0);this[_0xe4bc[724]][_0xe4bc[666]]=_0x5d2ax2};mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1267]]=function(_0x5d2ax2){this[_0xe4bc[724]][_0xe4bc[639]]=_0x5d2ax2};mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1268]]=function(_0x5d2ax2){_0x5d2ax2==mxConstants[_0xe4bc[217]]&&(_0x5d2ax2=null);this[_0xe4bc[724]][_0xe4bc[1269]]=_0x5d2ax2};mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1270]]=function(_0x5d2ax2){this[_0xe4bc[724]][_0xe4bc[1271]]=_0x5d2ax2};mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1272]]=function(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[724]][_0xe4bc[1273]]=_0x5d2ax2;this[_0xe4bc[724]][_0xe4bc[1274]]=_0x5d2ax3};mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1275]]=function(){this[_0xe4bc[1218]]=this[_0xe4bc[1217]]=0;this[_0xe4bc[1215]]=[]};mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1276]]=function(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[1240]](this[_0xe4bc[1219]],_0x5d2ax2,_0x5d2ax3)};mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1277]]=function(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[1240]](this[_0xe4bc[1221]],_0x5d2ax2,_0x5d2ax3)};mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1278]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){this[_0xe4bc[1240]](this[_0xe4bc[1223]],_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5)};mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1279]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa){this[_0xe4bc[1240]](this[_0xe4bc[1225]],_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa)};mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1280]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa,_0x5d2ax12){_0x5d2ax2=mxUtils[_0xe4bc[1281]](this[_0xe4bc[1217]],this[_0xe4bc[1218]],_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa,_0x5d2ax12);for(_0x5d2ax3=0;_0x5d2ax3<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax3+=6){this[_0xe4bc[1279]](_0x5d2ax2[_0x5d2ax3],_0x5d2ax2[_0x5d2ax3+1],_0x5d2ax2[_0x5d2ax3+2],_0x5d2ax2[_0x5d2ax3+3],_0x5d2ax2[_0x5d2ax3+4],_0x5d2ax2[_0x5d2ax3+5])}};mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[268]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa){this[_0xe4bc[1240]](this[_0xe4bc[1227]])};mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1282]]=function(){};function mxXmlCanvas2D(_0x5d2ax2){mxAbstractCanvas2D[_0xe4bc[239]](this);this[_0xe4bc[813]]=_0x5d2ax2;this[_0xe4bc[1283]]()}mxUtils[_0xe4bc[1284]](mxXmlCanvas2D,mxAbstractCanvas2D);mxXmlCanvas2D[_0xe4bc[202]][_0xe4bc[1285]]= !0;mxXmlCanvas2D[_0xe4bc[202]][_0xe4bc[1286]]= !0;mxXmlCanvas2D[_0xe4bc[202]][_0xe4bc[1283]]=function(){var _0x5d2ax2;_0x5d2ax2=this[_0xe4bc[55]](_0xe4bc[1287]);_0x5d2ax2[_0xe4bc[57]](_0xe4bc[1288],mxConstants.DEFAULT_FONTFAMILY);this[_0xe4bc[813]][_0xe4bc[62]](_0x5d2ax2);_0x5d2ax2=this[_0xe4bc[55]](_0xe4bc[1289]);_0x5d2ax2[_0xe4bc[57]](_0xe4bc[803],mxConstants.DEFAULT_FONTSIZE);this[_0xe4bc[813]][_0xe4bc[62]](_0x5d2ax2);_0x5d2ax2=this[_0xe4bc[55]](_0xe4bc[1290]);_0x5d2ax2[_0xe4bc[57]](_0xe4bc[352],mxConstants.SHADOWCOLOR);this[_0xe4bc[813]][_0xe4bc[62]](_0x5d2ax2);_0x5d2ax2=this[_0xe4bc[55]](_0xe4bc[1291]);_0x5d2ax2[_0xe4bc[57]](_0xe4bc[1244],mxConstants.SHADOW_OPACITY);this[_0xe4bc[813]][_0xe4bc[62]](_0x5d2ax2);_0x5d2ax2=this[_0xe4bc[55]](_0xe4bc[1292]);_0x5d2ax2[_0xe4bc[57]](_0xe4bc[1126],mxConstants.SHADOW_OFFSET_X);_0x5d2ax2[_0xe4bc[57]](_0xe4bc[1125],mxConstants.SHADOW_OFFSET_Y);this[_0xe4bc[813]][_0xe4bc[62]](_0x5d2ax2)};mxXmlCanvas2D[_0xe4bc[202]][_0xe4bc[1239]]=function(_0x5d2ax2){return parseFloat(parseFloat(_0x5d2ax2)[_0xe4bc[1293]](2))};mxXmlCanvas2D[_0xe4bc[202]][_0xe4bc[55]]=function(_0x5d2ax2){return this[_0xe4bc[813]][_0xe4bc[295]][_0xe4bc[55]](_0x5d2ax2)};mxXmlCanvas2D[_0xe4bc[202]][_0xe4bc[815]]=function(){this[_0xe4bc[1286]]&&mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[815]][_0xe4bc[183]](this,arguments);this[_0xe4bc[813]][_0xe4bc[62]](this[_0xe4bc[55]](_0xe4bc[815]))};mxXmlCanvas2D[_0xe4bc[202]][_0xe4bc[1210]]=function(){this[_0xe4bc[1286]]&&mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1210]][_0xe4bc[183]](this,arguments);this[_0xe4bc[813]][_0xe4bc[62]](this[_0xe4bc[55]](_0xe4bc[1210]))};mxXmlCanvas2D[_0xe4bc[202]][_0xe4bc[255]]=function(_0x5d2ax2){if(this[_0xe4bc[1286]]){if(this[_0xe4bc[724]][_0xe4bc[255]]==_0x5d2ax2){return};mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1243]][_0xe4bc[183]](this,arguments)};var _0x5d2ax3=this[_0xe4bc[55]](_0xe4bc[255]);_0x5d2ax3[_0xe4bc[57]](_0xe4bc[255],_0x5d2ax2);this[_0xe4bc[813]][_0xe4bc[62]](_0x5d2ax3)};mxXmlCanvas2D[_0xe4bc[202]][_0xe4bc[513]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=this[_0xe4bc[55]](_0xe4bc[513]);_0x5d2ax4[_0xe4bc[57]](_0xe4bc[1126],this[_0xe4bc[1239]](_0x5d2ax2));_0x5d2ax4[_0xe4bc[57]](_0xe4bc[1125],this[_0xe4bc[1239]](_0x5d2ax3));this[_0xe4bc[813]][_0xe4bc[62]](_0x5d2ax4)};mxXmlCanvas2D[_0xe4bc[202]][_0xe4bc[1294]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){var _0x5d2axa=this[_0xe4bc[55]](_0xe4bc[1294]);if(0!=_0x5d2ax2||_0x5d2ax3||_0x5d2ax4){_0x5d2axa[_0xe4bc[57]](_0xe4bc[1295],this[_0xe4bc[1239]](_0x5d2ax2)),_0x5d2axa[_0xe4bc[57]](_0xe4bc[623],_0x5d2ax3?_0xe4bc[500]:_0xe4bc[468]),_0x5d2axa[_0xe4bc[57]](_0xe4bc[624],_0x5d2ax4?_0xe4bc[500]:_0xe4bc[468]),_0x5d2axa[_0xe4bc[57]](_0xe4bc[1296],this[_0xe4bc[1239]](_0x5d2ax5)),_0x5d2axa[_0xe4bc[57]](_0xe4bc[1297],this[_0xe4bc[1239]](_0x5d2ax9)),this[_0xe4bc[813]][_0xe4bc[62]](_0x5d2axa)}};mxXmlCanvas2D[_0xe4bc[202]][_0xe4bc[1243]]=function(_0x5d2ax2){if(this[_0xe4bc[1286]]){if(this[_0xe4bc[724]][_0xe4bc[1244]]==_0x5d2ax2){return};mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1243]][_0xe4bc[183]](this,arguments)};var _0x5d2ax3=this[_0xe4bc[55]](_0xe4bc[1244]);_0x5d2ax3[_0xe4bc[57]](_0xe4bc[1244],this[_0xe4bc[1239]](_0x5d2ax2));this[_0xe4bc[813]][_0xe4bc[62]](_0x5d2ax3)};mxXmlCanvas2D[_0xe4bc[202]][_0xe4bc[1245]]=function(_0x5d2ax2){_0x5d2ax2==mxConstants[_0xe4bc[217]]&&(_0x5d2ax2=null);if(this[_0xe4bc[1286]]){if(this[_0xe4bc[724]][_0xe4bc[604]]==_0x5d2ax2){return};mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1245]][_0xe4bc[183]](this,arguments)};var _0x5d2ax3=this[_0xe4bc[55]](_0xe4bc[1298]);_0x5d2ax3[_0xe4bc[57]](_0xe4bc[352],null!=_0x5d2ax2?_0x5d2ax2:mxConstants[_0xe4bc[217]]);this[_0xe4bc[813]][_0xe4bc[62]](_0x5d2ax3)};mxXmlCanvas2D[_0xe4bc[202]][_0xe4bc[1246]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa,_0x5d2ax12,_0x5d2ax13,_0x5d2ax14){if(null!=_0x5d2ax2&&null!=_0x5d2ax3){mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1246]][_0xe4bc[183]](this,arguments);var _0x5d2ax15=this[_0xe4bc[55]](_0xe4bc[1299]);_0x5d2ax15[_0xe4bc[57]](_0xe4bc[1300],_0x5d2ax2);_0x5d2ax15[_0xe4bc[57]](_0xe4bc[1301],_0x5d2ax3);_0x5d2ax15[_0xe4bc[57]](_0xe4bc[235],this[_0xe4bc[1239]](_0x5d2ax4));_0x5d2ax15[_0xe4bc[57]](_0xe4bc[236],this[_0xe4bc[1239]](_0x5d2ax5));_0x5d2ax15[_0xe4bc[57]](_0xe4bc[1302],this[_0xe4bc[1239]](_0x5d2ax9));_0x5d2ax15[_0xe4bc[57]](_0xe4bc[1303],this[_0xe4bc[1239]](_0x5d2axa));null!=_0x5d2ax12&&_0x5d2ax15[_0xe4bc[57]](_0xe4bc[663],_0x5d2ax12);null!=_0x5d2ax13&&_0x5d2ax15[_0xe4bc[57]](_0xe4bc[1304],_0x5d2ax13);null!=_0x5d2ax14&&_0x5d2ax15[_0xe4bc[57]](_0xe4bc[1305],_0x5d2ax14);this[_0xe4bc[813]][_0xe4bc[62]](_0x5d2ax15)}};mxXmlCanvas2D[_0xe4bc[202]][_0xe4bc[1249]]=function(_0x5d2ax2){_0x5d2ax2==mxConstants[_0xe4bc[217]]&&(_0x5d2ax2=null);if(this[_0xe4bc[1286]]){if(this[_0xe4bc[724]][_0xe4bc[608]]==_0x5d2ax2){return};mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1249]][_0xe4bc[183]](this,arguments)};var _0x5d2ax3=this[_0xe4bc[55]](_0xe4bc[1306]);_0x5d2ax3[_0xe4bc[57]](_0xe4bc[352],null!=_0x5d2ax2?_0x5d2ax2:mxConstants[_0xe4bc[217]]);this[_0xe4bc[813]][_0xe4bc[62]](_0x5d2ax3)};mxXmlCanvas2D[_0xe4bc[202]][_0xe4bc[1250]]=function(_0x5d2ax2){if(this[_0xe4bc[1286]]){if(this[_0xe4bc[724]][_0xe4bc[610]]==_0x5d2ax2){return};mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1250]][_0xe4bc[183]](this,arguments)};var _0x5d2ax3=this[_0xe4bc[55]](_0xe4bc[1307]);_0x5d2ax3[_0xe4bc[57]](_0xe4bc[117],this[_0xe4bc[1239]](_0x5d2ax2));this[_0xe4bc[813]][_0xe4bc[62]](_0x5d2ax3)};mxXmlCanvas2D[_0xe4bc[202]][_0xe4bc[1251]]=function(_0x5d2ax2){if(this[_0xe4bc[1286]]){if(this[_0xe4bc[724]][_0xe4bc[648]]==_0x5d2ax2){return};mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1251]][_0xe4bc[183]](this,arguments)};var _0x5d2ax3=this[_0xe4bc[55]](_0xe4bc[648]);_0x5d2ax3[_0xe4bc[57]](_0xe4bc[648],_0x5d2ax2?_0xe4bc[500]:_0xe4bc[468]);this[_0xe4bc[813]][_0xe4bc[62]](_0x5d2ax3)};mxXmlCanvas2D[_0xe4bc[202]][_0xe4bc[1252]]=function(_0x5d2ax2){if(this[_0xe4bc[1286]]){if(this[_0xe4bc[724]][_0xe4bc[649]]==_0x5d2ax2){return};mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1252]][_0xe4bc[183]](this,arguments)};var _0x5d2ax3=this[_0xe4bc[55]](_0xe4bc[1308]);_0x5d2ax3[_0xe4bc[57]](_0xe4bc[1309],_0x5d2ax2);this[_0xe4bc[813]][_0xe4bc[62]](_0x5d2ax3)};mxXmlCanvas2D[_0xe4bc[202]][_0xe4bc[1253]]=function(_0x5d2ax2){if(this[_0xe4bc[1286]]){if(this[_0xe4bc[724]][_0xe4bc[1254]]==_0x5d2ax2){return};mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1253]][_0xe4bc[183]](this,arguments)};var _0x5d2ax3=this[_0xe4bc[55]](_0xe4bc[1310]);_0x5d2ax3[_0xe4bc[57]](_0xe4bc[1311],_0x5d2ax2);this[_0xe4bc[813]][_0xe4bc[62]](_0x5d2ax3)};mxXmlCanvas2D[_0xe4bc[202]][_0xe4bc[1255]]=function(_0x5d2ax2){if(this[_0xe4bc[1286]]){if(this[_0xe4bc[724]][_0xe4bc[1256]]==_0x5d2ax2){return};mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1255]][_0xe4bc[183]](this,arguments)};var _0x5d2ax3=this[_0xe4bc[55]](_0xe4bc[1312]);_0x5d2ax3[_0xe4bc[57]](_0xe4bc[234],_0x5d2ax2);this[_0xe4bc[813]][_0xe4bc[62]](_0x5d2ax3)};mxXmlCanvas2D[_0xe4bc[202]][_0xe4bc[1257]]=function(_0x5d2ax2){if(this[_0xe4bc[1286]]){if(this[_0xe4bc[724]][_0xe4bc[1258]]==_0x5d2ax2){return};mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1257]][_0xe4bc[183]](this,arguments)};var _0x5d2ax3=this[_0xe4bc[55]](_0xe4bc[1313]);_0x5d2ax3[_0xe4bc[57]](_0xe4bc[1314],_0x5d2ax2);this[_0xe4bc[813]][_0xe4bc[62]](_0x5d2ax3)};mxXmlCanvas2D[_0xe4bc[202]][_0xe4bc[1259]]=function(_0x5d2ax2){if(this[_0xe4bc[1285]]){_0x5d2ax2==mxConstants[_0xe4bc[217]]&&(_0x5d2ax2=null);if(this[_0xe4bc[1286]]){if(this[_0xe4bc[724]][_0xe4bc[665]]==_0x5d2ax2){return};mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1259]][_0xe4bc[183]](this,arguments)};var _0x5d2ax3=this[_0xe4bc[55]](_0xe4bc[1315]);_0x5d2ax3[_0xe4bc[57]](_0xe4bc[352],null!=_0x5d2ax2?_0x5d2ax2:mxConstants[_0xe4bc[217]]);this[_0xe4bc[813]][_0xe4bc[62]](_0x5d2ax3)}};mxXmlCanvas2D[_0xe4bc[202]][_0xe4bc[1260]]=function(_0x5d2ax2){if(this[_0xe4bc[1285]]){_0x5d2ax2==mxConstants[_0xe4bc[217]]&&(_0x5d2ax2=null);if(this[_0xe4bc[1286]]){if(this[_0xe4bc[724]][_0xe4bc[1261]]==_0x5d2ax2){return};mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1260]][_0xe4bc[183]](this,arguments)};var _0x5d2ax3=this[_0xe4bc[55]](_0xe4bc[1316]);_0x5d2ax3[_0xe4bc[57]](_0xe4bc[352],null!=_0x5d2ax2?_0x5d2ax2:mxConstants[_0xe4bc[217]]);this[_0xe4bc[813]][_0xe4bc[62]](_0x5d2ax3)}};mxXmlCanvas2D[_0xe4bc[202]][_0xe4bc[1262]]=function(_0x5d2ax2){if(this[_0xe4bc[1285]]){_0x5d2ax2==mxConstants[_0xe4bc[217]]&&(_0x5d2ax2=null);if(this[_0xe4bc[1286]]){if(this[_0xe4bc[724]][_0xe4bc[1263]]==_0x5d2ax2){return};mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1262]][_0xe4bc[183]](this,arguments)};var _0x5d2ax3=this[_0xe4bc[55]](_0xe4bc[1317]);_0x5d2ax3[_0xe4bc[57]](_0xe4bc[352],null!=_0x5d2ax2?_0x5d2ax2:mxConstants[_0xe4bc[217]]);this[_0xe4bc[813]][_0xe4bc[62]](_0x5d2ax3)}};mxXmlCanvas2D[_0xe4bc[202]][_0xe4bc[1264]]=function(_0x5d2ax2){if(this[_0xe4bc[1285]]){if(this[_0xe4bc[1286]]){if(this[_0xe4bc[724]][_0xe4bc[487]]==_0x5d2ax2){return};mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1264]][_0xe4bc[183]](this,arguments)};var _0x5d2ax3=this[_0xe4bc[55]](_0xe4bc[1289]);_0x5d2ax3[_0xe4bc[57]](_0xe4bc[803],_0x5d2ax2);this[_0xe4bc[813]][_0xe4bc[62]](_0x5d2ax3)}};mxXmlCanvas2D[_0xe4bc[202]][_0xe4bc[1265]]=function(_0x5d2ax2){if(this[_0xe4bc[1285]]){if(this[_0xe4bc[1286]]){if(this[_0xe4bc[724]][_0xe4bc[486]]==_0x5d2ax2){return};mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1265]][_0xe4bc[183]](this,arguments)};var _0x5d2ax3=this[_0xe4bc[55]](_0xe4bc[1287]);_0x5d2ax3[_0xe4bc[57]](_0xe4bc[1288],_0x5d2ax2);this[_0xe4bc[813]][_0xe4bc[62]](_0x5d2ax3)}};mxXmlCanvas2D[_0xe4bc[202]][_0xe4bc[1266]]=function(_0x5d2ax2){if(this[_0xe4bc[1285]]){null==_0x5d2ax2&&(_0x5d2ax2=0);if(this[_0xe4bc[1286]]){if(this[_0xe4bc[724]][_0xe4bc[666]]==_0x5d2ax2){return};mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1266]][_0xe4bc[183]](this,arguments)};var _0x5d2ax3=this[_0xe4bc[55]](_0xe4bc[1318]);_0x5d2ax3[_0xe4bc[57]](_0xe4bc[124],_0x5d2ax2);this[_0xe4bc[813]][_0xe4bc[62]](_0x5d2ax3)}};mxXmlCanvas2D[_0xe4bc[202]][_0xe4bc[1267]]=function(_0x5d2ax2){if(this[_0xe4bc[1286]]){if(this[_0xe4bc[724]][_0xe4bc[639]]==_0x5d2ax2){return};mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1267]][_0xe4bc[183]](this,arguments)};var _0x5d2ax3=this[_0xe4bc[55]](_0xe4bc[639]);_0x5d2ax3[_0xe4bc[57]](_0xe4bc[984],_0x5d2ax2?_0xe4bc[500]:_0xe4bc[468]);this[_0xe4bc[813]][_0xe4bc[62]](_0x5d2ax3)};mxXmlCanvas2D[_0xe4bc[202]][_0xe4bc[1268]]=function(_0x5d2ax2){if(this[_0xe4bc[1286]]){_0x5d2ax2==mxConstants[_0xe4bc[217]]&&(_0x5d2ax2=null);if(this[_0xe4bc[724]][_0xe4bc[1269]]==_0x5d2ax2){return};mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1268]][_0xe4bc[183]](this,arguments)};var _0x5d2ax3=this[_0xe4bc[55]](_0xe4bc[1290]);_0x5d2ax3[_0xe4bc[57]](_0xe4bc[352],null!=_0x5d2ax2?_0x5d2ax2:mxConstants[_0xe4bc[217]]);this[_0xe4bc[813]][_0xe4bc[62]](_0x5d2ax3)};mxXmlCanvas2D[_0xe4bc[202]][_0xe4bc[1270]]=function(_0x5d2ax2){if(this[_0xe4bc[1286]]){if(this[_0xe4bc[724]][_0xe4bc[1271]]==_0x5d2ax2){return};mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1270]][_0xe4bc[183]](this,arguments)};var _0x5d2ax3=this[_0xe4bc[55]](_0xe4bc[1291]);_0x5d2ax3[_0xe4bc[57]](_0xe4bc[1244],_0x5d2ax2);this[_0xe4bc[813]][_0xe4bc[62]](_0x5d2ax3)};mxXmlCanvas2D[_0xe4bc[202]][_0xe4bc[1272]]=function(_0x5d2ax2,_0x5d2ax3){if(this[_0xe4bc[1286]]){if(this[_0xe4bc[724]][_0xe4bc[1273]]==_0x5d2ax2&&this[_0xe4bc[724]][_0xe4bc[1274]]==_0x5d2ax3){return};mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1272]][_0xe4bc[183]](this,arguments)};var _0x5d2ax4=this[_0xe4bc[55]](_0xe4bc[1292]);_0x5d2ax4[_0xe4bc[57]](_0xe4bc[1126],_0x5d2ax2);_0x5d2ax4[_0xe4bc[57]](_0xe4bc[1125],_0x5d2ax3);this[_0xe4bc[813]][_0xe4bc[62]](_0x5d2ax4)};mxXmlCanvas2D[_0xe4bc[202]][_0xe4bc[1319]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){var _0x5d2ax9=this[_0xe4bc[55]](_0xe4bc[1319]);_0x5d2ax9[_0xe4bc[57]](_0xe4bc[235],this[_0xe4bc[1239]](_0x5d2ax2));_0x5d2ax9[_0xe4bc[57]](_0xe4bc[236],this[_0xe4bc[1239]](_0x5d2ax3));_0x5d2ax9[_0xe4bc[57]](_0xe4bc[1302],this[_0xe4bc[1239]](_0x5d2ax4));_0x5d2ax9[_0xe4bc[57]](_0xe4bc[1303],this[_0xe4bc[1239]](_0x5d2ax5));this[_0xe4bc[813]][_0xe4bc[62]](_0x5d2ax9)};mxXmlCanvas2D[_0xe4bc[202]][_0xe4bc[1320]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa){var _0x5d2ax12=this[_0xe4bc[55]](_0xe4bc[1320]);_0x5d2ax12[_0xe4bc[57]](_0xe4bc[235],this[_0xe4bc[1239]](_0x5d2ax2));_0x5d2ax12[_0xe4bc[57]](_0xe4bc[236],this[_0xe4bc[1239]](_0x5d2ax3));_0x5d2ax12[_0xe4bc[57]](_0xe4bc[1302],this[_0xe4bc[1239]](_0x5d2ax4));_0x5d2ax12[_0xe4bc[57]](_0xe4bc[1303],this[_0xe4bc[1239]](_0x5d2ax5));_0x5d2ax12[_0xe4bc[57]](_0xe4bc[1126],this[_0xe4bc[1239]](_0x5d2ax9));_0x5d2ax12[_0xe4bc[57]](_0xe4bc[1125],this[_0xe4bc[1239]](_0x5d2axa));this[_0xe4bc[813]][_0xe4bc[62]](_0x5d2ax12)};mxXmlCanvas2D[_0xe4bc[202]][_0xe4bc[680]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){var _0x5d2ax9=this[_0xe4bc[55]](_0xe4bc[680]);_0x5d2ax9[_0xe4bc[57]](_0xe4bc[235],this[_0xe4bc[1239]](_0x5d2ax2));_0x5d2ax9[_0xe4bc[57]](_0xe4bc[236],this[_0xe4bc[1239]](_0x5d2ax3));_0x5d2ax9[_0xe4bc[57]](_0xe4bc[1302],this[_0xe4bc[1239]](_0x5d2ax4));_0x5d2ax9[_0xe4bc[57]](_0xe4bc[1303],this[_0xe4bc[1239]](_0x5d2ax5));this[_0xe4bc[813]][_0xe4bc[62]](_0x5d2ax9)};mxXmlCanvas2D[_0xe4bc[202]][_0xe4bc[618]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa,_0x5d2ax12,_0x5d2ax13){_0x5d2ax9=this[_0xe4bc[1212]][_0xe4bc[1321]](_0x5d2ax9);var _0x5d2ax14=this[_0xe4bc[55]](_0xe4bc[618]);_0x5d2ax14[_0xe4bc[57]](_0xe4bc[235],this[_0xe4bc[1239]](_0x5d2ax2));_0x5d2ax14[_0xe4bc[57]](_0xe4bc[236],this[_0xe4bc[1239]](_0x5d2ax3));_0x5d2ax14[_0xe4bc[57]](_0xe4bc[1302],this[_0xe4bc[1239]](_0x5d2ax4));_0x5d2ax14[_0xe4bc[57]](_0xe4bc[1303],this[_0xe4bc[1239]](_0x5d2ax5));_0x5d2ax14[_0xe4bc[57]](_0xe4bc[390],_0x5d2ax9);_0x5d2ax14[_0xe4bc[57]](_0xe4bc[1322],_0x5d2axa?_0xe4bc[500]:_0xe4bc[468]);_0x5d2ax14[_0xe4bc[57]](_0xe4bc[623],_0x5d2ax12?_0xe4bc[500]:_0xe4bc[468]);_0x5d2ax14[_0xe4bc[57]](_0xe4bc[624],_0x5d2ax13?_0xe4bc[500]:_0xe4bc[468]);this[_0xe4bc[813]][_0xe4bc[62]](_0x5d2ax14)};mxXmlCanvas2D[_0xe4bc[202]][_0xe4bc[1275]]=function(){this[_0xe4bc[813]][_0xe4bc[62]](this[_0xe4bc[55]](_0xe4bc[1275]));this[_0xe4bc[1218]]=this[_0xe4bc[1217]]=0};mxXmlCanvas2D[_0xe4bc[202]][_0xe4bc[1276]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=this[_0xe4bc[55]](_0xe4bc[582]);_0x5d2ax4[_0xe4bc[57]](_0xe4bc[235],this[_0xe4bc[1239]](_0x5d2ax2));_0x5d2ax4[_0xe4bc[57]](_0xe4bc[236],this[_0xe4bc[1239]](_0x5d2ax3));this[_0xe4bc[813]][_0xe4bc[62]](_0x5d2ax4);this[_0xe4bc[1217]]=_0x5d2ax2;this[_0xe4bc[1218]]=_0x5d2ax3};mxXmlCanvas2D[_0xe4bc[202]][_0xe4bc[1277]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=this[_0xe4bc[55]](_0xe4bc[683]);_0x5d2ax4[_0xe4bc[57]](_0xe4bc[235],this[_0xe4bc[1239]](_0x5d2ax2));_0x5d2ax4[_0xe4bc[57]](_0xe4bc[236],this[_0xe4bc[1239]](_0x5d2ax3));this[_0xe4bc[813]][_0xe4bc[62]](_0x5d2ax4);this[_0xe4bc[1217]]=_0x5d2ax2;this[_0xe4bc[1218]]=_0x5d2ax3};mxXmlCanvas2D[_0xe4bc[202]][_0xe4bc[1278]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){var _0x5d2ax9=this[_0xe4bc[55]](_0xe4bc[1323]);_0x5d2ax9[_0xe4bc[57]](_0xe4bc[1324],this[_0xe4bc[1239]](_0x5d2ax2));_0x5d2ax9[_0xe4bc[57]](_0xe4bc[1325],this[_0xe4bc[1239]](_0x5d2ax3));_0x5d2ax9[_0xe4bc[57]](_0xe4bc[1326],this[_0xe4bc[1239]](_0x5d2ax4));_0x5d2ax9[_0xe4bc[57]](_0xe4bc[1327],this[_0xe4bc[1239]](_0x5d2ax5));this[_0xe4bc[813]][_0xe4bc[62]](_0x5d2ax9);this[_0xe4bc[1217]]=_0x5d2ax4;this[_0xe4bc[1218]]=_0x5d2ax5};mxXmlCanvas2D[_0xe4bc[202]][_0xe4bc[1279]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa){var _0x5d2ax12=this[_0xe4bc[55]](_0xe4bc[1328]);_0x5d2ax12[_0xe4bc[57]](_0xe4bc[1324],this[_0xe4bc[1239]](_0x5d2ax2));_0x5d2ax12[_0xe4bc[57]](_0xe4bc[1325],this[_0xe4bc[1239]](_0x5d2ax3));_0x5d2ax12[_0xe4bc[57]](_0xe4bc[1326],this[_0xe4bc[1239]](_0x5d2ax4));_0x5d2ax12[_0xe4bc[57]](_0xe4bc[1327],this[_0xe4bc[1239]](_0x5d2ax5));_0x5d2ax12[_0xe4bc[57]](_0xe4bc[1329],this[_0xe4bc[1239]](_0x5d2ax9));_0x5d2ax12[_0xe4bc[57]](_0xe4bc[1330],this[_0xe4bc[1239]](_0x5d2axa));this[_0xe4bc[813]][_0xe4bc[62]](_0x5d2ax12);this[_0xe4bc[1217]]=_0x5d2ax9;this[_0xe4bc[1218]]=_0x5d2axa};mxXmlCanvas2D[_0xe4bc[202]][_0xe4bc[268]]=function(){this[_0xe4bc[813]][_0xe4bc[62]](this[_0xe4bc[55]](_0xe4bc[268]))};mxXmlCanvas2D[_0xe4bc[202]][_0xe4bc[963]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa,_0x5d2ax12,_0x5d2ax13,_0x5d2ax14,_0x5d2ax15,_0x5d2ax16,_0x5d2ax17){if(this[_0xe4bc[1285]]&&null!=_0x5d2ax9){mxUtils[_0xe4bc[1331]](_0x5d2ax9)&&(_0x5d2ax9=mxUtils[_0xe4bc[532]](_0x5d2ax9));var _0x5d2ax18=this[_0xe4bc[55]](_0xe4bc[963]);_0x5d2ax18[_0xe4bc[57]](_0xe4bc[235],this[_0xe4bc[1239]](_0x5d2ax2));_0x5d2ax18[_0xe4bc[57]](_0xe4bc[236],this[_0xe4bc[1239]](_0x5d2ax3));_0x5d2ax18[_0xe4bc[57]](_0xe4bc[1302],this[_0xe4bc[1239]](_0x5d2ax4));_0x5d2ax18[_0xe4bc[57]](_0xe4bc[1303],this[_0xe4bc[1239]](_0x5d2ax5));_0x5d2ax18[_0xe4bc[57]](_0xe4bc[1332],_0x5d2ax9);null!=_0x5d2axa&&_0x5d2ax18[_0xe4bc[57]](_0xe4bc[611],_0x5d2axa);null!=_0x5d2ax12&&_0x5d2ax18[_0xe4bc[57]](_0xe4bc[552],_0x5d2ax12);_0x5d2ax18[_0xe4bc[57]](_0xe4bc[1333],_0x5d2ax13?_0xe4bc[500]:_0xe4bc[468]);null==_0x5d2ax14&&(_0x5d2ax14=_0xe4bc[110]);_0x5d2ax18[_0xe4bc[57]](_0xe4bc[1239],_0x5d2ax14);null!=_0x5d2ax15&&_0x5d2ax18[_0xe4bc[57]](_0xe4bc[1334],_0x5d2ax15?_0xe4bc[500]:_0xe4bc[468]);null!=_0x5d2ax16&&_0x5d2ax18[_0xe4bc[57]](_0xe4bc[1335],_0x5d2ax16?_0xe4bc[500]:_0xe4bc[468]);null!=_0x5d2ax17&&_0x5d2ax18[_0xe4bc[57]](_0xe4bc[603],_0x5d2ax17);this[_0xe4bc[813]][_0xe4bc[62]](_0x5d2ax18)}};mxXmlCanvas2D[_0xe4bc[202]][_0xe4bc[1336]]=function(){this[_0xe4bc[813]][_0xe4bc[62]](this[_0xe4bc[55]](_0xe4bc[1336]))};mxXmlCanvas2D[_0xe4bc[202]][_0xe4bc[1334]]=function(){this[_0xe4bc[813]][_0xe4bc[62]](this[_0xe4bc[55]](_0xe4bc[1334]))};mxXmlCanvas2D[_0xe4bc[202]][_0xe4bc[1337]]=function(){this[_0xe4bc[813]][_0xe4bc[62]](this[_0xe4bc[55]](_0xe4bc[1338]))};function mxSvgCanvas2D(_0x5d2ax2,_0x5d2ax3){mxAbstractCanvas2D[_0xe4bc[239]](this);this[_0xe4bc[813]]=_0x5d2ax2;this[_0xe4bc[1339]]=[];this[_0xe4bc[1340]]=null;this[_0xe4bc[1341]]=null!=_0x5d2ax3?_0x5d2ax3:!1;var _0x5d2ax4=null;if(_0x5d2ax2[_0xe4bc[295]]!=document){for(_0x5d2ax4=_0x5d2ax2;null!=_0x5d2ax4&&_0xe4bc[571]!=_0x5d2ax4[_0xe4bc[301]];){_0x5d2ax4=_0x5d2ax4[_0xe4bc[265]]}};null!=_0x5d2ax4&&(0<_0x5d2ax4[_0xe4bc[64]](_0xe4bc[1340])[_0xe4bc[67]]&&(this[_0xe4bc[1340]]=_0x5d2ax4[_0xe4bc[64]](_0xe4bc[1340])[0]),null==this[_0xe4bc[1340]]&&(this[_0xe4bc[1340]]=this[_0xe4bc[55]](_0xe4bc[1340]),null!=_0x5d2ax4[_0xe4bc[285]]?_0x5d2ax4[_0xe4bc[950]](this[_0xe4bc[1340]],_0x5d2ax4[_0xe4bc[285]]):_0x5d2ax4[_0xe4bc[62]](this[_0xe4bc[1340]])),this[_0xe4bc[1341]]&&this[_0xe4bc[1340]][_0xe4bc[62]](this[_0xe4bc[1342]]()))}mxUtils[_0xe4bc[1284]](mxSvgCanvas2D,mxAbstractCanvas2D);mxSvgCanvas2D[_0xe4bc[202]][_0xe4bc[252]]=null;mxSvgCanvas2D[_0xe4bc[202]][_0xe4bc[1343]]= !0;mxSvgCanvas2D[_0xe4bc[202]][_0xe4bc[1285]]= !0;mxSvgCanvas2D[_0xe4bc[202]][_0xe4bc[1344]]= !0;mxSvgCanvas2D[_0xe4bc[202]][_0xe4bc[1345]]=0;mxSvgCanvas2D[_0xe4bc[202]][_0xe4bc[1346]]=0;mxSvgCanvas2D[_0xe4bc[202]][_0xe4bc[1347]]= !1;mxSvgCanvas2D[_0xe4bc[202]][_0xe4bc[862]]=function(){mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[862]][_0xe4bc[183]](this,arguments);this[_0xe4bc[1339]]=[]};mxSvgCanvas2D[_0xe4bc[202]][_0xe4bc[1342]]=function(_0x5d2ax2){_0x5d2ax2=this[_0xe4bc[55]](_0xe4bc[124]);_0x5d2ax2[_0xe4bc[57]](_0xe4bc[60],_0xe4bc[61]);mxUtils[_0xe4bc[53]](_0x5d2ax2,_0xe4bc[1348]+mxConstants[_0xe4bc[484]]+_0xe4bc[1349]+mxConstants[_0xe4bc[483]]+_0xe4bc[1350]);return _0x5d2ax2};mxSvgCanvas2D[_0xe4bc[202]][_0xe4bc[55]]=function(_0x5d2ax2,_0x5d2ax3){if(null!=this[_0xe4bc[813]][_0xe4bc[295]][_0xe4bc[509]]){return this[_0xe4bc[813]][_0xe4bc[295]][_0xe4bc[509]](_0x5d2ax3||mxConstants[_0xe4bc[1351]],_0x5d2ax2)};var _0x5d2ax4=this[_0xe4bc[813]][_0xe4bc[295]][_0xe4bc[55]](_0x5d2ax2);null!=_0x5d2ax3&&_0x5d2ax4[_0xe4bc[57]](_0xe4bc[1352],_0x5d2ax3);return _0x5d2ax4};mxSvgCanvas2D[_0xe4bc[202]][_0xe4bc[1353]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){_0xe4bc[198]==_0x5d2ax2[_0xe4bc[225]](0)&&(_0x5d2ax2=_0x5d2ax2[_0xe4bc[85]](1));_0xe4bc[198]==_0x5d2ax3[_0xe4bc[225]](0)&&(_0x5d2ax3=_0x5d2ax3[_0xe4bc[85]](1));_0x5d2ax2=_0x5d2ax2[_0xe4bc[216]]()+_0xe4bc[213]+_0x5d2ax4;_0x5d2ax3=_0x5d2ax3[_0xe4bc[216]]()+_0xe4bc[213]+_0x5d2ax5;_0x5d2ax4=null;null==_0x5d2ax9||_0x5d2ax9==mxConstants[_0xe4bc[1354]]?_0x5d2ax4=_0xe4bc[1355]:_0x5d2ax9==mxConstants[_0xe4bc[1356]]?_0x5d2ax4=_0xe4bc[1357]:(_0x5d2ax5=_0x5d2ax2,_0x5d2ax2=_0x5d2ax3,_0x5d2ax3=_0x5d2ax5,_0x5d2ax9==mxConstants[_0xe4bc[1358]]?_0x5d2ax4=_0xe4bc[1355]:_0x5d2ax9==mxConstants[_0xe4bc[1359]]&&(_0x5d2ax4=_0xe4bc[1357]));return _0xe4bc[1360]+_0x5d2ax2+_0xe4bc[213]+_0x5d2ax3+_0xe4bc[213]+_0x5d2ax4};mxSvgCanvas2D[_0xe4bc[202]][_0xe4bc[1361]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){var _0x5d2axa=this[_0xe4bc[1353]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9),_0x5d2ax12=this[_0xe4bc[1339]][_0x5d2axa];if(null==_0x5d2ax12){var _0x5d2ax13=this[_0xe4bc[813]][_0xe4bc[538]],_0x5d2ax14=0,_0x5d2ax15=_0x5d2axa+_0xe4bc[213]+_0x5d2ax14;if(null!=_0x5d2ax13){for(_0x5d2ax12=_0x5d2ax13[_0xe4bc[295]][_0xe4bc[1362]](_0x5d2ax15);null!=_0x5d2ax12&&_0x5d2ax12[_0xe4bc[538]]!=_0x5d2ax13;){_0x5d2ax15=_0x5d2axa+_0xe4bc[213]+_0x5d2ax14++,_0x5d2ax12=_0x5d2ax13[_0xe4bc[295]][_0xe4bc[1362]](_0x5d2ax15)}}else {_0x5d2ax15=_0xe4bc[1363]+++this[_0xe4bc[1346]]};null==_0x5d2ax12&&(_0x5d2ax12=this[_0xe4bc[1364]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9),_0x5d2ax12[_0xe4bc[57]](_0xe4bc[1363],_0x5d2ax15),null!=this[_0xe4bc[1340]]?this[_0xe4bc[1340]][_0xe4bc[62]](_0x5d2ax12):_0x5d2ax13[_0xe4bc[62]](_0x5d2ax12));this[_0xe4bc[1339]][_0x5d2axa]=_0x5d2ax12};return _0x5d2ax12[_0xe4bc[284]](_0xe4bc[1363])};mxSvgCanvas2D[_0xe4bc[202]][_0xe4bc[1364]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){var _0x5d2axa=this[_0xe4bc[55]](_0xe4bc[1365]);_0x5d2axa[_0xe4bc[57]](_0xe4bc[1324],_0xe4bc[1366]);_0x5d2axa[_0xe4bc[57]](_0xe4bc[1325],_0xe4bc[1366]);_0x5d2axa[_0xe4bc[57]](_0xe4bc[1326],_0xe4bc[1366]);_0x5d2axa[_0xe4bc[57]](_0xe4bc[1327],_0xe4bc[1366]);null==_0x5d2ax9||_0x5d2ax9==mxConstants[_0xe4bc[1354]]?_0x5d2axa[_0xe4bc[57]](_0xe4bc[1327],_0xe4bc[118]):_0x5d2ax9==mxConstants[_0xe4bc[1356]]?_0x5d2axa[_0xe4bc[57]](_0xe4bc[1326],_0xe4bc[118]):_0x5d2ax9==mxConstants[_0xe4bc[1358]]?_0x5d2axa[_0xe4bc[57]](_0xe4bc[1325],_0xe4bc[118]):_0x5d2ax9==mxConstants[_0xe4bc[1359]]&&_0x5d2axa[_0xe4bc[57]](_0xe4bc[1324],_0xe4bc[118]);_0x5d2ax4=1>_0x5d2ax4?_0xe4bc[1367]+_0x5d2ax4:_0xe4bc[110];_0x5d2ax9=this[_0xe4bc[55]](_0xe4bc[1076]);_0x5d2ax9[_0xe4bc[57]](_0xe4bc[1368],_0xe4bc[1366]);_0x5d2ax9[_0xe4bc[57]](_0xe4bc[124],_0xe4bc[1369]+_0x5d2ax2+_0x5d2ax4);_0x5d2axa[_0xe4bc[62]](_0x5d2ax9);_0x5d2ax4=1>_0x5d2ax5?_0xe4bc[1367]+_0x5d2ax5:_0xe4bc[110];_0x5d2ax9=this[_0xe4bc[55]](_0xe4bc[1076]);_0x5d2ax9[_0xe4bc[57]](_0xe4bc[1368],_0xe4bc[118]);_0x5d2ax9[_0xe4bc[57]](_0xe4bc[124],_0xe4bc[1369]+_0x5d2ax3+_0x5d2ax4);_0x5d2axa[_0xe4bc[62]](_0x5d2ax9);return _0x5d2axa};mxSvgCanvas2D[_0xe4bc[202]][_0xe4bc[1370]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=this[_0xe4bc[252]],_0x5d2ax5=this[_0xe4bc[724]];if(null!=_0x5d2ax4){if(_0xe4bc[1215]==_0x5d2ax4[_0xe4bc[301]]){if(null!=this[_0xe4bc[1215]]&&0<this[_0xe4bc[1215]][_0xe4bc[67]]){_0x5d2ax4[_0xe4bc[57]](_0xe4bc[1371],this[_0xe4bc[1215]][_0xe4bc[234]](_0xe4bc[185]))}else {return}};_0x5d2ax2&&null!=_0x5d2ax5[_0xe4bc[604]]?this[_0xe4bc[1372]]():this[_0xe4bc[1341]]||(_0xe4bc[680]==_0x5d2ax4[_0xe4bc[301]]&&mxClient[_0xe4bc[133]]&&!mxClient[_0xe4bc[76]]&&!mxClient[_0xe4bc[75]]?_0x5d2ax4[_0xe4bc[57]](_0xe4bc[1334],_0xe4bc[1373]):_0x5d2ax4[_0xe4bc[57]](_0xe4bc[1334],_0xe4bc[130]),_0x5d2ax2= !1);_0x5d2ax3&&null!=_0x5d2ax5[_0xe4bc[608]]?this[_0xe4bc[1374]]():this[_0xe4bc[1341]]||_0x5d2ax4[_0xe4bc[57]](_0xe4bc[1336],_0xe4bc[130]);null!=_0x5d2ax5[_0xe4bc[535]]&&0<_0x5d2ax5[_0xe4bc[535]][_0xe4bc[67]]&&_0x5d2ax4[_0xe4bc[57]](_0xe4bc[535],_0x5d2ax5[_0xe4bc[535]]);_0x5d2ax5[_0xe4bc[639]]&&this[_0xe4bc[813]][_0xe4bc[62]](this[_0xe4bc[1375]](_0x5d2ax4));0<this[_0xe4bc[1345]]&&!_0x5d2ax2&&this[_0xe4bc[813]][_0xe4bc[62]](this[_0xe4bc[1376]](_0x5d2ax4));this[_0xe4bc[1229]]&&(_0xe4bc[1215]!=_0x5d2ax4[_0xe4bc[301]]||this[_0xe4bc[1215]][this[_0xe4bc[1215]][_0xe4bc[67]]-1]==this[_0xe4bc[1227]])&&_0x5d2ax4[_0xe4bc[57]](_0xe4bc[1377],_0xe4bc[1378]);this[_0xe4bc[813]][_0xe4bc[62]](_0x5d2ax4)}};mxSvgCanvas2D[_0xe4bc[202]][_0xe4bc[1372]]=function(){var _0x5d2ax2=this[_0xe4bc[724]];1>_0x5d2ax2[_0xe4bc[1244]]&&this[_0xe4bc[252]][_0xe4bc[57]](_0xe4bc[1379],_0x5d2ax2[_0xe4bc[1244]]);null!=_0x5d2ax2[_0xe4bc[604]]&&(null!=_0x5d2ax2[_0xe4bc[606]]?(_0x5d2ax2=this[_0xe4bc[1361]](_0x5d2ax2[_0xe4bc[604]],_0x5d2ax2[_0xe4bc[606]],_0x5d2ax2[_0xe4bc[1247]],_0x5d2ax2[_0xe4bc[1248]],_0x5d2ax2[_0xe4bc[607]]),this[_0xe4bc[252]][_0xe4bc[57]](_0xe4bc[1334],_0xe4bc[1380]+_0x5d2ax2+_0xe4bc[460])):this[_0xe4bc[252]][_0xe4bc[57]](_0xe4bc[1334],_0x5d2ax2[_0xe4bc[604]][_0xe4bc[216]]()))};mxSvgCanvas2D[_0xe4bc[202]][_0xe4bc[1374]]=function(){var _0x5d2ax2=this[_0xe4bc[724]];this[_0xe4bc[252]][_0xe4bc[57]](_0xe4bc[1336],_0x5d2ax2[_0xe4bc[608]][_0xe4bc[216]]());1>_0x5d2ax2[_0xe4bc[1244]]&&this[_0xe4bc[252]][_0xe4bc[57]](_0xe4bc[1381],_0x5d2ax2[_0xe4bc[1244]]);var _0x5d2ax3=Math[_0xe4bc[160]](1,this[_0xe4bc[1239]](_0x5d2ax2[_0xe4bc[610]]*_0x5d2ax2[_0xe4bc[255]]));1!=_0x5d2ax3&&this[_0xe4bc[252]][_0xe4bc[57]](_0xe4bc[1382],_0x5d2ax3);_0xe4bc[1215]==this[_0xe4bc[252]][_0xe4bc[301]]&&this[_0xe4bc[1383]]();_0x5d2ax2[_0xe4bc[648]]&&this[_0xe4bc[252]][_0xe4bc[57]](_0xe4bc[1384],this[_0xe4bc[1385]](_0x5d2ax3))};mxSvgCanvas2D[_0xe4bc[202]][_0xe4bc[1383]]=function(){var _0x5d2ax2=this[_0xe4bc[724]];null!=_0x5d2ax2[_0xe4bc[1256]]&&_0xe4bc[1233]!=_0x5d2ax2[_0xe4bc[1256]]&&this[_0xe4bc[252]][_0xe4bc[57]](_0xe4bc[1386],_0x5d2ax2[_0xe4bc[1256]]);if(null!=_0x5d2ax2[_0xe4bc[1254]]){var _0x5d2ax3=_0x5d2ax2[_0xe4bc[1254]];_0xe4bc[1232]==_0x5d2ax3&&(_0x5d2ax3=_0xe4bc[1387]);_0xe4bc[1387]!=_0x5d2ax3&&this[_0xe4bc[252]][_0xe4bc[57]](_0xe4bc[1388],_0x5d2ax3)};null!=_0x5d2ax2[_0xe4bc[1258]]&&(!this[_0xe4bc[1341]]||10!=_0x5d2ax2[_0xe4bc[1258]])&&this[_0xe4bc[252]][_0xe4bc[57]](_0xe4bc[1389],_0x5d2ax2[_0xe4bc[1258]])};mxSvgCanvas2D[_0xe4bc[202]][_0xe4bc[1385]]=function(_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[724]][_0xe4bc[649]][_0xe4bc[224]](_0xe4bc[185]),_0x5d2ax4=[];if(0<_0x5d2ax3[_0xe4bc[67]]){for(var _0x5d2ax5=0;_0x5d2ax5<_0x5d2ax3[_0xe4bc[67]];_0x5d2ax5++){_0x5d2ax4[_0x5d2ax5]=Number(_0x5d2ax3[_0x5d2ax5])*_0x5d2ax2}};return _0x5d2ax4[_0xe4bc[234]](_0xe4bc[185])};mxSvgCanvas2D[_0xe4bc[202]][_0xe4bc[1376]]=function(_0x5d2ax2){_0x5d2ax2=_0x5d2ax2[_0xe4bc[511]](!0);var _0x5d2ax3=parseFloat(_0x5d2ax2[_0xe4bc[284]](_0xe4bc[1382])||1)+this[_0xe4bc[1345]];_0x5d2ax2[_0xe4bc[57]](_0xe4bc[1377],_0xe4bc[1336]);_0x5d2ax2[_0xe4bc[57]](_0xe4bc[187],_0xe4bc[188]);_0x5d2ax2[_0xe4bc[1390]](_0xe4bc[1384]);_0x5d2ax2[_0xe4bc[57]](_0xe4bc[1382],_0x5d2ax3);_0x5d2ax2[_0xe4bc[57]](_0xe4bc[1334],_0xe4bc[130]);_0x5d2ax2[_0xe4bc[57]](_0xe4bc[1336],mxClient[_0xe4bc[71]]?_0xe4bc[130]:_0xe4bc[1391]);return _0x5d2ax2};mxSvgCanvas2D[_0xe4bc[202]][_0xe4bc[1375]]=function(_0x5d2ax2){_0x5d2ax2=_0x5d2ax2[_0xe4bc[511]](!0);var _0x5d2ax3=this[_0xe4bc[724]];_0xe4bc[130]!=_0x5d2ax2[_0xe4bc[284]](_0xe4bc[1334])&&_0x5d2ax2[_0xe4bc[57]](_0xe4bc[1334],_0x5d2ax3[_0xe4bc[1269]]);_0xe4bc[130]!=_0x5d2ax2[_0xe4bc[284]](_0xe4bc[1336])&&_0x5d2ax2[_0xe4bc[57]](_0xe4bc[1336],_0x5d2ax3[_0xe4bc[1269]]);_0x5d2ax2[_0xe4bc[57]](_0xe4bc[535],_0xe4bc[536]+this[_0xe4bc[1239]](_0x5d2ax3[_0xe4bc[1273]]*_0x5d2ax3[_0xe4bc[255]])+_0xe4bc[537]+this[_0xe4bc[1239]](_0x5d2ax3[_0xe4bc[1274]]*_0x5d2ax3[_0xe4bc[255]])+_0xe4bc[460]+(_0x5d2ax3[_0xe4bc[535]]||_0xe4bc[110]));_0x5d2ax2[_0xe4bc[57]](_0xe4bc[461],_0x5d2ax3[_0xe4bc[1271]]);return _0x5d2ax2};mxSvgCanvas2D[_0xe4bc[202]][_0xe4bc[1294]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){if(0!=_0x5d2ax2||_0x5d2ax3||_0x5d2ax4){var _0x5d2axa=this[_0xe4bc[724]];_0x5d2ax5+=_0x5d2axa[_0xe4bc[1126]];_0x5d2ax9+=_0x5d2axa[_0xe4bc[1125]];_0x5d2ax5*=_0x5d2axa[_0xe4bc[255]];_0x5d2ax9*=_0x5d2axa[_0xe4bc[255]];_0x5d2axa[_0xe4bc[535]]=_0x5d2axa[_0xe4bc[535]]||_0xe4bc[110];if(_0x5d2ax3&&_0x5d2ax4){_0x5d2ax2+=180}else {if(_0x5d2ax3^_0x5d2ax4){var _0x5d2ax12=_0x5d2ax3?_0x5d2ax5:0,_0x5d2ax13=_0x5d2ax3?-1:1,_0x5d2ax14=_0x5d2ax4?_0x5d2ax9:0,_0x5d2ax15=_0x5d2ax4?-1:1;_0x5d2axa[_0xe4bc[535]]+=_0xe4bc[536]+this[_0xe4bc[1239]](_0x5d2ax12)+_0xe4bc[537]+this[_0xe4bc[1239]](_0x5d2ax14)+_0xe4bc[1392]+this[_0xe4bc[1239]](_0x5d2ax13)+_0xe4bc[537]+this[_0xe4bc[1239]](_0x5d2ax15)+_0xe4bc[1393]+this[_0xe4bc[1239]](-_0x5d2ax12)+_0xe4bc[537]+this[_0xe4bc[1239]](-_0x5d2ax14)+_0xe4bc[460]}};if(_0x5d2ax3?!_0x5d2ax4:_0x5d2ax4){_0x5d2ax2*= -1};0!=_0x5d2ax2&&(_0x5d2axa[_0xe4bc[535]]+=_0xe4bc[1394]+this[_0xe4bc[1239]](_0x5d2ax2)+_0xe4bc[537]+this[_0xe4bc[1239]](_0x5d2ax5)+_0xe4bc[537]+this[_0xe4bc[1239]](_0x5d2ax9)+_0xe4bc[460]);_0x5d2axa[_0xe4bc[603]]+=_0x5d2ax2;_0x5d2axa[_0xe4bc[1395]]=_0x5d2ax5;_0x5d2axa[_0xe4bc[1396]]=_0x5d2ax9}};mxSvgCanvas2D[_0xe4bc[202]][_0xe4bc[1275]]=function(){mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1275]][_0xe4bc[183]](this,arguments);this[_0xe4bc[252]]=this[_0xe4bc[55]](_0xe4bc[1215])};mxSvgCanvas2D[_0xe4bc[202]][_0xe4bc[1319]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){var _0x5d2ax9=this[_0xe4bc[724]],_0x5d2axa=this[_0xe4bc[55]](_0xe4bc[1319]);_0x5d2axa[_0xe4bc[57]](_0xe4bc[235],this[_0xe4bc[1239]]((_0x5d2ax2+_0x5d2ax9[_0xe4bc[1126]])*_0x5d2ax9[_0xe4bc[255]]));_0x5d2axa[_0xe4bc[57]](_0xe4bc[236],this[_0xe4bc[1239]]((_0x5d2ax3+_0x5d2ax9[_0xe4bc[1125]])*_0x5d2ax9[_0xe4bc[255]]));_0x5d2axa[_0xe4bc[57]](_0xe4bc[117],this[_0xe4bc[1239]](_0x5d2ax4*_0x5d2ax9[_0xe4bc[255]]));_0x5d2axa[_0xe4bc[57]](_0xe4bc[119],this[_0xe4bc[1239]](_0x5d2ax5*_0x5d2ax9[_0xe4bc[255]]));this[_0xe4bc[252]]=_0x5d2axa};mxSvgCanvas2D[_0xe4bc[202]][_0xe4bc[1320]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa){this[_0xe4bc[1319]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5);0<_0x5d2ax9&&this[_0xe4bc[252]][_0xe4bc[57]](_0xe4bc[1397],this[_0xe4bc[1239]](_0x5d2ax9*this[_0xe4bc[724]][_0xe4bc[255]]));0<_0x5d2axa&&this[_0xe4bc[252]][_0xe4bc[57]](_0xe4bc[1398],this[_0xe4bc[1239]](_0x5d2axa*this[_0xe4bc[724]][_0xe4bc[255]]))};mxSvgCanvas2D[_0xe4bc[202]][_0xe4bc[680]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){var _0x5d2ax9=this[_0xe4bc[724]],_0x5d2axa=this[_0xe4bc[55]](_0xe4bc[680]);_0x5d2axa[_0xe4bc[57]](_0xe4bc[1296],Math[_0xe4bc[488]]((_0x5d2ax2+_0x5d2ax4/2+_0x5d2ax9[_0xe4bc[1126]])*_0x5d2ax9[_0xe4bc[255]]));_0x5d2axa[_0xe4bc[57]](_0xe4bc[1297],Math[_0xe4bc[488]]((_0x5d2ax3+_0x5d2ax5/2+_0x5d2ax9[_0xe4bc[1125]])*_0x5d2ax9[_0xe4bc[255]]));_0x5d2axa[_0xe4bc[57]](_0xe4bc[1397],_0x5d2ax4/2*_0x5d2ax9[_0xe4bc[255]]);_0x5d2axa[_0xe4bc[57]](_0xe4bc[1398],_0x5d2ax5/2*_0x5d2ax9[_0xe4bc[255]]);this[_0xe4bc[252]]=_0x5d2axa};mxSvgCanvas2D[_0xe4bc[202]][_0xe4bc[618]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa,_0x5d2ax12,_0x5d2ax13){_0x5d2ax9=this[_0xe4bc[1212]][_0xe4bc[1321]](_0x5d2ax9);_0x5d2axa=null!=_0x5d2axa?_0x5d2axa:!0;_0x5d2ax12=null!=_0x5d2ax12?_0x5d2ax12:!1;_0x5d2ax13=null!=_0x5d2ax13?_0x5d2ax13:!1;var _0x5d2ax14=this[_0xe4bc[724]];_0x5d2ax2+=_0x5d2ax14[_0xe4bc[1126]];_0x5d2ax3+=_0x5d2ax14[_0xe4bc[1125]];var _0x5d2ax15=this[_0xe4bc[55]](_0xe4bc[618]);_0x5d2ax15[_0xe4bc[57]](_0xe4bc[235],this[_0xe4bc[1239]](_0x5d2ax2*_0x5d2ax14[_0xe4bc[255]]));_0x5d2ax15[_0xe4bc[57]](_0xe4bc[236],this[_0xe4bc[1239]](_0x5d2ax3*_0x5d2ax14[_0xe4bc[255]]));_0x5d2ax15[_0xe4bc[57]](_0xe4bc[117],this[_0xe4bc[1239]](_0x5d2ax4*_0x5d2ax14[_0xe4bc[255]]));_0x5d2ax15[_0xe4bc[57]](_0xe4bc[119],this[_0xe4bc[1239]](_0x5d2ax5*_0x5d2ax14[_0xe4bc[255]]));null==_0x5d2ax15[_0xe4bc[1399]]?_0x5d2ax15[_0xe4bc[57]](_0xe4bc[1400],_0x5d2ax9):_0x5d2ax15[_0xe4bc[1399]](mxConstants.NS_XLINK,_0xe4bc[44],_0x5d2ax9);_0x5d2axa||_0x5d2ax15[_0xe4bc[57]](_0xe4bc[1401],_0xe4bc[130]);1>_0x5d2ax14[_0xe4bc[1244]]&&_0x5d2ax15[_0xe4bc[57]](_0xe4bc[461],_0x5d2ax14[_0xe4bc[1244]]);_0x5d2ax9=this[_0xe4bc[724]][_0xe4bc[535]]||_0xe4bc[110];if(_0x5d2ax12||_0x5d2ax13){var _0x5d2ax16=_0x5d2axa=1,_0x5d2ax17=0,_0x5d2ax18=0;_0x5d2ax12&&(_0x5d2axa= -1,_0x5d2ax17=-_0x5d2ax4-2*_0x5d2ax2);_0x5d2ax13&&(_0x5d2ax16= -1,_0x5d2ax18=-_0x5d2ax5-2*_0x5d2ax3);_0x5d2ax9+=_0xe4bc[1402]+_0x5d2axa+_0xe4bc[537]+_0x5d2ax16+_0xe4bc[1393]+_0x5d2ax17+_0xe4bc[537]+_0x5d2ax18+_0xe4bc[460]};0<_0x5d2ax9[_0xe4bc[67]]&&_0x5d2ax15[_0xe4bc[57]](_0xe4bc[535],_0x5d2ax9);this[_0xe4bc[813]][_0xe4bc[62]](_0x5d2ax15);this[_0xe4bc[1347]]&&(_0x5d2ax15[_0xe4bc[57]](_0xe4bc[124],_0xe4bc[1403]),_0x5d2ax15=this[_0xe4bc[55]](_0xe4bc[1319]),_0x5d2ax15[_0xe4bc[57]](_0xe4bc[187],_0xe4bc[188]),_0x5d2ax15[_0xe4bc[57]](_0xe4bc[1377],_0xe4bc[1334]),_0x5d2ax15[_0xe4bc[57]](_0xe4bc[235],this[_0xe4bc[1239]](_0x5d2ax2*_0x5d2ax14[_0xe4bc[255]])),_0x5d2ax15[_0xe4bc[57]](_0xe4bc[236],this[_0xe4bc[1239]](_0x5d2ax3*_0x5d2ax14[_0xe4bc[255]])),_0x5d2ax15[_0xe4bc[57]](_0xe4bc[117],this[_0xe4bc[1239]](_0x5d2ax4*_0x5d2ax14[_0xe4bc[255]])),_0x5d2ax15[_0xe4bc[57]](_0xe4bc[119],this[_0xe4bc[1239]](_0x5d2ax5*_0x5d2ax14[_0xe4bc[255]])),this[_0xe4bc[813]][_0xe4bc[62]](_0x5d2ax15))};mxSvgCanvas2D[_0xe4bc[202]][_0xe4bc[1404]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){_0x5d2ax4=this[_0xe4bc[724]];_0x5d2ax5=_0xe4bc[1405]+Math[_0xe4bc[488]](_0x5d2ax4[_0xe4bc[487]])+_0xe4bc[1406]+_0x5d2ax4[_0xe4bc[486]]+_0xe4bc[1407]+_0x5d2ax4[_0xe4bc[665]]+_0xe4bc[1408]+Math[_0xe4bc[488]](_0x5d2ax4[_0xe4bc[487]]*mxConstants[_0xe4bc[490]])+_0xe4bc[1409]+_0x5d2ax5;(_0x5d2ax4[_0xe4bc[666]]&mxConstants[_0xe4bc[1410]])==mxConstants[_0xe4bc[1410]]&&(_0x5d2ax5+=_0xe4bc[1411]);(_0x5d2ax4[_0xe4bc[666]]&mxConstants[_0xe4bc[1412]])==mxConstants[_0xe4bc[1412]]&&(_0x5d2ax5+=_0xe4bc[1413]);(_0x5d2ax4[_0xe4bc[666]]&mxConstants[_0xe4bc[1414]])==mxConstants[_0xe4bc[1414]]&&(_0x5d2ax5+=_0xe4bc[1415]);_0x5d2ax3==mxConstants[_0xe4bc[479]]?_0x5d2ax5+=_0xe4bc[1416]:_0x5d2ax3==mxConstants[_0xe4bc[480]]&&(_0x5d2ax5+=_0xe4bc[1417]);_0x5d2ax3=_0xe4bc[110];null!=_0x5d2ax4[_0xe4bc[1261]]&&(_0x5d2ax3+=_0xe4bc[1418]+_0x5d2ax4[_0xe4bc[1261]]+_0xe4bc[471]);null!=_0x5d2ax4[_0xe4bc[1263]]&&(_0x5d2ax3+=_0xe4bc[1419]+_0x5d2ax4[_0xe4bc[1263]]+_0xe4bc[471]);mxUtils[_0xe4bc[1331]](_0x5d2ax2)||(_0x5d2ax4=document[_0xe4bc[55]](_0xe4bc[126]),_0x5d2ax4[_0xe4bc[339]]=_0x5d2ax2[_0xe4bc[230]](/&lt;/g,_0xe4bc[1421])[_0xe4bc[230]](/&gt;/g,_0xe4bc[1420])[_0xe4bc[230]](/</g,_0xe4bc[334])[_0xe4bc[230]](/>/g,_0xe4bc[335]),_0x5d2ax2=_0x5d2ax4[_0xe4bc[131]],_0x5d2ax9?_0x5d2ax5+=_0x5d2ax3:0<_0x5d2ax3[_0xe4bc[67]]&&(_0x5d2ax2=_0xe4bc[1422]+_0x5d2ax3+_0xe4bc[1423]+_0x5d2ax2+_0xe4bc[1424]));if(!mxClient[_0xe4bc[80]]&&document[_0xe4bc[509]]){return _0x5d2ax9=document[_0xe4bc[509]](_0xe4bc[577],_0xe4bc[485]),_0x5d2ax9[_0xe4bc[57]](_0xe4bc[124],_0x5d2ax5),mxUtils[_0xe4bc[1331]](_0x5d2ax2)?this[_0xe4bc[813]][_0xe4bc[295]]!=document?_0x5d2ax9[_0xe4bc[62]](_0x5d2ax2[_0xe4bc[511]](!0)):_0x5d2ax9[_0xe4bc[62]](_0x5d2ax2):_0x5d2ax9[_0xe4bc[339]]=_0x5d2ax2,_0x5d2ax9};mxUtils[_0xe4bc[1331]](_0x5d2ax2)&&this[_0xe4bc[813]][_0xe4bc[295]]!=document&&(_0x5d2ax2=_0x5d2ax2[_0xe4bc[342]]);_0x5d2ax2=_0x5d2ax2[_0xe4bc[230]](/<br>/g,_0xe4bc[1426])[_0xe4bc[230]](/<hr>/g,_0xe4bc[1425]);return mxUtils[_0xe4bc[877]](_0xe4bc[1427]+_0x5d2ax5+_0xe4bc[1423]+_0x5d2ax2+_0xe4bc[1424])[_0xe4bc[158]]};mxSvgCanvas2D[_0xe4bc[202]][_0xe4bc[963]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa,_0x5d2ax12,_0x5d2ax13,_0x5d2ax14,_0x5d2ax15,_0x5d2ax16,_0x5d2ax17){if(this[_0xe4bc[1285]]&&null!=_0x5d2ax9){_0x5d2ax17=null!=_0x5d2ax17?_0x5d2ax17:0;var _0x5d2ax18=this[_0xe4bc[724]];_0x5d2ax2+=_0x5d2ax18[_0xe4bc[1126]];_0x5d2ax3+=_0x5d2ax18[_0xe4bc[1125]];if(this[_0xe4bc[1344]]&&_0xe4bc[1428]==_0x5d2ax14){var _0x5d2ax19=_0xe4bc[1429];_0x5d2ax16?(_0x5d2ax19+=_0xe4bc[1430],0<_0x5d2ax5&&(_0x5d2ax19+=_0xe4bc[1431]+Math[_0xe4bc[488]](_0x5d2ax5)+_0xe4bc[1409]),0<_0x5d2ax4&&(_0x5d2ax19+=_0xe4bc[1432]+Math[_0xe4bc[488]](_0x5d2ax4)+_0xe4bc[1409])):_0x5d2ax15&&(_0x5d2ax19+=_0xe4bc[1432]+Math[_0xe4bc[488]](_0x5d2ax4)+_0xe4bc[1409],0<_0x5d2ax5&&(_0x5d2ax19+=_0xe4bc[1431]+Math[_0xe4bc[488]](_0x5d2ax5)+_0xe4bc[1409]));_0x5d2ax13?(!_0x5d2ax16&&0<_0x5d2ax4&&(_0x5d2ax19+=_0xe4bc[1432]+Math[_0xe4bc[488]](_0x5d2ax4)+_0xe4bc[1409]),_0x5d2ax19+=_0xe4bc[1433]):_0x5d2ax19+=_0xe4bc[1434];_0x5d2ax13=this[_0xe4bc[55]](_0xe4bc[449]);1>_0x5d2ax18[_0xe4bc[1244]]&&_0x5d2ax13[_0xe4bc[57]](_0xe4bc[461],_0x5d2ax18[_0xe4bc[1244]]);_0x5d2ax14=this[_0xe4bc[55]](_0xe4bc[1435]);_0x5d2ax14[_0xe4bc[57]](_0xe4bc[1377],_0xe4bc[1378]);_0x5d2ax19=this[_0xe4bc[1404]](_0x5d2ax9,_0x5d2axa,_0x5d2ax12,_0x5d2ax19,_0x5d2ax15);if(null!=_0x5d2ax19){_0x5d2ax13[_0xe4bc[62]](_0x5d2ax14);this[_0xe4bc[813]][_0xe4bc[62]](_0x5d2ax13);var _0x5d2ax1a=0;if(mxClient[_0xe4bc[80]]&&!mxClient[_0xe4bc[48]]){var _0x5d2ax1b=document[_0xe4bc[55]](_0xe4bc[485]);_0x5d2ax1b[_0xe4bc[124]][_0xe4bc[103]]=_0x5d2ax19[_0xe4bc[284]](_0xe4bc[124]);_0x5d2ax1b[_0xe4bc[124]][_0xe4bc[495]]=mxClient[_0xe4bc[496]]?_0xe4bc[497]:_0xe4bc[498];_0x5d2ax1b[_0xe4bc[124]][_0xe4bc[187]]=_0xe4bc[188];_0x5d2ax1b[_0xe4bc[339]]=mxUtils[_0xe4bc[1331]](_0x5d2ax9)?_0x5d2ax9[_0xe4bc[342]]:_0x5d2ax9;document[_0xe4bc[112]][_0xe4bc[62]](_0x5d2ax1b);_0x5d2ax1a=_0x5d2ax1b[_0xe4bc[359]];_0x5d2ax5=mxClient[_0xe4bc[496]]&&0<_0x5d2ax5&&_0x5d2ax16?Math[_0xe4bc[243]](_0x5d2ax5,_0x5d2ax1b[_0xe4bc[167]]+2):_0x5d2ax1b[_0xe4bc[167]];_0x5d2ax1b[_0xe4bc[265]][_0xe4bc[266]](_0x5d2ax1b);_0x5d2ax14[_0xe4bc[62]](_0x5d2ax19)}else {this[_0xe4bc[813]][_0xe4bc[295]]!=document?(_0x5d2ax19[_0xe4bc[124]][_0xe4bc[187]]=_0xe4bc[188],document[_0xe4bc[112]][_0xe4bc[62]](_0x5d2ax19),_0x5d2ax1a=_0x5d2ax19[_0xe4bc[359]],_0x5d2ax5=_0x5d2ax19[_0xe4bc[167]],_0x5d2ax14[_0xe4bc[62]](_0x5d2ax19),_0x5d2ax19[_0xe4bc[124]][_0xe4bc[187]]=_0xe4bc[110]):(_0x5d2ax14[_0xe4bc[62]](_0x5d2ax19),_0x5d2ax1a=_0x5d2ax19[_0xe4bc[359]],_0x5d2ax5=_0x5d2ax19[_0xe4bc[167]])};_0x5d2ax4=_0x5d2ax15?Math[_0xe4bc[160]](_0x5d2ax4,_0x5d2ax1a):_0x5d2ax1a;1>_0x5d2ax18[_0xe4bc[1244]]&&_0x5d2ax13[_0xe4bc[57]](_0xe4bc[461],_0x5d2ax18[_0xe4bc[1244]]);_0x5d2ax15=_0x5d2ax9=0;_0x5d2axa==mxConstants[_0xe4bc[479]]?_0x5d2ax9-=_0x5d2ax4/2:_0x5d2axa==mxConstants[_0xe4bc[480]]&&(_0x5d2ax9-=_0x5d2ax4);_0x5d2ax2+=_0x5d2ax9;_0x5d2ax12==mxConstants[_0xe4bc[481]]?_0x5d2ax15-=_0x5d2ax5/2:_0x5d2ax12==mxConstants[_0xe4bc[482]]&&(_0x5d2ax15-=_0x5d2ax5);_0x5d2ax3+=_0x5d2ax15;_0x5d2axa=1!=_0x5d2ax18[_0xe4bc[255]]?_0xe4bc[1402]+_0x5d2ax18[_0xe4bc[255]]+_0xe4bc[460]:_0xe4bc[110];0!=_0x5d2ax18[_0xe4bc[603]]&&this[_0xe4bc[1216]]?(_0x5d2axa+=_0xe4bc[1394]+_0x5d2ax18[_0xe4bc[603]]+_0xe4bc[537]+_0x5d2ax4/2+_0xe4bc[537]+_0x5d2ax5/2+_0xe4bc[460],_0x5d2ax3=this[_0xe4bc[1241]]((_0x5d2ax2+_0x5d2ax4/2)*_0x5d2ax18[_0xe4bc[255]],(_0x5d2ax3+_0x5d2ax5/2)*_0x5d2ax18[_0xe4bc[255]],_0x5d2ax18[_0xe4bc[603]],_0x5d2ax18[_0xe4bc[1395]],_0x5d2ax18[_0xe4bc[1396]]),_0x5d2ax2=_0x5d2ax3[_0xe4bc[235]]-_0x5d2ax4*_0x5d2ax18[_0xe4bc[255]]/2,_0x5d2ax3=_0x5d2ax3[_0xe4bc[236]]-_0x5d2ax5*_0x5d2ax18[_0xe4bc[255]]/2):(_0x5d2ax2*=_0x5d2ax18[_0xe4bc[255]],_0x5d2ax3*=_0x5d2ax18[_0xe4bc[255]]);0!=_0x5d2ax17&&(_0x5d2axa+=_0xe4bc[1394]+_0x5d2ax17+_0xe4bc[537]+-_0x5d2ax9+_0xe4bc[537]+-_0x5d2ax15+_0xe4bc[460]);_0x5d2ax13[_0xe4bc[57]](_0xe4bc[535],_0xe4bc[536]+Math[_0xe4bc[488]](_0x5d2ax2)+_0xe4bc[537]+Math[_0xe4bc[488]](_0x5d2ax3)+_0xe4bc[460]+_0x5d2axa);_0x5d2ax14[_0xe4bc[57]](_0xe4bc[117],Math[_0xe4bc[488]](Math[_0xe4bc[160]](1,_0x5d2ax4)));_0x5d2ax14[_0xe4bc[57]](_0xe4bc[119],Math[_0xe4bc[488]](Math[_0xe4bc[160]](1,_0x5d2ax5)))}}else {this[_0xe4bc[1436]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa,_0x5d2ax12,_0x5d2ax13,_0x5d2ax15,_0x5d2ax16,_0x5d2ax17)}}};mxSvgCanvas2D[_0xe4bc[202]][_0xe4bc[1437]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){_0x5d2ax2=Math[_0xe4bc[488]](_0x5d2ax2);_0x5d2ax3=Math[_0xe4bc[488]](_0x5d2ax3);_0x5d2ax4=Math[_0xe4bc[488]](_0x5d2ax4);_0x5d2ax5=Math[_0xe4bc[488]](_0x5d2ax5);for(var _0x5d2ax9=_0xe4bc[1438]+_0x5d2ax2+_0xe4bc[213]+_0x5d2ax3+_0xe4bc[213]+_0x5d2ax4+_0xe4bc[213]+_0x5d2ax5,_0x5d2axa=0,_0x5d2ax12=_0x5d2ax9+_0xe4bc[213]+_0x5d2axa;null!=document[_0xe4bc[1362]](_0x5d2ax12);){_0x5d2ax12=_0x5d2ax9+_0xe4bc[213]+ ++_0x5d2axa};clip=this[_0xe4bc[55]](_0xe4bc[1439]);clip[_0xe4bc[57]](_0xe4bc[1363],_0x5d2ax12);_0x5d2ax9=this[_0xe4bc[55]](_0xe4bc[1319]);_0x5d2ax9[_0xe4bc[57]](_0xe4bc[235],_0x5d2ax2);_0x5d2ax9[_0xe4bc[57]](_0xe4bc[236],_0x5d2ax3);_0x5d2ax9[_0xe4bc[57]](_0xe4bc[117],_0x5d2ax4);_0x5d2ax9[_0xe4bc[57]](_0xe4bc[119],_0x5d2ax5);clip[_0xe4bc[62]](_0x5d2ax9);return clip};mxSvgCanvas2D[_0xe4bc[202]][_0xe4bc[1436]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa,_0x5d2ax12,_0x5d2ax13,_0x5d2ax14,_0x5d2ax15,_0x5d2ax16){_0x5d2ax16=null!=_0x5d2ax16?_0x5d2ax16:0;_0x5d2ax13=this[_0xe4bc[724]];var _0x5d2ax17=Math[_0xe4bc[488]](_0x5d2ax13[_0xe4bc[487]]),_0x5d2ax18=this[_0xe4bc[55]](_0xe4bc[449]),_0x5d2ax19=_0x5d2ax13[_0xe4bc[535]]||_0xe4bc[110];0!=_0x5d2ax16&&(_0x5d2ax19+=_0xe4bc[1394]+_0x5d2ax16+_0xe4bc[537]+this[_0xe4bc[1239]](_0x5d2ax2*_0x5d2ax13[_0xe4bc[255]])+_0xe4bc[537]+this[_0xe4bc[1239]](_0x5d2ax3*_0x5d2ax13[_0xe4bc[255]])+_0xe4bc[460]);if(_0x5d2ax15&&0<_0x5d2ax4&&0<_0x5d2ax5){var _0x5d2ax1a=_0x5d2ax2;_0x5d2ax16=_0x5d2ax3;_0x5d2axa==mxConstants[_0xe4bc[479]]?_0x5d2ax1a-=_0x5d2ax4/2:_0x5d2axa==mxConstants[_0xe4bc[480]]&&(_0x5d2ax1a-=_0x5d2ax4);_0x5d2ax12==mxConstants[_0xe4bc[481]]?_0x5d2ax16-=_0x5d2ax5/2:_0x5d2ax12==mxConstants[_0xe4bc[482]]&&(_0x5d2ax16-=_0x5d2ax5);_0x5d2ax16=this[_0xe4bc[1437]](_0x5d2ax1a*_0x5d2ax13[_0xe4bc[255]]-2,_0x5d2ax16*_0x5d2ax13[_0xe4bc[255]]-2,_0x5d2ax4*_0x5d2ax13[_0xe4bc[255]]+4,_0x5d2ax5*_0x5d2ax13[_0xe4bc[255]]+4);null!=this[_0xe4bc[1340]]?this[_0xe4bc[1340]][_0xe4bc[62]](_0x5d2ax16):this[_0xe4bc[813]][_0xe4bc[62]](_0x5d2ax16);_0x5d2ax18[_0xe4bc[57]](_0xe4bc[1440],_0xe4bc[1380]+_0x5d2ax16[_0xe4bc[284]](_0xe4bc[1363])+_0xe4bc[460])};this[_0xe4bc[1441]](_0x5d2ax18,_0x5d2axa);_0x5d2ax16=_0x5d2axa==mxConstants[_0xe4bc[480]]?_0xe4bc[1282]:_0x5d2axa==mxConstants[_0xe4bc[479]]?_0xe4bc[554]:_0xe4bc[861];_0xe4bc[861]!=_0x5d2ax16&&_0x5d2ax18[_0xe4bc[57]](_0xe4bc[1442],_0x5d2ax16);(!this[_0xe4bc[1341]]||_0x5d2ax17!=mxConstants[_0xe4bc[483]])&&_0x5d2ax18[_0xe4bc[57]](_0xe4bc[1443],Math[_0xe4bc[488]](_0x5d2ax17*_0x5d2ax13[_0xe4bc[255]])+_0xe4bc[168]);0<_0x5d2ax19[_0xe4bc[67]]&&_0x5d2ax18[_0xe4bc[57]](_0xe4bc[535],_0x5d2ax19);1>_0x5d2ax13[_0xe4bc[1244]]&&_0x5d2ax18[_0xe4bc[57]](_0xe4bc[461],_0x5d2ax13[_0xe4bc[1244]]);var _0x5d2ax19=_0x5d2ax9[_0xe4bc[224]](_0xe4bc[192]),_0x5d2ax1a=Math[_0xe4bc[488]](_0x5d2ax17*mxConstants[_0xe4bc[490]]),_0x5d2ax1b=_0x5d2ax17+(_0x5d2ax19[_0xe4bc[67]]-1)*_0x5d2ax1a;_0x5d2ax16=_0x5d2ax3+_0x5d2ax17-1;_0x5d2ax12==mxConstants[_0xe4bc[481]]?(_0x5d2ax5=(this[_0xe4bc[1343]]&&_0x5d2ax15&&0<_0x5d2ax5?Math[_0xe4bc[243]](_0x5d2ax1b,_0x5d2ax5):_0x5d2ax1b)/2,_0x5d2ax16-=_0x5d2ax5+1):_0x5d2ax12==mxConstants[_0xe4bc[482]]&&(_0x5d2ax5=this[_0xe4bc[1343]]&&_0x5d2ax15&&0<_0x5d2ax5?Math[_0xe4bc[243]](_0x5d2ax1b,_0x5d2ax5):_0x5d2ax1b,_0x5d2ax16-=_0x5d2ax5+2);for(_0x5d2ax5=0;_0x5d2ax5<_0x5d2ax19[_0xe4bc[67]];_0x5d2ax5++){0<_0x5d2ax19[_0x5d2ax5][_0xe4bc[67]]&&0<mxUtils[_0xe4bc[330]](_0x5d2ax19[_0x5d2ax5])[_0xe4bc[67]]&&(_0x5d2ax15=this[_0xe4bc[55]](_0xe4bc[963]),_0x5d2ax15[_0xe4bc[57]](_0xe4bc[235],this[_0xe4bc[1239]](_0x5d2ax2*_0x5d2ax13[_0xe4bc[255]])),_0x5d2ax15[_0xe4bc[57]](_0xe4bc[236],this[_0xe4bc[1239]](_0x5d2ax16*_0x5d2ax13[_0xe4bc[255]])),mxUtils[_0xe4bc[53]](_0x5d2ax15,_0x5d2ax19[_0x5d2ax5]),_0x5d2ax18[_0xe4bc[62]](_0x5d2ax15)),_0x5d2ax16+=_0x5d2ax1a};this[_0xe4bc[813]][_0xe4bc[62]](_0x5d2ax18);this[_0xe4bc[1444]](_0x5d2ax18,_0x5d2ax9,_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax1b,_0x5d2axa,_0x5d2ax12,_0x5d2ax14)};mxSvgCanvas2D[_0xe4bc[202]][_0xe4bc[1441]]=function(_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[724]];_0x5d2ax2[_0xe4bc[57]](_0xe4bc[1334],_0x5d2ax3[_0xe4bc[665]]);(!this[_0xe4bc[1341]]||_0x5d2ax3[_0xe4bc[486]]!=mxConstants[_0xe4bc[484]])&&_0x5d2ax2[_0xe4bc[57]](_0xe4bc[1445],_0x5d2ax3[_0xe4bc[486]]);(_0x5d2ax3[_0xe4bc[666]]&mxConstants[_0xe4bc[1410]])==mxConstants[_0xe4bc[1410]]&&_0x5d2ax2[_0xe4bc[57]](_0xe4bc[1446],_0xe4bc[1447]);(_0x5d2ax3[_0xe4bc[666]]&mxConstants[_0xe4bc[1412]])==mxConstants[_0xe4bc[1412]]&&_0x5d2ax2[_0xe4bc[57]](_0xe4bc[1448],_0xe4bc[1449]);(_0x5d2ax3[_0xe4bc[666]]&mxConstants[_0xe4bc[1414]])==mxConstants[_0xe4bc[1414]]&&_0x5d2ax2[_0xe4bc[57]](_0xe4bc[1450],_0xe4bc[355])};mxSvgCanvas2D[_0xe4bc[202]][_0xe4bc[1444]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa,_0x5d2ax12,_0x5d2ax13,_0x5d2ax14){var _0x5d2ax15=this[_0xe4bc[724]];if(null!=_0x5d2ax15[_0xe4bc[1261]]||null!=_0x5d2ax15[_0xe4bc[1263]]){var _0x5d2ax16=null;_0x5d2ax14?(_0x5d2ax12==mxConstants[_0xe4bc[479]]?_0x5d2ax4-=_0x5d2ax9/2:_0x5d2ax12==mxConstants[_0xe4bc[480]]&&(_0x5d2ax4-=_0x5d2ax9),_0x5d2ax13==mxConstants[_0xe4bc[481]]?_0x5d2ax5-=_0x5d2axa/2:_0x5d2ax13==mxConstants[_0xe4bc[482]]&&(_0x5d2ax5-=_0x5d2axa),_0x5d2ax16= new mxRectangle((_0x5d2ax4+1)*_0x5d2ax15[_0xe4bc[255]],_0x5d2ax5*_0x5d2ax15[_0xe4bc[255]],(_0x5d2ax9-2)*_0x5d2ax15[_0xe4bc[255]],(_0x5d2axa+2)*_0x5d2ax15[_0xe4bc[255]])):null!=_0x5d2ax2[_0xe4bc[1451]]&&this[_0xe4bc[813]][_0xe4bc[295]]==document?(_0x5d2ax16=_0x5d2ax2[_0xe4bc[1451]](),_0x5d2ax3=mxClient[_0xe4bc[80]]&&mxClient[_0xe4bc[48]],_0x5d2ax16= new mxRectangle(_0x5d2ax16[_0xe4bc[235]],_0x5d2ax16[_0xe4bc[236]]+(_0x5d2ax3?0:1),_0x5d2ax16[_0xe4bc[117]],_0x5d2ax16[_0xe4bc[119]]+(_0x5d2ax3?1:0))):(_0x5d2ax16=document[_0xe4bc[55]](_0xe4bc[485]),_0x5d2ax16[_0xe4bc[124]][_0xe4bc[489]]=Math[_0xe4bc[488]](_0x5d2ax15[_0xe4bc[487]]*mxConstants[_0xe4bc[490]])+_0xe4bc[168],_0x5d2ax16[_0xe4bc[124]][_0xe4bc[487]]=Math[_0xe4bc[488]](_0x5d2ax15[_0xe4bc[487]])+_0xe4bc[168],_0x5d2ax16[_0xe4bc[124]][_0xe4bc[486]]=_0x5d2ax15[_0xe4bc[486]],_0x5d2ax16[_0xe4bc[124]][_0xe4bc[493]]=_0xe4bc[494],_0x5d2ax16[_0xe4bc[124]][_0xe4bc[491]]=_0xe4bc[492],_0x5d2ax16[_0xe4bc[124]][_0xe4bc[187]]=_0xe4bc[188],_0x5d2ax16[_0xe4bc[124]][_0xe4bc[495]]=mxClient[_0xe4bc[496]]?_0xe4bc[497]:_0xe4bc[498],_0x5d2ax16[_0xe4bc[124]][_0xe4bc[499]]=_0xe4bc[500],(_0x5d2ax15[_0xe4bc[666]]&mxConstants[_0xe4bc[1410]])==mxConstants[_0xe4bc[1410]]&&(_0x5d2ax16[_0xe4bc[124]][_0xe4bc[1452]]=_0xe4bc[1447]),(_0x5d2ax15[_0xe4bc[666]]&mxConstants[_0xe4bc[1412]])==mxConstants[_0xe4bc[1412]]&&(_0x5d2ax16[_0xe4bc[124]][_0xe4bc[666]]=_0xe4bc[1449]),_0x5d2ax3=mxUtils[_0xe4bc[321]](_0x5d2ax3,!1),_0x5d2ax16[_0xe4bc[339]]=_0x5d2ax3[_0xe4bc[230]](/\n/g,_0xe4bc[1453]),document[_0xe4bc[112]][_0xe4bc[62]](_0x5d2ax16),_0x5d2ax9=_0x5d2ax16[_0xe4bc[359]],_0x5d2axa=_0x5d2ax16[_0xe4bc[167]],_0x5d2ax16[_0xe4bc[265]][_0xe4bc[266]](_0x5d2ax16),_0x5d2ax12==mxConstants[_0xe4bc[479]]?_0x5d2ax4-=_0x5d2ax9/2:_0x5d2ax12==mxConstants[_0xe4bc[480]]&&(_0x5d2ax4-=_0x5d2ax9),_0x5d2ax13==mxConstants[_0xe4bc[481]]?_0x5d2ax5-=_0x5d2axa/2:_0x5d2ax13==mxConstants[_0xe4bc[482]]&&(_0x5d2ax5-=_0x5d2axa),_0x5d2ax16= new mxRectangle((_0x5d2ax4+1)*_0x5d2ax15[_0xe4bc[255]],(_0x5d2ax5+2)*_0x5d2ax15[_0xe4bc[255]],_0x5d2ax9*_0x5d2ax15[_0xe4bc[255]],(_0x5d2axa+1)*_0x5d2ax15[_0xe4bc[255]]));null!=_0x5d2ax16&&(_0x5d2ax3=this[_0xe4bc[55]](_0xe4bc[1319]),_0x5d2ax3[_0xe4bc[57]](_0xe4bc[1334],_0x5d2ax15[_0xe4bc[1261]]||_0xe4bc[130]),_0x5d2ax3[_0xe4bc[57]](_0xe4bc[1336],_0x5d2ax15[_0xe4bc[1263]]||_0xe4bc[130]),_0x5d2ax3[_0xe4bc[57]](_0xe4bc[235],Math[_0xe4bc[519]](_0x5d2ax16[_0xe4bc[235]]-1)),_0x5d2ax3[_0xe4bc[57]](_0xe4bc[236],Math[_0xe4bc[519]](_0x5d2ax16[_0xe4bc[236]]-1)),_0x5d2ax3[_0xe4bc[57]](_0xe4bc[117],Math[_0xe4bc[430]](_0x5d2ax16[_0xe4bc[117]]+2)),_0x5d2ax3[_0xe4bc[57]](_0xe4bc[119],Math[_0xe4bc[430]](_0x5d2ax16[_0xe4bc[119]])),_0x5d2ax15=null!=_0x5d2ax15[_0xe4bc[1263]]?Math[_0xe4bc[160]](1,this[_0xe4bc[1239]](_0x5d2ax15[_0xe4bc[255]])):0,_0x5d2ax3[_0xe4bc[57]](_0xe4bc[1382],_0x5d2ax15),this[_0xe4bc[813]][_0xe4bc[295]]==document&&1==mxUtils[_0xe4bc[1454]](_0x5d2ax15,2)&&_0x5d2ax3[_0xe4bc[57]](_0xe4bc[535],_0xe4bc[1455]),_0x5d2ax2[_0xe4bc[950]](_0x5d2ax3,_0x5d2ax2[_0xe4bc[285]]))}};mxSvgCanvas2D[_0xe4bc[202]][_0xe4bc[1336]]=function(){this[_0xe4bc[1370]](!1,!0)};mxSvgCanvas2D[_0xe4bc[202]][_0xe4bc[1334]]=function(){this[_0xe4bc[1370]](!0,!1)};mxSvgCanvas2D[_0xe4bc[202]][_0xe4bc[1337]]=function(){this[_0xe4bc[1370]](!0,!0)};var mxVmlCanvas2D=function(_0x5d2ax2){mxAbstractCanvas2D[_0xe4bc[239]](this);this[_0xe4bc[813]]=_0x5d2ax2};mxUtils[_0xe4bc[1284]](mxVmlCanvas2D,mxAbstractCanvas2D);mxVmlCanvas2D[_0xe4bc[202]][_0xe4bc[252]]=null;mxVmlCanvas2D[_0xe4bc[202]][_0xe4bc[1285]]= !0;mxVmlCanvas2D[_0xe4bc[202]][_0xe4bc[1219]]=_0xe4bc[1456];mxVmlCanvas2D[_0xe4bc[202]][_0xe4bc[1221]]=_0xe4bc[1457];mxVmlCanvas2D[_0xe4bc[202]][_0xe4bc[1225]]=_0xe4bc[1458];mxVmlCanvas2D[_0xe4bc[202]][_0xe4bc[1227]]=_0xe4bc[235];mxVmlCanvas2D[_0xe4bc[202]][_0xe4bc[1459]]=_0xe4bc[110];mxVmlCanvas2D[_0xe4bc[202]][_0xe4bc[1460]]=1;mxVmlCanvas2D[_0xe4bc[202]][_0xe4bc[1370]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=this[_0xe4bc[252]],_0x5d2ax5=this[_0xe4bc[724]];if(null!=_0x5d2ax4){if(_0xe4bc[253]==_0x5d2ax4[_0xe4bc[301]]){if(null!=this[_0xe4bc[1215]]&&0<this[_0xe4bc[1215]][_0xe4bc[67]]){_0x5d2ax4[_0xe4bc[1215]]=this[_0xe4bc[1215]][_0xe4bc[234]](_0xe4bc[185])+_0xe4bc[1461],_0x5d2ax4[_0xe4bc[124]][_0xe4bc[117]]=this[_0xe4bc[813]][_0xe4bc[124]][_0xe4bc[117]],_0x5d2ax4[_0xe4bc[124]][_0xe4bc[119]]=this[_0xe4bc[813]][_0xe4bc[124]][_0xe4bc[119]],_0x5d2ax4[_0xe4bc[1462]]=parseInt(_0x5d2ax4[_0xe4bc[124]][_0xe4bc[117]])+_0xe4bc[185]+parseInt(_0x5d2ax4[_0xe4bc[124]][_0xe4bc[119]])}else {return}};_0x5d2ax4[_0xe4bc[1463]]=this[_0xe4bc[1239]](Math[_0xe4bc[160]](1,_0x5d2ax5[_0xe4bc[610]]*_0x5d2ax5[_0xe4bc[255]]/this[_0xe4bc[1460]]))+_0xe4bc[168];_0x5d2ax5[_0xe4bc[639]]&&this[_0xe4bc[813]][_0xe4bc[62]](this[_0xe4bc[1375]](_0x5d2ax4,_0x5d2ax2&&null!=_0x5d2ax5[_0xe4bc[604]],_0x5d2ax3&&null!=_0x5d2ax5[_0xe4bc[608]]));_0x5d2ax3&&null!=_0x5d2ax5[_0xe4bc[608]]?(_0x5d2ax4[_0xe4bc[1464]]=_0xe4bc[128],_0x5d2ax4[_0xe4bc[1306]]=_0x5d2ax5[_0xe4bc[608]]):_0x5d2ax4[_0xe4bc[1464]]=_0xe4bc[308];_0x5d2ax4[_0xe4bc[62]](this[_0xe4bc[1465]]());_0x5d2ax2&&null!=_0x5d2ax5[_0xe4bc[604]]?_0x5d2ax4[_0xe4bc[62]](this[_0xe4bc[1466]]()):this[_0xe4bc[1229]]&&(_0xe4bc[253]!=_0x5d2ax4[_0xe4bc[301]]||this[_0xe4bc[1215]][this[_0xe4bc[1215]][_0xe4bc[67]]-1]==this[_0xe4bc[1227]])?_0x5d2ax4[_0xe4bc[62]](this[_0xe4bc[1467]]()):_0x5d2ax4[_0xe4bc[1468]]=_0xe4bc[308];this[_0xe4bc[813]][_0xe4bc[62]](_0x5d2ax4)}};mxVmlCanvas2D[_0xe4bc[202]][_0xe4bc[1467]]=function(){var _0x5d2ax2=document[_0xe4bc[55]](mxClient[_0xe4bc[463]]+_0xe4bc[1469]);_0x5d2ax2[_0xe4bc[390]]=mxClient[_0xe4bc[88]]+_0xe4bc[1470];_0x5d2ax2[_0xe4bc[60]]=_0xe4bc[1471];return _0x5d2ax2};mxVmlCanvas2D[_0xe4bc[202]][_0xe4bc[1466]]=function(){var _0x5d2ax2=this[_0xe4bc[724]],_0x5d2ax3=document[_0xe4bc[55]](mxClient[_0xe4bc[463]]+_0xe4bc[1469]);_0x5d2ax3[_0xe4bc[352]]=_0x5d2ax2[_0xe4bc[604]];if(null!=_0x5d2ax2[_0xe4bc[606]]){_0x5d2ax3[_0xe4bc[60]]=_0xe4bc[1299];_0x5d2ax3[_0xe4bc[865]]=_0xe4bc[130];_0x5d2ax3[_0xe4bc[1472]]=_0x5d2ax2[_0xe4bc[606]];var _0x5d2ax4=180-_0x5d2ax2[_0xe4bc[603]],_0x5d2ax4=_0x5d2ax2[_0xe4bc[607]]==mxConstants[_0xe4bc[1359]]?_0x5d2ax4-(90+(_0xe4bc[235]==this[_0xe4bc[813]][_0xe4bc[124]][_0xe4bc[1473]]?180:0)):_0x5d2ax2[_0xe4bc[607]]==mxConstants[_0xe4bc[1356]]?_0x5d2ax4+(90+(_0xe4bc[235]==this[_0xe4bc[813]][_0xe4bc[124]][_0xe4bc[1473]]?180:0)):_0x5d2ax2[_0xe4bc[607]]==mxConstants[_0xe4bc[1358]]?_0x5d2ax4-(180+(_0xe4bc[236]==this[_0xe4bc[813]][_0xe4bc[124]][_0xe4bc[1473]]?-180:0)):_0x5d2ax4+(_0xe4bc[236]==this[_0xe4bc[813]][_0xe4bc[124]][_0xe4bc[1473]]?-180:0);if(_0xe4bc[235]==this[_0xe4bc[813]][_0xe4bc[124]][_0xe4bc[1473]]||_0xe4bc[236]==this[_0xe4bc[813]][_0xe4bc[124]][_0xe4bc[1473]]){_0x5d2ax4*= -1};_0x5d2ax3[_0xe4bc[1474]]=mxUtils[_0xe4bc[1454]](_0x5d2ax4,360);_0x5d2ax3[_0xe4bc[461]]=100*_0x5d2ax2[_0xe4bc[1244]]*_0x5d2ax2[_0xe4bc[1247]]+_0xe4bc[229];_0x5d2ax3[_0xe4bc[57]](mxClient[_0xe4bc[1475]]+_0xe4bc[1476],100*_0x5d2ax2[_0xe4bc[1244]]*_0x5d2ax2[_0xe4bc[1248]]+_0xe4bc[229])}else {1>_0x5d2ax2[_0xe4bc[1244]]&&(_0x5d2ax3[_0xe4bc[461]]=100*_0x5d2ax2[_0xe4bc[1244]]+_0xe4bc[229])};return _0x5d2ax3};mxVmlCanvas2D[_0xe4bc[202]][_0xe4bc[1465]]=function(){var _0x5d2ax2=this[_0xe4bc[724]],_0x5d2ax3=document[_0xe4bc[55]](mxClient[_0xe4bc[463]]+_0xe4bc[1477]);_0x5d2ax3[_0xe4bc[1478]]=_0x5d2ax2[_0xe4bc[1254]]||_0xe4bc[1232];_0x5d2ax3[_0xe4bc[1479]]=_0x5d2ax2[_0xe4bc[1256]]||_0xe4bc[1233];_0x5d2ax3[_0xe4bc[1313]]=_0x5d2ax2[_0xe4bc[1258]]||_0xe4bc[1480];1>_0x5d2ax2[_0xe4bc[1244]]&&(_0x5d2ax3[_0xe4bc[461]]=100*_0x5d2ax2[_0xe4bc[1244]]+_0xe4bc[229]);_0x5d2ax2[_0xe4bc[648]]&&(_0x5d2ax3[_0xe4bc[1481]]=this[_0xe4bc[1482]]());return _0x5d2ax3};mxVmlCanvas2D[_0xe4bc[202]][_0xe4bc[1482]]=function(){var _0x5d2ax2=_0xe4bc[1483];if(null!=this[_0xe4bc[724]][_0xe4bc[649]]){var _0x5d2ax3=this[_0xe4bc[724]][_0xe4bc[649]][_0xe4bc[224]](_0xe4bc[185]);0<_0x5d2ax3[_0xe4bc[67]]&&1==_0x5d2ax3[0]&&(_0x5d2ax2=_0xe4bc[1484])};return _0x5d2ax2};mxVmlCanvas2D[_0xe4bc[202]][_0xe4bc[1375]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){var _0x5d2ax5=this[_0xe4bc[724]],_0x5d2ax9=-_0x5d2ax5[_0xe4bc[603]]*(Math[_0xe4bc[424]]/180),_0x5d2axa=Math[_0xe4bc[426]](_0x5d2ax9),_0x5d2ax9=Math[_0xe4bc[427]](_0x5d2ax9),_0x5d2ax12=_0x5d2ax5[_0xe4bc[1273]]*_0x5d2ax5[_0xe4bc[255]],_0x5d2ax13=_0x5d2ax5[_0xe4bc[1274]]*_0x5d2ax5[_0xe4bc[255]];_0xe4bc[235]==this[_0xe4bc[813]][_0xe4bc[124]][_0xe4bc[1473]]?_0x5d2ax12*= -1:_0xe4bc[236]==this[_0xe4bc[813]][_0xe4bc[124]][_0xe4bc[1473]]&&(_0x5d2ax13*= -1);var _0x5d2ax14=_0x5d2ax2[_0xe4bc[511]](!0);_0x5d2ax14[_0xe4bc[124]][_0xe4bc[945]]=Math[_0xe4bc[488]](_0x5d2ax12*_0x5d2axa-_0x5d2ax13*_0x5d2ax9)+_0xe4bc[168];_0x5d2ax14[_0xe4bc[124]][_0xe4bc[953]]=Math[_0xe4bc[488]](_0x5d2ax12*_0x5d2ax9+_0x5d2ax13*_0x5d2axa)+_0xe4bc[168];8==document[_0xe4bc[5]]&&(_0x5d2ax14[_0xe4bc[1463]]=_0x5d2ax2[_0xe4bc[1463]],_0xe4bc[253]==_0x5d2ax2[_0xe4bc[301]]&&(_0x5d2ax14[_0xe4bc[1215]]=this[_0xe4bc[1215]][_0xe4bc[234]](_0xe4bc[185])+_0xe4bc[1461],_0x5d2ax14[_0xe4bc[124]][_0xe4bc[117]]=this[_0xe4bc[813]][_0xe4bc[124]][_0xe4bc[117]],_0x5d2ax14[_0xe4bc[124]][_0xe4bc[119]]=this[_0xe4bc[813]][_0xe4bc[124]][_0xe4bc[119]],_0x5d2ax14[_0xe4bc[1462]]=parseInt(_0x5d2ax2[_0xe4bc[124]][_0xe4bc[117]])+_0xe4bc[185]+parseInt(_0x5d2ax2[_0xe4bc[124]][_0xe4bc[119]])));_0x5d2ax4?(_0x5d2ax14[_0xe4bc[1306]]=_0x5d2ax5[_0xe4bc[1269]],_0x5d2ax14[_0xe4bc[62]](this[_0xe4bc[1485]]())):_0x5d2ax14[_0xe4bc[1464]]=_0xe4bc[308];_0x5d2ax3?_0x5d2ax14[_0xe4bc[62]](this[_0xe4bc[1486]]()):_0x5d2ax14[_0xe4bc[1468]]=_0xe4bc[308];return _0x5d2ax14};mxVmlCanvas2D[_0xe4bc[202]][_0xe4bc[1486]]=function(){var _0x5d2ax2=document[_0xe4bc[55]](mxClient[_0xe4bc[463]]+_0xe4bc[1469]);_0x5d2ax2[_0xe4bc[352]]=this[_0xe4bc[724]][_0xe4bc[1269]];_0x5d2ax2[_0xe4bc[461]]=100*this[_0xe4bc[724]][_0xe4bc[1244]]*this[_0xe4bc[724]][_0xe4bc[1271]]+_0xe4bc[229];return _0x5d2ax2};mxVmlCanvas2D[_0xe4bc[202]][_0xe4bc[1485]]=function(){var _0x5d2ax2=this[_0xe4bc[1465]]();_0x5d2ax2[_0xe4bc[461]]=100*this[_0xe4bc[724]][_0xe4bc[1244]]*this[_0xe4bc[724]][_0xe4bc[1271]]+_0xe4bc[229];return _0x5d2ax2};mxVmlCanvas2D[_0xe4bc[202]][_0xe4bc[1294]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){_0x5d2ax3&&_0x5d2ax4?_0x5d2ax2+=180:_0x5d2ax3?this[_0xe4bc[813]][_0xe4bc[124]][_0xe4bc[1473]]=_0xe4bc[235]:_0x5d2ax4&&(this[_0xe4bc[813]][_0xe4bc[124]][_0xe4bc[1473]]=_0xe4bc[236]);if(_0x5d2ax3?!_0x5d2ax4:_0x5d2ax4){_0x5d2ax2*= -1};this[_0xe4bc[813]][_0xe4bc[124]][_0xe4bc[603]]=_0x5d2ax2;this[_0xe4bc[724]][_0xe4bc[603]]+=_0x5d2ax2;this[_0xe4bc[724]][_0xe4bc[1395]]=_0x5d2ax5;this[_0xe4bc[724]][_0xe4bc[1396]]=_0x5d2ax9};mxVmlCanvas2D[_0xe4bc[202]][_0xe4bc[1275]]=function(){mxAbstractCanvas2D[_0xe4bc[202]][_0xe4bc[1275]][_0xe4bc[183]](this,arguments);this[_0xe4bc[252]]=document[_0xe4bc[55]](mxClient[_0xe4bc[463]]+_0xe4bc[1487]);this[_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[491]]=_0xe4bc[492]};mxVmlCanvas2D[_0xe4bc[202]][_0xe4bc[1278]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){var _0x5d2ax9=this[_0xe4bc[724]],_0x5d2axa=(this[_0xe4bc[1217]]+_0x5d2ax9[_0xe4bc[1126]])*_0x5d2ax9[_0xe4bc[255]],_0x5d2ax12=(this[_0xe4bc[1218]]+_0x5d2ax9[_0xe4bc[1125]])*_0x5d2ax9[_0xe4bc[255]];_0x5d2ax2=(_0x5d2ax2+_0x5d2ax9[_0xe4bc[1126]])*_0x5d2ax9[_0xe4bc[255]];_0x5d2ax3=(_0x5d2ax3+_0x5d2ax9[_0xe4bc[1125]])*_0x5d2ax9[_0xe4bc[255]];_0x5d2ax4=(_0x5d2ax4+_0x5d2ax9[_0xe4bc[1126]])*_0x5d2ax9[_0xe4bc[255]];_0x5d2ax5=(_0x5d2ax5+_0x5d2ax9[_0xe4bc[1125]])*_0x5d2ax9[_0xe4bc[255]];var _0x5d2ax12=_0x5d2ax12+2/3*(_0x5d2ax3-_0x5d2ax12),_0x5d2ax13=_0x5d2ax4+2/3*(_0x5d2ax2-_0x5d2ax4);_0x5d2ax3=_0x5d2ax5+2/3*(_0x5d2ax3-_0x5d2ax5);this[_0xe4bc[1215]][_0xe4bc[207]](_0xe4bc[1488]+this[_0xe4bc[1239]](_0x5d2axa+2/3*(_0x5d2ax2-_0x5d2axa))+_0xe4bc[185]+this[_0xe4bc[1239]](_0x5d2ax12)+_0xe4bc[185]+this[_0xe4bc[1239]](_0x5d2ax13)+_0xe4bc[185]+this[_0xe4bc[1239]](_0x5d2ax3)+_0xe4bc[185]+this[_0xe4bc[1239]](_0x5d2ax4)+_0xe4bc[185]+this[_0xe4bc[1239]](_0x5d2ax5));this[_0xe4bc[1217]]=_0x5d2ax4/_0x5d2ax9[_0xe4bc[255]]-_0x5d2ax9[_0xe4bc[1126]];this[_0xe4bc[1218]]=_0x5d2ax5/_0x5d2ax9[_0xe4bc[255]]-_0x5d2ax9[_0xe4bc[1125]]};mxVmlCanvas2D[_0xe4bc[202]][_0xe4bc[1489]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){var _0x5d2axa=this[_0xe4bc[724]];_0x5d2ax2=document[_0xe4bc[55]](_0x5d2ax2);_0x5d2ax2[_0xe4bc[124]][_0xe4bc[491]]=_0xe4bc[492];_0x5d2ax2[_0xe4bc[124]][_0xe4bc[361]]=this[_0xe4bc[1239]]((_0x5d2ax3+_0x5d2axa[_0xe4bc[1126]])*_0x5d2axa[_0xe4bc[255]])+_0xe4bc[168];_0x5d2ax2[_0xe4bc[124]][_0xe4bc[125]]=this[_0xe4bc[1239]]((_0x5d2ax4+_0x5d2axa[_0xe4bc[1125]])*_0x5d2axa[_0xe4bc[255]])+_0xe4bc[168];_0x5d2ax2[_0xe4bc[124]][_0xe4bc[117]]=this[_0xe4bc[1239]](_0x5d2ax5*_0x5d2axa[_0xe4bc[255]])+_0xe4bc[168];_0x5d2ax2[_0xe4bc[124]][_0xe4bc[119]]=this[_0xe4bc[1239]](_0x5d2ax9*_0x5d2axa[_0xe4bc[255]])+_0xe4bc[168];return _0x5d2ax2};mxVmlCanvas2D[_0xe4bc[202]][_0xe4bc[1319]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){this[_0xe4bc[252]]=this[_0xe4bc[1489]](mxClient[_0xe4bc[463]]+_0xe4bc[1490],_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5)};mxVmlCanvas2D[_0xe4bc[202]][_0xe4bc[1320]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa){this[_0xe4bc[252]]=this[_0xe4bc[1489]](mxClient[_0xe4bc[463]]+_0xe4bc[1491],_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5);this[_0xe4bc[252]][_0xe4bc[57]](_0xe4bc[1492],Math[_0xe4bc[160]](100*_0x5d2ax9/_0x5d2ax4,100*_0x5d2axa/_0x5d2ax5)+_0xe4bc[229])};mxVmlCanvas2D[_0xe4bc[202]][_0xe4bc[680]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){this[_0xe4bc[252]]=this[_0xe4bc[1489]](mxClient[_0xe4bc[463]]+_0xe4bc[1493],_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5)};mxVmlCanvas2D[_0xe4bc[202]][_0xe4bc[618]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa,_0x5d2ax12,_0x5d2ax13){var _0x5d2ax14=null;_0x5d2axa?(_0x5d2ax14=this[_0xe4bc[1489]](mxClient[_0xe4bc[463]]+_0xe4bc[1490],_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5),_0x5d2ax14[_0xe4bc[1464]]=_0xe4bc[308],_0x5d2ax2=document[_0xe4bc[55]](mxClient[_0xe4bc[463]]+_0xe4bc[1469]),_0x5d2ax2[_0xe4bc[1322]]=_0x5d2axa?_0xe4bc[1494]:_0xe4bc[1495],_0x5d2ax2[_0xe4bc[1294]]=_0xe4bc[128],_0x5d2ax2[_0xe4bc[60]]=_0xe4bc[1496],_0x5d2ax2[_0xe4bc[390]]=_0x5d2ax9,_0x5d2ax14[_0xe4bc[62]](_0x5d2ax2)):(_0x5d2ax14=this[_0xe4bc[1489]](mxClient[_0xe4bc[463]]+_0xe4bc[464],_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5),_0x5d2ax14[_0xe4bc[390]]=_0x5d2ax9);_0x5d2ax12&&_0x5d2ax13?_0x5d2ax14[_0xe4bc[124]][_0xe4bc[603]]=_0xe4bc[1497]:_0x5d2ax12?_0x5d2ax14[_0xe4bc[124]][_0xe4bc[1473]]=_0xe4bc[235]:_0x5d2ax13&&(_0x5d2ax14[_0xe4bc[124]][_0xe4bc[1473]]=_0xe4bc[236]);1>this[_0xe4bc[724]][_0xe4bc[1244]]&&(_0x5d2ax14[_0xe4bc[124]][_0xe4bc[347]]+=_0xe4bc[459]+100*this[_0xe4bc[724]][_0xe4bc[1244]]+_0xe4bc[460]);this[_0xe4bc[813]][_0xe4bc[62]](_0x5d2ax14)};mxVmlCanvas2D[_0xe4bc[202]][_0xe4bc[1404]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){_0x5d2ax4=document[_0xe4bc[55]](_0xe4bc[485]);var _0x5d2ax9=this[_0xe4bc[724]],_0x5d2axa=_0xe4bc[110];null!=_0x5d2ax9[_0xe4bc[1261]]&&(_0x5d2axa+=_0xe4bc[1418]+_0x5d2ax9[_0xe4bc[1261]]+_0xe4bc[471]);null!=_0x5d2ax9[_0xe4bc[1263]]&&(_0x5d2axa+=_0xe4bc[1419]+_0x5d2ax9[_0xe4bc[1263]]+_0xe4bc[471]);mxUtils[_0xe4bc[1331]](_0x5d2ax2)?_0x5d2ax4[_0xe4bc[62]](_0x5d2ax2):0<_0x5d2axa[_0xe4bc[67]]&&!_0x5d2ax5?(_0x5d2ax5=document[_0xe4bc[55]](_0xe4bc[485]),_0x5d2ax5[_0xe4bc[124]][_0xe4bc[103]]=_0x5d2axa,_0x5d2ax5[_0xe4bc[124]][_0xe4bc[495]]=mxClient[_0xe4bc[496]]?_0xe4bc[497]:_0xe4bc[498],_0x5d2ax5[_0xe4bc[124]][_0xe4bc[499]]=_0xe4bc[500],_0x5d2ax5[_0xe4bc[339]]=_0x5d2ax2,_0x5d2ax4[_0xe4bc[62]](_0x5d2ax5)):(_0x5d2ax4[_0xe4bc[124]][_0xe4bc[103]]=_0x5d2axa,_0x5d2ax4[_0xe4bc[339]]=_0x5d2ax2);_0x5d2ax2=_0x5d2ax4[_0xe4bc[124]];_0x5d2ax2[_0xe4bc[487]]=Math[_0xe4bc[488]](_0x5d2ax9[_0xe4bc[487]]/this[_0xe4bc[1460]])+_0xe4bc[168];_0x5d2ax2[_0xe4bc[486]]=_0x5d2ax9[_0xe4bc[486]];_0x5d2ax2[_0xe4bc[352]]=_0x5d2ax9[_0xe4bc[665]];_0x5d2ax2[_0xe4bc[123]]=_0xe4bc[125];_0x5d2ax2[_0xe4bc[1165]]=_0x5d2ax3||_0xe4bc[361];_0x5d2ax2[_0xe4bc[489]]=Math[_0xe4bc[488]](_0x5d2ax9[_0xe4bc[487]]*mxConstants[_0xe4bc[490]]/this[_0xe4bc[1460]])+_0xe4bc[168];(_0x5d2ax9[_0xe4bc[666]]&mxConstants[_0xe4bc[1410]])==mxConstants[_0xe4bc[1410]]&&(_0x5d2ax2[_0xe4bc[1452]]=_0xe4bc[1447]);(_0x5d2ax9[_0xe4bc[666]]&mxConstants[_0xe4bc[1412]])==mxConstants[_0xe4bc[1412]]&&(_0x5d2ax2[_0xe4bc[666]]=_0xe4bc[1449]);(_0x5d2ax9[_0xe4bc[666]]&mxConstants[_0xe4bc[1414]])==mxConstants[_0xe4bc[1414]]&&(_0x5d2ax2[_0xe4bc[1498]]=_0xe4bc[355]);return _0x5d2ax4};mxVmlCanvas2D[_0xe4bc[202]][_0xe4bc[963]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa,_0x5d2ax12,_0x5d2ax13,_0x5d2ax14,_0x5d2ax15,_0x5d2ax16,_0x5d2ax17){if(this[_0xe4bc[1285]]&&null!=_0x5d2ax9){var _0x5d2ax18=this[_0xe4bc[724]];if(_0xe4bc[1428]==_0x5d2ax14){null!=_0x5d2ax18[_0xe4bc[603]]&&(_0x5d2ax3=this[_0xe4bc[1241]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax18[_0xe4bc[603]],_0x5d2ax18[_0xe4bc[1395]],_0x5d2ax18[_0xe4bc[1396]]),_0x5d2ax2=_0x5d2ax3[_0xe4bc[235]],_0x5d2ax3=_0x5d2ax3[_0xe4bc[236]]);8==document[_0xe4bc[5]]?(_0x5d2ax2+=_0x5d2ax18[_0xe4bc[1126]],_0x5d2ax3+=_0x5d2ax18[_0xe4bc[1125]]):(_0x5d2ax2*=_0x5d2ax18[_0xe4bc[255]],_0x5d2ax3*=_0x5d2ax18[_0xe4bc[255]]);_0x5d2ax14=8==document[_0xe4bc[5]]?document[_0xe4bc[55]](mxClient[_0xe4bc[463]]+_0xe4bc[1499]):document[_0xe4bc[55]](_0xe4bc[485]);_0x5d2ax14[_0xe4bc[124]][_0xe4bc[491]]=_0xe4bc[492];_0x5d2ax14[_0xe4bc[124]][_0xe4bc[495]]=_0xe4bc[497];_0x5d2ax14[_0xe4bc[124]][_0xe4bc[361]]=this[_0xe4bc[1239]](_0x5d2ax2)+_0xe4bc[168];_0x5d2ax14[_0xe4bc[124]][_0xe4bc[125]]=this[_0xe4bc[1239]](_0x5d2ax3)+_0xe4bc[168];_0x5d2ax14[_0xe4bc[124]][_0xe4bc[499]]=_0x5d2ax18[_0xe4bc[255]];var _0x5d2ax19=document[_0xe4bc[55]](_0xe4bc[485]);_0x5d2ax19[_0xe4bc[124]][_0xe4bc[491]]=_0xe4bc[1500];_0x5d2ax19[_0xe4bc[124]][_0xe4bc[495]]=_0xe4bc[497];var _0x5d2ax1a=mxUtils[_0xe4bc[1501]](_0x5d2axa,_0x5d2ax12),_0x5d2ax1b=_0x5d2ax1a[_0xe4bc[235]],_0x5d2ax1a=_0x5d2ax1a[_0xe4bc[236]];_0x5d2ax9=this[_0xe4bc[1404]](_0x5d2ax9,_0x5d2axa,_0x5d2ax12,_0x5d2ax15);_0x5d2axa=document[_0xe4bc[55]](_0xe4bc[485]);_0x5d2ax13?(!_0x5d2ax16&&0<_0x5d2ax4&&(_0x5d2ax9[_0xe4bc[124]][_0xe4bc[117]]=Math[_0xe4bc[488]](_0x5d2ax4)+_0xe4bc[168]),_0x5d2ax9[_0xe4bc[124]][_0xe4bc[493]]=_0xe4bc[1502]):_0x5d2ax9[_0xe4bc[124]][_0xe4bc[493]]=_0xe4bc[494];_0x5d2ax13=_0x5d2ax18[_0xe4bc[603]]+(_0x5d2ax17||0);this[_0xe4bc[1216]]&&0!=_0x5d2ax13?(_0x5d2axa[_0xe4bc[124]][_0xe4bc[495]]=_0xe4bc[497],_0x5d2axa[_0xe4bc[124]][_0xe4bc[499]]=_0xe4bc[500],_0x5d2axa[_0xe4bc[62]](_0x5d2ax9),8==document[_0xe4bc[5]]&&_0xe4bc[529]!=this[_0xe4bc[813]][_0xe4bc[301]]?(_0x5d2ax19[_0xe4bc[62]](_0x5d2axa),_0x5d2ax14[_0xe4bc[62]](_0x5d2ax19)):_0x5d2ax14[_0xe4bc[62]](_0x5d2axa)):8==document[_0xe4bc[5]]?(_0x5d2ax19[_0xe4bc[62]](_0x5d2ax9),_0x5d2ax14[_0xe4bc[62]](_0x5d2ax19)):(_0x5d2ax9[_0xe4bc[124]][_0xe4bc[495]]=_0xe4bc[497],_0x5d2ax14[_0xe4bc[62]](_0x5d2ax9));_0xe4bc[529]!=this[_0xe4bc[813]][_0xe4bc[301]]?(_0x5d2ax17=document[_0xe4bc[55]](mxClient[_0xe4bc[463]]+_0xe4bc[1490]),_0x5d2ax17[_0xe4bc[1464]]=_0xe4bc[308],_0x5d2ax17[_0xe4bc[1468]]=_0xe4bc[308],_0x5d2ax17[_0xe4bc[62]](_0x5d2ax14),this[_0xe4bc[813]][_0xe4bc[62]](_0x5d2ax17)):this[_0xe4bc[813]][_0xe4bc[62]](_0x5d2ax14);_0x5d2ax16?(_0x5d2ax9[_0xe4bc[124]][_0xe4bc[277]]=_0xe4bc[188],0<_0x5d2ax4&&(_0x5d2ax9[_0xe4bc[124]][_0xe4bc[117]]=Math[_0xe4bc[488]](_0x5d2ax4)+_0xe4bc[168]),0<_0x5d2ax5&&8==document[_0xe4bc[5]]&&(_0x5d2ax9[_0xe4bc[124]][_0xe4bc[1503]]=Math[_0xe4bc[488]](_0x5d2ax5)+_0xe4bc[168])):_0x5d2ax15&&(_0x5d2ax9[_0xe4bc[124]][_0xe4bc[117]]=_0x5d2ax4+_0xe4bc[168],0<_0x5d2ax5&&(_0x5d2ax9[_0xe4bc[124]][_0xe4bc[1503]]=Math[_0xe4bc[488]](_0x5d2ax5)+_0xe4bc[168]));if(this[_0xe4bc[1216]]&&0!=_0x5d2ax13){_0x5d2ax4=_0x5d2ax13*(Math[_0xe4bc[424]]/180);_0x5d2ax13=parseFloat(parseFloat(Math[_0xe4bc[426]](_0x5d2ax4))[_0xe4bc[1293]](8));_0x5d2ax17=parseFloat(parseFloat(Math[_0xe4bc[427]](-_0x5d2ax4))[_0xe4bc[1293]](8));_0x5d2ax4%=2*Math[_0xe4bc[424]];0>_0x5d2ax4&&(_0x5d2ax4+=2*Math[_0xe4bc[424]]);_0x5d2ax4%=Math[_0xe4bc[424]];_0x5d2ax4>Math[_0xe4bc[424]]/2&&(_0x5d2ax4=Math[_0xe4bc[424]]-_0x5d2ax4);_0x5d2ax12=Math[_0xe4bc[426]](_0x5d2ax4);var _0x5d2ax1c=Math[_0xe4bc[427]](_0x5d2ax4);8==document[_0xe4bc[5]]&&(_0x5d2ax9[_0xe4bc[124]][_0xe4bc[495]]=_0xe4bc[498],_0x5d2axa[_0xe4bc[124]][_0xe4bc[495]]=_0xe4bc[498],_0x5d2ax19[_0xe4bc[124]][_0xe4bc[495]]=_0xe4bc[498]);_0x5d2ax9[_0xe4bc[124]][_0xe4bc[187]]=_0xe4bc[188];document[_0xe4bc[112]][_0xe4bc[62]](_0x5d2ax9);_0x5d2ax4=_0x5d2ax9[_0xe4bc[359]];_0x5d2ax19=_0x5d2ax9[_0xe4bc[167]];if(mxClient[_0xe4bc[496]]&&(_0x5d2ax16||_0x5d2ax15)&&_0x5d2ax19>_0x5d2ax5){_0x5d2ax19=_0x5d2ax5,_0x5d2ax9[_0xe4bc[124]][_0xe4bc[119]]=_0x5d2ax19+_0xe4bc[168]};_0x5d2ax5=_0x5d2ax19;_0x5d2ax16=(_0x5d2ax5-_0x5d2ax5*_0x5d2ax12+_0x5d2ax4* -_0x5d2ax1c)/2-_0x5d2ax17*_0x5d2ax4*(_0x5d2ax1b+0.5)+_0x5d2ax13*_0x5d2ax5*(_0x5d2ax1a+0.5);_0x5d2ax15=(_0x5d2ax4-_0x5d2ax4*_0x5d2ax12+_0x5d2ax5* -_0x5d2ax1c)/2+_0x5d2ax13*_0x5d2ax4*(_0x5d2ax1b+0.5)+_0x5d2ax17*_0x5d2ax5*(_0x5d2ax1a+0.5);_0xe4bc[1504]==_0x5d2ax14[_0xe4bc[301]]&&_0xe4bc[529]==this[_0xe4bc[813]][_0xe4bc[301]]?(_0x5d2ax1b=document[_0xe4bc[55]](_0xe4bc[485]),_0x5d2ax1b[_0xe4bc[124]][_0xe4bc[495]]=_0xe4bc[498],_0x5d2ax1b[_0xe4bc[124]][_0xe4bc[491]]=_0xe4bc[492],_0x5d2ax1b[_0xe4bc[124]][_0xe4bc[361]]=this[_0xe4bc[1239]](_0x5d2ax2+(_0x5d2ax15-_0x5d2ax4/2)*_0x5d2ax18[_0xe4bc[255]])+_0xe4bc[168],_0x5d2ax1b[_0xe4bc[124]][_0xe4bc[125]]=this[_0xe4bc[1239]](_0x5d2ax3+(_0x5d2ax16-_0x5d2ax5/2)*_0x5d2ax18[_0xe4bc[255]])+_0xe4bc[168],_0x5d2ax14[_0xe4bc[265]][_0xe4bc[62]](_0x5d2ax1b),_0x5d2ax1b[_0xe4bc[62]](_0x5d2ax14)):(_0x5d2ax18=8==document[_0xe4bc[5]]?1:_0x5d2ax18[_0xe4bc[255]],_0x5d2ax14[_0xe4bc[124]][_0xe4bc[361]]=this[_0xe4bc[1239]](_0x5d2ax2+(_0x5d2ax15-_0x5d2ax4/2)*_0x5d2ax18)+_0xe4bc[168],_0x5d2ax14[_0xe4bc[124]][_0xe4bc[125]]=this[_0xe4bc[1239]](_0x5d2ax3+(_0x5d2ax16-_0x5d2ax5/2)*_0x5d2ax18)+_0xe4bc[168]);_0x5d2axa[_0xe4bc[124]][_0xe4bc[347]]=_0xe4bc[1505]+_0x5d2ax13+_0xe4bc[1506]+_0x5d2ax17+_0xe4bc[1507]+-_0x5d2ax17+_0xe4bc[1508]+_0x5d2ax13+_0xe4bc[1509];_0x5d2axa[_0xe4bc[124]][_0xe4bc[1028]]=this[_0xe4bc[1459]];1>this[_0xe4bc[724]][_0xe4bc[1244]]&&(_0x5d2axa[_0xe4bc[124]][_0xe4bc[347]]+=_0xe4bc[459]+100*this[_0xe4bc[724]][_0xe4bc[1244]]+_0xe4bc[460]);_0x5d2ax9[_0xe4bc[124]][_0xe4bc[187]]=_0xe4bc[110];_0x5d2axa[_0xe4bc[62]](_0x5d2ax9)}else {8!=document[_0xe4bc[5]]?(_0x5d2ax9[_0xe4bc[124]][_0xe4bc[123]]=_0xe4bc[125],1>this[_0xe4bc[724]][_0xe4bc[1244]]&&(_0x5d2ax14[_0xe4bc[124]][_0xe4bc[347]]=_0xe4bc[459]+100*this[_0xe4bc[724]][_0xe4bc[1244]]+_0xe4bc[460]),_0x5d2ax18=_0x5d2ax9[_0xe4bc[265]],_0x5d2ax9[_0xe4bc[124]][_0xe4bc[187]]=_0xe4bc[188],document[_0xe4bc[112]][_0xe4bc[62]](_0x5d2ax9),_0x5d2ax4=_0x5d2ax9[_0xe4bc[359]],_0x5d2ax19=_0x5d2ax9[_0xe4bc[167]],mxClient[_0xe4bc[496]]&&(_0x5d2ax16&&_0x5d2ax19>_0x5d2ax5)&&(_0x5d2ax19=_0x5d2ax5,_0x5d2ax9[_0xe4bc[124]][_0xe4bc[119]]=_0x5d2ax19+_0xe4bc[168]),_0x5d2ax5=_0x5d2ax19,_0x5d2ax9[_0xe4bc[124]][_0xe4bc[187]]=_0xe4bc[110],_0x5d2ax18[_0xe4bc[62]](_0x5d2ax9),_0x5d2ax14[_0xe4bc[124]][_0xe4bc[361]]=this[_0xe4bc[1239]](_0x5d2ax2+_0x5d2ax4*_0x5d2ax1b*this[_0xe4bc[724]][_0xe4bc[255]])+_0xe4bc[168],_0x5d2ax14[_0xe4bc[124]][_0xe4bc[125]]=this[_0xe4bc[1239]](_0x5d2ax3+_0x5d2ax5*_0x5d2ax1a*this[_0xe4bc[724]][_0xe4bc[255]])+_0xe4bc[168]):(1>this[_0xe4bc[724]][_0xe4bc[1244]]&&(_0x5d2ax9[_0xe4bc[124]][_0xe4bc[347]]=_0xe4bc[459]+100*this[_0xe4bc[724]][_0xe4bc[1244]]+_0xe4bc[460]),_0x5d2ax19[_0xe4bc[124]][_0xe4bc[361]]=100*_0x5d2ax1b+_0xe4bc[229],_0x5d2ax19[_0xe4bc[124]][_0xe4bc[125]]=100*_0x5d2ax1a+_0xe4bc[229])}}else {this[_0xe4bc[1436]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,mxUtils[_0xe4bc[321]](_0x5d2ax9,!1),_0x5d2axa,_0x5d2ax12,_0x5d2ax13,_0x5d2ax14,_0x5d2ax15,_0x5d2ax16,_0x5d2ax17)}}};mxVmlCanvas2D[_0xe4bc[202]][_0xe4bc[1436]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa,_0x5d2ax12,_0x5d2ax13,_0x5d2ax14,_0x5d2ax15,_0x5d2ax16,_0x5d2ax17){_0x5d2ax5=this[_0xe4bc[724]];_0x5d2ax2=(_0x5d2ax2+_0x5d2ax5[_0xe4bc[1126]])*_0x5d2ax5[_0xe4bc[255]];_0x5d2ax3=(_0x5d2ax3+_0x5d2ax5[_0xe4bc[1125]])*_0x5d2ax5[_0xe4bc[255]];_0x5d2ax4=document[_0xe4bc[55]](mxClient[_0xe4bc[463]]+_0xe4bc[1487]);_0x5d2ax4[_0xe4bc[124]][_0xe4bc[117]]=_0xe4bc[942];_0x5d2ax4[_0xe4bc[124]][_0xe4bc[119]]=_0xe4bc[942];_0x5d2ax4[_0xe4bc[1464]]=_0xe4bc[308];_0x5d2ax15=document[_0xe4bc[55]](mxClient[_0xe4bc[463]]+_0xe4bc[1469]);_0x5d2ax15[_0xe4bc[352]]=_0x5d2ax5[_0xe4bc[665]];_0x5d2ax15[_0xe4bc[461]]=100*_0x5d2ax5[_0xe4bc[1244]]+_0xe4bc[229];_0x5d2ax4[_0xe4bc[62]](_0x5d2ax15);_0x5d2ax15=document[_0xe4bc[55]](mxClient[_0xe4bc[463]]+_0xe4bc[1510]);_0x5d2ax15[_0xe4bc[1511]]=_0xe4bc[128];_0x5d2ax15[_0xe4bc[6]]=_0xe4bc[1512]+this[_0xe4bc[1239]](0)+_0xe4bc[185]+this[_0xe4bc[1239]](0)+_0xe4bc[1513]+this[_0xe4bc[1239]](1)+_0xe4bc[185]+this[_0xe4bc[1239]](0);_0x5d2ax4[_0xe4bc[62]](_0x5d2ax15);_0x5d2ax15=document[_0xe4bc[55]](mxClient[_0xe4bc[463]]+_0xe4bc[1514]);_0x5d2ax15[_0xe4bc[124]][_0xe4bc[103]]=_0xe4bc[1515]+_0x5d2axa;_0x5d2ax15[_0xe4bc[124]][_0xe4bc[611]]=_0x5d2axa;_0x5d2ax15[_0xe4bc[124]][_0xe4bc[486]]=_0x5d2ax5[_0xe4bc[486]];_0x5d2ax15[_0xe4bc[1516]]=_0x5d2ax9;_0x5d2ax15[_0xe4bc[747]]=_0xe4bc[128];_0x5d2axa=Math[_0xe4bc[488]](_0x5d2ax5[_0xe4bc[487]]*_0x5d2ax5[_0xe4bc[255]]/this[_0xe4bc[1460]]);_0x5d2ax15[_0xe4bc[124]][_0xe4bc[487]]=_0x5d2axa+_0xe4bc[168];(_0x5d2ax5[_0xe4bc[666]]&mxConstants[_0xe4bc[1410]])==mxConstants[_0xe4bc[1410]]&&(_0x5d2ax15[_0xe4bc[124]][_0xe4bc[1452]]=_0xe4bc[1447]);(_0x5d2ax5[_0xe4bc[666]]&mxConstants[_0xe4bc[1412]])==mxConstants[_0xe4bc[1412]]&&(_0x5d2ax15[_0xe4bc[124]][_0xe4bc[666]]=_0xe4bc[1449]);(_0x5d2ax5[_0xe4bc[666]]&mxConstants[_0xe4bc[1414]])==mxConstants[_0xe4bc[1414]]&&(_0x5d2ax15[_0xe4bc[124]][_0xe4bc[354]]=_0xe4bc[355]);_0x5d2ax9=_0x5d2ax9[_0xe4bc[224]](_0xe4bc[192]);_0x5d2ax5=_0x5d2axa+(_0x5d2ax9[_0xe4bc[67]]-1)*_0x5d2axa*mxConstants[_0xe4bc[490]];_0x5d2axa=_0x5d2ax9=0;_0x5d2ax12==mxConstants[_0xe4bc[482]]?_0x5d2axa=-_0x5d2ax5/2:_0x5d2ax12!=mxConstants[_0xe4bc[481]]&&(_0x5d2axa=_0x5d2ax5/2);null!=_0x5d2ax17&&(_0x5d2ax4[_0xe4bc[124]][_0xe4bc[603]]=_0x5d2ax17,_0x5d2ax12=_0x5d2ax17*(Math[_0xe4bc[424]]/180),_0x5d2ax9=Math[_0xe4bc[427]](_0x5d2ax12)*_0x5d2axa,_0x5d2axa*=Math[_0xe4bc[426]](_0x5d2ax12));_0x5d2ax4[_0xe4bc[62]](_0x5d2ax15);_0x5d2ax4[_0xe4bc[124]][_0xe4bc[361]]=this[_0xe4bc[1239]](_0x5d2ax2-_0x5d2ax9)+_0xe4bc[168];_0x5d2ax4[_0xe4bc[124]][_0xe4bc[125]]=this[_0xe4bc[1239]](_0x5d2ax3+_0x5d2axa)+_0xe4bc[168];this[_0xe4bc[813]][_0xe4bc[62]](_0x5d2ax4)};mxVmlCanvas2D[_0xe4bc[202]][_0xe4bc[1336]]=function(){this[_0xe4bc[1370]](!1,!0)};mxVmlCanvas2D[_0xe4bc[202]][_0xe4bc[1334]]=function(){this[_0xe4bc[1370]](!0,!1)};mxVmlCanvas2D[_0xe4bc[202]][_0xe4bc[1337]]=function(){this[_0xe4bc[1370]](!0,!0)};function mxGuide(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[1179]]=_0x5d2ax2;this[_0xe4bc[1517]](_0x5d2ax3)}mxGuide[_0xe4bc[202]][_0xe4bc[1179]]=null;mxGuide[_0xe4bc[202]][_0xe4bc[1214]]=null;mxGuide[_0xe4bc[202]][_0xe4bc[662]]= !0;mxGuide[_0xe4bc[202]][_0xe4bc[704]]= !0;mxGuide[_0xe4bc[202]][_0xe4bc[1518]]=null;mxGuide[_0xe4bc[202]][_0xe4bc[1519]]=null;mxGuide[_0xe4bc[202]][_0xe4bc[1517]]=function(_0x5d2ax2){this[_0xe4bc[1214]]=_0x5d2ax2};mxGuide[_0xe4bc[202]][_0xe4bc[1019]]=function(_0x5d2ax2){return !0};mxGuide[_0xe4bc[202]][_0xe4bc[1520]]=function(){return this[_0xe4bc[1179]][_0xe4bc[1020]]*this[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[255]]/2};mxGuide[_0xe4bc[202]][_0xe4bc[1521]]=function(_0x5d2ax2){_0x5d2ax2= new mxPolyline([],mxConstants.GUIDE_COLOR,mxConstants.GUIDE_STROKEWIDTH);_0x5d2ax2[_0xe4bc[1522]]= !0;return _0x5d2ax2};mxGuide[_0xe4bc[202]][_0xe4bc[582]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){if(null!=this[_0xe4bc[1214]]&&(this[_0xe4bc[662]]||this[_0xe4bc[704]])&&null!=_0x5d2ax2&&null!=_0x5d2ax3){var _0x5d2ax5=this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[513]],_0x5d2ax9=this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[255]],_0x5d2axa=_0x5d2ax3[_0xe4bc[235]],_0x5d2ax12=_0x5d2ax3[_0xe4bc[236]],_0x5d2ax13=!1,_0x5d2ax14=!1,_0x5d2ax15=this[_0xe4bc[1520]](),_0x5d2ax16=_0x5d2ax15,_0x5d2ax17=_0x5d2ax15,_0x5d2ax15=_0x5d2ax2[_0xe4bc[238]]();_0x5d2ax15[_0xe4bc[235]]+=_0x5d2ax3[_0xe4bc[235]];_0x5d2ax15[_0xe4bc[236]]+=_0x5d2ax3[_0xe4bc[236]];var _0x5d2ax18=_0x5d2ax15[_0xe4bc[235]],_0x5d2ax19=_0x5d2ax15[_0xe4bc[235]]+_0x5d2ax15[_0xe4bc[117]],_0x5d2ax1a=_0x5d2ax15[_0xe4bc[241]](),_0x5d2ax1b=_0x5d2ax15[_0xe4bc[236]],_0x5d2ax1c=_0x5d2ax15[_0xe4bc[236]]+_0x5d2ax15[_0xe4bc[119]],_0x5d2ax1d=_0x5d2ax15[_0xe4bc[242]]();_0x5d2ax3=function(_0x5d2ax3){_0x5d2ax3+=this[_0xe4bc[1179]][_0xe4bc[1136]];var _0x5d2ax4=!1;Math[_0xe4bc[425]](_0x5d2ax3-_0x5d2ax1a)<_0x5d2ax16?(_0x5d2axa=_0x5d2ax3-_0x5d2ax2[_0xe4bc[241]](),_0x5d2ax16=Math[_0xe4bc[425]](_0x5d2ax3-_0x5d2ax1a),_0x5d2ax4= !0):Math[_0xe4bc[425]](_0x5d2ax3-_0x5d2ax18)<_0x5d2ax16?(_0x5d2axa=_0x5d2ax3-_0x5d2ax2[_0xe4bc[235]],_0x5d2ax16=Math[_0xe4bc[425]](_0x5d2ax3-_0x5d2ax18),_0x5d2ax4= !0):Math[_0xe4bc[425]](_0x5d2ax3-_0x5d2ax19)<_0x5d2ax16&&(_0x5d2axa=_0x5d2ax3-_0x5d2ax2[_0xe4bc[235]]-_0x5d2ax2[_0xe4bc[117]],_0x5d2ax16=Math[_0xe4bc[425]](_0x5d2ax3-_0x5d2ax19),_0x5d2ax4= !0);if(_0x5d2ax4){null==this[_0xe4bc[1518]]&&(this[_0xe4bc[1518]]=this[_0xe4bc[1521]](!0),this[_0xe4bc[1518]][_0xe4bc[507]]=this[_0xe4bc[1179]][_0xe4bc[507]]!=mxConstants[_0xe4bc[508]]?mxConstants[_0xe4bc[1523]]:mxConstants[_0xe4bc[508]],this[_0xe4bc[1518]][_0xe4bc[1229]]= !1,this[_0xe4bc[1518]][_0xe4bc[176]](this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[1524]]()));var _0x5d2ax5=this[_0xe4bc[1179]][_0xe4bc[526]];_0x5d2ax3-=this[_0xe4bc[1179]][_0xe4bc[1136]];this[_0xe4bc[1518]][_0xe4bc[1525]]=[ new mxPoint(_0x5d2ax3,-this[_0xe4bc[1179]][_0xe4bc[1137]]), new mxPoint(_0x5d2ax3,_0x5d2ax5[_0xe4bc[191]]-3-this[_0xe4bc[1179]][_0xe4bc[1137]])]};_0x5d2ax13=_0x5d2ax13||_0x5d2ax4};for(var _0x5d2ax15=function(_0x5d2ax3){_0x5d2ax3+=this[_0xe4bc[1179]][_0xe4bc[1137]];var _0x5d2ax4=!1;Math[_0xe4bc[425]](_0x5d2ax3-_0x5d2ax1d)<_0x5d2ax17?(_0x5d2ax12=_0x5d2ax3-_0x5d2ax2[_0xe4bc[242]](),_0x5d2ax17=Math[_0xe4bc[425]](_0x5d2ax3-_0x5d2ax1d),_0x5d2ax4= !0):Math[_0xe4bc[425]](_0x5d2ax3-_0x5d2ax1b)<_0x5d2ax17?(_0x5d2ax12=_0x5d2ax3-_0x5d2ax2[_0xe4bc[236]],_0x5d2ax17=Math[_0xe4bc[425]](_0x5d2ax3-_0x5d2ax1b),_0x5d2ax4= !0):Math[_0xe4bc[425]](_0x5d2ax3-_0x5d2ax1c)<_0x5d2ax17&&(_0x5d2ax12=_0x5d2ax3-_0x5d2ax2[_0xe4bc[236]]-_0x5d2ax2[_0xe4bc[119]],_0x5d2ax17=Math[_0xe4bc[425]](_0x5d2ax3-_0x5d2ax1c),_0x5d2ax4= !0);if(_0x5d2ax4){null==this[_0xe4bc[1519]]&&(this[_0xe4bc[1519]]=this[_0xe4bc[1521]](!1),this[_0xe4bc[1519]][_0xe4bc[507]]=this[_0xe4bc[1179]][_0xe4bc[507]]!=mxConstants[_0xe4bc[508]]?mxConstants[_0xe4bc[1523]]:mxConstants[_0xe4bc[508]],this[_0xe4bc[1519]][_0xe4bc[1229]]= !1,this[_0xe4bc[1519]][_0xe4bc[176]](this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[1524]]()));var _0x5d2ax5=this[_0xe4bc[1179]][_0xe4bc[526]];_0x5d2ax3-=this[_0xe4bc[1179]][_0xe4bc[1137]];this[_0xe4bc[1519]][_0xe4bc[1525]]=[ new mxPoint(-this[_0xe4bc[1179]][_0xe4bc[1136]],_0x5d2ax3), new mxPoint(_0x5d2ax5[_0xe4bc[1526]]-3-this[_0xe4bc[1179]][_0xe4bc[1136]],_0x5d2ax3)]};_0x5d2ax14=_0x5d2ax14||_0x5d2ax4},_0x5d2ax1e=0;_0x5d2ax1e<this[_0xe4bc[1214]][_0xe4bc[67]];_0x5d2ax1e++){var _0x5d2ax1f=this[_0xe4bc[1214]][_0x5d2ax1e];null!=_0x5d2ax1f&&(this[_0xe4bc[662]]&&(_0x5d2ax3[_0xe4bc[239]](this,_0x5d2ax1f[_0xe4bc[241]]()),_0x5d2ax3[_0xe4bc[239]](this,_0x5d2ax1f[_0xe4bc[235]]),_0x5d2ax3[_0xe4bc[239]](this,_0x5d2ax1f[_0xe4bc[235]]+_0x5d2ax1f[_0xe4bc[117]])),this[_0xe4bc[704]]&&(_0x5d2ax15[_0xe4bc[239]](this,_0x5d2ax1f[_0xe4bc[242]]()),_0x5d2ax15[_0xe4bc[239]](this,_0x5d2ax1f[_0xe4bc[236]]),_0x5d2ax15[_0xe4bc[239]](this,_0x5d2ax1f[_0xe4bc[236]]+_0x5d2ax1f[_0xe4bc[119]])))};!_0x5d2ax13&&null!=this[_0xe4bc[1518]]?this[_0xe4bc[1518]][_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[187]]=_0xe4bc[188]:null!=this[_0xe4bc[1518]]&&(this[_0xe4bc[1518]][_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[187]]=_0xe4bc[189],this[_0xe4bc[1518]][_0xe4bc[258]]());!_0x5d2ax14&&null!=this[_0xe4bc[1519]]?this[_0xe4bc[1519]][_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[187]]=_0xe4bc[188]:null!=this[_0xe4bc[1519]]&&(this[_0xe4bc[1519]][_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[187]]=_0xe4bc[189],this[_0xe4bc[1519]][_0xe4bc[258]]());_0x5d2ax4&&(_0x5d2ax13||(_0x5d2ax4=_0x5d2ax2[_0xe4bc[235]]-(this[_0xe4bc[1179]][_0xe4bc[1021]](_0x5d2ax2[_0xe4bc[235]]/_0x5d2ax9-_0x5d2ax5[_0xe4bc[235]])+_0x5d2ax5[_0xe4bc[235]])*_0x5d2ax9,_0x5d2axa=this[_0xe4bc[1179]][_0xe4bc[1021]](_0x5d2axa/_0x5d2ax9)*_0x5d2ax9-_0x5d2ax4),_0x5d2ax14||(_0x5d2ax5=_0x5d2ax2[_0xe4bc[236]]-(this[_0xe4bc[1179]][_0xe4bc[1021]](_0x5d2ax2[_0xe4bc[236]]/_0x5d2ax9-_0x5d2ax5[_0xe4bc[236]])+_0x5d2ax5[_0xe4bc[236]])*_0x5d2ax9,_0x5d2ax12=this[_0xe4bc[1179]][_0xe4bc[1021]](_0x5d2ax12/_0x5d2ax9)*_0x5d2ax9-_0x5d2ax5));_0x5d2ax3= new mxPoint(_0x5d2axa,_0x5d2ax12)};return _0x5d2ax3};mxGuide[_0xe4bc[202]][_0xe4bc[801]]=function(){null!=this[_0xe4bc[1518]]&&(this[_0xe4bc[1518]][_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[187]]=_0xe4bc[188]);null!=this[_0xe4bc[1519]]&&(this[_0xe4bc[1519]][_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[187]]=_0xe4bc[188])};mxGuide[_0xe4bc[202]][_0xe4bc[515]]=function(){null!=this[_0xe4bc[1518]]&&(this[_0xe4bc[1518]][_0xe4bc[515]](),this[_0xe4bc[1518]]=null);null!=this[_0xe4bc[1519]]&&(this[_0xe4bc[1519]][_0xe4bc[515]](),this[_0xe4bc[1519]]=null)};function mxStencil(_0x5d2ax2){this[_0xe4bc[1527]]=_0x5d2ax2;this[_0xe4bc[1528]]();this[_0xe4bc[1529]]()}mxStencil[_0xe4bc[1530]]= !1;mxStencil[_0xe4bc[202]][_0xe4bc[1527]]=null;mxStencil[_0xe4bc[202]][_0xe4bc[1531]]=null;mxStencil[_0xe4bc[202]][_0xe4bc[1322]]=null;mxStencil[_0xe4bc[202]][_0xe4bc[1532]]=null;mxStencil[_0xe4bc[202]][_0xe4bc[1533]]=null;mxStencil[_0xe4bc[202]][_0xe4bc[1534]]=null;mxStencil[_0xe4bc[202]][_0xe4bc[1535]]=null;mxStencil[_0xe4bc[202]][_0xe4bc[1307]]=null;mxStencil[_0xe4bc[202]][_0xe4bc[1528]]=function(){this[_0xe4bc[1535]]=this[_0xe4bc[1527]][_0xe4bc[64]](_0xe4bc[1536])[0];this[_0xe4bc[1534]]=this[_0xe4bc[1527]][_0xe4bc[64]](_0xe4bc[1537])[0];this[_0xe4bc[1532]]=Number(this[_0xe4bc[1527]][_0xe4bc[284]](_0xe4bc[1302])||100);this[_0xe4bc[1533]]=Number(this[_0xe4bc[1527]][_0xe4bc[284]](_0xe4bc[1303])||100);var _0x5d2ax2=this[_0xe4bc[1527]][_0xe4bc[284]](_0xe4bc[1322]);this[_0xe4bc[1322]]=null!=_0x5d2ax2?_0x5d2ax2:_0xe4bc[1538];_0x5d2ax2=this[_0xe4bc[1527]][_0xe4bc[284]](_0xe4bc[1307]);this[_0xe4bc[1307]]=null!=_0x5d2ax2?_0x5d2ax2:_0xe4bc[500]};mxStencil[_0xe4bc[202]][_0xe4bc[1529]]=function(){var _0x5d2ax2=this[_0xe4bc[1527]][_0xe4bc[64]](_0xe4bc[1539])[0];if(null!=_0x5d2ax2&&(_0x5d2ax2=mxUtils[_0xe4bc[1540]](_0x5d2ax2),null!=_0x5d2ax2&&0<_0x5d2ax2[_0xe4bc[67]])){this[_0xe4bc[1531]]=[];for(var _0x5d2ax3=0;_0x5d2ax3<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax3++){this[_0xe4bc[1531]][_0xe4bc[207]](this[_0xe4bc[1541]](_0x5d2ax2[_0x5d2ax3]))}}};mxStencil[_0xe4bc[202]][_0xe4bc[1541]]=function(_0x5d2ax2){var _0x5d2ax3=Number(_0x5d2ax2[_0xe4bc[284]](_0xe4bc[235])),_0x5d2ax4=Number(_0x5d2ax2[_0xe4bc[284]](_0xe4bc[236]));_0x5d2ax2=_0xe4bc[500]==_0x5d2ax2[_0xe4bc[284]](_0xe4bc[591]);return  new mxConnectionConstraint( new mxPoint(_0x5d2ax3,_0x5d2ax4),_0x5d2ax2)};mxStencil[_0xe4bc[202]][_0xe4bc[1542]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){_0x5d2ax3=this[_0xe4bc[1543]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4);_0x5d2ax2=_0x5d2ax2[_0xe4bc[284]](_0xe4bc[1544]);if(mxStencil[_0xe4bc[1530]]&&null==_0x5d2ax2||_0xe4bc[500]==_0x5d2ax2){_0x5d2ax3=mxResources[_0xe4bc[203]](_0x5d2ax3)};return _0x5d2ax3};mxStencil[_0xe4bc[202]][_0xe4bc[1543]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){_0x5d2ax3=_0x5d2ax2[_0xe4bc[284]](_0x5d2ax3);null==_0x5d2ax3&&(_0x5d2ax2=mxUtils[_0xe4bc[329]](_0x5d2ax2),null!=_0x5d2ax2&&(_0x5d2ax2=mxUtils[_0xe4bc[1545]](_0x5d2ax2),_0xe4bc[279]== typeof _0x5d2ax2&&(_0x5d2ax3=_0x5d2ax2(_0x5d2ax4))));return _0x5d2ax3};mxStencil[_0xe4bc[202]][_0xe4bc[1546]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa){this[_0xe4bc[1547]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa,this[_0xe4bc[1534]],!1);this[_0xe4bc[1547]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa,this[_0xe4bc[1535]],!0)};mxStencil[_0xe4bc[202]][_0xe4bc[1547]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa,_0x5d2ax12,_0x5d2ax13){if(null!=_0x5d2ax12){var _0x5d2ax14=mxUtils[_0xe4bc[433]](_0x5d2ax3[_0xe4bc[124]],mxConstants.STYLE_DIRECTION,null);_0x5d2ax4=this[_0xe4bc[1548]](_0x5d2ax3[_0xe4bc[124]],_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa,_0x5d2ax14);_0x5d2ax5=Math[_0xe4bc[243]](_0x5d2ax4[_0xe4bc[117]],_0x5d2ax4[_0xe4bc[119]]);_0x5d2ax5=_0xe4bc[1549]==this[_0xe4bc[1307]]?Number(mxUtils[_0xe4bc[1550]](_0x5d2ax3[_0xe4bc[124]],mxConstants.STYLE_STROKEWIDTH,1)):Number(this[_0xe4bc[1307]])*_0x5d2ax5;_0x5d2ax2[_0xe4bc[1250]](_0x5d2ax5);for(_0x5d2ax12=_0x5d2ax12[_0xe4bc[285]];null!=_0x5d2ax12;){_0x5d2ax12[_0xe4bc[288]]==mxConstants[_0xe4bc[289]]&&this[_0xe4bc[1551]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax12,_0x5d2ax4,_0x5d2ax13),_0x5d2ax12=_0x5d2ax12[_0xe4bc[287]]}}};mxStencil[_0xe4bc[202]][_0xe4bc[1548]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa){_0x5d2ax2=_0x5d2ax3;_0x5d2ax3=_0x5d2ax5/this[_0xe4bc[1532]];var _0x5d2ax12=_0x5d2ax9/this[_0xe4bc[1533]];if(_0x5d2axa=_0xe4bc[700]==_0x5d2axa||_0xe4bc[701]==_0x5d2axa){_0x5d2ax12=_0x5d2ax5/this[_0xe4bc[1533]];_0x5d2ax3=_0x5d2ax9/this[_0xe4bc[1532]];var _0x5d2ax13=(_0x5d2ax5-_0x5d2ax9)/2;_0x5d2ax2+=_0x5d2ax13;_0x5d2ax4-=_0x5d2ax13};_0xe4bc[1552]==this[_0xe4bc[1322]]&&(_0x5d2ax3=_0x5d2ax12=Math[_0xe4bc[243]](_0x5d2ax3,_0x5d2ax12),_0x5d2axa?(_0x5d2ax2+=(_0x5d2ax9-this[_0xe4bc[1532]]*_0x5d2ax3)/2,_0x5d2ax4+=(_0x5d2ax5-this[_0xe4bc[1533]]*_0x5d2ax12)/2):(_0x5d2ax2+=(_0x5d2ax5-this[_0xe4bc[1532]]*_0x5d2ax3)/2,_0x5d2ax4+=(_0x5d2ax9-this[_0xe4bc[1533]]*_0x5d2ax12)/2));return  new mxRectangle(_0x5d2ax2,_0x5d2ax4,_0x5d2ax3,_0x5d2ax12)};mxStencil[_0xe4bc[202]][_0xe4bc[1551]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){var _0x5d2axa=_0x5d2ax4[_0xe4bc[301]],_0x5d2ax12=_0x5d2ax5[_0xe4bc[235]],_0x5d2ax13=_0x5d2ax5[_0xe4bc[236]],_0x5d2ax14=_0x5d2ax5[_0xe4bc[117]],_0x5d2ax15=_0x5d2ax5[_0xe4bc[119]],_0x5d2ax16=Math[_0xe4bc[243]](_0x5d2ax14,_0x5d2ax15);if(_0xe4bc[815]==_0x5d2axa){_0x5d2ax2[_0xe4bc[815]]()}else {if(_0xe4bc[1210]==_0x5d2axa){_0x5d2ax2[_0xe4bc[1210]]()}else {if(_0xe4bc[1215]==_0x5d2axa){_0x5d2ax2[_0xe4bc[1275]]();for(_0x5d2ax4=_0x5d2ax4[_0xe4bc[285]];null!=_0x5d2ax4;){_0x5d2ax4[_0xe4bc[288]]==mxConstants[_0xe4bc[289]]&&this[_0xe4bc[1551]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9),_0x5d2ax4=_0x5d2ax4[_0xe4bc[287]]}}else {if(_0xe4bc[268]==_0x5d2axa){_0x5d2ax2[_0xe4bc[268]]()}else {if(_0xe4bc[582]==_0x5d2axa){_0x5d2ax2[_0xe4bc[1276]](_0x5d2ax12+Number(_0x5d2ax4[_0xe4bc[284]](_0xe4bc[235]))*_0x5d2ax14,_0x5d2ax13+Number(_0x5d2ax4[_0xe4bc[284]](_0xe4bc[236]))*_0x5d2ax15)}else {if(_0xe4bc[683]==_0x5d2axa){_0x5d2ax2[_0xe4bc[1277]](_0x5d2ax12+Number(_0x5d2ax4[_0xe4bc[284]](_0xe4bc[235]))*_0x5d2ax14,_0x5d2ax13+Number(_0x5d2ax4[_0xe4bc[284]](_0xe4bc[236]))*_0x5d2ax15)}else {if(_0xe4bc[1323]==_0x5d2axa){_0x5d2ax2[_0xe4bc[1278]](_0x5d2ax12+Number(_0x5d2ax4[_0xe4bc[284]](_0xe4bc[1324]))*_0x5d2ax14,_0x5d2ax13+Number(_0x5d2ax4[_0xe4bc[284]](_0xe4bc[1325]))*_0x5d2ax15,_0x5d2ax12+Number(_0x5d2ax4[_0xe4bc[284]](_0xe4bc[1326]))*_0x5d2ax14,_0x5d2ax13+Number(_0x5d2ax4[_0xe4bc[284]](_0xe4bc[1327]))*_0x5d2ax15)}else {if(_0xe4bc[1328]==_0x5d2axa){_0x5d2ax2[_0xe4bc[1279]](_0x5d2ax12+Number(_0x5d2ax4[_0xe4bc[284]](_0xe4bc[1324]))*_0x5d2ax14,_0x5d2ax13+Number(_0x5d2ax4[_0xe4bc[284]](_0xe4bc[1325]))*_0x5d2ax15,_0x5d2ax12+Number(_0x5d2ax4[_0xe4bc[284]](_0xe4bc[1326]))*_0x5d2ax14,_0x5d2ax13+Number(_0x5d2ax4[_0xe4bc[284]](_0xe4bc[1327]))*_0x5d2ax15,_0x5d2ax12+Number(_0x5d2ax4[_0xe4bc[284]](_0xe4bc[1329]))*_0x5d2ax14,_0x5d2ax13+Number(_0x5d2ax4[_0xe4bc[284]](_0xe4bc[1330]))*_0x5d2ax15)}else {if(_0xe4bc[1553]==_0x5d2axa){_0x5d2ax2[_0xe4bc[1280]](Number(_0x5d2ax4[_0xe4bc[284]](_0xe4bc[1397]))*_0x5d2ax14,Number(_0x5d2ax4[_0xe4bc[284]](_0xe4bc[1398]))*_0x5d2ax15,Number(_0x5d2ax4[_0xe4bc[284]](_0xe4bc[1554])),Number(_0x5d2ax4[_0xe4bc[284]](_0xe4bc[1555])),Number(_0x5d2ax4[_0xe4bc[284]](_0xe4bc[1556])),_0x5d2ax12+Number(_0x5d2ax4[_0xe4bc[284]](_0xe4bc[235]))*_0x5d2ax14,_0x5d2ax13+Number(_0x5d2ax4[_0xe4bc[284]](_0xe4bc[236]))*_0x5d2ax15)}else {if(_0xe4bc[1319]==_0x5d2axa){_0x5d2ax2[_0xe4bc[1319]](_0x5d2ax12+Number(_0x5d2ax4[_0xe4bc[284]](_0xe4bc[235]))*_0x5d2ax14,_0x5d2ax13+Number(_0x5d2ax4[_0xe4bc[284]](_0xe4bc[236]))*_0x5d2ax15,Number(_0x5d2ax4[_0xe4bc[284]](_0xe4bc[1302]))*_0x5d2ax14,Number(_0x5d2ax4[_0xe4bc[284]](_0xe4bc[1303]))*_0x5d2ax15)}else {if(_0xe4bc[1320]==_0x5d2axa){_0x5d2ax3=_0x5d2ax4[_0xe4bc[284]](_0xe4bc[1492]),0==_0x5d2ax3&&(_0x5d2ax3=100*mxConstants[_0xe4bc[1557]]),_0x5d2ax16=Number(_0x5d2ax4[_0xe4bc[284]](_0xe4bc[1302]))*_0x5d2ax14,_0x5d2ax5=Number(_0x5d2ax4[_0xe4bc[284]](_0xe4bc[1303]))*_0x5d2ax15,_0x5d2ax3=Number(_0x5d2ax3)/100,_0x5d2ax3=Math[_0xe4bc[243]](_0x5d2ax16*_0x5d2ax3,_0x5d2ax5*_0x5d2ax3),_0x5d2ax2[_0xe4bc[1320]](_0x5d2ax12+Number(_0x5d2ax4[_0xe4bc[284]](_0xe4bc[235]))*_0x5d2ax14,_0x5d2ax13+Number(_0x5d2ax4[_0xe4bc[284]](_0xe4bc[236]))*_0x5d2ax15,_0x5d2ax16,_0x5d2ax5,_0x5d2ax3,_0x5d2ax3)}else {if(_0xe4bc[680]==_0x5d2axa){_0x5d2ax2[_0xe4bc[680]](_0x5d2ax12+Number(_0x5d2ax4[_0xe4bc[284]](_0xe4bc[235]))*_0x5d2ax14,_0x5d2ax13+Number(_0x5d2ax4[_0xe4bc[284]](_0xe4bc[236]))*_0x5d2ax15,Number(_0x5d2ax4[_0xe4bc[284]](_0xe4bc[1302]))*_0x5d2ax14,Number(_0x5d2ax4[_0xe4bc[284]](_0xe4bc[1303]))*_0x5d2ax15)}else {if(_0xe4bc[618]==_0x5d2axa){_0x5d2ax3=this[_0xe4bc[1543]](_0x5d2ax4,_0xe4bc[390],_0x5d2ax3),_0x5d2ax2[_0xe4bc[618]](_0x5d2ax12+Number(_0x5d2ax4[_0xe4bc[284]](_0xe4bc[235]))*_0x5d2ax14,_0x5d2ax13+Number(_0x5d2ax4[_0xe4bc[284]](_0xe4bc[236]))*_0x5d2ax15,Number(_0x5d2ax4[_0xe4bc[284]](_0xe4bc[1302]))*_0x5d2ax14,Number(_0x5d2ax4[_0xe4bc[284]](_0xe4bc[1303]))*_0x5d2ax15,_0x5d2ax3,!1,_0xe4bc[500]==_0x5d2ax4[_0xe4bc[284]](_0xe4bc[623]),_0xe4bc[500]==_0x5d2ax4[_0xe4bc[284]](_0xe4bc[624]))}else {if(_0xe4bc[963]==_0x5d2axa){_0x5d2ax16=this[_0xe4bc[1542]](_0x5d2ax4,_0xe4bc[1332],_0x5d2ax3);_0x5d2ax5=_0xe4bc[500]==_0x5d2ax4[_0xe4bc[284]](_0xe4bc[704])?-90:0;if(_0xe4bc[468]==_0x5d2ax4[_0xe4bc[284]](_0xe4bc[1558])){var _0x5d2ax17=_0x5d2ax3[_0xe4bc[603]],_0x5d2ax18=1==mxUtils[_0xe4bc[433]](_0x5d2ax3[_0xe4bc[124]],mxConstants.STYLE_FLIPH,0);_0x5d2ax3=1==mxUtils[_0xe4bc[433]](_0x5d2ax3[_0xe4bc[124]],mxConstants.STYLE_FLIPV,0);_0x5d2ax5=_0x5d2ax18&&_0x5d2ax3?_0x5d2ax5-_0x5d2ax17:_0x5d2ax18||_0x5d2ax3?_0x5d2ax5+_0x5d2ax17:_0x5d2ax5-_0x5d2ax17};_0x5d2ax5-=_0x5d2ax4[_0xe4bc[284]](_0xe4bc[603]);_0x5d2ax2[_0xe4bc[963]](_0x5d2ax12+Number(_0x5d2ax4[_0xe4bc[284]](_0xe4bc[235]))*_0x5d2ax14,_0x5d2ax13+Number(_0x5d2ax4[_0xe4bc[284]](_0xe4bc[236]))*_0x5d2ax15,0,0,_0x5d2ax16,_0x5d2ax4[_0xe4bc[284]](_0xe4bc[611])||_0xe4bc[361],_0x5d2ax4[_0xe4bc[284]](_0xe4bc[552])||_0xe4bc[125],!1,_0xe4bc[110],!1,!1,_0x5d2ax5)}else {if(_0xe4bc[1559]==_0x5d2axa){_0x5d2ax17=mxStencilRegistry[_0xe4bc[1560]](_0x5d2ax4[_0xe4bc[284]](_0xe4bc[298])),null!=_0x5d2ax17&&(_0x5d2ax12+=Number(_0x5d2ax4[_0xe4bc[284]](_0xe4bc[235]))*_0x5d2ax14,_0x5d2ax13+=Number(_0x5d2ax4[_0xe4bc[284]](_0xe4bc[236]))*_0x5d2ax15,_0x5d2ax16=Number(_0x5d2ax4[_0xe4bc[284]](_0xe4bc[1302]))*_0x5d2ax14,_0x5d2ax5=Number(_0x5d2ax4[_0xe4bc[284]](_0xe4bc[1303]))*_0x5d2ax15,_0x5d2ax17[_0xe4bc[1546]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax12,_0x5d2ax13,_0x5d2ax16,_0x5d2ax5))}else {if(_0xe4bc[1338]==_0x5d2axa){_0x5d2ax2[_0xe4bc[1337]]()}else {if(_0xe4bc[1334]==_0x5d2axa){_0x5d2ax2[_0xe4bc[1334]]()}else {if(_0xe4bc[1336]==_0x5d2axa){_0x5d2ax2[_0xe4bc[1336]]()}else {if(_0xe4bc[1307]==_0x5d2axa){_0x5d2ax2[_0xe4bc[1250]](Number(_0x5d2ax4[_0xe4bc[284]](_0xe4bc[117]))*_0x5d2ax16)}else {if(_0xe4bc[648]==_0x5d2axa){_0x5d2ax2[_0xe4bc[1251]](_0xe4bc[500]==_0x5d2ax4[_0xe4bc[284]](_0xe4bc[648]))}else {if(_0xe4bc[1308]==_0x5d2axa){if(_0x5d2ax4=_0x5d2ax4[_0xe4bc[284]](_0xe4bc[1309]),null!=_0x5d2ax4){_0x5d2ax4=_0x5d2ax4[_0xe4bc[224]](_0xe4bc[185]);_0x5d2ax14=[];for(_0x5d2ax15=0;_0x5d2ax15<_0x5d2ax4[_0xe4bc[67]];_0x5d2ax15++){0<_0x5d2ax4[_0x5d2ax15][_0xe4bc[67]]&&_0x5d2ax14[_0xe4bc[207]](Number(_0x5d2ax4[_0x5d2ax15])*_0x5d2ax16)};_0x5d2ax4=_0x5d2ax14[_0xe4bc[234]](_0xe4bc[185]);_0x5d2ax2[_0xe4bc[1252]](_0x5d2ax4)}}else {_0xe4bc[1306]==_0x5d2axa?_0x5d2ax2[_0xe4bc[1249]](_0x5d2ax4[_0xe4bc[284]](_0xe4bc[352])):_0xe4bc[1310]==_0x5d2axa?_0x5d2ax2[_0xe4bc[1253]](_0x5d2ax4[_0xe4bc[284]](_0xe4bc[1311])):_0xe4bc[1312]==_0x5d2axa?_0x5d2ax2[_0xe4bc[1255]](_0x5d2ax4[_0xe4bc[284]](_0xe4bc[234])):_0xe4bc[1313]==_0x5d2axa?_0x5d2ax2[_0xe4bc[1257]](Number(_0x5d2ax4[_0xe4bc[284]](_0xe4bc[1314]))):_0xe4bc[1298]==_0x5d2axa?_0x5d2ax2[_0xe4bc[1245]](_0x5d2ax4[_0xe4bc[284]](_0xe4bc[352])):_0xe4bc[1244]==_0x5d2axa?_0x5d2ax2[_0xe4bc[1243]](_0x5d2ax4[_0xe4bc[284]](_0xe4bc[1244])):_0xe4bc[1315]==_0x5d2axa?_0x5d2ax2[_0xe4bc[1259]](_0x5d2ax4[_0xe4bc[284]](_0xe4bc[352])):_0xe4bc[1318]==_0x5d2axa?_0x5d2ax2[_0xe4bc[1266]](_0x5d2ax4[_0xe4bc[284]](_0xe4bc[124])):_0xe4bc[1287]==_0x5d2axa?_0x5d2ax2[_0xe4bc[1265]](_0x5d2ax4[_0xe4bc[284]](_0xe4bc[1288])):_0xe4bc[1289]==_0x5d2axa&&_0x5d2ax2[_0xe4bc[1264]](Number(_0x5d2ax4[_0xe4bc[284]](_0xe4bc[803]))*_0x5d2ax16)}}}}}}}}}}}}}}}}}}}}};_0x5d2ax9&&(_0xe4bc[1338]==_0x5d2axa||_0xe4bc[1334]==_0x5d2axa||_0xe4bc[1336]==_0x5d2axa)&&_0x5d2ax2[_0xe4bc[1267]](!1)};function mxShape(_0x5d2ax2){this[_0xe4bc[1561]]=_0x5d2ax2;this[_0xe4bc[1307]]=1;this[_0xe4bc[603]]=0;this[_0xe4bc[461]]=100;this[_0xe4bc[624]]=this[_0xe4bc[623]]= !1}mxShape[_0xe4bc[202]][_0xe4bc[507]]=null;mxShape[_0xe4bc[202]][_0xe4bc[255]]=1;mxShape[_0xe4bc[202]][_0xe4bc[1562]]=null;mxShape[_0xe4bc[202]][_0xe4bc[1525]]=null;mxShape[_0xe4bc[202]][_0xe4bc[252]]=null;mxShape[_0xe4bc[202]][_0xe4bc[124]]=null;mxShape[_0xe4bc[202]][_0xe4bc[124]]=null;mxShape[_0xe4bc[202]][_0xe4bc[1563]]=null;mxShape[_0xe4bc[202]][_0xe4bc[1561]]=null;mxShape[_0xe4bc[202]][_0xe4bc[1564]]=6;mxShape[_0xe4bc[202]][_0xe4bc[1229]]= !0;mxShape[_0xe4bc[202]][_0xe4bc[1565]]= !1;mxShape[_0xe4bc[202]][_0xe4bc[1460]]=1;mxShape[_0xe4bc[202]][_0xe4bc[176]]=function(_0x5d2ax2){null==this[_0xe4bc[252]]&&(this[_0xe4bc[252]]=this[_0xe4bc[385]](_0x5d2ax2),null!=_0x5d2ax2&&_0x5d2ax2[_0xe4bc[62]](this[_0xe4bc[252]]))};mxShape[_0xe4bc[202]][_0xe4bc[1566]]=function(){return !0};mxShape[_0xe4bc[202]][_0xe4bc[1567]]=function(){return !1};mxShape[_0xe4bc[202]][_0xe4bc[1568]]=function(){return 1==mxUtils[_0xe4bc[1454]](Math[_0xe4bc[160]](1,Math[_0xe4bc[488]](this[_0xe4bc[1307]]*this[_0xe4bc[255]])),2)?0.5:0};mxShape[_0xe4bc[202]][_0xe4bc[385]]=function(_0x5d2ax2){var _0x5d2ax3=null;return _0x5d2ax3=null!=_0x5d2ax2[_0xe4bc[538]]?this[_0xe4bc[1569]](_0x5d2ax2):8==document[_0xe4bc[5]]||this[_0xe4bc[507]]==mxConstants[_0xe4bc[508]]||this[_0xe4bc[507]]!=mxConstants[_0xe4bc[1523]]&&this[_0xe4bc[1567]]()?this[_0xe4bc[1570]](_0x5d2ax2):this[_0xe4bc[1571]](_0x5d2ax2)};mxShape[_0xe4bc[202]][_0xe4bc[1569]]=function(){return document[_0xe4bc[509]](mxConstants.NS_SVG,_0xe4bc[449])};mxShape[_0xe4bc[202]][_0xe4bc[1571]]=function(){var _0x5d2ax2=document[_0xe4bc[55]](mxClient[_0xe4bc[463]]+_0xe4bc[1499]);_0x5d2ax2[_0xe4bc[124]][_0xe4bc[491]]=_0xe4bc[492];return _0x5d2ax2};mxShape[_0xe4bc[202]][_0xe4bc[1570]]=function(){var _0x5d2ax2=document[_0xe4bc[55]](_0xe4bc[485]);_0x5d2ax2[_0xe4bc[124]][_0xe4bc[491]]=_0xe4bc[492];return _0x5d2ax2};mxShape[_0xe4bc[202]][_0xe4bc[1572]]=function(){this[_0xe4bc[258]]()};mxShape[_0xe4bc[202]][_0xe4bc[258]]=function(){this[_0xe4bc[1573]]();this[_0xe4bc[1574]]()?(this[_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[187]]=_0xe4bc[110],_0xe4bc[529]==this[_0xe4bc[252]][_0xe4bc[301]]&&this[_0xe4bc[1567]]()?this[_0xe4bc[1575]]():this[_0xe4bc[1576]](),this[_0xe4bc[1577]]()):(this[_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[187]]=_0xe4bc[188],this[_0xe4bc[1563]]=null)};mxShape[_0xe4bc[202]][_0xe4bc[1573]]=function(){var _0x5d2ax2=this[_0xe4bc[1525]];if(null!=_0x5d2ax2&&0<_0x5d2ax2[_0xe4bc[67]]&&null!=_0x5d2ax2[0]){this[_0xe4bc[1562]]= new mxRectangle(Number(_0x5d2ax2[0][_0xe4bc[235]]),Number(_0x5d2ax2[0][_0xe4bc[236]]),1,1);for(var _0x5d2ax3=1;_0x5d2ax3<this[_0xe4bc[1525]][_0xe4bc[67]];_0x5d2ax3++){null!=_0x5d2ax2[_0x5d2ax3]&&this[_0xe4bc[1562]][_0xe4bc[99]]( new mxRectangle(Number(_0x5d2ax2[_0x5d2ax3][_0xe4bc[235]]),Number(_0x5d2ax2[_0x5d2ax3][_0xe4bc[236]]),1,1))}}};mxShape[_0xe4bc[202]][_0xe4bc[1574]]=function(){return null!=this[_0xe4bc[1562]]&&!isNaN(this[_0xe4bc[1562]][_0xe4bc[235]])&&!isNaN(this[_0xe4bc[1562]][_0xe4bc[236]])&&!isNaN(this[_0xe4bc[1562]][_0xe4bc[117]])&&!isNaN(this[_0xe4bc[1562]][_0xe4bc[119]])&&0<this[_0xe4bc[1562]][_0xe4bc[117]]&&0<this[_0xe4bc[1562]][_0xe4bc[119]]};mxShape[_0xe4bc[202]][_0xe4bc[1578]]=function(){var _0x5d2ax2=document[_0xe4bc[55]](mxClient[_0xe4bc[463]]+_0xe4bc[1499]);_0x5d2ax2[_0xe4bc[124]][_0xe4bc[491]]=_0xe4bc[492];_0x5d2ax2[_0xe4bc[124]][_0xe4bc[117]]=this[_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[117]];_0x5d2ax2[_0xe4bc[124]][_0xe4bc[119]]=this[_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[119]];return _0x5d2ax2};mxShape[_0xe4bc[202]][_0xe4bc[1576]]=function(){var _0x5d2ax2=this[_0xe4bc[1579]]();for(_0x5d2ax2[_0xe4bc[1229]]=this[_0xe4bc[1229]];this[_0xe4bc[252]][_0xe4bc[1580]]();){this[_0xe4bc[252]][_0xe4bc[266]](this[_0xe4bc[252]][_0xe4bc[1581]])};this[_0xe4bc[1209]](_0x5d2ax2);this[_0xe4bc[252]]!=_0x5d2ax2[_0xe4bc[813]]&&this[_0xe4bc[252]][_0xe4bc[1583]](_0xe4bc[1582],_0x5d2ax2[_0xe4bc[813]][_0xe4bc[342]]);_0xe4bc[529]==this[_0xe4bc[252]][_0xe4bc[301]]&&8==document[_0xe4bc[5]]&&(this[_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[347]]=_0xe4bc[110],(null==this[_0xe4bc[1561]]||!this[_0xe4bc[1565]])&&mxUtils[_0xe4bc[1584]](this[_0xe4bc[252]]));this[_0xe4bc[1585]](_0x5d2ax2)};mxShape[_0xe4bc[202]][_0xe4bc[1579]]=function(){var _0x5d2ax2=null,_0x5d2ax3=null;if(null!=this[_0xe4bc[252]][_0xe4bc[538]]){_0x5d2ax2= new mxSvgCanvas2D(this[_0xe4bc[252]],!1),_0x5d2ax2[_0xe4bc[1345]]=this[_0xe4bc[1564]],_0x5d2ax2[_0xe4bc[1347]]=mxClient[_0xe4bc[133]]&&!mxClient[_0xe4bc[75]]&&!mxClient[_0xe4bc[76]],_0x5d2ax3=this[_0xe4bc[1568]](),0!=_0x5d2ax3?this[_0xe4bc[252]][_0xe4bc[57]](_0xe4bc[535],_0xe4bc[536]+_0x5d2ax3+_0xe4bc[537]+_0x5d2ax3+_0xe4bc[460]):this[_0xe4bc[252]][_0xe4bc[1390]](_0xe4bc[535])}else {this[_0xe4bc[1586]]();var _0x5d2ax4=Math[_0xe4bc[160]](1,Math[_0xe4bc[488]](this[_0xe4bc[1562]][_0xe4bc[117]])),_0x5d2ax5=Math[_0xe4bc[160]](1,Math[_0xe4bc[488]](this[_0xe4bc[1562]][_0xe4bc[119]])),_0x5d2ax3=8==document[_0xe4bc[5]]&&this[_0xe4bc[1566]]()?this[_0xe4bc[1578]]():this[_0xe4bc[252]],_0x5d2ax2= new mxVmlCanvas2D(_0x5d2ax3,!1);_0xe4bc[110]!=_0x5d2ax3[_0xe4bc[337]]&&(_0x5d2ax3[_0xe4bc[1462]]=_0x5d2ax4*this[_0xe4bc[1460]]+_0xe4bc[537]+_0x5d2ax5*this[_0xe4bc[1460]],_0x5d2ax2[_0xe4bc[255]](this[_0xe4bc[1460]]),_0x5d2ax2[_0xe4bc[1460]]=this[_0xe4bc[1460]]);_0x5d2ax3=this[_0xe4bc[255]];_0x5d2ax2[_0xe4bc[513]](-Math[_0xe4bc[488]](this[_0xe4bc[1562]][_0xe4bc[235]]/_0x5d2ax3),-Math[_0xe4bc[488]](this[_0xe4bc[1562]][_0xe4bc[236]]/_0x5d2ax3))};return _0x5d2ax2};mxShape[_0xe4bc[202]][_0xe4bc[1586]]=function(){this[_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[361]]=Math[_0xe4bc[488]](this[_0xe4bc[1562]][_0xe4bc[235]])+_0xe4bc[168];this[_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[125]]=Math[_0xe4bc[488]](this[_0xe4bc[1562]][_0xe4bc[236]])+_0xe4bc[168];var _0x5d2ax2=Math[_0xe4bc[160]](1,Math[_0xe4bc[488]](this[_0xe4bc[1562]][_0xe4bc[117]])),_0x5d2ax3=Math[_0xe4bc[160]](1,Math[_0xe4bc[488]](this[_0xe4bc[1562]][_0xe4bc[119]]));this[_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[117]]=_0x5d2ax2+_0xe4bc[168];this[_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[119]]=_0x5d2ax3+_0xe4bc[168];this[_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[277]]=_0xe4bc[189]};mxShape[_0xe4bc[202]][_0xe4bc[1585]]=function(_0x5d2ax2){if(_0x5d2ax2 instanceof mxSvgCanvas2D){for(var _0x5d2ax3 in _0x5d2ax2[_0xe4bc[1339]]){var _0x5d2ax4=_0x5d2ax2[_0xe4bc[1339]][_0x5d2ax3];_0x5d2ax4[_0xe4bc[1587]]=(_0x5d2ax4[_0xe4bc[1587]]||0)+1};this[_0xe4bc[1589]](this[_0xe4bc[1588]]);this[_0xe4bc[1588]]=_0x5d2ax2[_0xe4bc[1339]]}};mxShape[_0xe4bc[202]][_0xe4bc[1209]]=function(_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[255]],_0x5d2ax4=this[_0xe4bc[1562]][_0xe4bc[235]]/_0x5d2ax3,_0x5d2ax5=this[_0xe4bc[1562]][_0xe4bc[236]]/_0x5d2ax3,_0x5d2ax9=this[_0xe4bc[1562]][_0xe4bc[117]]/_0x5d2ax3,_0x5d2axa=this[_0xe4bc[1562]][_0xe4bc[119]]/_0x5d2ax3;if(this[_0xe4bc[1590]]()){var _0x5d2ax12=(_0x5d2ax9-_0x5d2axa)/2,_0x5d2ax4=_0x5d2ax4+_0x5d2ax12,_0x5d2ax5=_0x5d2ax5-_0x5d2ax12,_0x5d2ax12=_0x5d2ax9,_0x5d2ax9=_0x5d2axa,_0x5d2axa=_0x5d2ax12};this[_0xe4bc[1591]](_0x5d2ax2,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa);this[_0xe4bc[1592]](_0x5d2ax2,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa);if(null!=this[_0xe4bc[1561]]){this[_0xe4bc[1593]](_0x5d2ax2,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa)}else {if(_0x5d2ax2[_0xe4bc[1250]](this[_0xe4bc[1307]]),null!=this[_0xe4bc[1525]]){_0x5d2ax4=[];for(_0x5d2ax5=0;_0x5d2ax5<this[_0xe4bc[1525]][_0xe4bc[67]];_0x5d2ax5++){_0x5d2ax4[_0xe4bc[207]]( new mxPoint(this[_0xe4bc[1525]][_0x5d2ax5][_0xe4bc[235]]/_0x5d2ax3,this[_0xe4bc[1525]][_0x5d2ax5][_0xe4bc[236]]/_0x5d2ax3))};this[_0xe4bc[1594]](_0x5d2ax2,_0x5d2ax4)}else {this[_0xe4bc[1595]](_0x5d2ax2,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa)}}};mxShape[_0xe4bc[202]][_0xe4bc[1592]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){var _0x5d2axa=null;null!=this[_0xe4bc[124]]&&(_0x5d2axa=this[_0xe4bc[124]][_0xe4bc[649]]);_0x5d2ax2[_0xe4bc[1243]](this[_0xe4bc[461]]/100);null!=this[_0xe4bc[1596]]&&_0x5d2ax2[_0xe4bc[1267]](this[_0xe4bc[1596]]);null!=this[_0xe4bc[1522]]&&_0x5d2ax2[_0xe4bc[1251]](this[_0xe4bc[1522]]);null!=_0x5d2axa&&_0x5d2ax2[_0xe4bc[1252]](_0x5d2axa);null!=this[_0xe4bc[1299]]?(_0x5d2ax3=this[_0xe4bc[1597]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9),_0x5d2ax2[_0xe4bc[1246]](this[_0xe4bc[1334]],this[_0xe4bc[1299]],_0x5d2ax3[_0xe4bc[235]],_0x5d2ax3[_0xe4bc[236]],_0x5d2ax3[_0xe4bc[117]],_0x5d2ax3[_0xe4bc[119]],this[_0xe4bc[607]])):_0x5d2ax2[_0xe4bc[1245]](this[_0xe4bc[1334]]);_0x5d2ax2[_0xe4bc[1249]](this[_0xe4bc[1336]])};mxShape[_0xe4bc[202]][_0xe4bc[1597]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){return  new mxRectangle(_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9)};mxShape[_0xe4bc[202]][_0xe4bc[1591]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){_0x5d2ax2[_0xe4bc[255]](this[_0xe4bc[255]]);_0x5d2ax2[_0xe4bc[1294]](this[_0xe4bc[1598]](),this[_0xe4bc[623]],this[_0xe4bc[624]],_0x5d2ax3+_0x5d2ax5/2,_0x5d2ax4+_0x5d2ax9/2)};mxShape[_0xe4bc[202]][_0xe4bc[1593]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){this[_0xe4bc[1565]]&&(this[_0xe4bc[507]]==mxConstants[_0xe4bc[508]]?this[_0xe4bc[1599]](this[_0xe4bc[252]],_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9):8!=document[_0xe4bc[5]]&&this[_0xe4bc[1600]](this[_0xe4bc[252]]));this[_0xe4bc[1561]][_0xe4bc[1546]](_0x5d2ax2,this,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9)};mxShape[_0xe4bc[202]][_0xe4bc[1595]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){this[_0xe4bc[1601]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9);_0x5d2ax2[_0xe4bc[1267]](!1);this[_0xe4bc[1602]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9)};mxShape[_0xe4bc[202]][_0xe4bc[1601]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){};mxShape[_0xe4bc[202]][_0xe4bc[1602]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){};mxShape[_0xe4bc[202]][_0xe4bc[1594]]=function(_0x5d2ax2,_0x5d2ax3){};mxShape[_0xe4bc[202]][_0xe4bc[1603]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=mxUtils[_0xe4bc[433]](this[_0xe4bc[124]],mxConstants.STYLE_ARCSIZE,100*mxConstants[_0xe4bc[1557]])/100;return Math[_0xe4bc[243]](_0x5d2ax2*_0x5d2ax4,_0x5d2ax3*_0x5d2ax4)};mxShape[_0xe4bc[202]][_0xe4bc[1604]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa){var _0x5d2ax12=Math[_0xe4bc[430]](this[_0xe4bc[1307]]/2);_0x5d2ax2[_0xe4bc[1246]](_0xe4bc[1605],_0xe4bc[1605],_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,0.6*_0x5d2ax9,_0xe4bc[701],0.9,0.1);_0x5d2ax2[_0xe4bc[1275]]();_0x5d2axa+=2*_0x5d2ax12;this[_0xe4bc[1606]]?(_0x5d2ax2[_0xe4bc[1276]](_0x5d2ax3-_0x5d2ax12+_0x5d2axa,_0x5d2ax4-_0x5d2ax12),_0x5d2ax2[_0xe4bc[1278]](_0x5d2ax3-_0x5d2ax12,_0x5d2ax4-_0x5d2ax12,_0x5d2ax3-_0x5d2ax12,_0x5d2ax4-_0x5d2ax12+_0x5d2axa),_0x5d2ax2[_0xe4bc[1277]](_0x5d2ax3-_0x5d2ax12,_0x5d2ax4+0.4*_0x5d2ax9),_0x5d2ax2[_0xe4bc[1278]](_0x5d2ax3+0.5*_0x5d2ax5,_0x5d2ax4+0.7*_0x5d2ax9,_0x5d2ax3+_0x5d2ax5+_0x5d2ax12,_0x5d2ax4+0.4*_0x5d2ax9),_0x5d2ax2[_0xe4bc[1277]](_0x5d2ax3+_0x5d2ax5+_0x5d2ax12,_0x5d2ax4-_0x5d2ax12+_0x5d2axa),_0x5d2ax2[_0xe4bc[1278]](_0x5d2ax3+_0x5d2ax5+_0x5d2ax12,_0x5d2ax4-_0x5d2ax12,_0x5d2ax3+_0x5d2ax5+_0x5d2ax12-_0x5d2axa,_0x5d2ax4-_0x5d2ax12)):(_0x5d2ax2[_0xe4bc[1276]](_0x5d2ax3-_0x5d2ax12,_0x5d2ax4-_0x5d2ax12),_0x5d2ax2[_0xe4bc[1277]](_0x5d2ax3-_0x5d2ax12,_0x5d2ax4+0.4*_0x5d2ax9),_0x5d2ax2[_0xe4bc[1278]](_0x5d2ax3+0.5*_0x5d2ax5,_0x5d2ax4+0.7*_0x5d2ax9,_0x5d2ax3+_0x5d2ax5+_0x5d2ax12,_0x5d2ax4+0.4*_0x5d2ax9),_0x5d2ax2[_0xe4bc[1277]](_0x5d2ax3+_0x5d2ax5+_0x5d2ax12,_0x5d2ax4-_0x5d2ax12));_0x5d2ax2[_0xe4bc[268]]();_0x5d2ax2[_0xe4bc[1334]]()};mxShape[_0xe4bc[202]][_0xe4bc[183]]=function(_0x5d2ax2){this[_0xe4bc[724]]=_0x5d2ax2;this[_0xe4bc[124]]=_0x5d2ax2[_0xe4bc[124]];if(null!=this[_0xe4bc[124]]){this[_0xe4bc[1334]]=mxUtils[_0xe4bc[433]](this[_0xe4bc[124]],mxConstants.STYLE_FILLCOLOR,this[_0xe4bc[1334]]);this[_0xe4bc[1299]]=mxUtils[_0xe4bc[433]](this[_0xe4bc[124]],mxConstants.STYLE_GRADIENTCOLOR,this[_0xe4bc[1299]]);this[_0xe4bc[607]]=mxUtils[_0xe4bc[433]](this[_0xe4bc[124]],mxConstants.STYLE_GRADIENT_DIRECTION,this[_0xe4bc[607]]);this[_0xe4bc[461]]=mxUtils[_0xe4bc[433]](this[_0xe4bc[124]],mxConstants.STYLE_OPACITY,this[_0xe4bc[461]]);this[_0xe4bc[1336]]=mxUtils[_0xe4bc[433]](this[_0xe4bc[124]],mxConstants.STYLE_STROKECOLOR,this[_0xe4bc[1336]]);this[_0xe4bc[1307]]=mxUtils[_0xe4bc[1550]](this[_0xe4bc[124]],mxConstants.STYLE_STROKEWIDTH,this[_0xe4bc[1307]]);this[_0xe4bc[657]]=mxUtils[_0xe4bc[433]](this[_0xe4bc[124]],mxConstants.STYLE_SPACING,this[_0xe4bc[657]]);this[_0xe4bc[644]]=mxUtils[_0xe4bc[1550]](this[_0xe4bc[124]],mxConstants.STYLE_STARTSIZE,this[_0xe4bc[644]]);this[_0xe4bc[643]]=mxUtils[_0xe4bc[1550]](this[_0xe4bc[124]],mxConstants.STYLE_ENDSIZE,this[_0xe4bc[643]]);this[_0xe4bc[642]]=mxUtils[_0xe4bc[433]](this[_0xe4bc[124]],mxConstants.STYLE_STARTARROW,this[_0xe4bc[642]]);this[_0xe4bc[641]]=mxUtils[_0xe4bc[433]](this[_0xe4bc[124]],mxConstants.STYLE_ENDARROW,this[_0xe4bc[641]]);this[_0xe4bc[603]]=mxUtils[_0xe4bc[433]](this[_0xe4bc[124]],mxConstants.STYLE_ROTATION,this[_0xe4bc[603]]);this[_0xe4bc[663]]=mxUtils[_0xe4bc[433]](this[_0xe4bc[124]],mxConstants.STYLE_DIRECTION,this[_0xe4bc[663]]);this[_0xe4bc[623]]=1==mxUtils[_0xe4bc[433]](this[_0xe4bc[124]],mxConstants.STYLE_FLIPH,0);this[_0xe4bc[624]]=1==mxUtils[_0xe4bc[433]](this[_0xe4bc[124]],mxConstants.STYLE_FLIPV,0);null!=this[_0xe4bc[1561]]&&(this[_0xe4bc[623]]=1==mxUtils[_0xe4bc[433]](this[_0xe4bc[124]],_0xe4bc[1607],0)||this[_0xe4bc[623]],this[_0xe4bc[624]]=1==mxUtils[_0xe4bc[433]](this[_0xe4bc[124]],_0xe4bc[1608],0)||this[_0xe4bc[624]]);if(_0xe4bc[700]==this[_0xe4bc[663]]||_0xe4bc[701]==this[_0xe4bc[663]]){_0x5d2ax2=this[_0xe4bc[623]],this[_0xe4bc[623]]=this[_0xe4bc[624]],this[_0xe4bc[624]]=_0x5d2ax2};this[_0xe4bc[1596]]=1==mxUtils[_0xe4bc[433]](this[_0xe4bc[124]],mxConstants.STYLE_SHADOW,this[_0xe4bc[1596]]);this[_0xe4bc[1522]]=1==mxUtils[_0xe4bc[433]](this[_0xe4bc[124]],mxConstants.STYLE_DASHED,this[_0xe4bc[1522]]);this[_0xe4bc[1606]]=1==mxUtils[_0xe4bc[433]](this[_0xe4bc[124]],mxConstants.STYLE_ROUNDED,this[_0xe4bc[1606]]);this[_0xe4bc[617]]=1==mxUtils[_0xe4bc[433]](this[_0xe4bc[124]],mxConstants.STYLE_GLASS,this[_0xe4bc[617]]);_0xe4bc[130]==this[_0xe4bc[1334]]&&(this[_0xe4bc[1334]]=null);_0xe4bc[130]==this[_0xe4bc[1299]]&&(this[_0xe4bc[1299]]=null);_0xe4bc[130]==this[_0xe4bc[1336]]&&(this[_0xe4bc[1336]]=null)}};mxShape[_0xe4bc[202]][_0xe4bc[1609]]=function(_0x5d2ax2){null==_0x5d2ax2&&(_0x5d2ax2=_0xe4bc[110]);this[_0xe4bc[270]]=_0x5d2ax2;null!=this[_0xe4bc[252]]&&(this[_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[270]]=_0x5d2ax2)};mxShape[_0xe4bc[202]][_0xe4bc[1610]]=function(){return this[_0xe4bc[270]]};mxShape[_0xe4bc[202]][_0xe4bc[1577]]=function(){if(null!=this[_0xe4bc[1562]]){var _0x5d2ax2=this[_0xe4bc[1611]]();if(null!=_0x5d2ax2){this[_0xe4bc[1612]](_0x5d2ax2);var _0x5d2ax3=this[_0xe4bc[1598]]();0!=_0x5d2ax3&&(_0x5d2ax2=mxUtils[_0xe4bc[1613]](_0x5d2ax2,_0x5d2ax3));_0x5d2ax2[_0xe4bc[235]]=Math[_0xe4bc[519]](_0x5d2ax2[_0xe4bc[235]]);_0x5d2ax2[_0xe4bc[236]]=Math[_0xe4bc[519]](_0x5d2ax2[_0xe4bc[236]]);_0x5d2ax2[_0xe4bc[117]]=Math[_0xe4bc[430]](_0x5d2ax2[_0xe4bc[117]]);_0x5d2ax2[_0xe4bc[119]]=Math[_0xe4bc[430]](_0x5d2ax2[_0xe4bc[119]])};this[_0xe4bc[1563]]=_0x5d2ax2}};mxShape[_0xe4bc[202]][_0xe4bc[1611]]=function(){var _0x5d2ax2=this[_0xe4bc[1562]][_0xe4bc[238]]();if(this[_0xe4bc[1590]]()){var _0x5d2ax3=(_0x5d2ax2[_0xe4bc[117]]-_0x5d2ax2[_0xe4bc[119]])/2;_0x5d2ax2[_0xe4bc[235]]+=_0x5d2ax3;_0x5d2ax2[_0xe4bc[236]]-=_0x5d2ax3;_0x5d2ax3=_0x5d2ax2[_0xe4bc[117]];_0x5d2ax2[_0xe4bc[117]]=_0x5d2ax2[_0xe4bc[119]];_0x5d2ax2[_0xe4bc[119]]=_0x5d2ax3};return _0x5d2ax2};mxShape[_0xe4bc[202]][_0xe4bc[1612]]=function(_0x5d2ax2){this[_0xe4bc[1596]]&&(_0x5d2ax2[_0xe4bc[117]]+=Math[_0xe4bc[430]](mxConstants[_0xe4bc[1237]]*this[_0xe4bc[255]]),_0x5d2ax2[_0xe4bc[119]]+=Math[_0xe4bc[430]](mxConstants[_0xe4bc[1238]]*this[_0xe4bc[255]]));var _0x5d2ax3=Math[_0xe4bc[430]](this[_0xe4bc[1307]]*this[_0xe4bc[255]]);_0x5d2ax2[_0xe4bc[244]](Math[_0xe4bc[430]](_0x5d2ax3/2))};mxShape[_0xe4bc[202]][_0xe4bc[1590]]=function(){return null==this[_0xe4bc[1561]]&&(_0xe4bc[700]==this[_0xe4bc[663]]||_0xe4bc[701]==this[_0xe4bc[663]])};mxShape[_0xe4bc[202]][_0xe4bc[1614]]=function(){return null!=this[_0xe4bc[603]]?this[_0xe4bc[603]]:0};mxShape[_0xe4bc[202]][_0xe4bc[1615]]=function(){var _0x5d2ax2=this[_0xe4bc[1614]]();1!=mxUtils[_0xe4bc[433]](this[_0xe4bc[124]],mxConstants.STYLE_HORIZONTAL,1)&&(_0x5d2ax2+=mxText[_0xe4bc[202]][_0xe4bc[1616]]);return _0x5d2ax2};mxShape[_0xe4bc[202]][_0xe4bc[1598]]=function(){var _0x5d2ax2=this[_0xe4bc[1614]]();null!=this[_0xe4bc[663]]&&(_0xe4bc[700]==this[_0xe4bc[663]]?_0x5d2ax2+=270:_0xe4bc[703]==this[_0xe4bc[663]]?_0x5d2ax2+=180:_0xe4bc[701]==this[_0xe4bc[663]]&&(_0x5d2ax2+=90));return _0x5d2ax2};mxShape[_0xe4bc[202]][_0xe4bc[1599]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){_0x5d2ax2=document[_0xe4bc[509]](mxConstants.NS_SVG,_0xe4bc[1319]);_0x5d2ax2[_0xe4bc[57]](_0xe4bc[235],_0x5d2ax3);_0x5d2ax2[_0xe4bc[57]](_0xe4bc[236],_0x5d2ax4);_0x5d2ax2[_0xe4bc[57]](_0xe4bc[117],_0x5d2ax5);_0x5d2ax2[_0xe4bc[57]](_0xe4bc[119],_0x5d2ax9);_0x5d2ax2[_0xe4bc[57]](_0xe4bc[1334],_0xe4bc[130]);_0x5d2ax2[_0xe4bc[57]](_0xe4bc[1336],_0xe4bc[130]);_0x5d2ax2[_0xe4bc[57]](_0xe4bc[1377],_0xe4bc[1378]);this[_0xe4bc[252]][_0xe4bc[62]](_0x5d2ax2)};mxShape[_0xe4bc[202]][_0xe4bc[1600]]=function(_0x5d2ax2){_0x5d2ax2[_0xe4bc[124]][_0xe4bc[1617]]=_0xe4bc[1618]+mxClient[_0xe4bc[88]]+_0xe4bc[1619]};mxShape[_0xe4bc[202]][_0xe4bc[1589]]=function(_0x5d2ax2){if(null!=_0x5d2ax2){for(var _0x5d2ax3 in _0x5d2ax2){var _0x5d2ax4=_0x5d2ax2[_0x5d2ax3];_0x5d2ax4[_0xe4bc[1587]]=(_0x5d2ax4[_0xe4bc[1587]]||0)-1;0==_0x5d2ax4[_0xe4bc[1587]]&&null!=_0x5d2ax4[_0xe4bc[265]]&&_0x5d2ax4[_0xe4bc[265]][_0xe4bc[266]](_0x5d2ax4)}}};mxShape[_0xe4bc[202]][_0xe4bc[515]]=function(){null!=this[_0xe4bc[252]]&&(mxEvent[_0xe4bc[762]](this[_0xe4bc[252]]),null!=this[_0xe4bc[252]][_0xe4bc[265]]&&this[_0xe4bc[252]][_0xe4bc[265]][_0xe4bc[266]](this[_0xe4bc[252]]),this[_0xe4bc[252]]=null);this[_0xe4bc[1589]](this[_0xe4bc[1588]]);this[_0xe4bc[1588]]=null};var mxStencilRegistry={stencils:[],addStencil:function(_0x5d2ax2,_0x5d2ax3){mxStencilRegistry[_0xe4bc[1620]][_0x5d2ax2]=_0x5d2ax3},getStencil:function(_0x5d2ax2){return mxStencilRegistry[_0xe4bc[1620]][_0x5d2ax2]}},mxMarker={markers:[],addMarker:function(_0x5d2ax2,_0x5d2ax3){mxMarker[_0xe4bc[1621]][_0x5d2ax2]=_0x5d2ax3},createMarker:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa,_0x5d2ax12,_0x5d2ax13,_0x5d2ax14,_0x5d2ax15){var _0x5d2ax16=mxMarker[_0xe4bc[1621]][_0x5d2ax4];return null!=_0x5d2ax16?_0x5d2ax16(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa,_0x5d2ax12,_0x5d2ax13,_0x5d2ax14,_0x5d2ax15):null}};(function(){function _0x5d2ax2(_0x5d2ax2,_0x5d2ax3,_0x5d2ax9,_0x5d2axa,_0x5d2ax12,_0x5d2ax13,_0x5d2ax14,_0x5d2ax15,_0x5d2ax16,_0x5d2ax17){_0x5d2ax3=1.118*_0x5d2ax12*_0x5d2ax16;_0x5d2ax15=1.118*_0x5d2ax13*_0x5d2ax16;_0x5d2ax12*=_0x5d2ax14+_0x5d2ax16;_0x5d2ax13*=_0x5d2ax14+_0x5d2ax16;var _0x5d2ax18=_0x5d2axa[_0xe4bc[238]]();_0x5d2ax18[_0xe4bc[235]]-=_0x5d2ax3;_0x5d2ax18[_0xe4bc[236]]-=_0x5d2ax15;_0x5d2ax14=_0x5d2ax9!=mxConstants[_0xe4bc[1622]]?1:0.75;_0x5d2axa[_0xe4bc[235]]+=-_0x5d2ax12*_0x5d2ax14-_0x5d2ax3;_0x5d2axa[_0xe4bc[236]]+=-_0x5d2ax13*_0x5d2ax14-_0x5d2ax15;return function(){_0x5d2ax2[_0xe4bc[1275]]();_0x5d2ax2[_0xe4bc[1276]](_0x5d2ax18[_0xe4bc[235]],_0x5d2ax18[_0xe4bc[236]]);_0x5d2ax2[_0xe4bc[1277]](_0x5d2ax18[_0xe4bc[235]]-_0x5d2ax12-_0x5d2ax13/2,_0x5d2ax18[_0xe4bc[236]]-_0x5d2ax13+_0x5d2ax12/2);_0x5d2ax9==mxConstants[_0xe4bc[1622]]&&_0x5d2ax2[_0xe4bc[1277]](_0x5d2ax18[_0xe4bc[235]]-3*_0x5d2ax12/4,_0x5d2ax18[_0xe4bc[236]]-3*_0x5d2ax13/4);_0x5d2ax2[_0xe4bc[1277]](_0x5d2ax18[_0xe4bc[235]]+_0x5d2ax13/2-_0x5d2ax12,_0x5d2ax18[_0xe4bc[236]]-_0x5d2ax13-_0x5d2ax12/2);_0x5d2ax2[_0xe4bc[268]]();_0x5d2ax17?_0x5d2ax2[_0xe4bc[1337]]():_0x5d2ax2[_0xe4bc[1336]]()}}function _0x5d2ax3(_0x5d2ax2,_0x5d2ax3,_0x5d2ax9,_0x5d2axa,_0x5d2ax12,_0x5d2ax13,_0x5d2ax14,_0x5d2ax15,_0x5d2ax16,_0x5d2ax17){_0x5d2ax15=_0x5d2ax9==mxConstants[_0xe4bc[1623]]?0.7071:0.9862;_0x5d2ax3=_0x5d2ax12*_0x5d2ax16*_0x5d2ax15;_0x5d2ax15*=_0x5d2ax13*_0x5d2ax16;_0x5d2ax12*=_0x5d2ax14+_0x5d2ax16;_0x5d2ax13*=_0x5d2ax14+_0x5d2ax16;var _0x5d2ax18=_0x5d2axa[_0xe4bc[238]]();_0x5d2ax18[_0xe4bc[235]]-=_0x5d2ax3;_0x5d2ax18[_0xe4bc[236]]-=_0x5d2ax15;_0x5d2axa[_0xe4bc[235]]+=-_0x5d2ax12-_0x5d2ax3;_0x5d2axa[_0xe4bc[236]]+=-_0x5d2ax13-_0x5d2ax15;var _0x5d2ax19=_0x5d2ax9==mxConstants[_0xe4bc[1623]]?2:3.4;return function(){_0x5d2ax2[_0xe4bc[1275]]();_0x5d2ax2[_0xe4bc[1276]](_0x5d2ax18[_0xe4bc[235]],_0x5d2ax18[_0xe4bc[236]]);_0x5d2ax2[_0xe4bc[1277]](_0x5d2ax18[_0xe4bc[235]]-_0x5d2ax12/2-_0x5d2ax13/_0x5d2ax19,_0x5d2ax18[_0xe4bc[236]]+_0x5d2ax12/_0x5d2ax19-_0x5d2ax13/2);_0x5d2ax2[_0xe4bc[1277]](_0x5d2ax18[_0xe4bc[235]]-_0x5d2ax12,_0x5d2ax18[_0xe4bc[236]]-_0x5d2ax13);_0x5d2ax2[_0xe4bc[1277]](_0x5d2ax18[_0xe4bc[235]]-_0x5d2ax12/2+_0x5d2ax13/_0x5d2ax19,_0x5d2ax18[_0xe4bc[236]]-_0x5d2ax13/2-_0x5d2ax12/_0x5d2ax19);_0x5d2ax2[_0xe4bc[268]]();_0x5d2ax17?_0x5d2ax2[_0xe4bc[1337]]():_0x5d2ax2[_0xe4bc[1336]]()}}mxMarker[_0xe4bc[1624]](_0xe4bc[693],_0x5d2ax2);mxMarker[_0xe4bc[1624]](_0xe4bc[694],_0x5d2ax2);mxMarker[_0xe4bc[1624]](_0xe4bc[392],function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax9,_0x5d2axa,_0x5d2ax12,_0x5d2ax13,_0x5d2ax14,_0x5d2ax15,_0x5d2ax16,_0x5d2ax17){_0x5d2ax3=1.118*_0x5d2ax12*_0x5d2ax16;_0x5d2ax9=1.118*_0x5d2ax13*_0x5d2ax16;_0x5d2ax12*=_0x5d2ax14+_0x5d2ax16;_0x5d2ax13*=_0x5d2ax14+_0x5d2ax16;var _0x5d2ax18=_0x5d2axa[_0xe4bc[238]]();_0x5d2ax18[_0xe4bc[235]]-=_0x5d2ax3;_0x5d2ax18[_0xe4bc[236]]-=_0x5d2ax9;_0x5d2axa[_0xe4bc[235]]+=2* -_0x5d2ax3;_0x5d2axa[_0xe4bc[236]]+=2* -_0x5d2ax9;return function(){_0x5d2ax2[_0xe4bc[1275]]();_0x5d2ax2[_0xe4bc[1276]](_0x5d2ax18[_0xe4bc[235]]-_0x5d2ax12-_0x5d2ax13/2,_0x5d2ax18[_0xe4bc[236]]-_0x5d2ax13+_0x5d2ax12/2);_0x5d2ax2[_0xe4bc[1277]](_0x5d2ax18[_0xe4bc[235]],_0x5d2ax18[_0xe4bc[236]]);_0x5d2ax2[_0xe4bc[1277]](_0x5d2ax18[_0xe4bc[235]]+_0x5d2ax13/2-_0x5d2ax12,_0x5d2ax18[_0xe4bc[236]]-_0x5d2ax13-_0x5d2ax12/2);_0x5d2ax2[_0xe4bc[1336]]()}});mxMarker[_0xe4bc[1624]](_0xe4bc[695],function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax9,_0x5d2axa,_0x5d2ax12,_0x5d2ax13,_0x5d2ax14,_0x5d2ax15,_0x5d2ax16,_0x5d2ax17){var _0x5d2ax18=_0x5d2ax14/2,_0x5d2ax19=_0x5d2axa[_0xe4bc[238]]();_0x5d2axa[_0xe4bc[235]]-=_0x5d2ax12*_0x5d2ax18;_0x5d2axa[_0xe4bc[236]]-=_0x5d2ax13*_0x5d2ax18;return function(){_0x5d2ax2[_0xe4bc[680]](_0x5d2ax19[_0xe4bc[235]]-_0x5d2ax18,_0x5d2ax19[_0xe4bc[236]]-_0x5d2ax18,_0x5d2ax14,_0x5d2ax14);_0x5d2ax17?_0x5d2ax2[_0xe4bc[1337]]():_0x5d2ax2[_0xe4bc[1336]]()}});mxMarker[_0xe4bc[1624]](_0xe4bc[696],_0x5d2ax3);mxMarker[_0xe4bc[1624]](_0xe4bc[697],_0x5d2ax3)})();function mxActor(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){mxShape[_0xe4bc[239]](this);this[_0xe4bc[1562]]=_0x5d2ax2;this[_0xe4bc[1334]]=_0x5d2ax3;this[_0xe4bc[1336]]=_0x5d2ax4;this[_0xe4bc[1307]]=null!=_0x5d2ax5?_0x5d2ax5:1}mxUtils[_0xe4bc[1284]](mxActor,mxShape);mxActor[_0xe4bc[202]][_0xe4bc[1595]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){_0x5d2ax2[_0xe4bc[513]](_0x5d2ax3,_0x5d2ax4);_0x5d2ax2[_0xe4bc[1275]]();this[_0xe4bc[1625]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9);_0x5d2ax2[_0xe4bc[1337]]()};mxActor[_0xe4bc[202]][_0xe4bc[1625]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){_0x5d2ax3=_0x5d2ax5/3;_0x5d2ax2[_0xe4bc[1276]](0,_0x5d2ax9);_0x5d2ax2[_0xe4bc[1279]](0,3*_0x5d2ax9/5,0,2*_0x5d2ax9/5,_0x5d2ax5/2,2*_0x5d2ax9/5);_0x5d2ax2[_0xe4bc[1279]](_0x5d2ax5/2-_0x5d2ax3,2*_0x5d2ax9/5,_0x5d2ax5/2-_0x5d2ax3,0,_0x5d2ax5/2,0);_0x5d2ax2[_0xe4bc[1279]](_0x5d2ax5/2+_0x5d2ax3,0,_0x5d2ax5/2+_0x5d2ax3,2*_0x5d2ax9/5,_0x5d2ax5/2,2*_0x5d2ax9/5);_0x5d2ax2[_0xe4bc[1279]](_0x5d2ax5,2*_0x5d2ax9/5,_0x5d2ax5,3*_0x5d2ax9/5,_0x5d2ax5,_0x5d2ax9);_0x5d2ax2[_0xe4bc[268]]()};function mxCloud(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){mxActor[_0xe4bc[239]](this);this[_0xe4bc[1562]]=_0x5d2ax2;this[_0xe4bc[1334]]=_0x5d2ax3;this[_0xe4bc[1336]]=_0x5d2ax4;this[_0xe4bc[1307]]=null!=_0x5d2ax5?_0x5d2ax5:1}mxUtils[_0xe4bc[1284]](mxCloud,mxActor);mxCloud[_0xe4bc[202]][_0xe4bc[1625]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){_0x5d2ax2[_0xe4bc[1276]](0.25*_0x5d2ax5,0.25*_0x5d2ax9);_0x5d2ax2[_0xe4bc[1279]](0.05*_0x5d2ax5,0.25*_0x5d2ax9,0,0.5*_0x5d2ax9,0.16*_0x5d2ax5,0.55*_0x5d2ax9);_0x5d2ax2[_0xe4bc[1279]](0,0.66*_0x5d2ax9,0.18*_0x5d2ax5,0.9*_0x5d2ax9,0.31*_0x5d2ax5,0.8*_0x5d2ax9);_0x5d2ax2[_0xe4bc[1279]](0.4*_0x5d2ax5,_0x5d2ax9,0.7*_0x5d2ax5,_0x5d2ax9,0.8*_0x5d2ax5,0.8*_0x5d2ax9);_0x5d2ax2[_0xe4bc[1279]](_0x5d2ax5,0.8*_0x5d2ax9,_0x5d2ax5,0.6*_0x5d2ax9,0.875*_0x5d2ax5,0.5*_0x5d2ax9);_0x5d2ax2[_0xe4bc[1279]](_0x5d2ax5,0.3*_0x5d2ax9,0.8*_0x5d2ax5,0.1*_0x5d2ax9,0.625*_0x5d2ax5,0.2*_0x5d2ax9);_0x5d2ax2[_0xe4bc[1279]](0.5*_0x5d2ax5,0.05*_0x5d2ax9,0.3*_0x5d2ax5,0.05*_0x5d2ax9,0.25*_0x5d2ax5,0.25*_0x5d2ax9);_0x5d2ax2[_0xe4bc[268]]()};function mxRectangleShape(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){mxShape[_0xe4bc[239]](this);this[_0xe4bc[1562]]=_0x5d2ax2;this[_0xe4bc[1334]]=_0x5d2ax3;this[_0xe4bc[1336]]=_0x5d2ax4;this[_0xe4bc[1307]]=null!=_0x5d2ax5?_0x5d2ax5:1}mxUtils[_0xe4bc[1284]](mxRectangleShape,mxShape);mxRectangleShape[_0xe4bc[202]][_0xe4bc[1567]]=function(){return !this[_0xe4bc[1606]]&&!this[_0xe4bc[617]]&&0==this[_0xe4bc[603]]};mxRectangleShape[_0xe4bc[202]][_0xe4bc[1601]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){if(this[_0xe4bc[1606]]){var _0x5d2axa=mxUtils[_0xe4bc[433]](this[_0xe4bc[124]],mxConstants.STYLE_ARCSIZE,100*mxConstants[_0xe4bc[1557]])/100,_0x5d2axa=Math[_0xe4bc[243]](_0x5d2ax5*_0x5d2axa,_0x5d2ax9*_0x5d2axa);_0x5d2ax2[_0xe4bc[1320]](_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa,_0x5d2axa)}else {_0x5d2ax2[_0xe4bc[1319]](_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9)};_0x5d2ax2[_0xe4bc[1337]]()};mxRectangleShape[_0xe4bc[202]][_0xe4bc[1602]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){this[_0xe4bc[617]]&&this[_0xe4bc[1604]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,this[_0xe4bc[1603]](_0x5d2ax5+this[_0xe4bc[1307]],_0x5d2ax9+this[_0xe4bc[1307]]))};mxRectangleShape[_0xe4bc[202]][_0xe4bc[1575]]=function(){this[_0xe4bc[1626]](this[_0xe4bc[252]]);this[_0xe4bc[1627]](this[_0xe4bc[252]]);this[_0xe4bc[1628]](this[_0xe4bc[252]])};mxRectangleShape[_0xe4bc[202]][_0xe4bc[1626]]=function(_0x5d2ax2){var _0x5d2ax3=9<=document[_0xe4bc[5]]?0:Math[_0xe4bc[430]](this[_0xe4bc[1307]]*this[_0xe4bc[255]]);_0x5d2ax2[_0xe4bc[124]][_0xe4bc[1629]]=Math[_0xe4bc[160]](1,_0x5d2ax3)+_0xe4bc[168];_0x5d2ax2[_0xe4bc[124]][_0xe4bc[277]]=_0xe4bc[188];_0x5d2ax2[_0xe4bc[124]][_0xe4bc[361]]=Math[_0xe4bc[488]](this[_0xe4bc[1562]][_0xe4bc[235]]-_0x5d2ax3/2)+_0xe4bc[168];_0x5d2ax2[_0xe4bc[124]][_0xe4bc[125]]=Math[_0xe4bc[488]](this[_0xe4bc[1562]][_0xe4bc[236]]-_0x5d2ax3/2)+_0xe4bc[168];_0xe4bc[462]==document[_0xe4bc[135]]&&(_0x5d2ax3= -_0x5d2ax3);_0x5d2ax2[_0xe4bc[124]][_0xe4bc[117]]=Math[_0xe4bc[488]](Math[_0xe4bc[160]](0,this[_0xe4bc[1562]][_0xe4bc[117]]+_0x5d2ax3))+_0xe4bc[168];_0x5d2ax2[_0xe4bc[124]][_0xe4bc[119]]=Math[_0xe4bc[488]](Math[_0xe4bc[160]](0,this[_0xe4bc[1562]][_0xe4bc[119]]+_0x5d2ax3))+_0xe4bc[168]};mxRectangleShape[_0xe4bc[202]][_0xe4bc[1628]]=function(_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[1336]];null!=_0x5d2ax3&&_0x5d2ax3!=mxConstants[_0xe4bc[217]]?(_0x5d2ax2[_0xe4bc[124]][_0xe4bc[1630]]=_0x5d2ax3,this[_0xe4bc[1522]]?_0x5d2ax2[_0xe4bc[124]][_0xe4bc[465]]=_0xe4bc[648]:0<this[_0xe4bc[1307]]&&(_0x5d2ax2[_0xe4bc[124]][_0xe4bc[465]]=_0xe4bc[1631]),_0x5d2ax2[_0xe4bc[124]][_0xe4bc[1629]]=Math[_0xe4bc[160]](1,Math[_0xe4bc[430]](this[_0xe4bc[1307]]*this[_0xe4bc[255]]))+_0xe4bc[168]):_0x5d2ax2[_0xe4bc[124]][_0xe4bc[1629]]=_0xe4bc[946];_0x5d2ax3=this[_0xe4bc[1334]];null!=_0x5d2ax3&&_0x5d2ax3!=mxConstants[_0xe4bc[217]]?(_0x5d2ax2[_0xe4bc[124]][_0xe4bc[1028]]=_0x5d2ax3,_0x5d2ax2[_0xe4bc[124]][_0xe4bc[1617]]=_0xe4bc[130]):this[_0xe4bc[1229]]?_0x5d2ax2[_0xe4bc[124]][_0xe4bc[1028]]=_0xe4bc[1373]:8==document[_0xe4bc[5]]?mxUtils[_0xe4bc[1584]](_0x5d2ax2):this[_0xe4bc[1600]](_0x5d2ax2)};mxRectangleShape[_0xe4bc[202]][_0xe4bc[1627]]=function(_0x5d2ax2){var _0x5d2ax3=_0xe4bc[110];100>this[_0xe4bc[461]]&&(_0x5d2ax3+=_0xe4bc[459]+this[_0xe4bc[461]]+_0xe4bc[460]);this[_0xe4bc[1596]]&&(_0x5d2ax3+=_0xe4bc[1632]+Math[_0xe4bc[488]](mxConstants[_0xe4bc[1237]]*this[_0xe4bc[255]])+_0xe4bc[1633]+Math[_0xe4bc[488]](mxConstants[_0xe4bc[1238]]*this[_0xe4bc[255]])+_0xe4bc[1634]+mxConstants[_0xe4bc[1235]]+_0xe4bc[1635]);if(this[_0xe4bc[1299]]){var _0x5d2ax4=this[_0xe4bc[1334]],_0x5d2ax5=this[_0xe4bc[1299]],_0x5d2ax9=_0xe4bc[468],_0x5d2axa={east:0,south:1,west:2,north:3},_0x5d2ax12=null!=this[_0xe4bc[663]]?_0x5d2axa[this[_0xe4bc[663]]]:0;null!=this[_0xe4bc[607]]&&(_0x5d2ax12=mxUtils[_0xe4bc[1454]](_0x5d2ax12+_0x5d2axa[this[_0xe4bc[607]]]-1,4));1==_0x5d2ax12?(_0x5d2ax9=_0xe4bc[500],_0x5d2axa=_0x5d2ax4,_0x5d2ax4=_0x5d2ax5,_0x5d2ax5=_0x5d2axa):2==_0x5d2ax12?(_0x5d2axa=_0x5d2ax4,_0x5d2ax4=_0x5d2ax5,_0x5d2ax5=_0x5d2axa):3==_0x5d2ax12&&(_0x5d2ax9=_0xe4bc[500]);_0x5d2ax3+=_0xe4bc[1636]+_0x5d2ax4+_0xe4bc[1637]+_0x5d2ax5+_0xe4bc[1638]+_0x5d2ax9+_0xe4bc[1635]};_0x5d2ax2[_0xe4bc[124]][_0xe4bc[347]]=_0x5d2ax3};function mxEllipse(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){mxShape[_0xe4bc[239]](this);this[_0xe4bc[1562]]=_0x5d2ax2;this[_0xe4bc[1334]]=_0x5d2ax3;this[_0xe4bc[1336]]=_0x5d2ax4;this[_0xe4bc[1307]]=null!=_0x5d2ax5?_0x5d2ax5:1}mxUtils[_0xe4bc[1284]](mxEllipse,mxShape);mxEllipse[_0xe4bc[202]][_0xe4bc[1595]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){_0x5d2ax2[_0xe4bc[680]](_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9);_0x5d2ax2[_0xe4bc[1337]]()};function mxDoubleEllipse(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){mxShape[_0xe4bc[239]](this);this[_0xe4bc[1562]]=_0x5d2ax2;this[_0xe4bc[1334]]=_0x5d2ax3;this[_0xe4bc[1336]]=_0x5d2ax4;this[_0xe4bc[1307]]=null!=_0x5d2ax5?_0x5d2ax5:1}mxUtils[_0xe4bc[1284]](mxDoubleEllipse,mxShape);mxDoubleEllipse[_0xe4bc[202]][_0xe4bc[1460]]=10;mxDoubleEllipse[_0xe4bc[202]][_0xe4bc[1601]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){_0x5d2ax2[_0xe4bc[680]](_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9);_0x5d2ax2[_0xe4bc[1337]]()};mxDoubleEllipse[_0xe4bc[202]][_0xe4bc[1602]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){var _0x5d2axa=Math[_0xe4bc[243]](4,Math[_0xe4bc[243]](_0x5d2ax5/5,_0x5d2ax9/5));_0x5d2ax5-=2*_0x5d2axa;_0x5d2ax9-=2*_0x5d2axa;0<_0x5d2ax5&&0<_0x5d2ax9&&_0x5d2ax2[_0xe4bc[680]](_0x5d2ax3+_0x5d2axa,_0x5d2ax4+_0x5d2axa,_0x5d2ax5,_0x5d2ax9);_0x5d2ax2[_0xe4bc[1336]]()};function mxRhombus(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){mxShape[_0xe4bc[239]](this);this[_0xe4bc[1562]]=_0x5d2ax2;this[_0xe4bc[1334]]=_0x5d2ax3;this[_0xe4bc[1336]]=_0x5d2ax4;this[_0xe4bc[1307]]=null!=_0x5d2ax5?_0x5d2ax5:1}mxUtils[_0xe4bc[1284]](mxRhombus,mxShape);mxRhombus[_0xe4bc[202]][_0xe4bc[1595]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){var _0x5d2axa=_0x5d2ax5/2,_0x5d2ax12=_0x5d2ax9/2;_0x5d2ax2[_0xe4bc[1275]]();_0x5d2ax2[_0xe4bc[1276]](_0x5d2ax3+_0x5d2axa,_0x5d2ax4);_0x5d2ax2[_0xe4bc[1277]](_0x5d2ax3+_0x5d2ax5,_0x5d2ax4+_0x5d2ax12);_0x5d2ax2[_0xe4bc[1277]](_0x5d2ax3+_0x5d2axa,_0x5d2ax4+_0x5d2ax9);_0x5d2ax2[_0xe4bc[1277]](_0x5d2ax3,_0x5d2ax4+_0x5d2ax12);_0x5d2ax2[_0xe4bc[268]]();_0x5d2ax2[_0xe4bc[1337]]()};function mxPolyline(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){mxShape[_0xe4bc[239]](this);this[_0xe4bc[1525]]=_0x5d2ax2;this[_0xe4bc[1336]]=_0x5d2ax3;this[_0xe4bc[1307]]=null!=_0x5d2ax4?_0x5d2ax4:1}mxUtils[_0xe4bc[1284]](mxPolyline,mxShape);mxPolyline[_0xe4bc[202]][_0xe4bc[1614]]=function(){return 0};mxPolyline[_0xe4bc[202]][_0xe4bc[1594]]=function(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[1639]](_0x5d2ax2,_0x5d2ax3,this[_0xe4bc[1606]])};mxPolyline[_0xe4bc[202]][_0xe4bc[1639]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){var _0x5d2ax5=mxUtils[_0xe4bc[433]](this[_0xe4bc[124]],mxConstants.STYLE_ARCSIZE,mxConstants.LINE_ARCSIZE)/2,_0x5d2ax9=_0x5d2ax3[0],_0x5d2axa=_0x5d2ax3[_0x5d2ax3[_0xe4bc[67]]-1];_0x5d2ax2[_0xe4bc[1275]]();_0x5d2ax2[_0xe4bc[1276]](_0x5d2ax9[_0xe4bc[235]],_0x5d2ax9[_0xe4bc[236]]);for(var _0x5d2ax12=1;_0x5d2ax12<_0x5d2ax3[_0xe4bc[67]]-1;_0x5d2ax12++){var _0x5d2ax13=_0x5d2ax3[_0x5d2ax12],_0x5d2ax14=_0x5d2ax9[_0xe4bc[235]]-_0x5d2ax13[_0xe4bc[235]],_0x5d2ax9=_0x5d2ax9[_0xe4bc[236]]-_0x5d2ax13[_0xe4bc[236]];if(_0x5d2ax4&&_0x5d2ax12<_0x5d2ax3[_0xe4bc[67]]-1&&(0!=_0x5d2ax14||0!=_0x5d2ax9)){var _0x5d2ax15=Math[_0xe4bc[428]](_0x5d2ax14*_0x5d2ax14+_0x5d2ax9*_0x5d2ax9),_0x5d2ax14=_0x5d2ax14*Math[_0xe4bc[243]](_0x5d2ax5,_0x5d2ax15/2)/_0x5d2ax15,_0x5d2ax9=_0x5d2ax9*Math[_0xe4bc[243]](_0x5d2ax5,_0x5d2ax15/2)/_0x5d2ax15;_0x5d2ax2[_0xe4bc[1277]](_0x5d2ax13[_0xe4bc[235]]+_0x5d2ax14,_0x5d2ax13[_0xe4bc[236]]+_0x5d2ax9);_0x5d2ax9=_0x5d2ax3[_0x5d2ax12+1];_0x5d2ax14=_0x5d2ax9[_0xe4bc[235]]-_0x5d2ax13[_0xe4bc[235]];_0x5d2ax9=_0x5d2ax9[_0xe4bc[236]]-_0x5d2ax13[_0xe4bc[236]];_0x5d2ax15=Math[_0xe4bc[160]](1,Math[_0xe4bc[428]](_0x5d2ax14*_0x5d2ax14+_0x5d2ax9*_0x5d2ax9));_0x5d2ax14=_0x5d2ax14*Math[_0xe4bc[243]](_0x5d2ax5,_0x5d2ax15/2)/_0x5d2ax15;_0x5d2ax9=_0x5d2ax9*Math[_0xe4bc[243]](_0x5d2ax5,_0x5d2ax15/2)/_0x5d2ax15;_0x5d2ax14=_0x5d2ax13[_0xe4bc[235]]+_0x5d2ax14;_0x5d2ax9=_0x5d2ax13[_0xe4bc[236]]+_0x5d2ax9;_0x5d2ax2[_0xe4bc[1278]](_0x5d2ax13[_0xe4bc[235]],_0x5d2ax13[_0xe4bc[236]],_0x5d2ax14,_0x5d2ax9);_0x5d2ax13= new mxPoint(_0x5d2ax14,_0x5d2ax9)}else {_0x5d2ax2[_0xe4bc[1277]](_0x5d2ax13[_0xe4bc[235]],_0x5d2ax13[_0xe4bc[236]])};_0x5d2ax9=_0x5d2ax13};_0x5d2ax2[_0xe4bc[1277]](_0x5d2axa[_0xe4bc[235]],_0x5d2axa[_0xe4bc[236]]);_0x5d2ax2[_0xe4bc[1336]]()};function mxArrow(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa,_0x5d2ax12){mxShape[_0xe4bc[239]](this);this[_0xe4bc[1525]]=_0x5d2ax2;this[_0xe4bc[1334]]=_0x5d2ax3;this[_0xe4bc[1336]]=_0x5d2ax4;this[_0xe4bc[1307]]=null!=_0x5d2ax5?_0x5d2ax5:1;this[_0xe4bc[1640]]=null!=_0x5d2ax9?_0x5d2ax9:mxConstants[_0xe4bc[1641]];this[_0xe4bc[657]]=null!=_0x5d2axa?_0x5d2axa:mxConstants[_0xe4bc[1642]];this[_0xe4bc[643]]=null!=_0x5d2ax12?_0x5d2ax12:mxConstants[_0xe4bc[1643]]}mxUtils[_0xe4bc[1284]](mxArrow,mxShape);mxArrow[_0xe4bc[202]][_0xe4bc[1594]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=mxConstants[_0xe4bc[1642]],_0x5d2ax5=mxConstants[_0xe4bc[1641]],_0x5d2ax9=mxConstants[_0xe4bc[1643]],_0x5d2axa=_0x5d2ax3[0],_0x5d2ax12=_0x5d2ax3[_0x5d2ax3[_0xe4bc[67]]-1],_0x5d2ax13=_0x5d2ax12[_0xe4bc[235]]-_0x5d2axa[_0xe4bc[235]],_0x5d2ax14=_0x5d2ax12[_0xe4bc[236]]-_0x5d2axa[_0xe4bc[236]],_0x5d2ax15=Math[_0xe4bc[428]](_0x5d2ax13*_0x5d2ax13+_0x5d2ax14*_0x5d2ax14),_0x5d2ax16=_0x5d2ax15-2*_0x5d2ax4-_0x5d2ax9,_0x5d2ax13=_0x5d2ax13/_0x5d2ax15,_0x5d2ax14=_0x5d2ax14/_0x5d2ax15,_0x5d2ax15=_0x5d2ax5*_0x5d2ax14/3,_0x5d2ax5=-_0x5d2ax5*_0x5d2ax13/3,_0x5d2ax9=_0x5d2axa[_0xe4bc[235]]-_0x5d2ax15/2+_0x5d2ax4*_0x5d2ax13,_0x5d2axa=_0x5d2axa[_0xe4bc[236]]-_0x5d2ax5/2+_0x5d2ax4*_0x5d2ax14,_0x5d2ax17=_0x5d2ax9+_0x5d2ax15,_0x5d2ax18=_0x5d2axa+_0x5d2ax5,_0x5d2ax19=_0x5d2ax17+_0x5d2ax16*_0x5d2ax13,_0x5d2ax16=_0x5d2ax18+_0x5d2ax16*_0x5d2ax14,_0x5d2ax1a=_0x5d2ax19+_0x5d2ax15,_0x5d2ax1b=_0x5d2ax16+_0x5d2ax5,_0x5d2ax1c=_0x5d2ax1a-3*_0x5d2ax15,_0x5d2ax1d=_0x5d2ax1b-3*_0x5d2ax5;_0x5d2ax2[_0xe4bc[1275]]();_0x5d2ax2[_0xe4bc[1276]](_0x5d2ax9,_0x5d2axa);_0x5d2ax2[_0xe4bc[1277]](_0x5d2ax17,_0x5d2ax18);_0x5d2ax2[_0xe4bc[1277]](_0x5d2ax19,_0x5d2ax16);_0x5d2ax2[_0xe4bc[1277]](_0x5d2ax1a,_0x5d2ax1b);_0x5d2ax2[_0xe4bc[1277]](_0x5d2ax12[_0xe4bc[235]]-_0x5d2ax4*_0x5d2ax13,_0x5d2ax12[_0xe4bc[236]]-_0x5d2ax4*_0x5d2ax14);_0x5d2ax2[_0xe4bc[1277]](_0x5d2ax1c,_0x5d2ax1d);_0x5d2ax2[_0xe4bc[1277]](_0x5d2ax1c+_0x5d2ax15,_0x5d2ax1d+_0x5d2ax5);_0x5d2ax2[_0xe4bc[268]]();_0x5d2ax2[_0xe4bc[1337]]()};function mxText(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa,_0x5d2ax12,_0x5d2ax13,_0x5d2ax14,_0x5d2ax15,_0x5d2ax16,_0x5d2ax17,_0x5d2ax18,_0x5d2ax19,_0x5d2ax1a,_0x5d2ax1b,_0x5d2ax1c,_0x5d2ax1d,_0x5d2ax1e,_0x5d2ax1f){mxShape[_0xe4bc[239]](this);this[_0xe4bc[131]]=_0x5d2ax2;this[_0xe4bc[1562]]=_0x5d2ax3;this[_0xe4bc[352]]=null!=_0x5d2ax9?_0x5d2ax9:_0xe4bc[586];this[_0xe4bc[611]]=null!=_0x5d2ax4?_0x5d2ax4:_0xe4bc[110];this[_0xe4bc[552]]=null!=_0x5d2ax5?_0x5d2ax5:_0xe4bc[110];this[_0xe4bc[1288]]=null!=_0x5d2axa?_0x5d2axa:mxConstants[_0xe4bc[484]];this[_0xe4bc[803]]=null!=_0x5d2ax12?_0x5d2ax12:mxConstants[_0xe4bc[483]];this[_0xe4bc[666]]=null!=_0x5d2ax13?_0x5d2ax13:mxConstants[_0xe4bc[1644]];this[_0xe4bc[657]]=parseInt(_0x5d2ax14||2);this[_0xe4bc[658]]=this[_0xe4bc[657]]+parseInt(_0x5d2ax15||0);this[_0xe4bc[661]]=this[_0xe4bc[657]]+parseInt(_0x5d2ax16||0);this[_0xe4bc[660]]=this[_0xe4bc[657]]+parseInt(_0x5d2ax17||0);this[_0xe4bc[659]]=this[_0xe4bc[657]]+parseInt(_0x5d2ax18||0);this[_0xe4bc[662]]=null!=_0x5d2ax19?_0x5d2ax19:!0;this[_0xe4bc[1537]]=_0x5d2ax1a;this[_0xe4bc[467]]=_0x5d2ax1b;this[_0xe4bc[1333]]=null!=_0x5d2ax1c?_0x5d2ax1c:!1;this[_0xe4bc[1645]]=null!=_0x5d2ax1d?_0x5d2ax1d:!1;this[_0xe4bc[277]]=null!=_0x5d2ax1e?_0x5d2ax1e:_0xe4bc[189];this[_0xe4bc[629]]=null!=_0x5d2ax1f?_0x5d2ax1f:0;this[_0xe4bc[603]]=0}mxUtils[_0xe4bc[1284]](mxText,mxShape);mxText[_0xe4bc[202]][_0xe4bc[1646]]=0;mxText[_0xe4bc[202]][_0xe4bc[1647]]=0;mxText[_0xe4bc[202]][_0xe4bc[1648]]=0;mxText[_0xe4bc[202]][_0xe4bc[1649]]=0;mxText[_0xe4bc[202]][_0xe4bc[1650]]= !0;mxText[_0xe4bc[202]][_0xe4bc[1616]]= -90;mxText[_0xe4bc[202]][_0xe4bc[1651]]= !0;mxText[_0xe4bc[202]][_0xe4bc[1652]]= !1;mxText[_0xe4bc[202]][_0xe4bc[1566]]=function(){return !1};mxText[_0xe4bc[202]][_0xe4bc[1567]]=function(){return 8!=document[_0xe4bc[5]]};mxText[_0xe4bc[202]][_0xe4bc[1568]]=function(){return 0};mxText[_0xe4bc[202]][_0xe4bc[1574]]=function(){return null!=this[_0xe4bc[1562]]&&!isNaN(this[_0xe4bc[1562]][_0xe4bc[235]])&&!isNaN(this[_0xe4bc[1562]][_0xe4bc[236]])&&!isNaN(this[_0xe4bc[1562]][_0xe4bc[117]])&&!isNaN(this[_0xe4bc[1562]][_0xe4bc[119]])};mxText[_0xe4bc[202]][_0xe4bc[1577]]=function(){var _0x5d2ax2=this[_0xe4bc[252]];8==document[_0xe4bc[5]]&&null!=_0x5d2ax2[_0xe4bc[285]]&&(_0x5d2ax2=_0x5d2ax2[_0xe4bc[285]],null!=_0x5d2ax2[_0xe4bc[285]]&&(_0x5d2ax2=_0x5d2ax2[_0xe4bc[285]]));this[_0xe4bc[1563]]=this[_0xe4bc[1562]][_0xe4bc[238]]();var _0x5d2ax3=this[_0xe4bc[1615]]();if(!this[_0xe4bc[1652]]&&null!=_0x5d2ax2&&_0xe4bc[1334]!=this[_0xe4bc[277]]&&(!this[_0xe4bc[1645]]||!this[_0xe4bc[1651]])){var _0x5d2ax4=null,_0x5d2ax5=null;if(null!=_0x5d2ax2[_0xe4bc[538]]){if(null!=_0x5d2ax2[_0xe4bc[285]]&&null!=_0x5d2ax2[_0xe4bc[285]][_0xe4bc[285]]&&_0xe4bc[1435]==_0x5d2ax2[_0xe4bc[285]][_0xe4bc[285]][_0xe4bc[301]]){_0x5d2ax2=_0x5d2ax2[_0xe4bc[285]][_0xe4bc[285]],_0x5d2ax4=this[_0xe4bc[1333]]?this[_0xe4bc[1562]][_0xe4bc[117]]:parseInt(_0x5d2ax2[_0xe4bc[284]](_0xe4bc[117]))*this[_0xe4bc[255]],_0x5d2ax5=parseInt(_0x5d2ax2[_0xe4bc[284]](_0xe4bc[119]))*this[_0xe4bc[255]]}else {_0x5d2ax3=_0x5d2ax2[_0xe4bc[1451]]();if(0==_0x5d2ax3[_0xe4bc[117]]&&0==_0x5d2ax3[_0xe4bc[119]]){return};this[_0xe4bc[1563]]= new mxRectangle(_0x5d2ax3[_0xe4bc[235]],_0x5d2ax3[_0xe4bc[236]],_0x5d2ax3[_0xe4bc[117]],_0x5d2ax3[_0xe4bc[119]]);_0x5d2ax3=0}}else {_0x5d2ax5=this[_0xe4bc[724]][_0xe4bc[441]][_0xe4bc[1653]],null!=this[_0xe4bc[359]]&&null!=this[_0xe4bc[167]]?(_0x5d2ax4=this[_0xe4bc[1333]]?this[_0xe4bc[1562]][_0xe4bc[117]]:this[_0xe4bc[359]]*this[_0xe4bc[255]],_0x5d2ax5=this[_0xe4bc[167]]*this[_0xe4bc[255]]):null!=_0x5d2ax5?(this[_0xe4bc[1441]](_0x5d2ax5),this[_0xe4bc[1654]](_0x5d2ax5),mxUtils[_0xe4bc[1331]](this[_0xe4bc[131]])?_0x5d2ax5[_0xe4bc[339]]=this[_0xe4bc[131]][_0xe4bc[342]]:(_0x5d2ax4=this[_0xe4bc[1650]]?this[_0xe4bc[131]][_0xe4bc[230]](/\n/g,_0xe4bc[1453]):this[_0xe4bc[131]],_0x5d2ax5[_0xe4bc[339]]=_0x5d2ax4),_0x5d2ax4=this[_0xe4bc[1333]]?this[_0xe4bc[1562]][_0xe4bc[117]]:_0x5d2ax5[_0xe4bc[359]]*this[_0xe4bc[255]],_0x5d2ax5=_0x5d2ax5[_0xe4bc[167]]*this[_0xe4bc[255]]):(_0x5d2ax4=this[_0xe4bc[1333]]?this[_0xe4bc[1562]][_0xe4bc[117]]:_0x5d2ax2[_0xe4bc[359]]*this[_0xe4bc[255]],_0x5d2ax5=_0x5d2ax2[_0xe4bc[167]]*this[_0xe4bc[255]])};null!=_0x5d2ax4&&null!=_0x5d2ax5&&(this[_0xe4bc[1563]]= new mxRectangle(this[_0xe4bc[1562]][_0xe4bc[235]]+this[_0xe4bc[1655]][_0xe4bc[235]]*_0x5d2ax4,this[_0xe4bc[1562]][_0xe4bc[236]]+this[_0xe4bc[1655]][_0xe4bc[236]]*_0x5d2ax5,_0x5d2ax4,_0x5d2ax5))}else {this[_0xe4bc[1563]][_0xe4bc[235]]+=this[_0xe4bc[1655]][_0xe4bc[235]]*this[_0xe4bc[1563]][_0xe4bc[117]],this[_0xe4bc[1563]][_0xe4bc[236]]+=this[_0xe4bc[1655]][_0xe4bc[236]]*this[_0xe4bc[1563]][_0xe4bc[119]]};null!=this[_0xe4bc[1563]]&&(0!=_0x5d2ax3&&(_0x5d2ax3=mxUtils[_0xe4bc[1613]](this[_0xe4bc[1563]],_0x5d2ax3),this[_0xe4bc[1563]][_0xe4bc[235]]=_0x5d2ax3[_0xe4bc[235]],this[_0xe4bc[1563]][_0xe4bc[236]]=_0x5d2ax3[_0xe4bc[236]],mxClient[_0xe4bc[496]]||(this[_0xe4bc[1563]][_0xe4bc[117]]=_0x5d2ax3[_0xe4bc[117]],this[_0xe4bc[1563]][_0xe4bc[119]]=_0x5d2ax3[_0xe4bc[119]])),this[_0xe4bc[1563]][_0xe4bc[235]]=Math[_0xe4bc[519]](this[_0xe4bc[1563]][_0xe4bc[235]]),this[_0xe4bc[1563]][_0xe4bc[236]]=Math[_0xe4bc[519]](this[_0xe4bc[1563]][_0xe4bc[236]]),this[_0xe4bc[1563]][_0xe4bc[117]]=Math[_0xe4bc[430]](this[_0xe4bc[1563]][_0xe4bc[117]]),this[_0xe4bc[1563]][_0xe4bc[119]]=Math[_0xe4bc[430]](this[_0xe4bc[1563]][_0xe4bc[119]]))};mxText[_0xe4bc[202]][_0xe4bc[1598]]=function(){return 0};mxText[_0xe4bc[202]][_0xe4bc[1615]]=function(){return null!=this[_0xe4bc[724]]&&null!=this[_0xe4bc[724]][_0xe4bc[253]]?this[_0xe4bc[724]][_0xe4bc[253]][_0xe4bc[1615]]():0};mxText[_0xe4bc[202]][_0xe4bc[1590]]=function(){return !this[_0xe4bc[662]]&&null!=this[_0xe4bc[724]]&&this[_0xe4bc[724]][_0xe4bc[441]][_0xe4bc[1179]][_0xe4bc[251]][_0xe4bc[1193]](this[_0xe4bc[724]][_0xe4bc[246]])};mxText[_0xe4bc[202]][_0xe4bc[1592]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){mxShape[_0xe4bc[202]][_0xe4bc[1592]][_0xe4bc[183]](this,arguments);_0x5d2ax2[_0xe4bc[1259]](this[_0xe4bc[352]]);_0x5d2ax2[_0xe4bc[1260]](this[_0xe4bc[1537]]);_0x5d2ax2[_0xe4bc[1262]](this[_0xe4bc[467]]);_0x5d2ax2[_0xe4bc[1265]](this[_0xe4bc[1288]]);_0x5d2ax2[_0xe4bc[1264]](this[_0xe4bc[803]]);_0x5d2ax2[_0xe4bc[1266]](this[_0xe4bc[666]])};mxText[_0xe4bc[202]][_0xe4bc[1586]]=function(){this[_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[361]]=Math[_0xe4bc[488]](this[_0xe4bc[1562]][_0xe4bc[235]])+_0xe4bc[168];this[_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[125]]=Math[_0xe4bc[488]](this[_0xe4bc[1562]][_0xe4bc[236]])+_0xe4bc[168];this[_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[117]]=_0xe4bc[942];this[_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[119]]=_0xe4bc[942];this[_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[277]]=_0xe4bc[189]};mxText[_0xe4bc[202]][_0xe4bc[1209]]=function(_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[255]],_0x5d2ax4=this[_0xe4bc[1562]][_0xe4bc[235]]/_0x5d2ax3,_0x5d2ax5=this[_0xe4bc[1562]][_0xe4bc[236]]/_0x5d2ax3,_0x5d2ax9=this[_0xe4bc[1562]][_0xe4bc[117]]/_0x5d2ax3,_0x5d2ax3=this[_0xe4bc[1562]][_0xe4bc[119]]/_0x5d2ax3;this[_0xe4bc[1591]](_0x5d2ax2,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2ax3);this[_0xe4bc[1592]](_0x5d2ax2,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2ax3);var _0x5d2axa=mxUtils[_0xe4bc[1331]](this[_0xe4bc[131]])||this[_0xe4bc[507]]==mxConstants[_0xe4bc[1656]],_0x5d2ax12=_0x5d2axa||_0x5d2ax2 instanceof mxVmlCanvas2D?_0xe4bc[1428]:_0xe4bc[110],_0x5d2ax13=this[_0xe4bc[131]];!_0x5d2axa&&_0xe4bc[1428]==_0x5d2ax12&&(_0x5d2ax13=mxUtils[_0xe4bc[321]](_0x5d2ax13,!1));_0x5d2ax13=!mxUtils[_0xe4bc[1331]](this[_0xe4bc[131]])&&this[_0xe4bc[1650]]&&_0xe4bc[1428]==_0x5d2ax12?_0x5d2ax13[_0xe4bc[230]](/\n/g,_0xe4bc[1453]):_0x5d2ax13;_0x5d2ax2[_0xe4bc[963]](_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2ax3,_0x5d2ax13,this[_0xe4bc[611]],this[_0xe4bc[552]],this[_0xe4bc[1333]],_0x5d2ax12,_0xe4bc[1334]==this[_0xe4bc[277]],this[_0xe4bc[1645]],this[_0xe4bc[1615]]())};mxText[_0xe4bc[202]][_0xe4bc[1575]]=function(){var _0x5d2ax2=this[_0xe4bc[252]][_0xe4bc[124]];_0x5d2ax2[_0xe4bc[461]]=1>this[_0xe4bc[461]]?this[_0xe4bc[461]]:_0xe4bc[110];_0x5d2ax2[_0xe4bc[277]]=_0xe4bc[110];_0x5d2ax2[_0xe4bc[117]]=_0xe4bc[110];_0x5d2ax2[_0xe4bc[119]]=_0xe4bc[110];this[_0xe4bc[1441]](this[_0xe4bc[252]]);this[_0xe4bc[1654]](this[_0xe4bc[252]]);this[_0xe4bc[1657]]();this[_0xe4bc[167]]=this[_0xe4bc[359]]=null;null!=mxClient[_0xe4bc[73]]?this[_0xe4bc[1658]]():this[_0xe4bc[1659]]()};mxText[_0xe4bc[202]][_0xe4bc[1658]]=function(){var _0x5d2ax2=this[_0xe4bc[1615]](),_0x5d2ax3=this[_0xe4bc[252]][_0xe4bc[124]],_0x5d2ax4=this[_0xe4bc[1655]][_0xe4bc[235]],_0x5d2ax5=this[_0xe4bc[1655]][_0xe4bc[236]];0!=_0x5d2ax2?(_0x5d2ax3[mxClient[_0xe4bc[73]]+_0xe4bc[1660]]=100*-_0x5d2ax4+_0xe4bc[1661]+100*-_0x5d2ax5+_0xe4bc[229],_0x5d2ax3[mxClient[_0xe4bc[73]]+_0xe4bc[1662]]=_0xe4bc[536]+100*_0x5d2ax4+_0xe4bc[1663]+100*_0x5d2ax5+_0xe4bc[1664]+this[_0xe4bc[255]]+_0xe4bc[1665]+_0x5d2ax2+_0xe4bc[1666]):(_0x5d2ax3[mxClient[_0xe4bc[73]]+_0xe4bc[1660]]=_0xe4bc[1667],_0x5d2ax3[mxClient[_0xe4bc[73]]+_0xe4bc[1662]]=_0xe4bc[1402]+this[_0xe4bc[255]]+_0xe4bc[1393]+100*_0x5d2ax4+_0xe4bc[1663]+100*_0x5d2ax5+_0xe4bc[1668]);_0x5d2ax3[_0xe4bc[361]]=Math[_0xe4bc[488]](this[_0xe4bc[1562]][_0xe4bc[235]])+_0xe4bc[168];_0x5d2ax3[_0xe4bc[125]]=Math[_0xe4bc[488]](this[_0xe4bc[1562]][_0xe4bc[236]])+_0xe4bc[168]};mxText[_0xe4bc[202]][_0xe4bc[1659]]=function(){var _0x5d2ax2=this[_0xe4bc[252]][_0xe4bc[124]],_0x5d2ax3=this[_0xe4bc[1655]][_0xe4bc[235]],_0x5d2ax4=this[_0xe4bc[1655]][_0xe4bc[236]],_0x5d2ax5=this[_0xe4bc[255]];_0x5d2ax2[_0xe4bc[347]]=_0xe4bc[110];var _0x5d2ax9=0,_0x5d2axa=0,_0x5d2ax12=null!=this[_0xe4bc[724]]?this[_0xe4bc[724]][_0xe4bc[441]][_0xe4bc[1653]]:null;if(null!=_0x5d2ax12){_0x5d2ax12[_0xe4bc[124]][_0xe4bc[277]]=_0xe4bc[110];_0x5d2ax12[_0xe4bc[124]][_0xe4bc[119]]=_0xe4bc[110];_0x5d2ax12[_0xe4bc[124]][_0xe4bc[117]]=_0xe4bc[110];this[_0xe4bc[1441]](_0x5d2ax12);this[_0xe4bc[1654]](_0x5d2ax12);if(mxUtils[_0xe4bc[1331]](this[_0xe4bc[131]])){_0x5d2ax12[_0xe4bc[339]]=this[_0xe4bc[131]][_0xe4bc[342]]}else {var _0x5d2ax13=this[_0xe4bc[131]];this[_0xe4bc[507]]!=mxConstants[_0xe4bc[1656]]&&(_0x5d2ax13=mxUtils[_0xe4bc[321]](_0x5d2ax13,!1));_0x5d2ax13=this[_0xe4bc[1650]]?_0x5d2ax13[_0xe4bc[230]](/\n/g,_0xe4bc[1453]):_0x5d2ax13;_0x5d2ax12[_0xe4bc[339]]=_0x5d2ax13};_0x5d2ax9=_0x5d2ax12[_0xe4bc[359]]+2;_0x5d2axa=_0x5d2ax12[_0xe4bc[167]]+2}else {_0x5d2ax9=this[_0xe4bc[252]][_0xe4bc[359]],_0x5d2axa=this[_0xe4bc[252]][_0xe4bc[167]]+1};this[_0xe4bc[359]]=_0x5d2ax9;this[_0xe4bc[167]]=_0x5d2axa;_0x5d2ax12=this[_0xe4bc[1562]][_0xe4bc[117]]/_0x5d2ax5;_0x5d2ax13=this[_0xe4bc[1562]][_0xe4bc[119]]/_0x5d2ax5;mxClient[_0xe4bc[496]]&&(this[_0xe4bc[1645]]||_0xe4bc[1334]==this[_0xe4bc[277]])&&0<_0x5d2ax13?(_0x5d2ax13=Math[_0xe4bc[243]](_0x5d2ax13,_0x5d2axa),_0x5d2ax2[_0xe4bc[119]]=Math[_0xe4bc[488]](_0x5d2ax13+1)+_0xe4bc[168]):_0x5d2ax13=_0x5d2axa;_0xe4bc[1334]!=this[_0xe4bc[277]]&&(mxClient[_0xe4bc[496]]&&(this[_0xe4bc[1645]]||this[_0xe4bc[1333]])&&0<_0x5d2ax12?(_0x5d2ax12=Math[_0xe4bc[243]](_0x5d2ax12,_0x5d2ax9),_0x5d2ax2[_0xe4bc[117]]=Math[_0xe4bc[488]](_0x5d2ax12)+_0xe4bc[168]):_0x5d2ax12=_0x5d2ax9);var _0x5d2ax13=_0x5d2ax13*_0x5d2ax5,_0x5d2ax12=_0x5d2ax12*_0x5d2ax5,_0x5d2ax9=this[_0xe4bc[1615]]()*(Math[_0xe4bc[424]]/180),_0x5d2axa=parseFloat(parseFloat(Math[_0xe4bc[426]](_0x5d2ax9))[_0xe4bc[1293]](8)),_0x5d2ax14=parseFloat(parseFloat(Math[_0xe4bc[427]](-_0x5d2ax9))[_0xe4bc[1293]](8)),_0x5d2ax9=_0x5d2ax9%(2*Math[_0xe4bc[424]]);0>_0x5d2ax9&&(_0x5d2ax9+=2*Math[_0xe4bc[424]]);_0x5d2ax9%=Math[_0xe4bc[424]];_0x5d2ax9>Math[_0xe4bc[424]]/2&&(_0x5d2ax9=Math[_0xe4bc[424]]-_0x5d2ax9);var _0x5d2ax15=Math[_0xe4bc[426]](_0x5d2ax9),_0x5d2ax16=Math[_0xe4bc[427]](-_0x5d2ax9),_0x5d2ax3=_0x5d2ax12* -(_0x5d2ax3+0.5),_0x5d2ax4=_0x5d2ax13* -(_0x5d2ax4+0.5),_0x5d2ax17=(_0x5d2ax13-_0x5d2ax13*_0x5d2ax15+_0x5d2ax12*_0x5d2ax16)/2+_0x5d2ax14*_0x5d2ax3-_0x5d2axa*_0x5d2ax4;0!=_0x5d2ax9&&(_0x5d2ax2[_0xe4bc[347]]=_0xe4bc[1505]+_0x5d2axa+_0xe4bc[1506]+_0x5d2ax14+_0xe4bc[1507]+-_0x5d2ax14+_0xe4bc[1508]+_0x5d2axa+_0xe4bc[1509]);_0x5d2ax2[_0xe4bc[499]]=_0x5d2ax5;_0x5d2ax2[_0xe4bc[361]]=Math[_0xe4bc[488]](this[_0xe4bc[1562]][_0xe4bc[235]]+((_0x5d2ax12-_0x5d2ax12*_0x5d2ax15+_0x5d2ax13*_0x5d2ax16)/2-_0x5d2axa*_0x5d2ax3-_0x5d2ax14*_0x5d2ax4)-_0x5d2ax12/2)+_0xe4bc[168];_0x5d2ax2[_0xe4bc[125]]=Math[_0xe4bc[488]](this[_0xe4bc[1562]][_0xe4bc[236]]+_0x5d2ax17-_0x5d2ax13/2)+_0xe4bc[168]};mxText[_0xe4bc[202]][_0xe4bc[1657]]=function(){if(mxUtils[_0xe4bc[1331]](this[_0xe4bc[131]])){this[_0xe4bc[252]][_0xe4bc[339]]=_0xe4bc[110],this[_0xe4bc[252]][_0xe4bc[62]](this[_0xe4bc[131]])}else {var _0x5d2ax2=this[_0xe4bc[131]];this[_0xe4bc[507]]!=mxConstants[_0xe4bc[1656]]&&(_0x5d2ax2=mxUtils[_0xe4bc[321]](_0x5d2ax2,!1));var _0x5d2ax2=this[_0xe4bc[1650]]?_0x5d2ax2[_0xe4bc[230]](/\n/g,_0xe4bc[1453]):_0x5d2ax2,_0x5d2ax3=null!=this[_0xe4bc[1537]]&&this[_0xe4bc[1537]]!=mxConstants[_0xe4bc[217]]?this[_0xe4bc[1537]]:null,_0x5d2ax4=null!=this[_0xe4bc[467]]&&this[_0xe4bc[467]]!=mxConstants[_0xe4bc[217]]?this[_0xe4bc[467]]:null;if(null!=_0x5d2ax3||null!=_0x5d2ax4){if(_0xe4bc[1334]==this[_0xe4bc[277]]){null!=_0x5d2ax3&&(this[_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[1028]]=_0x5d2ax3),null!=_0x5d2ax4&&(this[_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[467]]=_0xe4bc[1669]+_0x5d2ax4)}else {var _0x5d2ax5=_0xe4bc[110];null!=_0x5d2ax3&&(_0x5d2ax5+=_0xe4bc[1418]+_0x5d2ax3+_0xe4bc[471]);null!=_0x5d2ax4&&(_0x5d2ax5+=_0xe4bc[1419]+_0x5d2ax4+_0xe4bc[471]);_0x5d2ax2=_0xe4bc[1670]+_0x5d2ax5+_0xe4bc[1671]+this[_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[489]]+_0xe4bc[1423]+_0x5d2ax2+_0xe4bc[1424];this[_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[489]]=_0xe4bc[110]}};this[_0xe4bc[252]][_0xe4bc[339]]=_0x5d2ax2}};mxText[_0xe4bc[202]][_0xe4bc[1441]]=function(_0x5d2ax2){_0x5d2ax2=_0x5d2ax2[_0xe4bc[124]];_0x5d2ax2[_0xe4bc[489]]=Math[_0xe4bc[488]](this[_0xe4bc[803]]*mxConstants[_0xe4bc[490]])+_0xe4bc[168];_0x5d2ax2[_0xe4bc[487]]=Math[_0xe4bc[488]](this[_0xe4bc[803]])+_0xe4bc[168];_0x5d2ax2[_0xe4bc[486]]=this[_0xe4bc[1288]];_0x5d2ax2[_0xe4bc[123]]=_0xe4bc[125];_0x5d2ax2[_0xe4bc[352]]=this[_0xe4bc[352]];_0x5d2ax2[_0xe4bc[1452]]=(this[_0xe4bc[666]]&mxConstants[_0xe4bc[1410]])==mxConstants[_0xe4bc[1410]]?_0xe4bc[1447]:_0xe4bc[110];_0x5d2ax2[_0xe4bc[666]]=(this[_0xe4bc[666]]&mxConstants[_0xe4bc[1412]])==mxConstants[_0xe4bc[1412]]?_0xe4bc[1449]:_0xe4bc[110];_0x5d2ax2[_0xe4bc[1498]]=(this[_0xe4bc[666]]&mxConstants[_0xe4bc[1414]])==mxConstants[_0xe4bc[1414]]?_0xe4bc[355]:_0xe4bc[110];_0x5d2ax2[_0xe4bc[1165]]=this[_0xe4bc[611]]==mxConstants[_0xe4bc[479]]?_0xe4bc[698]:this[_0xe4bc[611]]==mxConstants[_0xe4bc[480]]?_0xe4bc[699]:_0xe4bc[361]};mxText[_0xe4bc[202]][_0xe4bc[1654]]=function(_0x5d2ax2){var _0x5d2ax3=Math[_0xe4bc[488]](this[_0xe4bc[1562]][_0xe4bc[117]]/this[_0xe4bc[255]]),_0x5d2ax4=Math[_0xe4bc[488]](this[_0xe4bc[1562]][_0xe4bc[119]]/this[_0xe4bc[255]]);_0x5d2ax2=_0x5d2ax2[_0xe4bc[124]];this[_0xe4bc[1645]]?(_0x5d2ax2[_0xe4bc[277]]=_0xe4bc[188],0<_0x5d2ax4&&(_0x5d2ax2[_0xe4bc[1503]]=_0x5d2ax4+_0xe4bc[168]),0<_0x5d2ax3&&(_0x5d2ax2[_0xe4bc[117]]=_0x5d2ax3+_0xe4bc[168])):_0xe4bc[1334]==this[_0xe4bc[277]]&&(_0x5d2ax2[_0xe4bc[117]]=_0x5d2ax3+_0xe4bc[168],0<_0x5d2ax4&&(_0x5d2ax2[_0xe4bc[1503]]=_0x5d2ax4+_0xe4bc[168]));this[_0xe4bc[1333]]?(!this[_0xe4bc[1645]]&&0<_0x5d2ax3&&(_0x5d2ax2[_0xe4bc[117]]=_0x5d2ax3+_0xe4bc[168]),_0x5d2ax2[_0xe4bc[493]]=_0xe4bc[1502]):_0x5d2ax2[_0xe4bc[493]]=_0xe4bc[494]};mxText[_0xe4bc[202]][_0xe4bc[1672]]=function(){this[_0xe4bc[1655]]=mxUtils[_0xe4bc[1501]](this[_0xe4bc[611]],this[_0xe4bc[552]])};mxText[_0xe4bc[202]][_0xe4bc[1673]]=function(){var _0x5d2ax2=0,_0x5d2ax3=0,_0x5d2ax2=this[_0xe4bc[611]]==mxConstants[_0xe4bc[479]]?(this[_0xe4bc[659]]-this[_0xe4bc[661]])/2:this[_0xe4bc[611]]==mxConstants[_0xe4bc[480]]?-this[_0xe4bc[661]]-this[_0xe4bc[1649]]:this[_0xe4bc[659]]+this[_0xe4bc[1648]],_0x5d2ax3=this[_0xe4bc[552]]==mxConstants[_0xe4bc[481]]?(this[_0xe4bc[658]]-this[_0xe4bc[660]])/2:this[_0xe4bc[552]]==mxConstants[_0xe4bc[482]]?-this[_0xe4bc[660]]-this[_0xe4bc[1647]]:this[_0xe4bc[658]]+this[_0xe4bc[1646]];return  new mxPoint(_0x5d2ax2,_0x5d2ax3)};function mxTriangle(){mxActor[_0xe4bc[239]](this)}mxUtils[_0xe4bc[1284]](mxTriangle,mxActor);mxTriangle[_0xe4bc[202]][_0xe4bc[1625]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){_0x5d2ax2[_0xe4bc[1276]](0,0);_0x5d2ax2[_0xe4bc[1277]](_0x5d2ax5,0.5*_0x5d2ax9);_0x5d2ax2[_0xe4bc[1277]](0,_0x5d2ax9);_0x5d2ax2[_0xe4bc[268]]()};function mxHexagon(){mxActor[_0xe4bc[239]](this)}mxUtils[_0xe4bc[1284]](mxHexagon,mxActor);mxHexagon[_0xe4bc[202]][_0xe4bc[1625]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){_0x5d2ax2[_0xe4bc[1276]](0.25*_0x5d2ax5,0);_0x5d2ax2[_0xe4bc[1277]](0.75*_0x5d2ax5,0);_0x5d2ax2[_0xe4bc[1277]](_0x5d2ax5,0.5*_0x5d2ax9);_0x5d2ax2[_0xe4bc[1277]](0.75*_0x5d2ax5,_0x5d2ax9);_0x5d2ax2[_0xe4bc[1277]](0.25*_0x5d2ax5,_0x5d2ax9);_0x5d2ax2[_0xe4bc[1277]](0,0.5*_0x5d2ax9);_0x5d2ax2[_0xe4bc[268]]()};function mxLine(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){mxShape[_0xe4bc[239]](this);this[_0xe4bc[1562]]=_0x5d2ax2;this[_0xe4bc[1336]]=_0x5d2ax3;this[_0xe4bc[1307]]=null!=_0x5d2ax4?_0x5d2ax4:1}mxUtils[_0xe4bc[1284]](mxLine,mxShape);mxLine[_0xe4bc[202]][_0xe4bc[1595]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){_0x5d2ax4+=_0x5d2ax9/2;_0x5d2ax2[_0xe4bc[1275]]();_0x5d2ax2[_0xe4bc[1276]](_0x5d2ax3,_0x5d2ax4);_0x5d2ax2[_0xe4bc[1277]](_0x5d2ax3+_0x5d2ax5,_0x5d2ax4);_0x5d2ax2[_0xe4bc[1336]]()};function mxImageShape(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){mxShape[_0xe4bc[239]](this);this[_0xe4bc[1562]]=_0x5d2ax2;this[_0xe4bc[618]]=_0x5d2ax3;this[_0xe4bc[1334]]=_0x5d2ax4;this[_0xe4bc[1336]]=_0x5d2ax5;this[_0xe4bc[1307]]=null!=_0x5d2ax9?_0x5d2ax9:1;this[_0xe4bc[639]]= !1}mxUtils[_0xe4bc[1284]](mxImageShape,mxRectangleShape);mxImageShape[_0xe4bc[202]][_0xe4bc[1674]]= !0;mxImageShape[_0xe4bc[202]][_0xe4bc[1568]]=function(){return !mxClient[_0xe4bc[80]]?0.5:0};mxImageShape[_0xe4bc[202]][_0xe4bc[183]]=function(_0x5d2ax2){mxShape[_0xe4bc[202]][_0xe4bc[183]][_0xe4bc[183]](this,arguments);this[_0xe4bc[1299]]=this[_0xe4bc[1336]]=this[_0xe4bc[1334]]=null;null!=this[_0xe4bc[124]]&&(this[_0xe4bc[1334]]=mxUtils[_0xe4bc[433]](this[_0xe4bc[124]],mxConstants.STYLE_IMAGE_BACKGROUND),this[_0xe4bc[1336]]=mxUtils[_0xe4bc[433]](this[_0xe4bc[124]],mxConstants.STYLE_IMAGE_BORDER),this[_0xe4bc[1674]]=1==mxUtils[_0xe4bc[1550]](this[_0xe4bc[124]],mxConstants.STYLE_IMAGE_ASPECT,1),this[_0xe4bc[623]]=this[_0xe4bc[623]]||1==mxUtils[_0xe4bc[433]](this[_0xe4bc[124]],_0xe4bc[1675],0),this[_0xe4bc[624]]=this[_0xe4bc[624]]||1==mxUtils[_0xe4bc[433]](this[_0xe4bc[124]],_0xe4bc[1676],0))};mxImageShape[_0xe4bc[202]][_0xe4bc[1567]]=function(){return !this[_0xe4bc[1674]]};mxImageShape[_0xe4bc[202]][_0xe4bc[1570]]=function(){var _0x5d2ax2=document[_0xe4bc[55]](_0xe4bc[485]);_0x5d2ax2[_0xe4bc[124]][_0xe4bc[491]]=_0xe4bc[492];return _0x5d2ax2};mxImageShape[_0xe4bc[202]][_0xe4bc[1595]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){if(null!=this[_0xe4bc[618]]){var _0x5d2axa=mxUtils[_0xe4bc[433]](this[_0xe4bc[124]],mxConstants.STYLE_IMAGE_BACKGROUND,null),_0x5d2ax12=mxUtils[_0xe4bc[433]](this[_0xe4bc[124]],mxConstants.STYLE_IMAGE_BORDER,null);if(null!=_0x5d2axa||null!=_0x5d2ax12){_0x5d2ax2[_0xe4bc[1245]](_0x5d2axa),_0x5d2ax2[_0xe4bc[1249]](_0x5d2ax12),_0x5d2ax2[_0xe4bc[1319]](_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9),_0x5d2ax2[_0xe4bc[1337]]()};_0x5d2ax2[_0xe4bc[618]](_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,this[_0xe4bc[618]],this[_0xe4bc[1674]],!1,!1)}else {mxRectangleShape[_0xe4bc[202]][_0xe4bc[1601]][_0xe4bc[183]](this,arguments)}};mxImageShape[_0xe4bc[202]][_0xe4bc[1575]]=function(){this[_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[361]]=Math[_0xe4bc[488]](this[_0xe4bc[1562]][_0xe4bc[235]])+_0xe4bc[168];this[_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[125]]=Math[_0xe4bc[488]](this[_0xe4bc[1562]][_0xe4bc[236]])+_0xe4bc[168];this[_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[117]]=Math[_0xe4bc[160]](0,Math[_0xe4bc[488]](this[_0xe4bc[1562]][_0xe4bc[117]]))+_0xe4bc[168];this[_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[119]]=Math[_0xe4bc[160]](0,Math[_0xe4bc[488]](this[_0xe4bc[1562]][_0xe4bc[119]]))+_0xe4bc[168];this[_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[1028]]=this[_0xe4bc[1334]]||_0xe4bc[110];this[_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[1630]]=this[_0xe4bc[1336]]||_0xe4bc[110];this[_0xe4bc[252]][_0xe4bc[339]]=_0xe4bc[110];if(null!=this[_0xe4bc[618]]){var _0x5d2ax2=document[_0xe4bc[55]](mxClient[_0xe4bc[49]]||null==mxClient[_0xe4bc[73]]&&0!=this[_0xe4bc[603]]?mxClient[_0xe4bc[463]]+_0xe4bc[464]:_0xe4bc[466]);_0x5d2ax2[_0xe4bc[124]][_0xe4bc[491]]=_0xe4bc[492];_0x5d2ax2[_0xe4bc[390]]=this[_0xe4bc[618]];var _0x5d2ax3=100>this[_0xe4bc[461]]?_0xe4bc[459]+this[_0xe4bc[461]]+_0xe4bc[460]:_0xe4bc[110];this[_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[347]]=_0x5d2ax3;this[_0xe4bc[623]]&&this[_0xe4bc[624]]?_0x5d2ax3+=_0xe4bc[1677]:this[_0xe4bc[623]]?_0x5d2ax3+=_0xe4bc[1678]:this[_0xe4bc[624]]&&(_0x5d2ax3+=_0xe4bc[1679]);_0x5d2ax2[_0xe4bc[124]][_0xe4bc[347]]!=_0x5d2ax3&&(_0x5d2ax2[_0xe4bc[124]][_0xe4bc[347]]=_0x5d2ax3);_0xe4bc[618]==_0x5d2ax2[_0xe4bc[301]]?_0x5d2ax2[_0xe4bc[124]][_0xe4bc[603]]=this[_0xe4bc[603]]:_0x5d2ax2[_0xe4bc[124]][mxClient[_0xe4bc[73]]+_0xe4bc[1662]]=_0xe4bc[1394]+this[_0xe4bc[603]]+_0xe4bc[1666];_0x5d2ax2[_0xe4bc[124]][_0xe4bc[117]]=this[_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[117]];_0x5d2ax2[_0xe4bc[124]][_0xe4bc[119]]=this[_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[119]];this[_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[1617]]=_0xe4bc[110];this[_0xe4bc[252]][_0xe4bc[62]](_0x5d2ax2)}else {this[_0xe4bc[1600]](this[_0xe4bc[252]])}};function mxLabel(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){mxRectangleShape[_0xe4bc[239]](this,_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5)}mxUtils[_0xe4bc[1284]](mxLabel,mxRectangleShape);mxLabel[_0xe4bc[202]][_0xe4bc[1680]]=mxConstants[_0xe4bc[1681]];mxLabel[_0xe4bc[202]][_0xe4bc[657]]=2;mxLabel[_0xe4bc[202]][_0xe4bc[1682]]=10;mxLabel[_0xe4bc[202]][_0xe4bc[635]]=2;mxLabel[_0xe4bc[202]][_0xe4bc[176]]=function(_0x5d2ax2){mxShape[_0xe4bc[202]][_0xe4bc[176]][_0xe4bc[183]](this,arguments);null!=this[_0xe4bc[632]]&&null!=this[_0xe4bc[630]]&&(this[_0xe4bc[1683]]= new this[_0xe4bc[630]],this[_0xe4bc[1683]][_0xe4bc[507]]=this[_0xe4bc[507]],this[_0xe4bc[1683]][_0xe4bc[1562]]=this[_0xe4bc[1562]],this[_0xe4bc[1683]][_0xe4bc[1334]]=this[_0xe4bc[632]],this[_0xe4bc[1683]][_0xe4bc[1336]]=this[_0xe4bc[632]],this[_0xe4bc[1683]][_0xe4bc[1299]]=this[_0xe4bc[634]],this[_0xe4bc[1683]][_0xe4bc[663]]=this[_0xe4bc[638]],this[_0xe4bc[1683]][_0xe4bc[176]](this[_0xe4bc[252]]))};mxLabel[_0xe4bc[202]][_0xe4bc[258]]=function(){null!=this[_0xe4bc[1683]]&&(this[_0xe4bc[1683]][_0xe4bc[1334]]=this[_0xe4bc[632]],this[_0xe4bc[1683]][_0xe4bc[1336]]=this[_0xe4bc[632]],this[_0xe4bc[1683]][_0xe4bc[1299]]=this[_0xe4bc[634]],this[_0xe4bc[1683]][_0xe4bc[663]]=this[_0xe4bc[638]]);mxShape[_0xe4bc[202]][_0xe4bc[258]][_0xe4bc[183]](this,arguments)};mxLabel[_0xe4bc[202]][_0xe4bc[1567]]=function(){return mxRectangleShape[_0xe4bc[202]][_0xe4bc[1567]][_0xe4bc[183]](this,arguments)&&null==this[_0xe4bc[632]]&&null==this[_0xe4bc[630]]};mxLabel[_0xe4bc[202]][_0xe4bc[1602]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){this[_0xe4bc[1684]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9);this[_0xe4bc[1685]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9);mxRectangleShape[_0xe4bc[202]][_0xe4bc[1602]][_0xe4bc[183]](this,arguments)};mxLabel[_0xe4bc[202]][_0xe4bc[1684]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){null!=this[_0xe4bc[618]]&&(_0x5d2ax3=this[_0xe4bc[1686]](_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9),_0x5d2ax2[_0xe4bc[618]](_0x5d2ax3[_0xe4bc[235]],_0x5d2ax3[_0xe4bc[236]],_0x5d2ax3[_0xe4bc[117]],_0x5d2ax3[_0xe4bc[119]],this[_0xe4bc[618]],!1,!1,!1))};mxLabel[_0xe4bc[202]][_0xe4bc[1686]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){var _0x5d2ax9=mxUtils[_0xe4bc[433]](this[_0xe4bc[124]],mxConstants.STYLE_IMAGE_ALIGN,mxConstants.ALIGN_LEFT),_0x5d2axa=mxUtils[_0xe4bc[433]](this[_0xe4bc[124]],mxConstants.STYLE_IMAGE_VERTICAL_ALIGN,mxConstants.ALIGN_MIDDLE),_0x5d2ax12=mxUtils[_0xe4bc[1550]](this[_0xe4bc[124]],mxConstants.STYLE_IMAGE_WIDTH,mxConstants.DEFAULT_IMAGESIZE),_0x5d2ax13=mxUtils[_0xe4bc[1550]](this[_0xe4bc[124]],mxConstants.STYLE_IMAGE_HEIGHT,mxConstants.DEFAULT_IMAGESIZE),_0x5d2ax14=mxUtils[_0xe4bc[1550]](this[_0xe4bc[124]],mxConstants.STYLE_SPACING,this[_0xe4bc[657]])+5;_0x5d2ax2=_0x5d2ax9==mxConstants[_0xe4bc[479]]?_0x5d2ax2+(_0x5d2ax4-_0x5d2ax12)/2:_0x5d2ax9==mxConstants[_0xe4bc[480]]?_0x5d2ax2+(_0x5d2ax4-_0x5d2ax12-_0x5d2ax14):_0x5d2ax2+_0x5d2ax14;_0x5d2ax3=_0x5d2axa==mxConstants[_0xe4bc[1687]]?_0x5d2ax3+_0x5d2ax14:_0x5d2axa==mxConstants[_0xe4bc[482]]?_0x5d2ax3+(_0x5d2ax5-_0x5d2ax13-_0x5d2ax14):_0x5d2ax3+(_0x5d2ax5-_0x5d2ax13)/2;return  new mxRectangle(_0x5d2ax2,_0x5d2ax3,_0x5d2ax12,_0x5d2ax13)};mxLabel[_0xe4bc[202]][_0xe4bc[1685]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){null!=this[_0xe4bc[1683]]?(this[_0xe4bc[1683]][_0xe4bc[1562]]=this[_0xe4bc[1688]](_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9),this[_0xe4bc[1683]][_0xe4bc[1209]](_0x5d2ax2)):null!=this[_0xe4bc[631]]&&(_0x5d2ax3=this[_0xe4bc[1688]](_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9),_0x5d2ax2[_0xe4bc[618]](_0x5d2ax3[_0xe4bc[235]],_0x5d2ax3[_0xe4bc[236]],_0x5d2ax3[_0xe4bc[117]],_0x5d2ax3[_0xe4bc[119]],this[_0xe4bc[631]],!1,!1,!1))};mxLabel[_0xe4bc[202]][_0xe4bc[1688]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){var _0x5d2ax9=mxUtils[_0xe4bc[433]](this[_0xe4bc[124]],mxConstants.STYLE_IMAGE_ALIGN,mxConstants.ALIGN_LEFT),_0x5d2axa=mxUtils[_0xe4bc[433]](this[_0xe4bc[124]],mxConstants.STYLE_IMAGE_VERTICAL_ALIGN,mxConstants.ALIGN_MIDDLE),_0x5d2ax12=mxUtils[_0xe4bc[1550]](this[_0xe4bc[124]],mxConstants.STYLE_INDICATOR_WIDTH,this[_0xe4bc[1682]]),_0x5d2ax13=mxUtils[_0xe4bc[1550]](this[_0xe4bc[124]],mxConstants.STYLE_INDICATOR_HEIGHT,this[_0xe4bc[1682]]),_0x5d2ax14=this[_0xe4bc[657]]+5;_0x5d2ax2=_0x5d2ax9==mxConstants[_0xe4bc[480]]?_0x5d2ax2+(_0x5d2ax4-_0x5d2ax12-_0x5d2ax14):_0x5d2ax9==mxConstants[_0xe4bc[479]]?_0x5d2ax2+(_0x5d2ax4-_0x5d2ax12)/2:_0x5d2ax2+_0x5d2ax14;_0x5d2ax3=_0x5d2axa==mxConstants[_0xe4bc[482]]?_0x5d2ax3+(_0x5d2ax5-_0x5d2ax13-_0x5d2ax14):_0x5d2axa==mxConstants[_0xe4bc[1687]]?_0x5d2ax3+_0x5d2ax14:_0x5d2ax3+(_0x5d2ax5-_0x5d2ax13)/2;return  new mxRectangle(_0x5d2ax2,_0x5d2ax3,_0x5d2ax12,_0x5d2ax13)};mxLabel[_0xe4bc[202]][_0xe4bc[1575]]=function(){for(mxRectangleShape[_0xe4bc[202]][_0xe4bc[1575]][_0xe4bc[183]](this,arguments);this[_0xe4bc[252]][_0xe4bc[1580]]();){this[_0xe4bc[252]][_0xe4bc[266]](this[_0xe4bc[252]][_0xe4bc[1581]])};if(null!=this[_0xe4bc[618]]){var _0x5d2ax2=document[_0xe4bc[55]](_0xe4bc[466]);_0x5d2ax2[_0xe4bc[124]][_0xe4bc[491]]=_0xe4bc[1500];_0x5d2ax2[_0xe4bc[57]](_0xe4bc[467],_0xe4bc[468]);var _0x5d2ax3=this[_0xe4bc[1686]](this[_0xe4bc[1562]][_0xe4bc[235]],this[_0xe4bc[1562]][_0xe4bc[236]],this[_0xe4bc[1562]][_0xe4bc[117]],this[_0xe4bc[1562]][_0xe4bc[119]]);_0x5d2ax3[_0xe4bc[235]]-=this[_0xe4bc[1562]][_0xe4bc[235]];_0x5d2ax3[_0xe4bc[236]]-=this[_0xe4bc[1562]][_0xe4bc[236]];_0x5d2ax2[_0xe4bc[124]][_0xe4bc[361]]=Math[_0xe4bc[488]](_0x5d2ax3[_0xe4bc[235]])+_0xe4bc[168];_0x5d2ax2[_0xe4bc[124]][_0xe4bc[125]]=Math[_0xe4bc[488]](_0x5d2ax3[_0xe4bc[236]])+_0xe4bc[168];_0x5d2ax2[_0xe4bc[124]][_0xe4bc[117]]=Math[_0xe4bc[488]](_0x5d2ax3[_0xe4bc[117]])+_0xe4bc[168];_0x5d2ax2[_0xe4bc[124]][_0xe4bc[119]]=Math[_0xe4bc[488]](_0x5d2ax3[_0xe4bc[119]])+_0xe4bc[168];_0x5d2ax2[_0xe4bc[390]]=this[_0xe4bc[618]];this[_0xe4bc[252]][_0xe4bc[62]](_0x5d2ax2)}};function mxCylinder(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){mxShape[_0xe4bc[239]](this);this[_0xe4bc[1562]]=_0x5d2ax2;this[_0xe4bc[1334]]=_0x5d2ax3;this[_0xe4bc[1336]]=_0x5d2ax4;this[_0xe4bc[1307]]=null!=_0x5d2ax5?_0x5d2ax5:1}mxUtils[_0xe4bc[1284]](mxCylinder,mxShape);mxCylinder[_0xe4bc[202]][_0xe4bc[1503]]=40;mxCylinder[_0xe4bc[202]][_0xe4bc[1564]]=0;mxCylinder[_0xe4bc[202]][_0xe4bc[1595]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){_0x5d2ax2[_0xe4bc[513]](_0x5d2ax3,_0x5d2ax4);_0x5d2ax2[_0xe4bc[1275]]();this[_0xe4bc[1625]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,!1);_0x5d2ax2[_0xe4bc[1337]]();_0x5d2ax2[_0xe4bc[1267]](!1);_0x5d2ax2[_0xe4bc[1275]]();this[_0xe4bc[1625]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,!0);_0x5d2ax2[_0xe4bc[1336]]()};mxCylinder[_0xe4bc[202]][_0xe4bc[1625]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa){_0x5d2ax3=Math[_0xe4bc[243]](this[_0xe4bc[1503]],Math[_0xe4bc[488]](_0x5d2ax9/5));if(_0x5d2axa&&null!=this[_0xe4bc[1334]]||!_0x5d2axa&&null==this[_0xe4bc[1334]]){_0x5d2ax2[_0xe4bc[1276]](0,_0x5d2ax3),_0x5d2ax2[_0xe4bc[1279]](0,2*_0x5d2ax3,_0x5d2ax5,2*_0x5d2ax3,_0x5d2ax5,_0x5d2ax3),_0x5d2axa||(_0x5d2ax2[_0xe4bc[1336]](),_0x5d2ax2[_0xe4bc[1275]]())};_0x5d2axa||(_0x5d2ax2[_0xe4bc[1276]](0,_0x5d2ax3),_0x5d2ax2[_0xe4bc[1279]](0,-_0x5d2ax3/3,_0x5d2ax5,-_0x5d2ax3/3,_0x5d2ax5,_0x5d2ax3),_0x5d2ax2[_0xe4bc[1277]](_0x5d2ax5,_0x5d2ax9-_0x5d2ax3),_0x5d2ax2[_0xe4bc[1279]](_0x5d2ax5,_0x5d2ax9+_0x5d2ax3/3,0,_0x5d2ax9+_0x5d2ax3/3,0,_0x5d2ax9-_0x5d2ax3),_0x5d2ax2[_0xe4bc[268]]())};function mxConnector(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){mxPolyline[_0xe4bc[239]](this,_0x5d2ax2,_0x5d2ax3,_0x5d2ax4)}mxUtils[_0xe4bc[1284]](mxConnector,mxPolyline);mxConnector[_0xe4bc[202]][_0xe4bc[1594]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=this[_0xe4bc[1689]](_0x5d2ax2,_0x5d2ax3,!0),_0x5d2ax5=this[_0xe4bc[1689]](_0x5d2ax2,_0x5d2ax3,!1);null==this[_0xe4bc[124]]||1!=this[_0xe4bc[124]][mxConstants[_0xe4bc[1690]]]?this[_0xe4bc[1639]](_0x5d2ax2,_0x5d2ax3,this[_0xe4bc[1606]]):this[_0xe4bc[1691]](_0x5d2ax2,_0x5d2ax3);_0x5d2ax2[_0xe4bc[1245]](this[_0xe4bc[1336]]);_0x5d2ax2[_0xe4bc[1267]](!1);_0x5d2ax2[_0xe4bc[1251]](!1);null!=_0x5d2ax4&&_0x5d2ax4();null!=_0x5d2ax5&&_0x5d2ax5()};mxConnector[_0xe4bc[202]][_0xe4bc[1691]]=function(_0x5d2ax2,_0x5d2ax3){_0x5d2ax2[_0xe4bc[1275]]();var _0x5d2ax4=_0x5d2ax3[0],_0x5d2ax5=_0x5d2ax3[_0xe4bc[67]];_0x5d2ax2[_0xe4bc[1276]](_0x5d2ax4[_0xe4bc[235]],_0x5d2ax4[_0xe4bc[236]]);for(_0x5d2ax4=1;_0x5d2ax4<_0x5d2ax5-2;_0x5d2ax4++){var _0x5d2ax9=_0x5d2ax3[_0x5d2ax4],_0x5d2axa=_0x5d2ax3[_0x5d2ax4+1];_0x5d2ax2[_0xe4bc[1278]](_0x5d2ax9[_0xe4bc[235]],_0x5d2ax9[_0xe4bc[236]],(_0x5d2ax9[_0xe4bc[235]]+_0x5d2axa[_0xe4bc[235]])/2,(_0x5d2ax9[_0xe4bc[236]]+_0x5d2axa[_0xe4bc[236]])/2)};_0x5d2ax9=_0x5d2ax3[_0x5d2ax5-2];_0x5d2axa=_0x5d2ax3[_0x5d2ax5-1];_0x5d2ax2[_0xe4bc[1278]](_0x5d2ax9[_0xe4bc[235]],_0x5d2ax9[_0xe4bc[236]],_0x5d2axa[_0xe4bc[235]],_0x5d2axa[_0xe4bc[236]]);_0x5d2ax2[_0xe4bc[1336]]()};mxConnector[_0xe4bc[202]][_0xe4bc[1689]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){var _0x5d2ax5=_0x5d2ax3[_0xe4bc[67]],_0x5d2ax9=_0x5d2ax4?_0x5d2ax3[1]:_0x5d2ax3[_0x5d2ax5-2];_0x5d2ax3=_0x5d2ax4?_0x5d2ax3[0]:_0x5d2ax3[_0x5d2ax5-1];var _0x5d2ax5=_0x5d2ax3[_0xe4bc[235]]-_0x5d2ax9[_0xe4bc[235]],_0x5d2axa=_0x5d2ax3[_0xe4bc[236]]-_0x5d2ax9[_0xe4bc[236]],_0x5d2ax12=Math[_0xe4bc[160]](1,Math[_0xe4bc[428]](_0x5d2ax5*_0x5d2ax5+_0x5d2axa*_0x5d2axa)),_0x5d2ax9=_0x5d2ax5/_0x5d2ax12,_0x5d2ax5=_0x5d2axa/_0x5d2ax12,_0x5d2axa=mxUtils[_0xe4bc[1550]](this[_0xe4bc[124]],_0x5d2ax4?mxConstants[_0xe4bc[1692]]:mxConstants[_0xe4bc[1693]],mxConstants.DEFAULT_MARKERSIZE),_0x5d2ax12=mxUtils[_0xe4bc[433]](this[_0xe4bc[124]],_0x5d2ax4?mxConstants[_0xe4bc[1694]]:mxConstants[_0xe4bc[1695]]);return mxMarker[_0xe4bc[1689]](_0x5d2ax2,this,_0x5d2ax12,_0x5d2ax3,_0x5d2ax9,_0x5d2ax5,_0x5d2axa,_0x5d2ax4,this[_0xe4bc[1307]],0!=this[_0xe4bc[124]][_0x5d2ax4?mxConstants[_0xe4bc[1696]]:mxConstants[_0xe4bc[1697]]])};mxConnector[_0xe4bc[202]][_0xe4bc[1612]]=function(_0x5d2ax2){mxShape[_0xe4bc[202]][_0xe4bc[1612]][_0xe4bc[183]](this,arguments);var _0x5d2ax3=0;mxUtils[_0xe4bc[433]](this[_0xe4bc[124]],mxConstants.STYLE_STARTARROW,mxConstants.NONE)!=mxConstants[_0xe4bc[217]]&&(_0x5d2ax3=mxUtils[_0xe4bc[1550]](this[_0xe4bc[124]],mxConstants.STYLE_STARTSIZE,mxConstants.DEFAULT_MARKERSIZE)+1);mxUtils[_0xe4bc[433]](this[_0xe4bc[124]],mxConstants.STYLE_ENDARROW,mxConstants.NONE)!=mxConstants[_0xe4bc[217]]&&(_0x5d2ax3=Math[_0xe4bc[160]](_0x5d2ax3,mxUtils[_0xe4bc[1550]](this[_0xe4bc[124]],mxConstants.STYLE_ENDSIZE,mxConstants.DEFAULT_MARKERSIZE))+1);_0x5d2ax2[_0xe4bc[244]](Math[_0xe4bc[430]](_0x5d2ax3*this[_0xe4bc[255]]))};function mxSwimlane(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){mxShape[_0xe4bc[239]](this);this[_0xe4bc[1562]]=_0x5d2ax2;this[_0xe4bc[1334]]=_0x5d2ax3;this[_0xe4bc[1336]]=_0x5d2ax4;this[_0xe4bc[1307]]=null!=_0x5d2ax5?_0x5d2ax5:1}mxUtils[_0xe4bc[1284]](mxSwimlane,mxShape);mxSwimlane[_0xe4bc[202]][_0xe4bc[1680]]=16;mxSwimlane[_0xe4bc[202]][_0xe4bc[1597]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){_0x5d2ax2=Math[_0xe4bc[243]](_0x5d2ax9,mxUtils[_0xe4bc[433]](this[_0xe4bc[124]],mxConstants.STYLE_STARTSIZE,mxConstants.DEFAULT_STARTSIZE));return  new mxRectangle(_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax2)};mxSwimlane[_0xe4bc[202]][_0xe4bc[1614]]=function(){var _0x5d2ax2=mxShape[_0xe4bc[202]][_0xe4bc[1614]][_0xe4bc[183]](this,arguments);1!=mxUtils[_0xe4bc[433]](this[_0xe4bc[124]],mxConstants.STYLE_HORIZONTAL,1)&&(_0x5d2ax2+=mxText[_0xe4bc[202]][_0xe4bc[1616]]);return _0x5d2ax2};mxSwimlane[_0xe4bc[202]][_0xe4bc[1615]]=function(){return this[_0xe4bc[1614]]()};mxSwimlane[_0xe4bc[202]][_0xe4bc[1590]]=function(){return mxShape[_0xe4bc[202]][_0xe4bc[1590]][_0xe4bc[183]](this,arguments)||1!=mxUtils[_0xe4bc[433]](this[_0xe4bc[124]],mxConstants.STYLE_HORIZONTAL,1)};mxSwimlane[_0xe4bc[202]][_0xe4bc[1603]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){_0x5d2ax2=mxUtils[_0xe4bc[433]](this[_0xe4bc[124]],mxConstants.STYLE_ARCSIZE,100*mxConstants[_0xe4bc[1557]])/100;return 3*_0x5d2ax4*_0x5d2ax2};mxSwimlane[_0xe4bc[202]][_0xe4bc[1595]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){var _0x5d2axa=Math[_0xe4bc[243]](_0x5d2ax9,mxUtils[_0xe4bc[433]](this[_0xe4bc[124]],mxConstants.STYLE_STARTSIZE,mxConstants.DEFAULT_STARTSIZE)),_0x5d2ax12=mxUtils[_0xe4bc[433]](this[_0xe4bc[124]],mxConstants.STYLE_SWIMLANE_FILLCOLOR,mxConstants.NONE),_0x5d2ax13=1==mxUtils[_0xe4bc[433]](this[_0xe4bc[124]],mxConstants.STYLE_SWIMLANE_LINE,1),_0x5d2ax14=0;_0x5d2ax2[_0xe4bc[513]](_0x5d2ax3,_0x5d2ax4);this[_0xe4bc[1606]]?(_0x5d2ax14=this[_0xe4bc[1603]](_0x5d2ax5,_0x5d2ax9,_0x5d2axa),this[_0xe4bc[1698]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa,_0x5d2ax14,_0x5d2ax12,_0x5d2ax13)):this[_0xe4bc[1699]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa,_0x5d2ax12,_0x5d2ax13);_0x5d2ax12=mxUtils[_0xe4bc[433]](this[_0xe4bc[124]],mxConstants.STYLE_SEPARATORCOLOR,mxConstants.NONE);this[_0xe4bc[1700]](_0x5d2ax2,_0x5d2ax5,_0x5d2axa,_0x5d2ax9,_0x5d2ax12);null!=this[_0xe4bc[618]]&&(_0x5d2ax9=this[_0xe4bc[1686]](_0x5d2ax3,_0x5d2axa,_0x5d2ax5,_0x5d2ax9),_0x5d2ax2[_0xe4bc[618]](_0x5d2ax9[_0xe4bc[235]]-_0x5d2ax3,_0x5d2ax9[_0xe4bc[236]]-_0x5d2ax4,_0x5d2ax9[_0xe4bc[117]],_0x5d2ax9[_0xe4bc[119]],this[_0xe4bc[618]],!1,!1,!1));this[_0xe4bc[617]]&&(_0x5d2ax2[_0xe4bc[1267]](!1),this[_0xe4bc[1604]](_0x5d2ax2,0,0,_0x5d2ax5,_0x5d2axa,_0x5d2ax14))};mxSwimlane[_0xe4bc[202]][_0xe4bc[1699]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa,_0x5d2ax12,_0x5d2ax13){_0x5d2ax12!=mxConstants[_0xe4bc[217]]&&(_0x5d2ax2[_0xe4bc[815]](),_0x5d2ax2[_0xe4bc[1245]](_0x5d2ax12),_0x5d2ax2[_0xe4bc[1319]](0,0,_0x5d2ax5,_0x5d2ax9),_0x5d2ax2[_0xe4bc[1337]](),_0x5d2ax2[_0xe4bc[1210]](),_0x5d2ax2[_0xe4bc[1267]](!1));_0x5d2ax2[_0xe4bc[1275]]();_0x5d2ax2[_0xe4bc[1276]](0,_0x5d2axa);_0x5d2ax2[_0xe4bc[1277]](0,0);_0x5d2ax2[_0xe4bc[1277]](_0x5d2ax5,0);_0x5d2ax2[_0xe4bc[1277]](_0x5d2ax5,_0x5d2axa);_0x5d2ax13&&_0x5d2ax2[_0xe4bc[268]]();_0x5d2ax2[_0xe4bc[1337]]();_0x5d2axa<_0x5d2ax9&&_0x5d2ax12==mxConstants[_0xe4bc[217]]&&(_0x5d2ax2[_0xe4bc[1229]]= !1,_0x5d2ax2[_0xe4bc[1275]](),_0x5d2ax2[_0xe4bc[1276]](0,_0x5d2axa),_0x5d2ax2[_0xe4bc[1277]](0,_0x5d2ax9),_0x5d2ax2[_0xe4bc[1277]](_0x5d2ax5,_0x5d2ax9),_0x5d2ax2[_0xe4bc[1277]](_0x5d2ax5,_0x5d2axa),_0x5d2ax2[_0xe4bc[1336]]())};mxSwimlane[_0xe4bc[202]][_0xe4bc[1698]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa,_0x5d2ax12,_0x5d2ax13,_0x5d2ax14){_0x5d2ax13!=mxConstants[_0xe4bc[217]]&&(_0x5d2ax2[_0xe4bc[815]](),_0x5d2ax2[_0xe4bc[1245]](_0x5d2ax13),_0x5d2ax2[_0xe4bc[1320]](0,0,_0x5d2ax5,_0x5d2ax9,_0x5d2ax12,_0x5d2ax12),_0x5d2ax2[_0xe4bc[1337]](),_0x5d2ax2[_0xe4bc[1210]](),_0x5d2ax2[_0xe4bc[1267]](!1));_0x5d2ax2[_0xe4bc[1275]]();_0x5d2ax2[_0xe4bc[1276]](_0x5d2ax5,_0x5d2axa);_0x5d2ax2[_0xe4bc[1277]](_0x5d2ax5,_0x5d2ax12);_0x5d2ax2[_0xe4bc[1278]](_0x5d2ax5,0,_0x5d2ax5-Math[_0xe4bc[243]](_0x5d2ax5/2,_0x5d2ax12),0);_0x5d2ax2[_0xe4bc[1277]](Math[_0xe4bc[243]](_0x5d2ax5/2,_0x5d2ax12),0);_0x5d2ax2[_0xe4bc[1278]](0,0,0,_0x5d2ax12);_0x5d2ax2[_0xe4bc[1277]](0,_0x5d2axa);_0x5d2ax14&&_0x5d2ax2[_0xe4bc[268]]();_0x5d2ax2[_0xe4bc[1337]]();_0x5d2axa<_0x5d2ax9&&_0x5d2ax13==mxConstants[_0xe4bc[217]]&&(_0x5d2ax2[_0xe4bc[1229]]= !1,_0x5d2ax2[_0xe4bc[1275]](),_0x5d2ax2[_0xe4bc[1276]](0,_0x5d2axa),_0x5d2ax2[_0xe4bc[1277]](0,_0x5d2ax9-_0x5d2ax12),_0x5d2ax2[_0xe4bc[1278]](0,_0x5d2ax9,Math[_0xe4bc[243]](_0x5d2ax5/2,_0x5d2ax12),_0x5d2ax9),_0x5d2ax2[_0xe4bc[1277]](_0x5d2ax5-Math[_0xe4bc[243]](_0x5d2ax5/2,_0x5d2ax12),_0x5d2ax9),_0x5d2ax2[_0xe4bc[1278]](_0x5d2ax5,_0x5d2ax9,_0x5d2ax5,_0x5d2ax9-_0x5d2ax12),_0x5d2ax2[_0xe4bc[1277]](_0x5d2ax5,_0x5d2axa),_0x5d2ax2[_0xe4bc[1336]]())};mxSwimlane[_0xe4bc[202]][_0xe4bc[1700]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){_0x5d2ax9!=mxConstants[_0xe4bc[217]]&&(_0x5d2ax2[_0xe4bc[1249]](_0x5d2ax9),_0x5d2ax2[_0xe4bc[1251]](!0),_0x5d2ax2[_0xe4bc[1275]](),_0x5d2ax2[_0xe4bc[1276]](_0x5d2ax3,_0x5d2ax4),_0x5d2ax2[_0xe4bc[1277]](_0x5d2ax3,_0x5d2ax5),_0x5d2ax2[_0xe4bc[1336]](),_0x5d2ax2[_0xe4bc[1251]](!1))};mxSwimlane[_0xe4bc[202]][_0xe4bc[1686]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){return  new mxRectangle(_0x5d2ax2+_0x5d2ax4-this[_0xe4bc[1680]],_0x5d2ax3,this[_0xe4bc[1680]],this[_0xe4bc[1680]])};function mxGraphLayout(_0x5d2ax2){this[_0xe4bc[1179]]=_0x5d2ax2}mxGraphLayout[_0xe4bc[202]][_0xe4bc[1179]]=null;mxGraphLayout[_0xe4bc[202]][_0xe4bc[1701]]= !0;mxGraphLayout[_0xe4bc[202]][_0xe4bc[1101]]=null;mxGraphLayout[_0xe4bc[202]][_0xe4bc[1702]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){};mxGraphLayout[_0xe4bc[202]][_0xe4bc[350]]=function(_0x5d2ax2){};mxGraphLayout[_0xe4bc[202]][_0xe4bc[1703]]=function(){return this[_0xe4bc[1179]]};mxGraphLayout[_0xe4bc[202]][_0xe4bc[1704]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){_0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax3);_0x5d2ax3=null!=_0x5d2ax4?_0x5d2ax4[_0xe4bc[124]]:this[_0xe4bc[1179]][_0xe4bc[1705]](_0x5d2ax3);return null!=_0x5d2ax3?_0x5d2ax3[_0x5d2ax2]:null};mxGraphLayout[_0xe4bc[1706]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){if(null!=_0x5d2ax4&&null!=_0x5d2ax2){_0x5d2ax3=null!=_0x5d2ax3?_0x5d2ax3:!0;_0x5d2ax9=_0x5d2ax9||[];var _0x5d2axa=mxCellPath[_0xe4bc[385]](_0x5d2ax2);if(null==_0x5d2ax9[_0x5d2axa]&&(_0x5d2ax9[_0x5d2axa]=_0x5d2ax2,_0x5d2ax5=_0x5d2ax4(_0x5d2ax2,_0x5d2ax5),null==_0x5d2ax5||_0x5d2ax5)){if(_0x5d2ax5=this[_0xe4bc[1179]][_0xe4bc[251]][_0xe4bc[1707]](_0x5d2ax2),0<_0x5d2ax5){for(_0x5d2axa=0;_0x5d2axa<_0x5d2ax5;_0x5d2axa++){var _0x5d2ax12=this[_0xe4bc[1179]][_0xe4bc[251]][_0xe4bc[1708]](_0x5d2ax2,_0x5d2axa),_0x5d2ax13=this[_0xe4bc[1179]][_0xe4bc[251]][_0xe4bc[1709]](_0x5d2ax12,!0)==_0x5d2ax2;if(!_0x5d2ax3||_0x5d2ax13){_0x5d2ax13=this[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[1710]](_0x5d2ax12,!_0x5d2ax13),this[_0xe4bc[1706]](_0x5d2ax13,_0x5d2ax3,_0x5d2ax4,_0x5d2ax12,_0x5d2ax9)}}}}}};mxGraphLayout[_0xe4bc[202]][_0xe4bc[1711]]=function(_0x5d2ax2){return this[_0xe4bc[1179]][_0xe4bc[1712]](_0x5d2ax2)};mxGraphLayout[_0xe4bc[202]][_0xe4bc[1713]]=function(_0x5d2ax2){return !this[_0xe4bc[1179]][_0xe4bc[502]]()[_0xe4bc[1193]](_0x5d2ax2)||!this[_0xe4bc[1179]][_0xe4bc[1714]](_0x5d2ax2)};mxGraphLayout[_0xe4bc[202]][_0xe4bc[1715]]=function(_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[1179]][_0xe4bc[502]]();return !_0x5d2ax3[_0xe4bc[250]](_0x5d2ax2)||!this[_0xe4bc[1179]][_0xe4bc[1714]](_0x5d2ax2)||null==_0x5d2ax3[_0xe4bc[1709]](_0x5d2ax2,!0)||null==_0x5d2ax3[_0xe4bc[1709]](_0x5d2ax2,!1)};mxGraphLayout[_0xe4bc[202]][_0xe4bc[1716]]=function(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[1179]][_0xe4bc[1717]](mxConstants.STYLE_NOEDGESTYLE,_0x5d2ax3?_0xe4bc[468]:_0xe4bc[500],[_0x5d2ax2])};mxGraphLayout[_0xe4bc[202]][_0xe4bc[1718]]=function(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[1179]][_0xe4bc[1717]](mxConstants.STYLE_ORTHOGONAL,_0x5d2ax3?_0xe4bc[500]:_0xe4bc[468],[_0x5d2ax2])};mxGraphLayout[_0xe4bc[202]][_0xe4bc[1719]]=function(_0x5d2ax2){var _0x5d2ax3= new mxPoint;if(null!=_0x5d2ax2&&_0x5d2ax2!=this[_0xe4bc[1101]]){var _0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[502]]();if(_0x5d2ax4[_0xe4bc[1720]](this[_0xe4bc[1101]],_0x5d2ax2)){for(var _0x5d2ax5=_0x5d2ax4[_0xe4bc[1721]](_0x5d2ax2);_0x5d2ax2!=this[_0xe4bc[1101]];){_0x5d2ax3[_0xe4bc[235]]+=_0x5d2ax5[_0xe4bc[235]],_0x5d2ax3[_0xe4bc[236]]+=_0x5d2ax5[_0xe4bc[236]],_0x5d2ax2=_0x5d2ax4[_0xe4bc[1197]](_0x5d2ax2),_0x5d2ax5=_0x5d2ax4[_0xe4bc[1721]](_0x5d2ax2)}}};return _0x5d2ax3};mxGraphLayout[_0xe4bc[202]][_0xe4bc[1722]]=function(_0x5d2ax2,_0x5d2ax3){if(null!=_0x5d2ax2){var _0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[251]],_0x5d2ax5=_0x5d2ax4[_0xe4bc[1721]](_0x5d2ax2);null==_0x5d2ax5?(_0x5d2ax5= new mxGeometry,_0x5d2ax5[_0xe4bc[1723]](!0)):_0x5d2ax5=_0x5d2ax5[_0xe4bc[238]]();if(null!=this[_0xe4bc[1101]]&&null!=_0x5d2ax3){for(var _0x5d2ax9=_0x5d2ax4[_0xe4bc[1197]](_0x5d2ax2),_0x5d2ax9=this[_0xe4bc[1719]](_0x5d2ax9),_0x5d2axa=0;_0x5d2axa<_0x5d2ax3[_0xe4bc[67]];_0x5d2axa++){_0x5d2ax3[_0x5d2axa][_0xe4bc[235]]-=_0x5d2ax9[_0xe4bc[235]],_0x5d2ax3[_0x5d2axa][_0xe4bc[236]]-=_0x5d2ax9[_0xe4bc[236]]}};_0x5d2ax5[_0xe4bc[1525]]=_0x5d2ax3;_0x5d2ax4[_0xe4bc[1724]](_0x5d2ax2,_0x5d2ax5)}};mxGraphLayout[_0xe4bc[202]][_0xe4bc[1725]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){var _0x5d2ax5=this[_0xe4bc[1179]][_0xe4bc[502]](),_0x5d2ax9=_0x5d2ax5[_0xe4bc[1721]](_0x5d2ax2),_0x5d2axa=null;if(null!=_0x5d2ax9){_0x5d2axa= new mxRectangle(_0x5d2ax3,_0x5d2ax4,_0x5d2ax9[_0xe4bc[117]],_0x5d2ax9[_0xe4bc[119]]);if(this[_0xe4bc[1701]]){var _0x5d2ax12=this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[248]](_0x5d2ax2);if(null!=_0x5d2ax12&&null!=_0x5d2ax12[_0xe4bc[963]]&&null!=_0x5d2ax12[_0xe4bc[963]][_0xe4bc[1563]]){var _0x5d2ax13=this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[255]],_0x5d2ax14=_0x5d2ax12[_0xe4bc[963]][_0xe4bc[1563]];_0x5d2ax12[_0xe4bc[963]][_0xe4bc[1563]][_0xe4bc[235]]<_0x5d2ax12[_0xe4bc[235]]&&(_0x5d2ax3+=(_0x5d2ax12[_0xe4bc[235]]-_0x5d2ax14[_0xe4bc[235]])/_0x5d2ax13,_0x5d2axa[_0xe4bc[117]]=_0x5d2ax14[_0xe4bc[117]]);_0x5d2ax12[_0xe4bc[963]][_0xe4bc[1563]][_0xe4bc[236]]<_0x5d2ax12[_0xe4bc[236]]&&(_0x5d2ax4+=(_0x5d2ax12[_0xe4bc[236]]-_0x5d2ax14[_0xe4bc[236]])/_0x5d2ax13,_0x5d2axa[_0xe4bc[119]]=_0x5d2ax14[_0xe4bc[119]])}};null!=this[_0xe4bc[1101]]&&(_0x5d2ax12=_0x5d2ax5[_0xe4bc[1197]](_0x5d2ax2),null!=_0x5d2ax12&&_0x5d2ax12!=this[_0xe4bc[1101]]&&(_0x5d2ax12=this[_0xe4bc[1719]](_0x5d2ax12),_0x5d2ax3-=_0x5d2ax12[_0xe4bc[235]],_0x5d2ax4-=_0x5d2ax12[_0xe4bc[236]]));if(_0x5d2ax9[_0xe4bc[235]]!=_0x5d2ax3||_0x5d2ax9[_0xe4bc[236]]!=_0x5d2ax4){_0x5d2ax9=_0x5d2ax9[_0xe4bc[238]](),_0x5d2ax9[_0xe4bc[235]]=_0x5d2ax3,_0x5d2ax9[_0xe4bc[236]]=_0x5d2ax4,_0x5d2ax5[_0xe4bc[1724]](_0x5d2ax2,_0x5d2ax9)}};return _0x5d2axa};mxGraphLayout[_0xe4bc[202]][_0xe4bc[1726]]=function(_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[1179]][_0xe4bc[502]]()[_0xe4bc[1721]](_0x5d2ax2);if(this[_0xe4bc[1701]]){var _0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[248]](_0x5d2ax2);if(null!=_0x5d2ax4&&null!=_0x5d2ax4[_0xe4bc[963]]&&null!=_0x5d2ax4[_0xe4bc[963]][_0xe4bc[1563]]){var _0x5d2ax5=this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[255]],_0x5d2ax9=_0x5d2ax4[_0xe4bc[963]][_0xe4bc[1563]],_0x5d2axa=Math[_0xe4bc[160]](_0x5d2ax4[_0xe4bc[235]]-_0x5d2ax9[_0xe4bc[235]],0)/_0x5d2ax5,_0x5d2ax12=Math[_0xe4bc[160]](_0x5d2ax4[_0xe4bc[236]]-_0x5d2ax9[_0xe4bc[236]],0)/_0x5d2ax5,_0x5d2ax13=Math[_0xe4bc[160]](_0x5d2ax9[_0xe4bc[235]]+_0x5d2ax9[_0xe4bc[117]]-(_0x5d2ax4[_0xe4bc[235]]+_0x5d2ax4[_0xe4bc[117]]),0)/_0x5d2ax5,_0x5d2ax4=Math[_0xe4bc[160]](_0x5d2ax9[_0xe4bc[236]]+_0x5d2ax9[_0xe4bc[119]]-(_0x5d2ax4[_0xe4bc[236]]+_0x5d2ax4[_0xe4bc[119]]),0)/_0x5d2ax5,_0x5d2ax3= new mxRectangle(_0x5d2ax3[_0xe4bc[235]]-_0x5d2axa,_0x5d2ax3[_0xe4bc[236]]-_0x5d2ax12,_0x5d2ax3[_0xe4bc[117]]+_0x5d2axa+_0x5d2ax13,_0x5d2ax3[_0xe4bc[119]]+_0x5d2ax12+_0x5d2ax4)}};null!=this[_0xe4bc[1101]]&&(_0x5d2ax2=this[_0xe4bc[1179]][_0xe4bc[502]]()[_0xe4bc[1197]](_0x5d2ax2),_0x5d2ax3=_0x5d2ax3[_0xe4bc[238]](),null!=_0x5d2ax2&&_0x5d2ax2!=this[_0xe4bc[1101]]&&(_0x5d2ax2=this[_0xe4bc[1719]](_0x5d2ax2),_0x5d2ax3[_0xe4bc[235]]+=_0x5d2ax2[_0xe4bc[235]],_0x5d2ax3[_0xe4bc[236]]+=_0x5d2ax2[_0xe4bc[236]]));return  new mxRectangle(_0x5d2ax3[_0xe4bc[235]],_0x5d2ax3[_0xe4bc[236]],_0x5d2ax3[_0xe4bc[117]],_0x5d2ax3[_0xe4bc[119]])};mxGraphLayout[_0xe4bc[202]][_0xe4bc[1727]]=function(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[1179]][_0xe4bc[502]]()[_0xe4bc[473]]();try{for(var _0x5d2ax4=_0x5d2ax2[_0xe4bc[67]]-1;0<=_0x5d2ax4;_0x5d2ax4--){var _0x5d2ax5=_0x5d2ax2[_0x5d2ax4],_0x5d2ax9=this[_0xe4bc[1179]][_0xe4bc[1728]](_0x5d2ax5),_0x5d2axa=this[_0xe4bc[1179]][_0xe4bc[1729]](_0x5d2ax9),_0x5d2ax12=this[_0xe4bc[1179]][_0xe4bc[1198]](_0x5d2ax5),_0x5d2ax13=0,_0x5d2ax14=0;if(this[_0xe4bc[1179]][_0xe4bc[1730]](_0x5d2ax5)){var _0x5d2ax15=this[_0xe4bc[1179]][_0xe4bc[1731]](_0x5d2ax5),_0x5d2ax13=_0x5d2ax15[_0xe4bc[117]],_0x5d2ax14=_0x5d2ax15[_0xe4bc[119]]};null!=_0x5d2axa&&null!=_0x5d2ax12&&(_0x5d2ax12=_0x5d2ax12[_0xe4bc[238]](),_0x5d2ax12[_0xe4bc[235]]=_0x5d2ax12[_0xe4bc[235]]+_0x5d2axa[_0xe4bc[235]]-_0x5d2ax3-_0x5d2ax13,_0x5d2ax12[_0xe4bc[236]]=_0x5d2ax12[_0xe4bc[236]]+_0x5d2axa[_0xe4bc[236]]-_0x5d2ax3-_0x5d2ax14,_0x5d2ax12[_0xe4bc[117]]=_0x5d2axa[_0xe4bc[117]]+2*_0x5d2ax3+_0x5d2ax13,_0x5d2ax12[_0xe4bc[119]]=_0x5d2axa[_0xe4bc[119]]+2*_0x5d2ax3+_0x5d2ax14,this[_0xe4bc[1179]][_0xe4bc[502]]()[_0xe4bc[1724]](_0x5d2ax5,_0x5d2ax12),this[_0xe4bc[1179]][_0xe4bc[834]](_0x5d2ax9,_0x5d2ax3+_0x5d2ax13-_0x5d2axa[_0xe4bc[235]],_0x5d2ax3+_0x5d2ax14-_0x5d2axa[_0xe4bc[236]]))}}finally{this[_0xe4bc[1179]][_0xe4bc[502]]()[_0xe4bc[476]]()}};function mxStackLayout(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa){mxGraphLayout[_0xe4bc[239]](this,_0x5d2ax2);this[_0xe4bc[662]]=null!=_0x5d2ax3?_0x5d2ax3:!0;this[_0xe4bc[657]]=null!=_0x5d2ax4?_0x5d2ax4:0;this[_0xe4bc[1732]]=null!=_0x5d2ax5?_0x5d2ax5:0;this[_0xe4bc[1733]]=null!=_0x5d2ax9?_0x5d2ax9:0;this[_0xe4bc[467]]=null!=_0x5d2axa?_0x5d2axa:0}mxStackLayout[_0xe4bc[202]]= new mxGraphLayout;mxStackLayout[_0xe4bc[202]][_0xe4bc[196]]=mxStackLayout;mxStackLayout[_0xe4bc[202]][_0xe4bc[662]]=null;mxStackLayout[_0xe4bc[202]][_0xe4bc[657]]=null;mxStackLayout[_0xe4bc[202]][_0xe4bc[1732]]=null;mxStackLayout[_0xe4bc[202]][_0xe4bc[1733]]=null;mxStackLayout[_0xe4bc[202]][_0xe4bc[467]]=0;mxStackLayout[_0xe4bc[202]][_0xe4bc[1734]]= !1;mxStackLayout[_0xe4bc[202]][_0xe4bc[1334]]= !1;mxStackLayout[_0xe4bc[202]][_0xe4bc[1735]]= !1;mxStackLayout[_0xe4bc[202]][_0xe4bc[1736]]= !1;mxStackLayout[_0xe4bc[202]][_0xe4bc[1333]]=null;mxStackLayout[_0xe4bc[202]][_0xe4bc[1737]]=function(){return this[_0xe4bc[662]]};mxStackLayout[_0xe4bc[202]][_0xe4bc[1702]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){var _0x5d2ax5=this[_0xe4bc[1179]][_0xe4bc[502]](),_0x5d2ax9=_0x5d2ax5[_0xe4bc[1197]](_0x5d2ax2),_0x5d2axa=this[_0xe4bc[1737]]();if(null!=_0x5d2ax2&&null!=_0x5d2ax9){var _0x5d2ax12=0,_0x5d2ax13=0,_0x5d2ax14=_0x5d2ax5[_0xe4bc[262]](_0x5d2ax9);_0x5d2ax3=_0x5d2axa?_0x5d2ax3:_0x5d2ax4;_0x5d2ax12=this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[248]](_0x5d2ax9);null!=_0x5d2ax12&&(_0x5d2ax3-=_0x5d2axa?_0x5d2ax12[_0xe4bc[235]]:_0x5d2ax12[_0xe4bc[236]]);for(_0x5d2ax12=0;_0x5d2ax12<_0x5d2ax14;_0x5d2ax12++){if(_0x5d2ax4=_0x5d2ax5[_0xe4bc[263]](_0x5d2ax9,_0x5d2ax12),_0x5d2ax4!=_0x5d2ax2&&(_0x5d2ax4=_0x5d2ax5[_0xe4bc[1721]](_0x5d2ax4),null!=_0x5d2ax4)){_0x5d2ax4=_0x5d2axa?_0x5d2ax4[_0xe4bc[235]]+_0x5d2ax4[_0xe4bc[117]]/2:_0x5d2ax4[_0xe4bc[236]]+_0x5d2ax4[_0xe4bc[119]]/2;if(_0x5d2ax13<_0x5d2ax3&&_0x5d2ax4>_0x5d2ax3){break};_0x5d2ax13=_0x5d2ax4}};_0x5d2axa=_0x5d2ax9[_0xe4bc[1738]](_0x5d2ax2);_0x5d2axa=Math[_0xe4bc[160]](0,_0x5d2ax12-(_0x5d2ax12>_0x5d2axa?1:0));_0x5d2ax5[_0xe4bc[99]](_0x5d2ax9,_0x5d2ax2,_0x5d2axa)}};mxStackLayout[_0xe4bc[202]][_0xe4bc[1739]]=function(_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[1179]][_0xe4bc[502]](),_0x5d2ax4=_0x5d2ax3[_0xe4bc[1721]](_0x5d2ax2);if(null!=this[_0xe4bc[1179]][_0xe4bc[526]]&&(null==_0x5d2ax4&&_0x5d2ax3[_0xe4bc[1740]](_0x5d2ax2)||_0x5d2ax2==this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[1741]])){_0x5d2ax4= new mxRectangle(0,0,this[_0xe4bc[1179]][_0xe4bc[526]][_0xe4bc[359]]-1,this[_0xe4bc[1179]][_0xe4bc[526]][_0xe4bc[167]]-1)};return _0x5d2ax4};mxStackLayout[_0xe4bc[202]][_0xe4bc[350]]=function(_0x5d2ax2){if(null!=_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[1737]](),_0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[502]](),_0x5d2ax5=this[_0xe4bc[1739]](_0x5d2ax2),_0x5d2ax9=0;null!=_0x5d2ax5&&(_0x5d2ax9=_0x5d2ax3?_0x5d2ax5[_0xe4bc[119]]:_0x5d2ax5[_0xe4bc[117]]);var _0x5d2ax9=_0x5d2ax9-(2*this[_0xe4bc[657]]+2*this[_0xe4bc[467]]),_0x5d2axa=this[_0xe4bc[1732]]+this[_0xe4bc[467]],_0x5d2ax12=this[_0xe4bc[1733]]+this[_0xe4bc[467]];if(this[_0xe4bc[1179]][_0xe4bc[1730]](_0x5d2ax2)){var _0x5d2ax13=this[_0xe4bc[1179]][_0xe4bc[1705]](_0x5d2ax2),_0x5d2ax14=mxUtils[_0xe4bc[433]](_0x5d2ax13,mxConstants.STYLE_STARTSIZE,mxConstants.DEFAULT_STARTSIZE),_0x5d2ax13=mxUtils[_0xe4bc[433]](_0x5d2ax13,mxConstants.STYLE_HORIZONTAL,!0);_0x5d2ax3==_0x5d2ax13&&(_0x5d2ax9-=_0x5d2ax14);_0x5d2ax3?_0x5d2ax12+=_0x5d2ax14:_0x5d2axa+=_0x5d2ax14};_0x5d2ax4[_0xe4bc[473]]();try{for(var _0x5d2ax14=0,_0x5d2ax13=null,_0x5d2ax15=_0x5d2ax4[_0xe4bc[262]](_0x5d2ax2),_0x5d2ax16=0;_0x5d2ax16<_0x5d2ax15;_0x5d2ax16++){var _0x5d2ax17=_0x5d2ax4[_0xe4bc[263]](_0x5d2ax2,_0x5d2ax16);if(!this[_0xe4bc[1713]](_0x5d2ax17)&&this[_0xe4bc[1711]](_0x5d2ax17)){var _0x5d2ax18=_0x5d2ax4[_0xe4bc[1721]](_0x5d2ax17);if(null!=_0x5d2ax18){_0x5d2ax18=_0x5d2ax18[_0xe4bc[238]]();if(null!=this[_0xe4bc[1333]]&&null!=_0x5d2ax13&&(_0x5d2ax3&&_0x5d2ax13[_0xe4bc[235]]+_0x5d2ax13[_0xe4bc[117]]+_0x5d2ax18[_0xe4bc[117]]+2*this[_0xe4bc[657]]>this[_0xe4bc[1333]]||!_0x5d2ax3&&_0x5d2ax13[_0xe4bc[236]]+_0x5d2ax13[_0xe4bc[119]]+_0x5d2ax18[_0xe4bc[119]]+2*this[_0xe4bc[657]]>this[_0xe4bc[1333]])){_0x5d2ax13=null,_0x5d2ax3?_0x5d2ax12+=_0x5d2ax14+this[_0xe4bc[657]]:_0x5d2axa+=_0x5d2ax14+this[_0xe4bc[657]],_0x5d2ax14=0};_0x5d2ax14=Math[_0xe4bc[160]](_0x5d2ax14,_0x5d2ax3?_0x5d2ax18[_0xe4bc[119]]:_0x5d2ax18[_0xe4bc[117]]);null!=_0x5d2ax13?_0x5d2ax3?_0x5d2ax18[_0xe4bc[235]]=_0x5d2ax13[_0xe4bc[235]]+_0x5d2ax13[_0xe4bc[117]]+this[_0xe4bc[657]]:_0x5d2ax18[_0xe4bc[236]]=_0x5d2ax13[_0xe4bc[236]]+_0x5d2ax13[_0xe4bc[119]]+this[_0xe4bc[657]]:this[_0xe4bc[1734]]||(_0x5d2ax3?_0x5d2ax18[_0xe4bc[235]]=_0x5d2axa:_0x5d2ax18[_0xe4bc[236]]=_0x5d2ax12);_0x5d2ax3?_0x5d2ax18[_0xe4bc[236]]=_0x5d2ax12:_0x5d2ax18[_0xe4bc[235]]=_0x5d2axa;this[_0xe4bc[1334]]&&0<_0x5d2ax9&&(_0x5d2ax3?_0x5d2ax18[_0xe4bc[119]]=_0x5d2ax9:_0x5d2ax18[_0xe4bc[117]]=_0x5d2ax9);_0x5d2ax4[_0xe4bc[1724]](_0x5d2ax17,_0x5d2ax18);_0x5d2ax13=_0x5d2ax18}}};this[_0xe4bc[1735]]&&null!=_0x5d2ax5&&null!=_0x5d2ax13&&!this[_0xe4bc[1179]][_0xe4bc[1742]](_0x5d2ax2)?(_0x5d2ax5=_0x5d2ax5[_0xe4bc[238]](),_0x5d2ax3?_0x5d2ax5[_0xe4bc[117]]=_0x5d2ax13[_0xe4bc[235]]+_0x5d2ax13[_0xe4bc[117]]+this[_0xe4bc[657]]:_0x5d2ax5[_0xe4bc[119]]=_0x5d2ax13[_0xe4bc[236]]+_0x5d2ax13[_0xe4bc[119]]+this[_0xe4bc[657]],_0x5d2ax4[_0xe4bc[1724]](_0x5d2ax2,_0x5d2ax5)):this[_0xe4bc[1736]]&&(null!=_0x5d2ax5&&null!=_0x5d2ax13)&&(_0x5d2ax3?_0x5d2ax13[_0xe4bc[117]]=_0x5d2ax5[_0xe4bc[117]]-_0x5d2ax13[_0xe4bc[235]]-this[_0xe4bc[657]]:_0x5d2ax13[_0xe4bc[119]]=_0x5d2ax5[_0xe4bc[119]]-_0x5d2ax13[_0xe4bc[236]]-this[_0xe4bc[657]])}finally{_0x5d2ax4[_0xe4bc[476]]()}}};function mxPartitionLayout(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){mxGraphLayout[_0xe4bc[239]](this,_0x5d2ax2);this[_0xe4bc[662]]=null!=_0x5d2ax3?_0x5d2ax3:!0;this[_0xe4bc[657]]=_0x5d2ax4||0;this[_0xe4bc[467]]=_0x5d2ax5||0}mxPartitionLayout[_0xe4bc[202]]= new mxGraphLayout;mxPartitionLayout[_0xe4bc[202]][_0xe4bc[196]]=mxPartitionLayout;mxPartitionLayout[_0xe4bc[202]][_0xe4bc[662]]=null;mxPartitionLayout[_0xe4bc[202]][_0xe4bc[657]]=null;mxPartitionLayout[_0xe4bc[202]][_0xe4bc[467]]=null;mxPartitionLayout[_0xe4bc[202]][_0xe4bc[1743]]= !0;mxPartitionLayout[_0xe4bc[202]][_0xe4bc[1737]]=function(){return this[_0xe4bc[662]]};mxPartitionLayout[_0xe4bc[202]][_0xe4bc[1702]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){_0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[502]]();var _0x5d2ax5=_0x5d2ax4[_0xe4bc[1197]](_0x5d2ax2);if(null!=_0x5d2ax2&&null!=_0x5d2ax5){for(var _0x5d2ax9=0,_0x5d2axa=0,_0x5d2ax12=_0x5d2ax4[_0xe4bc[262]](_0x5d2ax5),_0x5d2ax9=0;_0x5d2ax9<_0x5d2ax12;_0x5d2ax9++){var _0x5d2ax13=_0x5d2ax4[_0xe4bc[263]](_0x5d2ax5,_0x5d2ax9),_0x5d2ax13=this[_0xe4bc[1726]](_0x5d2ax13);if(null!=_0x5d2ax13){_0x5d2ax13=_0x5d2ax13[_0xe4bc[235]]+_0x5d2ax13[_0xe4bc[117]]/2;if(_0x5d2axa<_0x5d2ax3&&_0x5d2ax13>_0x5d2ax3){break};_0x5d2axa=_0x5d2ax13}};_0x5d2ax3=_0x5d2ax5[_0xe4bc[1738]](_0x5d2ax2);_0x5d2ax3=Math[_0xe4bc[160]](0,_0x5d2ax9-(_0x5d2ax9>_0x5d2ax3?1:0));_0x5d2ax4[_0xe4bc[99]](_0x5d2ax5,_0x5d2ax2,_0x5d2ax3)}};mxPartitionLayout[_0xe4bc[202]][_0xe4bc[350]]=function(_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[1737]](),_0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[502]](),_0x5d2ax5=_0x5d2ax4[_0xe4bc[1721]](_0x5d2ax2);if(null!=this[_0xe4bc[1179]][_0xe4bc[526]]&&(null==_0x5d2ax5&&_0x5d2ax4[_0xe4bc[1740]](_0x5d2ax2)||_0x5d2ax2==this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[1741]])){_0x5d2ax5= new mxRectangle(0,0,this[_0xe4bc[1179]][_0xe4bc[526]][_0xe4bc[359]]-1,this[_0xe4bc[1179]][_0xe4bc[526]][_0xe4bc[167]]-1)};if(null!=_0x5d2ax5){for(var _0x5d2ax9=[],_0x5d2axa=_0x5d2ax4[_0xe4bc[262]](_0x5d2ax2),_0x5d2ax12=0;_0x5d2ax12<_0x5d2axa;_0x5d2ax12++){var _0x5d2ax13=_0x5d2ax4[_0xe4bc[263]](_0x5d2ax2,_0x5d2ax12);!this[_0xe4bc[1713]](_0x5d2ax13)&&this[_0xe4bc[1711]](_0x5d2ax13)&&_0x5d2ax9[_0xe4bc[207]](_0x5d2ax13)};_0x5d2axa=_0x5d2ax9[_0xe4bc[67]];if(0<_0x5d2axa){var _0x5d2ax14=this[_0xe4bc[467]],_0x5d2ax15=this[_0xe4bc[467]],_0x5d2ax16=_0x5d2ax3?_0x5d2ax5[_0xe4bc[119]]:_0x5d2ax5[_0xe4bc[117]],_0x5d2ax16=_0x5d2ax16-2*this[_0xe4bc[467]];_0x5d2ax2=this[_0xe4bc[1179]][_0xe4bc[1730]](_0x5d2ax2)?this[_0xe4bc[1179]][_0xe4bc[1731]](_0x5d2ax2): new mxRectangle;_0x5d2ax16-=_0x5d2ax3?_0x5d2ax2[_0xe4bc[119]]:_0x5d2ax2[_0xe4bc[117]];_0x5d2ax14+=_0x5d2ax2[_0xe4bc[117]];_0x5d2ax15+=_0x5d2ax2[_0xe4bc[119]];_0x5d2ax2=this[_0xe4bc[467]]+(_0x5d2axa-1)*this[_0xe4bc[657]];_0x5d2ax5=_0x5d2ax3?(_0x5d2ax5[_0xe4bc[117]]-_0x5d2ax14-_0x5d2ax2)/_0x5d2axa:(_0x5d2ax5[_0xe4bc[119]]-_0x5d2ax15-_0x5d2ax2)/_0x5d2axa;if(0<_0x5d2ax5){_0x5d2ax4[_0xe4bc[473]]();try{for(_0x5d2ax12=0;_0x5d2ax12<_0x5d2axa;_0x5d2ax12++){var _0x5d2ax13=_0x5d2ax9[_0x5d2ax12],_0x5d2ax17=_0x5d2ax4[_0xe4bc[1721]](_0x5d2ax13);null!=_0x5d2ax17&&(_0x5d2ax17=_0x5d2ax17[_0xe4bc[238]](),_0x5d2ax17[_0xe4bc[235]]=_0x5d2ax14,_0x5d2ax17[_0xe4bc[236]]=_0x5d2ax15,_0x5d2ax3?(this[_0xe4bc[1743]]&&(_0x5d2ax17[_0xe4bc[117]]=_0x5d2ax5,_0x5d2ax17[_0xe4bc[119]]=_0x5d2ax16),_0x5d2ax14+=_0x5d2ax5+this[_0xe4bc[657]]):(this[_0xe4bc[1743]]&&(_0x5d2ax17[_0xe4bc[119]]=_0x5d2ax5,_0x5d2ax17[_0xe4bc[117]]=_0x5d2ax16),_0x5d2ax15+=_0x5d2ax5+this[_0xe4bc[657]]),_0x5d2ax4[_0xe4bc[1724]](_0x5d2ax13,_0x5d2ax17))}}finally{_0x5d2ax4[_0xe4bc[476]]()}}}}};function mxCompactTreeLayout(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){mxGraphLayout[_0xe4bc[239]](this,_0x5d2ax2);this[_0xe4bc[662]]=null!=_0x5d2ax3?_0x5d2ax3:!0;this[_0xe4bc[1744]]=null!=_0x5d2ax4?_0x5d2ax4:!1}mxCompactTreeLayout[_0xe4bc[202]]= new mxGraphLayout;mxCompactTreeLayout[_0xe4bc[202]][_0xe4bc[196]]=mxCompactTreeLayout;mxCompactTreeLayout[_0xe4bc[202]][_0xe4bc[662]]=null;mxCompactTreeLayout[_0xe4bc[202]][_0xe4bc[1744]]=null;mxCompactTreeLayout[_0xe4bc[202]][_0xe4bc[1735]]= !0;mxCompactTreeLayout[_0xe4bc[202]][_0xe4bc[1745]]=10;mxCompactTreeLayout[_0xe4bc[202]][_0xe4bc[1746]]=null;mxCompactTreeLayout[_0xe4bc[202]][_0xe4bc[1747]]= !1;mxCompactTreeLayout[_0xe4bc[202]][_0xe4bc[1748]]=10;mxCompactTreeLayout[_0xe4bc[202]][_0xe4bc[1749]]=20;mxCompactTreeLayout[_0xe4bc[202]][_0xe4bc[1750]]= !0;mxCompactTreeLayout[_0xe4bc[202]][_0xe4bc[1751]]=5;mxCompactTreeLayout[_0xe4bc[202]][_0xe4bc[1752]]=4;mxCompactTreeLayout[_0xe4bc[202]][_0xe4bc[1753]]=8;mxCompactTreeLayout[_0xe4bc[202]][_0xe4bc[1754]]=4;mxCompactTreeLayout[_0xe4bc[202]][_0xe4bc[1755]]= !0;mxCompactTreeLayout[_0xe4bc[202]][_0xe4bc[1713]]=function(_0x5d2ax2){return mxGraphLayout[_0xe4bc[202]][_0xe4bc[1713]][_0xe4bc[183]](this,arguments)||0==this[_0xe4bc[1179]][_0xe4bc[1756]](_0x5d2ax2)[_0xe4bc[67]]};mxCompactTreeLayout[_0xe4bc[202]][_0xe4bc[1737]]=function(){return this[_0xe4bc[662]]};mxCompactTreeLayout[_0xe4bc[202]][_0xe4bc[350]]=function(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[1101]]=_0x5d2ax2;var _0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[502]]();if(null==_0x5d2ax3){if(0<this[_0xe4bc[1179]][_0xe4bc[264]](_0x5d2ax2,_0x5d2ax4[_0xe4bc[1197]](_0x5d2ax2),this[_0xe4bc[1744]],!this[_0xe4bc[1744]],!1)[_0xe4bc[67]]){_0x5d2ax3=_0x5d2ax2}else {var _0x5d2ax5=this[_0xe4bc[1179]][_0xe4bc[1757]](_0x5d2ax2,!0,this[_0xe4bc[1744]]);if(0<_0x5d2ax5[_0xe4bc[67]]){for(var _0x5d2ax9=0;_0x5d2ax9<_0x5d2ax5[_0xe4bc[67]];_0x5d2ax9++){if(!this[_0xe4bc[1713]](_0x5d2ax5[_0x5d2ax9])&&0<this[_0xe4bc[1179]][_0xe4bc[264]](_0x5d2ax5[_0x5d2ax9],null,this[_0xe4bc[1744]],!this[_0xe4bc[1744]],!1)[_0xe4bc[67]]){_0x5d2ax3=_0x5d2ax5[_0x5d2ax9];break}}}}};if(null!=_0x5d2ax3){this[_0xe4bc[1746]]=this[_0xe4bc[1735]]?{}:null;_0x5d2ax4[_0xe4bc[473]]();try{var _0x5d2axa=this[_0xe4bc[1758]](_0x5d2ax3,_0x5d2ax2);if(null!=_0x5d2axa){this[_0xe4bc[1759]](_0x5d2axa);var _0x5d2ax12=this[_0xe4bc[1179]][_0xe4bc[1020]],_0x5d2ax5=_0x5d2ax12;if(!this[_0xe4bc[1747]]){var _0x5d2ax13=this[_0xe4bc[1726]](_0x5d2ax3);null!=_0x5d2ax13&&(_0x5d2ax12=_0x5d2ax13[_0xe4bc[235]],_0x5d2ax5=_0x5d2ax13[_0xe4bc[236]])};_0x5d2ax13=null;_0x5d2ax13=this[_0xe4bc[1737]]()?this[_0xe4bc[1760]](_0x5d2axa,_0x5d2ax12,_0x5d2ax5):this[_0xe4bc[1761]](_0x5d2axa,null,_0x5d2ax12,_0x5d2ax5);if(null!=_0x5d2ax13){var _0x5d2ax14=_0x5d2ax9=0;0>_0x5d2ax13[_0xe4bc[235]]&&(_0x5d2ax9=Math[_0xe4bc[425]](_0x5d2ax12-_0x5d2ax13[_0xe4bc[235]]));0>_0x5d2ax13[_0xe4bc[236]]&&(_0x5d2ax14=Math[_0xe4bc[425]](_0x5d2ax5-_0x5d2ax13[_0xe4bc[236]]));(0!=_0x5d2ax9||0!=_0x5d2ax14)&&this[_0xe4bc[1762]](_0x5d2axa,_0x5d2ax9,_0x5d2ax14);this[_0xe4bc[1735]]&&this[_0xe4bc[1763]]();this[_0xe4bc[1755]]&&this[_0xe4bc[1764]](_0x5d2axa)}}}finally{_0x5d2ax4[_0xe4bc[476]]()}}};mxCompactTreeLayout[_0xe4bc[202]][_0xe4bc[1762]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){_0x5d2ax2[_0xe4bc[235]]+=_0x5d2ax3;_0x5d2ax2[_0xe4bc[236]]+=_0x5d2ax4;this[_0xe4bc[183]](_0x5d2ax2);for(_0x5d2ax2=_0x5d2ax2[_0xe4bc[247]];null!=_0x5d2ax2;){this[_0xe4bc[1762]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4),_0x5d2ax2=_0x5d2ax2[_0xe4bc[1765]]}};mxCompactTreeLayout[_0xe4bc[202]][_0xe4bc[1758]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){_0x5d2ax4=null!=_0x5d2ax4?_0x5d2ax4:[];var _0x5d2ax5=mxCellPath[_0xe4bc[385]](_0x5d2ax2),_0x5d2ax9=null;if(null!=_0x5d2ax2&&null==_0x5d2ax4[_0x5d2ax5]&&!this[_0xe4bc[1713]](_0x5d2ax2)){_0x5d2ax4[_0x5d2ax5]=_0x5d2ax2;var _0x5d2ax9=this[_0xe4bc[1766]](_0x5d2ax2),_0x5d2ax5=this[_0xe4bc[1179]][_0xe4bc[502]](),_0x5d2axa=null;_0x5d2ax2=this[_0xe4bc[1179]][_0xe4bc[264]](_0x5d2ax2,_0x5d2ax3,this[_0xe4bc[1744]],!this[_0xe4bc[1744]],!1,!0);for(var _0x5d2ax12=this[_0xe4bc[1179]][_0xe4bc[249]](),_0x5d2ax13=0;_0x5d2ax13<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax13++){var _0x5d2ax14=_0x5d2ax2[_0x5d2ax13];if(!this[_0xe4bc[1715]](_0x5d2ax14)){this[_0xe4bc[1750]]&&this[_0xe4bc[1722]](_0x5d2ax14,null);this[_0xe4bc[1755]]&&(this[_0xe4bc[1716]](_0x5d2ax14,!1),this[_0xe4bc[1722]](_0x5d2ax14,null));var _0x5d2ax15=_0x5d2ax12[_0xe4bc[248]](_0x5d2ax14),_0x5d2ax14=null!=_0x5d2ax15?_0x5d2ax15[_0xe4bc[1710]](this[_0xe4bc[1744]]):_0x5d2ax12[_0xe4bc[1710]](_0x5d2ax14,this[_0xe4bc[1744]]),_0x5d2ax15=this[_0xe4bc[1758]](_0x5d2ax14,_0x5d2ax3,_0x5d2ax4);null!=_0x5d2ax15&&null!=_0x5d2ax5[_0xe4bc[1721]](_0x5d2ax14)&&(null==_0x5d2axa?_0x5d2ax9[_0xe4bc[247]]=_0x5d2ax15:_0x5d2axa[_0xe4bc[1765]]=_0x5d2ax15,_0x5d2axa=_0x5d2ax15)}}};return _0x5d2ax9};mxCompactTreeLayout[_0xe4bc[202]][_0xe4bc[1759]]=function(_0x5d2ax2){if(null!=_0x5d2ax2){for(var _0x5d2ax3=_0x5d2ax2[_0xe4bc[247]];null!=_0x5d2ax3;){this[_0xe4bc[1759]](_0x5d2ax3),_0x5d2ax3=_0x5d2ax3[_0xe4bc[1765]]};null!=_0x5d2ax2[_0xe4bc[247]]?this[_0xe4bc[1767]](_0x5d2ax2,this[_0xe4bc[234]](_0x5d2ax2)):this[_0xe4bc[1768]](_0x5d2ax2)}};mxCompactTreeLayout[_0xe4bc[202]][_0xe4bc[1760]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){_0x5d2ax2[_0xe4bc[235]]+=_0x5d2ax3+_0x5d2ax2[_0xe4bc[1769]];_0x5d2ax2[_0xe4bc[236]]+=_0x5d2ax4+_0x5d2ax2[_0xe4bc[1770]];_0x5d2ax5=this[_0xe4bc[183]](_0x5d2ax2,_0x5d2ax5);_0x5d2ax3=_0x5d2ax2[_0xe4bc[247]];if(null!=_0x5d2ax3){_0x5d2ax5=this[_0xe4bc[1760]](_0x5d2ax3,_0x5d2ax2[_0xe4bc[235]],_0x5d2ax2[_0xe4bc[236]],_0x5d2ax5);_0x5d2ax4=_0x5d2ax2[_0xe4bc[236]]+_0x5d2ax3[_0xe4bc[1770]];for(var _0x5d2ax9=_0x5d2ax3[_0xe4bc[1765]];null!=_0x5d2ax9;){_0x5d2ax5=this[_0xe4bc[1760]](_0x5d2ax9,_0x5d2ax2[_0xe4bc[235]]+_0x5d2ax3[_0xe4bc[1769]],_0x5d2ax4,_0x5d2ax5),_0x5d2ax4+=_0x5d2ax9[_0xe4bc[1770]],_0x5d2ax9=_0x5d2ax9[_0xe4bc[1765]]}};return _0x5d2ax5};mxCompactTreeLayout[_0xe4bc[202]][_0xe4bc[1761]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){_0x5d2ax2[_0xe4bc[235]]+=_0x5d2ax4+_0x5d2ax2[_0xe4bc[1770]];_0x5d2ax2[_0xe4bc[236]]+=_0x5d2ax5+_0x5d2ax2[_0xe4bc[1769]];_0x5d2ax9=this[_0xe4bc[183]](_0x5d2ax2,_0x5d2ax9);_0x5d2ax3=_0x5d2ax2[_0xe4bc[247]];if(null!=_0x5d2ax3){_0x5d2ax9=this[_0xe4bc[1761]](_0x5d2ax3,_0x5d2ax2,_0x5d2ax2[_0xe4bc[235]],_0x5d2ax2[_0xe4bc[236]],_0x5d2ax9);_0x5d2ax4=_0x5d2ax2[_0xe4bc[235]]+_0x5d2ax3[_0xe4bc[1770]];for(_0x5d2ax5=_0x5d2ax3[_0xe4bc[1765]];null!=_0x5d2ax5;){_0x5d2ax9=this[_0xe4bc[1761]](_0x5d2ax5,_0x5d2ax2,_0x5d2ax4,_0x5d2ax2[_0xe4bc[236]]+_0x5d2ax3[_0xe4bc[1769]],_0x5d2ax9),_0x5d2ax4+=_0x5d2ax5[_0xe4bc[1770]],_0x5d2ax5=_0x5d2ax5[_0xe4bc[1765]]}};return _0x5d2ax9};mxCompactTreeLayout[_0xe4bc[202]][_0xe4bc[1767]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=this[_0xe4bc[1749]]+this[_0xe4bc[1748]],_0x5d2ax5=(_0x5d2ax3-_0x5d2ax2[_0xe4bc[117]])/2-this[_0xe4bc[1749]],_0x5d2ax9=_0x5d2ax5+_0x5d2ax2[_0xe4bc[117]]+2*this[_0xe4bc[1749]]-_0x5d2ax3;_0x5d2ax2[_0xe4bc[247]][_0xe4bc[1769]]=_0x5d2ax4+_0x5d2ax2[_0xe4bc[119]];_0x5d2ax2[_0xe4bc[247]][_0xe4bc[1770]]=_0x5d2ax9;_0x5d2ax2[_0xe4bc[1772]][_0xe4bc[1771]]=this[_0xe4bc[1773]](_0x5d2ax2[_0xe4bc[119]],0,this[_0xe4bc[1773]](_0x5d2ax4,_0x5d2ax9,_0x5d2ax2[_0xe4bc[1772]][_0xe4bc[1771]]));_0x5d2ax2[_0xe4bc[1772]][_0xe4bc[1774]]=this[_0xe4bc[1773]](_0x5d2ax2[_0xe4bc[119]],0,this[_0xe4bc[1773]](_0x5d2ax4,_0x5d2ax5,_0x5d2ax2[_0xe4bc[1772]][_0xe4bc[1774]]))};mxCompactTreeLayout[_0xe4bc[202]][_0xe4bc[1768]]=function(_0x5d2ax2){var _0x5d2ax3=2*this[_0xe4bc[1749]];_0x5d2ax2[_0xe4bc[1772]][_0xe4bc[1775]]=this[_0xe4bc[1773]](_0x5d2ax2[_0xe4bc[119]]+_0x5d2ax3,0);_0x5d2ax2[_0xe4bc[1772]][_0xe4bc[1771]]=_0x5d2ax2[_0xe4bc[1772]][_0xe4bc[1775]];_0x5d2ax2[_0xe4bc[1772]][_0xe4bc[1776]]=this[_0xe4bc[1773]](0,-_0x5d2ax2[_0xe4bc[117]]-_0x5d2ax3);_0x5d2ax2[_0xe4bc[1772]][_0xe4bc[1774]]=this[_0xe4bc[1773]](_0x5d2ax2[_0xe4bc[119]]+_0x5d2ax3,0,_0x5d2ax2[_0xe4bc[1772]][_0xe4bc[1776]])};mxCompactTreeLayout[_0xe4bc[202]][_0xe4bc[234]]=function(_0x5d2ax2){var _0x5d2ax3=2*this[_0xe4bc[1749]],_0x5d2ax4=_0x5d2ax2[_0xe4bc[247]];_0x5d2ax2[_0xe4bc[1772]]=_0x5d2ax4[_0xe4bc[1772]];for(var _0x5d2ax5=_0x5d2ax4[_0xe4bc[117]]+_0x5d2ax3,_0x5d2ax9=_0x5d2ax5,_0x5d2ax4=_0x5d2ax4[_0xe4bc[1765]];null!=_0x5d2ax4;){var _0x5d2axa=this[_0xe4bc[1777]](_0x5d2ax2[_0xe4bc[1772]],_0x5d2ax4[_0xe4bc[1772]]);_0x5d2ax4[_0xe4bc[1770]]=_0x5d2axa+_0x5d2ax5;_0x5d2ax4[_0xe4bc[1769]]=0;_0x5d2ax5=_0x5d2ax4[_0xe4bc[117]]+_0x5d2ax3;_0x5d2ax9+=_0x5d2axa+_0x5d2ax5;_0x5d2ax4=_0x5d2ax4[_0xe4bc[1765]]};return _0x5d2ax9};mxCompactTreeLayout[_0xe4bc[202]][_0xe4bc[1777]]=function(_0x5d2ax2,_0x5d2ax3){for(var _0x5d2ax4=0,_0x5d2ax5=0,_0x5d2ax9=0,_0x5d2axa=_0x5d2ax2[_0xe4bc[1774]],_0x5d2ax12=_0x5d2ax3[_0xe4bc[1771]];null!=_0x5d2ax12&&null!=_0x5d2axa;){var _0x5d2ax13=this[_0xe4bc[1368]](_0x5d2ax4,_0x5d2ax5,_0x5d2ax12[_0xe4bc[1126]],_0x5d2ax12[_0xe4bc[1125]],_0x5d2axa[_0xe4bc[1126]],_0x5d2axa[_0xe4bc[1125]]),_0x5d2ax5=_0x5d2ax5+_0x5d2ax13,_0x5d2ax9=_0x5d2ax9+_0x5d2ax13;_0x5d2ax4+_0x5d2ax12[_0xe4bc[1126]]<=_0x5d2axa[_0xe4bc[1126]]?(_0x5d2ax4+=_0x5d2ax12[_0xe4bc[1126]],_0x5d2ax5+=_0x5d2ax12[_0xe4bc[1125]],_0x5d2ax12=_0x5d2ax12[_0xe4bc[1765]]):(_0x5d2ax4-=_0x5d2axa[_0xe4bc[1126]],_0x5d2ax5-=_0x5d2axa[_0xe4bc[1125]],_0x5d2axa=_0x5d2axa[_0xe4bc[1765]])};null!=_0x5d2ax12?(_0x5d2ax4=this[_0xe4bc[1778]](_0x5d2ax2[_0xe4bc[1775]],0,0,_0x5d2ax12,_0x5d2ax4,_0x5d2ax5),_0x5d2ax2[_0xe4bc[1775]]=null!=_0x5d2ax4[_0xe4bc[1765]]?_0x5d2ax3[_0xe4bc[1775]]:_0x5d2ax4,_0x5d2ax2[_0xe4bc[1776]]=_0x5d2ax3[_0xe4bc[1776]]):(_0x5d2ax4=this[_0xe4bc[1778]](_0x5d2ax3[_0xe4bc[1776]],_0x5d2ax4,_0x5d2ax5,_0x5d2axa,0,0),null==_0x5d2ax4[_0xe4bc[1765]]&&(_0x5d2ax2[_0xe4bc[1776]]=_0x5d2ax4));_0x5d2ax2[_0xe4bc[1774]]=_0x5d2ax3[_0xe4bc[1774]];return _0x5d2ax9};mxCompactTreeLayout[_0xe4bc[202]][_0xe4bc[1368]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa){var _0x5d2ax12=0;if(_0x5d2ax9<=_0x5d2ax2||0>=_0x5d2ax2+_0x5d2ax4){return 0};_0x5d2ax12=0<_0x5d2ax9*_0x5d2ax5-_0x5d2ax4*_0x5d2axa?0>_0x5d2ax2?_0x5d2ax2*_0x5d2ax5/_0x5d2ax4-_0x5d2ax3:0<_0x5d2ax2?_0x5d2ax2*_0x5d2axa/_0x5d2ax9-_0x5d2ax3:-_0x5d2ax3:_0x5d2ax9<_0x5d2ax2+_0x5d2ax4?_0x5d2axa-(_0x5d2ax3+(_0x5d2ax9-_0x5d2ax2)*_0x5d2ax5/_0x5d2ax4):_0x5d2ax9>_0x5d2ax2+_0x5d2ax4?(_0x5d2ax4+_0x5d2ax2)*_0x5d2axa/_0x5d2ax9-(_0x5d2ax3+_0x5d2ax5):_0x5d2axa-(_0x5d2ax3+_0x5d2ax5);return 0<_0x5d2ax12?_0x5d2ax12:0};mxCompactTreeLayout[_0xe4bc[202]][_0xe4bc[1778]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa){_0x5d2ax3=_0x5d2ax9+_0x5d2ax5[_0xe4bc[1126]]-_0x5d2ax3;_0x5d2ax9=_0x5d2ax9=0;0==_0x5d2ax5[_0xe4bc[1126]]?_0x5d2ax9=_0x5d2ax5[_0xe4bc[1125]]:(_0x5d2ax9=_0x5d2ax3*_0x5d2ax5[_0xe4bc[1125]],_0x5d2ax9/=_0x5d2ax5[_0xe4bc[1126]]);_0x5d2ax3=this[_0xe4bc[1773]](_0x5d2ax3,_0x5d2ax9,_0x5d2ax5[_0xe4bc[1765]]);_0x5d2ax2[_0xe4bc[1765]]=this[_0xe4bc[1773]](0,_0x5d2axa+_0x5d2ax5[_0xe4bc[1125]]-_0x5d2ax9-_0x5d2ax4,_0x5d2ax3);return _0x5d2ax3};mxCompactTreeLayout[_0xe4bc[202]][_0xe4bc[1766]]=function(_0x5d2ax2){var _0x5d2ax3={};_0x5d2ax3[_0xe4bc[246]]=_0x5d2ax2;_0x5d2ax3[_0xe4bc[235]]=0;_0x5d2ax3[_0xe4bc[236]]=0;_0x5d2ax3[_0xe4bc[117]]=0;_0x5d2ax3[_0xe4bc[119]]=0;_0x5d2ax2=this[_0xe4bc[1726]](_0x5d2ax2);null!=_0x5d2ax2&&(this[_0xe4bc[1737]]()?(_0x5d2ax3[_0xe4bc[117]]=_0x5d2ax2[_0xe4bc[119]],_0x5d2ax3[_0xe4bc[119]]=_0x5d2ax2[_0xe4bc[117]]):(_0x5d2ax3[_0xe4bc[117]]=_0x5d2ax2[_0xe4bc[117]],_0x5d2ax3[_0xe4bc[119]]=_0x5d2ax2[_0xe4bc[119]]));_0x5d2ax3[_0xe4bc[1769]]=0;_0x5d2ax3[_0xe4bc[1770]]=0;_0x5d2ax3[_0xe4bc[1772]]={};return _0x5d2ax3};mxCompactTreeLayout[_0xe4bc[202]][_0xe4bc[183]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[502]](),_0x5d2ax5=_0x5d2ax2[_0xe4bc[246]],_0x5d2ax9=_0x5d2ax4[_0xe4bc[1721]](_0x5d2ax5);null!=_0x5d2ax5&&null!=_0x5d2ax9&&(this[_0xe4bc[1711]](_0x5d2ax5)&&(_0x5d2ax9=this[_0xe4bc[1725]](_0x5d2ax5,_0x5d2ax2[_0xe4bc[235]],_0x5d2ax2[_0xe4bc[236]]),this[_0xe4bc[1735]]&&(_0x5d2ax4=_0x5d2ax4[_0xe4bc[1197]](_0x5d2ax5),_0x5d2ax5=mxCellPath[_0xe4bc[385]](_0x5d2ax4),null==this[_0xe4bc[1746]][_0x5d2ax5]&&(this[_0xe4bc[1746]][_0x5d2ax5]=_0x5d2ax4))),_0x5d2ax3=null==_0x5d2ax3? new mxRectangle(_0x5d2ax9[_0xe4bc[235]],_0x5d2ax9[_0xe4bc[236]],_0x5d2ax9[_0xe4bc[117]],_0x5d2ax9[_0xe4bc[119]]): new mxRectangle(Math[_0xe4bc[243]](_0x5d2ax3[_0xe4bc[235]],_0x5d2ax9[_0xe4bc[235]]),Math[_0xe4bc[243]](_0x5d2ax3[_0xe4bc[236]],_0x5d2ax9[_0xe4bc[236]]),Math[_0xe4bc[160]](_0x5d2ax3[_0xe4bc[235]]+_0x5d2ax3[_0xe4bc[117]],_0x5d2ax9[_0xe4bc[235]]+_0x5d2ax9[_0xe4bc[117]]),Math[_0xe4bc[160]](_0x5d2ax3[_0xe4bc[236]]+_0x5d2ax3[_0xe4bc[119]],_0x5d2ax9[_0xe4bc[236]]+_0x5d2ax9[_0xe4bc[119]])));return _0x5d2ax3};mxCompactTreeLayout[_0xe4bc[202]][_0xe4bc[1773]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){var _0x5d2ax5={};_0x5d2ax5[_0xe4bc[1126]]=_0x5d2ax2;_0x5d2ax5[_0xe4bc[1125]]=_0x5d2ax3;_0x5d2ax5[_0xe4bc[1765]]=_0x5d2ax4;return _0x5d2ax5};mxCompactTreeLayout[_0xe4bc[202]][_0xe4bc[1763]]=function(){var _0x5d2ax2=[],_0x5d2ax3;for(_0x5d2ax3 in this[_0xe4bc[1746]]){_0x5d2ax2[_0xe4bc[207]](this[_0xe4bc[1746]][_0x5d2ax3])};this[_0xe4bc[1727]](mxUtils[_0xe4bc[1779]](_0x5d2ax2,!0),this[_0xe4bc[1745]])};mxCompactTreeLayout[_0xe4bc[202]][_0xe4bc[1764]]=function(_0x5d2ax2){this[_0xe4bc[1780]](_0x5d2ax2);for(_0x5d2ax2=_0x5d2ax2[_0xe4bc[247]];null!=_0x5d2ax2;){this[_0xe4bc[1764]](_0x5d2ax2),_0x5d2ax2=_0x5d2ax2[_0xe4bc[1765]]}};mxCompactTreeLayout[_0xe4bc[202]][_0xe4bc[1780]]=function(_0x5d2ax2){for(var _0x5d2ax3=_0x5d2ax2[_0xe4bc[247]],_0x5d2ax4=_0x5d2ax2[_0xe4bc[246]],_0x5d2ax5=0,_0x5d2ax9=[];null!=_0x5d2ax3;){_0x5d2ax5++;var _0x5d2axa=_0x5d2ax3[_0xe4bc[235]];this[_0xe4bc[662]]&&(_0x5d2axa=_0x5d2ax3[_0xe4bc[236]]);_0x5d2ax9[_0xe4bc[207]]( new WeightedCellSorter(_0x5d2ax3,_0x5d2axa));_0x5d2ax3=_0x5d2ax3[_0xe4bc[1765]]};_0x5d2ax9[_0xe4bc[470]](WeightedCellSorter[_0xe4bc[202]][_0xe4bc[469]]);var _0x5d2axa=_0x5d2ax2[_0xe4bc[117]],_0x5d2ax12=(_0x5d2ax5+1)*this[_0xe4bc[1751]];_0x5d2axa>_0x5d2ax12+2*this[_0xe4bc[1751]]&&(_0x5d2axa-=2*this[_0xe4bc[1751]]);_0x5d2ax2=_0x5d2axa/_0x5d2ax5;_0x5d2ax3=_0x5d2ax2/2;_0x5d2axa>_0x5d2ax12+2*this[_0xe4bc[1751]]&&(_0x5d2ax3+=this[_0xe4bc[1751]]);for(var _0x5d2axa=this[_0xe4bc[1753]]-this[_0xe4bc[1752]],_0x5d2ax12=0,_0x5d2ax13=this[_0xe4bc[1726]](_0x5d2ax4),_0x5d2ax14=0;_0x5d2ax14<_0x5d2ax9[_0xe4bc[67]];_0x5d2ax14++){for(var _0x5d2ax15=_0x5d2ax9[_0x5d2ax14][_0xe4bc[246]][_0xe4bc[246]],_0x5d2ax16=this[_0xe4bc[1726]](_0x5d2ax15),_0x5d2ax15=this[_0xe4bc[1179]][_0xe4bc[1781]](_0x5d2ax4,_0x5d2ax15,!1),_0x5d2ax17=[],_0x5d2ax18=0,_0x5d2ax19=0,_0x5d2ax1a=0;_0x5d2ax1a<_0x5d2ax15[_0xe4bc[67]];_0x5d2ax1a++){this[_0xe4bc[662]]?(_0x5d2ax18=_0x5d2ax13[_0xe4bc[235]]+_0x5d2ax13[_0xe4bc[117]],_0x5d2ax19=_0x5d2ax13[_0xe4bc[236]]+_0x5d2ax3,_0x5d2ax17[_0xe4bc[207]]( new mxPoint(_0x5d2ax18,_0x5d2ax19)),_0x5d2ax18=_0x5d2ax13[_0xe4bc[235]]+_0x5d2ax13[_0xe4bc[117]]+_0x5d2axa,_0x5d2ax17[_0xe4bc[207]]( new mxPoint(_0x5d2ax18,_0x5d2ax19)),_0x5d2ax19=_0x5d2ax16[_0xe4bc[236]]+_0x5d2ax16[_0xe4bc[119]]/2):(_0x5d2ax18=_0x5d2ax13[_0xe4bc[235]]+_0x5d2ax3,_0x5d2ax19=_0x5d2ax13[_0xe4bc[236]]+_0x5d2ax13[_0xe4bc[119]],_0x5d2ax17[_0xe4bc[207]]( new mxPoint(_0x5d2ax18,_0x5d2ax19)),_0x5d2ax19=_0x5d2ax13[_0xe4bc[236]]+_0x5d2ax13[_0xe4bc[119]]+_0x5d2axa,_0x5d2ax17[_0xe4bc[207]]( new mxPoint(_0x5d2ax18,_0x5d2ax19)),_0x5d2ax18=_0x5d2ax16[_0xe4bc[235]]+_0x5d2ax16[_0xe4bc[117]]/2),_0x5d2ax17[_0xe4bc[207]]( new mxPoint(_0x5d2ax18,_0x5d2ax19)),this[_0xe4bc[1722]](_0x5d2ax15[_0x5d2ax1a],_0x5d2ax17)};_0x5d2ax14<_0x5d2ax5/2?_0x5d2axa+=this[_0xe4bc[1752]]:_0x5d2ax14>_0x5d2ax5/2&&(_0x5d2axa-=this[_0xe4bc[1752]]);_0x5d2ax3+=_0x5d2ax2;_0x5d2ax12=Math[_0xe4bc[160]](_0x5d2ax12,_0x5d2axa)}};function WeightedCellSorter(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[246]]=_0x5d2ax2;this[_0xe4bc[1782]]=_0x5d2ax3}WeightedCellSorter[_0xe4bc[202]][_0xe4bc[1782]]=0;WeightedCellSorter[_0xe4bc[202]][_0xe4bc[1783]]= !1;WeightedCellSorter[_0xe4bc[202]][_0xe4bc[1784]]= !1;WeightedCellSorter[_0xe4bc[202]][_0xe4bc[1785]]=null;WeightedCellSorter[_0xe4bc[202]][_0xe4bc[246]]=null;WeightedCellSorter[_0xe4bc[202]][_0xe4bc[469]]=function(_0x5d2ax2,_0x5d2ax3){return null!=_0x5d2ax2&&null!=_0x5d2ax3?_0x5d2ax3[_0xe4bc[1782]]>_0x5d2ax2[_0xe4bc[1782]]?1:_0x5d2ax3[_0xe4bc[1782]]<_0x5d2ax2[_0xe4bc[1782]]?-1:_0x5d2ax3[_0xe4bc[1783]]?1:-1:0};function mxFastOrganicLayout(_0x5d2ax2){mxGraphLayout[_0xe4bc[239]](this,_0x5d2ax2)}mxFastOrganicLayout[_0xe4bc[202]]= new mxGraphLayout;mxFastOrganicLayout[_0xe4bc[202]][_0xe4bc[196]]=mxFastOrganicLayout;mxFastOrganicLayout[_0xe4bc[202]][_0xe4bc[1786]]= !0;mxFastOrganicLayout[_0xe4bc[202]][_0xe4bc[1750]]= !0;mxFastOrganicLayout[_0xe4bc[202]][_0xe4bc[1787]]= !0;mxFastOrganicLayout[_0xe4bc[202]][_0xe4bc[1788]]=50;mxFastOrganicLayout[_0xe4bc[202]][_0xe4bc[1789]]=0;mxFastOrganicLayout[_0xe4bc[202]][_0xe4bc[1790]]=2;mxFastOrganicLayout[_0xe4bc[202]][_0xe4bc[1791]]=500;mxFastOrganicLayout[_0xe4bc[202]][_0xe4bc[1792]]=4;mxFastOrganicLayout[_0xe4bc[202]][_0xe4bc[1793]]=200;mxFastOrganicLayout[_0xe4bc[202]][_0xe4bc[1794]]=0;mxFastOrganicLayout[_0xe4bc[202]][_0xe4bc[1795]]=0;mxFastOrganicLayout[_0xe4bc[202]][_0xe4bc[1796]]=0;mxFastOrganicLayout[_0xe4bc[202]][_0xe4bc[1797]]= !0;mxFastOrganicLayout[_0xe4bc[202]][_0xe4bc[1713]]=function(_0x5d2ax2){return mxGraphLayout[_0xe4bc[202]][_0xe4bc[1713]][_0xe4bc[183]](this,arguments)||0==this[_0xe4bc[1179]][_0xe4bc[1756]](_0x5d2ax2)[_0xe4bc[67]]};mxFastOrganicLayout[_0xe4bc[202]][_0xe4bc[350]]=function(_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[1179]][_0xe4bc[502]]();this[_0xe4bc[1798]]=[];for(var _0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[1728]](_0x5d2ax2),_0x5d2ax5=0;_0x5d2ax5<_0x5d2ax4[_0xe4bc[67]];_0x5d2ax5++){this[_0xe4bc[1713]](_0x5d2ax4[_0x5d2ax5])||this[_0xe4bc[1798]][_0xe4bc[207]](_0x5d2ax4[_0x5d2ax5])};var _0x5d2ax9=this[_0xe4bc[1786]]?this[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[1799]](this[_0xe4bc[1798]]):null,_0x5d2axa=this[_0xe4bc[1798]][_0xe4bc[67]];this[_0xe4bc[1800]]=[];this[_0xe4bc[1801]]=[];this[_0xe4bc[1802]]=[];this[_0xe4bc[1803]]=[];this[_0xe4bc[1804]]=[];this[_0xe4bc[1805]]=[];this[_0xe4bc[1806]]=[];this[_0xe4bc[1807]]=[];0.0010>this[_0xe4bc[1788]]&&(this[_0xe4bc[1788]]=0.0010);this[_0xe4bc[1789]]=this[_0xe4bc[1788]]*this[_0xe4bc[1788]];for(_0x5d2ax5=0;_0x5d2ax5<this[_0xe4bc[1798]][_0xe4bc[67]];_0x5d2ax5++){var _0x5d2ax12=this[_0xe4bc[1798]][_0x5d2ax5];this[_0xe4bc[1803]][_0x5d2ax5]=[];var _0x5d2ax13=mxCellPath[_0xe4bc[385]](_0x5d2ax12);this[_0xe4bc[1800]][_0x5d2ax13]=_0x5d2ax5;var _0x5d2ax14=this[_0xe4bc[1726]](_0x5d2ax12),_0x5d2ax15=_0x5d2ax14[_0xe4bc[117]],_0x5d2ax16=_0x5d2ax14[_0xe4bc[119]],_0x5d2ax17=_0x5d2ax14[_0xe4bc[235]],_0x5d2ax18=_0x5d2ax14[_0xe4bc[236]];this[_0xe4bc[1803]][_0x5d2ax5][0]=_0x5d2ax17+_0x5d2ax15/2;this[_0xe4bc[1803]][_0x5d2ax5][1]=_0x5d2ax18+_0x5d2ax16/2;this[_0xe4bc[1806]][_0x5d2ax5]=Math[_0xe4bc[243]](_0x5d2ax15,_0x5d2ax16);this[_0xe4bc[1807]][_0x5d2ax5]=this[_0xe4bc[1806]][_0x5d2ax5]*this[_0xe4bc[1806]][_0x5d2ax5]};_0x5d2ax3[_0xe4bc[473]]();try{for(_0x5d2ax5=0;_0x5d2ax5<_0x5d2axa;_0x5d2ax5++){this[_0xe4bc[1801]][_0x5d2ax5]=0;this[_0xe4bc[1802]][_0x5d2ax5]=0;this[_0xe4bc[1804]][_0x5d2ax5]=this[_0xe4bc[1711]](this[_0xe4bc[1798]][_0x5d2ax5]);var _0x5d2ax19=this[_0xe4bc[1179]][_0xe4bc[1756]](this[_0xe4bc[1798]][_0x5d2ax5],_0x5d2ax2),_0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[1808]](_0x5d2ax19,this[_0xe4bc[1798]][_0x5d2ax5]);this[_0xe4bc[1805]][_0x5d2ax5]=[];for(_0x5d2ax15=0;_0x5d2ax15<_0x5d2ax4[_0xe4bc[67]];_0x5d2ax15++){this[_0xe4bc[1750]]&&this[_0xe4bc[1179]][_0xe4bc[1809]](_0x5d2ax19[_0x5d2ax15]);this[_0xe4bc[1787]]&&this[_0xe4bc[1716]](_0x5d2ax19[_0x5d2ax15],!1);var _0x5d2ax13=mxCellPath[_0xe4bc[385]](_0x5d2ax4[_0x5d2ax15]),_0x5d2ax1a=this[_0xe4bc[1800]][_0x5d2ax13];this[_0xe4bc[1805]][_0x5d2ax5][_0x5d2ax15]=null!=_0x5d2ax1a?_0x5d2ax1a:_0x5d2ax5}};this[_0xe4bc[1794]]=this[_0xe4bc[1793]];0==this[_0xe4bc[1795]]&&(this[_0xe4bc[1795]]=20*Math[_0xe4bc[428]](_0x5d2axa));for(this[_0xe4bc[1796]]=0;this[_0xe4bc[1796]]<this[_0xe4bc[1795]];this[_0xe4bc[1796]]++){if(!this[_0xe4bc[1797]]){return};this[_0xe4bc[1810]]();this[_0xe4bc[1811]]();this[_0xe4bc[1812]]();this[_0xe4bc[1813]]()};_0x5d2ax2=_0x5d2ax4=null;for(_0x5d2ax5=0;_0x5d2ax5<this[_0xe4bc[1798]][_0xe4bc[67]];_0x5d2ax5++){_0x5d2ax12=this[_0xe4bc[1798]][_0x5d2ax5],this[_0xe4bc[1711]](_0x5d2ax12)&&(_0x5d2ax14=this[_0xe4bc[1726]](_0x5d2ax12),null!=_0x5d2ax14&&(this[_0xe4bc[1803]][_0x5d2ax5][0]-=_0x5d2ax14[_0xe4bc[117]]/2,this[_0xe4bc[1803]][_0x5d2ax5][1]-=_0x5d2ax14[_0xe4bc[119]]/2,_0x5d2ax17=this[_0xe4bc[1179]][_0xe4bc[1021]](this[_0xe4bc[1803]][_0x5d2ax5][0]),_0x5d2ax18=this[_0xe4bc[1179]][_0xe4bc[1021]](this[_0xe4bc[1803]][_0x5d2ax5][1]),this[_0xe4bc[1725]](_0x5d2ax12,_0x5d2ax17,_0x5d2ax18),_0x5d2ax4=null==_0x5d2ax4?_0x5d2ax17:Math[_0xe4bc[243]](_0x5d2ax4,_0x5d2ax17),_0x5d2ax2=null==_0x5d2ax2?_0x5d2ax18:Math[_0xe4bc[243]](_0x5d2ax2,_0x5d2ax18)))};_0x5d2ax5=-(_0x5d2ax4||0)+1;_0x5d2ax12=-(_0x5d2ax2||0)+1;null!=_0x5d2ax9&&(_0x5d2ax5+=_0x5d2ax9[_0xe4bc[235]],_0x5d2ax12+=_0x5d2ax9[_0xe4bc[236]]);this[_0xe4bc[1179]][_0xe4bc[834]](this[_0xe4bc[1798]],_0x5d2ax5,_0x5d2ax12)}finally{_0x5d2ax3[_0xe4bc[476]]()}};mxFastOrganicLayout[_0xe4bc[202]][_0xe4bc[1812]]=function(){for(var _0x5d2ax2=0;_0x5d2ax2<this[_0xe4bc[1798]][_0xe4bc[67]];_0x5d2ax2++){if(this[_0xe4bc[1804]][_0x5d2ax2]){var _0x5d2ax3=Math[_0xe4bc[428]](this[_0xe4bc[1801]][_0x5d2ax2]*this[_0xe4bc[1801]][_0x5d2ax2]+this[_0xe4bc[1802]][_0x5d2ax2]*this[_0xe4bc[1802]][_0x5d2ax2]);0.0010>_0x5d2ax3&&(_0x5d2ax3=0.0010);var _0x5d2ax4=this[_0xe4bc[1801]][_0x5d2ax2]/_0x5d2ax3*Math[_0xe4bc[243]](_0x5d2ax3,this[_0xe4bc[1794]]),_0x5d2ax3=this[_0xe4bc[1802]][_0x5d2ax2]/_0x5d2ax3*Math[_0xe4bc[243]](_0x5d2ax3,this[_0xe4bc[1794]]);this[_0xe4bc[1801]][_0x5d2ax2]=0;this[_0xe4bc[1802]][_0x5d2ax2]=0;this[_0xe4bc[1803]][_0x5d2ax2][0]+=_0x5d2ax4;this[_0xe4bc[1803]][_0x5d2ax2][1]+=_0x5d2ax3}}};mxFastOrganicLayout[_0xe4bc[202]][_0xe4bc[1811]]=function(){for(var _0x5d2ax2=0;_0x5d2ax2<this[_0xe4bc[1798]][_0xe4bc[67]];_0x5d2ax2++){for(var _0x5d2ax3=0;_0x5d2ax3<this[_0xe4bc[1805]][_0x5d2ax2][_0xe4bc[67]];_0x5d2ax3++){var _0x5d2ax4=this[_0xe4bc[1805]][_0x5d2ax2][_0x5d2ax3];if(_0x5d2ax2!=_0x5d2ax4&&this[_0xe4bc[1804]][_0x5d2ax2]&&this[_0xe4bc[1804]][_0x5d2ax4]){var _0x5d2ax5=this[_0xe4bc[1803]][_0x5d2ax2][0]-this[_0xe4bc[1803]][_0x5d2ax4][0],_0x5d2ax9=this[_0xe4bc[1803]][_0x5d2ax2][1]-this[_0xe4bc[1803]][_0x5d2ax4][1],_0x5d2axa=_0x5d2ax5*_0x5d2ax5+_0x5d2ax9*_0x5d2ax9-this[_0xe4bc[1807]][_0x5d2ax2]-this[_0xe4bc[1807]][_0x5d2ax4];_0x5d2axa<this[_0xe4bc[1792]]&&(_0x5d2axa=this[_0xe4bc[1792]]);var _0x5d2ax12=Math[_0xe4bc[428]](_0x5d2axa),_0x5d2axa=_0x5d2axa/this[_0xe4bc[1788]],_0x5d2ax5=_0x5d2ax5/_0x5d2ax12*_0x5d2axa,_0x5d2ax9=_0x5d2ax9/_0x5d2ax12*_0x5d2axa;this[_0xe4bc[1801]][_0x5d2ax2]-=_0x5d2ax5;this[_0xe4bc[1802]][_0x5d2ax2]-=_0x5d2ax9;this[_0xe4bc[1801]][_0x5d2ax4]+=_0x5d2ax5;this[_0xe4bc[1802]][_0x5d2ax4]+=_0x5d2ax9}}}};mxFastOrganicLayout[_0xe4bc[202]][_0xe4bc[1810]]=function(){for(var _0x5d2ax2=this[_0xe4bc[1798]][_0xe4bc[67]],_0x5d2ax3=0;_0x5d2ax3<_0x5d2ax2;_0x5d2ax3++){for(var _0x5d2ax4=_0x5d2ax3;_0x5d2ax4<_0x5d2ax2;_0x5d2ax4++){if(!this[_0xe4bc[1797]]){return};if(_0x5d2ax4!=_0x5d2ax3&&this[_0xe4bc[1804]][_0x5d2ax3]&&this[_0xe4bc[1804]][_0x5d2ax4]){var _0x5d2ax5=this[_0xe4bc[1803]][_0x5d2ax3][0]-this[_0xe4bc[1803]][_0x5d2ax4][0],_0x5d2ax9=this[_0xe4bc[1803]][_0x5d2ax3][1]-this[_0xe4bc[1803]][_0x5d2ax4][1];0==_0x5d2ax5&&(_0x5d2ax5=0.01+Math[_0xe4bc[1814]]());0==_0x5d2ax9&&(_0x5d2ax9=0.01+Math[_0xe4bc[1814]]());var _0x5d2axa=Math[_0xe4bc[428]](_0x5d2ax5*_0x5d2ax5+_0x5d2ax9*_0x5d2ax9),_0x5d2ax12=_0x5d2axa-this[_0xe4bc[1806]][_0x5d2ax3]-this[_0xe4bc[1806]][_0x5d2ax4];_0x5d2ax12>this[_0xe4bc[1791]]||(_0x5d2ax12<this[_0xe4bc[1790]]&&(_0x5d2ax12=this[_0xe4bc[1790]]),_0x5d2ax12=this[_0xe4bc[1789]]/_0x5d2ax12,_0x5d2ax5=_0x5d2ax5/_0x5d2axa*_0x5d2ax12,_0x5d2ax9=_0x5d2ax9/_0x5d2axa*_0x5d2ax12,this[_0xe4bc[1801]][_0x5d2ax3]+=_0x5d2ax5,this[_0xe4bc[1802]][_0x5d2ax3]+=_0x5d2ax9,this[_0xe4bc[1801]][_0x5d2ax4]-=_0x5d2ax5,this[_0xe4bc[1802]][_0x5d2ax4]-=_0x5d2ax9)}}}};mxFastOrganicLayout[_0xe4bc[202]][_0xe4bc[1813]]=function(){this[_0xe4bc[1794]]=this[_0xe4bc[1793]]*(1-this[_0xe4bc[1796]]/this[_0xe4bc[1795]])};function mxCircleLayout(_0x5d2ax2,_0x5d2ax3){mxGraphLayout[_0xe4bc[239]](this,_0x5d2ax2);this[_0xe4bc[1806]]=null!=_0x5d2ax3?_0x5d2ax3:100}mxCircleLayout[_0xe4bc[202]]= new mxGraphLayout;mxCircleLayout[_0xe4bc[202]][_0xe4bc[196]]=mxCircleLayout;mxCircleLayout[_0xe4bc[202]][_0xe4bc[1806]]=null;mxCircleLayout[_0xe4bc[202]][_0xe4bc[1815]]= !1;mxCircleLayout[_0xe4bc[202]][_0xe4bc[1732]]=0;mxCircleLayout[_0xe4bc[202]][_0xe4bc[1733]]=0;mxCircleLayout[_0xe4bc[202]][_0xe4bc[1750]]= !0;mxCircleLayout[_0xe4bc[202]][_0xe4bc[1787]]= !0;mxCircleLayout[_0xe4bc[202]][_0xe4bc[350]]=function(_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[1179]][_0xe4bc[502]]();_0x5d2ax3[_0xe4bc[473]]();try{for(var _0x5d2ax4=0,_0x5d2ax5=null,_0x5d2ax9=null,_0x5d2axa=[],_0x5d2ax12=_0x5d2ax3[_0xe4bc[262]](_0x5d2ax2),_0x5d2ax13=0;_0x5d2ax13<_0x5d2ax12;_0x5d2ax13++){var _0x5d2ax14=_0x5d2ax3[_0xe4bc[263]](_0x5d2ax2,_0x5d2ax13);if(this[_0xe4bc[1713]](_0x5d2ax14)){this[_0xe4bc[1715]](_0x5d2ax14)||(this[_0xe4bc[1750]]&&this[_0xe4bc[1179]][_0xe4bc[1809]](_0x5d2ax14),this[_0xe4bc[1787]]&&this[_0xe4bc[1716]](_0x5d2ax14,!1))}else {_0x5d2axa[_0xe4bc[207]](_0x5d2ax14);var _0x5d2ax15=this[_0xe4bc[1726]](_0x5d2ax14),_0x5d2ax5=null==_0x5d2ax5?_0x5d2ax15[_0xe4bc[236]]:Math[_0xe4bc[243]](_0x5d2ax5,_0x5d2ax15[_0xe4bc[236]]),_0x5d2ax9=null==_0x5d2ax9?_0x5d2ax15[_0xe4bc[235]]:Math[_0xe4bc[243]](_0x5d2ax9,_0x5d2ax15[_0xe4bc[235]]),_0x5d2ax4=Math[_0xe4bc[160]](_0x5d2ax4,Math[_0xe4bc[160]](_0x5d2ax15[_0xe4bc[117]],_0x5d2ax15[_0xe4bc[119]]))}};var _0x5d2ax16=this[_0xe4bc[1816]](_0x5d2axa[_0xe4bc[67]],_0x5d2ax4);this[_0xe4bc[1815]]&&(_0x5d2ax9=this[_0xe4bc[1732]],_0x5d2ax5=this[_0xe4bc[1733]]);this[_0xe4bc[1817]](_0x5d2axa,_0x5d2ax16,_0x5d2ax9,_0x5d2ax5)}finally{_0x5d2ax3[_0xe4bc[476]]()}};mxCircleLayout[_0xe4bc[202]][_0xe4bc[1816]]=function(_0x5d2ax2,_0x5d2ax3){return Math[_0xe4bc[160]](_0x5d2ax2*_0x5d2ax3/Math[_0xe4bc[424]],this[_0xe4bc[1806]])};mxCircleLayout[_0xe4bc[202]][_0xe4bc[1817]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){for(var _0x5d2ax9=_0x5d2ax2[_0xe4bc[67]],_0x5d2axa=2*Math[_0xe4bc[424]]/_0x5d2ax9,_0x5d2ax12=0;_0x5d2ax12<_0x5d2ax9;_0x5d2ax12++){this[_0xe4bc[1711]](_0x5d2ax2[_0x5d2ax12])&&this[_0xe4bc[1725]](_0x5d2ax2[_0x5d2ax12],_0x5d2ax4+_0x5d2ax3+_0x5d2ax3*Math[_0xe4bc[427]](_0x5d2ax12*_0x5d2axa),_0x5d2ax5+_0x5d2ax3+_0x5d2ax3*Math[_0xe4bc[426]](_0x5d2ax12*_0x5d2axa))}};function mxParallelEdgeLayout(_0x5d2ax2){mxGraphLayout[_0xe4bc[239]](this,_0x5d2ax2)}mxParallelEdgeLayout[_0xe4bc[202]]= new mxGraphLayout;mxParallelEdgeLayout[_0xe4bc[202]][_0xe4bc[196]]=mxParallelEdgeLayout;mxParallelEdgeLayout[_0xe4bc[202]][_0xe4bc[657]]=20;mxParallelEdgeLayout[_0xe4bc[202]][_0xe4bc[350]]=function(_0x5d2ax2){_0x5d2ax2=this[_0xe4bc[1818]](_0x5d2ax2);this[_0xe4bc[1179]][_0xe4bc[251]][_0xe4bc[473]]();try{for(var _0x5d2ax3 in _0x5d2ax2){var _0x5d2ax4=_0x5d2ax2[_0x5d2ax3];1<_0x5d2ax4[_0xe4bc[67]]&&this[_0xe4bc[1759]](_0x5d2ax4)}}finally{this[_0xe4bc[1179]][_0xe4bc[251]][_0xe4bc[476]]()}};mxParallelEdgeLayout[_0xe4bc[202]][_0xe4bc[1818]]=function(_0x5d2ax2){for(var _0x5d2ax3=this[_0xe4bc[1179]][_0xe4bc[502]](),_0x5d2ax4=[],_0x5d2ax5=_0x5d2ax3[_0xe4bc[262]](_0x5d2ax2),_0x5d2ax9=0;_0x5d2ax9<_0x5d2ax5;_0x5d2ax9++){var _0x5d2axa=_0x5d2ax3[_0xe4bc[263]](_0x5d2ax2,_0x5d2ax9);if(!this[_0xe4bc[1715]](_0x5d2axa)){var _0x5d2ax12=this[_0xe4bc[1819]](_0x5d2axa);null!=_0x5d2ax12&&(null==_0x5d2ax4[_0x5d2ax12]&&(_0x5d2ax4[_0x5d2ax12]=[]),_0x5d2ax4[_0x5d2ax12][_0xe4bc[207]](_0x5d2axa))}};return _0x5d2ax4};mxParallelEdgeLayout[_0xe4bc[202]][_0xe4bc[1819]]=function(_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[1179]][_0xe4bc[249]](),_0x5d2ax4=_0x5d2ax3[_0xe4bc[248]](_0x5d2ax2),_0x5d2ax5=null!=_0x5d2ax4?_0x5d2ax4[_0xe4bc[1710]](!0):_0x5d2ax3[_0xe4bc[1710]](_0x5d2ax2,!0);_0x5d2ax2=null!=_0x5d2ax4?_0x5d2ax4[_0xe4bc[1710]](!1):_0x5d2ax3[_0xe4bc[1710]](_0x5d2ax2,!1);return null!=_0x5d2ax5&&null!=_0x5d2ax2?(_0x5d2ax5=mxCellPath[_0xe4bc[385]](_0x5d2ax5),_0x5d2ax2=mxCellPath[_0xe4bc[385]](_0x5d2ax2),_0x5d2ax5>_0x5d2ax2?_0x5d2ax2+_0xe4bc[213]+_0x5d2ax5:_0x5d2ax5+_0xe4bc[213]+_0x5d2ax2):null};mxParallelEdgeLayout[_0xe4bc[202]][_0xe4bc[1759]]=function(_0x5d2ax2){var _0x5d2ax3=_0x5d2ax2[0],_0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[502]](),_0x5d2ax5=_0x5d2ax4[_0xe4bc[1721]](_0x5d2ax4[_0xe4bc[1709]](_0x5d2ax3,!0)),_0x5d2ax9=_0x5d2ax4[_0xe4bc[1721]](_0x5d2ax4[_0xe4bc[1709]](_0x5d2ax3,!1));if(_0x5d2ax5==_0x5d2ax9){for(var _0x5d2ax3=_0x5d2ax5[_0xe4bc[235]]+_0x5d2ax5[_0xe4bc[117]]+this[_0xe4bc[657]],_0x5d2ax4=_0x5d2ax5[_0xe4bc[236]]+_0x5d2ax5[_0xe4bc[119]]/2,_0x5d2axa=0;_0x5d2axa<_0x5d2ax2[_0xe4bc[67]];_0x5d2axa++){this[_0xe4bc[1820]](_0x5d2ax2[_0x5d2axa],_0x5d2ax3,_0x5d2ax4),_0x5d2ax3+=this[_0xe4bc[657]]}}else {if(null!=_0x5d2ax5&&null!=_0x5d2ax9){for(var _0x5d2ax3=_0x5d2ax5[_0xe4bc[235]]+_0x5d2ax5[_0xe4bc[117]]/2,_0x5d2ax4=_0x5d2ax5[_0xe4bc[236]]+_0x5d2ax5[_0xe4bc[119]]/2,_0x5d2axa=_0x5d2ax9[_0xe4bc[235]]+_0x5d2ax9[_0xe4bc[117]]/2-_0x5d2ax3,_0x5d2ax12=_0x5d2ax9[_0xe4bc[236]]+_0x5d2ax9[_0xe4bc[119]]/2-_0x5d2ax4,_0x5d2ax9=Math[_0xe4bc[428]](_0x5d2axa*_0x5d2axa+_0x5d2ax12*_0x5d2ax12),_0x5d2ax5=_0x5d2ax12*this[_0xe4bc[657]]/_0x5d2ax9,_0x5d2ax9=_0x5d2axa*this[_0xe4bc[657]]/_0x5d2ax9,_0x5d2ax3=_0x5d2ax3+_0x5d2axa/2+_0x5d2ax5*(_0x5d2ax2[_0xe4bc[67]]-1)/2,_0x5d2ax4=_0x5d2ax4+_0x5d2ax12/2-_0x5d2ax9*(_0x5d2ax2[_0xe4bc[67]]-1)/2,_0x5d2axa=0;_0x5d2axa<_0x5d2ax2[_0xe4bc[67]];_0x5d2axa++){this[_0xe4bc[1820]](_0x5d2ax2[_0x5d2axa],_0x5d2ax3,_0x5d2ax4),_0x5d2ax3-=_0x5d2ax5,_0x5d2ax4+=_0x5d2ax9}}}};mxParallelEdgeLayout[_0xe4bc[202]][_0xe4bc[1820]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){this[_0xe4bc[1179]][_0xe4bc[1712]](_0x5d2ax2)&&this[_0xe4bc[1722]](_0x5d2ax2,[ new mxPoint(_0x5d2ax3,_0x5d2ax4)])};function mxCompositeLayout(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){mxGraphLayout[_0xe4bc[239]](this,_0x5d2ax2);this[_0xe4bc[1821]]=_0x5d2ax3;this[_0xe4bc[1822]]=_0x5d2ax4}mxCompositeLayout[_0xe4bc[202]]= new mxGraphLayout;mxCompositeLayout[_0xe4bc[202]][_0xe4bc[196]]=mxCompositeLayout;mxCompositeLayout[_0xe4bc[202]][_0xe4bc[1821]]=null;mxCompositeLayout[_0xe4bc[202]][_0xe4bc[1822]]=null;mxCompositeLayout[_0xe4bc[202]][_0xe4bc[1702]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){null!=this[_0xe4bc[1822]]?this[_0xe4bc[1822]][_0xe4bc[582]][_0xe4bc[183]](this[_0xe4bc[1822]],arguments):this[_0xe4bc[1821]][0][_0xe4bc[582]][_0xe4bc[183]](this[_0xe4bc[1821]][0],arguments)};mxCompositeLayout[_0xe4bc[202]][_0xe4bc[350]]=function(_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[1179]][_0xe4bc[502]]();_0x5d2ax3[_0xe4bc[473]]();try{for(var _0x5d2ax4=0;_0x5d2ax4<this[_0xe4bc[1821]][_0xe4bc[67]];_0x5d2ax4++){this[_0xe4bc[1821]][_0x5d2ax4][_0xe4bc[350]][_0xe4bc[183]](this[_0xe4bc[1821]][_0x5d2ax4],arguments)}}finally{_0x5d2ax3[_0xe4bc[476]]()}};function mxEdgeLabelLayout(_0x5d2ax2,_0x5d2ax3){mxGraphLayout[_0xe4bc[239]](this,_0x5d2ax2)}mxEdgeLabelLayout[_0xe4bc[202]]= new mxGraphLayout;mxEdgeLabelLayout[_0xe4bc[202]][_0xe4bc[196]]=mxEdgeLabelLayout;mxEdgeLabelLayout[_0xe4bc[202]][_0xe4bc[350]]=function(_0x5d2ax2){for(var _0x5d2ax3=this[_0xe4bc[1179]][_0xe4bc[441]],_0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[502]](),_0x5d2ax5=[],_0x5d2ax9=[],_0x5d2axa=_0x5d2ax4[_0xe4bc[262]](_0x5d2ax2),_0x5d2ax12=0;_0x5d2ax12<_0x5d2axa;_0x5d2ax12++){var _0x5d2ax13=_0x5d2ax4[_0xe4bc[263]](_0x5d2ax2,_0x5d2ax12),_0x5d2ax14=_0x5d2ax3[_0xe4bc[248]](_0x5d2ax13);null!=_0x5d2ax14&&(this[_0xe4bc[1713]](_0x5d2ax13)?this[_0xe4bc[1715]](_0x5d2ax13)||_0x5d2ax5[_0xe4bc[207]](_0x5d2ax14):_0x5d2ax9[_0xe4bc[207]](_0x5d2ax14))};this[_0xe4bc[1823]](_0x5d2ax9,_0x5d2ax5)};mxEdgeLabelLayout[_0xe4bc[202]][_0xe4bc[1823]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[502]]();_0x5d2ax4[_0xe4bc[473]]();try{for(var _0x5d2ax5=0;_0x5d2ax5<_0x5d2ax3[_0xe4bc[67]];_0x5d2ax5++){var _0x5d2ax9=_0x5d2ax3[_0x5d2ax5];if(null!=_0x5d2ax9&&null!=_0x5d2ax9[_0xe4bc[963]]&&null!=_0x5d2ax9[_0xe4bc[963]][_0xe4bc[1563]]){for(var _0x5d2axa=0;_0x5d2axa<_0x5d2ax2[_0xe4bc[67]];_0x5d2axa++){var _0x5d2ax12=_0x5d2ax2[_0x5d2axa];null!=_0x5d2ax12&&this[_0xe4bc[1824]](_0x5d2ax9,_0x5d2ax12)}}}}finally{_0x5d2ax4[_0xe4bc[476]]()}};mxEdgeLabelLayout[_0xe4bc[202]][_0xe4bc[1824]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[502]](),_0x5d2ax5=_0x5d2ax2[_0xe4bc[963]][_0xe4bc[1563]];if(mxUtils[_0xe4bc[1825]](_0x5d2ax5,_0x5d2ax3)){var _0x5d2ax9=-_0x5d2ax5[_0xe4bc[236]]-_0x5d2ax5[_0xe4bc[119]]+_0x5d2ax3[_0xe4bc[236]],_0x5d2axa=-_0x5d2ax5[_0xe4bc[236]]+_0x5d2ax3[_0xe4bc[236]]+_0x5d2ax3[_0xe4bc[119]],_0x5d2ax9=Math[_0xe4bc[425]](_0x5d2ax9)<Math[_0xe4bc[425]](_0x5d2axa)?_0x5d2ax9:_0x5d2axa,_0x5d2axa=-_0x5d2ax5[_0xe4bc[235]]-_0x5d2ax5[_0xe4bc[117]]+_0x5d2ax3[_0xe4bc[235]],_0x5d2ax5=-_0x5d2ax5[_0xe4bc[235]]+_0x5d2ax3[_0xe4bc[235]]+_0x5d2ax3[_0xe4bc[117]],_0x5d2ax5=Math[_0xe4bc[425]](_0x5d2axa)<Math[_0xe4bc[425]](_0x5d2ax5)?_0x5d2axa:_0x5d2ax5;Math[_0xe4bc[425]](_0x5d2ax5)<Math[_0xe4bc[425]](_0x5d2ax9)?_0x5d2ax9=0:_0x5d2ax5=0;_0x5d2axa=_0x5d2ax4[_0xe4bc[1721]](_0x5d2ax2[_0xe4bc[246]]);null!=_0x5d2axa&&(_0x5d2axa=_0x5d2axa[_0xe4bc[238]](),null!=_0x5d2axa[_0xe4bc[1368]]?(_0x5d2axa[_0xe4bc[1368]][_0xe4bc[235]]+=_0x5d2ax5,_0x5d2axa[_0xe4bc[1368]][_0xe4bc[236]]+=_0x5d2ax9):_0x5d2axa[_0xe4bc[1368]]= new mxPoint(_0x5d2ax5,_0x5d2ax9),_0x5d2ax4[_0xe4bc[1724]](_0x5d2ax2[_0xe4bc[246]],_0x5d2axa))}};function mxGraphAbstractHierarchyCell(){this[_0xe4bc[235]]=[];this[_0xe4bc[236]]=[];this[_0xe4bc[1826]]=[]}mxGraphAbstractHierarchyCell[_0xe4bc[202]][_0xe4bc[1827]]= -1;mxGraphAbstractHierarchyCell[_0xe4bc[202]][_0xe4bc[1828]]= -1;mxGraphAbstractHierarchyCell[_0xe4bc[202]][_0xe4bc[235]]=null;mxGraphAbstractHierarchyCell[_0xe4bc[202]][_0xe4bc[236]]=null;mxGraphAbstractHierarchyCell[_0xe4bc[202]][_0xe4bc[117]]=0;mxGraphAbstractHierarchyCell[_0xe4bc[202]][_0xe4bc[119]]=0;mxGraphAbstractHierarchyCell[_0xe4bc[202]][_0xe4bc[1829]]=null;mxGraphAbstractHierarchyCell[_0xe4bc[202]][_0xe4bc[1830]]=null;mxGraphAbstractHierarchyCell[_0xe4bc[202]][_0xe4bc[1826]]=null;mxGraphAbstractHierarchyCell[_0xe4bc[202]][_0xe4bc[1831]]=function(_0x5d2ax2){return null};mxGraphAbstractHierarchyCell[_0xe4bc[202]][_0xe4bc[1832]]=function(_0x5d2ax2){return null};mxGraphAbstractHierarchyCell[_0xe4bc[202]][_0xe4bc[250]]=function(){return !1};mxGraphAbstractHierarchyCell[_0xe4bc[202]][_0xe4bc[1193]]=function(){return !1};mxGraphAbstractHierarchyCell[_0xe4bc[202]][_0xe4bc[1833]]=function(_0x5d2ax2){return null};mxGraphAbstractHierarchyCell[_0xe4bc[202]][_0xe4bc[1834]]=function(_0x5d2ax2,_0x5d2ax3){return null};mxGraphAbstractHierarchyCell[_0xe4bc[202]][_0xe4bc[1835]]=function(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[1193]]()?this[_0xe4bc[235]][0]=_0x5d2ax3:this[_0xe4bc[250]]()&&(this[_0xe4bc[235]][_0x5d2ax2-this[_0xe4bc[1828]]-1]=_0x5d2ax3)};mxGraphAbstractHierarchyCell[_0xe4bc[202]][_0xe4bc[730]]=function(_0x5d2ax2){return this[_0xe4bc[1193]]()?this[_0xe4bc[235]][0]:this[_0xe4bc[250]]()?this[_0xe4bc[235]][_0x5d2ax2-this[_0xe4bc[1828]]-1]:0};mxGraphAbstractHierarchyCell[_0xe4bc[202]][_0xe4bc[1836]]=function(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[1193]]()?this[_0xe4bc[236]][0]=_0x5d2ax3:this[_0xe4bc[250]]()&&(this[_0xe4bc[236]][_0x5d2ax2-this[_0xe4bc[1828]]-1]=_0x5d2ax3)};function mxGraphHierarchyNode(_0x5d2ax2){mxGraphAbstractHierarchyCell[_0xe4bc[183]](this,arguments);this[_0xe4bc[246]]=_0x5d2ax2}mxGraphHierarchyNode[_0xe4bc[202]]= new mxGraphAbstractHierarchyCell;mxGraphHierarchyNode[_0xe4bc[202]][_0xe4bc[196]]=mxGraphHierarchyNode;mxGraphHierarchyNode[_0xe4bc[202]][_0xe4bc[246]]=null;mxGraphHierarchyNode[_0xe4bc[202]][_0xe4bc[1837]]=[];mxGraphHierarchyNode[_0xe4bc[202]][_0xe4bc[1838]]=[];mxGraphHierarchyNode[_0xe4bc[202]][_0xe4bc[1839]]= !1;mxGraphHierarchyNode[_0xe4bc[202]][_0xe4bc[1840]]=function(_0x5d2ax2){return this[_0xe4bc[1827]]};mxGraphHierarchyNode[_0xe4bc[202]][_0xe4bc[1831]]=function(_0x5d2ax2){if(null==this[_0xe4bc[1829]]){this[_0xe4bc[1829]]=[];this[_0xe4bc[1829]][0]=[];for(var _0x5d2ax3=0;_0x5d2ax3<this[_0xe4bc[1837]][_0xe4bc[67]];_0x5d2ax3++){var _0x5d2ax4=this[_0xe4bc[1837]][_0x5d2ax3];-1==_0x5d2ax4[_0xe4bc[1827]]||_0x5d2ax4[_0xe4bc[1827]]==_0x5d2ax2+1?this[_0xe4bc[1829]][0][_0xe4bc[207]](_0x5d2ax4[_0xe4bc[1097]]):this[_0xe4bc[1829]][0][_0xe4bc[207]](_0x5d2ax4)}};return this[_0xe4bc[1829]][0]};mxGraphHierarchyNode[_0xe4bc[202]][_0xe4bc[1832]]=function(_0x5d2ax2){if(null==this[_0xe4bc[1830]]){this[_0xe4bc[1830]]=[];this[_0xe4bc[1830]][0]=[];for(var _0x5d2ax3=0;_0x5d2ax3<this[_0xe4bc[1838]][_0xe4bc[67]];_0x5d2ax3++){var _0x5d2ax4=this[_0xe4bc[1838]][_0x5d2ax3];-1==_0x5d2ax4[_0xe4bc[1828]]||_0x5d2ax4[_0xe4bc[1828]]==_0x5d2ax2-1?this[_0xe4bc[1830]][0][_0xe4bc[207]](_0x5d2ax4[_0xe4bc[772]]):this[_0xe4bc[1830]][0][_0xe4bc[207]](_0x5d2ax4)}};return this[_0xe4bc[1830]][0]};mxGraphHierarchyNode[_0xe4bc[202]][_0xe4bc[1193]]=function(){return !0};mxGraphHierarchyNode[_0xe4bc[202]][_0xe4bc[1833]]=function(_0x5d2ax2){return this[_0xe4bc[1826]][0]};mxGraphHierarchyNode[_0xe4bc[202]][_0xe4bc[1834]]=function(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[1826]][0]=_0x5d2ax3};mxGraphHierarchyNode[_0xe4bc[202]][_0xe4bc[1720]]=function(_0x5d2ax2){if(null!=_0x5d2ax2&&null!=this[_0xe4bc[1839]]&&null!=_0x5d2ax2[_0xe4bc[1839]]&&this[_0xe4bc[1839]][_0xe4bc[67]]<_0x5d2ax2[_0xe4bc[1839]][_0xe4bc[67]]){if(this[_0xe4bc[1839]]==_0x5d2ax2[_0xe4bc[1839]]){return !0};if(null==this[_0xe4bc[1839]]||null==this[_0xe4bc[1839]]){return !1};for(var _0x5d2ax3=0;_0x5d2ax3<this[_0xe4bc[1839]][_0xe4bc[67]];_0x5d2ax3++){if(this[_0xe4bc[1839]][_0x5d2ax3]!=_0x5d2ax2[_0xe4bc[1839]][_0x5d2ax3]){return !1}};return !0};return !1};mxGraphHierarchyNode[_0xe4bc[202]][_0xe4bc[1841]]=function(){return this[_0xe4bc[246]]};function mxGraphHierarchyEdge(_0x5d2ax2){mxGraphAbstractHierarchyCell[_0xe4bc[183]](this,arguments);this[_0xe4bc[1842]]=_0x5d2ax2}mxGraphHierarchyEdge[_0xe4bc[202]]= new mxGraphAbstractHierarchyCell;mxGraphHierarchyEdge[_0xe4bc[202]][_0xe4bc[196]]=mxGraphHierarchyEdge;mxGraphHierarchyEdge[_0xe4bc[202]][_0xe4bc[1842]]=null;mxGraphHierarchyEdge[_0xe4bc[202]][_0xe4bc[1097]]=null;mxGraphHierarchyEdge[_0xe4bc[202]][_0xe4bc[772]]=null;mxGraphHierarchyEdge[_0xe4bc[202]][_0xe4bc[1843]]= !1;mxGraphHierarchyEdge[_0xe4bc[202]][_0xe4bc[1744]]=function(_0x5d2ax2){_0x5d2ax2=this[_0xe4bc[1097]];this[_0xe4bc[1097]]=this[_0xe4bc[772]];this[_0xe4bc[772]]=_0x5d2ax2;this[_0xe4bc[1843]]=!this[_0xe4bc[1843]]};mxGraphHierarchyEdge[_0xe4bc[202]][_0xe4bc[1831]]=function(_0x5d2ax2){if(null==this[_0xe4bc[1829]]){this[_0xe4bc[1829]]=[];for(var _0x5d2ax3=0;_0x5d2ax3<this[_0xe4bc[1826]][_0xe4bc[67]];_0x5d2ax3++){this[_0xe4bc[1829]][_0x5d2ax3]=[],_0x5d2ax3==this[_0xe4bc[1826]][_0xe4bc[67]]-1?this[_0xe4bc[1829]][_0x5d2ax3][_0xe4bc[207]](this[_0xe4bc[1097]]):this[_0xe4bc[1829]][_0x5d2ax3][_0xe4bc[207]](this)}};return this[_0xe4bc[1829]][_0x5d2ax2-this[_0xe4bc[1828]]-1]};mxGraphHierarchyEdge[_0xe4bc[202]][_0xe4bc[1832]]=function(_0x5d2ax2){if(null==this[_0xe4bc[1830]]){this[_0xe4bc[1830]]=[];for(var _0x5d2ax3=0;_0x5d2ax3<this[_0xe4bc[1826]][_0xe4bc[67]];_0x5d2ax3++){this[_0xe4bc[1830]][_0x5d2ax3]=[],0==_0x5d2ax3?this[_0xe4bc[1830]][_0x5d2ax3][_0xe4bc[207]](this[_0xe4bc[772]]):this[_0xe4bc[1830]][_0x5d2ax3][_0xe4bc[207]](this)}};return this[_0xe4bc[1830]][_0x5d2ax2-this[_0xe4bc[1828]]-1]};mxGraphHierarchyEdge[_0xe4bc[202]][_0xe4bc[250]]=function(){return !0};mxGraphHierarchyEdge[_0xe4bc[202]][_0xe4bc[1833]]=function(_0x5d2ax2){return this[_0xe4bc[1826]][_0x5d2ax2-this[_0xe4bc[1828]]-1]};mxGraphHierarchyEdge[_0xe4bc[202]][_0xe4bc[1834]]=function(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[1826]][_0x5d2ax2-this[_0xe4bc[1828]]-1]=_0x5d2ax3};mxGraphHierarchyEdge[_0xe4bc[202]][_0xe4bc[1841]]=function(){return null!=this[_0xe4bc[1842]]&&0<this[_0xe4bc[1842]][_0xe4bc[67]]?this[_0xe4bc[1842]][0]:null};function mxGraphHierarchyModel(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){_0x5d2ax2[_0xe4bc[1703]]();this[_0xe4bc[1844]]=_0x5d2ax9;this[_0xe4bc[1845]]=_0x5d2ax4;this[_0xe4bc[1101]]=_0x5d2ax5;this[_0xe4bc[1846]]={};this[_0xe4bc[1847]]={};this[_0xe4bc[1827]]=0;_0x5d2ax4=[];null==_0x5d2ax3&&(_0x5d2ax3=this[_0xe4bc[1179]][_0xe4bc[1728]](_0x5d2ax5));this[_0xe4bc[1827]]=this[_0xe4bc[1848]];this[_0xe4bc[1849]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4);for(_0x5d2ax5=0;_0x5d2ax5<_0x5d2ax3[_0xe4bc[67]];_0x5d2ax5++){_0x5d2ax9=_0x5d2ax4[_0x5d2ax5][_0xe4bc[1838]];for(var _0x5d2axa=0;_0x5d2axa<_0x5d2ax9[_0xe4bc[67]];_0x5d2axa++){var _0x5d2ax12=_0x5d2ax9[_0x5d2axa],_0x5d2ax13=_0x5d2ax12[_0xe4bc[1842]];if(null!=_0x5d2ax13&&0<_0x5d2ax13[_0xe4bc[67]]){var _0x5d2ax13=_0x5d2ax13[0],_0x5d2ax14=_0x5d2ax2[_0xe4bc[1710]](_0x5d2ax13,!1),_0x5d2ax14=mxCellPath[_0xe4bc[385]](_0x5d2ax14),_0x5d2ax14=this[_0xe4bc[1846]][_0x5d2ax14];_0x5d2ax4[_0x5d2ax5]==_0x5d2ax14&&(_0x5d2ax14=_0x5d2ax2[_0xe4bc[1710]](_0x5d2ax13,!0),_0x5d2ax14=mxCellPath[_0xe4bc[385]](_0x5d2ax14),_0x5d2ax14=this[_0xe4bc[1846]][_0x5d2ax14]);null!=_0x5d2ax14&&_0x5d2ax4[_0x5d2ax5]!=_0x5d2ax14&&(_0x5d2ax12[_0xe4bc[772]]=_0x5d2ax14,0==_0x5d2ax14[_0xe4bc[1837]][_0xe4bc[67]]&&(_0x5d2ax14[_0xe4bc[1837]]=[]),0>mxUtils[_0xe4bc[2]](_0x5d2ax14[_0xe4bc[1837]],_0x5d2ax12)&&_0x5d2ax14[_0xe4bc[1837]][_0xe4bc[207]](_0x5d2ax12))}};_0x5d2ax4[_0x5d2ax5][_0xe4bc[1826]][0]=1}}mxGraphHierarchyModel[_0xe4bc[202]][_0xe4bc[1827]]=null;mxGraphHierarchyModel[_0xe4bc[202]][_0xe4bc[1846]]=null;mxGraphHierarchyModel[_0xe4bc[202]][_0xe4bc[1847]]=null;mxGraphHierarchyModel[_0xe4bc[202]][_0xe4bc[1850]]=null;mxGraphHierarchyModel[_0xe4bc[202]][_0xe4bc[1845]]=null;mxGraphHierarchyModel[_0xe4bc[202]][_0xe4bc[1101]]=null;mxGraphHierarchyModel[_0xe4bc[202]][_0xe4bc[1851]]=0;mxGraphHierarchyModel[_0xe4bc[202]][_0xe4bc[1848]]=1E8;mxGraphHierarchyModel[_0xe4bc[202]][_0xe4bc[1844]]= !1;mxGraphHierarchyModel[_0xe4bc[202]][_0xe4bc[1849]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){for(var _0x5d2ax5=_0x5d2ax2[_0xe4bc[1703]](),_0x5d2ax9=0;_0x5d2ax9<_0x5d2ax3[_0xe4bc[67]];_0x5d2ax9++){_0x5d2ax4[_0x5d2ax9]= new mxGraphHierarchyNode(_0x5d2ax3[_0x5d2ax9]);var _0x5d2axa=mxCellPath[_0xe4bc[385]](_0x5d2ax3[_0x5d2ax9]);this[_0xe4bc[1846]][_0x5d2axa]=_0x5d2ax4[_0x5d2ax9];_0x5d2axa=_0x5d2ax2[_0xe4bc[264]](_0x5d2ax3[_0x5d2ax9]);_0x5d2ax4[_0x5d2ax9][_0xe4bc[1838]]=[];for(var _0x5d2ax12=0;_0x5d2ax12<_0x5d2axa[_0xe4bc[67]];_0x5d2ax12++){var _0x5d2ax13=_0x5d2ax2[_0xe4bc[1710]](_0x5d2axa[_0x5d2ax12],!1);if(_0x5d2ax13!=_0x5d2ax3[_0x5d2ax9]&&_0x5d2ax13!=_0x5d2ax3[_0x5d2ax9]&&_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[251]][_0xe4bc[1193]](_0x5d2ax13)&&!_0x5d2ax2[_0xe4bc[1713]](_0x5d2ax13)){var _0x5d2ax14=_0x5d2ax2[_0xe4bc[1781]](_0x5d2ax3[_0x5d2ax9],_0x5d2ax13,!1),_0x5d2ax15=_0x5d2ax2[_0xe4bc[1781]](_0x5d2ax3[_0x5d2ax9],_0x5d2ax13,!0),_0x5d2ax13=mxCellPath[_0xe4bc[385]](_0x5d2ax14[0]);if(null!=_0x5d2ax14&&0<_0x5d2ax14[_0xe4bc[67]]&&null==this[_0xe4bc[1847]][_0x5d2ax13]&&2*_0x5d2ax15[_0xe4bc[67]]>=_0x5d2ax14[_0xe4bc[67]]){for(var _0x5d2ax15= new mxGraphHierarchyEdge(_0x5d2ax14),_0x5d2ax16=0;_0x5d2ax16<_0x5d2ax14[_0xe4bc[67]];_0x5d2ax16++){var _0x5d2ax17=_0x5d2ax14[_0x5d2ax16],_0x5d2ax13=mxCellPath[_0xe4bc[385]](_0x5d2ax17);this[_0xe4bc[1847]][_0x5d2ax13]=_0x5d2ax15;_0x5d2ax5[_0xe4bc[1809]](_0x5d2ax17);_0x5d2ax2[_0xe4bc[1787]]&&(_0x5d2ax2[_0xe4bc[1716]](_0x5d2ax17,!1),_0x5d2ax2[_0xe4bc[1718]](_0x5d2ax17,!0))};_0x5d2ax15[_0xe4bc[1097]]=_0x5d2ax4[_0x5d2ax9];0>mxUtils[_0xe4bc[2]](_0x5d2ax4[_0x5d2ax9][_0xe4bc[1838]],_0x5d2ax15)&&_0x5d2ax4[_0x5d2ax9][_0xe4bc[1838]][_0xe4bc[207]](_0x5d2ax15)}}};_0x5d2ax4[_0x5d2ax9][_0xe4bc[1826]][0]=0}};mxGraphHierarchyModel[_0xe4bc[202]][_0xe4bc[1852]]=function(){var _0x5d2ax2=[];if(null!=this[_0xe4bc[1845]]){for(var _0x5d2ax3=0;_0x5d2ax3<this[_0xe4bc[1845]][_0xe4bc[67]];_0x5d2ax3++){var _0x5d2ax4=mxCellPath[_0xe4bc[385]](this[_0xe4bc[1845]][_0x5d2ax3]),_0x5d2ax4=this[_0xe4bc[1846]][_0x5d2ax4];null!=_0x5d2ax4&&_0x5d2ax2[_0xe4bc[207]](_0x5d2ax4)}};for(var _0x5d2ax5 in this[_0xe4bc[1846]]){_0x5d2ax4=this[_0xe4bc[1846]][_0x5d2ax5],_0x5d2ax4[_0xe4bc[1826]][0]= -1};for(var _0x5d2ax9=_0x5d2ax2[_0xe4bc[1853]]();0<_0x5d2ax2[_0xe4bc[67]];){var _0x5d2ax4=_0x5d2ax2[0],_0x5d2axa,_0x5d2ax12;_0x5d2axa=_0x5d2ax4[_0xe4bc[1837]];_0x5d2ax12=_0x5d2ax4[_0xe4bc[1838]];for(var _0x5d2ax13=!0,_0x5d2ax14=this[_0xe4bc[1848]],_0x5d2ax3=0;_0x5d2ax3<_0x5d2axa[_0xe4bc[67]];_0x5d2ax3++){var _0x5d2ax15=_0x5d2axa[_0x5d2ax3];if(5270620==_0x5d2ax15[_0xe4bc[1826]][0]){_0x5d2ax15=_0x5d2ax15[_0xe4bc[1097]],_0x5d2ax14=Math[_0xe4bc[243]](_0x5d2ax14,_0x5d2ax15[_0xe4bc[1826]][0]-1)}else {_0x5d2ax13= !1;break}};if(_0x5d2ax13){_0x5d2ax4[_0xe4bc[1826]][0]=_0x5d2ax14;this[_0xe4bc[1827]]=Math[_0xe4bc[243]](this[_0xe4bc[1827]],_0x5d2ax14);if(null!=_0x5d2ax12){for(_0x5d2ax3=0;_0x5d2ax3<_0x5d2ax12[_0xe4bc[67]];_0x5d2ax3++){_0x5d2ax15=_0x5d2ax12[_0x5d2ax3],_0x5d2ax15[_0xe4bc[1826]][0]=5270620,_0x5d2ax15=_0x5d2ax15[_0xe4bc[772]],-1==_0x5d2ax15[_0xe4bc[1826]][0]&&(_0x5d2ax2[_0xe4bc[207]](_0x5d2ax15),_0x5d2ax15[_0xe4bc[1826]][0]= -2)}};_0x5d2ax2[_0xe4bc[1115]]()}else {if(_0x5d2ax3=_0x5d2ax2[_0xe4bc[1115]](),_0x5d2ax2[_0xe4bc[207]](_0x5d2ax4),_0x5d2ax3==_0x5d2ax4&&1==_0x5d2ax2[_0xe4bc[67]]){break}}};for(_0x5d2ax5 in this[_0xe4bc[1846]]){_0x5d2ax4=this[_0xe4bc[1846]][_0x5d2ax5],_0x5d2ax4[_0xe4bc[1826]][0]-=this[_0xe4bc[1827]]};for(_0x5d2ax3=0;_0x5d2ax3<_0x5d2ax9[_0xe4bc[67]];_0x5d2ax3++){_0x5d2ax4=_0x5d2ax9[_0x5d2ax3];_0x5d2ax2=0;_0x5d2axa=_0x5d2ax4[_0xe4bc[1838]];for(_0x5d2ax5=0;_0x5d2ax5<_0x5d2axa[_0xe4bc[67]];_0x5d2ax5++){_0x5d2ax15=_0x5d2axa[_0x5d2ax5],_0x5d2ax15=_0x5d2ax15[_0xe4bc[772]],_0x5d2ax4[_0xe4bc[1826]][0]=Math[_0xe4bc[160]](_0x5d2ax2,_0x5d2ax15[_0xe4bc[1826]][0]+1),_0x5d2ax2=_0x5d2ax4[_0xe4bc[1826]][0]}};this[_0xe4bc[1827]]=this[_0xe4bc[1848]]-this[_0xe4bc[1827]]};mxGraphHierarchyModel[_0xe4bc[202]][_0xe4bc[1854]]=function(){var _0x5d2ax2=[];this[_0xe4bc[1850]]=[];for(var _0x5d2ax3=0;_0x5d2ax3<this[_0xe4bc[1827]]+1;_0x5d2ax3++){_0x5d2ax2[_0x5d2ax3]=[],this[_0xe4bc[1850]][_0x5d2ax3]=_0x5d2ax2[_0x5d2ax3]};var _0x5d2ax4=null;if(null!=this[_0xe4bc[1845]]){for(var _0x5d2ax5=this[_0xe4bc[1845]],_0x5d2ax4=[],_0x5d2ax3=0;_0x5d2ax3<_0x5d2ax5[_0xe4bc[67]];_0x5d2ax3++){var _0x5d2ax9=mxCellPath[_0xe4bc[385]](_0x5d2ax5[_0x5d2ax3]);_0x5d2ax4[_0x5d2ax3]=this[_0xe4bc[1846]][_0x5d2ax9]}};this[_0xe4bc[209]](function(_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2ax15){0==_0x5d2ax15&&(0>_0x5d2ax4[_0xe4bc[1827]]&&0>_0x5d2ax4[_0xe4bc[1828]])&&(_0x5d2ax2[_0x5d2ax4[_0xe4bc[1826]][0]][_0xe4bc[207]](_0x5d2ax4),_0x5d2ax4[_0xe4bc[1827]]=_0x5d2ax4[_0xe4bc[1826]][0],_0x5d2ax4[_0xe4bc[1828]]=_0x5d2ax4[_0xe4bc[1826]][0],_0x5d2ax4[_0xe4bc[1826]][0]=_0x5d2ax2[_0x5d2ax4[_0xe4bc[1827]]][_0xe4bc[67]]-1);if(null!=_0x5d2ax3&&null!=_0x5d2ax5&&1<_0x5d2ax3[_0xe4bc[1827]]-_0x5d2ax4[_0xe4bc[1827]]){_0x5d2ax5[_0xe4bc[1827]]=_0x5d2ax3[_0xe4bc[1827]];_0x5d2ax5[_0xe4bc[1828]]=_0x5d2ax4[_0xe4bc[1827]];_0x5d2ax5[_0xe4bc[1826]]=[];_0x5d2ax5[_0xe4bc[235]]=[];_0x5d2ax5[_0xe4bc[236]]=[];for(_0x5d2ax3=_0x5d2ax5[_0xe4bc[1828]]+1;_0x5d2ax3<_0x5d2ax5[_0xe4bc[1827]];_0x5d2ax3++){_0x5d2ax2[_0x5d2ax3][_0xe4bc[207]](_0x5d2ax5),_0x5d2ax5[_0xe4bc[1834]](_0x5d2ax3,_0x5d2ax2[_0x5d2ax3][_0xe4bc[67]]-1)}}},_0x5d2ax4,!1,null)};mxGraphHierarchyModel[_0xe4bc[202]][_0xe4bc[209]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){if(null!=_0x5d2ax3){for(var _0x5d2ax9=0;_0x5d2ax9<_0x5d2ax3[_0xe4bc[67]];_0x5d2ax9++){var _0x5d2axa=_0x5d2ax3[_0x5d2ax9];null!=_0x5d2axa&&(null==_0x5d2ax5&&(_0x5d2ax5={}),_0x5d2ax4?(_0x5d2axa[_0xe4bc[1839]]=[],_0x5d2axa[_0xe4bc[1839]][0]=this[_0xe4bc[1851]],_0x5d2axa[_0xe4bc[1839]][1]=_0x5d2ax9,this[_0xe4bc[1855]](null,_0x5d2axa,null,_0x5d2ax2,_0x5d2ax5,_0x5d2axa[_0xe4bc[1839]],_0x5d2ax9,0)):this[_0xe4bc[1758]](null,_0x5d2axa,null,_0x5d2ax2,_0x5d2ax5,0))};this[_0xe4bc[1851]]++}};mxGraphHierarchyModel[_0xe4bc[202]][_0xe4bc[1758]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa){if(null!=_0x5d2ax3){var _0x5d2ax12=mxCellPath[_0xe4bc[385]](_0x5d2ax3[_0xe4bc[246]]);if(null==_0x5d2ax9[_0x5d2ax12]){_0x5d2ax9[_0x5d2ax12]=_0x5d2ax3;_0x5d2ax5(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2axa,0);_0x5d2ax2=_0x5d2ax3[_0xe4bc[1838]][_0xe4bc[1853]]();for(_0x5d2ax4=0;_0x5d2ax4<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax4++){_0x5d2ax12=_0x5d2ax2[_0x5d2ax4],this[_0xe4bc[1758]](_0x5d2ax3,_0x5d2ax12[_0xe4bc[772]],_0x5d2ax12,_0x5d2ax5,_0x5d2ax9,_0x5d2axa+1)}}else {_0x5d2ax5(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2axa,1)}}};mxGraphHierarchyModel[_0xe4bc[202]][_0xe4bc[1855]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa,_0x5d2ax12,_0x5d2ax13){if(null!=_0x5d2ax3){if(null!=_0x5d2ax2&&(null==_0x5d2ax3[_0xe4bc[1839]]||_0x5d2ax3[_0xe4bc[1839]][0]!=_0x5d2ax2[_0xe4bc[1839]][0])){_0x5d2axa=_0x5d2ax2[_0xe4bc[1839]][_0xe4bc[67]]+1,_0x5d2ax3[_0xe4bc[1839]]=_0x5d2ax2[_0xe4bc[1839]][_0xe4bc[1853]](),_0x5d2ax3[_0xe4bc[1839]][_0x5d2axa-1]=_0x5d2ax12};_0x5d2ax12=mxCellPath[_0xe4bc[385]](_0x5d2ax3[_0xe4bc[246]]);if(null==_0x5d2ax9[_0x5d2ax12]){_0x5d2ax9[_0x5d2ax12]=_0x5d2ax3;_0x5d2ax5(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax13,0);_0x5d2ax2=_0x5d2ax3[_0xe4bc[1838]][_0xe4bc[1853]]();for(_0x5d2ax4=0;_0x5d2ax4<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax4++){_0x5d2ax12=_0x5d2ax2[_0x5d2ax4],this[_0xe4bc[1855]](_0x5d2ax3,_0x5d2ax12[_0xe4bc[772]],_0x5d2ax12,_0x5d2ax5,_0x5d2ax9,_0x5d2ax3[_0xe4bc[1839]],_0x5d2ax4,_0x5d2ax13+1)}}else {_0x5d2ax5(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax13,1)}}};function mxHierarchicalLayoutStage(){}mxHierarchicalLayoutStage[_0xe4bc[202]][_0xe4bc[350]]=function(_0x5d2ax2){};function mxMedianHybridCrossingReduction(_0x5d2ax2){this[_0xe4bc[1759]]=_0x5d2ax2}mxMedianHybridCrossingReduction[_0xe4bc[202]]= new mxHierarchicalLayoutStage;mxMedianHybridCrossingReduction[_0xe4bc[202]][_0xe4bc[196]]=mxMedianHybridCrossingReduction;mxMedianHybridCrossingReduction[_0xe4bc[202]][_0xe4bc[1759]]=null;mxMedianHybridCrossingReduction[_0xe4bc[202]][_0xe4bc[1795]]=24;mxMedianHybridCrossingReduction[_0xe4bc[202]][_0xe4bc[1856]]=null;mxMedianHybridCrossingReduction[_0xe4bc[202]][_0xe4bc[1857]]=0;mxMedianHybridCrossingReduction[_0xe4bc[202]][_0xe4bc[1858]]=0;mxMedianHybridCrossingReduction[_0xe4bc[202]][_0xe4bc[1859]]=2;mxMedianHybridCrossingReduction[_0xe4bc[202]][_0xe4bc[350]]=function(_0x5d2ax2){_0x5d2ax2=this[_0xe4bc[1759]][_0xe4bc[502]]();this[_0xe4bc[1856]]=[];for(var _0x5d2ax3=0;_0x5d2ax3<_0x5d2ax2[_0xe4bc[1850]][_0xe4bc[67]];_0x5d2ax3++){this[_0xe4bc[1856]][_0x5d2ax3]=_0x5d2ax2[_0xe4bc[1850]][_0x5d2ax3][_0xe4bc[1853]]()};for(var _0x5d2ax4=0,_0x5d2ax5=this[_0xe4bc[1860]](_0x5d2ax2),_0x5d2ax3=0;_0x5d2ax3<this[_0xe4bc[1795]]&&_0x5d2ax4<this[_0xe4bc[1859]];_0x5d2ax3++){this[_0xe4bc[1861]](_0x5d2ax3,_0x5d2ax2);this[_0xe4bc[1862]](_0x5d2ax3,_0x5d2ax2);var _0x5d2ax9=this[_0xe4bc[1860]](_0x5d2ax2);if(_0x5d2ax9<_0x5d2ax5){_0x5d2ax5=_0x5d2ax9;for(_0x5d2ax9=_0x5d2ax4=0;_0x5d2ax9<this[_0xe4bc[1856]][_0xe4bc[67]];_0x5d2ax9++){for(var _0x5d2axa=_0x5d2ax2[_0xe4bc[1850]][_0x5d2ax9],_0x5d2ax12=0;_0x5d2ax12<_0x5d2axa[_0xe4bc[67]];_0x5d2ax12++){var _0x5d2ax13=_0x5d2axa[_0x5d2ax12];this[_0xe4bc[1856]][_0x5d2ax9][_0x5d2ax13[_0xe4bc[1833]](_0x5d2ax9)]=_0x5d2ax13}}}else {_0x5d2ax4++;for(_0x5d2ax9=0;_0x5d2ax9<this[_0xe4bc[1856]][_0xe4bc[67]];_0x5d2ax9++){_0x5d2axa=_0x5d2ax2[_0xe4bc[1850]][_0x5d2ax9];for(_0x5d2ax12=0;_0x5d2ax12<_0x5d2axa[_0xe4bc[67]];_0x5d2ax12++){_0x5d2ax13=_0x5d2axa[_0x5d2ax12],_0x5d2ax13[_0xe4bc[1834]](_0x5d2ax9,_0x5d2ax12)}}};if(0==_0x5d2ax5){break}};_0x5d2ax4=[];_0x5d2ax5=[];for(_0x5d2ax3=0;_0x5d2ax3<_0x5d2ax2[_0xe4bc[1827]]+1;_0x5d2ax3++){_0x5d2ax5[_0x5d2ax3]=[],_0x5d2ax4[_0x5d2ax3]=_0x5d2ax5[_0x5d2ax3]};for(_0x5d2ax3=0;_0x5d2ax3<this[_0xe4bc[1856]][_0xe4bc[67]];_0x5d2ax3++){for(_0x5d2ax9=0;_0x5d2ax9<this[_0xe4bc[1856]][_0x5d2ax3][_0xe4bc[67]];_0x5d2ax9++){_0x5d2ax5[_0x5d2ax3][_0xe4bc[207]](this[_0xe4bc[1856]][_0x5d2ax3][_0x5d2ax9])}};_0x5d2ax2[_0xe4bc[1850]]=_0x5d2ax4};mxMedianHybridCrossingReduction[_0xe4bc[202]][_0xe4bc[1860]]=function(_0x5d2ax2){for(var _0x5d2ax3=_0x5d2ax2[_0xe4bc[1850]][_0xe4bc[67]],_0x5d2ax4=0,_0x5d2ax5=1;_0x5d2ax5<_0x5d2ax3;_0x5d2ax5++){_0x5d2ax4+=this[_0xe4bc[1863]](_0x5d2ax5,_0x5d2ax2)};return _0x5d2ax4};mxMedianHybridCrossingReduction[_0xe4bc[202]][_0xe4bc[1863]]=function(_0x5d2ax2,_0x5d2ax3){for(var _0x5d2ax4=0,_0x5d2ax5=_0x5d2ax3[_0xe4bc[1850]][_0x5d2ax2],_0x5d2ax9=_0x5d2ax5[_0xe4bc[67]],_0x5d2axa=_0x5d2ax3[_0xe4bc[1850]][_0x5d2ax2-1][_0xe4bc[67]],_0x5d2ax12=[],_0x5d2ax13=0;_0x5d2ax13<_0x5d2ax9;_0x5d2ax13++){_0x5d2ax12[_0x5d2ax13]=[]};for(_0x5d2ax13=0;_0x5d2ax13<_0x5d2ax5[_0xe4bc[67]];_0x5d2ax13++){for(var _0x5d2ax14=_0x5d2ax5[_0x5d2ax13],_0x5d2ax15=_0x5d2ax14[_0xe4bc[1833]](_0x5d2ax2),_0x5d2ax16=_0x5d2ax14[_0xe4bc[1832]](_0x5d2ax2),_0x5d2ax14=0;_0x5d2ax14<_0x5d2ax16[_0xe4bc[67]];_0x5d2ax14++){var _0x5d2ax17=_0x5d2ax16[_0x5d2ax14][_0xe4bc[1833]](_0x5d2ax2-1);_0x5d2ax12[_0x5d2ax15][_0x5d2ax17]=201207}};for(_0x5d2ax13=0;_0x5d2ax13<_0x5d2ax9;_0x5d2ax13++){for(_0x5d2ax14=0;_0x5d2ax14<_0x5d2axa;_0x5d2ax14++){if(201207==_0x5d2ax12[_0x5d2ax13][_0x5d2ax14]){for(_0x5d2ax5=_0x5d2ax13+1;_0x5d2ax5<_0x5d2ax9;_0x5d2ax5++){for(_0x5d2ax15=0;_0x5d2ax15<_0x5d2ax14;_0x5d2ax15++){201207==_0x5d2ax12[_0x5d2ax5][_0x5d2ax15]&&_0x5d2ax4++}};for(_0x5d2ax5=0;_0x5d2ax5<_0x5d2ax13;_0x5d2ax5++){for(_0x5d2ax15=_0x5d2ax14+1;_0x5d2ax15<_0x5d2axa;_0x5d2ax15++){201207==_0x5d2ax12[_0x5d2ax5][_0x5d2ax15]&&_0x5d2ax4++}}}}};return _0x5d2ax4/2};mxMedianHybridCrossingReduction[_0xe4bc[202]][_0xe4bc[1862]]=function(_0x5d2ax2,_0x5d2ax3){for(var _0x5d2ax4=!0,_0x5d2ax5=0;_0x5d2ax4&&10>_0x5d2ax5++;){for(var _0x5d2ax9=1==_0x5d2ax2%2&&1==_0x5d2ax5%2,_0x5d2ax4=!1,_0x5d2axa=0;_0x5d2axa<_0x5d2ax3[_0xe4bc[1850]][_0xe4bc[67]];_0x5d2axa++){for(var _0x5d2ax12=_0x5d2ax3[_0xe4bc[1850]][_0x5d2axa],_0x5d2ax13=[],_0x5d2ax14=0;_0x5d2ax14<_0x5d2ax12[_0xe4bc[67]];_0x5d2ax14++){var _0x5d2ax15=_0x5d2ax12[_0x5d2ax14],_0x5d2ax16=_0x5d2ax15[_0xe4bc[1833]](_0x5d2axa);0>_0x5d2ax16&&(_0x5d2ax16=_0x5d2ax14);_0x5d2ax13[_0x5d2ax16]=_0x5d2ax15};for(var _0x5d2ax17=_0x5d2ax16=_0x5d2ax15=null,_0x5d2ax18=null,_0x5d2ax19=null,_0x5d2ax1a=null,_0x5d2ax1b=null,_0x5d2ax1c=null,_0x5d2ax1d=null,_0x5d2ax1e=null,_0x5d2ax14=0;_0x5d2ax14<_0x5d2ax12[_0xe4bc[67]]-1;_0x5d2ax14++){if(0==_0x5d2ax14){for(var _0x5d2ax1d=_0x5d2ax13[_0x5d2ax14],_0x5d2ax15=_0x5d2ax1d[_0xe4bc[1831]](_0x5d2axa),_0x5d2ax16=_0x5d2ax1d[_0xe4bc[1832]](_0x5d2axa),_0x5d2ax19=[],_0x5d2ax1a=[],_0x5d2ax1f=0;_0x5d2ax1f<_0x5d2ax15[_0xe4bc[67]];_0x5d2ax1f++){_0x5d2ax19[_0x5d2ax1f]=_0x5d2ax15[_0x5d2ax1f][_0xe4bc[1833]](_0x5d2axa+1)};for(_0x5d2ax1f=0;_0x5d2ax1f<_0x5d2ax16[_0xe4bc[67]];_0x5d2ax1f++){_0x5d2ax1a[_0x5d2ax1f]=_0x5d2ax16[_0x5d2ax1f][_0xe4bc[1833]](_0x5d2axa-1)}}else {_0x5d2ax15=_0x5d2ax17,_0x5d2ax16=_0x5d2ax18,_0x5d2ax19=_0x5d2ax1b,_0x5d2ax1a=_0x5d2ax1c,_0x5d2ax1d=_0x5d2ax1e};_0x5d2ax1e=_0x5d2ax13[_0x5d2ax14+1];_0x5d2ax17=_0x5d2ax1e[_0xe4bc[1831]](_0x5d2axa);_0x5d2ax18=_0x5d2ax1e[_0xe4bc[1832]](_0x5d2axa);_0x5d2ax1b=[];_0x5d2ax1c=[];for(_0x5d2ax1f=0;_0x5d2ax1f<_0x5d2ax17[_0xe4bc[67]];_0x5d2ax1f++){_0x5d2ax1b[_0x5d2ax1f]=_0x5d2ax17[_0x5d2ax1f][_0xe4bc[1833]](_0x5d2axa+1)};for(_0x5d2ax1f=0;_0x5d2ax1f<_0x5d2ax18[_0xe4bc[67]];_0x5d2ax1f++){_0x5d2ax1c[_0x5d2ax1f]=_0x5d2ax18[_0x5d2ax1f][_0xe4bc[1833]](_0x5d2axa-1)};for(var _0x5d2ax20=0,_0x5d2ax62=0,_0x5d2ax1f=0;_0x5d2ax1f<_0x5d2ax19[_0xe4bc[67]];_0x5d2ax1f++){for(var _0x5d2ax63=0;_0x5d2ax63<_0x5d2ax1b[_0xe4bc[67]];_0x5d2ax63++){_0x5d2ax19[_0x5d2ax1f]>_0x5d2ax1b[_0x5d2ax63]&&_0x5d2ax20++,_0x5d2ax19[_0x5d2ax1f]<_0x5d2ax1b[_0x5d2ax63]&&_0x5d2ax62++}};for(_0x5d2ax1f=0;_0x5d2ax1f<_0x5d2ax1a[_0xe4bc[67]];_0x5d2ax1f++){for(_0x5d2ax63=0;_0x5d2ax63<_0x5d2ax1c[_0xe4bc[67]];_0x5d2ax63++){_0x5d2ax1a[_0x5d2ax1f]>_0x5d2ax1c[_0x5d2ax63]&&_0x5d2ax20++,_0x5d2ax1a[_0x5d2ax1f]<_0x5d2ax1c[_0x5d2ax63]&&_0x5d2ax62++}};if(_0x5d2ax62<_0x5d2ax20||_0x5d2ax62==_0x5d2ax20&&_0x5d2ax9){_0x5d2ax17=_0x5d2ax1d[_0xe4bc[1833]](_0x5d2axa),_0x5d2ax1d[_0xe4bc[1834]](_0x5d2axa,_0x5d2ax1e[_0xe4bc[1833]](_0x5d2axa)),_0x5d2ax1e[_0xe4bc[1834]](_0x5d2axa,_0x5d2ax17),_0x5d2ax17=_0x5d2ax15,_0x5d2ax18=_0x5d2ax16,_0x5d2ax1b=_0x5d2ax19,_0x5d2ax1c=_0x5d2ax1a,_0x5d2ax1e=_0x5d2ax1d,_0x5d2ax9||(_0x5d2ax4= !0)}}}}};mxMedianHybridCrossingReduction[_0xe4bc[202]][_0xe4bc[1861]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=0==_0x5d2ax2%2;if(_0x5d2ax4){for(var _0x5d2ax5=_0x5d2ax3[_0xe4bc[1827]]-1;0<=_0x5d2ax5;_0x5d2ax5--){this[_0xe4bc[1864]](_0x5d2ax5,_0x5d2ax4)}}else {for(_0x5d2ax5=1;_0x5d2ax5<_0x5d2ax3[_0xe4bc[1827]];_0x5d2ax5++){this[_0xe4bc[1864]](_0x5d2ax5,_0x5d2ax4)}}};mxMedianHybridCrossingReduction[_0xe4bc[202]][_0xe4bc[1864]]=function(_0x5d2ax2,_0x5d2ax3){for(var _0x5d2ax4=this[_0xe4bc[1856]][_0x5d2ax2][_0xe4bc[67]],_0x5d2ax5=[],_0x5d2ax9=[],_0x5d2axa=0;_0x5d2axa<_0x5d2ax4;_0x5d2axa++){var _0x5d2ax12=this[_0xe4bc[1856]][_0x5d2ax2][_0x5d2axa],_0x5d2ax13= new MedianCellSorter;_0x5d2ax13[_0xe4bc[246]]=_0x5d2ax12;var _0x5d2ax14;_0x5d2ax14=_0x5d2ax3?_0x5d2ax12[_0xe4bc[1831]](_0x5d2ax2):_0x5d2ax12[_0xe4bc[1832]](_0x5d2ax2);var _0x5d2ax15;_0x5d2ax15=_0x5d2ax3?_0x5d2ax2+1:_0x5d2ax2-1;null!=_0x5d2ax14&&0!=_0x5d2ax14[_0xe4bc[67]]?(_0x5d2ax13[_0xe4bc[1865]]=this[_0xe4bc[1865]](_0x5d2ax14,_0x5d2ax15),_0x5d2ax5[_0xe4bc[207]](_0x5d2ax13)):_0x5d2ax9[_0x5d2ax12[_0xe4bc[1833]](_0x5d2ax2)]= !0};_0x5d2ax5[_0xe4bc[470]](MedianCellSorter[_0xe4bc[202]][_0xe4bc[469]]);for(_0x5d2axa=0;_0x5d2axa<_0x5d2ax4;_0x5d2axa++){null==_0x5d2ax9[_0x5d2axa]&&(_0x5d2ax12=_0x5d2ax5[_0xe4bc[1115]]()[_0xe4bc[246]],_0x5d2ax12[_0xe4bc[1834]](_0x5d2ax2,_0x5d2axa))}};mxMedianHybridCrossingReduction[_0xe4bc[202]][_0xe4bc[1865]]=function(_0x5d2ax2,_0x5d2ax3){for(var _0x5d2ax4=[],_0x5d2ax5=0,_0x5d2ax9=0;_0x5d2ax9<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax9++){var _0x5d2axa=_0x5d2ax2[_0x5d2ax9];_0x5d2ax4[_0x5d2ax5++]=_0x5d2axa[_0xe4bc[1833]](_0x5d2ax3)};_0x5d2ax4[_0xe4bc[470]](function(_0x5d2ax2,_0x5d2ax3){return _0x5d2ax2-_0x5d2ax3});if(1==_0x5d2ax5%2){return _0x5d2ax4[Math[_0xe4bc[519]](_0x5d2ax5/2)]};if(2==_0x5d2ax5){return (_0x5d2ax4[0]+_0x5d2ax4[1])/2};_0x5d2ax9=_0x5d2ax5/2;_0x5d2axa=_0x5d2ax4[_0x5d2ax9-1]-_0x5d2ax4[0];_0x5d2ax5=_0x5d2ax4[_0x5d2ax5-1]-_0x5d2ax4[_0x5d2ax9];return (_0x5d2ax4[_0x5d2ax9-1]*_0x5d2ax5+_0x5d2ax4[_0x5d2ax9]*_0x5d2axa)/(_0x5d2axa+_0x5d2ax5)};function MedianCellSorter(){}MedianCellSorter[_0xe4bc[202]][_0xe4bc[1865]]=0;MedianCellSorter[_0xe4bc[202]][_0xe4bc[246]]= !1;MedianCellSorter[_0xe4bc[202]][_0xe4bc[469]]=function(_0x5d2ax2,_0x5d2ax3){return null!=_0x5d2ax2&&null!=_0x5d2ax3?_0x5d2ax3[_0xe4bc[1865]]>_0x5d2ax2[_0xe4bc[1865]]?-1:_0x5d2ax3[_0xe4bc[1865]]<_0x5d2ax2[_0xe4bc[1865]]?1:0:0};function mxMinimumCycleRemover(_0x5d2ax2){this[_0xe4bc[1759]]=_0x5d2ax2}mxMinimumCycleRemover[_0xe4bc[202]]= new mxHierarchicalLayoutStage;mxMinimumCycleRemover[_0xe4bc[202]][_0xe4bc[196]]=mxMinimumCycleRemover;mxMinimumCycleRemover[_0xe4bc[202]][_0xe4bc[1759]]=null;mxMinimumCycleRemover[_0xe4bc[202]][_0xe4bc[350]]=function(_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[1759]][_0xe4bc[502]](),_0x5d2ax4={},_0x5d2ax5=mxUtils[_0xe4bc[238]](_0x5d2ax3[_0xe4bc[1846]],null,!0),_0x5d2ax9=null;if(null!=_0x5d2ax3[_0xe4bc[1845]]){var _0x5d2axa=_0x5d2ax3[_0xe4bc[1845]],_0x5d2ax9=[];for(_0x5d2ax2=0;_0x5d2ax2<_0x5d2axa[_0xe4bc[67]];_0x5d2ax2++){var _0x5d2ax12=mxCellPath[_0xe4bc[385]](_0x5d2axa[_0x5d2ax2]);_0x5d2ax9[_0x5d2ax2]=_0x5d2ax3[_0xe4bc[1846]][_0x5d2ax12]}};_0x5d2ax3[_0xe4bc[209]](function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax9,_0x5d2axa,_0x5d2ax12){_0x5d2ax3[_0xe4bc[1720]](_0x5d2ax2)&&(_0x5d2ax9[_0xe4bc[1744]](),mxUtils[_0xe4bc[205]](_0x5d2ax9,_0x5d2ax2[_0xe4bc[1838]]),_0x5d2ax2[_0xe4bc[1837]][_0xe4bc[207]](_0x5d2ax9),mxUtils[_0xe4bc[205]](_0x5d2ax9,_0x5d2ax3[_0xe4bc[1837]]),_0x5d2ax3[_0xe4bc[1838]][_0xe4bc[207]](_0x5d2ax9));_0x5d2ax2=mxCellPath[_0xe4bc[385]](_0x5d2ax3[_0xe4bc[246]]);_0x5d2ax4[_0x5d2ax2]=_0x5d2ax3;delete _0x5d2ax5[_0x5d2ax2]},_0x5d2ax9,!0,null);_0x5d2ax9=null;0<_0x5d2ax5[_0xe4bc[1866]]&&(_0x5d2ax9=mxUtils[_0xe4bc[238]](_0x5d2ax5,null,!0));_0x5d2ax2=mxUtils[_0xe4bc[238]](_0x5d2ax4,null,!0);_0x5d2ax3[_0xe4bc[209]](function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax9,_0x5d2axa,_0x5d2ax12){_0x5d2ax3[_0xe4bc[1720]](_0x5d2ax2)&&(_0x5d2ax9[_0xe4bc[1744]](),mxUtils[_0xe4bc[205]](_0x5d2ax9,_0x5d2ax2[_0xe4bc[1838]]),_0x5d2ax3[_0xe4bc[1838]][_0xe4bc[207]](_0x5d2ax9),_0x5d2ax2[_0xe4bc[1837]][_0xe4bc[207]](_0x5d2ax9),mxUtils[_0xe4bc[205]](_0x5d2ax9,_0x5d2ax3[_0xe4bc[1837]]));_0x5d2ax2=mxCellPath[_0xe4bc[385]](_0x5d2ax3[_0xe4bc[246]]);_0x5d2ax4[_0x5d2ax2]=_0x5d2ax3;delete _0x5d2ax5[_0x5d2ax2]},_0x5d2ax5,!0,_0x5d2ax2);_0x5d2axa=this[_0xe4bc[1759]][_0xe4bc[1703]]();if(null!=_0x5d2ax9&&0<_0x5d2ax9[_0xe4bc[67]]){_0x5d2ax3=_0x5d2ax3[_0xe4bc[1845]];for(_0x5d2ax2=0;_0x5d2ax2<_0x5d2ax9[_0xe4bc[67]];_0x5d2ax2++){_0x5d2ax12=_0x5d2ax9[_0x5d2ax2][_0xe4bc[246]],0==_0x5d2axa[_0xe4bc[1867]](_0x5d2ax12)[_0xe4bc[67]]&&_0x5d2ax3[_0xe4bc[207]](_0x5d2ax12)}}};function mxCoordinateAssignment(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa){this[_0xe4bc[1759]]=_0x5d2ax2;this[_0xe4bc[1868]]=_0x5d2ax3;this[_0xe4bc[1869]]=_0x5d2ax4;this[_0xe4bc[1870]]=_0x5d2ax5;this[_0xe4bc[1871]]=_0x5d2ax9;this[_0xe4bc[1872]]=_0x5d2axa}var mxHierarchicalEdgeStyle={ORTHOGONAL:1,POLYLINE:2,STRAIGHT:3,CURVE:4};mxCoordinateAssignment[_0xe4bc[202]]= new mxHierarchicalLayoutStage;mxCoordinateAssignment[_0xe4bc[202]][_0xe4bc[196]]=mxCoordinateAssignment;mxCoordinateAssignment[_0xe4bc[202]][_0xe4bc[1759]]=null;mxCoordinateAssignment[_0xe4bc[202]][_0xe4bc[1868]]=30;mxCoordinateAssignment[_0xe4bc[202]][_0xe4bc[1869]]=100;mxCoordinateAssignment[_0xe4bc[202]][_0xe4bc[1872]]=10;mxCoordinateAssignment[_0xe4bc[202]][_0xe4bc[1795]]=8;mxCoordinateAssignment[_0xe4bc[202]][_0xe4bc[1751]]=5;mxCoordinateAssignment[_0xe4bc[202]][_0xe4bc[1752]]=2;mxCoordinateAssignment[_0xe4bc[202]][_0xe4bc[1753]]=12;mxCoordinateAssignment[_0xe4bc[202]][_0xe4bc[1754]]=4;mxCoordinateAssignment[_0xe4bc[202]][_0xe4bc[1873]]=null;mxCoordinateAssignment[_0xe4bc[202]][_0xe4bc[1870]]=mxConstants[_0xe4bc[1358]];mxCoordinateAssignment[_0xe4bc[202]][_0xe4bc[1871]]=null;mxCoordinateAssignment[_0xe4bc[202]][_0xe4bc[1874]]=null;mxCoordinateAssignment[_0xe4bc[202]][_0xe4bc[1875]]=null;mxCoordinateAssignment[_0xe4bc[202]][_0xe4bc[1876]]=null;mxCoordinateAssignment[_0xe4bc[202]][_0xe4bc[1877]]=null;mxCoordinateAssignment[_0xe4bc[202]][_0xe4bc[1878]]=null;mxCoordinateAssignment[_0xe4bc[202]][_0xe4bc[1879]]=null;mxCoordinateAssignment[_0xe4bc[202]][_0xe4bc[1880]]=null;mxCoordinateAssignment[_0xe4bc[202]][_0xe4bc[1881]]=null;mxCoordinateAssignment[_0xe4bc[202]][_0xe4bc[1882]]= !0;mxCoordinateAssignment[_0xe4bc[202]][_0xe4bc[675]]=mxHierarchicalEdgeStyle[_0xe4bc[1883]];mxCoordinateAssignment[_0xe4bc[202]][_0xe4bc[1884]]=null;mxCoordinateAssignment[_0xe4bc[202]][_0xe4bc[1885]]=null;mxCoordinateAssignment[_0xe4bc[202]][_0xe4bc[1745]]=10;mxCoordinateAssignment[_0xe4bc[202]][_0xe4bc[1886]]=function(){var _0x5d2ax2=this[_0xe4bc[1759]][_0xe4bc[502]]();mxLog[_0xe4bc[539]]();mxLog[_0xe4bc[171]](_0xe4bc[1887]);for(var _0x5d2ax3=0;_0x5d2ax3<_0x5d2ax2[_0xe4bc[1850]][_0xe4bc[67]];_0x5d2ax3++){mxLog[_0xe4bc[53]](_0xe4bc[1888],_0x5d2ax3,_0xe4bc[1889]);for(var _0x5d2ax4=_0x5d2ax2[_0xe4bc[1850]][_0x5d2ax3],_0x5d2ax5=0;_0x5d2ax5<_0x5d2ax4[_0xe4bc[67]];_0x5d2ax5++){mxLog[_0xe4bc[53]](_0x5d2ax4[_0x5d2ax5][_0xe4bc[1833]](_0x5d2ax3),_0xe4bc[316])};mxLog[_0xe4bc[171]]()};mxLog[_0xe4bc[171]](_0xe4bc[1890])};mxCoordinateAssignment[_0xe4bc[202]][_0xe4bc[350]]=function(_0x5d2ax2){this[_0xe4bc[1873]]=[];_0x5d2ax2=this[_0xe4bc[1759]][_0xe4bc[502]]();this[_0xe4bc[1875]]=0;this[_0xe4bc[1891]](this[_0xe4bc[1759]][_0xe4bc[1703]](),_0x5d2ax2);this[_0xe4bc[1882]]&&this[_0xe4bc[1892]](_0x5d2ax2);var _0x5d2ax3=1E8;if(this[_0xe4bc[1882]]){for(var _0x5d2ax4=0;_0x5d2ax4<this[_0xe4bc[1795]];_0x5d2ax4++){0!=_0x5d2ax4&&(this[_0xe4bc[1893]](_0x5d2ax4,_0x5d2ax2),this[_0xe4bc[1892]](_0x5d2ax2));if(this[_0xe4bc[1875]]<_0x5d2ax3){for(var _0x5d2ax5=0;_0x5d2ax5<_0x5d2ax2[_0xe4bc[1850]][_0xe4bc[67]];_0x5d2ax5++){for(var _0x5d2ax9=_0x5d2ax2[_0xe4bc[1850]][_0x5d2ax5],_0x5d2axa=0;_0x5d2axa<_0x5d2ax9[_0xe4bc[67]];_0x5d2axa++){var _0x5d2ax12=_0x5d2ax9[_0x5d2axa];_0x5d2ax12[_0xe4bc[1835]](_0x5d2ax5,_0x5d2ax12[_0xe4bc[1833]](_0x5d2ax5))}};_0x5d2ax3=this[_0xe4bc[1875]]}else {for(_0x5d2ax5=0;_0x5d2ax5<_0x5d2ax2[_0xe4bc[1850]][_0xe4bc[67]];_0x5d2ax5++){_0x5d2ax9=_0x5d2ax2[_0xe4bc[1850]][_0x5d2ax5];for(_0x5d2axa=0;_0x5d2axa<_0x5d2ax9[_0xe4bc[67]];_0x5d2axa++){_0x5d2ax12=_0x5d2ax9[_0x5d2axa],_0x5d2ax12[_0xe4bc[1834]](_0x5d2ax5,_0x5d2ax12[_0xe4bc[730]](_0x5d2ax5))}}};this[_0xe4bc[1894]](this[_0xe4bc[1759]][_0xe4bc[1703]](),_0x5d2ax2);this[_0xe4bc[1875]]=0}};this[_0xe4bc[1895]](this[_0xe4bc[1759]][_0xe4bc[1703]](),_0x5d2ax2)};mxCoordinateAssignment[_0xe4bc[202]][_0xe4bc[1892]]=function(_0x5d2ax2){for(var _0x5d2ax3=[],_0x5d2ax4=[],_0x5d2ax5=[],_0x5d2ax9=0;_0x5d2ax9<=_0x5d2ax2[_0xe4bc[1827]];_0x5d2ax9++){_0x5d2ax5[_0x5d2ax9]=_0x5d2ax2[_0xe4bc[1850]][_0x5d2ax9];for(var _0x5d2axa=0;_0x5d2axa<_0x5d2ax5[_0x5d2ax9][_0xe4bc[67]];_0x5d2axa++){var _0x5d2ax12=_0x5d2ax5[_0x5d2ax9][_0x5d2axa],_0x5d2ax13= new WeightedCellSorter(_0x5d2ax12,_0x5d2ax9);_0x5d2ax13[_0xe4bc[1785]]=_0x5d2axa;_0x5d2ax13[_0xe4bc[1784]]= !0;_0x5d2ax3[_0xe4bc[207]](_0x5d2ax13);_0x5d2ax12=mxCellPath[_0xe4bc[385]](_0x5d2ax12[_0xe4bc[1841]]());_0x5d2ax4[_0x5d2ax12]=_0x5d2ax13}};_0x5d2ax2=10*_0x5d2ax3[_0xe4bc[67]];for(_0x5d2axa=0;0<_0x5d2ax3[_0xe4bc[67]]&&_0x5d2axa<=_0x5d2ax2;){var _0x5d2ax13=_0x5d2ax3[_0xe4bc[1115]](),_0x5d2ax9=_0x5d2ax13[_0xe4bc[246]],_0x5d2ax14=_0x5d2ax13[_0xe4bc[1782]],_0x5d2ax15=parseInt(_0x5d2ax13[_0xe4bc[1785]]),_0x5d2ax12=_0x5d2ax9[_0xe4bc[1831]](_0x5d2ax14),_0x5d2ax16=_0x5d2ax9[_0xe4bc[1832]](_0x5d2ax14),_0x5d2ax17=_0x5d2ax12[_0xe4bc[67]],_0x5d2ax18=_0x5d2ax16[_0xe4bc[67]],_0x5d2ax19=this[_0xe4bc[1896]](_0x5d2ax12,_0x5d2ax14+1),_0x5d2ax1a=this[_0xe4bc[1896]](_0x5d2ax16,_0x5d2ax14-1),_0x5d2ax1b=_0x5d2ax17+_0x5d2ax18,_0x5d2ax1c=_0x5d2ax9[_0xe4bc[1833]](_0x5d2ax14),_0x5d2ax1d=_0x5d2ax1c;0<_0x5d2ax1b&&(_0x5d2ax1d=(_0x5d2ax19*_0x5d2ax17+_0x5d2ax1a*_0x5d2ax18)/_0x5d2ax1b);_0x5d2ax17= !1;_0x5d2ax1d<_0x5d2ax1c-1?0==_0x5d2ax15?(_0x5d2ax9[_0xe4bc[1834]](_0x5d2ax14,_0x5d2ax1d),_0x5d2ax17= !0):(_0x5d2ax15=_0x5d2ax5[_0x5d2ax14][_0x5d2ax15-1],_0x5d2ax1c=_0x5d2ax15[_0xe4bc[1833]](_0x5d2ax14),_0x5d2ax1c=_0x5d2ax1c+_0x5d2ax15[_0xe4bc[117]]/2+this[_0xe4bc[1868]]+_0x5d2ax9[_0xe4bc[117]]/2,_0x5d2ax1c<_0x5d2ax1d?(_0x5d2ax9[_0xe4bc[1834]](_0x5d2ax14,_0x5d2ax1d),_0x5d2ax17= !0):_0x5d2ax1c<_0x5d2ax9[_0xe4bc[1833]](_0x5d2ax14)-1&&(_0x5d2ax9[_0xe4bc[1834]](_0x5d2ax14,_0x5d2ax1c),_0x5d2ax17= !0)):_0x5d2ax1d>_0x5d2ax1c+1&&(_0x5d2ax15==_0x5d2ax5[_0x5d2ax14][_0xe4bc[67]]-1?(_0x5d2ax9[_0xe4bc[1834]](_0x5d2ax14,_0x5d2ax1d),_0x5d2ax17= !0):(_0x5d2ax15=_0x5d2ax5[_0x5d2ax14][_0x5d2ax15+1],_0x5d2ax1c=_0x5d2ax15[_0xe4bc[1833]](_0x5d2ax14),_0x5d2ax1c=_0x5d2ax1c-_0x5d2ax15[_0xe4bc[117]]/2-this[_0xe4bc[1868]]-_0x5d2ax9[_0xe4bc[117]]/2,_0x5d2ax1c>_0x5d2ax1d?(_0x5d2ax9[_0xe4bc[1834]](_0x5d2ax14,_0x5d2ax1d),_0x5d2ax17= !0):_0x5d2ax1c>_0x5d2ax9[_0xe4bc[1833]](_0x5d2ax14)+1&&(_0x5d2ax9[_0xe4bc[1834]](_0x5d2ax14,_0x5d2ax1c),_0x5d2ax17= !0)));if(_0x5d2ax17){for(_0x5d2ax9=0;_0x5d2ax9<_0x5d2ax12[_0xe4bc[67]];_0x5d2ax9++){_0x5d2ax14=_0x5d2ax12[_0x5d2ax9],_0x5d2ax14=mxCellPath[_0xe4bc[385]](_0x5d2ax14[_0xe4bc[1841]]()),_0x5d2ax14=_0x5d2ax4[_0x5d2ax14],null!=_0x5d2ax14&&!1==_0x5d2ax14[_0xe4bc[1784]]&&(_0x5d2ax14[_0xe4bc[1784]]= !0,_0x5d2ax3[_0xe4bc[207]](_0x5d2ax14))};for(_0x5d2ax9=0;_0x5d2ax9<_0x5d2ax16[_0xe4bc[67]];_0x5d2ax9++){_0x5d2ax14=_0x5d2ax16[_0x5d2ax9],_0x5d2ax14=mxCellPath[_0xe4bc[385]](_0x5d2ax14[_0xe4bc[1841]]()),_0x5d2ax14=_0x5d2ax4[_0x5d2ax14],null!=_0x5d2ax14&&!1==_0x5d2ax14[_0xe4bc[1784]]&&(_0x5d2ax14[_0xe4bc[1784]]= !0,_0x5d2ax3[_0xe4bc[207]](_0x5d2ax14))}};_0x5d2ax13[_0xe4bc[1784]]= !1;_0x5d2axa++}};mxCoordinateAssignment[_0xe4bc[202]][_0xe4bc[1893]]=function(_0x5d2ax2,_0x5d2ax3){if(0==_0x5d2ax2%2){for(var _0x5d2ax4=_0x5d2ax3[_0xe4bc[1827]];0<_0x5d2ax4;_0x5d2ax4--){this[_0xe4bc[1897]](_0x5d2ax4-1,_0x5d2ax3,_0x5d2ax4)}}else {for(_0x5d2ax4=0;_0x5d2ax4<_0x5d2ax3[_0xe4bc[1827]]-1;_0x5d2ax4++){this[_0xe4bc[1897]](_0x5d2ax4+1,_0x5d2ax3,_0x5d2ax4)}}};mxCoordinateAssignment[_0xe4bc[202]][_0xe4bc[1897]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){_0x5d2ax3=_0x5d2ax3[_0xe4bc[1850]][_0x5d2ax2];for(var _0x5d2ax5=[],_0x5d2ax9=[],_0x5d2axa=0;_0x5d2axa<_0x5d2ax3[_0xe4bc[67]];_0x5d2axa++){var _0x5d2ax12=_0x5d2ax3[_0x5d2axa];_0x5d2ax5[_0x5d2axa]= new WeightedCellSorter;_0x5d2ax5[_0x5d2axa][_0xe4bc[246]]=_0x5d2ax12;_0x5d2ax5[_0x5d2axa][_0xe4bc[1785]]=_0x5d2axa;var _0x5d2ax13=mxCellPath[_0xe4bc[385]](_0x5d2ax12[_0xe4bc[1841]]());_0x5d2ax9[_0x5d2ax13]=_0x5d2ax5[_0x5d2axa];var _0x5d2ax14=null,_0x5d2ax14=_0x5d2ax4<_0x5d2ax2?_0x5d2ax12[_0xe4bc[1832]](_0x5d2ax2):_0x5d2ax12[_0xe4bc[1831]](_0x5d2ax2);_0x5d2ax5[_0x5d2axa][_0xe4bc[1782]]=this[_0xe4bc[1898]](_0x5d2ax12,_0x5d2ax14)};_0x5d2ax5[_0xe4bc[470]](WeightedCellSorter[_0xe4bc[202]][_0xe4bc[469]]);for(_0x5d2axa=0;_0x5d2axa<_0x5d2ax5[_0xe4bc[67]];_0x5d2axa++){_0x5d2ax13=0;_0x5d2ax12=_0x5d2ax5[_0x5d2axa][_0xe4bc[246]];_0x5d2ax13=0;_0x5d2ax14=_0x5d2ax4<_0x5d2ax2?_0x5d2ax12[_0xe4bc[1832]](_0x5d2ax2)[_0xe4bc[1853]]():_0x5d2ax12[_0xe4bc[1831]](_0x5d2ax2)[_0xe4bc[1853]]();null!=_0x5d2ax14&&(_0x5d2ax13=_0x5d2ax14[_0xe4bc[67]],_0x5d2ax13=0<_0x5d2ax13?this[_0xe4bc[1896]](_0x5d2ax14,_0x5d2ax4):_0x5d2ax12[_0xe4bc[1833]](_0x5d2ax2));for(var _0x5d2ax15=0,_0x5d2ax14=-1E8,_0x5d2ax16=_0x5d2ax5[_0x5d2axa][_0xe4bc[1785]]-1;0<=_0x5d2ax16;){var _0x5d2ax17=mxCellPath[_0xe4bc[385]](_0x5d2ax3[_0x5d2ax16][_0xe4bc[1841]]()),_0x5d2ax17=_0x5d2ax9[_0x5d2ax17];if(null!=_0x5d2ax17){var _0x5d2ax18=_0x5d2ax17[_0xe4bc[246]];_0x5d2ax17[_0xe4bc[1784]]?(_0x5d2ax14=_0x5d2ax18[_0xe4bc[1833]](_0x5d2ax2)+_0x5d2ax18[_0xe4bc[117]]/2+this[_0xe4bc[1868]]+_0x5d2ax15+_0x5d2ax12[_0xe4bc[117]]/2,_0x5d2ax16= -1):(_0x5d2ax15+=_0x5d2ax18[_0xe4bc[117]]+this[_0xe4bc[1868]],_0x5d2ax16--)}};_0x5d2ax15=0;_0x5d2ax18=1E8;for(_0x5d2ax16=_0x5d2ax5[_0x5d2axa][_0xe4bc[1785]]+1;_0x5d2ax16<_0x5d2ax5[_0xe4bc[67]];){if(_0x5d2ax17=mxCellPath[_0xe4bc[385]](_0x5d2ax3[_0x5d2ax16][_0xe4bc[1841]]()),_0x5d2ax17=_0x5d2ax9[_0x5d2ax17],null!=_0x5d2ax17){var _0x5d2ax19=_0x5d2ax17[_0xe4bc[246]];_0x5d2ax17[_0xe4bc[1784]]?(_0x5d2ax18=_0x5d2ax19[_0xe4bc[1833]](_0x5d2ax2)-_0x5d2ax19[_0xe4bc[117]]/2-this[_0xe4bc[1868]]-_0x5d2ax15-_0x5d2ax12[_0xe4bc[117]]/2,_0x5d2ax16=_0x5d2ax5[_0xe4bc[67]]):(_0x5d2ax15+=_0x5d2ax19[_0xe4bc[117]]+this[_0xe4bc[1868]],_0x5d2ax16++)}};_0x5d2ax13>=_0x5d2ax14&&_0x5d2ax13<=_0x5d2ax18?_0x5d2ax12[_0xe4bc[1834]](_0x5d2ax2,_0x5d2ax13):_0x5d2ax13<_0x5d2ax14?(_0x5d2ax12[_0xe4bc[1834]](_0x5d2ax2,_0x5d2ax14),this[_0xe4bc[1875]]+=_0x5d2ax14-_0x5d2ax13):_0x5d2ax13>_0x5d2ax18&&(_0x5d2ax12[_0xe4bc[1834]](_0x5d2ax2,_0x5d2ax18),this[_0xe4bc[1875]]+=_0x5d2ax13-_0x5d2ax18);_0x5d2ax5[_0x5d2axa][_0xe4bc[1784]]= !0}};mxCoordinateAssignment[_0xe4bc[202]][_0xe4bc[1898]]=function(_0x5d2ax2,_0x5d2ax3){for(var _0x5d2ax4=0,_0x5d2ax5=0;_0x5d2ax5<_0x5d2ax3[_0xe4bc[67]];_0x5d2ax5++){var _0x5d2ax9=_0x5d2ax3[_0x5d2ax5];_0x5d2ax2[_0xe4bc[1193]]()&&_0x5d2ax9[_0xe4bc[1193]]()?_0x5d2ax4++:_0x5d2ax4=_0x5d2ax2[_0xe4bc[250]]()&&_0x5d2ax9[_0xe4bc[250]]()?_0x5d2ax4+8:_0x5d2ax4+2};return _0x5d2ax4};mxCoordinateAssignment[_0xe4bc[202]][_0xe4bc[1896]]=function(_0x5d2ax2,_0x5d2ax3){if(0==_0x5d2ax2[_0xe4bc[67]]){return 0};for(var _0x5d2ax4=[],_0x5d2ax5=0;_0x5d2ax5<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax5++){_0x5d2ax4[_0x5d2ax5]=_0x5d2ax2[_0x5d2ax5][_0xe4bc[1833]](_0x5d2ax3)};_0x5d2ax4[_0xe4bc[470]](function(_0x5d2ax2,_0x5d2ax3){return _0x5d2ax2-_0x5d2ax3});if(1==_0x5d2ax2[_0xe4bc[67]]%2){return _0x5d2ax4[Math[_0xe4bc[519]](_0x5d2ax2[_0xe4bc[67]]/2)]};_0x5d2ax5=_0x5d2ax2[_0xe4bc[67]]/2;return (_0x5d2ax4[_0x5d2ax5-1]+_0x5d2ax4[_0x5d2ax5])/2};mxCoordinateAssignment[_0xe4bc[202]][_0xe4bc[1891]]=function(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[1899]](_0x5d2ax2,_0x5d2ax3);for(var _0x5d2ax4=this[_0xe4bc[1876]];0<=_0x5d2ax4;_0x5d2ax4--){_0x5d2ax4<_0x5d2ax3[_0xe4bc[1827]]&&this[_0xe4bc[1900]](_0x5d2ax4,_0x5d2ax2,_0x5d2ax3)};for(_0x5d2ax4=this[_0xe4bc[1876]]+1;_0x5d2ax4<=_0x5d2ax3[_0xe4bc[1827]];_0x5d2ax4++){0<_0x5d2ax4&&this[_0xe4bc[1900]](_0x5d2ax4,_0x5d2ax2,_0x5d2ax3)}};mxCoordinateAssignment[_0xe4bc[202]][_0xe4bc[1900]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){_0x5d2ax3=_0x5d2ax4[_0xe4bc[1850]][_0x5d2ax2];_0x5d2ax4=0;for(var _0x5d2ax5=this[_0xe4bc[1871]]+(this[_0xe4bc[1879]]-this[_0xe4bc[1880]][_0x5d2ax2])/2,_0x5d2ax9=!1,_0x5d2axa=0;_0x5d2axa<_0x5d2ax3[_0xe4bc[67]];_0x5d2axa++){var _0x5d2ax12=_0x5d2ax3[_0x5d2axa];if(_0x5d2ax12[_0xe4bc[1193]]()){var _0x5d2ax13=this[_0xe4bc[1759]][_0xe4bc[1726]](_0x5d2ax12[_0xe4bc[246]]);null!=_0x5d2ax13?this[_0xe4bc[1870]]==mxConstants[_0xe4bc[1358]]||this[_0xe4bc[1870]]==mxConstants[_0xe4bc[1354]]?(_0x5d2ax12[_0xe4bc[117]]=_0x5d2ax13[_0xe4bc[117]],_0x5d2ax12[_0xe4bc[119]]=_0x5d2ax13[_0xe4bc[119]]):(_0x5d2ax12[_0xe4bc[117]]=_0x5d2ax13[_0xe4bc[119]],_0x5d2ax12[_0xe4bc[119]]=_0x5d2ax13[_0xe4bc[117]]):_0x5d2ax9= !0;_0x5d2ax4=Math[_0xe4bc[160]](_0x5d2ax4,_0x5d2ax12[_0xe4bc[119]])}else {_0x5d2ax12[_0xe4bc[250]]()&&(_0x5d2ax13=1,null!=_0x5d2ax12[_0xe4bc[1842]]?_0x5d2ax13=_0x5d2ax12[_0xe4bc[1842]][_0xe4bc[67]]:mxLog[_0xe4bc[283]](_0xe4bc[1901]),_0x5d2ax12[_0xe4bc[117]]=(_0x5d2ax13-1)*this[_0xe4bc[1872]])};_0x5d2ax5+=_0x5d2ax12[_0xe4bc[117]]/2;_0x5d2ax12[_0xe4bc[1835]](_0x5d2ax2,_0x5d2ax5);_0x5d2ax12[_0xe4bc[1834]](_0x5d2ax2,_0x5d2ax5);_0x5d2ax5+=_0x5d2ax12[_0xe4bc[117]]/2;_0x5d2ax5+=this[_0xe4bc[1868]]};!0==_0x5d2ax9&&mxLog[_0xe4bc[283]](_0xe4bc[1902])};mxCoordinateAssignment[_0xe4bc[202]][_0xe4bc[1899]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=-this[_0xe4bc[1869]],_0x5d2ax5=0;this[_0xe4bc[1880]]=[];this[_0xe4bc[1881]]=[];for(var _0x5d2ax9=_0x5d2ax3[_0xe4bc[1827]];0<=_0x5d2ax9;_0x5d2ax9--){for(var _0x5d2axa=0,_0x5d2ax12=_0x5d2ax3[_0xe4bc[1850]][_0x5d2ax9],_0x5d2ax13=this[_0xe4bc[1871]],_0x5d2ax14=!1,_0x5d2ax15=0;_0x5d2ax15<_0x5d2ax12[_0xe4bc[67]];_0x5d2ax15++){var _0x5d2ax16=_0x5d2ax12[_0x5d2ax15];if(_0x5d2ax16[_0xe4bc[1193]]()){var _0x5d2ax17=this[_0xe4bc[1759]][_0xe4bc[1726]](_0x5d2ax16[_0xe4bc[246]]);null!=_0x5d2ax17?this[_0xe4bc[1870]]==mxConstants[_0xe4bc[1358]]||this[_0xe4bc[1870]]==mxConstants[_0xe4bc[1354]]?(_0x5d2ax16[_0xe4bc[117]]=_0x5d2ax17[_0xe4bc[117]],_0x5d2ax16[_0xe4bc[119]]=_0x5d2ax17[_0xe4bc[119]]):(_0x5d2ax16[_0xe4bc[117]]=_0x5d2ax17[_0xe4bc[119]],_0x5d2ax16[_0xe4bc[119]]=_0x5d2ax17[_0xe4bc[117]]):_0x5d2ax14= !0;_0x5d2axa=Math[_0xe4bc[160]](_0x5d2axa,_0x5d2ax16[_0xe4bc[119]])}else {_0x5d2ax16[_0xe4bc[250]]()&&(_0x5d2ax17=1,null!=_0x5d2ax16[_0xe4bc[1842]]?_0x5d2ax17=_0x5d2ax16[_0xe4bc[1842]][_0xe4bc[67]]:mxLog[_0xe4bc[283]](_0xe4bc[1901]),_0x5d2ax16[_0xe4bc[117]]=(_0x5d2ax17-1)*this[_0xe4bc[1872]])};_0x5d2ax13+=_0x5d2ax16[_0xe4bc[117]]/2;_0x5d2ax16[_0xe4bc[1835]](_0x5d2ax9,_0x5d2ax13);_0x5d2ax16[_0xe4bc[1834]](_0x5d2ax9,_0x5d2ax13);_0x5d2ax13+=_0x5d2ax16[_0xe4bc[117]]/2;_0x5d2ax13+=this[_0xe4bc[1868]];_0x5d2ax13>this[_0xe4bc[1879]]&&(this[_0xe4bc[1879]]=_0x5d2ax13,this[_0xe4bc[1876]]=_0x5d2ax9);this[_0xe4bc[1880]][_0x5d2ax9]=_0x5d2ax13};!0==_0x5d2ax14&&mxLog[_0xe4bc[283]](_0xe4bc[1902]);this[_0xe4bc[1881]][_0x5d2ax9]=_0x5d2ax4;_0x5d2ax13=_0x5d2axa/2+_0x5d2ax5/2+this[_0xe4bc[1869]];_0x5d2ax5=_0x5d2axa;_0x5d2ax4=this[_0xe4bc[1870]]==mxConstants[_0xe4bc[1358]]||this[_0xe4bc[1870]]==mxConstants[_0xe4bc[1359]]?_0x5d2ax4+_0x5d2ax13:_0x5d2ax4-_0x5d2ax13;for(_0x5d2ax15=0;_0x5d2ax15<_0x5d2ax12[_0xe4bc[67]];_0x5d2ax15++){_0x5d2ax12[_0x5d2ax15][_0xe4bc[1836]](_0x5d2ax9,_0x5d2ax4)}}};mxCoordinateAssignment[_0xe4bc[202]][_0xe4bc[1894]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=_0x5d2ax3[_0xe4bc[1847]],_0x5d2ax5;for(_0x5d2ax5 in _0x5d2ax4){var _0x5d2ax9=_0x5d2ax4[_0x5d2ax5];if(!(1>_0x5d2ax9[_0xe4bc[1827]]-_0x5d2ax9[_0xe4bc[1828]]-1)){for(var _0x5d2axa=_0x5d2ax9[_0xe4bc[1833]](_0x5d2ax9[_0xe4bc[1828]]+1),_0x5d2ax12=!0,_0x5d2ax13=0,_0x5d2ax14=_0x5d2ax9[_0xe4bc[1828]]+2;_0x5d2ax14<_0x5d2ax9[_0xe4bc[1827]];_0x5d2ax14++){var _0x5d2ax15=_0x5d2ax9[_0xe4bc[1833]](_0x5d2ax14);_0x5d2axa!=_0x5d2ax15?(_0x5d2ax12= !1,_0x5d2axa=_0x5d2ax15):_0x5d2ax13++};if(!_0x5d2ax12){for(var _0x5d2ax12=_0x5d2axa=0,_0x5d2ax15=[],_0x5d2ax16=[],_0x5d2ax17=_0x5d2ax9[_0xe4bc[1833]](_0x5d2ax9[_0xe4bc[1828]]+1),_0x5d2ax14=_0x5d2ax9[_0xe4bc[1828]]+1;_0x5d2ax14<_0x5d2ax9[_0xe4bc[1827]]-1;_0x5d2ax14++){var _0x5d2ax18=_0x5d2ax9[_0xe4bc[730]](_0x5d2ax14+1);_0x5d2ax17==_0x5d2ax18?(_0x5d2ax15[_0x5d2ax14-_0x5d2ax9[_0xe4bc[1828]]-1]=_0x5d2ax17,_0x5d2axa++):this[_0xe4bc[1903]](_0x5d2ax3,_0x5d2ax9,_0x5d2ax14+1,_0x5d2ax17)?(_0x5d2ax15[_0x5d2ax14-_0x5d2ax9[_0xe4bc[1828]]-1]=_0x5d2ax17,_0x5d2axa++):_0x5d2ax17=_0x5d2ax15[_0x5d2ax14-_0x5d2ax9[_0xe4bc[1828]]-1]=_0x5d2ax18};_0x5d2ax17=_0x5d2ax9[_0xe4bc[730]](_0x5d2ax14);for(_0x5d2ax14=_0x5d2ax9[_0xe4bc[1827]]-1;_0x5d2ax14>_0x5d2ax9[_0xe4bc[1828]]+1;_0x5d2ax14--){_0x5d2ax18=_0x5d2ax9[_0xe4bc[730]](_0x5d2ax14-1),_0x5d2ax17==_0x5d2ax18?(_0x5d2ax16[_0x5d2ax14-_0x5d2ax9[_0xe4bc[1828]]-2]=_0x5d2ax17,_0x5d2ax12++):this[_0xe4bc[1903]](_0x5d2ax3,_0x5d2ax9,_0x5d2ax14-1,_0x5d2ax17)?(_0x5d2ax16[_0x5d2ax14-_0x5d2ax9[_0xe4bc[1828]]-2]=_0x5d2ax17,_0x5d2ax12++):(_0x5d2ax16[_0x5d2ax14-_0x5d2ax9[_0xe4bc[1828]]-2]=_0x5d2ax9[_0xe4bc[730]](_0x5d2ax14-1),_0x5d2ax17=_0x5d2ax18)};if(_0x5d2ax12>_0x5d2ax13||_0x5d2axa>_0x5d2ax13){if(_0x5d2ax12>=_0x5d2axa){for(_0x5d2ax14=_0x5d2ax9[_0xe4bc[1827]]-2;_0x5d2ax14>_0x5d2ax9[_0xe4bc[1828]];_0x5d2ax14--){_0x5d2ax9[_0xe4bc[1835]](_0x5d2ax14,_0x5d2ax16[_0x5d2ax14-_0x5d2ax9[_0xe4bc[1828]]-1])}}else {if(_0x5d2axa>_0x5d2ax12){for(_0x5d2ax14=_0x5d2ax9[_0xe4bc[1828]]+2;_0x5d2ax14<_0x5d2ax9[_0xe4bc[1827]];_0x5d2ax14++){_0x5d2ax9[_0xe4bc[1835]](_0x5d2ax14,_0x5d2ax15[_0x5d2ax14-_0x5d2ax9[_0xe4bc[1828]]-2])}}}}}}}};mxCoordinateAssignment[_0xe4bc[202]][_0xe4bc[1903]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){_0x5d2ax2=_0x5d2ax2[_0xe4bc[1850]][_0x5d2ax4];for(var _0x5d2ax9=-1,_0x5d2axa=0;_0x5d2axa<_0x5d2ax2[_0xe4bc[67]];_0x5d2axa++){if(_0x5d2ax3==_0x5d2ax2[_0x5d2axa]){_0x5d2ax9=_0x5d2axa;break}};if(0>_0x5d2ax9){return !1};_0x5d2axa=_0x5d2ax3[_0xe4bc[1833]](_0x5d2ax4);if(_0x5d2ax5<_0x5d2axa){if(0==_0x5d2ax9){return !0};_0x5d2ax2=_0x5d2ax2[_0x5d2ax9-1];_0x5d2ax4=_0x5d2ax2[_0xe4bc[1833]](_0x5d2ax4);_0x5d2ax4=_0x5d2ax4+_0x5d2ax2[_0xe4bc[117]]/2+this[_0xe4bc[1868]]+_0x5d2ax3[_0xe4bc[117]]/2;if(!(_0x5d2ax4<=_0x5d2ax5)){return !1}}else {if(_0x5d2ax5>_0x5d2axa){if(_0x5d2ax9==_0x5d2ax2[_0xe4bc[67]]-1){return !0};_0x5d2ax2=_0x5d2ax2[_0x5d2ax9+1];_0x5d2ax4=_0x5d2ax2[_0xe4bc[1833]](_0x5d2ax4);_0x5d2ax4=_0x5d2ax4-_0x5d2ax2[_0xe4bc[117]]/2-this[_0xe4bc[1868]]-_0x5d2ax3[_0xe4bc[117]]/2;if(!(_0x5d2ax4>=_0x5d2ax5)){return !1}}};return !0};mxCoordinateAssignment[_0xe4bc[202]][_0xe4bc[1895]]=function(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[1877]]=[];this[_0xe4bc[1878]]=[];for(var _0x5d2ax4=0;_0x5d2ax4<_0x5d2ax3[_0xe4bc[1850]][_0xe4bc[67]];_0x5d2ax4++){this[_0xe4bc[1877]][_0x5d2ax4]=Number[_0xe4bc[1904]],this[_0xe4bc[1878]][_0x5d2ax4]=0};_0x5d2ax4=null;this[_0xe4bc[1759]][_0xe4bc[1735]]&&(_0x5d2ax4={});var _0x5d2ax5=_0x5d2ax3[_0xe4bc[1847]],_0x5d2ax9=_0x5d2ax3[_0xe4bc[1846]],_0x5d2axa;for(_0x5d2axa in _0x5d2ax9){var _0x5d2ax12=_0x5d2ax9[_0x5d2axa];this[_0xe4bc[1725]](_0x5d2ax12);if(this[_0xe4bc[1759]][_0xe4bc[1735]]){var _0x5d2ax12=_0x5d2ax2[_0xe4bc[251]][_0xe4bc[1197]](_0x5d2ax12[_0xe4bc[246]]),_0x5d2ax13=mxCellPath[_0xe4bc[385]](_0x5d2ax12);null==_0x5d2ax4[_0x5d2ax13]&&(_0x5d2ax4[_0x5d2ax13]=_0x5d2ax12)}};this[_0xe4bc[1759]][_0xe4bc[1735]]&&null!=_0x5d2ax4&&this[_0xe4bc[1763]](_0x5d2ax4);(this[_0xe4bc[675]]==mxHierarchicalEdgeStyle[_0xe4bc[1905]]||this[_0xe4bc[675]]==mxHierarchicalEdgeStyle[_0xe4bc[1883]]||this[_0xe4bc[675]]==mxHierarchicalEdgeStyle[_0xe4bc[1906]])&&this[_0xe4bc[1764]](_0x5d2ax3);for(_0x5d2axa in _0x5d2ax5){this[_0xe4bc[1907]](_0x5d2ax5[_0x5d2axa])}};mxCoordinateAssignment[_0xe4bc[202]][_0xe4bc[1763]]=function(_0x5d2ax2){var _0x5d2ax3=[],_0x5d2ax4;for(_0x5d2ax4 in _0x5d2ax2){_0x5d2ax3[_0xe4bc[207]](_0x5d2ax2[_0x5d2ax4])};this[_0xe4bc[1759]][_0xe4bc[1727]](mxUtils[_0xe4bc[1779]](_0x5d2ax3,!0),this[_0xe4bc[1745]])};mxCoordinateAssignment[_0xe4bc[202]][_0xe4bc[1764]]=function(_0x5d2ax2){for(var _0x5d2ax3=0;_0x5d2ax3<_0x5d2ax2[_0xe4bc[1850]][_0xe4bc[67]];_0x5d2ax3++){for(var _0x5d2ax4=_0x5d2ax2[_0xe4bc[1850]][_0x5d2ax3],_0x5d2ax5=0;_0x5d2ax5<_0x5d2ax4[_0xe4bc[67]];_0x5d2ax5++){var _0x5d2ax9=_0x5d2ax4[_0x5d2ax5];if(_0x5d2ax9[_0xe4bc[1193]]()){for(var _0x5d2axa=_0x5d2ax9[_0xe4bc[1832]](_0x5d2ax3),_0x5d2ax12=_0x5d2ax3-1,_0x5d2ax13=0;2>_0x5d2ax13;_0x5d2ax13++){if(-1<_0x5d2ax12&&_0x5d2ax12<_0x5d2ax2[_0xe4bc[1850]][_0xe4bc[67]]&&null!=_0x5d2axa&&0<_0x5d2axa[_0xe4bc[67]]){for(var _0x5d2ax14=[],_0x5d2ax15=0;_0x5d2ax15<_0x5d2axa[_0xe4bc[67]];_0x5d2ax15++){var _0x5d2ax16= new WeightedCellSorter(_0x5d2axa[_0x5d2ax15],_0x5d2axa[_0x5d2ax15][_0xe4bc[730]](_0x5d2ax12));_0x5d2ax14[_0xe4bc[207]](_0x5d2ax16)};_0x5d2ax14[_0xe4bc[470]](WeightedCellSorter[_0xe4bc[202]][_0xe4bc[469]]);for(var _0x5d2ax16=_0x5d2ax9[_0xe4bc[235]][0]-_0x5d2ax9[_0xe4bc[117]]/2,_0x5d2ax17=_0x5d2ax16+_0x5d2ax9[_0xe4bc[117]],_0x5d2ax18=_0x5d2axa=0,_0x5d2ax12=[],_0x5d2ax15=0;_0x5d2ax15<_0x5d2ax14[_0xe4bc[67]];_0x5d2ax15++){var _0x5d2ax19=_0x5d2ax14[_0x5d2ax15][_0xe4bc[246]],_0x5d2ax1a;if(_0x5d2ax19[_0xe4bc[1193]]()){_0x5d2ax1a=0==_0x5d2ax13?_0x5d2ax9[_0xe4bc[1838]]:_0x5d2ax9[_0xe4bc[1837]];for(var _0x5d2ax1b=0;_0x5d2ax1b<_0x5d2ax1a[_0xe4bc[67]];_0x5d2ax1b++){if(_0x5d2ax1a[_0x5d2ax1b][_0xe4bc[1097]]==_0x5d2ax19||_0x5d2ax1a[_0x5d2ax1b][_0xe4bc[772]]==_0x5d2ax19){_0x5d2axa+=_0x5d2ax1a[_0x5d2ax1b][_0xe4bc[1842]][_0xe4bc[67]],_0x5d2ax18++,_0x5d2ax12[_0xe4bc[207]](_0x5d2ax1a[_0x5d2ax1b])}}}else {_0x5d2axa+=_0x5d2ax19[_0xe4bc[1842]][_0xe4bc[67]],_0x5d2ax18++,_0x5d2ax12[_0xe4bc[207]](_0x5d2ax19)}};_0x5d2ax9[_0xe4bc[117]]>(_0x5d2axa+1)*this[_0xe4bc[1751]]+2*this[_0xe4bc[1751]]&&(_0x5d2ax16+=this[_0xe4bc[1751]],_0x5d2ax17-=this[_0xe4bc[1751]]);_0x5d2ax14=(_0x5d2ax17-_0x5d2ax16)/_0x5d2axa;_0x5d2ax16+=_0x5d2ax14/2;_0x5d2ax17=this[_0xe4bc[1753]]-this[_0xe4bc[1752]];for(_0x5d2ax15=_0x5d2ax18=0;_0x5d2ax15<_0x5d2ax12[_0xe4bc[67]];_0x5d2ax15++){_0x5d2ax19=_0x5d2ax12[_0x5d2ax15][_0xe4bc[1842]][_0xe4bc[67]];_0x5d2ax1b=mxCellPath[_0xe4bc[385]](_0x5d2ax12[_0x5d2ax15][_0xe4bc[1842]][0]);_0x5d2ax1a=this[_0xe4bc[1873]][_0x5d2ax1b];null==_0x5d2ax1a&&(_0x5d2ax1a=[],this[_0xe4bc[1873]][_0x5d2ax1b]=_0x5d2ax1a);_0x5d2ax15<_0x5d2axa/2?_0x5d2ax17+=this[_0xe4bc[1752]]:_0x5d2ax15>_0x5d2axa/2&&(_0x5d2ax17-=this[_0xe4bc[1752]]);for(_0x5d2ax1b=0;_0x5d2ax1b<_0x5d2ax19;_0x5d2ax1b++){_0x5d2ax1a[4*_0x5d2ax1b+2*_0x5d2ax13]=_0x5d2ax16,_0x5d2ax16+=_0x5d2ax14,_0x5d2ax1a[4*_0x5d2ax1b+2*_0x5d2ax13+1]=_0x5d2ax17};_0x5d2ax18=Math[_0xe4bc[160]](_0x5d2ax18,_0x5d2ax17)}};_0x5d2axa=_0x5d2ax9[_0xe4bc[1831]](_0x5d2ax3);_0x5d2ax12=_0x5d2ax3+1}}}}};mxCoordinateAssignment[_0xe4bc[202]][_0xe4bc[1907]]=function(_0x5d2ax2){var _0x5d2ax3=0;if(101207!=_0x5d2ax2[_0xe4bc[1826]][0]){var _0x5d2ax4=_0x5d2ax2[_0xe4bc[1827]],_0x5d2ax5=_0x5d2ax2[_0xe4bc[1828]];_0x5d2ax4==_0x5d2ax5&&(_0x5d2ax4=_0x5d2ax2[_0xe4bc[1097]][_0xe4bc[1827]],_0x5d2ax5=_0x5d2ax2[_0xe4bc[772]][_0xe4bc[1828]]);for(var _0x5d2ax9=0,_0x5d2axa=mxCellPath[_0xe4bc[385]](_0x5d2ax2[_0xe4bc[1842]][0]),_0x5d2axa=this[_0xe4bc[1873]][_0x5d2axa],_0x5d2ax12=_0x5d2ax2[_0xe4bc[1843]]?_0x5d2ax2[_0xe4bc[772]][_0xe4bc[246]]:_0x5d2ax2[_0xe4bc[1097]][_0xe4bc[246]],_0x5d2ax13=this[_0xe4bc[1759]][_0xe4bc[1179]],_0x5d2ax14=0;_0x5d2ax14<_0x5d2ax2[_0xe4bc[1842]][_0xe4bc[67]];_0x5d2ax14++){var _0x5d2ax15=_0x5d2ax2[_0xe4bc[1842]][_0x5d2ax14],_0x5d2ax16=this[_0xe4bc[1759]][_0xe4bc[1710]](_0x5d2ax15,!0),_0x5d2ax17=_0x5d2ax13[_0xe4bc[251]][_0xe4bc[1709]](_0x5d2ax15,!0),_0x5d2ax18=[],_0x5d2ax19=_0x5d2ax2[_0xe4bc[1843]];_0x5d2ax16!=_0x5d2ax12&&(_0x5d2ax19= !_0x5d2ax19);if(null!=_0x5d2axa){var _0x5d2ax1a=_0x5d2ax19?2:0,_0x5d2ax1b=_0x5d2ax19?this[_0xe4bc[1877]][_0x5d2ax5]:this[_0xe4bc[1878]][_0x5d2ax4],_0x5d2ax1c=_0x5d2axa[4*_0x5d2ax9+1+_0x5d2ax1a];_0x5d2ax19&&(_0x5d2ax1c= -_0x5d2ax1c);_0x5d2ax1b+=_0x5d2ax1c;_0x5d2ax1a=_0x5d2axa[4*_0x5d2ax9+_0x5d2ax1a];_0x5d2ax17=_0x5d2ax13[_0xe4bc[251]][_0xe4bc[1709]](_0x5d2ax15,!0);this[_0xe4bc[1759]][_0xe4bc[1908]](_0x5d2ax17)&&_0x5d2ax13[_0xe4bc[251]][_0xe4bc[1197]](_0x5d2ax17)==_0x5d2ax16&&(_0x5d2ax1a=_0x5d2ax13[_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax17),_0x5d2ax1a=null!=_0x5d2ax1a?_0x5d2ax1a[_0xe4bc[235]]:_0x5d2ax16[_0xe4bc[256]][_0xe4bc[235]]+_0x5d2ax2[_0xe4bc[1097]][_0xe4bc[117]]*_0x5d2ax17[_0xe4bc[256]][_0xe4bc[235]]);this[_0xe4bc[1870]]==mxConstants[_0xe4bc[1358]]||this[_0xe4bc[1870]]==mxConstants[_0xe4bc[1354]]?(_0x5d2ax18[_0xe4bc[207]]( new mxPoint(_0x5d2ax1a,_0x5d2ax1b)),this[_0xe4bc[675]]==mxHierarchicalEdgeStyle[_0xe4bc[1906]]&&_0x5d2ax18[_0xe4bc[207]]( new mxPoint(_0x5d2ax1a,_0x5d2ax1b+_0x5d2ax1c))):(_0x5d2ax18[_0xe4bc[207]]( new mxPoint(_0x5d2ax1b,_0x5d2ax1a)),this[_0xe4bc[675]]==mxHierarchicalEdgeStyle[_0xe4bc[1906]]&&_0x5d2ax18[_0xe4bc[207]]( new mxPoint(_0x5d2ax1b+_0x5d2ax1c,_0x5d2ax1a)))};_0x5d2ax1a=_0x5d2ax2[_0xe4bc[235]][_0xe4bc[67]]-1;_0x5d2ax1b=_0x5d2ax1c= -1;_0x5d2ax16=_0x5d2ax2[_0xe4bc[1827]]-1;_0x5d2ax19&&(_0x5d2ax1a=0,_0x5d2ax1c=_0x5d2ax2[_0xe4bc[235]][_0xe4bc[67]],_0x5d2ax1b=1,_0x5d2ax16=_0x5d2ax2[_0xe4bc[1828]]+1);for(;_0x5d2ax2[_0xe4bc[1827]]!=_0x5d2ax2[_0xe4bc[1828]]&&_0x5d2ax1a!=_0x5d2ax1c;_0x5d2ax1a+=_0x5d2ax1b){var _0x5d2ax17=_0x5d2ax2[_0xe4bc[235]][_0x5d2ax1a]+_0x5d2ax3,_0x5d2ax1d=(this[_0xe4bc[1877]][_0x5d2ax16]+this[_0xe4bc[1878]][_0x5d2ax16+1])/2,_0x5d2ax1e=(this[_0xe4bc[1877]][_0x5d2ax16-1]+this[_0xe4bc[1878]][_0x5d2ax16])/2;if(_0x5d2ax19){var _0x5d2ax1f=_0x5d2ax1d,_0x5d2ax1d=_0x5d2ax1e,_0x5d2ax1e=_0x5d2ax1f};this[_0xe4bc[1870]]==mxConstants[_0xe4bc[1358]]||this[_0xe4bc[1870]]==mxConstants[_0xe4bc[1354]]?(_0x5d2ax18[_0xe4bc[207]]( new mxPoint(_0x5d2ax17,_0x5d2ax1d)),_0x5d2ax18[_0xe4bc[207]]( new mxPoint(_0x5d2ax17,_0x5d2ax1e))):(_0x5d2ax18[_0xe4bc[207]]( new mxPoint(_0x5d2ax1d,_0x5d2ax17)),_0x5d2ax18[_0xe4bc[207]]( new mxPoint(_0x5d2ax1e,_0x5d2ax17)));this[_0xe4bc[1874]]=Math[_0xe4bc[160]](this[_0xe4bc[1874]],_0x5d2ax17);_0x5d2ax16+=_0x5d2ax1b};null!=_0x5d2axa&&(_0x5d2ax1a=_0x5d2ax19?2:0,_0x5d2ax1b=_0x5d2ax19?this[_0xe4bc[1878]][_0x5d2ax4]:this[_0xe4bc[1877]][_0x5d2ax5],_0x5d2ax1c=_0x5d2axa[4*_0x5d2ax9+3-_0x5d2ax1a],_0x5d2ax19&&(_0x5d2ax1c= -_0x5d2ax1c),_0x5d2ax1b-=_0x5d2ax1c,_0x5d2ax1a=_0x5d2axa[4*_0x5d2ax9+2-_0x5d2ax1a],_0x5d2ax19=_0x5d2ax13[_0xe4bc[251]][_0xe4bc[1709]](_0x5d2ax15,!1),_0x5d2ax16=this[_0xe4bc[1759]][_0xe4bc[1710]](_0x5d2ax15,!1),this[_0xe4bc[1759]][_0xe4bc[1908]](_0x5d2ax19)&&_0x5d2ax13[_0xe4bc[251]][_0xe4bc[1197]](_0x5d2ax19)==_0x5d2ax16&&(_0x5d2ax1a=_0x5d2ax13[_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax19),_0x5d2ax1a=null!=_0x5d2ax1a?_0x5d2ax1a[_0xe4bc[235]]:_0x5d2ax16[_0xe4bc[256]][_0xe4bc[235]]+_0x5d2ax2[_0xe4bc[772]][_0xe4bc[117]]*_0x5d2ax19[_0xe4bc[256]][_0xe4bc[235]]),this[_0xe4bc[1870]]==mxConstants[_0xe4bc[1358]]||this[_0xe4bc[1870]]==mxConstants[_0xe4bc[1354]]?(this[_0xe4bc[675]]==mxHierarchicalEdgeStyle[_0xe4bc[1906]]&&_0x5d2ax18[_0xe4bc[207]]( new mxPoint(_0x5d2ax1a,_0x5d2ax1b-_0x5d2ax1c)),_0x5d2ax18[_0xe4bc[207]]( new mxPoint(_0x5d2ax1a,_0x5d2ax1b))):(this[_0xe4bc[675]]==mxHierarchicalEdgeStyle[_0xe4bc[1906]]&&_0x5d2ax18[_0xe4bc[207]]( new mxPoint(_0x5d2ax1b-_0x5d2ax1c,_0x5d2ax1a)),_0x5d2ax18[_0xe4bc[207]]( new mxPoint(_0x5d2ax1b,_0x5d2ax1a))));_0x5d2ax2[_0xe4bc[1843]]&&this[_0xe4bc[1909]](_0x5d2ax2,_0x5d2ax15);this[_0xe4bc[1759]][_0xe4bc[1722]](_0x5d2ax15,_0x5d2ax18);_0x5d2ax3=0==_0x5d2ax3?this[_0xe4bc[1872]]:0<_0x5d2ax3?-_0x5d2ax3:-_0x5d2ax3+this[_0xe4bc[1872]];_0x5d2ax9++};_0x5d2ax2[_0xe4bc[1826]][0]=101207}};mxCoordinateAssignment[_0xe4bc[202]][_0xe4bc[1725]]=function(_0x5d2ax2){var _0x5d2ax3=_0x5d2ax2[_0xe4bc[246]],_0x5d2ax4=_0x5d2ax2[_0xe4bc[235]][0]-_0x5d2ax2[_0xe4bc[117]]/2,_0x5d2ax5=_0x5d2ax2[_0xe4bc[236]][0]-_0x5d2ax2[_0xe4bc[119]]/2;this[_0xe4bc[1877]][_0x5d2ax2[_0xe4bc[1828]]]=Math[_0xe4bc[243]](this[_0xe4bc[1877]][_0x5d2ax2[_0xe4bc[1828]]],_0x5d2ax5);this[_0xe4bc[1878]][_0x5d2ax2[_0xe4bc[1828]]]=Math[_0xe4bc[160]](this[_0xe4bc[1878]][_0x5d2ax2[_0xe4bc[1828]]],_0x5d2ax5+_0x5d2ax2[_0xe4bc[119]]);this[_0xe4bc[1870]]==mxConstants[_0xe4bc[1358]]||this[_0xe4bc[1870]]==mxConstants[_0xe4bc[1354]]?this[_0xe4bc[1759]][_0xe4bc[1725]](_0x5d2ax3,_0x5d2ax4,_0x5d2ax5):this[_0xe4bc[1759]][_0xe4bc[1725]](_0x5d2ax3,_0x5d2ax5,_0x5d2ax4);this[_0xe4bc[1874]]=Math[_0xe4bc[160]](this[_0xe4bc[1874]],_0x5d2ax4+_0x5d2ax2[_0xe4bc[117]])};mxCoordinateAssignment[_0xe4bc[202]][_0xe4bc[1909]]=function(_0x5d2ax2,_0x5d2ax3){};function WeightedCellSorter(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[246]]=_0x5d2ax2;this[_0xe4bc[1782]]=_0x5d2ax3}WeightedCellSorter[_0xe4bc[202]][_0xe4bc[1782]]=0;WeightedCellSorter[_0xe4bc[202]][_0xe4bc[1783]]= !1;WeightedCellSorter[_0xe4bc[202]][_0xe4bc[1784]]= !1;WeightedCellSorter[_0xe4bc[202]][_0xe4bc[1785]]=null;WeightedCellSorter[_0xe4bc[202]][_0xe4bc[246]]=null;WeightedCellSorter[_0xe4bc[202]][_0xe4bc[469]]=function(_0x5d2ax2,_0x5d2ax3){return null!=_0x5d2ax2&&null!=_0x5d2ax3?_0x5d2ax3[_0xe4bc[1782]]>_0x5d2ax2[_0xe4bc[1782]]?-1:_0x5d2ax3[_0xe4bc[1782]]<_0x5d2ax2[_0xe4bc[1782]]?1:_0x5d2ax3[_0xe4bc[1783]]?-1:1:0};function mxHierarchicalLayout(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){mxGraphLayout[_0xe4bc[239]](this,_0x5d2ax2);this[_0xe4bc[1870]]=null!=_0x5d2ax3?_0x5d2ax3:mxConstants[_0xe4bc[1358]];this[_0xe4bc[1910]]=null!=_0x5d2ax4?_0x5d2ax4:!0}mxHierarchicalLayout[_0xe4bc[202]]= new mxGraphLayout;mxHierarchicalLayout[_0xe4bc[202]][_0xe4bc[196]]=mxHierarchicalLayout;mxHierarchicalLayout[_0xe4bc[202]][_0xe4bc[1845]]=null;mxHierarchicalLayout[_0xe4bc[202]][_0xe4bc[1735]]= !1;mxHierarchicalLayout[_0xe4bc[202]][_0xe4bc[1911]]= !1;mxHierarchicalLayout[_0xe4bc[202]][_0xe4bc[1912]]=0;mxHierarchicalLayout[_0xe4bc[202]][_0xe4bc[1868]]=30;mxHierarchicalLayout[_0xe4bc[202]][_0xe4bc[1869]]=100;mxHierarchicalLayout[_0xe4bc[202]][_0xe4bc[1913]]=60;mxHierarchicalLayout[_0xe4bc[202]][_0xe4bc[1872]]=10;mxHierarchicalLayout[_0xe4bc[202]][_0xe4bc[1870]]=mxConstants[_0xe4bc[1358]];mxHierarchicalLayout[_0xe4bc[202]][_0xe4bc[1882]]= !0;mxHierarchicalLayout[_0xe4bc[202]][_0xe4bc[1844]]= !0;mxHierarchicalLayout[_0xe4bc[202]][_0xe4bc[1787]]= !0;mxHierarchicalLayout[_0xe4bc[202]][_0xe4bc[1914]]= !0;mxHierarchicalLayout[_0xe4bc[202]][_0xe4bc[251]]=null;mxHierarchicalLayout[_0xe4bc[202]][_0xe4bc[1915]]=null;mxHierarchicalLayout[_0xe4bc[202]][_0xe4bc[502]]=function(){return this[_0xe4bc[251]]};mxHierarchicalLayout[_0xe4bc[202]][_0xe4bc[350]]=function(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[1101]]=_0x5d2ax2;var _0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[251]];this[_0xe4bc[1915]]={};if(!(null==_0x5d2ax3&&null==_0x5d2ax2)){if(null!=_0x5d2ax3&&null!=_0x5d2ax2){for(var _0x5d2ax5=[],_0x5d2ax9=0;_0x5d2ax9<_0x5d2ax3[_0xe4bc[67]];_0x5d2ax9++){_0x5d2ax4[_0xe4bc[1720]](_0x5d2ax2,_0x5d2ax3[_0x5d2ax9])&&_0x5d2ax5[_0xe4bc[207]](_0x5d2ax3[_0x5d2ax9])};this[_0xe4bc[1845]]=_0x5d2ax5}else {this[_0xe4bc[1845]]=_0x5d2ax3};_0x5d2ax4[_0xe4bc[473]]();try{this[_0xe4bc[1916]](_0x5d2ax2),this[_0xe4bc[1735]]&&!this[_0xe4bc[1179]][_0xe4bc[1742]](_0x5d2ax2)&&this[_0xe4bc[1179]][_0xe4bc[1917]]([_0x5d2ax2],this[_0xe4bc[1912]],this[_0xe4bc[1911]])}finally{_0x5d2ax4[_0xe4bc[476]]()}}};mxHierarchicalLayout[_0xe4bc[202]][_0xe4bc[1918]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=[];if(null!=_0x5d2ax2&&null!=_0x5d2ax3){var _0x5d2ax5=this[_0xe4bc[1179]][_0xe4bc[251]],_0x5d2ax9=null,_0x5d2axa=-1E5,_0x5d2ax12;for(_0x5d2ax12 in _0x5d2ax3){var _0x5d2ax13=_0x5d2ax3[_0x5d2ax12];if(_0x5d2ax5[_0xe4bc[1193]](_0x5d2ax13)&&this[_0xe4bc[1179]][_0xe4bc[1714]](_0x5d2ax13)){for(var _0x5d2ax14=this[_0xe4bc[264]](_0x5d2ax13),_0x5d2ax15=0,_0x5d2ax16=0,_0x5d2ax17=0;_0x5d2ax17<_0x5d2ax14[_0xe4bc[67]];_0x5d2ax17++){this[_0xe4bc[1710]](_0x5d2ax14[_0x5d2ax17],!0)==_0x5d2ax13?_0x5d2ax15++:_0x5d2ax16++};0==_0x5d2ax16&&0<_0x5d2ax15&&_0x5d2ax4[_0xe4bc[207]](_0x5d2ax13);_0x5d2ax14=_0x5d2ax15-_0x5d2ax16;_0x5d2ax14>_0x5d2axa&&(_0x5d2axa=_0x5d2ax14,_0x5d2ax9=_0x5d2ax13)}};0==_0x5d2ax4[_0xe4bc[67]]&&null!=_0x5d2ax9&&_0x5d2ax4[_0xe4bc[207]](_0x5d2ax9)};return _0x5d2ax4};mxHierarchicalLayout[_0xe4bc[202]][_0xe4bc[264]]=function(_0x5d2ax2){var _0x5d2ax3=mxCellPath[_0xe4bc[385]](_0x5d2ax2);if(null!=this[_0xe4bc[1915]][_0x5d2ax3]){return this[_0xe4bc[1915]][_0x5d2ax3]};for(var _0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[251]],_0x5d2ax5=[],_0x5d2ax9=this[_0xe4bc[1179]][_0xe4bc[1742]](_0x5d2ax2),_0x5d2axa=_0x5d2ax4[_0xe4bc[262]](_0x5d2ax2),_0x5d2ax12=0;_0x5d2ax12<_0x5d2axa;_0x5d2ax12++){var _0x5d2ax13=_0x5d2ax4[_0xe4bc[263]](_0x5d2ax2,_0x5d2ax12);if(this[_0xe4bc[1908]](_0x5d2ax13)){_0x5d2ax5=_0x5d2ax5[_0xe4bc[1919]](_0x5d2ax4[_0xe4bc[264]](_0x5d2ax13,!0,!0))}else {if(_0x5d2ax9||!this[_0xe4bc[1179]][_0xe4bc[1714]](_0x5d2ax13)){_0x5d2ax5=_0x5d2ax5[_0xe4bc[1919]](_0x5d2ax4[_0xe4bc[264]](_0x5d2ax13,!0,!0))}}};_0x5d2ax5=_0x5d2ax5[_0xe4bc[1919]](_0x5d2ax4[_0xe4bc[264]](_0x5d2ax2,!0,!0));_0x5d2ax4=[];for(_0x5d2ax12=0;_0x5d2ax12<_0x5d2ax5[_0xe4bc[67]];_0x5d2ax12++){_0x5d2ax9=this[_0xe4bc[1710]](_0x5d2ax5[_0x5d2ax12],!0),_0x5d2axa=this[_0xe4bc[1710]](_0x5d2ax5[_0x5d2ax12],!1),(_0x5d2ax9==_0x5d2axa||_0x5d2ax9!=_0x5d2axa&&(_0x5d2axa==_0x5d2ax2&&(null==this[_0xe4bc[1101]]||this[_0xe4bc[1179]][_0xe4bc[1920]](_0x5d2ax9,this[_0xe4bc[1101]],this[_0xe4bc[1914]]))||_0x5d2ax9==_0x5d2ax2&&(null==this[_0xe4bc[1101]]||this[_0xe4bc[1179]][_0xe4bc[1920]](_0x5d2axa,this[_0xe4bc[1101]],this[_0xe4bc[1914]]))))&&_0x5d2ax4[_0xe4bc[207]](_0x5d2ax5[_0x5d2ax12])};return this[_0xe4bc[1915]][_0x5d2ax3]=_0x5d2ax4};mxHierarchicalLayout[_0xe4bc[202]][_0xe4bc[1710]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax2),_0x5d2ax4=null!=_0x5d2ax4?_0x5d2ax4[_0xe4bc[1710]](_0x5d2ax3):this[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[1710]](_0x5d2ax2,_0x5d2ax3);this[_0xe4bc[1908]](_0x5d2ax4)&&(_0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[251]][_0xe4bc[1197]](_0x5d2ax4));return _0x5d2ax4};mxHierarchicalLayout[_0xe4bc[202]][_0xe4bc[1916]]=function(_0x5d2ax2){var _0x5d2ax3=[],_0x5d2ax4=[];if(null==this[_0xe4bc[1845]]&&null!=_0x5d2ax2){var _0x5d2ax5={};this[_0xe4bc[1921]](_0x5d2ax2,_0x5d2ax5);this[_0xe4bc[1845]]=[];var _0x5d2ax9=!0,_0x5d2axa;for(_0x5d2axa in _0x5d2ax5){if(null!=_0x5d2ax5[_0x5d2axa]){_0x5d2ax9= !1;break}};for(;!_0x5d2ax9;){for(var _0x5d2ax12=this[_0xe4bc[1918]](_0x5d2ax2,_0x5d2ax5),_0x5d2ax9=0;_0x5d2ax9<_0x5d2ax12[_0xe4bc[67]];_0x5d2ax9++){var _0x5d2ax13=[];_0x5d2ax3[_0xe4bc[207]](_0x5d2ax13);this[_0xe4bc[1706]](_0x5d2ax12[_0x5d2ax9],!0,null,_0x5d2ax4,_0x5d2ax13,_0x5d2ax3,_0x5d2ax5)};for(_0x5d2ax9=0;_0x5d2ax9<_0x5d2ax12[_0xe4bc[67]];_0x5d2ax9++){this[_0xe4bc[1845]][_0xe4bc[207]](_0x5d2ax12[_0x5d2ax9])};_0x5d2ax9= !0;for(_0x5d2axa in _0x5d2ax5){if(null!=_0x5d2ax5[_0x5d2axa]){_0x5d2ax9= !1;break}}}}else {for(_0x5d2ax9=0;_0x5d2ax9<roots[_0xe4bc[67]];_0x5d2ax9++){_0x5d2ax13=[],_0x5d2ax3[_0xe4bc[207]](_0x5d2ax13),traverse(roots[_0xe4bc[203]](_0x5d2ax9),!0,null,_0x5d2ax4,_0x5d2ax13,_0x5d2ax3,null)}};for(_0x5d2ax9=_0x5d2ax4=0;_0x5d2ax9<_0x5d2ax3[_0xe4bc[67]];_0x5d2ax9++){_0x5d2ax13=_0x5d2ax3[_0x5d2ax9];_0x5d2ax5=[];for(_0x5d2axa in _0x5d2ax13){_0x5d2ax5[_0xe4bc[207]](_0x5d2ax13[_0x5d2axa])};this[_0xe4bc[251]]= new mxGraphHierarchyModel(this,_0x5d2ax5,this[_0xe4bc[1845]],_0x5d2ax2,this[_0xe4bc[1844]]);this[_0xe4bc[1922]](_0x5d2ax2);this[_0xe4bc[1923]]();this[_0xe4bc[1924]](_0x5d2ax2);_0x5d2ax4=this[_0xe4bc[1925]](_0x5d2ax4,_0x5d2ax2)}};mxHierarchicalLayout[_0xe4bc[202]][_0xe4bc[1921]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[251]];_0x5d2ax4[_0xe4bc[1193]](_0x5d2ax2)&&(_0x5d2ax2!=this[_0xe4bc[1101]]&&this[_0xe4bc[1179]][_0xe4bc[1714]](_0x5d2ax2))&&(_0x5d2ax3[mxCellPath[_0xe4bc[385]](_0x5d2ax2)]=_0x5d2ax2);if(this[_0xe4bc[1914]]||_0x5d2ax2==this[_0xe4bc[1101]]&&this[_0xe4bc[1179]][_0xe4bc[1714]](_0x5d2ax2)){for(var _0x5d2ax5=_0x5d2ax4[_0xe4bc[262]](_0x5d2ax2),_0x5d2ax9=0;_0x5d2ax9<_0x5d2ax5;_0x5d2ax9++){var _0x5d2axa=_0x5d2ax4[_0xe4bc[263]](_0x5d2ax2,_0x5d2ax9);this[_0xe4bc[1908]](_0x5d2axa)||this[_0xe4bc[1921]](_0x5d2axa,_0x5d2ax3)}}};mxHierarchicalLayout[_0xe4bc[202]][_0xe4bc[1908]]=function(_0x5d2ax2){return _0x5d2ax2[_0xe4bc[256]][_0xe4bc[1500]]?!0:!1};mxHierarchicalLayout[_0xe4bc[202]][_0xe4bc[1781]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){_0x5d2ax4=null!=_0x5d2ax4?_0x5d2ax4:!1;for(var _0x5d2ax5=this[_0xe4bc[264]](_0x5d2ax2),_0x5d2ax9=[],_0x5d2axa=0;_0x5d2axa<_0x5d2ax5[_0xe4bc[67]];_0x5d2axa++){var _0x5d2ax12=this[_0xe4bc[1710]](_0x5d2ax5[_0x5d2axa],!0),_0x5d2ax13=this[_0xe4bc[1710]](_0x5d2ax5[_0x5d2axa],!1);(_0x5d2ax12==_0x5d2ax2&&_0x5d2ax13==_0x5d2ax3||!_0x5d2ax4&&_0x5d2ax12==_0x5d2ax3&&_0x5d2ax13==_0x5d2ax2)&&_0x5d2ax9[_0xe4bc[207]](_0x5d2ax5[_0x5d2axa])};return _0x5d2ax9};mxHierarchicalLayout[_0xe4bc[202]][_0xe4bc[1706]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa,_0x5d2ax12){if(null!=_0x5d2ax2&&null!=_0x5d2ax5){var _0x5d2ax13=mxCellPath[_0xe4bc[385]](_0x5d2ax2);if(null==_0x5d2ax5[_0x5d2ax13]&&(null==_0x5d2ax12||null!=_0x5d2ax12[_0x5d2ax13])){null==_0x5d2ax9[_0x5d2ax13]&&(_0x5d2ax9[_0x5d2ax13]=_0x5d2ax2);null==_0x5d2ax5[_0x5d2ax13]&&(_0x5d2ax5[_0x5d2ax13]=_0x5d2ax2);delete _0x5d2ax12[_0x5d2ax13];var _0x5d2ax14=this[_0xe4bc[264]](_0x5d2ax2);for(_0x5d2ax4=0;_0x5d2ax4<_0x5d2ax14[_0xe4bc[67]];_0x5d2ax4++){if(_0x5d2ax13=this[_0xe4bc[1710]](_0x5d2ax14[_0x5d2ax4],!0)==_0x5d2ax2,!_0x5d2ax3||_0x5d2ax13){_0x5d2ax13=this[_0xe4bc[1710]](_0x5d2ax14[_0x5d2ax4],!_0x5d2ax13),_0x5d2ax9=this[_0xe4bc[1706]](_0x5d2ax13,_0x5d2ax3,_0x5d2ax14[_0x5d2ax4],_0x5d2ax5,_0x5d2ax9,_0x5d2axa,_0x5d2ax12)}}}else {if(null==_0x5d2ax9[_0x5d2ax13]){for(_0x5d2ax4=0;_0x5d2ax4<_0x5d2axa[_0xe4bc[67]];_0x5d2ax4++){if(_0x5d2ax2=_0x5d2axa[_0x5d2ax4],null!=_0x5d2ax2[_0x5d2ax13]){for(_0x5d2ax14 in _0x5d2ax9){_0x5d2ax2[_0x5d2ax14]=_0x5d2ax9[_0x5d2ax14]};_0x5d2axa[_0xe4bc[1242]]();return _0x5d2ax2}}}}};return _0x5d2ax9};mxHierarchicalLayout[_0xe4bc[202]][_0xe4bc[1922]]=function(_0x5d2ax2){( new mxMinimumCycleRemover(this))[_0xe4bc[350]](_0x5d2ax2)};mxHierarchicalLayout[_0xe4bc[202]][_0xe4bc[1923]]=function(){this[_0xe4bc[251]][_0xe4bc[1852]]();this[_0xe4bc[251]][_0xe4bc[1854]]()};mxHierarchicalLayout[_0xe4bc[202]][_0xe4bc[1924]]=function(_0x5d2ax2){( new mxMedianHybridCrossingReduction(this))[_0xe4bc[350]](_0x5d2ax2)};mxHierarchicalLayout[_0xe4bc[202]][_0xe4bc[1925]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4= new mxCoordinateAssignment(this,this[_0xe4bc[1868]],this[_0xe4bc[1869]],this[_0xe4bc[1870]],_0x5d2ax2,this[_0xe4bc[1872]]);_0x5d2ax4[_0xe4bc[1882]]=this[_0xe4bc[1882]];_0x5d2ax4[_0xe4bc[350]](_0x5d2ax3);return _0x5d2ax4[_0xe4bc[1874]]+this[_0xe4bc[1913]]};function mxGraphModel(_0x5d2ax2){this[_0xe4bc[1926]]=this[_0xe4bc[1096]]();null!=_0x5d2ax2?this[_0xe4bc[1927]](_0x5d2ax2):this[_0xe4bc[200]]()}mxGraphModel[_0xe4bc[202]]= new mxEventSource;mxGraphModel[_0xe4bc[202]][_0xe4bc[196]]=mxGraphModel;mxGraphModel[_0xe4bc[202]][_0xe4bc[813]]=null;mxGraphModel[_0xe4bc[202]][_0xe4bc[895]]=null;mxGraphModel[_0xe4bc[202]][_0xe4bc[1928]]= !0;mxGraphModel[_0xe4bc[202]][_0xe4bc[1929]]= !0;mxGraphModel[_0xe4bc[202]][_0xe4bc[1089]]=_0xe4bc[110];mxGraphModel[_0xe4bc[202]][_0xe4bc[1930]]=_0xe4bc[110];mxGraphModel[_0xe4bc[202]][_0xe4bc[1931]]=0;mxGraphModel[_0xe4bc[202]][_0xe4bc[1926]]=null;mxGraphModel[_0xe4bc[202]][_0xe4bc[1932]]=0;mxGraphModel[_0xe4bc[202]][_0xe4bc[1933]]= !1;mxGraphModel[_0xe4bc[202]][_0xe4bc[200]]=function(){this[_0xe4bc[1927]](this[_0xe4bc[1934]]())};mxGraphModel[_0xe4bc[202]][_0xe4bc[1935]]=function(){return this[_0xe4bc[1929]]};mxGraphModel[_0xe4bc[202]][_0xe4bc[1936]]=function(_0x5d2ax2){this[_0xe4bc[1929]]=_0x5d2ax2};mxGraphModel[_0xe4bc[202]][_0xe4bc[1934]]=function(){var _0x5d2ax2= new mxCell;_0x5d2ax2[_0xe4bc[1937]]( new mxCell);return _0x5d2ax2};mxGraphModel[_0xe4bc[202]][_0xe4bc[736]]=function(_0x5d2ax2){return null!=this[_0xe4bc[895]]?this[_0xe4bc[895]][_0x5d2ax2]:null};mxGraphModel[_0xe4bc[202]][_0xe4bc[1938]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=null;if(null!=_0x5d2ax2){for(var _0x5d2ax4=[],_0x5d2ax5=0;_0x5d2ax5<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax5++){_0x5d2ax3(_0x5d2ax2[_0x5d2ax5])&&_0x5d2ax4[_0xe4bc[207]](_0x5d2ax2[_0x5d2ax5])}};return _0x5d2ax4};mxGraphModel[_0xe4bc[202]][_0xe4bc[1939]]=function(_0x5d2ax2){return this[_0xe4bc[1921]](null,_0x5d2ax2)};mxGraphModel[_0xe4bc[202]][_0xe4bc[1921]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=[];_0x5d2ax3=_0x5d2ax3||this[_0xe4bc[501]]();(null==_0x5d2ax2||_0x5d2ax2(_0x5d2ax3))&&_0x5d2ax4[_0xe4bc[207]](_0x5d2ax3);for(var _0x5d2ax5=this[_0xe4bc[262]](_0x5d2ax3),_0x5d2ax9=0;_0x5d2ax9<_0x5d2ax5;_0x5d2ax9++){var _0x5d2axa=this[_0xe4bc[263]](_0x5d2ax3,_0x5d2ax9),_0x5d2ax4=_0x5d2ax4[_0xe4bc[1919]](this[_0xe4bc[1921]](_0x5d2ax2,_0x5d2axa))};return _0x5d2ax4};mxGraphModel[_0xe4bc[202]][_0xe4bc[501]]=function(_0x5d2ax2){var _0x5d2ax3=_0x5d2ax2||this[_0xe4bc[813]];if(null!=_0x5d2ax2){for(;null!=_0x5d2ax2;){_0x5d2ax3=_0x5d2ax2,_0x5d2ax2=this[_0xe4bc[1197]](_0x5d2ax2)}};return _0x5d2ax3};mxGraphModel[_0xe4bc[202]][_0xe4bc[1927]]=function(_0x5d2ax2){this[_0xe4bc[350]]( new mxRootChange(this,_0x5d2ax2));return _0x5d2ax2};mxGraphModel[_0xe4bc[202]][_0xe4bc[1940]]=function(_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[813]];this[_0xe4bc[813]]=_0x5d2ax2;this[_0xe4bc[1931]]=0;this[_0xe4bc[895]]=null;this[_0xe4bc[1941]](_0x5d2ax2);return _0x5d2ax3};mxGraphModel[_0xe4bc[202]][_0xe4bc[1942]]=function(_0x5d2ax2){return null!=_0x5d2ax2&&this[_0xe4bc[813]]==_0x5d2ax2};mxGraphModel[_0xe4bc[202]][_0xe4bc[1740]]=function(_0x5d2ax2){return this[_0xe4bc[1942]](this[_0xe4bc[1197]](_0x5d2ax2))};mxGraphModel[_0xe4bc[202]][_0xe4bc[1720]]=function(_0x5d2ax2,_0x5d2ax3){for(;null!=_0x5d2ax3&&_0x5d2ax3!=_0x5d2ax2;){_0x5d2ax3=this[_0xe4bc[1197]](_0x5d2ax3)};return _0x5d2ax3==_0x5d2ax2};mxGraphModel[_0xe4bc[202]][_0xe4bc[442]]=function(_0x5d2ax2){return this[_0xe4bc[1720]](this[_0xe4bc[813]],_0x5d2ax2)};mxGraphModel[_0xe4bc[202]][_0xe4bc[1197]]=function(_0x5d2ax2){return null!=_0x5d2ax2?_0x5d2ax2[_0xe4bc[1197]]():null};mxGraphModel[_0xe4bc[202]][_0xe4bc[99]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){if(_0x5d2ax3!=_0x5d2ax2&&null!=_0x5d2ax2&&null!=_0x5d2ax3){null==_0x5d2ax4&&(_0x5d2ax4=this[_0xe4bc[262]](_0x5d2ax2));var _0x5d2ax5=_0x5d2ax2!=this[_0xe4bc[1197]](_0x5d2ax3);this[_0xe4bc[350]]( new mxChildChange(this,_0x5d2ax2,_0x5d2ax3,_0x5d2ax4));this[_0xe4bc[1928]]&&_0x5d2ax5&&this[_0xe4bc[1943]](_0x5d2ax3)};return _0x5d2ax3};mxGraphModel[_0xe4bc[202]][_0xe4bc[1941]]=function(_0x5d2ax2){if(null!=_0x5d2ax2){null==_0x5d2ax2[_0xe4bc[1103]]()&&this[_0xe4bc[1929]]&&_0x5d2ax2[_0xe4bc[1945]](this[_0xe4bc[1944]](_0x5d2ax2));if(null!=_0x5d2ax2[_0xe4bc[1103]]()){var _0x5d2ax3=this[_0xe4bc[736]](_0x5d2ax2[_0xe4bc[1103]]());if(_0x5d2ax3!=_0x5d2ax2){for(;null!=_0x5d2ax3;){_0x5d2ax2[_0xe4bc[1945]](this[_0xe4bc[1944]](_0x5d2ax2)),_0x5d2ax3=this[_0xe4bc[736]](_0x5d2ax2[_0xe4bc[1103]]())};null==this[_0xe4bc[895]]&&(this[_0xe4bc[895]]={});this[_0xe4bc[895]][_0x5d2ax2[_0xe4bc[1103]]()]=_0x5d2ax2}};mxUtils[_0xe4bc[1946]](_0x5d2ax2[_0xe4bc[1103]]())&&(this[_0xe4bc[1931]]=Math[_0xe4bc[160]](this[_0xe4bc[1931]],_0x5d2ax2[_0xe4bc[1103]]()));for(var _0x5d2ax3=this[_0xe4bc[262]](_0x5d2ax2),_0x5d2ax4=0;_0x5d2ax4<_0x5d2ax3;_0x5d2ax4++){this[_0xe4bc[1941]](this[_0xe4bc[263]](_0x5d2ax2,_0x5d2ax4))}}};mxGraphModel[_0xe4bc[202]][_0xe4bc[1944]]=function(_0x5d2ax2){_0x5d2ax2=this[_0xe4bc[1931]];this[_0xe4bc[1931]]++;return this[_0xe4bc[1089]]+_0x5d2ax2+this[_0xe4bc[1930]]};mxGraphModel[_0xe4bc[202]][_0xe4bc[1943]]=function(_0x5d2ax2,_0x5d2ax3){_0x5d2ax3=_0x5d2ax3||this[_0xe4bc[501]](_0x5d2ax2);for(var _0x5d2ax4=this[_0xe4bc[262]](_0x5d2ax2),_0x5d2ax5=0;_0x5d2ax5<_0x5d2ax4;_0x5d2ax5++){var _0x5d2ax9=this[_0xe4bc[263]](_0x5d2ax2,_0x5d2ax5);this[_0xe4bc[1943]](_0x5d2ax9,_0x5d2ax3)};_0x5d2ax9=this[_0xe4bc[1707]](_0x5d2ax2);_0x5d2ax4=[];for(_0x5d2ax5=0;_0x5d2ax5<_0x5d2ax9;_0x5d2ax5++){_0x5d2ax4[_0xe4bc[207]](this[_0xe4bc[1708]](_0x5d2ax2,_0x5d2ax5))};for(_0x5d2ax5=0;_0x5d2ax5<_0x5d2ax4[_0xe4bc[67]];_0x5d2ax5++){_0x5d2ax9=_0x5d2ax4[_0x5d2ax5],this[_0xe4bc[1720]](_0x5d2ax3,_0x5d2ax9)&&this[_0xe4bc[1947]](_0x5d2ax9,_0x5d2ax3)}};mxGraphModel[_0xe4bc[202]][_0xe4bc[1947]]=function(_0x5d2ax2,_0x5d2ax3){for(var _0x5d2ax4=this[_0xe4bc[1709]](_0x5d2ax2,!0),_0x5d2ax5=this[_0xe4bc[1709]](_0x5d2ax2,!1),_0x5d2ax9=null;null!=_0x5d2ax4&&!this[_0xe4bc[250]](_0x5d2ax4)&&null!=_0x5d2ax4[_0xe4bc[256]]&&_0x5d2ax4[_0xe4bc[256]][_0xe4bc[1500]];){_0x5d2ax4=this[_0xe4bc[1197]](_0x5d2ax4)};for(;null!=_0x5d2ax5&&!this[_0xe4bc[250]](_0x5d2ax5)&&null!=_0x5d2ax5[_0xe4bc[256]]&&_0x5d2ax5[_0xe4bc[256]][_0xe4bc[1500]];){_0x5d2ax5=this[_0xe4bc[1197]](_0x5d2ax5)};if(this[_0xe4bc[1720]](_0x5d2ax3,_0x5d2ax4)&&this[_0xe4bc[1720]](_0x5d2ax3,_0x5d2ax5)&&(_0x5d2ax9=_0x5d2ax4==_0x5d2ax5?this[_0xe4bc[1197]](_0x5d2ax4):this[_0xe4bc[1948]](_0x5d2ax4,_0x5d2ax5),null!=_0x5d2ax9&&(this[_0xe4bc[1197]](_0x5d2ax9)!=this[_0xe4bc[813]]||this[_0xe4bc[1720]](_0x5d2ax9,_0x5d2ax2))&&this[_0xe4bc[1197]](_0x5d2ax2)!=_0x5d2ax9)){_0x5d2ax4=this[_0xe4bc[1721]](_0x5d2ax2);if(null!=_0x5d2ax4){var _0x5d2axa=this[_0xe4bc[1949]](this[_0xe4bc[1197]](_0x5d2ax2)),_0x5d2ax12=this[_0xe4bc[1949]](_0x5d2ax9),_0x5d2ax5=_0x5d2ax12[_0xe4bc[235]]-_0x5d2axa[_0xe4bc[235]],_0x5d2axa=_0x5d2ax12[_0xe4bc[236]]-_0x5d2axa[_0xe4bc[236]],_0x5d2ax4=_0x5d2ax4[_0xe4bc[238]]();_0x5d2ax4[_0xe4bc[513]](-_0x5d2ax5,-_0x5d2axa);this[_0xe4bc[1724]](_0x5d2ax2,_0x5d2ax4)};this[_0xe4bc[99]](_0x5d2ax9,_0x5d2ax2,this[_0xe4bc[262]](_0x5d2ax9))}};mxGraphModel[_0xe4bc[202]][_0xe4bc[1949]]=function(_0x5d2ax2){var _0x5d2ax3=null;null!=_0x5d2ax2?(_0x5d2ax3=this[_0xe4bc[1949]](this[_0xe4bc[1197]](_0x5d2ax2)),this[_0xe4bc[250]](_0x5d2ax2)||(_0x5d2ax2=this[_0xe4bc[1721]](_0x5d2ax2),null!=_0x5d2ax2&&(_0x5d2ax3[_0xe4bc[235]]+=_0x5d2ax2[_0xe4bc[235]],_0x5d2ax3[_0xe4bc[236]]+=_0x5d2ax2[_0xe4bc[236]]))):_0x5d2ax3= new mxPoint;return _0x5d2ax3};mxGraphModel[_0xe4bc[202]][_0xe4bc[1948]]=function(_0x5d2ax2,_0x5d2ax3){if(null!=_0x5d2ax2&&null!=_0x5d2ax3){var _0x5d2ax4=mxCellPath[_0xe4bc[385]](_0x5d2ax3);if(null!=_0x5d2ax4&&0<_0x5d2ax4[_0xe4bc[67]]){var _0x5d2ax5=_0x5d2ax2,_0x5d2ax9=mxCellPath[_0xe4bc[385]](_0x5d2ax5);if(_0x5d2ax4[_0xe4bc[67]]<_0x5d2ax9[_0xe4bc[67]]){var _0x5d2ax5=_0x5d2ax3,_0x5d2axa=_0x5d2ax9,_0x5d2ax9=_0x5d2ax4,_0x5d2ax4=_0x5d2axa};for(;null!=_0x5d2ax5;){_0x5d2axa=this[_0xe4bc[1197]](_0x5d2ax5);if(0==_0x5d2ax4[_0xe4bc[2]](_0x5d2ax9+mxCellPath[_0xe4bc[1950]])&&null!=_0x5d2axa){return _0x5d2ax5};_0x5d2ax9=mxCellPath[_0xe4bc[1951]](_0x5d2ax9);_0x5d2ax5=_0x5d2axa}}};return null};mxGraphModel[_0xe4bc[202]][_0xe4bc[205]]=function(_0x5d2ax2){_0x5d2ax2==this[_0xe4bc[813]]?this[_0xe4bc[1927]](null):null!=this[_0xe4bc[1197]](_0x5d2ax2)&&this[_0xe4bc[350]]( new mxChildChange(this,null,_0x5d2ax2));return _0x5d2ax2};mxGraphModel[_0xe4bc[202]][_0xe4bc[1102]]=function(_0x5d2ax2){if(null!=_0x5d2ax2&&null!=this[_0xe4bc[895]]){for(var _0x5d2ax3=this[_0xe4bc[262]](_0x5d2ax2)-1;0<=_0x5d2ax3;_0x5d2ax3--){this[_0xe4bc[1102]](this[_0xe4bc[263]](_0x5d2ax2,_0x5d2ax3))};null!=this[_0xe4bc[895]]&&null!=_0x5d2ax2[_0xe4bc[1103]]()&& delete this[_0xe4bc[895]][_0x5d2ax2[_0xe4bc[1103]]()]}};mxGraphModel[_0xe4bc[202]][_0xe4bc[1952]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){var _0x5d2ax5=this[_0xe4bc[1197]](_0x5d2ax2);null!=_0x5d2ax3?(_0x5d2ax3!=_0x5d2ax5||_0x5d2ax5[_0xe4bc[1738]](_0x5d2ax2)!=_0x5d2ax4)&&_0x5d2ax3[_0xe4bc[1937]](_0x5d2ax2,_0x5d2ax4):null!=_0x5d2ax5&&(_0x5d2ax4=_0x5d2ax5[_0xe4bc[1738]](_0x5d2ax2),_0x5d2ax5[_0xe4bc[205]](_0x5d2ax4));!this[_0xe4bc[442]](_0x5d2ax5)&&null!=_0x5d2ax3?this[_0xe4bc[1941]](_0x5d2ax2):null==_0x5d2ax3&&this[_0xe4bc[1102]](_0x5d2ax2);return _0x5d2ax5};mxGraphModel[_0xe4bc[202]][_0xe4bc[262]]=function(_0x5d2ax2){return null!=_0x5d2ax2?_0x5d2ax2[_0xe4bc[262]]():0};mxGraphModel[_0xe4bc[202]][_0xe4bc[263]]=function(_0x5d2ax2,_0x5d2ax3){return null!=_0x5d2ax2?_0x5d2ax2[_0xe4bc[263]](_0x5d2ax3):null};mxGraphModel[_0xe4bc[202]][_0xe4bc[1953]]=function(_0x5d2ax2){return null!=_0x5d2ax2?_0x5d2ax2[_0xe4bc[1954]]:null};mxGraphModel[_0xe4bc[202]][_0xe4bc[1728]]=function(_0x5d2ax2){return this[_0xe4bc[1955]](_0x5d2ax2,!0,!1)};mxGraphModel[_0xe4bc[202]][_0xe4bc[1956]]=function(_0x5d2ax2){return this[_0xe4bc[1955]](_0x5d2ax2,!1,!0)};mxGraphModel[_0xe4bc[202]][_0xe4bc[1955]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){_0x5d2ax3=null!=_0x5d2ax3?_0x5d2ax3:!1;_0x5d2ax4=null!=_0x5d2ax4?_0x5d2ax4:!1;for(var _0x5d2ax5=this[_0xe4bc[262]](_0x5d2ax2),_0x5d2ax9=[],_0x5d2axa=0;_0x5d2axa<_0x5d2ax5;_0x5d2axa++){var _0x5d2ax12=this[_0xe4bc[263]](_0x5d2ax2,_0x5d2axa);(!_0x5d2ax4&&!_0x5d2ax3||_0x5d2ax4&&this[_0xe4bc[250]](_0x5d2ax12)||_0x5d2ax3&&this[_0xe4bc[1193]](_0x5d2ax12))&&_0x5d2ax9[_0xe4bc[207]](_0x5d2ax12)};return _0x5d2ax9};mxGraphModel[_0xe4bc[202]][_0xe4bc[1709]]=function(_0x5d2ax2,_0x5d2ax3){return null!=_0x5d2ax2?_0x5d2ax2[_0xe4bc[1709]](_0x5d2ax3):null};mxGraphModel[_0xe4bc[202]][_0xe4bc[1957]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){var _0x5d2ax5=_0x5d2ax3!=this[_0xe4bc[1709]](_0x5d2ax2,_0x5d2ax4);this[_0xe4bc[350]]( new mxTerminalChange(this,_0x5d2ax2,_0x5d2ax3,_0x5d2ax4));this[_0xe4bc[1928]]&&_0x5d2ax5&&this[_0xe4bc[1947]](_0x5d2ax2,this[_0xe4bc[501]]());return _0x5d2ax3};mxGraphModel[_0xe4bc[202]][_0xe4bc[1958]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){this[_0xe4bc[473]]();try{this[_0xe4bc[1957]](_0x5d2ax2,_0x5d2ax3,!0),this[_0xe4bc[1957]](_0x5d2ax2,_0x5d2ax4,!1)}finally{this[_0xe4bc[476]]()}};mxGraphModel[_0xe4bc[202]][_0xe4bc[1959]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){var _0x5d2ax5=this[_0xe4bc[1709]](_0x5d2ax2,_0x5d2ax4);null!=_0x5d2ax3?_0x5d2ax3[_0xe4bc[1960]](_0x5d2ax2,_0x5d2ax4):null!=_0x5d2ax5&&_0x5d2ax5[_0xe4bc[1961]](_0x5d2ax2,_0x5d2ax4);return _0x5d2ax5};mxGraphModel[_0xe4bc[202]][_0xe4bc[1707]]=function(_0x5d2ax2){return null!=_0x5d2ax2?_0x5d2ax2[_0xe4bc[1707]]():0};mxGraphModel[_0xe4bc[202]][_0xe4bc[1708]]=function(_0x5d2ax2,_0x5d2ax3){return null!=_0x5d2ax2?_0x5d2ax2[_0xe4bc[1708]](_0x5d2ax3):null};mxGraphModel[_0xe4bc[202]][_0xe4bc[1962]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){for(var _0x5d2ax5=0,_0x5d2ax9=this[_0xe4bc[1707]](_0x5d2ax2),_0x5d2axa=0;_0x5d2axa<_0x5d2ax9;_0x5d2axa++){var _0x5d2ax12=this[_0xe4bc[1708]](_0x5d2ax2,_0x5d2axa);_0x5d2ax12!=_0x5d2ax4&&this[_0xe4bc[1709]](_0x5d2ax12,_0x5d2ax3)==_0x5d2ax2&&_0x5d2ax5++};return _0x5d2ax5};mxGraphModel[_0xe4bc[202]][_0xe4bc[1756]]=function(_0x5d2ax2){return this[_0xe4bc[264]](_0x5d2ax2,!0,!0,!1)};mxGraphModel[_0xe4bc[202]][_0xe4bc[1867]]=function(_0x5d2ax2){return this[_0xe4bc[264]](_0x5d2ax2,!0,!1,!1)};mxGraphModel[_0xe4bc[202]][_0xe4bc[1963]]=function(_0x5d2ax2){return this[_0xe4bc[264]](_0x5d2ax2,!1,!0,!1)};mxGraphModel[_0xe4bc[202]][_0xe4bc[264]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){_0x5d2ax3=null!=_0x5d2ax3?_0x5d2ax3:!0;_0x5d2ax4=null!=_0x5d2ax4?_0x5d2ax4:!0;_0x5d2ax5=null!=_0x5d2ax5?_0x5d2ax5:!0;for(var _0x5d2ax9=this[_0xe4bc[1707]](_0x5d2ax2),_0x5d2axa=[],_0x5d2ax12=0;_0x5d2ax12<_0x5d2ax9;_0x5d2ax12++){var _0x5d2ax13=this[_0xe4bc[1708]](_0x5d2ax2,_0x5d2ax12),_0x5d2ax14=this[_0xe4bc[1709]](_0x5d2ax13,!0),_0x5d2ax15=this[_0xe4bc[1709]](_0x5d2ax13,!1);(_0x5d2ax5&&_0x5d2ax14==_0x5d2ax15||_0x5d2ax14!=_0x5d2ax15&&(_0x5d2ax3&&_0x5d2ax15==_0x5d2ax2||_0x5d2ax4&&_0x5d2ax14==_0x5d2ax2))&&_0x5d2axa[_0xe4bc[207]](_0x5d2ax13)};return _0x5d2axa};mxGraphModel[_0xe4bc[202]][_0xe4bc[1781]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){_0x5d2ax4=null!=_0x5d2ax4?_0x5d2ax4:!1;var _0x5d2ax5=this[_0xe4bc[1707]](_0x5d2ax2),_0x5d2ax9=this[_0xe4bc[1707]](_0x5d2ax3),_0x5d2axa=_0x5d2ax2,_0x5d2ax12=_0x5d2ax5;_0x5d2ax9<_0x5d2ax5&&(_0x5d2ax12=_0x5d2ax9,_0x5d2axa=_0x5d2ax3);_0x5d2ax5=[];for(_0x5d2ax9=0;_0x5d2ax9<_0x5d2ax12;_0x5d2ax9++){var _0x5d2ax13=this[_0xe4bc[1708]](_0x5d2axa,_0x5d2ax9),_0x5d2ax14=this[_0xe4bc[1709]](_0x5d2ax13,!0),_0x5d2ax15=this[_0xe4bc[1709]](_0x5d2ax13,!1),_0x5d2ax16=_0x5d2ax15==_0x5d2ax2&&_0x5d2ax14==_0x5d2ax3;(_0x5d2ax14==_0x5d2ax2&&_0x5d2ax15==_0x5d2ax3||!_0x5d2ax4&&_0x5d2ax16)&&_0x5d2ax5[_0xe4bc[207]](_0x5d2ax13)};return _0x5d2ax5};mxGraphModel[_0xe4bc[202]][_0xe4bc[1808]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){_0x5d2ax4=null!=_0x5d2ax4?_0x5d2ax4:!0;_0x5d2ax5=null!=_0x5d2ax5?_0x5d2ax5:!0;var _0x5d2ax9=[];if(null!=_0x5d2ax2){for(var _0x5d2axa=0;_0x5d2axa<_0x5d2ax2[_0xe4bc[67]];_0x5d2axa++){var _0x5d2ax12=this[_0xe4bc[1709]](_0x5d2ax2[_0x5d2axa],!0),_0x5d2ax13=this[_0xe4bc[1709]](_0x5d2ax2[_0x5d2axa],!1);_0x5d2ax12==_0x5d2ax3&&null!=_0x5d2ax13&&_0x5d2ax13!=_0x5d2ax3&&_0x5d2ax5?_0x5d2ax9[_0xe4bc[207]](_0x5d2ax13):_0x5d2ax13==_0x5d2ax3&&(null!=_0x5d2ax12&&_0x5d2ax12!=_0x5d2ax3&&_0x5d2ax4)&&_0x5d2ax9[_0xe4bc[207]](_0x5d2ax12)}};return _0x5d2ax9};mxGraphModel[_0xe4bc[202]][_0xe4bc[1964]]=function(_0x5d2ax2){for(var _0x5d2ax3=[],_0x5d2ax4=0;_0x5d2ax4<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax4++){for(var _0x5d2ax5=_0x5d2ax2[_0x5d2ax4],_0x5d2ax9=!0,_0x5d2axa=this[_0xe4bc[1197]](_0x5d2ax5);null!=_0x5d2axa;){if(0<=mxUtils[_0xe4bc[2]](_0x5d2ax2,_0x5d2axa)){_0x5d2ax9= !1;break};_0x5d2axa=this[_0xe4bc[1197]](_0x5d2axa)};_0x5d2ax9&&_0x5d2ax3[_0xe4bc[207]](_0x5d2ax5)};return _0x5d2ax3};mxGraphModel[_0xe4bc[202]][_0xe4bc[1193]]=function(_0x5d2ax2){return null!=_0x5d2ax2?_0x5d2ax2[_0xe4bc[1193]]():!1};mxGraphModel[_0xe4bc[202]][_0xe4bc[250]]=function(_0x5d2ax2){return null!=_0x5d2ax2?_0x5d2ax2[_0xe4bc[250]]():!1};mxGraphModel[_0xe4bc[202]][_0xe4bc[1965]]=function(_0x5d2ax2){return null!=_0x5d2ax2?_0x5d2ax2[_0xe4bc[1965]]():!1};mxGraphModel[_0xe4bc[202]][_0xe4bc[433]]=function(_0x5d2ax2){return null!=_0x5d2ax2?_0x5d2ax2[_0xe4bc[433]]():null};mxGraphModel[_0xe4bc[202]][_0xe4bc[1966]]=function(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[350]]( new mxValueChange(this,_0x5d2ax2,_0x5d2ax3));return _0x5d2ax3};mxGraphModel[_0xe4bc[202]][_0xe4bc[1967]]=function(_0x5d2ax2,_0x5d2ax3){return _0x5d2ax2[_0xe4bc[1968]](_0x5d2ax3)};mxGraphModel[_0xe4bc[202]][_0xe4bc[1721]]=function(_0x5d2ax2,_0x5d2ax3){return null!=_0x5d2ax2?_0x5d2ax2[_0xe4bc[1721]]():null};mxGraphModel[_0xe4bc[202]][_0xe4bc[1724]]=function(_0x5d2ax2,_0x5d2ax3){_0x5d2ax3!=this[_0xe4bc[1721]](_0x5d2ax2)&&this[_0xe4bc[350]]( new mxGeometryChange(this,_0x5d2ax2,_0x5d2ax3));return _0x5d2ax3};mxGraphModel[_0xe4bc[202]][_0xe4bc[1969]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=this[_0xe4bc[1721]](_0x5d2ax2);_0x5d2ax2[_0xe4bc[1724]](_0x5d2ax3);return _0x5d2ax4};mxGraphModel[_0xe4bc[202]][_0xe4bc[474]]=function(_0x5d2ax2){return null!=_0x5d2ax2?_0x5d2ax2[_0xe4bc[474]]():null};mxGraphModel[_0xe4bc[202]][_0xe4bc[475]]=function(_0x5d2ax2,_0x5d2ax3){_0x5d2ax3!=this[_0xe4bc[474]](_0x5d2ax2)&&this[_0xe4bc[350]]( new mxStyleChange(this,_0x5d2ax2,_0x5d2ax3));return _0x5d2ax3};mxGraphModel[_0xe4bc[202]][_0xe4bc[1970]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=this[_0xe4bc[474]](_0x5d2ax2);_0x5d2ax2[_0xe4bc[475]](_0x5d2ax3);return _0x5d2ax4};mxGraphModel[_0xe4bc[202]][_0xe4bc[1971]]=function(_0x5d2ax2){return null!=_0x5d2ax2?_0x5d2ax2[_0xe4bc[1971]]():!1};mxGraphModel[_0xe4bc[202]][_0xe4bc[1972]]=function(_0x5d2ax2,_0x5d2ax3){_0x5d2ax3!=this[_0xe4bc[1971]](_0x5d2ax2)&&this[_0xe4bc[350]]( new mxCollapseChange(this,_0x5d2ax2,_0x5d2ax3));return _0x5d2ax3};mxGraphModel[_0xe4bc[202]][_0xe4bc[1973]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=this[_0xe4bc[1971]](_0x5d2ax2);_0x5d2ax2[_0xe4bc[1972]](_0x5d2ax3);return _0x5d2ax4};mxGraphModel[_0xe4bc[202]][_0xe4bc[174]]=function(_0x5d2ax2){return null!=_0x5d2ax2?_0x5d2ax2[_0xe4bc[174]]():!1};mxGraphModel[_0xe4bc[202]][_0xe4bc[175]]=function(_0x5d2ax2,_0x5d2ax3){_0x5d2ax3!=this[_0xe4bc[174]](_0x5d2ax2)&&this[_0xe4bc[350]]( new mxVisibleChange(this,_0x5d2ax2,_0x5d2ax3));return _0x5d2ax3};mxGraphModel[_0xe4bc[202]][_0xe4bc[1974]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=this[_0xe4bc[174]](_0x5d2ax2);_0x5d2ax2[_0xe4bc[175]](_0x5d2ax3);return _0x5d2ax4};mxGraphModel[_0xe4bc[202]][_0xe4bc[350]]=function(_0x5d2ax2){_0x5d2ax2[_0xe4bc[350]]();this[_0xe4bc[473]]();this[_0xe4bc[1926]][_0xe4bc[99]](_0x5d2ax2);this[_0xe4bc[746]]( new mxEventObject(mxEvent.EXECUTE,_0xe4bc[826],_0x5d2ax2));this[_0xe4bc[746]]( new mxEventObject(mxEvent.EXECUTED,_0xe4bc[826],_0x5d2ax2));this[_0xe4bc[476]]()};mxGraphModel[_0xe4bc[202]][_0xe4bc[473]]=function(){this[_0xe4bc[1932]]++;this[_0xe4bc[746]]( new mxEventObject(mxEvent.BEGIN_UPDATE));1==this[_0xe4bc[1932]]&&this[_0xe4bc[746]]( new mxEventObject(mxEvent.START_EDIT))};mxGraphModel[_0xe4bc[202]][_0xe4bc[476]]=function(){this[_0xe4bc[1932]]--;0==this[_0xe4bc[1932]]&&this[_0xe4bc[746]]( new mxEventObject(mxEvent.END_EDIT));if(!this[_0xe4bc[1933]]){this[_0xe4bc[1933]]=0==this[_0xe4bc[1932]];this[_0xe4bc[746]]( new mxEventObject(mxEvent.END_UPDATE,_0xe4bc[1061],this[_0xe4bc[1926]]));try{if(this[_0xe4bc[1933]]&&!this[_0xe4bc[1926]][_0xe4bc[1107]]()){this[_0xe4bc[746]]( new mxEventObject(mxEvent.BEFORE_UNDO,_0xe4bc[1061],this[_0xe4bc[1926]]));var _0x5d2ax2=this[_0xe4bc[1926]];this[_0xe4bc[1926]]=this[_0xe4bc[1096]]();_0x5d2ax2[_0xe4bc[827]]();this[_0xe4bc[746]]( new mxEventObject(mxEvent.UNDO,_0xe4bc[1061],_0x5d2ax2))}}finally{this[_0xe4bc[1933]]= !1}}};mxGraphModel[_0xe4bc[202]][_0xe4bc[1096]]=function(){var _0x5d2ax2= new mxUndoableEdit(this,!0);_0x5d2ax2[_0xe4bc[827]]=function(){_0x5d2ax2[_0xe4bc[1097]][_0xe4bc[746]]( new mxEventObject(mxEvent.CHANGE,_0xe4bc[1061],_0x5d2ax2,_0xe4bc[1065],_0x5d2ax2[_0xe4bc[1065]]));_0x5d2ax2[_0xe4bc[1097]][_0xe4bc[746]]( new mxEventObject(mxEvent.NOTIFY,_0xe4bc[1061],_0x5d2ax2,_0xe4bc[1065],_0x5d2ax2[_0xe4bc[1065]]))};return _0x5d2ax2};mxGraphModel[_0xe4bc[202]][_0xe4bc[1975]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){_0x5d2ax4=null!=_0x5d2ax4?_0x5d2ax4:!0;this[_0xe4bc[473]]();try{var _0x5d2ax5={};this[_0xe4bc[1976]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5);for(var _0x5d2ax9 in _0x5d2ax5){var _0x5d2axa=_0x5d2ax5[_0x5d2ax9],_0x5d2ax12=this[_0xe4bc[1709]](_0x5d2axa,!0);null!=_0x5d2ax12&&(_0x5d2ax12=_0x5d2ax5[mxCellPath[_0xe4bc[385]](_0x5d2ax12)],this[_0xe4bc[1957]](_0x5d2axa,_0x5d2ax12,!0));_0x5d2ax12=this[_0xe4bc[1709]](_0x5d2axa,!1);null!=_0x5d2ax12&&(_0x5d2ax12=_0x5d2ax5[mxCellPath[_0xe4bc[385]](_0x5d2ax12)],this[_0xe4bc[1957]](_0x5d2axa,_0x5d2ax12,!1))}}finally{this[_0xe4bc[476]]()}};mxGraphModel[_0xe4bc[202]][_0xe4bc[1976]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){this[_0xe4bc[473]]();try{for(var _0x5d2ax9=_0x5d2ax2[_0xe4bc[262]](),_0x5d2axa=0;_0x5d2axa<_0x5d2ax9;_0x5d2axa++){var _0x5d2ax12=_0x5d2ax2[_0xe4bc[263]](_0x5d2axa);if(_0xe4bc[279]== typeof _0x5d2ax12[_0xe4bc[1103]]){var _0x5d2ax13=_0x5d2ax12[_0xe4bc[1103]](),_0x5d2ax14=null!=_0x5d2ax13&&(!this[_0xe4bc[250]](_0x5d2ax12)|| !_0x5d2ax4)?this[_0xe4bc[736]](_0x5d2ax13):null;if(null==_0x5d2ax14){var _0x5d2ax15=_0x5d2ax12[_0xe4bc[238]]();_0x5d2ax15[_0xe4bc[1945]](_0x5d2ax13);_0x5d2ax15[_0xe4bc[1957]](_0x5d2ax12[_0xe4bc[1709]](!0),!0);_0x5d2ax15[_0xe4bc[1957]](_0x5d2ax12[_0xe4bc[1709]](!1),!1);_0x5d2ax14=_0x5d2ax3[_0xe4bc[1937]](_0x5d2ax15);this[_0xe4bc[1941]](_0x5d2ax14)};_0x5d2ax5[mxCellPath[_0xe4bc[385]](_0x5d2ax12)]=_0x5d2ax14;this[_0xe4bc[1976]](_0x5d2ax12,_0x5d2ax14,_0x5d2ax4,_0x5d2ax5)}}}finally{this[_0xe4bc[476]]()}};mxGraphModel[_0xe4bc[202]][_0xe4bc[1977]]=function(_0x5d2ax2){var _0x5d2ax3=[];if(null!=_0x5d2ax2){for(var _0x5d2ax4={},_0x5d2ax5=0;_0x5d2ax5<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax5++){var _0x5d2ax9=this[_0xe4bc[1197]](_0x5d2ax2[_0x5d2ax5]);if(null!=_0x5d2ax9){var _0x5d2axa=mxCellPath[_0xe4bc[385]](_0x5d2ax9);null==_0x5d2ax4[_0x5d2axa]&&(_0x5d2ax4[_0x5d2axa]=_0x5d2ax9,_0x5d2ax3[_0xe4bc[207]](_0x5d2ax9))}}};return _0x5d2ax3};mxGraphModel[_0xe4bc[202]][_0xe4bc[1978]]=function(_0x5d2ax2){return null!=_0x5d2ax2?this[_0xe4bc[899]]([_0x5d2ax2],!0)[0]:null};mxGraphModel[_0xe4bc[202]][_0xe4bc[899]]=function(_0x5d2ax2,_0x5d2ax3){for(var _0x5d2ax4={},_0x5d2ax5=[],_0x5d2ax9=0;_0x5d2ax9<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax9++){null!=_0x5d2ax2[_0x5d2ax9]?_0x5d2ax5[_0xe4bc[207]](this[_0xe4bc[1979]](_0x5d2ax2[_0x5d2ax9],_0x5d2ax4,_0x5d2ax3)):_0x5d2ax5[_0xe4bc[207]](null)};for(_0x5d2ax9=0;_0x5d2ax9<_0x5d2ax5[_0xe4bc[67]];_0x5d2ax9++){null!=_0x5d2ax5[_0x5d2ax9]&&this[_0xe4bc[1980]](_0x5d2ax5[_0x5d2ax9],_0x5d2ax2[_0x5d2ax9],_0x5d2ax4)};return _0x5d2ax5};mxGraphModel[_0xe4bc[202]][_0xe4bc[1979]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){var _0x5d2ax5=this[_0xe4bc[1981]](_0x5d2ax2);_0x5d2ax3[mxObjectIdentity[_0xe4bc[203]](_0x5d2ax2)]=_0x5d2ax5;if(_0x5d2ax4){_0x5d2ax4=this[_0xe4bc[262]](_0x5d2ax2);for(var _0x5d2ax9=0;_0x5d2ax9<_0x5d2ax4;_0x5d2ax9++){var _0x5d2axa=this[_0xe4bc[1979]](this[_0xe4bc[263]](_0x5d2ax2,_0x5d2ax9),_0x5d2ax3,!0);_0x5d2ax5[_0xe4bc[1937]](_0x5d2axa)}};return _0x5d2ax5};mxGraphModel[_0xe4bc[202]][_0xe4bc[1981]]=function(_0x5d2ax2){return _0x5d2ax2[_0xe4bc[238]]()};mxGraphModel[_0xe4bc[202]][_0xe4bc[1980]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){var _0x5d2ax5=this[_0xe4bc[1709]](_0x5d2ax3,!0);null!=_0x5d2ax5&&(_0x5d2ax5=_0x5d2ax4[mxObjectIdentity[_0xe4bc[203]](_0x5d2ax5)],null!=_0x5d2ax5&&_0x5d2ax5[_0xe4bc[1960]](_0x5d2ax2,!0));_0x5d2ax5=this[_0xe4bc[1709]](_0x5d2ax3,!1);null!=_0x5d2ax5&&(_0x5d2ax5=_0x5d2ax4[mxObjectIdentity[_0xe4bc[203]](_0x5d2ax5)],null!=_0x5d2ax5&&_0x5d2ax5[_0xe4bc[1960]](_0x5d2ax2,!1));for(var _0x5d2ax5=this[_0xe4bc[262]](_0x5d2ax2),_0x5d2ax9=0;_0x5d2ax9<_0x5d2ax5;_0x5d2ax9++){this[_0xe4bc[1980]](this[_0xe4bc[263]](_0x5d2ax2,_0x5d2ax9),this[_0xe4bc[263]](_0x5d2ax3,_0x5d2ax9),_0x5d2ax4)}};function mxRootChange(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[251]]=_0x5d2ax2;this[_0xe4bc[257]]=this[_0xe4bc[813]]=_0x5d2ax3}mxRootChange[_0xe4bc[202]][_0xe4bc[350]]=function(){this[_0xe4bc[813]]=this[_0xe4bc[257]];this[_0xe4bc[257]]=this[_0xe4bc[251]][_0xe4bc[1940]](this[_0xe4bc[257]])};function mxChildChange(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){this[_0xe4bc[251]]=_0x5d2ax2;this[_0xe4bc[257]]=this[_0xe4bc[1101]]=_0x5d2ax3;this[_0xe4bc[247]]=_0x5d2ax4;this[_0xe4bc[1982]]=this[_0xe4bc[1983]]=_0x5d2ax5}mxChildChange[_0xe4bc[202]][_0xe4bc[350]]=function(){var _0x5d2ax2=this[_0xe4bc[251]][_0xe4bc[1197]](this[_0xe4bc[247]]),_0x5d2ax3=null!=_0x5d2ax2?_0x5d2ax2[_0xe4bc[1738]](this[_0xe4bc[247]]):0;null==this[_0xe4bc[257]]&&this[_0xe4bc[807]](this[_0xe4bc[247]],!1);_0x5d2ax2=this[_0xe4bc[251]][_0xe4bc[1952]](this[_0xe4bc[247]],this[_0xe4bc[257]],this[_0xe4bc[1982]]);null!=this[_0xe4bc[257]]&&this[_0xe4bc[807]](this[_0xe4bc[247]],!0);this[_0xe4bc[1101]]=this[_0xe4bc[257]];this[_0xe4bc[257]]=_0x5d2ax2;this[_0xe4bc[1983]]=this[_0xe4bc[1982]];this[_0xe4bc[1982]]=_0x5d2ax3};mxChildChange[_0xe4bc[202]][_0xe4bc[807]]=function(_0x5d2ax2,_0x5d2ax3){_0x5d2ax3=null!=_0x5d2ax3?_0x5d2ax3:!0;var _0x5d2ax4=_0x5d2ax2[_0xe4bc[1709]](!0),_0x5d2ax5=_0x5d2ax2[_0xe4bc[1709]](!1);null!=_0x5d2ax4&&(_0x5d2ax3?this[_0xe4bc[251]][_0xe4bc[1959]](_0x5d2ax2,_0x5d2ax4,!0):this[_0xe4bc[251]][_0xe4bc[1959]](_0x5d2ax2,null,!0));null!=_0x5d2ax5&&(_0x5d2ax3?this[_0xe4bc[251]][_0xe4bc[1959]](_0x5d2ax2,_0x5d2ax5,!1):this[_0xe4bc[251]][_0xe4bc[1959]](_0x5d2ax2,null,!1));_0x5d2ax2[_0xe4bc[1957]](_0x5d2ax4,!0);_0x5d2ax2[_0xe4bc[1957]](_0x5d2ax5,!1);_0x5d2ax4=this[_0xe4bc[251]][_0xe4bc[262]](_0x5d2ax2);for(_0x5d2ax5=0;_0x5d2ax5<_0x5d2ax4;_0x5d2ax5++){this[_0xe4bc[807]](this[_0xe4bc[251]][_0xe4bc[263]](_0x5d2ax2,_0x5d2ax5),_0x5d2ax3)}};function mxTerminalChange(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){this[_0xe4bc[251]]=_0x5d2ax2;this[_0xe4bc[246]]=_0x5d2ax3;this[_0xe4bc[257]]=this[_0xe4bc[1984]]=_0x5d2ax4;this[_0xe4bc[1097]]=_0x5d2ax5}mxTerminalChange[_0xe4bc[202]][_0xe4bc[350]]=function(){this[_0xe4bc[1984]]=this[_0xe4bc[257]];this[_0xe4bc[257]]=this[_0xe4bc[251]][_0xe4bc[1959]](this[_0xe4bc[246]],this[_0xe4bc[257]],this[_0xe4bc[1097]])};function mxValueChange(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){this[_0xe4bc[251]]=_0x5d2ax2;this[_0xe4bc[246]]=_0x5d2ax3;this[_0xe4bc[257]]=this[_0xe4bc[131]]=_0x5d2ax4}mxValueChange[_0xe4bc[202]][_0xe4bc[350]]=function(){this[_0xe4bc[131]]=this[_0xe4bc[257]];this[_0xe4bc[257]]=this[_0xe4bc[251]][_0xe4bc[1967]](this[_0xe4bc[246]],this[_0xe4bc[257]])};function mxStyleChange(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){this[_0xe4bc[251]]=_0x5d2ax2;this[_0xe4bc[246]]=_0x5d2ax3;this[_0xe4bc[257]]=this[_0xe4bc[124]]=_0x5d2ax4}mxStyleChange[_0xe4bc[202]][_0xe4bc[350]]=function(){this[_0xe4bc[124]]=this[_0xe4bc[257]];this[_0xe4bc[257]]=this[_0xe4bc[251]][_0xe4bc[1970]](this[_0xe4bc[246]],this[_0xe4bc[257]])};function mxGeometryChange(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){this[_0xe4bc[251]]=_0x5d2ax2;this[_0xe4bc[246]]=_0x5d2ax3;this[_0xe4bc[257]]=this[_0xe4bc[256]]=_0x5d2ax4}mxGeometryChange[_0xe4bc[202]][_0xe4bc[350]]=function(){this[_0xe4bc[256]]=this[_0xe4bc[257]];this[_0xe4bc[257]]=this[_0xe4bc[251]][_0xe4bc[1969]](this[_0xe4bc[246]],this[_0xe4bc[257]])};function mxCollapseChange(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){this[_0xe4bc[251]]=_0x5d2ax2;this[_0xe4bc[246]]=_0x5d2ax3;this[_0xe4bc[257]]=this[_0xe4bc[1985]]=_0x5d2ax4}mxCollapseChange[_0xe4bc[202]][_0xe4bc[350]]=function(){this[_0xe4bc[1985]]=this[_0xe4bc[257]];this[_0xe4bc[257]]=this[_0xe4bc[251]][_0xe4bc[1973]](this[_0xe4bc[246]],this[_0xe4bc[257]])};function mxVisibleChange(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){this[_0xe4bc[251]]=_0x5d2ax2;this[_0xe4bc[246]]=_0x5d2ax3;this[_0xe4bc[257]]=this[_0xe4bc[189]]=_0x5d2ax4}mxVisibleChange[_0xe4bc[202]][_0xe4bc[350]]=function(){this[_0xe4bc[189]]=this[_0xe4bc[257]];this[_0xe4bc[257]]=this[_0xe4bc[251]][_0xe4bc[1974]](this[_0xe4bc[246]],this[_0xe4bc[257]])};function mxCellAttributeChange(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){this[_0xe4bc[246]]=_0x5d2ax2;this[_0xe4bc[1986]]=_0x5d2ax3;this[_0xe4bc[257]]=this[_0xe4bc[131]]=_0x5d2ax4}mxCellAttributeChange[_0xe4bc[202]][_0xe4bc[350]]=function(){var _0x5d2ax2=this[_0xe4bc[246]][_0xe4bc[284]](this[_0xe4bc[1986]]);null==this[_0xe4bc[257]]?this[_0xe4bc[246]][_0xe4bc[131]][_0xe4bc[1390]](this[_0xe4bc[1986]]):this[_0xe4bc[246]][_0xe4bc[57]](this[_0xe4bc[1986]],this[_0xe4bc[257]]);this[_0xe4bc[257]]=_0x5d2ax2};function mxCell(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){this[_0xe4bc[131]]=_0x5d2ax2;this[_0xe4bc[1724]](_0x5d2ax3);this[_0xe4bc[475]](_0x5d2ax4);if(null!=this[_0xe4bc[1987]]){this[_0xe4bc[1987]]()}}mxCell[_0xe4bc[202]][_0xe4bc[1363]]=null;mxCell[_0xe4bc[202]][_0xe4bc[131]]=null;mxCell[_0xe4bc[202]][_0xe4bc[256]]=null;mxCell[_0xe4bc[202]][_0xe4bc[124]]=null;mxCell[_0xe4bc[202]][_0xe4bc[1988]]= !1;mxCell[_0xe4bc[202]][_0xe4bc[1989]]= !1;mxCell[_0xe4bc[202]][_0xe4bc[1990]]= !0;mxCell[_0xe4bc[202]][_0xe4bc[189]]= !0;mxCell[_0xe4bc[202]][_0xe4bc[1985]]= !1;mxCell[_0xe4bc[202]][_0xe4bc[1101]]=null;mxCell[_0xe4bc[202]][_0xe4bc[1097]]=null;mxCell[_0xe4bc[202]][_0xe4bc[772]]=null;mxCell[_0xe4bc[202]][_0xe4bc[1954]]=null;mxCell[_0xe4bc[202]][_0xe4bc[1842]]=null;mxCell[_0xe4bc[202]][_0xe4bc[1991]]=_0xe4bc[1992][_0xe4bc[224]](_0xe4bc[185]);mxCell[_0xe4bc[202]][_0xe4bc[1103]]=function(){return this[_0xe4bc[1363]]};mxCell[_0xe4bc[202]][_0xe4bc[1945]]=function(_0x5d2ax2){this[_0xe4bc[1363]]=_0x5d2ax2};mxCell[_0xe4bc[202]][_0xe4bc[433]]=function(){return this[_0xe4bc[131]]};mxCell[_0xe4bc[202]][_0xe4bc[1966]]=function(_0x5d2ax2){this[_0xe4bc[131]]=_0x5d2ax2};mxCell[_0xe4bc[202]][_0xe4bc[1968]]=function(_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[433]]();this[_0xe4bc[1966]](_0x5d2ax2);return _0x5d2ax3};mxCell[_0xe4bc[202]][_0xe4bc[1721]]=function(){return this[_0xe4bc[256]]};mxCell[_0xe4bc[202]][_0xe4bc[1724]]=function(_0x5d2ax2){this[_0xe4bc[256]]=_0x5d2ax2};mxCell[_0xe4bc[202]][_0xe4bc[474]]=function(){return this[_0xe4bc[124]]};mxCell[_0xe4bc[202]][_0xe4bc[475]]=function(_0x5d2ax2){this[_0xe4bc[124]]=_0x5d2ax2};mxCell[_0xe4bc[202]][_0xe4bc[1193]]=function(){return this[_0xe4bc[1988]]};mxCell[_0xe4bc[202]][_0xe4bc[1993]]=function(_0x5d2ax2){this[_0xe4bc[1988]]=_0x5d2ax2};mxCell[_0xe4bc[202]][_0xe4bc[250]]=function(){return this[_0xe4bc[1989]]};mxCell[_0xe4bc[202]][_0xe4bc[1994]]=function(_0x5d2ax2){this[_0xe4bc[1989]]=_0x5d2ax2};mxCell[_0xe4bc[202]][_0xe4bc[1965]]=function(){return this[_0xe4bc[1990]]};mxCell[_0xe4bc[202]][_0xe4bc[1995]]=function(_0x5d2ax2){this[_0xe4bc[1990]]=_0x5d2ax2};mxCell[_0xe4bc[202]][_0xe4bc[174]]=function(){return this[_0xe4bc[189]]};mxCell[_0xe4bc[202]][_0xe4bc[175]]=function(_0x5d2ax2){this[_0xe4bc[189]]=_0x5d2ax2};mxCell[_0xe4bc[202]][_0xe4bc[1971]]=function(){return this[_0xe4bc[1985]]};mxCell[_0xe4bc[202]][_0xe4bc[1972]]=function(_0x5d2ax2){this[_0xe4bc[1985]]=_0x5d2ax2};mxCell[_0xe4bc[202]][_0xe4bc[1197]]=function(){return this[_0xe4bc[1101]]};mxCell[_0xe4bc[202]][_0xe4bc[1996]]=function(_0x5d2ax2){this[_0xe4bc[1101]]=_0x5d2ax2};mxCell[_0xe4bc[202]][_0xe4bc[1709]]=function(_0x5d2ax2){return _0x5d2ax2?this[_0xe4bc[1097]]:this[_0xe4bc[772]]};mxCell[_0xe4bc[202]][_0xe4bc[1957]]=function(_0x5d2ax2,_0x5d2ax3){_0x5d2ax3?this[_0xe4bc[1097]]=_0x5d2ax2:this[_0xe4bc[772]]=_0x5d2ax2;return _0x5d2ax2};mxCell[_0xe4bc[202]][_0xe4bc[262]]=function(){return null==this[_0xe4bc[1954]]?0:this[_0xe4bc[1954]][_0xe4bc[67]]};mxCell[_0xe4bc[202]][_0xe4bc[1738]]=function(_0x5d2ax2){return mxUtils[_0xe4bc[2]](this[_0xe4bc[1954]],_0x5d2ax2)};mxCell[_0xe4bc[202]][_0xe4bc[263]]=function(_0x5d2ax2){return null==this[_0xe4bc[1954]]?null:this[_0xe4bc[1954]][_0x5d2ax2]};mxCell[_0xe4bc[202]][_0xe4bc[1937]]=function(_0x5d2ax2,_0x5d2ax3){null!=_0x5d2ax2&&(null==_0x5d2ax3&&(_0x5d2ax3=this[_0xe4bc[262]](),_0x5d2ax2[_0xe4bc[1197]]()==this&&_0x5d2ax3--),_0x5d2ax2[_0xe4bc[1997]](),_0x5d2ax2[_0xe4bc[1996]](this),null==this[_0xe4bc[1954]]?(this[_0xe4bc[1954]]=[],this[_0xe4bc[1954]][_0xe4bc[207]](_0x5d2ax2)):this[_0xe4bc[1954]][_0xe4bc[300]](_0x5d2ax3,0,_0x5d2ax2));return _0x5d2ax2};mxCell[_0xe4bc[202]][_0xe4bc[205]]=function(_0x5d2ax2){var _0x5d2ax3=null;null!=this[_0xe4bc[1954]]&&0<=_0x5d2ax2&&(_0x5d2ax3=this[_0xe4bc[263]](_0x5d2ax2),null!=_0x5d2ax3&&(this[_0xe4bc[1954]][_0xe4bc[300]](_0x5d2ax2,1),_0x5d2ax3[_0xe4bc[1996]](null)));return _0x5d2ax3};mxCell[_0xe4bc[202]][_0xe4bc[1997]]=function(){if(null!=this[_0xe4bc[1101]]){var _0x5d2ax2=this[_0xe4bc[1101]][_0xe4bc[1738]](this);this[_0xe4bc[1101]][_0xe4bc[205]](_0x5d2ax2)}};mxCell[_0xe4bc[202]][_0xe4bc[1707]]=function(){return null==this[_0xe4bc[1842]]?0:this[_0xe4bc[1842]][_0xe4bc[67]]};mxCell[_0xe4bc[202]][_0xe4bc[1998]]=function(_0x5d2ax2){return mxUtils[_0xe4bc[2]](this[_0xe4bc[1842]],_0x5d2ax2)};mxCell[_0xe4bc[202]][_0xe4bc[1708]]=function(_0x5d2ax2){return null==this[_0xe4bc[1842]]?null:this[_0xe4bc[1842]][_0x5d2ax2]};mxCell[_0xe4bc[202]][_0xe4bc[1960]]=function(_0x5d2ax2,_0x5d2ax3){if(null!=_0x5d2ax2&&(_0x5d2ax2[_0xe4bc[1999]](_0x5d2ax3),_0x5d2ax2[_0xe4bc[1957]](this,_0x5d2ax3),null==this[_0xe4bc[1842]]||_0x5d2ax2[_0xe4bc[1709]](!_0x5d2ax3)!=this||0>mxUtils[_0xe4bc[2]](this[_0xe4bc[1842]],_0x5d2ax2))){null==this[_0xe4bc[1842]]&&(this[_0xe4bc[1842]]=[]),this[_0xe4bc[1842]][_0xe4bc[207]](_0x5d2ax2)};return _0x5d2ax2};mxCell[_0xe4bc[202]][_0xe4bc[1961]]=function(_0x5d2ax2,_0x5d2ax3){if(null!=_0x5d2ax2){if(_0x5d2ax2[_0xe4bc[1709]](!_0x5d2ax3)!=this&&null!=this[_0xe4bc[1842]]){var _0x5d2ax4=this[_0xe4bc[1998]](_0x5d2ax2);0<=_0x5d2ax4&&this[_0xe4bc[1842]][_0xe4bc[300]](_0x5d2ax4,1)};_0x5d2ax2[_0xe4bc[1957]](null,_0x5d2ax3)};return _0x5d2ax2};mxCell[_0xe4bc[202]][_0xe4bc[1999]]=function(_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[1709]](_0x5d2ax2);null!=_0x5d2ax3&&_0x5d2ax3[_0xe4bc[1961]](this,_0x5d2ax2)};mxCell[_0xe4bc[202]][_0xe4bc[284]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=this[_0xe4bc[433]]();return (null!=_0x5d2ax4&&_0x5d2ax4[_0xe4bc[288]]==mxConstants[_0xe4bc[289]]?_0x5d2ax4[_0xe4bc[284]](_0x5d2ax2):null)||_0x5d2ax3};mxCell[_0xe4bc[202]][_0xe4bc[57]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=this[_0xe4bc[433]]();null!=_0x5d2ax4&&_0x5d2ax4[_0xe4bc[288]]==mxConstants[_0xe4bc[289]]&&_0x5d2ax4[_0xe4bc[57]](_0x5d2ax2,_0x5d2ax3)};mxCell[_0xe4bc[202]][_0xe4bc[238]]=function(){var _0x5d2ax2=mxUtils[_0xe4bc[238]](this,this[_0xe4bc[1991]]);_0x5d2ax2[_0xe4bc[1966]](this[_0xe4bc[2000]]());return _0x5d2ax2};mxCell[_0xe4bc[202]][_0xe4bc[2000]]=function(){var _0x5d2ax2=this[_0xe4bc[433]]();null!=_0x5d2ax2&&(_0xe4bc[279]== typeof _0x5d2ax2[_0xe4bc[238]]?_0x5d2ax2=_0x5d2ax2[_0xe4bc[238]]():isNaN(_0x5d2ax2[_0xe4bc[288]])||(_0x5d2ax2=_0x5d2ax2[_0xe4bc[511]](!0)));return _0x5d2ax2};function mxGeometry(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){mxRectangle[_0xe4bc[239]](this,_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5)}mxGeometry[_0xe4bc[202]]= new mxRectangle;mxGeometry[_0xe4bc[202]][_0xe4bc[196]]=mxGeometry;mxGeometry[_0xe4bc[202]][_0xe4bc[2001]]= !0;mxGeometry[_0xe4bc[202]][_0xe4bc[2002]]=null;mxGeometry[_0xe4bc[202]][_0xe4bc[2003]]=null;mxGeometry[_0xe4bc[202]][_0xe4bc[2004]]=null;mxGeometry[_0xe4bc[202]][_0xe4bc[1525]]=null;mxGeometry[_0xe4bc[202]][_0xe4bc[1368]]=null;mxGeometry[_0xe4bc[202]][_0xe4bc[1500]]= !1;mxGeometry[_0xe4bc[202]][_0xe4bc[2005]]=function(){if(null!=this[_0xe4bc[2002]]){var _0x5d2ax2= new mxRectangle(this[_0xe4bc[235]],this[_0xe4bc[236]],this[_0xe4bc[117]],this[_0xe4bc[119]]);this[_0xe4bc[235]]=this[_0xe4bc[2002]][_0xe4bc[235]];this[_0xe4bc[236]]=this[_0xe4bc[2002]][_0xe4bc[236]];this[_0xe4bc[117]]=this[_0xe4bc[2002]][_0xe4bc[117]];this[_0xe4bc[119]]=this[_0xe4bc[2002]][_0xe4bc[119]];this[_0xe4bc[2002]]=_0x5d2ax2}};mxGeometry[_0xe4bc[202]][_0xe4bc[2006]]=function(_0x5d2ax2){return _0x5d2ax2?this[_0xe4bc[2003]]:this[_0xe4bc[2004]]};mxGeometry[_0xe4bc[202]][_0xe4bc[2007]]=function(_0x5d2ax2,_0x5d2ax3){_0x5d2ax3?this[_0xe4bc[2003]]=_0x5d2ax2:this[_0xe4bc[2004]]=_0x5d2ax2;return _0x5d2ax2};mxGeometry[_0xe4bc[202]][_0xe4bc[513]]=function(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[238]]();this[_0xe4bc[1500]]||(this[_0xe4bc[235]]+=_0x5d2ax2,this[_0xe4bc[236]]+=_0x5d2ax3);null!=this[_0xe4bc[2003]]&&(this[_0xe4bc[2003]][_0xe4bc[235]]+=_0x5d2ax2,this[_0xe4bc[2003]][_0xe4bc[236]]+=_0x5d2ax3);null!=this[_0xe4bc[2004]]&&(this[_0xe4bc[2004]][_0xe4bc[235]]+=_0x5d2ax2,this[_0xe4bc[2004]][_0xe4bc[236]]+=_0x5d2ax3);if(this[_0xe4bc[2001]]&&null!=this[_0xe4bc[1525]]){for(var _0x5d2ax4=this[_0xe4bc[1525]][_0xe4bc[67]],_0x5d2ax5=0;_0x5d2ax5<_0x5d2ax4;_0x5d2ax5++){var _0x5d2ax9=this[_0xe4bc[1525]][_0x5d2ax5];null!=_0x5d2ax9&&(_0x5d2ax9[_0xe4bc[235]]+=_0x5d2ax2,_0x5d2ax9[_0xe4bc[236]]+=_0x5d2ax3)}}};var mxCellPath={PATH_SEPARATOR:_0xe4bc[87],create:function(_0x5d2ax2){var _0x5d2ax3=_0xe4bc[110];if(null!=_0x5d2ax2){for(var _0x5d2ax4=_0x5d2ax2[_0xe4bc[1197]]();null!=_0x5d2ax4;){_0x5d2ax3=_0x5d2ax4[_0xe4bc[1738]](_0x5d2ax2)+mxCellPath[_0xe4bc[1950]]+_0x5d2ax3,_0x5d2ax2=_0x5d2ax4,_0x5d2ax4=_0x5d2ax2[_0xe4bc[1197]]()}};_0x5d2ax2=_0x5d2ax3[_0xe4bc[67]];1<_0x5d2ax2&&(_0x5d2ax3=_0x5d2ax3[_0xe4bc[85]](0,_0x5d2ax2-1));return _0x5d2ax3},getParentPath:function(_0x5d2ax2){if(null!=_0x5d2ax2){var _0x5d2ax3=_0x5d2ax2[_0xe4bc[1122]](mxCellPath.PATH_SEPARATOR);if(0<=_0x5d2ax3){return _0x5d2ax2[_0xe4bc[85]](0,_0x5d2ax3)};if(0<_0x5d2ax2[_0xe4bc[67]]){return _0xe4bc[110]}};return null},resolve:function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=_0x5d2ax2;if(null!=_0x5d2ax3){for(var _0x5d2ax5=_0x5d2ax3[_0xe4bc[224]](mxCellPath.PATH_SEPARATOR),_0x5d2ax9=0;_0x5d2ax9<_0x5d2ax5[_0xe4bc[67]];_0x5d2ax9++){_0x5d2ax4=_0x5d2ax4[_0xe4bc[263]](parseInt(_0x5d2ax5[_0x5d2ax9]))}};return _0x5d2ax4},compare:function(_0x5d2ax2,_0x5d2ax3){for(var _0x5d2ax4=Math[_0xe4bc[243]](_0x5d2ax2[_0xe4bc[67]],_0x5d2ax3[_0xe4bc[67]]),_0x5d2ax5=0,_0x5d2ax9=0;_0x5d2ax9<_0x5d2ax4;_0x5d2ax9++){if(_0x5d2ax2[_0x5d2ax9]!=_0x5d2ax3[_0x5d2ax9]){0==_0x5d2ax2[_0x5d2ax9][_0xe4bc[67]]||0==_0x5d2ax3[_0x5d2ax9][_0xe4bc[67]]?_0x5d2ax5=_0x5d2ax2[_0x5d2ax9]==_0x5d2ax3[_0x5d2ax9]?0:_0x5d2ax2[_0x5d2ax9]>_0x5d2ax3[_0x5d2ax9]?1:-1:(_0x5d2ax4=parseInt(_0x5d2ax2[_0x5d2ax9]),_0x5d2ax9=parseInt(_0x5d2ax3[_0x5d2ax9]),_0x5d2ax5=_0x5d2ax4==_0x5d2ax9?0:_0x5d2ax4>_0x5d2ax9?1:-1);break}};0==_0x5d2ax5&&(_0x5d2ax4=_0x5d2ax2[_0xe4bc[67]],_0x5d2ax9=_0x5d2ax3[_0xe4bc[67]],_0x5d2ax4!=_0x5d2ax9&&(_0x5d2ax5=_0x5d2ax4>_0x5d2ax9?1:-1));return _0x5d2ax5}},mxPerimeter={RectanglePerimeter:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){_0x5d2ax3=_0x5d2ax2[_0xe4bc[241]]();var _0x5d2ax9=_0x5d2ax2[_0xe4bc[242]](),_0x5d2axa=Math[_0xe4bc[429]](_0x5d2ax4[_0xe4bc[236]]-_0x5d2ax9,_0x5d2ax4[_0xe4bc[235]]-_0x5d2ax3),_0x5d2ax12= new mxPoint(0,0),_0x5d2ax13=Math[_0xe4bc[424]],_0x5d2ax14=Math[_0xe4bc[424]]/2-_0x5d2axa,_0x5d2ax15=Math[_0xe4bc[429]](_0x5d2ax2[_0xe4bc[119]],_0x5d2ax2[_0xe4bc[117]]);_0x5d2axa<-_0x5d2ax13+_0x5d2ax15||_0x5d2axa>_0x5d2ax13-_0x5d2ax15?(_0x5d2ax12[_0xe4bc[235]]=_0x5d2ax2[_0xe4bc[235]],_0x5d2ax12[_0xe4bc[236]]=_0x5d2ax9-_0x5d2ax2[_0xe4bc[117]]*Math[_0xe4bc[2008]](_0x5d2axa)/2):_0x5d2axa<-_0x5d2ax15?(_0x5d2ax12[_0xe4bc[236]]=_0x5d2ax2[_0xe4bc[236]],_0x5d2ax12[_0xe4bc[235]]=_0x5d2ax3-_0x5d2ax2[_0xe4bc[119]]*Math[_0xe4bc[2008]](_0x5d2ax14)/2):_0x5d2axa<_0x5d2ax15?(_0x5d2ax12[_0xe4bc[235]]=_0x5d2ax2[_0xe4bc[235]]+_0x5d2ax2[_0xe4bc[117]],_0x5d2ax12[_0xe4bc[236]]=_0x5d2ax9+_0x5d2ax2[_0xe4bc[117]]*Math[_0xe4bc[2008]](_0x5d2axa)/2):(_0x5d2ax12[_0xe4bc[236]]=_0x5d2ax2[_0xe4bc[236]]+_0x5d2ax2[_0xe4bc[119]],_0x5d2ax12[_0xe4bc[235]]=_0x5d2ax3+_0x5d2ax2[_0xe4bc[119]]*Math[_0xe4bc[2008]](_0x5d2ax14)/2);_0x5d2ax5&&(_0x5d2ax4[_0xe4bc[235]]>=_0x5d2ax2[_0xe4bc[235]]&&_0x5d2ax4[_0xe4bc[235]]<=_0x5d2ax2[_0xe4bc[235]]+_0x5d2ax2[_0xe4bc[117]]?_0x5d2ax12[_0xe4bc[235]]=_0x5d2ax4[_0xe4bc[235]]:_0x5d2ax4[_0xe4bc[236]]>=_0x5d2ax2[_0xe4bc[236]]&&_0x5d2ax4[_0xe4bc[236]]<=_0x5d2ax2[_0xe4bc[236]]+_0x5d2ax2[_0xe4bc[119]]&&(_0x5d2ax12[_0xe4bc[236]]=_0x5d2ax4[_0xe4bc[236]]),_0x5d2ax4[_0xe4bc[235]]<_0x5d2ax2[_0xe4bc[235]]?_0x5d2ax12[_0xe4bc[235]]=_0x5d2ax2[_0xe4bc[235]]:_0x5d2ax4[_0xe4bc[235]]>_0x5d2ax2[_0xe4bc[235]]+_0x5d2ax2[_0xe4bc[117]]&&(_0x5d2ax12[_0xe4bc[235]]=_0x5d2ax2[_0xe4bc[235]]+_0x5d2ax2[_0xe4bc[117]]),_0x5d2ax4[_0xe4bc[236]]<_0x5d2ax2[_0xe4bc[236]]?_0x5d2ax12[_0xe4bc[236]]=_0x5d2ax2[_0xe4bc[236]]:_0x5d2ax4[_0xe4bc[236]]>_0x5d2ax2[_0xe4bc[236]]+_0x5d2ax2[_0xe4bc[119]]&&(_0x5d2ax12[_0xe4bc[236]]=_0x5d2ax2[_0xe4bc[236]]+_0x5d2ax2[_0xe4bc[119]]));return _0x5d2ax12},EllipsePerimeter:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){var _0x5d2ax9=_0x5d2ax2[_0xe4bc[235]],_0x5d2axa=_0x5d2ax2[_0xe4bc[236]],_0x5d2ax12=_0x5d2ax2[_0xe4bc[117]]/2,_0x5d2ax13=_0x5d2ax2[_0xe4bc[119]]/2,_0x5d2ax14=_0x5d2ax9+_0x5d2ax12,_0x5d2ax15=_0x5d2axa+_0x5d2ax13;_0x5d2ax3=_0x5d2ax4[_0xe4bc[235]];_0x5d2ax4=_0x5d2ax4[_0xe4bc[236]];var _0x5d2ax16=parseInt(_0x5d2ax3-_0x5d2ax14),_0x5d2ax17=parseInt(_0x5d2ax4-_0x5d2ax15);if(0==_0x5d2ax16&&0!=_0x5d2ax17){return  new mxPoint(_0x5d2ax14,_0x5d2ax15+_0x5d2ax13*_0x5d2ax17/Math[_0xe4bc[425]](_0x5d2ax17))};if(0==_0x5d2ax16&&0==_0x5d2ax17){return  new mxPoint(_0x5d2ax3,_0x5d2ax4)};if(_0x5d2ax5){if(_0x5d2ax4>=_0x5d2axa&&_0x5d2ax4<=_0x5d2axa+_0x5d2ax2[_0xe4bc[119]]){return _0x5d2ax2=_0x5d2ax4-_0x5d2ax15,_0x5d2ax2=Math[_0xe4bc[428]](_0x5d2ax12*_0x5d2ax12*(1-_0x5d2ax2*_0x5d2ax2/(_0x5d2ax13*_0x5d2ax13)))||0,_0x5d2ax3<=_0x5d2ax9&&(_0x5d2ax2= -_0x5d2ax2), new mxPoint(_0x5d2ax14+_0x5d2ax2,_0x5d2ax4)};if(_0x5d2ax3>=_0x5d2ax9&&_0x5d2ax3<=_0x5d2ax9+_0x5d2ax2[_0xe4bc[117]]){return _0x5d2ax2=_0x5d2ax3-_0x5d2ax14,_0x5d2ax2=Math[_0xe4bc[428]](_0x5d2ax13*_0x5d2ax13*(1-_0x5d2ax2*_0x5d2ax2/(_0x5d2ax12*_0x5d2ax12)))||0,_0x5d2ax4<=_0x5d2axa&&(_0x5d2ax2= -_0x5d2ax2), new mxPoint(_0x5d2ax3,_0x5d2ax15+_0x5d2ax2)}};_0x5d2ax9=_0x5d2ax17/_0x5d2ax16;_0x5d2ax15-=_0x5d2ax9*_0x5d2ax14;_0x5d2axa=_0x5d2ax12*_0x5d2ax12*_0x5d2ax9*_0x5d2ax9+_0x5d2ax13*_0x5d2ax13;_0x5d2ax2=-2*_0x5d2ax14*_0x5d2axa;_0x5d2ax13=Math[_0xe4bc[428]](_0x5d2ax2*_0x5d2ax2-4*_0x5d2axa*(_0x5d2ax12*_0x5d2ax12*_0x5d2ax9*_0x5d2ax9*_0x5d2ax14*_0x5d2ax14+_0x5d2ax13*_0x5d2ax13*_0x5d2ax14*_0x5d2ax14-_0x5d2ax12*_0x5d2ax12*_0x5d2ax13*_0x5d2ax13));_0x5d2ax12=(-_0x5d2ax2+_0x5d2ax13)/(2*_0x5d2axa);_0x5d2ax13=(-_0x5d2ax2-_0x5d2ax13)/(2*_0x5d2axa);_0x5d2ax14=_0x5d2ax9*_0x5d2ax12+_0x5d2ax15;_0x5d2ax15=_0x5d2ax9*_0x5d2ax13+_0x5d2ax15;_0x5d2ax9=Math[_0xe4bc[428]](Math[_0xe4bc[2009]](_0x5d2ax12-_0x5d2ax3,2)+Math[_0xe4bc[2009]](_0x5d2ax14-_0x5d2ax4,2));_0x5d2ax3=Math[_0xe4bc[428]](Math[_0xe4bc[2009]](_0x5d2ax13-_0x5d2ax3,2)+Math[_0xe4bc[2009]](_0x5d2ax15-_0x5d2ax4,2));_0x5d2axa=_0x5d2ax4=0;_0x5d2ax9<_0x5d2ax3?(_0x5d2ax4=_0x5d2ax12,_0x5d2axa=_0x5d2ax14):(_0x5d2ax4=_0x5d2ax13,_0x5d2axa=_0x5d2ax15);return  new mxPoint(_0x5d2ax4,_0x5d2axa)},RhombusPerimeter:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){_0x5d2ax3=_0x5d2ax2[_0xe4bc[235]];var _0x5d2ax9=_0x5d2ax2[_0xe4bc[236]],_0x5d2axa=_0x5d2ax2[_0xe4bc[117]];_0x5d2ax2=_0x5d2ax2[_0xe4bc[119]];var _0x5d2ax12=_0x5d2ax3+_0x5d2axa/2,_0x5d2ax13=_0x5d2ax9+_0x5d2ax2/2,_0x5d2ax14=_0x5d2ax4[_0xe4bc[235]];_0x5d2ax4=_0x5d2ax4[_0xe4bc[236]];if(_0x5d2ax12==_0x5d2ax14){return _0x5d2ax13>_0x5d2ax4? new mxPoint(_0x5d2ax12,_0x5d2ax9): new mxPoint(_0x5d2ax12,_0x5d2ax9+_0x5d2ax2)};if(_0x5d2ax13==_0x5d2ax4){return _0x5d2ax12>_0x5d2ax14? new mxPoint(_0x5d2ax3,_0x5d2ax13): new mxPoint(_0x5d2ax3+_0x5d2axa,_0x5d2ax13)};var _0x5d2ax15=_0x5d2ax12,_0x5d2ax16=_0x5d2ax13;_0x5d2ax5&&(_0x5d2ax14>=_0x5d2ax3&&_0x5d2ax14<=_0x5d2ax3+_0x5d2axa?_0x5d2ax15=_0x5d2ax14:_0x5d2ax4>=_0x5d2ax9&&_0x5d2ax4<=_0x5d2ax9+_0x5d2ax2&&(_0x5d2ax16=_0x5d2ax4));return _0x5d2ax14<_0x5d2ax12?_0x5d2ax4<_0x5d2ax13?mxUtils[_0xe4bc[2010]](_0x5d2ax14,_0x5d2ax4,_0x5d2ax15,_0x5d2ax16,_0x5d2ax12,_0x5d2ax9,_0x5d2ax3,_0x5d2ax13):mxUtils[_0xe4bc[2010]](_0x5d2ax14,_0x5d2ax4,_0x5d2ax15,_0x5d2ax16,_0x5d2ax12,_0x5d2ax9+_0x5d2ax2,_0x5d2ax3,_0x5d2ax13):_0x5d2ax4<_0x5d2ax13?mxUtils[_0xe4bc[2010]](_0x5d2ax14,_0x5d2ax4,_0x5d2ax15,_0x5d2ax16,_0x5d2ax12,_0x5d2ax9,_0x5d2ax3+_0x5d2axa,_0x5d2ax13):mxUtils[_0xe4bc[2010]](_0x5d2ax14,_0x5d2ax4,_0x5d2ax15,_0x5d2ax16,_0x5d2ax12,_0x5d2ax9+_0x5d2ax2,_0x5d2ax3+_0x5d2axa,_0x5d2ax13)},TrianglePerimeter:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){_0x5d2ax3=null!=_0x5d2ax3?_0x5d2ax3[_0xe4bc[124]][mxConstants[_0xe4bc[2011]]]:null;var _0x5d2ax9=_0x5d2ax3==mxConstants[_0xe4bc[1358]]||_0x5d2ax3==mxConstants[_0xe4bc[1354]],_0x5d2axa=_0x5d2ax2[_0xe4bc[235]],_0x5d2ax12=_0x5d2ax2[_0xe4bc[236]],_0x5d2ax13=_0x5d2ax2[_0xe4bc[117]];_0x5d2ax2=_0x5d2ax2[_0xe4bc[119]];var _0x5d2ax14=_0x5d2axa+_0x5d2ax13/2,_0x5d2ax15=_0x5d2ax12+_0x5d2ax2/2,_0x5d2ax16= new mxPoint(_0x5d2axa,_0x5d2ax12),_0x5d2ax17= new mxPoint(_0x5d2axa+_0x5d2ax13,_0x5d2ax15),_0x5d2ax18= new mxPoint(_0x5d2axa,_0x5d2ax12+_0x5d2ax2);_0x5d2ax3==mxConstants[_0xe4bc[1358]]?(_0x5d2ax16=_0x5d2ax18,_0x5d2ax17= new mxPoint(_0x5d2ax14,_0x5d2ax12),_0x5d2ax18= new mxPoint(_0x5d2axa+_0x5d2ax13,_0x5d2ax12+_0x5d2ax2)):_0x5d2ax3==mxConstants[_0xe4bc[1354]]?(_0x5d2ax17= new mxPoint(_0x5d2ax14,_0x5d2ax12+_0x5d2ax2),_0x5d2ax18= new mxPoint(_0x5d2axa+_0x5d2ax13,_0x5d2ax12)):_0x5d2ax3==mxConstants[_0xe4bc[1359]]&&(_0x5d2ax16= new mxPoint(_0x5d2axa+_0x5d2ax13,_0x5d2ax12),_0x5d2ax17= new mxPoint(_0x5d2axa,_0x5d2ax15),_0x5d2ax18= new mxPoint(_0x5d2axa+_0x5d2ax13,_0x5d2ax12+_0x5d2ax2));var _0x5d2ax19=_0x5d2ax4[_0xe4bc[235]]-_0x5d2ax14,_0x5d2ax1a=_0x5d2ax4[_0xe4bc[236]]-_0x5d2ax15,_0x5d2ax19=_0x5d2ax9?Math[_0xe4bc[429]](_0x5d2ax19,_0x5d2ax1a):Math[_0xe4bc[429]](_0x5d2ax1a,_0x5d2ax19),_0x5d2ax1b=_0x5d2ax9?Math[_0xe4bc[429]](_0x5d2ax13,_0x5d2ax2):Math[_0xe4bc[429]](_0x5d2ax2,_0x5d2ax13),_0x5d2ax1a=!1,_0x5d2ax1a=_0x5d2ax3==mxConstants[_0xe4bc[1358]]||_0x5d2ax3==mxConstants[_0xe4bc[1359]]?_0x5d2ax19>-_0x5d2ax1b&&_0x5d2ax19<_0x5d2ax1b:_0x5d2ax19<-Math[_0xe4bc[424]]+_0x5d2ax1b||_0x5d2ax19>Math[_0xe4bc[424]]-_0x5d2ax1b,_0x5d2ax1b=null;_0x5d2ax1a?_0x5d2ax1b=_0x5d2ax5&&(_0x5d2ax9&&_0x5d2ax4[_0xe4bc[235]]>=_0x5d2ax16[_0xe4bc[235]]&&_0x5d2ax4[_0xe4bc[235]]<=_0x5d2ax18[_0xe4bc[235]]||!_0x5d2ax9&&_0x5d2ax4[_0xe4bc[236]]>=_0x5d2ax16[_0xe4bc[236]]&&_0x5d2ax4[_0xe4bc[236]]<=_0x5d2ax18[_0xe4bc[236]])?_0x5d2ax9? new mxPoint(_0x5d2ax4[_0xe4bc[235]],_0x5d2ax16[_0xe4bc[236]]): new mxPoint(_0x5d2ax16[_0xe4bc[235]],_0x5d2ax4[_0xe4bc[236]]):_0x5d2ax3==mxConstants[_0xe4bc[1358]]? new mxPoint(_0x5d2axa+_0x5d2ax13/2+_0x5d2ax2*Math[_0xe4bc[2008]](_0x5d2ax19)/2,_0x5d2ax12+_0x5d2ax2):_0x5d2ax3==mxConstants[_0xe4bc[1354]]? new mxPoint(_0x5d2axa+_0x5d2ax13/2-_0x5d2ax2*Math[_0xe4bc[2008]](_0x5d2ax19)/2,_0x5d2ax12):_0x5d2ax3==mxConstants[_0xe4bc[1359]]? new mxPoint(_0x5d2axa+_0x5d2ax13,_0x5d2ax12+_0x5d2ax2/2+_0x5d2ax13*Math[_0xe4bc[2008]](_0x5d2ax19)/2): new mxPoint(_0x5d2axa,_0x5d2ax12+_0x5d2ax2/2-_0x5d2ax13*Math[_0xe4bc[2008]](_0x5d2ax19)/2):(_0x5d2ax5&&(_0x5d2ax5= new mxPoint(_0x5d2ax14,_0x5d2ax15),_0x5d2ax4[_0xe4bc[236]]>=_0x5d2ax12&&_0x5d2ax4[_0xe4bc[236]]<=_0x5d2ax12+_0x5d2ax2?(_0x5d2ax5[_0xe4bc[235]]=_0x5d2ax9?_0x5d2ax14:_0x5d2ax3==mxConstants[_0xe4bc[1359]]?_0x5d2axa+_0x5d2ax13:_0x5d2axa,_0x5d2ax5[_0xe4bc[236]]=_0x5d2ax4[_0xe4bc[236]]):_0x5d2ax4[_0xe4bc[235]]>=_0x5d2axa&&_0x5d2ax4[_0xe4bc[235]]<=_0x5d2axa+_0x5d2ax13&&(_0x5d2ax5[_0xe4bc[235]]=_0x5d2ax4[_0xe4bc[235]],_0x5d2ax5[_0xe4bc[236]]=!_0x5d2ax9?_0x5d2ax15:_0x5d2ax3==mxConstants[_0xe4bc[1358]]?_0x5d2ax12+_0x5d2ax2:_0x5d2ax12),_0x5d2ax14=_0x5d2ax5[_0xe4bc[235]],_0x5d2ax15=_0x5d2ax5[_0xe4bc[236]]),_0x5d2ax1b=_0x5d2ax9&&_0x5d2ax4[_0xe4bc[235]]<=_0x5d2axa+_0x5d2ax13/2||!_0x5d2ax9&&_0x5d2ax4[_0xe4bc[236]]<=_0x5d2ax12+_0x5d2ax2/2?mxUtils[_0xe4bc[2010]](_0x5d2ax4[_0xe4bc[235]],_0x5d2ax4[_0xe4bc[236]],_0x5d2ax14,_0x5d2ax15,_0x5d2ax16[_0xe4bc[235]],_0x5d2ax16[_0xe4bc[236]],_0x5d2ax17[_0xe4bc[235]],_0x5d2ax17[_0xe4bc[236]]):mxUtils[_0xe4bc[2010]](_0x5d2ax4[_0xe4bc[235]],_0x5d2ax4[_0xe4bc[236]],_0x5d2ax14,_0x5d2ax15,_0x5d2ax17[_0xe4bc[235]],_0x5d2ax17[_0xe4bc[236]],_0x5d2ax18[_0xe4bc[235]],_0x5d2ax18[_0xe4bc[236]]));null==_0x5d2ax1b&&(_0x5d2ax1b= new mxPoint(_0x5d2ax14,_0x5d2ax15));return _0x5d2ax1b}};function mxPrintPreview(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa,_0x5d2ax12,_0x5d2ax13,_0x5d2ax14){this[_0xe4bc[1179]]=_0x5d2ax2;this[_0xe4bc[255]]=null!=_0x5d2ax3?_0x5d2ax3:1/_0x5d2ax2[_0xe4bc[2012]];this[_0xe4bc[467]]=null!=_0x5d2ax5?_0x5d2ax5:0;this[_0xe4bc[2013]]=null!=_0x5d2ax4?_0x5d2ax4:_0x5d2ax2[_0xe4bc[2013]];this[_0xe4bc[924]]=null!=_0x5d2ax13?_0x5d2ax13:_0xe4bc[2014];this[_0xe4bc[1732]]=null!=_0x5d2ax9?_0x5d2ax9:0;this[_0xe4bc[1733]]=null!=_0x5d2axa?_0x5d2axa:0;this[_0xe4bc[1630]]=_0x5d2ax12;this[_0xe4bc[2015]]=null!=_0x5d2ax14?_0x5d2ax14:!0}mxPrintPreview[_0xe4bc[202]][_0xe4bc[1179]]=null;mxPrintPreview[_0xe4bc[202]][_0xe4bc[2013]]=null;mxPrintPreview[_0xe4bc[202]][_0xe4bc[255]]=null;mxPrintPreview[_0xe4bc[202]][_0xe4bc[467]]=0;mxPrintPreview[_0xe4bc[202]][_0xe4bc[1732]]=0;mxPrintPreview[_0xe4bc[202]][_0xe4bc[1733]]=0;mxPrintPreview[_0xe4bc[202]][_0xe4bc[2016]]= !0;mxPrintPreview[_0xe4bc[202]][_0xe4bc[2017]]= !1;mxPrintPreview[_0xe4bc[202]][_0xe4bc[1630]]=null;mxPrintPreview[_0xe4bc[202]][_0xe4bc[924]]=null;mxPrintPreview[_0xe4bc[202]][_0xe4bc[2015]]=null;mxPrintPreview[_0xe4bc[202]][_0xe4bc[2018]]=null;mxPrintPreview[_0xe4bc[202]][_0xe4bc[2019]]=0;mxPrintPreview[_0xe4bc[202]][_0xe4bc[2020]]=function(){return this[_0xe4bc[2018]]};mxPrintPreview[_0xe4bc[202]][_0xe4bc[2021]]=function(){var _0x5d2ax2=_0xe4bc[110];8==document[_0xe4bc[5]]&&(_0x5d2ax2=_0xe4bc[2022]);return _0x5d2ax2};mxPrintPreview[_0xe4bc[202]][_0xe4bc[392]]=function(_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[1179]][_0xe4bc[259]][_0xe4bc[2023]],_0x5d2ax4=null;try{this[_0xe4bc[2017]]&&(this[_0xe4bc[1179]][_0xe4bc[259]][_0xe4bc[2023]]=function(_0x5d2ax2,_0x5d2ax3){_0x5d2ax3[_0xe4bc[176]](_0x5d2ax2[_0xe4bc[441]][_0xe4bc[2024]]())});if(null==this[_0xe4bc[2018]]){this[_0xe4bc[2018]]=window[_0xe4bc[392]]();var _0x5d2ax5=this[_0xe4bc[2018]][_0xe4bc[395]],_0x5d2ax9=this[_0xe4bc[2021]]();null!=_0x5d2ax9&&0<_0x5d2ax9[_0xe4bc[67]]&&_0x5d2ax5[_0xe4bc[171]](_0x5d2ax9);_0x5d2ax5[_0xe4bc[171]](_0xe4bc[528]);_0x5d2ax5[_0xe4bc[171]](_0xe4bc[531]);this[_0xe4bc[2025]](_0x5d2ax5,_0x5d2ax2);_0x5d2ax5[_0xe4bc[171]](_0xe4bc[533]);_0x5d2ax5[_0xe4bc[171]](_0xe4bc[2026]);mxClient[_0xe4bc[54]](_0xe4bc[94],mxClient[_0xe4bc[86]]+_0xe4bc[95],_0x5d2ax5);mxClient[_0xe4bc[47]]&&(_0x5d2ax5[_0xe4bc[100]][_0xe4bc[99]](_0xe4bc[6],_0xe4bc[97]),_0x5d2ax5[_0xe4bc[100]][_0xe4bc[99]](_0xe4bc[7],_0xe4bc[101]),_0x5d2ax5[_0xe4bc[102]]()[_0xe4bc[103]]=_0xe4bc[104],mxClient[_0xe4bc[54]](_0xe4bc[94],mxClient[_0xe4bc[86]]+_0xe4bc[105],_0x5d2ax5));var _0x5d2axa=this[_0xe4bc[1179]][_0xe4bc[517]]()[_0xe4bc[238]](),_0x5d2ax12=this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[518]](),_0x5d2ax13=_0x5d2ax12/this[_0xe4bc[255]],_0x5d2ax14=this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[512]]();this[_0xe4bc[2016]]||(this[_0xe4bc[1732]]=-_0x5d2ax14[_0xe4bc[235]]*this[_0xe4bc[255]],this[_0xe4bc[1733]]=-_0x5d2ax14[_0xe4bc[236]]*this[_0xe4bc[255]],_0x5d2axa[_0xe4bc[117]]+=_0x5d2axa[_0xe4bc[235]],_0x5d2axa[_0xe4bc[119]]+=_0x5d2axa[_0xe4bc[236]],_0x5d2axa[_0xe4bc[235]]=0,this[_0xe4bc[467]]=_0x5d2axa[_0xe4bc[236]]=0);_0x5d2axa[_0xe4bc[117]]/=_0x5d2ax13;_0x5d2axa[_0xe4bc[119]]/=_0x5d2ax13;var _0x5d2ax15=this[_0xe4bc[2013]][_0xe4bc[117]]-2*this[_0xe4bc[467]],_0x5d2ax16=this[_0xe4bc[2013]][_0xe4bc[119]]-2*this[_0xe4bc[467]],_0x5d2ax17=Math[_0xe4bc[160]](1,Math[_0xe4bc[430]]((_0x5d2axa[_0xe4bc[117]]+this[_0xe4bc[1732]])/_0x5d2ax15)),_0x5d2ax18=Math[_0xe4bc[160]](1,Math[_0xe4bc[430]]((_0x5d2axa[_0xe4bc[119]]+this[_0xe4bc[1733]])/_0x5d2ax16));this[_0xe4bc[2019]]=_0x5d2ax17*_0x5d2ax18;var _0x5d2ax19=mxUtils[_0xe4bc[885]](this,function(){if(this[_0xe4bc[2015]]&&(1<_0x5d2ax18||1<_0x5d2ax17)){var _0x5d2ax2=this[_0xe4bc[2027]](_0x5d2ax18,_0x5d2ax17);_0x5d2ax5[_0xe4bc[112]][_0xe4bc[62]](_0x5d2ax2);if(mxClient[_0xe4bc[80]]){_0x5d2ax2[_0xe4bc[124]][_0xe4bc[491]]=_0xe4bc[492];var _0x5d2ax3=function(){_0x5d2ax2[_0xe4bc[124]][_0xe4bc[125]]=_0x5d2ax5[_0xe4bc[112]][_0xe4bc[190]]+10+_0xe4bc[168]};mxEvent[_0xe4bc[169]](this[_0xe4bc[2018]],_0xe4bc[276],function(_0x5d2ax2){_0x5d2ax3()});mxEvent[_0xe4bc[169]](this[_0xe4bc[2018]],_0xe4bc[129],function(_0x5d2ax2){_0x5d2ax3()})}}});_0x5d2ax2=function(_0x5d2ax2,_0x5d2ax3){null!=this[_0xe4bc[1630]]&&(_0x5d2ax2[_0xe4bc[124]][_0xe4bc[1630]]=this[_0xe4bc[1630]],_0x5d2ax2[_0xe4bc[124]][_0xe4bc[465]]=_0xe4bc[1631],_0x5d2ax2[_0xe4bc[124]][_0xe4bc[1629]]=_0xe4bc[942]);_0x5d2ax2[_0xe4bc[124]][_0xe4bc[1537]]=_0xe4bc[1391];_0x5d2ax3&&(_0x5d2ax2[_0xe4bc[124]][_0xe4bc[2028]]=_0xe4bc[2029]);mxClient[_0xe4bc[80]]?(_0x5d2ax5[_0xe4bc[171]](_0x5d2ax2[_0xe4bc[342]]),_0x5d2ax2[_0xe4bc[265]][_0xe4bc[266]](_0x5d2ax2)):(_0x5d2ax2[_0xe4bc[265]][_0xe4bc[266]](_0x5d2ax2),_0x5d2ax5[_0xe4bc[112]][_0xe4bc[62]](_0x5d2ax2));if(_0x5d2ax3){var _0x5d2ax4=_0x5d2ax5[_0xe4bc[55]](_0xe4bc[1054]);_0x5d2ax4[_0xe4bc[926]]=_0xe4bc[2030];_0x5d2ax5[_0xe4bc[112]][_0xe4bc[62]](_0x5d2ax4)}};var _0x5d2ax1a=this[_0xe4bc[2031]](this[_0xe4bc[2013]][_0xe4bc[117]],this[_0xe4bc[2013]][_0xe4bc[119]]);if(null!=_0x5d2ax1a){for(var _0x5d2ax1b=0;_0x5d2ax1b<_0x5d2ax1a[_0xe4bc[67]];_0x5d2ax1b++){_0x5d2ax2(_0x5d2ax1a[_0x5d2ax1b],!0)}};for(var _0x5d2ax1c=this[_0xe4bc[2032]](this[_0xe4bc[2013]][_0xe4bc[117]],this[_0xe4bc[2013]][_0xe4bc[119]]),_0x5d2ax1b=0;_0x5d2ax1b<_0x5d2ax18;_0x5d2ax1b++){for(var _0x5d2ax1d=_0x5d2ax1b*_0x5d2ax16/this[_0xe4bc[255]]-this[_0xe4bc[1733]]/this[_0xe4bc[255]]+(_0x5d2axa[_0xe4bc[236]]-_0x5d2ax14[_0xe4bc[236]]*_0x5d2ax12)/_0x5d2ax12,_0x5d2ax1a=0;_0x5d2ax1a<_0x5d2ax17;_0x5d2ax1a++){if(null==this[_0xe4bc[2018]]){return null};var _0x5d2ax1e=_0x5d2ax1a*_0x5d2ax15/this[_0xe4bc[255]]-this[_0xe4bc[1732]]/this[_0xe4bc[255]]+(_0x5d2axa[_0xe4bc[235]]-_0x5d2ax14[_0xe4bc[235]]*_0x5d2ax12)/_0x5d2ax12,_0x5d2ax1f=_0x5d2ax1b*_0x5d2ax17+_0x5d2ax1a+1,_0x5d2ax4=this[_0xe4bc[2034]](this[_0xe4bc[2013]][_0xe4bc[117]],this[_0xe4bc[2013]][_0xe4bc[119]],mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){this[_0xe4bc[2033]](-_0x5d2ax1e,-_0x5d2ax1d,this[_0xe4bc[255]],_0x5d2ax1f,_0x5d2ax2)}));_0x5d2ax4[_0xe4bc[57]](_0xe4bc[1363],_0xe4bc[2035]+_0x5d2ax1f);_0x5d2ax2(_0x5d2ax4,null!=_0x5d2ax1c||_0x5d2ax1b<_0x5d2ax18-1||_0x5d2ax1a<_0x5d2ax17-1)}};if(null!=_0x5d2ax1c){for(_0x5d2ax1b=0;_0x5d2ax1b<_0x5d2ax1c[_0xe4bc[67]];_0x5d2ax1b++){_0x5d2ax2(_0x5d2ax1c[_0x5d2ax1b],_0x5d2ax1b<_0x5d2ax1c[_0xe4bc[67]])}};_0x5d2ax5[_0xe4bc[171]](_0xe4bc[527]);_0x5d2ax5[_0xe4bc[171]](_0xe4bc[534]);_0x5d2ax5[_0xe4bc[268]]();_0x5d2ax19();mxEvent[_0xe4bc[762]](_0x5d2ax5[_0xe4bc[112]])};this[_0xe4bc[2018]][_0xe4bc[393]]()}catch(y){null!=_0x5d2ax4&&null!=_0x5d2ax4[_0xe4bc[265]]&&_0x5d2ax4[_0xe4bc[265]][_0xe4bc[266]](_0x5d2ax4)}finally{this[_0xe4bc[1179]][_0xe4bc[259]][_0xe4bc[2023]]=_0x5d2ax3};return this[_0xe4bc[2018]]};mxPrintPreview[_0xe4bc[202]][_0xe4bc[2025]]=function(_0x5d2ax2,_0x5d2ax3){null!=this[_0xe4bc[924]]&&_0x5d2ax2[_0xe4bc[171]](_0xe4bc[2036]+this[_0xe4bc[924]]+_0xe4bc[2037]);_0x5d2ax2[_0xe4bc[171]](_0xe4bc[2038]);_0x5d2ax2[_0xe4bc[171]](_0xe4bc[2039]);_0x5d2ax2[_0xe4bc[171]](_0xe4bc[2040]);_0x5d2ax2[_0xe4bc[171]](_0xe4bc[2041]);_0x5d2ax2[_0xe4bc[171]](_0xe4bc[233]);_0x5d2ax2[_0xe4bc[171]](_0xe4bc[2042]);_0x5d2ax2[_0xe4bc[171]](_0xe4bc[2043]);_0x5d2ax2[_0xe4bc[171]](_0xe4bc[2044]);_0x5d2ax2[_0xe4bc[171]](_0xe4bc[2045]);_0x5d2ax2[_0xe4bc[171]](_0xe4bc[233]);null!=_0x5d2ax3&&_0x5d2ax2[_0xe4bc[171]](_0x5d2ax3);_0x5d2ax2[_0xe4bc[171]](_0xe4bc[2046])};mxPrintPreview[_0xe4bc[202]][_0xe4bc[2027]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=this[_0xe4bc[2018]][_0xe4bc[395]],_0x5d2ax5=_0x5d2ax4[_0xe4bc[55]](_0xe4bc[116]);_0x5d2ax5[_0xe4bc[926]]=_0xe4bc[2047];_0x5d2ax5[_0xe4bc[57]](_0xe4bc[467],_0xe4bc[468]);for(var _0x5d2ax9=_0x5d2ax4[_0xe4bc[55]](_0xe4bc[120]),_0x5d2axa=0;_0x5d2axa<_0x5d2ax2;_0x5d2axa++){for(var _0x5d2ax12=_0x5d2ax4[_0xe4bc[55]](_0xe4bc[121]),_0x5d2ax13=0;_0x5d2ax13<_0x5d2ax3;_0x5d2ax13++){var _0x5d2ax14=_0x5d2axa*_0x5d2ax3+_0x5d2ax13+1,_0x5d2ax15=_0x5d2ax4[_0xe4bc[55]](_0xe4bc[122]);if(!mxClient[_0xe4bc[133]]||mxClient[_0xe4bc[75]]||mxClient[_0xe4bc[76]]){var _0x5d2ax16=_0x5d2ax4[_0xe4bc[55]](_0xe4bc[2048]);_0x5d2ax16[_0xe4bc[57]](_0xe4bc[44],_0xe4bc[2049]+_0x5d2ax14);mxUtils[_0xe4bc[53]](_0x5d2ax16,_0x5d2ax14,_0x5d2ax4);_0x5d2ax15[_0xe4bc[62]](_0x5d2ax16)}else {mxUtils[_0xe4bc[53]](_0x5d2ax15,_0x5d2ax14,_0x5d2ax4)};_0x5d2ax12[_0xe4bc[62]](_0x5d2ax15)};_0x5d2ax9[_0xe4bc[62]](_0x5d2ax12)};_0x5d2ax5[_0xe4bc[62]](_0x5d2ax9);return _0x5d2ax5};mxPrintPreview[_0xe4bc[202]][_0xe4bc[2034]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){var _0x5d2ax5=document[_0xe4bc[55]](_0xe4bc[485]);try{_0x5d2ax5[_0xe4bc[124]][_0xe4bc[117]]=_0x5d2ax2+_0xe4bc[168];_0x5d2ax5[_0xe4bc[124]][_0xe4bc[119]]=_0x5d2ax3+_0xe4bc[168];_0x5d2ax5[_0xe4bc[124]][_0xe4bc[277]]=_0xe4bc[188];_0x5d2ax5[_0xe4bc[124]][_0xe4bc[2050]]=_0xe4bc[1824];_0x5d2ax5[_0xe4bc[124]][_0xe4bc[491]]=_0xe4bc[1500];var _0x5d2ax9=document[_0xe4bc[55]](_0xe4bc[485]);_0x5d2ax9[_0xe4bc[124]][_0xe4bc[125]]=this[_0xe4bc[467]]+_0xe4bc[168];_0x5d2ax9[_0xe4bc[124]][_0xe4bc[361]]=this[_0xe4bc[467]]+_0xe4bc[168];_0x5d2ax9[_0xe4bc[124]][_0xe4bc[117]]=_0x5d2ax2-2*this[_0xe4bc[467]]+_0xe4bc[168];_0x5d2ax9[_0xe4bc[124]][_0xe4bc[119]]=_0x5d2ax3-2*this[_0xe4bc[467]]+_0xe4bc[168];_0x5d2ax9[_0xe4bc[124]][_0xe4bc[277]]=_0xe4bc[188];this[_0xe4bc[1179]][_0xe4bc[507]]==mxConstants[_0xe4bc[1523]]&&(_0x5d2ax9[_0xe4bc[124]][_0xe4bc[491]]=_0xe4bc[492]);_0x5d2ax5[_0xe4bc[62]](_0x5d2ax9);document[_0xe4bc[112]][_0xe4bc[62]](_0x5d2ax5);_0x5d2ax4(_0x5d2ax9)}catch(f){throw _0x5d2ax5[_0xe4bc[265]][_0xe4bc[266]](_0x5d2ax5),f};return _0x5d2ax5};mxPrintPreview[_0xe4bc[202]][_0xe4bc[2033]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){_0x5d2ax5=this[_0xe4bc[1179]][_0xe4bc[249]]();var _0x5d2axa=this[_0xe4bc[1179]][_0xe4bc[526]];this[_0xe4bc[1179]][_0xe4bc[526]]=_0x5d2ax9;var _0x5d2ax12=_0x5d2ax5[_0xe4bc[2051]](),_0x5d2ax13=_0x5d2ax5[_0xe4bc[2052]](),_0x5d2ax14=_0x5d2ax5[_0xe4bc[2024]](),_0x5d2ax15=_0x5d2ax5[_0xe4bc[1524]]();this[_0xe4bc[1179]][_0xe4bc[507]]==mxConstants[_0xe4bc[508]]?_0x5d2ax5[_0xe4bc[1569]]():this[_0xe4bc[1179]][_0xe4bc[507]]==mxConstants[_0xe4bc[1523]]?_0x5d2ax5[_0xe4bc[1571]]():_0x5d2ax5[_0xe4bc[1570]]();var _0x5d2ax16=_0x5d2ax5[_0xe4bc[503]]();_0x5d2ax5[_0xe4bc[504]](!1);var _0x5d2ax17=this[_0xe4bc[1179]][_0xe4bc[994]]();this[_0xe4bc[1179]][_0xe4bc[995]](!1);var _0x5d2ax18=_0x5d2ax5[_0xe4bc[512]]();_0x5d2ax5[_0xe4bc[513]]= new mxPoint(_0x5d2ax2,_0x5d2ax3);_0x5d2ax2=null;try{var _0x5d2ax19=[this[_0xe4bc[1179]][_0xe4bc[502]]()[_0xe4bc[501]]()];_0x5d2ax2= new mxTemporaryCellStates(_0x5d2ax5,_0x5d2ax4,_0x5d2ax19)}finally{if(mxClient[_0xe4bc[80]]){_0x5d2ax5[_0xe4bc[506]][_0xe4bc[339]]=_0xe4bc[110]}else {for(_0x5d2ax4=_0x5d2ax9[_0xe4bc[285]];null!=_0x5d2ax4;){_0x5d2ax19=_0x5d2ax4[_0xe4bc[287]],_0x5d2ax3=_0x5d2ax4[_0xe4bc[301]][_0xe4bc[216]](),_0xe4bc[571]==_0x5d2ax3?(_0x5d2ax4[_0xe4bc[57]](_0xe4bc[117],parseInt(_0x5d2ax9[_0xe4bc[124]][_0xe4bc[117]])),_0x5d2ax4[_0xe4bc[57]](_0xe4bc[119],parseInt(_0x5d2ax9[_0xe4bc[124]][_0xe4bc[119]]))):_0xe4bc[583]!=_0x5d2ax4[_0xe4bc[124]][_0xe4bc[270]]&&_0xe4bc[116]!=_0x5d2ax3&&_0x5d2ax4[_0xe4bc[265]][_0xe4bc[266]](_0x5d2ax4),_0x5d2ax4=_0x5d2ax19}};_0x5d2ax5[_0xe4bc[506]][_0xe4bc[265]][_0xe4bc[266]](_0x5d2ax5[_0xe4bc[506]]);this[_0xe4bc[1179]][_0xe4bc[995]](_0x5d2ax17);this[_0xe4bc[1179]][_0xe4bc[526]]=_0x5d2axa;_0x5d2ax5[_0xe4bc[510]]=_0x5d2ax12;_0x5d2ax5[_0xe4bc[2053]]=_0x5d2ax13;_0x5d2ax5[_0xe4bc[505]]=_0x5d2ax14;_0x5d2ax5[_0xe4bc[506]]=_0x5d2ax15;_0x5d2ax5[_0xe4bc[513]]=_0x5d2ax18;_0x5d2ax2[_0xe4bc[515]]();_0x5d2ax5[_0xe4bc[504]](_0x5d2ax16)}};mxPrintPreview[_0xe4bc[202]][_0xe4bc[2031]]=function(){return null};mxPrintPreview[_0xe4bc[202]][_0xe4bc[2032]]=function(){return null};mxPrintPreview[_0xe4bc[202]][_0xe4bc[540]]=function(){var _0x5d2ax2=this[_0xe4bc[392]]();null!=_0x5d2ax2&&_0x5d2ax2[_0xe4bc[540]]()};mxPrintPreview[_0xe4bc[202]][_0xe4bc[268]]=function(){null!=this[_0xe4bc[2018]]&&(this[_0xe4bc[2018]][_0xe4bc[268]](),this[_0xe4bc[2018]]=null)};function mxStylesheet(){this[_0xe4bc[2054]]={};this[_0xe4bc[2056]](this[_0xe4bc[2055]]());this[_0xe4bc[2058]](this[_0xe4bc[2057]]())}mxStylesheet[_0xe4bc[202]][_0xe4bc[2055]]=function(){var _0x5d2ax2={};_0x5d2ax2[mxConstants[_0xe4bc[2059]]]=mxConstants[_0xe4bc[2060]];_0x5d2ax2[mxConstants[_0xe4bc[2061]]]=mxPerimeter[_0xe4bc[2062]];_0x5d2ax2[mxConstants[_0xe4bc[2063]]]=mxConstants[_0xe4bc[481]];_0x5d2ax2[mxConstants[_0xe4bc[2064]]]=mxConstants[_0xe4bc[479]];_0x5d2ax2[mxConstants[_0xe4bc[2065]]]=_0xe4bc[2066];_0x5d2ax2[mxConstants[_0xe4bc[2067]]]=_0xe4bc[2068];_0x5d2ax2[mxConstants[_0xe4bc[2069]]]=_0xe4bc[2070];return _0x5d2ax2};mxStylesheet[_0xe4bc[202]][_0xe4bc[2057]]=function(){var _0x5d2ax2={};_0x5d2ax2[mxConstants[_0xe4bc[2059]]]=mxConstants[_0xe4bc[2071]];_0x5d2ax2[mxConstants[_0xe4bc[1695]]]=mxConstants[_0xe4bc[1622]];_0x5d2ax2[mxConstants[_0xe4bc[2063]]]=mxConstants[_0xe4bc[481]];_0x5d2ax2[mxConstants[_0xe4bc[2064]]]=mxConstants[_0xe4bc[479]];_0x5d2ax2[mxConstants[_0xe4bc[2067]]]=_0xe4bc[2068];_0x5d2ax2[mxConstants[_0xe4bc[2069]]]=_0xe4bc[2072];return _0x5d2ax2};mxStylesheet[_0xe4bc[202]][_0xe4bc[2056]]=function(_0x5d2ax2){this[_0xe4bc[2074]](_0xe4bc[2073],_0x5d2ax2)};mxStylesheet[_0xe4bc[202]][_0xe4bc[2058]]=function(_0x5d2ax2){this[_0xe4bc[2074]](_0xe4bc[2075],_0x5d2ax2)};mxStylesheet[_0xe4bc[202]][_0xe4bc[2076]]=function(){return this[_0xe4bc[2054]][_0xe4bc[2073]]};mxStylesheet[_0xe4bc[202]][_0xe4bc[2077]]=function(){return this[_0xe4bc[2054]][_0xe4bc[2075]]};mxStylesheet[_0xe4bc[202]][_0xe4bc[2074]]=function(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[2054]][_0x5d2ax2]=_0x5d2ax3};mxStylesheet[_0xe4bc[202]][_0xe4bc[1705]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=_0x5d2ax3;if(null!=_0x5d2ax2&&0<_0x5d2ax2[_0xe4bc[67]]){for(var _0x5d2ax5=_0x5d2ax2[_0xe4bc[224]](_0xe4bc[471]),_0x5d2ax4=null!=_0x5d2ax4&&_0xe4bc[471]!=_0x5d2ax2[_0xe4bc[225]](0)?mxUtils[_0xe4bc[238]](_0x5d2ax4):{},_0x5d2ax9=0;_0x5d2ax9<_0x5d2ax5[_0xe4bc[67]];_0x5d2ax9++){var _0x5d2axa=_0x5d2ax5[_0x5d2ax9],_0x5d2ax12=_0x5d2axa[_0xe4bc[2]](_0xe4bc[226]);if(0<=_0x5d2ax12){var _0x5d2ax13=_0x5d2axa[_0xe4bc[85]](0,_0x5d2ax12),_0x5d2axa=_0x5d2axa[_0xe4bc[85]](_0x5d2ax12+1);_0x5d2axa==mxConstants[_0xe4bc[217]]? delete _0x5d2ax4[_0x5d2ax13]:mxUtils[_0xe4bc[1946]](_0x5d2axa)?_0x5d2ax4[_0x5d2ax13]=parseFloat(_0x5d2axa):_0x5d2ax4[_0x5d2ax13]=_0x5d2axa}else {if(_0x5d2axa=this[_0xe4bc[2054]][_0x5d2axa],null!=_0x5d2axa){for(_0x5d2ax13 in _0x5d2axa){_0x5d2ax4[_0x5d2ax13]=_0x5d2axa[_0x5d2ax13]}}}}};return _0x5d2ax4};function mxCellState(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){this[_0xe4bc[441]]=_0x5d2ax2;this[_0xe4bc[246]]=_0x5d2ax3;this[_0xe4bc[124]]=_0x5d2ax4;this[_0xe4bc[2078]]= new mxPoint;this[_0xe4bc[2079]]= new mxPoint}mxCellState[_0xe4bc[202]]= new mxRectangle;mxCellState[_0xe4bc[202]][_0xe4bc[196]]=mxCellState;mxCellState[_0xe4bc[202]][_0xe4bc[441]]=null;mxCellState[_0xe4bc[202]][_0xe4bc[246]]=null;mxCellState[_0xe4bc[202]][_0xe4bc[124]]=null;mxCellState[_0xe4bc[202]][_0xe4bc[2080]]= !0;mxCellState[_0xe4bc[202]][_0xe4bc[2081]]= !1;mxCellState[_0xe4bc[202]][_0xe4bc[2082]]= !1;mxCellState[_0xe4bc[202]][_0xe4bc[2078]]=null;mxCellState[_0xe4bc[202]][_0xe4bc[439]]=null;mxCellState[_0xe4bc[202]][_0xe4bc[2079]]=null;mxCellState[_0xe4bc[202]][_0xe4bc[2083]]=null;mxCellState[_0xe4bc[202]][_0xe4bc[2084]]=null;mxCellState[_0xe4bc[202]][_0xe4bc[2085]]=0;mxCellState[_0xe4bc[202]][_0xe4bc[67]]=0;mxCellState[_0xe4bc[202]][_0xe4bc[2086]]=null;mxCellState[_0xe4bc[202]][_0xe4bc[253]]=null;mxCellState[_0xe4bc[202]][_0xe4bc[963]]=null;mxCellState[_0xe4bc[202]][_0xe4bc[2087]]=function(_0x5d2ax2,_0x5d2ax3){_0x5d2ax2=_0x5d2ax2||0;_0x5d2ax3=null!=_0x5d2ax3?_0x5d2ax3: new mxRectangle(this[_0xe4bc[235]],this[_0xe4bc[236]],this[_0xe4bc[117]],this[_0xe4bc[119]]);if(null!=this[_0xe4bc[253]]&&null!=this[_0xe4bc[253]][_0xe4bc[1561]]){var _0x5d2ax4=this[_0xe4bc[253]][_0xe4bc[1561]][_0xe4bc[1548]](this[_0xe4bc[124]],_0x5d2ax3[_0xe4bc[235]],_0x5d2ax3[_0xe4bc[236]],_0x5d2ax3[_0xe4bc[117]],_0x5d2ax3[_0xe4bc[119]]);_0x5d2ax3[_0xe4bc[235]]=_0x5d2ax4[_0xe4bc[235]];_0x5d2ax3[_0xe4bc[236]]=_0x5d2ax4[_0xe4bc[236]];_0x5d2ax3[_0xe4bc[117]]=this[_0xe4bc[253]][_0xe4bc[1561]][_0xe4bc[1532]]*_0x5d2ax4[_0xe4bc[117]];_0x5d2ax3[_0xe4bc[119]]=this[_0xe4bc[253]][_0xe4bc[1561]][_0xe4bc[1533]]*_0x5d2ax4[_0xe4bc[119]]};0!=_0x5d2ax2&&_0x5d2ax3[_0xe4bc[244]](_0x5d2ax2);return _0x5d2ax3};mxCellState[_0xe4bc[202]][_0xe4bc[2088]]=function(_0x5d2ax2,_0x5d2ax3){_0x5d2ax3?(null==this[_0xe4bc[439]]&&(this[_0xe4bc[439]]=[]),0==this[_0xe4bc[439]][_0xe4bc[67]]?this[_0xe4bc[439]][_0xe4bc[207]](_0x5d2ax2):this[_0xe4bc[439]][0]=_0x5d2ax2):null==this[_0xe4bc[439]]?(this[_0xe4bc[439]]=[],this[_0xe4bc[439]][_0xe4bc[207]](null),this[_0xe4bc[439]][_0xe4bc[207]](_0x5d2ax2)):1==this[_0xe4bc[439]][_0xe4bc[67]]?this[_0xe4bc[439]][_0xe4bc[207]](_0x5d2ax2):this[_0xe4bc[439]][this[_0xe4bc[439]][_0xe4bc[67]]-1]=_0x5d2ax2};mxCellState[_0xe4bc[202]][_0xe4bc[1609]]=function(_0x5d2ax2){null!=this[_0xe4bc[253]]&&this[_0xe4bc[253]][_0xe4bc[1609]](_0x5d2ax2);null!=this[_0xe4bc[963]]&&this[_0xe4bc[963]][_0xe4bc[1609]](_0x5d2ax2)};mxCellState[_0xe4bc[202]][_0xe4bc[1710]]=function(_0x5d2ax2){_0x5d2ax2=this[_0xe4bc[2089]](_0x5d2ax2);return null!=_0x5d2ax2?_0x5d2ax2[_0xe4bc[246]]:null};mxCellState[_0xe4bc[202]][_0xe4bc[2089]]=function(_0x5d2ax2){return _0x5d2ax2?this[_0xe4bc[2083]]:this[_0xe4bc[2084]]};mxCellState[_0xe4bc[202]][_0xe4bc[2090]]=function(_0x5d2ax2,_0x5d2ax3){_0x5d2ax3?this[_0xe4bc[2083]]=_0x5d2ax2:this[_0xe4bc[2084]]=_0x5d2ax2};mxCellState[_0xe4bc[202]][_0xe4bc[515]]=function(){this[_0xe4bc[441]][_0xe4bc[1179]][_0xe4bc[259]][_0xe4bc[515]](this)};mxCellState[_0xe4bc[202]][_0xe4bc[238]]=function(){var _0x5d2ax2= new mxCellState(this[_0xe4bc[441]],this[_0xe4bc[246]],this[_0xe4bc[124]]);if(null!=this[_0xe4bc[439]]){_0x5d2ax2[_0xe4bc[439]]=[];for(var _0x5d2ax3=0;_0x5d2ax3<this[_0xe4bc[439]][_0xe4bc[67]];_0x5d2ax3++){_0x5d2ax2[_0xe4bc[439]][_0x5d2ax3]=this[_0xe4bc[439]][_0x5d2ax3][_0xe4bc[238]]()}};null!=this[_0xe4bc[2078]]&&(_0x5d2ax2[_0xe4bc[2078]]=this[_0xe4bc[2078]][_0xe4bc[238]]());null!=this[_0xe4bc[2079]]&&(_0x5d2ax2[_0xe4bc[2079]]=this[_0xe4bc[2079]][_0xe4bc[238]]());null!=this[_0xe4bc[1563]]&&(_0x5d2ax2[_0xe4bc[1563]]=this[_0xe4bc[1563]][_0xe4bc[238]]());_0x5d2ax2[_0xe4bc[2085]]=this[_0xe4bc[2085]];_0x5d2ax2[_0xe4bc[2086]]=this[_0xe4bc[2086]];_0x5d2ax2[_0xe4bc[67]]=this[_0xe4bc[67]];_0x5d2ax2[_0xe4bc[235]]=this[_0xe4bc[235]];_0x5d2ax2[_0xe4bc[236]]=this[_0xe4bc[236]];_0x5d2ax2[_0xe4bc[117]]=this[_0xe4bc[117]];_0x5d2ax2[_0xe4bc[119]]=this[_0xe4bc[119]];return _0x5d2ax2};function mxGraphSelectionModel(_0x5d2ax2){this[_0xe4bc[1179]]=_0x5d2ax2;this[_0xe4bc[895]]=[]}mxGraphSelectionModel[_0xe4bc[202]]= new mxEventSource;mxGraphSelectionModel[_0xe4bc[202]][_0xe4bc[196]]=mxGraphSelectionModel;mxGraphSelectionModel[_0xe4bc[202]][_0xe4bc[2091]]=_0xe4bc[130]!=mxClient[_0xe4bc[90]]?_0xe4bc[819]:_0xe4bc[110];mxGraphSelectionModel[_0xe4bc[202]][_0xe4bc[2092]]=_0xe4bc[130]!=mxClient[_0xe4bc[90]]?_0xe4bc[2093]:_0xe4bc[110];mxGraphSelectionModel[_0xe4bc[202]][_0xe4bc[1179]]=null;mxGraphSelectionModel[_0xe4bc[202]][_0xe4bc[2094]]= !1;mxGraphSelectionModel[_0xe4bc[202]][_0xe4bc[2095]]=function(){return this[_0xe4bc[2094]]};mxGraphSelectionModel[_0xe4bc[202]][_0xe4bc[2096]]=function(_0x5d2ax2){this[_0xe4bc[2094]]=_0x5d2ax2};mxGraphSelectionModel[_0xe4bc[202]][_0xe4bc[2097]]=function(_0x5d2ax2){return null!=_0x5d2ax2?0<=mxUtils[_0xe4bc[2]](this[_0xe4bc[895]],_0x5d2ax2):!1};mxGraphSelectionModel[_0xe4bc[202]][_0xe4bc[1107]]=function(){return 0==this[_0xe4bc[895]][_0xe4bc[67]]};mxGraphSelectionModel[_0xe4bc[202]][_0xe4bc[200]]=function(){this[_0xe4bc[2098]](null,this[_0xe4bc[895]])};mxGraphSelectionModel[_0xe4bc[202]][_0xe4bc[2099]]=function(_0x5d2ax2){null!=_0x5d2ax2&&this[_0xe4bc[2100]]([_0x5d2ax2])};mxGraphSelectionModel[_0xe4bc[202]][_0xe4bc[2100]]=function(_0x5d2ax2){if(null!=_0x5d2ax2){this[_0xe4bc[2094]]&&(_0x5d2ax2=[this[_0xe4bc[2101]](_0x5d2ax2)]);for(var _0x5d2ax3=[],_0x5d2ax4=0;_0x5d2ax4<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax4++){this[_0xe4bc[1179]][_0xe4bc[2102]](_0x5d2ax2[_0x5d2ax4])&&_0x5d2ax3[_0xe4bc[207]](_0x5d2ax2[_0x5d2ax4])};this[_0xe4bc[2098]](_0x5d2ax3,this[_0xe4bc[895]])}};mxGraphSelectionModel[_0xe4bc[202]][_0xe4bc[2101]]=function(_0x5d2ax2){if(null!=_0x5d2ax2){for(var _0x5d2ax3=0;_0x5d2ax3<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax3++){if(this[_0xe4bc[1179]][_0xe4bc[2102]](_0x5d2ax2[_0x5d2ax3])){return _0x5d2ax2[_0x5d2ax3]}}};return null};mxGraphSelectionModel[_0xe4bc[202]][_0xe4bc[2103]]=function(_0x5d2ax2){null!=_0x5d2ax2&&this[_0xe4bc[832]]([_0x5d2ax2])};mxGraphSelectionModel[_0xe4bc[202]][_0xe4bc[832]]=function(_0x5d2ax2){if(null!=_0x5d2ax2){var _0x5d2ax3=null;this[_0xe4bc[2094]]&&(_0x5d2ax3=this[_0xe4bc[895]],_0x5d2ax2=[this[_0xe4bc[2101]](_0x5d2ax2)]);for(var _0x5d2ax4=[],_0x5d2ax5=0;_0x5d2ax5<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax5++){!this[_0xe4bc[2097]](_0x5d2ax2[_0x5d2ax5])&&this[_0xe4bc[1179]][_0xe4bc[2102]](_0x5d2ax2[_0x5d2ax5])&&_0x5d2ax4[_0xe4bc[207]](_0x5d2ax2[_0x5d2ax5])};this[_0xe4bc[2098]](_0x5d2ax4,_0x5d2ax3)}};mxGraphSelectionModel[_0xe4bc[202]][_0xe4bc[2104]]=function(_0x5d2ax2){null!=_0x5d2ax2&&this[_0xe4bc[842]]([_0x5d2ax2])};mxGraphSelectionModel[_0xe4bc[202]][_0xe4bc[842]]=function(_0x5d2ax2){if(null!=_0x5d2ax2){for(var _0x5d2ax3=[],_0x5d2ax4=0;_0x5d2ax4<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax4++){this[_0xe4bc[2097]](_0x5d2ax2[_0x5d2ax4])&&_0x5d2ax3[_0xe4bc[207]](_0x5d2ax2[_0x5d2ax4])};this[_0xe4bc[2098]](null,_0x5d2ax3)}};mxGraphSelectionModel[_0xe4bc[202]][_0xe4bc[2098]]=function(_0x5d2ax2,_0x5d2ax3){if(null!=_0x5d2ax2&&0<_0x5d2ax2[_0xe4bc[67]]&&null!=_0x5d2ax2[0]||null!=_0x5d2ax3&&0<_0x5d2ax3[_0xe4bc[67]]&&null!=_0x5d2ax3[0]){var _0x5d2ax4= new mxSelectionChange(this,_0x5d2ax2,_0x5d2ax3);_0x5d2ax4[_0xe4bc[350]]();var _0x5d2ax5= new mxUndoableEdit(this,!1);_0x5d2ax5[_0xe4bc[99]](_0x5d2ax4);this[_0xe4bc[746]]( new mxEventObject(mxEvent.UNDO,_0xe4bc[1061],_0x5d2ax5))}};mxGraphSelectionModel[_0xe4bc[202]][_0xe4bc[1941]]=function(_0x5d2ax2){null!=_0x5d2ax2&&!this[_0xe4bc[2097]](_0x5d2ax2)&&this[_0xe4bc[895]][_0xe4bc[207]](_0x5d2ax2)};mxGraphSelectionModel[_0xe4bc[202]][_0xe4bc[1102]]=function(_0x5d2ax2){null!=_0x5d2ax2&&(_0x5d2ax2=mxUtils[_0xe4bc[2]](this[_0xe4bc[895]],_0x5d2ax2),0<=_0x5d2ax2&&this[_0xe4bc[895]][_0xe4bc[300]](_0x5d2ax2,1))};function mxSelectionChange(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){this[_0xe4bc[2105]]=_0x5d2ax2;this[_0xe4bc[2106]]=null!=_0x5d2ax3?_0x5d2ax3[_0xe4bc[1853]]():null;this[_0xe4bc[2107]]=null!=_0x5d2ax4?_0x5d2ax4[_0xe4bc[1853]]():null}mxSelectionChange[_0xe4bc[202]][_0xe4bc[350]]=function(){var _0x5d2ax2=mxLog[_0xe4bc[2109]](_0xe4bc[2108]);window[_0xe4bc[879]]=mxResources[_0xe4bc[203]](this[_0xe4bc[2105]][_0xe4bc[2092]])||this[_0xe4bc[2105]][_0xe4bc[2092]];if(null!=this[_0xe4bc[2107]]){for(var _0x5d2ax3=0;_0x5d2ax3<this[_0xe4bc[2107]][_0xe4bc[67]];_0x5d2ax3++){this[_0xe4bc[2105]][_0xe4bc[1102]](this[_0xe4bc[2107]][_0x5d2ax3])}};if(null!=this[_0xe4bc[2106]]){for(_0x5d2ax3=0;_0x5d2ax3<this[_0xe4bc[2106]][_0xe4bc[67]];_0x5d2ax3++){this[_0xe4bc[2105]][_0xe4bc[1941]](this[_0xe4bc[2106]][_0x5d2ax3])}};_0x5d2ax3=this[_0xe4bc[2106]];this[_0xe4bc[2106]]=this[_0xe4bc[2107]];this[_0xe4bc[2107]]=_0x5d2ax3;window[_0xe4bc[879]]=mxResources[_0xe4bc[203]](this[_0xe4bc[2105]][_0xe4bc[2091]])||this[_0xe4bc[2105]][_0xe4bc[2091]];mxLog[_0xe4bc[2110]](_0xe4bc[2108],_0x5d2ax2);this[_0xe4bc[2105]][_0xe4bc[746]]( new mxEventObject(mxEvent.CHANGE,_0xe4bc[2106],this[_0xe4bc[2106]],_0xe4bc[2107],this[_0xe4bc[2107]]))};function mxCellEditor(_0x5d2ax2){this[_0xe4bc[1179]]=_0x5d2ax2}mxCellEditor[_0xe4bc[202]][_0xe4bc[1179]]=null;mxCellEditor[_0xe4bc[202]][_0xe4bc[126]]=null;mxCellEditor[_0xe4bc[202]][_0xe4bc[2111]]=null;mxCellEditor[_0xe4bc[202]][_0xe4bc[2112]]=null;mxCellEditor[_0xe4bc[202]][_0xe4bc[2113]]= !1;mxCellEditor[_0xe4bc[202]][_0xe4bc[2114]]= !0;mxCellEditor[_0xe4bc[202]][_0xe4bc[2115]]=_0xe4bc[110];mxCellEditor[_0xe4bc[202]][_0xe4bc[2116]]=_0xe4bc[110];mxCellEditor[_0xe4bc[202]][_0xe4bc[176]]=function(){this[_0xe4bc[126]]=document[_0xe4bc[55]](_0xe4bc[126]);this[_0xe4bc[126]][_0xe4bc[926]]=_0xe4bc[2117];this[_0xe4bc[126]][_0xe4bc[124]][_0xe4bc[491]]=_0xe4bc[492];this[_0xe4bc[126]][_0xe4bc[124]][_0xe4bc[277]]=_0xe4bc[189];this[_0xe4bc[126]][_0xe4bc[57]](_0xe4bc[2118],_0xe4bc[2119]);this[_0xe4bc[126]][_0xe4bc[57]](_0xe4bc[969],_0xe4bc[2120]);mxClient[_0xe4bc[133]]&&(this[_0xe4bc[126]][_0xe4bc[124]][_0xe4bc[129]]=_0xe4bc[130]);mxEvent[_0xe4bc[169]](this[_0xe4bc[126]],_0xe4bc[2121],mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){this[_0xe4bc[2122]]()}));mxEvent[_0xe4bc[169]](this[_0xe4bc[126]],_0xe4bc[2123],mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){mxEvent[_0xe4bc[721]](_0x5d2ax2)||(113==_0x5d2ax2[_0xe4bc[2124]]||this[_0xe4bc[1179]][_0xe4bc[2125]]()&&13==_0x5d2ax2[_0xe4bc[2124]]&&!mxEvent[_0xe4bc[775]](_0x5d2ax2)&&!mxEvent[_0xe4bc[774]](_0x5d2ax2)?(this[_0xe4bc[1179]][_0xe4bc[2126]](!1),mxEvent[_0xe4bc[722]](_0x5d2ax2)):27==_0x5d2ax2[_0xe4bc[2124]]?(this[_0xe4bc[1179]][_0xe4bc[2126]](!0),mxEvent[_0xe4bc[722]](_0x5d2ax2)):(this[_0xe4bc[2127]]&&(this[_0xe4bc[2127]]= !1,this[_0xe4bc[126]][_0xe4bc[131]]=_0xe4bc[110]),this[_0xe4bc[2128]](!0)))}));mxEvent[_0xe4bc[169]](this[_0xe4bc[126]],_0xe4bc[2129],mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){this[_0xe4bc[2114]]&&!mxEvent[_0xe4bc[721]](_0x5d2ax2)&&setTimeout(mxUtils[_0xe4bc[885]](this,function(){this[_0xe4bc[129]]()}),0)}))};mxCellEditor[_0xe4bc[202]][_0xe4bc[129]]=function(){if(null!=this[_0xe4bc[1653]]){var _0x5d2ax2=this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[248]](this[_0xe4bc[2111]]),_0x5d2ax3=this[_0xe4bc[1179]][_0xe4bc[2130]](_0x5d2ax2[_0xe4bc[246]]),_0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[2131]](_0x5d2ax2[_0xe4bc[246]]);if(this[_0xe4bc[1179]][_0xe4bc[502]]()[_0xe4bc[250]](_0x5d2ax2[_0xe4bc[246]])){this[_0xe4bc[1562]][_0xe4bc[235]]=_0x5d2ax2[_0xe4bc[2079]][_0xe4bc[235]],this[_0xe4bc[1562]][_0xe4bc[236]]=_0x5d2ax2[_0xe4bc[2079]][_0xe4bc[236]],this[_0xe4bc[1562]][_0xe4bc[117]]=0,this[_0xe4bc[1562]][_0xe4bc[119]]=0}else {if(null!=this[_0xe4bc[1562]]){this[_0xe4bc[1562]][_0xe4bc[235]]=_0x5d2ax2[_0xe4bc[235]];this[_0xe4bc[1562]][_0xe4bc[236]]=_0x5d2ax2[_0xe4bc[236]];this[_0xe4bc[1562]][_0xe4bc[117]]=_0x5d2ax2[_0xe4bc[117]];this[_0xe4bc[1562]][_0xe4bc[119]]=_0x5d2ax2[_0xe4bc[119]];var _0x5d2ax5=mxUtils[_0xe4bc[433]](_0x5d2ax2[_0xe4bc[124]],mxConstants.STYLE_LABEL_POSITION,mxConstants.ALIGN_CENTER);_0x5d2ax5==mxConstants[_0xe4bc[2132]]?this[_0xe4bc[1562]][_0xe4bc[235]]-=_0x5d2ax2[_0xe4bc[117]]:_0x5d2ax5==mxConstants[_0xe4bc[480]]&&(this[_0xe4bc[1562]][_0xe4bc[235]]+=_0x5d2ax2[_0xe4bc[117]]);_0x5d2ax5=mxUtils[_0xe4bc[433]](_0x5d2ax2[_0xe4bc[124]],mxConstants.STYLE_VERTICAL_LABEL_POSITION,mxConstants.ALIGN_MIDDLE);_0x5d2ax5==mxConstants[_0xe4bc[1687]]?this[_0xe4bc[1562]][_0xe4bc[236]]-=_0x5d2ax2[_0xe4bc[119]]:_0x5d2ax5==mxConstants[_0xe4bc[482]]&&(this[_0xe4bc[1562]][_0xe4bc[236]]+=_0x5d2ax2[_0xe4bc[119]])}};_0x5d2ax5=this[_0xe4bc[126]][_0xe4bc[131]];if(_0xe4bc[192]==_0x5d2ax5[_0xe4bc[225]](_0x5d2ax5[_0xe4bc[67]]-1)||_0xe4bc[110]==_0x5d2ax5){_0x5d2ax5+=_0xe4bc[544]};_0x5d2ax5=mxUtils[_0xe4bc[321]](_0x5d2ax5,!1);_0x5d2ax4?(this[_0xe4bc[1653]][_0xe4bc[124]][_0xe4bc[493]]=_0xe4bc[1502],this[_0xe4bc[1653]][_0xe4bc[124]][_0xe4bc[117]]=this[_0xe4bc[1562]][_0xe4bc[117]]+_0xe4bc[168]):_0x5d2ax5=_0x5d2ax5[_0xe4bc[230]](/ /g,_0xe4bc[544]);_0x5d2ax5=_0x5d2ax5[_0xe4bc[230]](/\n/g,_0xe4bc[1453]);this[_0xe4bc[1653]][_0xe4bc[339]]=_0x5d2ax5;var _0x5d2ax5=this[_0xe4bc[1653]][_0xe4bc[359]]+30,_0x5d2ax9=this[_0xe4bc[1653]][_0xe4bc[167]]+16,_0x5d2ax5=Math[_0xe4bc[160]](_0x5d2ax5,40),_0x5d2ax9=Math[_0xe4bc[160]](_0x5d2ax9,20);_0x5d2ax3&&(_0x5d2ax5=Math[_0xe4bc[243]](this[_0xe4bc[1562]][_0xe4bc[117]]-4,_0x5d2ax5),_0x5d2ax9=Math[_0xe4bc[243]](this[_0xe4bc[1562]][_0xe4bc[119]],_0x5d2ax9));var _0x5d2axa=null!=_0x5d2ax2[_0xe4bc[963]]?_0x5d2ax2[_0xe4bc[963]][_0xe4bc[1655]]:null;null==_0x5d2axa&&(_0x5d2axa=mxUtils[_0xe4bc[433]](_0x5d2ax2[_0xe4bc[124]],mxConstants.STYLE_ALIGN,mxConstants.ALIGN_CENTER),_0x5d2ax2=mxUtils[_0xe4bc[433]](_0x5d2ax2[_0xe4bc[124]],mxConstants.STYLE_VERTICAL_ALIGN,mxConstants.ALIGN_MIDDLE),_0x5d2axa=mxUtils[_0xe4bc[1501]](_0x5d2axa,_0x5d2ax2));if(null!=_0x5d2axa){if(_0x5d2ax3|| !_0x5d2ax4){this[_0xe4bc[126]][_0xe4bc[124]][_0xe4bc[361]]=Math[_0xe4bc[160]](0,Math[_0xe4bc[488]](this[_0xe4bc[1562]][_0xe4bc[235]]-_0x5d2axa[_0xe4bc[235]]*this[_0xe4bc[1562]][_0xe4bc[117]]+_0x5d2axa[_0xe4bc[235]]*_0x5d2ax5)-3)+_0xe4bc[168]};this[_0xe4bc[126]][_0xe4bc[124]][_0xe4bc[125]]=Math[_0xe4bc[160]](0,Math[_0xe4bc[488]](this[_0xe4bc[1562]][_0xe4bc[236]]-_0x5d2axa[_0xe4bc[236]]*this[_0xe4bc[1562]][_0xe4bc[119]]+_0x5d2axa[_0xe4bc[236]]*_0x5d2ax9)+4)+_0xe4bc[168]};if(_0x5d2ax3|| !_0x5d2ax4){this[_0xe4bc[126]][_0xe4bc[124]][_0xe4bc[117]]=_0x5d2ax5+_0xe4bc[168]};this[_0xe4bc[126]][_0xe4bc[124]][_0xe4bc[119]]=_0x5d2ax9+_0xe4bc[168]}};mxCellEditor[_0xe4bc[202]][_0xe4bc[2133]]=function(){return this[_0xe4bc[2113]]};mxCellEditor[_0xe4bc[202]][_0xe4bc[2128]]=function(_0x5d2ax2){this[_0xe4bc[2113]]=_0x5d2ax2};mxCellEditor[_0xe4bc[202]][_0xe4bc[2122]]=function(){this[_0xe4bc[2126]](!this[_0xe4bc[1179]][_0xe4bc[2134]]())};mxCellEditor[_0xe4bc[202]][_0xe4bc[855]]=function(_0x5d2ax2,_0x5d2ax3){null==this[_0xe4bc[126]]&&this[_0xe4bc[176]]();this[_0xe4bc[2126]](!0);var _0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[248]](_0x5d2ax2);if(null!=_0x5d2ax4){this[_0xe4bc[2111]]=_0x5d2ax2;this[_0xe4bc[2112]]=_0x5d2ax3;this[_0xe4bc[2116]]=null;null!=_0x5d2ax4[_0xe4bc[963]]&&this[_0xe4bc[2135]](_0x5d2ax4)&&(this[_0xe4bc[2116]]=_0x5d2ax4[_0xe4bc[963]][_0xe4bc[252]],this[_0xe4bc[2116]][_0xe4bc[124]][_0xe4bc[187]]=_0xe4bc[188]);var _0x5d2ax5=this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[255]],_0x5d2ax5=mxUtils[_0xe4bc[433]](_0x5d2ax4[_0xe4bc[124]],mxConstants.STYLE_FONTSIZE,mxConstants.DEFAULT_FONTSIZE)*_0x5d2ax5,_0x5d2ax9=mxUtils[_0xe4bc[433]](_0x5d2ax4[_0xe4bc[124]],mxConstants.STYLE_FONTFAMILY,mxConstants.DEFAULT_FONTFAMILY),_0x5d2axa=mxUtils[_0xe4bc[433]](_0x5d2ax4[_0xe4bc[124]],mxConstants.STYLE_FONTCOLOR,_0xe4bc[586]),_0x5d2ax12=mxUtils[_0xe4bc[433]](_0x5d2ax4[_0xe4bc[124]],mxConstants.STYLE_ALIGN,mxConstants.ALIGN_LEFT),_0x5d2ax13=(mxUtils[_0xe4bc[433]](_0x5d2ax4[_0xe4bc[124]],mxConstants.STYLE_FONTSTYLE,0)&mxConstants[_0xe4bc[1410]])==mxConstants[_0xe4bc[1410]],_0x5d2ax14=(mxUtils[_0xe4bc[433]](_0x5d2ax4[_0xe4bc[124]],mxConstants.STYLE_FONTSTYLE,0)&mxConstants[_0xe4bc[1412]])==mxConstants[_0xe4bc[1412]],_0x5d2ax15=(mxUtils[_0xe4bc[433]](_0x5d2ax4[_0xe4bc[124]],mxConstants.STYLE_FONTSTYLE,0)&mxConstants[_0xe4bc[1414]])==mxConstants[_0xe4bc[1414]];this[_0xe4bc[126]][_0xe4bc[124]][_0xe4bc[487]]=Math[_0xe4bc[488]](_0x5d2ax5)+_0xe4bc[168];this[_0xe4bc[126]][_0xe4bc[124]][_0xe4bc[489]]=Math[_0xe4bc[488]](_0x5d2ax5*mxConstants[_0xe4bc[490]])+_0xe4bc[168];this[_0xe4bc[126]][_0xe4bc[124]][_0xe4bc[486]]=_0x5d2ax9;this[_0xe4bc[126]][_0xe4bc[124]][_0xe4bc[1165]]=_0x5d2ax12;this[_0xe4bc[126]][_0xe4bc[124]][_0xe4bc[352]]=_0x5d2axa;this[_0xe4bc[126]][_0xe4bc[124]][_0xe4bc[1452]]=_0x5d2ax13?_0xe4bc[1447]:_0xe4bc[1502];this[_0xe4bc[126]][_0xe4bc[124]][_0xe4bc[666]]=_0x5d2ax14?_0xe4bc[1449]:_0xe4bc[110];this[_0xe4bc[126]][_0xe4bc[124]][_0xe4bc[354]]=_0x5d2ax15?_0xe4bc[355]:_0xe4bc[110];this[_0xe4bc[126]][_0xe4bc[124]][_0xe4bc[277]]=_0xe4bc[278];this[_0xe4bc[126]][_0xe4bc[124]][_0xe4bc[2136]]=_0xe4bc[130];this[_0xe4bc[1562]]=_0x5d2ax5=this[_0xe4bc[2137]](_0x5d2ax4);this[_0xe4bc[126]][_0xe4bc[124]][_0xe4bc[361]]=_0x5d2ax5[_0xe4bc[235]]+_0xe4bc[168];this[_0xe4bc[126]][_0xe4bc[124]][_0xe4bc[125]]=_0x5d2ax5[_0xe4bc[236]]+_0xe4bc[168];this[_0xe4bc[126]][_0xe4bc[124]][_0xe4bc[117]]=_0x5d2ax5[_0xe4bc[117]]+_0xe4bc[168];this[_0xe4bc[126]][_0xe4bc[124]][_0xe4bc[119]]=_0x5d2ax5[_0xe4bc[119]]+_0xe4bc[168];this[_0xe4bc[126]][_0xe4bc[124]][_0xe4bc[931]]=5;_0x5d2ax4=this[_0xe4bc[2138]](_0x5d2ax4,_0x5d2ax3);null==_0x5d2ax4||0==_0x5d2ax4[_0xe4bc[67]]?(_0x5d2ax4=this[_0xe4bc[2139]](),this[_0xe4bc[2127]]= !0):this[_0xe4bc[2127]]= !1;this[_0xe4bc[2128]](!1);this[_0xe4bc[126]][_0xe4bc[131]]=_0x5d2ax4;this[_0xe4bc[1179]][_0xe4bc[526]][_0xe4bc[62]](this[_0xe4bc[126]]);_0xe4bc[130]!=this[_0xe4bc[126]][_0xe4bc[124]][_0xe4bc[495]]&&(this[_0xe4bc[2114]]&&(this[_0xe4bc[1653]]=this[_0xe4bc[2140]](),document[_0xe4bc[112]][_0xe4bc[62]](this[_0xe4bc[1653]]),this[_0xe4bc[129]]()),this[_0xe4bc[126]][_0xe4bc[393]](),this[_0xe4bc[126]][_0xe4bc[804]]())}};mxCellEditor[_0xe4bc[202]][_0xe4bc[2140]]=function(){var _0x5d2ax2=document[_0xe4bc[55]](_0xe4bc[485]),_0x5d2ax3=_0x5d2ax2[_0xe4bc[124]];_0x5d2ax3[_0xe4bc[491]]=_0xe4bc[492];_0x5d2ax3[_0xe4bc[493]]=_0xe4bc[494];_0x5d2ax3[_0xe4bc[187]]=_0xe4bc[188];_0x5d2ax3[_0xe4bc[495]]=mxClient[_0xe4bc[496]]?_0xe4bc[497]:_0xe4bc[498];_0x5d2ax3[_0xe4bc[499]]=_0xe4bc[500];_0x5d2ax3[_0xe4bc[123]]=_0xe4bc[125];_0x5d2ax3[_0xe4bc[489]]=this[_0xe4bc[126]][_0xe4bc[124]][_0xe4bc[489]];_0x5d2ax3[_0xe4bc[487]]=this[_0xe4bc[126]][_0xe4bc[124]][_0xe4bc[487]];_0x5d2ax3[_0xe4bc[486]]=this[_0xe4bc[126]][_0xe4bc[124]][_0xe4bc[486]];_0x5d2ax3[_0xe4bc[1452]]=this[_0xe4bc[126]][_0xe4bc[124]][_0xe4bc[1452]];_0x5d2ax3[_0xe4bc[1165]]=this[_0xe4bc[126]][_0xe4bc[124]][_0xe4bc[1165]];_0x5d2ax3[_0xe4bc[666]]=this[_0xe4bc[126]][_0xe4bc[124]][_0xe4bc[666]];_0x5d2ax3[_0xe4bc[354]]=this[_0xe4bc[126]][_0xe4bc[124]][_0xe4bc[354]];return _0x5d2ax2};mxCellEditor[_0xe4bc[202]][_0xe4bc[2126]]=function(_0x5d2ax2){null!=this[_0xe4bc[2111]]&&(null!=this[_0xe4bc[2116]]&&(this[_0xe4bc[2116]][_0xe4bc[124]][_0xe4bc[187]]=_0xe4bc[189],this[_0xe4bc[2116]]=null),!_0x5d2ax2&&this[_0xe4bc[2133]]()&&this[_0xe4bc[1179]][_0xe4bc[850]](this[_0xe4bc[2111]],this[_0xe4bc[2141]](),this[_0xe4bc[2112]]),null!=this[_0xe4bc[1653]]&&(document[_0xe4bc[112]][_0xe4bc[266]](this[_0xe4bc[1653]]),this[_0xe4bc[1653]]=null),this[_0xe4bc[1562]]=this[_0xe4bc[2112]]=this[_0xe4bc[2111]]=null,this[_0xe4bc[126]][_0xe4bc[2121]](),this[_0xe4bc[126]][_0xe4bc[265]][_0xe4bc[266]](this[_0xe4bc[126]]))};mxCellEditor[_0xe4bc[202]][_0xe4bc[2138]]=function(_0x5d2ax2,_0x5d2ax3){return this[_0xe4bc[1179]][_0xe4bc[2142]](_0x5d2ax2[_0xe4bc[246]],_0x5d2ax3)};mxCellEditor[_0xe4bc[202]][_0xe4bc[2141]]=function(){return this[_0xe4bc[126]][_0xe4bc[131]][_0xe4bc[230]](/\r/g,_0xe4bc[110])};mxCellEditor[_0xe4bc[202]][_0xe4bc[2135]]=function(_0x5d2ax2){return !0};mxCellEditor[_0xe4bc[202]][_0xe4bc[939]]=function(_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[255]];return  new mxRectangle(0,0,null==_0x5d2ax2[_0xe4bc[963]]?30:_0x5d2ax2[_0xe4bc[963]][_0xe4bc[803]]*_0x5d2ax3+20,_0xe4bc[361]==this[_0xe4bc[126]][_0xe4bc[124]][_0xe4bc[1165]]?120:40)};mxCellEditor[_0xe4bc[202]][_0xe4bc[2137]]=function(_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[1179]][_0xe4bc[502]]()[_0xe4bc[250]](_0x5d2ax2[_0xe4bc[246]]),_0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[255]],_0x5d2ax5=this[_0xe4bc[939]](_0x5d2ax2),_0x5d2ax9=_0x5d2ax5[_0xe4bc[117]],_0x5d2ax5=_0x5d2ax5[_0xe4bc[119]],_0x5d2axa=parseInt(_0x5d2ax2[_0xe4bc[124]][mxConstants[_0xe4bc[2143]]]||2)*_0x5d2ax4,_0x5d2ax12=parseInt(_0x5d2ax2[_0xe4bc[124]][mxConstants[_0xe4bc[2144]]]||0)*_0x5d2ax4+_0x5d2axa,_0x5d2ax13=parseInt(_0x5d2ax2[_0xe4bc[124]][mxConstants[_0xe4bc[2145]]]||0)*_0x5d2ax4+_0x5d2axa,_0x5d2ax14=parseInt(_0x5d2ax2[_0xe4bc[124]][mxConstants[_0xe4bc[2146]]]||0)*_0x5d2ax4+_0x5d2axa,_0x5d2ax4=parseInt(_0x5d2ax2[_0xe4bc[124]][mxConstants[_0xe4bc[2147]]]||0)*_0x5d2ax4+_0x5d2axa,_0x5d2ax13= new mxRectangle(_0x5d2ax2[_0xe4bc[235]],_0x5d2ax2[_0xe4bc[236]],Math[_0xe4bc[160]](_0x5d2ax9,_0x5d2ax2[_0xe4bc[117]]-_0x5d2ax4-_0x5d2ax13),Math[_0xe4bc[160]](_0x5d2ax5,_0x5d2ax2[_0xe4bc[119]]-_0x5d2ax12-_0x5d2ax14));_0x5d2ax3?(_0x5d2ax13[_0xe4bc[235]]=_0x5d2ax2[_0xe4bc[2079]][_0xe4bc[235]],_0x5d2ax13[_0xe4bc[236]]=_0x5d2ax2[_0xe4bc[2079]][_0xe4bc[236]],null!=_0x5d2ax2[_0xe4bc[963]]&&null!=_0x5d2ax2[_0xe4bc[963]][_0xe4bc[1563]]&&(0<_0x5d2ax2[_0xe4bc[963]][_0xe4bc[1563]][_0xe4bc[235]]&&(_0x5d2ax13[_0xe4bc[235]]=_0x5d2ax2[_0xe4bc[963]][_0xe4bc[1563]][_0xe4bc[235]]),0<_0x5d2ax2[_0xe4bc[963]][_0xe4bc[1563]][_0xe4bc[236]]&&(_0x5d2ax13[_0xe4bc[236]]=_0x5d2ax2[_0xe4bc[963]][_0xe4bc[1563]][_0xe4bc[236]]))):null!=_0x5d2ax2[_0xe4bc[963]]&&null!=_0x5d2ax2[_0xe4bc[963]][_0xe4bc[1563]]&&(_0x5d2ax13[_0xe4bc[235]]=Math[_0xe4bc[243]](_0x5d2ax13[_0xe4bc[235]],_0x5d2ax2[_0xe4bc[963]][_0xe4bc[1563]][_0xe4bc[235]]),_0x5d2ax13[_0xe4bc[236]]=Math[_0xe4bc[243]](_0x5d2ax13[_0xe4bc[236]],_0x5d2ax2[_0xe4bc[963]][_0xe4bc[1563]][_0xe4bc[236]]));_0x5d2ax13[_0xe4bc[235]]+=_0x5d2ax4;_0x5d2ax13[_0xe4bc[236]]+=_0x5d2ax12;null!=_0x5d2ax2[_0xe4bc[963]]&&null!=_0x5d2ax2[_0xe4bc[963]][_0xe4bc[1563]]&&(_0x5d2ax3?(_0x5d2ax13[_0xe4bc[117]]=Math[_0xe4bc[160]](_0x5d2ax9,_0x5d2ax2[_0xe4bc[963]][_0xe4bc[1563]][_0xe4bc[117]]),_0x5d2ax13[_0xe4bc[119]]=Math[_0xe4bc[160]](_0x5d2ax5,_0x5d2ax2[_0xe4bc[963]][_0xe4bc[1563]][_0xe4bc[119]])):(_0x5d2ax13[_0xe4bc[117]]=Math[_0xe4bc[160]](_0x5d2ax13[_0xe4bc[117]],_0x5d2ax2[_0xe4bc[963]][_0xe4bc[1563]][_0xe4bc[117]]),_0x5d2ax13[_0xe4bc[119]]=Math[_0xe4bc[160]](_0x5d2ax13[_0xe4bc[119]],_0x5d2ax2[_0xe4bc[963]][_0xe4bc[1563]][_0xe4bc[119]])));this[_0xe4bc[1179]][_0xe4bc[502]]()[_0xe4bc[1193]](_0x5d2ax2[_0xe4bc[246]])&&(_0x5d2ax3=mxUtils[_0xe4bc[433]](_0x5d2ax2[_0xe4bc[124]],mxConstants.STYLE_LABEL_POSITION,mxConstants.ALIGN_CENTER),_0x5d2ax3==mxConstants[_0xe4bc[2132]]?_0x5d2ax13[_0xe4bc[235]]-=_0x5d2ax2[_0xe4bc[117]]:_0x5d2ax3==mxConstants[_0xe4bc[480]]&&(_0x5d2ax13[_0xe4bc[235]]+=_0x5d2ax2[_0xe4bc[117]]),_0x5d2ax3=mxUtils[_0xe4bc[433]](_0x5d2ax2[_0xe4bc[124]],mxConstants.STYLE_VERTICAL_LABEL_POSITION,mxConstants.ALIGN_MIDDLE),_0x5d2ax3==mxConstants[_0xe4bc[1687]]?_0x5d2ax13[_0xe4bc[236]]-=_0x5d2ax2[_0xe4bc[119]]:_0x5d2ax3==mxConstants[_0xe4bc[482]]&&(_0x5d2ax13[_0xe4bc[236]]+=_0x5d2ax2[_0xe4bc[119]]));return _0x5d2ax13};mxCellEditor[_0xe4bc[202]][_0xe4bc[2139]]=function(_0x5d2ax2){return this[_0xe4bc[2115]]};mxCellEditor[_0xe4bc[202]][_0xe4bc[2148]]=function(){return this[_0xe4bc[2111]]};mxCellEditor[_0xe4bc[202]][_0xe4bc[515]]=function(){null!=this[_0xe4bc[126]]&&(mxEvent[_0xe4bc[762]](this[_0xe4bc[126]]),null!=this[_0xe4bc[126]][_0xe4bc[265]]&&this[_0xe4bc[126]][_0xe4bc[265]][_0xe4bc[266]](this[_0xe4bc[126]]),this[_0xe4bc[126]]=null)};function mxCellRenderer(){}mxCellRenderer[_0xe4bc[202]][_0xe4bc[2149]]=mxConnector;mxCellRenderer[_0xe4bc[202]][_0xe4bc[2150]]=mxRectangleShape;mxCellRenderer[_0xe4bc[202]][_0xe4bc[2151]]=mxText;mxCellRenderer[_0xe4bc[202]][_0xe4bc[2152]]= !0;mxCellRenderer[_0xe4bc[202]][_0xe4bc[2153]]={};mxCellRenderer[_0xe4bc[2154]]=function(_0x5d2ax2,_0x5d2ax3){mxCellRenderer[_0xe4bc[202]][_0xe4bc[2153]][_0x5d2ax2]=_0x5d2ax3};mxCellRenderer[_0xe4bc[2154]](mxConstants.SHAPE_RECTANGLE,mxRectangleShape);mxCellRenderer[_0xe4bc[2154]](mxConstants.SHAPE_ELLIPSE,mxEllipse);mxCellRenderer[_0xe4bc[2154]](mxConstants.SHAPE_RHOMBUS,mxRhombus);mxCellRenderer[_0xe4bc[2154]](mxConstants.SHAPE_CYLINDER,mxCylinder);mxCellRenderer[_0xe4bc[2154]](mxConstants.SHAPE_CONNECTOR,mxConnector);mxCellRenderer[_0xe4bc[2154]](mxConstants.SHAPE_ACTOR,mxActor);mxCellRenderer[_0xe4bc[2154]](mxConstants.SHAPE_TRIANGLE,mxTriangle);mxCellRenderer[_0xe4bc[2154]](mxConstants.SHAPE_HEXAGON,mxHexagon);mxCellRenderer[_0xe4bc[2154]](mxConstants.SHAPE_CLOUD,mxCloud);mxCellRenderer[_0xe4bc[2154]](mxConstants.SHAPE_LINE,mxLine);mxCellRenderer[_0xe4bc[2154]](mxConstants.SHAPE_ARROW,mxArrow);mxCellRenderer[_0xe4bc[2154]](mxConstants.SHAPE_DOUBLE_ELLIPSE,mxDoubleEllipse);mxCellRenderer[_0xe4bc[2154]](mxConstants.SHAPE_SWIMLANE,mxSwimlane);mxCellRenderer[_0xe4bc[2154]](mxConstants.SHAPE_IMAGE,mxImageShape);mxCellRenderer[_0xe4bc[2154]](mxConstants.SHAPE_LABEL,mxLabel);mxCellRenderer[_0xe4bc[202]][_0xe4bc[2155]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=_0x5d2ax2[_0xe4bc[441]][_0xe4bc[1179]][_0xe4bc[502]]();if(null!=_0x5d2ax2[_0xe4bc[441]][_0xe4bc[1179]][_0xe4bc[526]]&&null==_0x5d2ax2[_0xe4bc[253]]&&_0x5d2ax2[_0xe4bc[246]]!=_0x5d2ax2[_0xe4bc[441]][_0xe4bc[1741]]&&(_0x5d2ax4[_0xe4bc[1193]](_0x5d2ax2[_0xe4bc[246]])||_0x5d2ax4[_0xe4bc[250]](_0x5d2ax2[_0xe4bc[246]]))){if(this[_0xe4bc[2156]](_0x5d2ax2),null!=_0x5d2ax2[_0xe4bc[253]]&&(null==_0x5d2ax3||_0x5d2ax3)){this[_0xe4bc[2157]](_0x5d2ax2),_0x5d2ax2[_0xe4bc[441]][_0xe4bc[1179]][_0xe4bc[2158]]||_0x5d2ax4[_0xe4bc[250]](_0x5d2ax2[_0xe4bc[246]])?_0x5d2ax2[_0xe4bc[2081]]= !0:_0x5d2ax2[_0xe4bc[441]][_0xe4bc[1179]][_0xe4bc[2159]]&&null!=this[_0xe4bc[2160]]&&(this[_0xe4bc[2160]][_0xe4bc[265]]==_0x5d2ax2[_0xe4bc[253]][_0xe4bc[252]][_0xe4bc[265]]?this[_0xe4bc[2161]](_0x5d2ax2,this[_0xe4bc[2160]]):this[_0xe4bc[2160]]=null),_0x5d2ax2[_0xe4bc[253]][_0xe4bc[255]]=_0x5d2ax2[_0xe4bc[441]][_0xe4bc[255]],this[_0xe4bc[2162]](_0x5d2ax2),this[_0xe4bc[2163]](_0x5d2ax2)}}};mxCellRenderer[_0xe4bc[202]][_0xe4bc[2157]]=function(_0x5d2ax2){_0x5d2ax2[_0xe4bc[253]][_0xe4bc[176]](_0x5d2ax2[_0xe4bc[441]][_0xe4bc[2024]]())};mxCellRenderer[_0xe4bc[202]][_0xe4bc[2164]]=function(_0x5d2ax2,_0x5d2ax3){for(var _0x5d2ax4=null,_0x5d2ax5=_0x5d2ax2[_0xe4bc[441]][_0xe4bc[1179]],_0x5d2ax9=_0x5d2ax5[_0xe4bc[502]](),_0x5d2axa=_0x5d2ax2[_0xe4bc[246]],_0x5d2ax12=_0x5d2ax9[_0xe4bc[1197]](_0x5d2axa);null!=_0x5d2ax12&&null==_0x5d2ax4;){_0x5d2ax4=this[_0xe4bc[2165]](_0x5d2ax5,_0x5d2ax12,_0x5d2axa,_0x5d2ax3),_0x5d2axa=_0x5d2ax12,_0x5d2ax12=_0x5d2ax9[_0xe4bc[1197]](_0x5d2axa)};return _0x5d2ax4};mxCellRenderer[_0xe4bc[202]][_0xe4bc[2165]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){var _0x5d2ax9=null,_0x5d2axa=_0x5d2ax2[_0xe4bc[502]]();for(_0x5d2ax4=null!=_0x5d2ax4?_0x5d2ax3[_0xe4bc[1738]](_0x5d2ax4)-1:_0x5d2axa[_0xe4bc[262]](_0x5d2ax3)-1;0<=_0x5d2ax4&&null==_0x5d2ax9;_0x5d2ax4--){_0x5d2ax9=this[_0xe4bc[2165]](_0x5d2ax2,_0x5d2axa[_0xe4bc[263]](_0x5d2ax3,_0x5d2ax4),null,_0x5d2ax5)};if(null==_0x5d2ax9&&(_0x5d2ax9=_0x5d2ax2[_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax3),null!=_0x5d2ax9&&(null==_0x5d2ax9[_0xe4bc[253]]||null==_0x5d2ax9[_0xe4bc[253]][_0xe4bc[252]]||_0x5d2ax9[_0xe4bc[253]][_0xe4bc[252]][_0xe4bc[265]]!=_0x5d2ax5))){_0x5d2ax9=null};return _0x5d2ax9};mxCellRenderer[_0xe4bc[202]][_0xe4bc[2166]]=function(_0x5d2ax2){var _0x5d2ax3=_0x5d2ax2[_0xe4bc[253]][_0xe4bc[252]][_0xe4bc[265]],_0x5d2ax4=this[_0xe4bc[2164]](_0x5d2ax2,_0x5d2ax3),_0x5d2ax5=_0x5d2ax3[_0xe4bc[285]];null!=_0x5d2ax4&&(_0x5d2ax5=_0x5d2ax4[_0xe4bc[253]][_0xe4bc[252]],null!=_0x5d2ax4[_0xe4bc[963]]&&(null!=_0x5d2ax4[_0xe4bc[963]][_0xe4bc[252]]&&_0x5d2ax4[_0xe4bc[963]][_0xe4bc[252]][_0xe4bc[265]]==_0x5d2ax3)&&(_0x5d2ax5=_0x5d2ax4[_0xe4bc[963]][_0xe4bc[252]]),_0x5d2ax5=_0x5d2ax5[_0xe4bc[287]]);this[_0xe4bc[2161]](_0x5d2ax2,_0x5d2ax5)};mxCellRenderer[_0xe4bc[202]][_0xe4bc[2167]]=function(_0x5d2ax2){var _0x5d2ax3=_0x5d2ax2[_0xe4bc[441]],_0x5d2ax4=_0x5d2ax3[_0xe4bc[1179]][_0xe4bc[502]]();if(_0x5d2ax3[_0xe4bc[1179]][_0xe4bc[2159]]){if(null==this[_0xe4bc[2160]]||null==this[_0xe4bc[2160]][_0xe4bc[265]]||this[_0xe4bc[2160]][_0xe4bc[265]]!=_0x5d2ax2[_0xe4bc[253]][_0xe4bc[252]][_0xe4bc[265]]){this[_0xe4bc[2160]]=_0x5d2ax2[_0xe4bc[253]][_0xe4bc[252]]}}else {if(_0x5d2ax3[_0xe4bc[1179]][_0xe4bc[2168]]){var _0x5d2ax5=_0x5d2ax2[_0xe4bc[253]][_0xe4bc[252]],_0x5d2ax9=_0x5d2ax5[_0xe4bc[265]],_0x5d2ax4=_0x5d2ax4[_0xe4bc[1197]](_0x5d2ax2[_0xe4bc[246]]),_0x5d2ax3=_0x5d2ax3[_0xe4bc[248]](_0x5d2ax4),_0x5d2ax9=null!=_0x5d2ax3&&null!=_0x5d2ax3[_0xe4bc[253]]&&null!=_0x5d2ax3[_0xe4bc[253]][_0xe4bc[252]]?_0x5d2ax3[_0xe4bc[253]][_0xe4bc[252]][_0xe4bc[287]]:_0x5d2ax9[_0xe4bc[285]];null!=_0x5d2ax9&&_0x5d2ax9!=_0x5d2ax5&&this[_0xe4bc[2161]](_0x5d2ax2,_0x5d2ax9)}}};mxCellRenderer[_0xe4bc[202]][_0xe4bc[2161]]=function(_0x5d2ax2,_0x5d2ax3){_0x5d2ax2[_0xe4bc[253]][_0xe4bc[252]][_0xe4bc[265]][_0xe4bc[950]](_0x5d2ax2[_0xe4bc[253]][_0xe4bc[252]],_0x5d2ax3);null!=_0x5d2ax2[_0xe4bc[963]]&&(null!=_0x5d2ax2[_0xe4bc[963]][_0xe4bc[252]]&&_0x5d2ax2[_0xe4bc[963]][_0xe4bc[252]][_0xe4bc[265]]==_0x5d2ax2[_0xe4bc[253]][_0xe4bc[252]][_0xe4bc[265]])&&_0x5d2ax2[_0xe4bc[253]][_0xe4bc[252]][_0xe4bc[265]][_0xe4bc[950]](_0x5d2ax2[_0xe4bc[963]][_0xe4bc[252]],_0x5d2ax2[_0xe4bc[253]][_0xe4bc[252]][_0xe4bc[287]])};mxCellRenderer[_0xe4bc[202]][_0xe4bc[2156]]=function(_0x5d2ax2){if(null!=_0x5d2ax2[_0xe4bc[124]]){var _0x5d2ax3=mxStencilRegistry[_0xe4bc[1560]](_0x5d2ax2[_0xe4bc[124]][mxConstants[_0xe4bc[2059]]]);null!=_0x5d2ax3?_0x5d2ax2[_0xe4bc[253]]= new mxShape(_0x5d2ax3):(_0x5d2ax3=this[_0xe4bc[2169]](_0x5d2ax2),_0x5d2ax2[_0xe4bc[253]]= new _0x5d2ax3);_0x5d2ax2[_0xe4bc[253]][_0xe4bc[1525]]=_0x5d2ax2[_0xe4bc[439]];_0x5d2ax2[_0xe4bc[253]][_0xe4bc[1562]]= new mxRectangle(_0x5d2ax2[_0xe4bc[235]],_0x5d2ax2[_0xe4bc[236]],_0x5d2ax2[_0xe4bc[117]],_0x5d2ax2[_0xe4bc[119]]);_0x5d2ax2[_0xe4bc[253]][_0xe4bc[507]]=_0x5d2ax2[_0xe4bc[441]][_0xe4bc[1179]][_0xe4bc[507]];this[_0xe4bc[2170]](_0x5d2ax2)}};mxCellRenderer[_0xe4bc[202]][_0xe4bc[2171]]=function(_0x5d2ax2){return null!=_0x5d2ax2?mxCellRenderer[_0xe4bc[202]][_0xe4bc[2153]][_0x5d2ax2]:null};mxCellRenderer[_0xe4bc[202]][_0xe4bc[2169]]=function(_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[2171]](_0x5d2ax2[_0xe4bc[124]][mxConstants[_0xe4bc[2059]]]);null==_0x5d2ax3&&(_0x5d2ax3=_0x5d2ax2[_0xe4bc[441]][_0xe4bc[1179]][_0xe4bc[502]]()[_0xe4bc[250]](_0x5d2ax2[_0xe4bc[246]])?this[_0xe4bc[2149]]:this[_0xe4bc[2150]]);return _0x5d2ax3};mxCellRenderer[_0xe4bc[202]][_0xe4bc[2170]]=function(_0x5d2ax2){_0x5d2ax2[_0xe4bc[253]][_0xe4bc[183]](_0x5d2ax2);_0x5d2ax2[_0xe4bc[253]][_0xe4bc[618]]=_0x5d2ax2[_0xe4bc[441]][_0xe4bc[1179]][_0xe4bc[1202]](_0x5d2ax2);_0x5d2ax2[_0xe4bc[253]][_0xe4bc[630]]=this[_0xe4bc[2171]](_0x5d2ax2[_0xe4bc[441]][_0xe4bc[1179]][_0xe4bc[2172]](_0x5d2ax2));_0x5d2ax2[_0xe4bc[253]][_0xe4bc[632]]=_0x5d2ax2[_0xe4bc[441]][_0xe4bc[1179]][_0xe4bc[2173]](_0x5d2ax2);_0x5d2ax2[_0xe4bc[253]][_0xe4bc[634]]=_0x5d2ax2[_0xe4bc[441]][_0xe4bc[1179]][_0xe4bc[2174]](_0x5d2ax2);_0x5d2ax2[_0xe4bc[253]][_0xe4bc[638]]=_0x5d2ax2[_0xe4bc[124]][mxConstants[_0xe4bc[2175]]];_0x5d2ax2[_0xe4bc[253]][_0xe4bc[631]]=_0x5d2ax2[_0xe4bc[441]][_0xe4bc[1179]][_0xe4bc[2176]](_0x5d2ax2);this[_0xe4bc[2177]](_0x5d2ax2)};mxCellRenderer[_0xe4bc[202]][_0xe4bc[2177]]=function(_0x5d2ax2){null!=_0x5d2ax2[_0xe4bc[253]]&&(this[_0xe4bc[2178]](_0x5d2ax2,_0xe4bc[632],mxConstants.STYLE_FILLCOLOR),this[_0xe4bc[2178]](_0x5d2ax2,_0xe4bc[634],mxConstants.STYLE_GRADIENTCOLOR),this[_0xe4bc[2178]](_0x5d2ax2,_0xe4bc[1334],mxConstants.STYLE_FILLCOLOR),this[_0xe4bc[2178]](_0x5d2ax2,_0xe4bc[1336],mxConstants.STYLE_STROKECOLOR),this[_0xe4bc[2178]](_0x5d2ax2,_0xe4bc[1299],mxConstants.STYLE_GRADIENTCOLOR))};mxCellRenderer[_0xe4bc[202]][_0xe4bc[2178]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){var _0x5d2ax5=_0x5d2ax2[_0xe4bc[253]][_0x5d2ax3],_0x5d2ax9=_0x5d2ax2[_0xe4bc[441]][_0xe4bc[1179]],_0x5d2axa=null;_0xe4bc[1549]==_0x5d2ax5?_0x5d2axa=_0x5d2ax9[_0xe4bc[251]][_0xe4bc[1197]](_0x5d2ax2[_0xe4bc[246]]):_0xe4bc[687]==_0x5d2ax5?(_0x5d2axa=null!=_0x5d2ax9[_0xe4bc[251]][_0xe4bc[1709]](_0x5d2ax2[_0xe4bc[246]],!1)?_0x5d2ax9[_0xe4bc[251]][_0xe4bc[1709]](_0x5d2ax2[_0xe4bc[246]],!1):_0x5d2ax2[_0xe4bc[246]],_0x5d2axa=_0x5d2ax9[_0xe4bc[2179]](_0x5d2axa),_0x5d2ax4=_0x5d2ax9[_0xe4bc[2180]]):_0xe4bc[2181]==_0x5d2ax5&&(_0x5d2ax2[_0xe4bc[253]][_0x5d2ax3]=_0x5d2ax2[_0xe4bc[253]][_0xe4bc[632]]);null!=_0x5d2axa&&(_0x5d2ax5=_0x5d2ax9[_0xe4bc[249]]()[_0xe4bc[248]](_0x5d2axa),_0x5d2ax2[_0xe4bc[253]][_0x5d2ax3]=null,null!=_0x5d2ax5&&(_0x5d2ax2[_0xe4bc[253]][_0x5d2ax3]=null!=_0x5d2ax5[_0xe4bc[253]]&&_0xe4bc[632]!=_0x5d2ax3?_0x5d2ax5[_0xe4bc[253]][_0x5d2ax3]:_0x5d2ax5[_0xe4bc[124]][_0x5d2ax4]))};mxCellRenderer[_0xe4bc[202]][_0xe4bc[2182]]=function(_0x5d2ax2){return _0x5d2ax2[_0xe4bc[441]][_0xe4bc[1179]][_0xe4bc[2183]](_0x5d2ax2[_0xe4bc[246]])};mxCellRenderer[_0xe4bc[202]][_0xe4bc[2184]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=_0x5d2ax2[_0xe4bc[441]][_0xe4bc[1179]];_0x5d2ax4[_0xe4bc[502]]()[_0xe4bc[250]](_0x5d2ax2[_0xe4bc[246]]);if(0<_0x5d2ax2[_0xe4bc[124]][mxConstants[_0xe4bc[2185]]]||null==_0x5d2ax2[_0xe4bc[124]][mxConstants[_0xe4bc[2185]]]){var _0x5d2ax5=_0x5d2ax4[_0xe4bc[2186]](_0x5d2ax2[_0xe4bc[246]])||null!=_0x5d2ax3&&mxUtils[_0xe4bc[1331]](_0x5d2ax3);_0x5d2ax2[_0xe4bc[963]]= new this[_0xe4bc[2151]](_0x5d2ax3, new mxRectangle,_0x5d2ax2[_0xe4bc[124]][mxConstants[_0xe4bc[2064]]]||mxConstants[_0xe4bc[479]],_0x5d2ax4[_0xe4bc[2187]](_0x5d2ax2),_0x5d2ax2[_0xe4bc[124]][mxConstants[_0xe4bc[2069]]],_0x5d2ax2[_0xe4bc[124]][mxConstants[_0xe4bc[2188]]],_0x5d2ax2[_0xe4bc[124]][mxConstants[_0xe4bc[2185]]],_0x5d2ax2[_0xe4bc[124]][mxConstants[_0xe4bc[2189]]],_0x5d2ax2[_0xe4bc[124]][mxConstants[_0xe4bc[2143]]],_0x5d2ax2[_0xe4bc[124]][mxConstants[_0xe4bc[2144]]],_0x5d2ax2[_0xe4bc[124]][mxConstants[_0xe4bc[2145]]],_0x5d2ax2[_0xe4bc[124]][mxConstants[_0xe4bc[2146]]],_0x5d2ax2[_0xe4bc[124]][mxConstants[_0xe4bc[2147]]],_0x5d2ax2[_0xe4bc[124]][mxConstants[_0xe4bc[2190]]],_0x5d2ax2[_0xe4bc[124]][mxConstants[_0xe4bc[2191]]],_0x5d2ax2[_0xe4bc[124]][mxConstants[_0xe4bc[2192]]],_0x5d2ax4[_0xe4bc[2131]](_0x5d2ax2[_0xe4bc[246]])&&_0x5d2ax4[_0xe4bc[2186]](_0x5d2ax2[_0xe4bc[246]]),_0x5d2ax4[_0xe4bc[2130]](_0x5d2ax2[_0xe4bc[246]]),_0x5d2ax2[_0xe4bc[124]][mxConstants[_0xe4bc[2193]]],_0x5d2ax2[_0xe4bc[124]][mxConstants[_0xe4bc[2194]]]);_0x5d2ax2[_0xe4bc[963]][_0xe4bc[461]]=mxUtils[_0xe4bc[433]](_0x5d2ax2[_0xe4bc[124]],mxConstants.STYLE_TEXT_OPACITY,100);_0x5d2ax2[_0xe4bc[963]][_0xe4bc[507]]=_0x5d2ax5?mxConstants[_0xe4bc[1656]]:_0x5d2ax2[_0xe4bc[441]][_0xe4bc[1179]][_0xe4bc[507]];_0x5d2ax2[_0xe4bc[963]][_0xe4bc[724]]=_0x5d2ax2;this[_0xe4bc[2195]](_0x5d2ax2);var _0x5d2ax9=!1,_0x5d2axa=function(_0x5d2ax3){var _0x5d2ax5=_0x5d2ax2;if(mxClient[_0xe4bc[754]]||_0x5d2ax9){_0x5d2ax5=mxEvent[_0xe4bc[731]](_0x5d2ax3),_0x5d2ax3=mxEvent[_0xe4bc[733]](_0x5d2ax3),_0x5d2ax3=mxUtils[_0xe4bc[2196]](_0x5d2ax4[_0xe4bc[526]],_0x5d2ax5,_0x5d2ax3),_0x5d2ax5=_0x5d2ax4[_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax4[_0xe4bc[999]](_0x5d2ax3[_0xe4bc[235]],_0x5d2ax3[_0xe4bc[236]]))};return _0x5d2ax5};mxEvent[_0xe4bc[759]](_0x5d2ax2[_0xe4bc[963]][_0xe4bc[252]],mxUtils[_0xe4bc[885]](this,function(_0x5d2ax3){this[_0xe4bc[2197]](_0x5d2ax2,_0x5d2ax3)&&(_0x5d2ax4[_0xe4bc[758]](mxEvent.MOUSE_DOWN, new mxMouseEvent(_0x5d2ax3,_0x5d2ax2)),_0x5d2ax9=_0x5d2ax4[_0xe4bc[507]]!=mxConstants[_0xe4bc[508]]&&_0xe4bc[2198]==mxEvent[_0xe4bc[728]](_0x5d2ax3)[_0xe4bc[301]])}),mxUtils[_0xe4bc[885]](this,function(_0x5d2ax3){this[_0xe4bc[2197]](_0x5d2ax2,_0x5d2ax3)&&_0x5d2ax4[_0xe4bc[758]](mxEvent.MOUSE_MOVE, new mxMouseEvent(_0x5d2ax3,_0x5d2axa(_0x5d2ax3)))}),mxUtils[_0xe4bc[885]](this,function(_0x5d2ax3){this[_0xe4bc[2197]](_0x5d2ax2,_0x5d2ax3)&&(_0x5d2ax4[_0xe4bc[758]](mxEvent.MOUSE_UP, new mxMouseEvent(_0x5d2ax3,_0x5d2axa(_0x5d2ax3))),_0x5d2ax9= !1)}));mxEvent[_0xe4bc[169]](_0x5d2ax2[_0xe4bc[963]][_0xe4bc[252]],_0xe4bc[760],mxUtils[_0xe4bc[885]](this,function(_0x5d2ax3){this[_0xe4bc[2197]](_0x5d2ax2,_0x5d2ax3)&&(_0x5d2ax4[_0xe4bc[761]](_0x5d2ax3,_0x5d2ax2[_0xe4bc[246]]),mxEvent[_0xe4bc[722]](_0x5d2ax3))}))}};mxCellRenderer[_0xe4bc[202]][_0xe4bc[2195]]=function(_0x5d2ax2){var _0x5d2ax3=_0x5d2ax2[_0xe4bc[441]][_0xe4bc[1179]];_0x5d2ax2[_0xe4bc[963]][_0xe4bc[507]]!=mxConstants[_0xe4bc[508]]&&(mxClient[_0xe4bc[48]]&&mxClient[_0xe4bc[2199]]?_0x5d2ax2[_0xe4bc[963]][_0xe4bc[176]](_0x5d2ax3[_0xe4bc[526]]):mxUtils[_0xe4bc[458]](_0x5d2ax2[_0xe4bc[441]][_0xe4bc[2024]]())&&(null!=_0x5d2ax2[_0xe4bc[253]][_0xe4bc[685]]?_0x5d2ax2[_0xe4bc[963]][_0xe4bc[176]](_0x5d2ax2[_0xe4bc[253]][_0xe4bc[685]]):_0x5d2ax2[_0xe4bc[963]][_0xe4bc[176]](_0x5d2ax2[_0xe4bc[253]][_0xe4bc[252]])));null==_0x5d2ax2[_0xe4bc[963]][_0xe4bc[252]]&&(_0x5d2ax2[_0xe4bc[963]][_0xe4bc[176]](_0x5d2ax2[_0xe4bc[441]][_0xe4bc[2024]]()),null!=_0x5d2ax2[_0xe4bc[253]]&&null!=_0x5d2ax2[_0xe4bc[963]]&&_0x5d2ax2[_0xe4bc[253]][_0xe4bc[252]][_0xe4bc[265]][_0xe4bc[950]](_0x5d2ax2[_0xe4bc[963]][_0xe4bc[252]],_0x5d2ax2[_0xe4bc[253]][_0xe4bc[252]][_0xe4bc[287]]))};mxCellRenderer[_0xe4bc[202]][_0xe4bc[2162]]=function(_0x5d2ax2){var _0x5d2ax3=_0x5d2ax2[_0xe4bc[441]][_0xe4bc[1179]][_0xe4bc[2200]](_0x5d2ax2[_0xe4bc[246]]),_0x5d2ax4=null;if(null!=_0x5d2ax3){for(var _0x5d2ax4= new mxDictionary,_0x5d2ax5=0;_0x5d2ax5<_0x5d2ax3[_0xe4bc[67]];_0x5d2ax5++){var _0x5d2ax9=null!=_0x5d2ax2[_0xe4bc[1211]]?_0x5d2ax2[_0xe4bc[1211]][_0xe4bc[205]](_0x5d2ax3[_0x5d2ax5]):null;null==_0x5d2ax9&&(_0x5d2ax9= new mxImageShape( new mxRectangle,_0x5d2ax3[_0x5d2ax5][_0xe4bc[618]][_0xe4bc[390]]),_0x5d2ax9[_0xe4bc[507]]=_0x5d2ax2[_0xe4bc[441]][_0xe4bc[1179]][_0xe4bc[507]],_0x5d2ax9[_0xe4bc[1674]]= !1,_0x5d2ax9[_0xe4bc[2201]]=_0x5d2ax3[_0x5d2ax5],this[_0xe4bc[2023]](_0x5d2ax2,_0x5d2ax9),this[_0xe4bc[2202]](_0x5d2ax2,_0x5d2ax3[_0x5d2ax5],_0x5d2ax9),null!=_0x5d2ax3[_0x5d2ax5][_0xe4bc[270]]&&(_0x5d2ax9[_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[270]]=_0x5d2ax3[_0x5d2ax5][_0xe4bc[270]]));_0x5d2ax4[_0xe4bc[204]](_0x5d2ax3[_0x5d2ax5],_0x5d2ax9)}};null!=_0x5d2ax2[_0xe4bc[1211]]&&_0x5d2ax2[_0xe4bc[1211]][_0xe4bc[209]](function(_0x5d2ax2,_0x5d2ax3){_0x5d2ax3[_0xe4bc[515]]()});_0x5d2ax2[_0xe4bc[1211]]=_0x5d2ax4};mxCellRenderer[_0xe4bc[202]][_0xe4bc[2023]]=function(_0x5d2ax2,_0x5d2ax3){_0x5d2ax3[_0xe4bc[176]](_0x5d2ax2[_0xe4bc[441]][_0xe4bc[1524]]())};mxCellRenderer[_0xe4bc[202]][_0xe4bc[2202]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){var _0x5d2ax5=_0x5d2ax2[_0xe4bc[441]][_0xe4bc[1179]];mxEvent[_0xe4bc[169]](_0x5d2ax4[_0xe4bc[252]],_0xe4bc[173],function(_0x5d2ax4){_0x5d2ax5[_0xe4bc[2203]]()&&_0x5d2ax5[_0xe4bc[2126]](!_0x5d2ax5[_0xe4bc[2134]]());_0x5d2ax3[_0xe4bc[746]]( new mxEventObject(mxEvent.CLICK,_0xe4bc[763],_0x5d2ax4,_0xe4bc[246],_0x5d2ax2[_0xe4bc[246]]))});mxEvent[_0xe4bc[759]](_0x5d2ax4[_0xe4bc[252]],function(_0x5d2ax2){mxEvent[_0xe4bc[722]](_0x5d2ax2)},function(_0x5d2ax3){_0x5d2ax5[_0xe4bc[758]](mxEvent.MOUSE_MOVE, new mxMouseEvent(_0x5d2ax3,_0x5d2ax2))});mxClient[_0xe4bc[754]]&&mxEvent[_0xe4bc[169]](_0x5d2ax4[_0xe4bc[252]],_0xe4bc[757],function(_0x5d2ax4){_0x5d2ax3[_0xe4bc[746]]( new mxEventObject(mxEvent.CLICK,_0xe4bc[763],_0x5d2ax4,_0xe4bc[246],_0x5d2ax2[_0xe4bc[246]]))})};mxCellRenderer[_0xe4bc[202]][_0xe4bc[2204]]=function(_0x5d2ax2){var _0x5d2ax3=_0x5d2ax2[_0xe4bc[441]][_0xe4bc[1179]],_0x5d2ax4=_0x5d2ax3[_0xe4bc[2205]](_0x5d2ax2);if(_0x5d2ax3[_0xe4bc[2206]]&&null!=_0x5d2ax4){if(null==_0x5d2ax2[_0xe4bc[2207]]){var _0x5d2ax5= new mxRectangle(0,0,_0x5d2ax4[_0xe4bc[117]],_0x5d2ax4[_0xe4bc[119]]);_0x5d2ax2[_0xe4bc[2207]]= new mxImageShape(_0x5d2ax5,_0x5d2ax4[_0xe4bc[390]]);_0x5d2ax2[_0xe4bc[2207]][_0xe4bc[1674]]= !1;_0x5d2ax2[_0xe4bc[2207]][_0xe4bc[507]]=_0x5d2ax3[_0xe4bc[507]];this[_0xe4bc[2208]](_0x5d2ax2,_0x5d2ax2[_0xe4bc[2207]],!0,function(_0x5d2ax4){if(_0x5d2ax3[_0xe4bc[994]]()){var _0x5d2ax5=!_0x5d2ax3[_0xe4bc[1742]](_0x5d2ax2[_0xe4bc[246]]);_0x5d2ax3[_0xe4bc[847]](_0x5d2ax5,!1,[_0x5d2ax2[_0xe4bc[246]]]);mxEvent[_0xe4bc[722]](_0x5d2ax4)}})}}else {null!=_0x5d2ax2[_0xe4bc[2207]]&&(_0x5d2ax2[_0xe4bc[2207]][_0xe4bc[515]](),_0x5d2ax2[_0xe4bc[2207]]=null)}};mxCellRenderer[_0xe4bc[202]][_0xe4bc[2208]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){var _0x5d2ax9=_0x5d2ax2[_0xe4bc[441]][_0xe4bc[1179]];_0x5d2ax9[_0xe4bc[2186]](_0x5d2ax2[_0xe4bc[246]])&&mxClient[_0xe4bc[2199]]&&_0x5d2ax9[_0xe4bc[507]]==mxConstants[_0xe4bc[508]]?(_0x5d2ax3[_0xe4bc[507]]=mxConstants[_0xe4bc[2209]],_0x5d2ax3[_0xe4bc[176]](_0x5d2ax9[_0xe4bc[526]]),_0x5d2ax3[_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[931]]=1):_0x5d2ax3[_0xe4bc[176]](_0x5d2ax2[_0xe4bc[441]][_0xe4bc[1524]]());_0x5d2ax3=_0x5d2ax3[_0xe4bc[2210]]||_0x5d2ax3[_0xe4bc[252]];_0x5d2ax5&&(_0x5d2ax9[_0xe4bc[994]]()&&(_0x5d2ax3[_0xe4bc[124]][_0xe4bc[270]]=_0xe4bc[356]),mxEvent[_0xe4bc[169]](_0x5d2ax3,_0xe4bc[173],_0x5d2ax5));_0x5d2ax4&&mxEvent[_0xe4bc[759]](_0x5d2ax3,function(_0x5d2ax3){_0x5d2ax9[_0xe4bc[758]](mxEvent.MOUSE_DOWN, new mxMouseEvent(_0x5d2ax3,_0x5d2ax2));mxEvent[_0xe4bc[722]](_0x5d2ax3)},function(_0x5d2ax3){_0x5d2ax9[_0xe4bc[758]](mxEvent.MOUSE_MOVE, new mxMouseEvent(_0x5d2ax3,_0x5d2ax2))});return _0x5d2ax3};mxCellRenderer[_0xe4bc[202]][_0xe4bc[2211]]=function(_0x5d2ax2,_0x5d2ax3){return !0};mxCellRenderer[_0xe4bc[202]][_0xe4bc[2197]]=function(_0x5d2ax2,_0x5d2ax3){return !0};mxCellRenderer[_0xe4bc[202]][_0xe4bc[2163]]=function(_0x5d2ax2){var _0x5d2ax3=_0x5d2ax2[_0xe4bc[441]][_0xe4bc[1179]],_0x5d2ax4=function(_0x5d2ax4){var _0x5d2ax5=_0x5d2ax2;if(_0x5d2ax3[_0xe4bc[507]]!=mxConstants[_0xe4bc[508]]&&_0xe4bc[2198]==mxEvent[_0xe4bc[728]](_0x5d2ax4)[_0xe4bc[301]]||mxClient[_0xe4bc[754]]){_0x5d2ax5=mxEvent[_0xe4bc[731]](_0x5d2ax4),_0x5d2ax4=mxEvent[_0xe4bc[733]](_0x5d2ax4),_0x5d2ax4=mxUtils[_0xe4bc[2196]](_0x5d2ax3[_0xe4bc[526]],_0x5d2ax5,_0x5d2ax4),_0x5d2ax5=_0x5d2ax3[_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax3[_0xe4bc[999]](_0x5d2ax4[_0xe4bc[235]],_0x5d2ax4[_0xe4bc[236]]))};return _0x5d2ax5},_0x5d2ax5=!1;mxEvent[_0xe4bc[169]](_0x5d2ax2[_0xe4bc[253]][_0xe4bc[252]],_0xe4bc[2212],mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){_0x5d2ax3[_0xe4bc[2213]]=0;_0x5d2ax5= !0;mxEvent[_0xe4bc[722]](_0x5d2ax2)}));mxEvent[_0xe4bc[759]](_0x5d2ax2[_0xe4bc[253]][_0xe4bc[252]],mxUtils[_0xe4bc[885]](this,function(_0x5d2ax4){this[_0xe4bc[2211]](_0x5d2ax2,_0x5d2ax4)&&!_0x5d2ax5?_0x5d2ax3[_0xe4bc[758]](mxEvent.MOUSE_DOWN, new mxMouseEvent(_0x5d2ax4,null!=_0x5d2ax2[_0xe4bc[253]]&&mxEvent[_0xe4bc[728]](_0x5d2ax4)==_0x5d2ax2[_0xe4bc[253]][_0xe4bc[905]]?null:_0x5d2ax2)):_0x5d2ax5&&mxEvent[_0xe4bc[722]](_0x5d2ax4)}),mxUtils[_0xe4bc[885]](this,function(_0x5d2ax9){this[_0xe4bc[2211]](_0x5d2ax2,_0x5d2ax9)&&!_0x5d2ax5?_0x5d2ax3[_0xe4bc[758]](mxEvent.MOUSE_MOVE, new mxMouseEvent(_0x5d2ax9,null!=_0x5d2ax2[_0xe4bc[253]]&&mxEvent[_0xe4bc[728]](_0x5d2ax9)==_0x5d2ax2[_0xe4bc[253]][_0xe4bc[905]]?null:_0x5d2ax4(_0x5d2ax9))):_0x5d2ax5&&mxEvent[_0xe4bc[722]](_0x5d2ax9)}),mxUtils[_0xe4bc[885]](this,function(_0x5d2ax9){this[_0xe4bc[2211]](_0x5d2ax2,_0x5d2ax9)&&!_0x5d2ax5?_0x5d2ax3[_0xe4bc[758]](mxEvent.MOUSE_UP, new mxMouseEvent(_0x5d2ax9,null!=_0x5d2ax2[_0xe4bc[253]]&&mxEvent[_0xe4bc[728]](_0x5d2ax9)==_0x5d2ax2[_0xe4bc[253]][_0xe4bc[905]]?null:_0x5d2ax4(_0x5d2ax9))):_0x5d2ax5&&mxEvent[_0xe4bc[722]](_0x5d2ax9)}));var _0x5d2ax9=mxClient[_0xe4bc[754]]?_0xe4bc[2214]:_0xe4bc[760];mxEvent[_0xe4bc[169]](_0x5d2ax2[_0xe4bc[253]][_0xe4bc[252]],_0x5d2ax9,mxUtils[_0xe4bc[885]](this,function(_0x5d2ax4){_0x5d2ax5= !1;_0xe4bc[2214]==_0x5d2ax9?(_0x5d2ax3[_0xe4bc[2213]]=0,_0x5d2ax3[_0xe4bc[2215]]&&(_0x5d2ax3[_0xe4bc[2216]](_0x5d2ax2,_0x5d2ax4),mxEvent[_0xe4bc[722]](_0x5d2ax4))):this[_0xe4bc[2211]](_0x5d2ax2,_0x5d2ax4)&&(_0x5d2ax3[_0xe4bc[761]](_0x5d2ax4,null!=_0x5d2ax2[_0xe4bc[253]]&&mxEvent[_0xe4bc[728]](_0x5d2ax4)==_0x5d2ax2[_0xe4bc[253]][_0xe4bc[905]]?null:_0x5d2ax2[_0xe4bc[246]]),mxEvent[_0xe4bc[722]](_0x5d2ax4))}))};mxCellRenderer[_0xe4bc[202]][_0xe4bc[2217]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=this[_0xe4bc[2182]](_0x5d2ax2);if(null==_0x5d2ax2[_0xe4bc[963]]&&null!=_0x5d2ax4&&(mxUtils[_0xe4bc[1331]](_0x5d2ax4)||0<_0x5d2ax4[_0xe4bc[67]])){this[_0xe4bc[2184]](_0x5d2ax2,_0x5d2ax4)}else {if(null!=_0x5d2ax2[_0xe4bc[963]]&&(null==_0x5d2ax4||0==_0x5d2ax4[_0xe4bc[67]])){_0x5d2ax2[_0xe4bc[963]][_0xe4bc[515]](),_0x5d2ax2[_0xe4bc[963]]=null}};if(null!=_0x5d2ax2[_0xe4bc[963]]){var _0x5d2ax5=_0x5d2ax2[_0xe4bc[441]][_0xe4bc[1179]],_0x5d2ax9=_0x5d2ax5[_0xe4bc[2131]](_0x5d2ax2[_0xe4bc[246]]),_0x5d2ax5=_0x5d2ax5[_0xe4bc[2130]](_0x5d2ax2[_0xe4bc[246]]),_0x5d2axa=this[_0xe4bc[2218]](_0x5d2ax2);if(_0x5d2ax3||_0x5d2ax2[_0xe4bc[963]][_0xe4bc[131]]!=_0x5d2ax4||_0x5d2ax2[_0xe4bc[963]][_0xe4bc[2131]]!=_0x5d2ax9||_0x5d2ax2[_0xe4bc[963]][_0xe4bc[2219]]!=_0x5d2ax5||_0x5d2ax2[_0xe4bc[963]][_0xe4bc[255]]!=_0x5d2ax2[_0xe4bc[441]][_0xe4bc[255]]||!_0x5d2ax2[_0xe4bc[963]][_0xe4bc[1562]][_0xe4bc[237]](_0x5d2axa)){_0x5d2ax2[_0xe4bc[963]][_0xe4bc[131]]=_0x5d2ax4,_0x5d2ax2[_0xe4bc[963]][_0xe4bc[1562]]=_0x5d2axa,_0x5d2ax2[_0xe4bc[963]][_0xe4bc[255]]=this[_0xe4bc[2220]](_0x5d2ax2),_0x5d2ax2[_0xe4bc[963]][_0xe4bc[2131]]=_0x5d2ax9,_0x5d2ax2[_0xe4bc[963]][_0xe4bc[2219]]=_0x5d2ax5,_0x5d2ax2[_0xe4bc[963]][_0xe4bc[258]]()}}};mxCellRenderer[_0xe4bc[202]][_0xe4bc[2220]]=function(_0x5d2ax2){return _0x5d2ax2[_0xe4bc[441]][_0xe4bc[255]]};mxCellRenderer[_0xe4bc[202]][_0xe4bc[2218]]=function(_0x5d2ax2){var _0x5d2ax3=_0x5d2ax2[_0xe4bc[441]][_0xe4bc[1179]],_0x5d2ax4=_0x5d2ax2[_0xe4bc[441]][_0xe4bc[255]],_0x5d2ax5=_0x5d2ax3[_0xe4bc[502]]()[_0xe4bc[250]](_0x5d2ax2[_0xe4bc[246]]),_0x5d2ax9= new mxRectangle(_0x5d2ax2[_0xe4bc[2079]][_0xe4bc[235]],_0x5d2ax2[_0xe4bc[2079]][_0xe4bc[236]]);_0x5d2ax2[_0xe4bc[963]][_0xe4bc[1672]]();_0x5d2ax5?(_0x5d2ax5=_0x5d2ax2[_0xe4bc[963]][_0xe4bc[1673]](),_0x5d2ax9[_0xe4bc[235]]+=_0x5d2ax5[_0xe4bc[235]]*_0x5d2ax4,_0x5d2ax9[_0xe4bc[236]]+=_0x5d2ax5[_0xe4bc[236]]*_0x5d2ax4,_0x5d2ax3=_0x5d2ax3[_0xe4bc[1198]](_0x5d2ax2[_0xe4bc[246]]),null!=_0x5d2ax3&&(_0x5d2ax9[_0xe4bc[117]]=Math[_0xe4bc[160]](0,_0x5d2ax2[_0xe4bc[963]][_0xe4bc[1655]][_0xe4bc[235]]*_0x5d2ax3[_0xe4bc[117]]*_0x5d2ax4-_0x5d2ax2[_0xe4bc[963]][_0xe4bc[659]]*_0x5d2ax4-_0x5d2ax2[_0xe4bc[963]][_0xe4bc[661]]*_0x5d2ax4),_0x5d2ax9[_0xe4bc[119]]=Math[_0xe4bc[160]](0,_0x5d2ax2[_0xe4bc[963]][_0xe4bc[1655]][_0xe4bc[236]]*_0x5d2ax3[_0xe4bc[119]]*_0x5d2ax4-_0x5d2ax2[_0xe4bc[963]][_0xe4bc[658]]*_0x5d2ax4-_0x5d2ax2[_0xe4bc[963]][_0xe4bc[660]]*_0x5d2ax4))):(_0x5d2ax2[_0xe4bc[963]][_0xe4bc[1590]]()&&(_0x5d2ax5=_0x5d2ax9[_0xe4bc[235]],_0x5d2ax9[_0xe4bc[235]]=_0x5d2ax9[_0xe4bc[236]],_0x5d2ax9[_0xe4bc[236]]=_0x5d2ax5),_0x5d2ax9[_0xe4bc[235]]+=_0x5d2ax2[_0xe4bc[235]],_0x5d2ax9[_0xe4bc[236]]+=_0x5d2ax2[_0xe4bc[236]],_0x5d2ax9[_0xe4bc[117]]=Math[_0xe4bc[160]](1,_0x5d2ax2[_0xe4bc[117]]),_0x5d2ax9[_0xe4bc[119]]=Math[_0xe4bc[160]](1,_0x5d2ax2[_0xe4bc[119]]),_0x5d2ax3[_0xe4bc[1730]](_0x5d2ax2[_0xe4bc[246]])&&(_0x5d2ax3=_0x5d2ax3[_0xe4bc[1731]](_0x5d2ax2[_0xe4bc[246]]),0<_0x5d2ax3[_0xe4bc[117]]?(_0x5d2ax5=Math[_0xe4bc[243]](_0x5d2ax9[_0xe4bc[117]],_0x5d2ax3[_0xe4bc[117]]*_0x5d2ax4),_0x5d2ax2[_0xe4bc[253]][_0xe4bc[623]]&&(_0x5d2ax9[_0xe4bc[235]]+=_0x5d2ax9[_0xe4bc[117]]-_0x5d2ax5),_0x5d2ax9[_0xe4bc[117]]=_0x5d2ax5):0<_0x5d2ax3[_0xe4bc[119]]&&(_0x5d2ax5=Math[_0xe4bc[243]](_0x5d2ax9[_0xe4bc[119]],_0x5d2ax3[_0xe4bc[119]]*_0x5d2ax4),_0x5d2ax2[_0xe4bc[253]][_0xe4bc[624]]&&(_0x5d2ax9[_0xe4bc[236]]+=_0x5d2ax9[_0xe4bc[119]]-_0x5d2ax5),_0x5d2ax9[_0xe4bc[119]]=_0x5d2ax5)),this[_0xe4bc[2221]](_0x5d2ax2,_0x5d2ax9));return _0x5d2ax9};mxCellRenderer[_0xe4bc[202]][_0xe4bc[2221]]=function(_0x5d2ax2,_0x5d2ax3){if(_0x5d2ax2[_0xe4bc[963]][_0xe4bc[1590]]()){var _0x5d2ax4=(_0x5d2ax2[_0xe4bc[117]]-_0x5d2ax2[_0xe4bc[119]])/2;_0x5d2ax3[_0xe4bc[235]]+=_0x5d2ax4;_0x5d2ax3[_0xe4bc[236]]-=_0x5d2ax4;_0x5d2ax4=_0x5d2ax3[_0xe4bc[117]];_0x5d2ax3[_0xe4bc[117]]=_0x5d2ax3[_0xe4bc[119]];_0x5d2ax3[_0xe4bc[119]]=_0x5d2ax4};_0x5d2ax3[_0xe4bc[235]]-=_0x5d2ax2[_0xe4bc[963]][_0xe4bc[1655]][_0xe4bc[235]]*_0x5d2ax3[_0xe4bc[117]];_0x5d2ax3[_0xe4bc[236]]-=_0x5d2ax2[_0xe4bc[963]][_0xe4bc[1655]][_0xe4bc[236]]*_0x5d2ax3[_0xe4bc[119]];if(_0xe4bc[1334]!=_0x5d2ax2[_0xe4bc[124]][mxConstants[_0xe4bc[2193]]]){var _0x5d2ax4=_0x5d2ax2[_0xe4bc[441]][_0xe4bc[255]],_0x5d2ax5=_0x5d2ax2[_0xe4bc[963]][_0xe4bc[1673]]();_0x5d2ax3[_0xe4bc[235]]+=_0x5d2ax5[_0xe4bc[235]]*_0x5d2ax4;_0x5d2ax3[_0xe4bc[236]]+=_0x5d2ax5[_0xe4bc[236]]*_0x5d2ax4;_0x5d2ax3[_0xe4bc[117]]=Math[_0xe4bc[160]](0,_0x5d2ax3[_0xe4bc[117]]-_0x5d2ax2[_0xe4bc[963]][_0xe4bc[659]]*_0x5d2ax4-_0x5d2ax2[_0xe4bc[963]][_0xe4bc[661]]*_0x5d2ax4);_0x5d2ax3[_0xe4bc[119]]=Math[_0xe4bc[160]](0,_0x5d2ax3[_0xe4bc[119]]-_0x5d2ax2[_0xe4bc[963]][_0xe4bc[658]]*_0x5d2ax4-_0x5d2ax2[_0xe4bc[963]][_0xe4bc[660]]*_0x5d2ax4)};var _0x5d2ax9=_0x5d2ax2[_0xe4bc[963]][_0xe4bc[1615]]();if(0!=_0x5d2ax9&&(null!=_0x5d2ax2&&_0x5d2ax2[_0xe4bc[441]][_0xe4bc[1179]][_0xe4bc[251]][_0xe4bc[1193]](_0x5d2ax2[_0xe4bc[246]]))&&(_0x5d2ax4=_0x5d2ax2[_0xe4bc[241]](),_0x5d2ax5=_0x5d2ax2[_0xe4bc[242]](),_0x5d2ax3[_0xe4bc[235]]!=_0x5d2ax4||_0x5d2ax3[_0xe4bc[236]]!=_0x5d2ax5)){_0x5d2ax9*=Math[_0xe4bc[424]]/180,pt=mxUtils[_0xe4bc[432]]( new mxPoint(_0x5d2ax3[_0xe4bc[235]],_0x5d2ax3[_0xe4bc[236]]),Math[_0xe4bc[426]](_0x5d2ax9),Math[_0xe4bc[427]](_0x5d2ax9), new mxPoint(_0x5d2ax4,_0x5d2ax5)),_0x5d2ax3[_0xe4bc[235]]=pt[_0xe4bc[235]],_0x5d2ax3[_0xe4bc[236]]=pt[_0xe4bc[236]]}};mxCellRenderer[_0xe4bc[202]][_0xe4bc[2222]]=function(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[2162]](_0x5d2ax2);if(null!=_0x5d2ax2[_0xe4bc[1211]]){var _0x5d2ax4=mxUtils[_0xe4bc[1454]](mxUtils[_0xe4bc[433]](_0x5d2ax2[_0xe4bc[124]],mxConstants.STYLE_ROTATION,0),90),_0x5d2ax5=mxUtils[_0xe4bc[431]](_0x5d2ax4),_0x5d2ax9=Math[_0xe4bc[426]](_0x5d2ax5),_0x5d2axa=Math[_0xe4bc[427]](_0x5d2ax5);_0x5d2ax2[_0xe4bc[1211]][_0xe4bc[209]](function(_0x5d2ax5,_0x5d2ax13){var _0x5d2ax14=_0x5d2ax13[_0xe4bc[2201]][_0xe4bc[1799]](_0x5d2ax2);if(!_0x5d2ax2[_0xe4bc[441]][_0xe4bc[1179]][_0xe4bc[502]]()[_0xe4bc[250]](_0x5d2ax2[_0xe4bc[246]])&&null!=_0x5d2ax2[_0xe4bc[253]]&&0!=_0x5d2ax4){var _0x5d2ax15=_0x5d2ax14[_0xe4bc[241]](),_0x5d2ax16=_0x5d2ax14[_0xe4bc[242]](),_0x5d2ax16=mxUtils[_0xe4bc[432]]( new mxPoint(_0x5d2ax15,_0x5d2ax16),_0x5d2ax9,_0x5d2axa, new mxPoint(_0x5d2ax2[_0xe4bc[241]](),_0x5d2ax2[_0xe4bc[242]]())),_0x5d2ax15=_0x5d2ax16[_0xe4bc[235]],_0x5d2ax16=_0x5d2ax16[_0xe4bc[236]];_0x5d2ax14[_0xe4bc[235]]=Math[_0xe4bc[488]](_0x5d2ax15-_0x5d2ax14[_0xe4bc[117]]/2);_0x5d2ax14[_0xe4bc[236]]=Math[_0xe4bc[488]](_0x5d2ax16-_0x5d2ax14[_0xe4bc[119]]/2)};if(_0x5d2ax3||null==_0x5d2ax13[_0xe4bc[1562]]||_0x5d2ax13[_0xe4bc[255]]!=_0x5d2ax2[_0xe4bc[441]][_0xe4bc[255]]||!_0x5d2ax13[_0xe4bc[1562]][_0xe4bc[237]](_0x5d2ax14)){_0x5d2ax13[_0xe4bc[1562]]=_0x5d2ax14,_0x5d2ax13[_0xe4bc[255]]=_0x5d2ax2[_0xe4bc[441]][_0xe4bc[255]],_0x5d2ax13[_0xe4bc[258]]()}})}};mxCellRenderer[_0xe4bc[202]][_0xe4bc[2223]]=function(_0x5d2ax2,_0x5d2ax3){if(null!=_0x5d2ax2[_0xe4bc[2207]]){var _0x5d2ax4=this[_0xe4bc[2224]](_0x5d2ax2),_0x5d2ax5=this[_0xe4bc[2152]]?mxUtils[_0xe4bc[433]](_0x5d2ax2[_0xe4bc[124]],mxConstants.STYLE_ROTATION,0):_0x5d2ax2[_0xe4bc[253]][_0xe4bc[1615]](),_0x5d2ax9=_0x5d2ax2[_0xe4bc[441]][_0xe4bc[255]];if(_0x5d2ax3||_0x5d2ax2[_0xe4bc[2207]][_0xe4bc[255]]!=_0x5d2ax9||!_0x5d2ax2[_0xe4bc[2207]][_0xe4bc[1562]][_0xe4bc[237]](_0x5d2ax4)||_0x5d2ax2[_0xe4bc[2207]][_0xe4bc[603]]!=_0x5d2ax5){_0x5d2ax2[_0xe4bc[2207]][_0xe4bc[603]]=_0x5d2ax5,_0x5d2ax2[_0xe4bc[2207]][_0xe4bc[1562]]=_0x5d2ax4,_0x5d2ax2[_0xe4bc[2207]][_0xe4bc[255]]=_0x5d2ax9,_0x5d2ax2[_0xe4bc[2207]][_0xe4bc[258]]()}}};mxCellRenderer[_0xe4bc[202]][_0xe4bc[2224]]=function(_0x5d2ax2){if(null!=_0x5d2ax2[_0xe4bc[2207]]){var _0x5d2ax3=_0x5d2ax2[_0xe4bc[2207]][_0xe4bc[255]],_0x5d2ax4=_0x5d2ax2[_0xe4bc[2207]][_0xe4bc[1562]][_0xe4bc[117]]/_0x5d2ax3,_0x5d2ax3=_0x5d2ax2[_0xe4bc[2207]][_0xe4bc[1562]][_0xe4bc[119]]/_0x5d2ax3,_0x5d2ax5=_0x5d2ax2[_0xe4bc[441]][_0xe4bc[255]],_0x5d2ax9=_0x5d2ax2[_0xe4bc[241]](),_0x5d2axa=_0x5d2ax2[_0xe4bc[242]]();if(!_0x5d2ax2[_0xe4bc[441]][_0xe4bc[1179]][_0xe4bc[502]]()[_0xe4bc[250]](_0x5d2ax2[_0xe4bc[246]])&&(_0x5d2ax9=_0x5d2ax2[_0xe4bc[235]]+_0x5d2ax4*_0x5d2ax5,_0x5d2axa=_0x5d2ax2[_0xe4bc[236]]+_0x5d2ax3*_0x5d2ax5,null!=_0x5d2ax2[_0xe4bc[253]])){var _0x5d2ax12=_0x5d2ax2[_0xe4bc[253]][_0xe4bc[1598]]();if(this[_0xe4bc[2152]]){_0x5d2ax12=mxUtils[_0xe4bc[433]](_0x5d2ax2[_0xe4bc[124]],mxConstants.STYLE_ROTATION,0)}else {if(_0x5d2ax2[_0xe4bc[253]][_0xe4bc[1590]]()){var _0x5d2ax13=(_0x5d2ax2[_0xe4bc[117]]-_0x5d2ax2[_0xe4bc[119]])/2,_0x5d2ax9=_0x5d2ax9+_0x5d2ax13,_0x5d2axa=_0x5d2axa-_0x5d2ax13}};0!=_0x5d2ax12&&(_0x5d2ax13=mxUtils[_0xe4bc[431]](_0x5d2ax12),_0x5d2ax12=Math[_0xe4bc[426]](_0x5d2ax13),_0x5d2ax13=Math[_0xe4bc[427]](_0x5d2ax13),_0x5d2axa=mxUtils[_0xe4bc[432]]( new mxPoint(_0x5d2ax9,_0x5d2axa),_0x5d2ax12,_0x5d2ax13, new mxPoint(_0x5d2ax2[_0xe4bc[241]](),_0x5d2ax2[_0xe4bc[242]]())),_0x5d2ax9=_0x5d2axa[_0xe4bc[235]],_0x5d2axa=_0x5d2axa[_0xe4bc[236]])};return _0x5d2ax2[_0xe4bc[441]][_0xe4bc[1179]][_0xe4bc[502]]()[_0xe4bc[250]](_0x5d2ax2[_0xe4bc[246]]), new mxRectangle(Math[_0xe4bc[488]](_0x5d2ax9-_0x5d2ax4/2*_0x5d2ax5),Math[_0xe4bc[488]](_0x5d2axa-_0x5d2ax3/2*_0x5d2ax5),Math[_0xe4bc[488]](_0x5d2ax4*_0x5d2ax5),Math[_0xe4bc[488]](_0x5d2ax3*_0x5d2ax5))};return null};mxCellRenderer[_0xe4bc[202]][_0xe4bc[258]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){if(null!=_0x5d2ax2[_0xe4bc[253]]){var _0x5d2ax5=!1;_0x5d2ax2[_0xe4bc[441]][_0xe4bc[1179]][_0xe4bc[502]]()[_0xe4bc[250]](_0x5d2ax2[_0xe4bc[246]]);reconfigure=null!=_0x5d2ax3?_0x5d2ax3:!1;this[_0xe4bc[2204]](_0x5d2ax2);if(_0x5d2ax2[_0xe4bc[2082]]||_0x5d2ax2[_0xe4bc[2081]]){_0x5d2ax2[_0xe4bc[441]][_0xe4bc[1179]][_0xe4bc[2158]]?this[_0xe4bc[2166]](_0x5d2ax2):this[_0xe4bc[2167]](_0x5d2ax2)};if(_0x5d2ax2[_0xe4bc[2082]]||!mxUtils[_0xe4bc[2225]](_0x5d2ax2[_0xe4bc[253]][_0xe4bc[124]],_0x5d2ax2[_0xe4bc[124]])){this[_0xe4bc[2170]](_0x5d2ax2),_0x5d2ax3= !0};delete _0x5d2ax2[_0xe4bc[2081]];delete _0x5d2ax2[_0xe4bc[2082]];if(_0x5d2ax3||null==_0x5d2ax2[_0xe4bc[253]][_0xe4bc[1562]]||_0x5d2ax2[_0xe4bc[253]][_0xe4bc[255]]!=_0x5d2ax2[_0xe4bc[441]][_0xe4bc[255]]||!_0x5d2ax2[_0xe4bc[253]][_0xe4bc[1562]][_0xe4bc[237]](_0x5d2ax2)||!mxUtils[_0xe4bc[2226]](_0x5d2ax2[_0xe4bc[253]][_0xe4bc[1525]],_0x5d2ax2[_0xe4bc[439]])){_0x5d2ax5= !0,_0x5d2ax2[_0xe4bc[253]][_0xe4bc[1525]]=null!=_0x5d2ax2[_0xe4bc[439]]?_0x5d2ax2[_0xe4bc[439]][_0xe4bc[1853]]():null,_0x5d2ax2[_0xe4bc[253]][_0xe4bc[1562]]= new mxRectangle(_0x5d2ax2[_0xe4bc[235]],_0x5d2ax2[_0xe4bc[236]],_0x5d2ax2[_0xe4bc[117]],_0x5d2ax2[_0xe4bc[119]]),_0x5d2ax2[_0xe4bc[253]][_0xe4bc[255]]=_0x5d2ax2[_0xe4bc[441]][_0xe4bc[255]],null==_0x5d2ax4||_0x5d2ax4?_0x5d2ax2[_0xe4bc[253]][_0xe4bc[258]]():_0x5d2ax2[_0xe4bc[253]][_0xe4bc[1577]]()};if(null==_0x5d2ax4||_0x5d2ax4){this[_0xe4bc[2217]](_0x5d2ax2,_0x5d2ax5),this[_0xe4bc[2222]](_0x5d2ax2,_0x5d2ax5),this[_0xe4bc[2223]](_0x5d2ax2,_0x5d2ax5)}}};mxCellRenderer[_0xe4bc[202]][_0xe4bc[515]]=function(_0x5d2ax2){null!=_0x5d2ax2[_0xe4bc[253]]&&(null!=_0x5d2ax2[_0xe4bc[963]]&&(_0x5d2ax2[_0xe4bc[963]][_0xe4bc[515]](),_0x5d2ax2[_0xe4bc[963]]=null),null!=_0x5d2ax2[_0xe4bc[1211]]&&(_0x5d2ax2[_0xe4bc[1211]][_0xe4bc[209]](function(_0x5d2ax2,_0x5d2ax4){_0x5d2ax4[_0xe4bc[515]]()}),_0x5d2ax2[_0xe4bc[1211]]=null),null!=_0x5d2ax2[_0xe4bc[2207]]&&(_0x5d2ax2[_0xe4bc[2207]][_0xe4bc[515]](),_0x5d2ax2[_0xe4bc[2207]]=null),_0x5d2ax2[_0xe4bc[253]][_0xe4bc[515]](),_0x5d2ax2[_0xe4bc[253]]=null)};var mxEdgeStyle={EntityRelation:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){var _0x5d2axa=_0x5d2ax2[_0xe4bc[441]],_0x5d2ax12=_0x5d2axa[_0xe4bc[1179]];_0x5d2ax5=mxUtils[_0xe4bc[433]](_0x5d2ax2[_0xe4bc[124]],mxConstants.STYLE_SEGMENT,mxConstants.ENTITY_SEGMENT)*_0x5d2axa[_0xe4bc[255]];var _0x5d2ax13=_0x5d2ax2[_0xe4bc[439]],_0x5d2ax14=_0x5d2ax13[0],_0x5d2ax15=_0x5d2ax13[_0x5d2ax13[_0xe4bc[67]]-1],_0x5d2ax13=!1;if(null!=_0x5d2ax14){_0x5d2ax3= new mxCellState,_0x5d2ax3[_0xe4bc[235]]=_0x5d2ax14[_0xe4bc[235]],_0x5d2ax3[_0xe4bc[236]]=_0x5d2ax14[_0xe4bc[236]]}else {if(null!=_0x5d2ax3){var _0x5d2ax16=mxUtils[_0xe4bc[2227]](_0x5d2ax3,_0x5d2ax2,!0,mxConstants.DIRECTION_MASK_NONE);_0x5d2ax16!=mxConstants[_0xe4bc[434]]?_0x5d2ax13=_0x5d2ax16==mxConstants[_0xe4bc[436]]:(_0x5d2ax14=_0x5d2ax12[_0xe4bc[1198]](_0x5d2ax3[_0xe4bc[246]]),_0x5d2ax14[_0xe4bc[1500]]?_0x5d2ax13=0.5>=_0x5d2ax14[_0xe4bc[235]]:null!=_0x5d2ax4&&(_0x5d2ax13=_0x5d2ax4[_0xe4bc[235]]+_0x5d2ax4[_0xe4bc[117]]<_0x5d2ax3[_0xe4bc[235]]))}else {return}};_0x5d2ax14= !0;null!=_0x5d2ax15?(_0x5d2ax4= new mxCellState,_0x5d2ax4[_0xe4bc[235]]=_0x5d2ax15[_0xe4bc[235]],_0x5d2ax4[_0xe4bc[236]]=_0x5d2ax15[_0xe4bc[236]]):null!=_0x5d2ax4&&(_0x5d2ax16=mxUtils[_0xe4bc[2227]](_0x5d2ax4,_0x5d2ax2,!1,mxConstants.DIRECTION_MASK_NONE),_0x5d2ax16!=mxConstants[_0xe4bc[434]]?_0x5d2ax14=_0x5d2ax16==mxConstants[_0xe4bc[436]]:(_0x5d2ax2=_0x5d2ax12[_0xe4bc[1198]](_0x5d2ax4[_0xe4bc[246]]),_0x5d2ax2[_0xe4bc[1500]]?_0x5d2ax14=0.5>=_0x5d2ax2[_0xe4bc[235]]:null!=_0x5d2ax3&&(_0x5d2ax14=_0x5d2ax3[_0xe4bc[235]]+_0x5d2ax3[_0xe4bc[117]]<_0x5d2ax4[_0xe4bc[235]])));null!=_0x5d2ax3&&null!=_0x5d2ax4&&(_0x5d2ax2=_0x5d2ax13?_0x5d2ax3[_0xe4bc[235]]:_0x5d2ax3[_0xe4bc[235]]+_0x5d2ax3[_0xe4bc[117]],_0x5d2ax3=_0x5d2axa[_0xe4bc[2228]](_0x5d2ax3),_0x5d2ax12=_0x5d2ax14?_0x5d2ax4[_0xe4bc[235]]:_0x5d2ax4[_0xe4bc[235]]+_0x5d2ax4[_0xe4bc[117]],_0x5d2ax4=_0x5d2axa[_0xe4bc[2228]](_0x5d2ax4),_0x5d2axa= new mxPoint(_0x5d2ax2+(_0x5d2ax13?-_0x5d2ax5:_0x5d2ax5),_0x5d2ax3),_0x5d2ax15= new mxPoint(_0x5d2ax12+(_0x5d2ax14?-_0x5d2ax5:_0x5d2ax5),_0x5d2ax4),_0x5d2ax13==_0x5d2ax14?(_0x5d2ax5=_0x5d2ax13?Math[_0xe4bc[243]](_0x5d2ax2,_0x5d2ax12)-_0x5d2ax5:Math[_0xe4bc[160]](_0x5d2ax2,_0x5d2ax12)+_0x5d2ax5,_0x5d2ax9[_0xe4bc[207]]( new mxPoint(_0x5d2ax5,_0x5d2ax3)),_0x5d2ax9[_0xe4bc[207]]( new mxPoint(_0x5d2ax5,_0x5d2ax4))):(_0x5d2axa[_0xe4bc[235]]<_0x5d2ax15[_0xe4bc[235]]==_0x5d2ax13?(_0x5d2ax5=_0x5d2ax3+(_0x5d2ax4-_0x5d2ax3)/2,_0x5d2ax9[_0xe4bc[207]](_0x5d2axa),_0x5d2ax9[_0xe4bc[207]]( new mxPoint(_0x5d2axa[_0xe4bc[235]],_0x5d2ax5)),_0x5d2ax9[_0xe4bc[207]]( new mxPoint(_0x5d2ax15[_0xe4bc[235]],_0x5d2ax5))):_0x5d2ax9[_0xe4bc[207]](_0x5d2axa),_0x5d2ax9[_0xe4bc[207]](_0x5d2ax15)))},Loop:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){if(null!=_0x5d2ax3){_0x5d2ax4=_0x5d2ax2[_0xe4bc[441]];var _0x5d2axa=_0x5d2ax4[_0xe4bc[1179]];_0x5d2ax5=null!=_0x5d2ax5&&0<_0x5d2ax5[_0xe4bc[67]]?_0x5d2ax5[0]:null;null!=_0x5d2ax5&&(_0x5d2ax5=_0x5d2ax4[_0xe4bc[2229]](_0x5d2ax2,_0x5d2ax5),mxUtils[_0xe4bc[442]](_0x5d2ax3,_0x5d2ax5[_0xe4bc[235]],_0x5d2ax5[_0xe4bc[236]])&&(_0x5d2ax5=null));var _0x5d2ax12=0,_0x5d2ax13=0,_0x5d2ax14=0,_0x5d2ax15=0,_0x5d2axa=mxUtils[_0xe4bc[433]](_0x5d2ax2[_0xe4bc[124]],mxConstants.STYLE_SEGMENT,_0x5d2axa[_0xe4bc[1020]])*_0x5d2ax4[_0xe4bc[255]];_0x5d2ax2=mxUtils[_0xe4bc[433]](_0x5d2ax2[_0xe4bc[124]],mxConstants.STYLE_DIRECTION,mxConstants.DIRECTION_WEST);_0x5d2ax2==mxConstants[_0xe4bc[1358]]||_0x5d2ax2==mxConstants[_0xe4bc[1354]]?(_0x5d2ax12=_0x5d2ax4[_0xe4bc[2230]](_0x5d2ax3),_0x5d2ax13=_0x5d2axa):(_0x5d2ax14=_0x5d2ax4[_0xe4bc[2228]](_0x5d2ax3),_0x5d2ax15=_0x5d2axa);null==_0x5d2ax5||_0x5d2ax5[_0xe4bc[235]]<_0x5d2ax3[_0xe4bc[235]]||_0x5d2ax5[_0xe4bc[235]]>_0x5d2ax3[_0xe4bc[235]]+_0x5d2ax3[_0xe4bc[117]]?null!=_0x5d2ax5?(_0x5d2ax12=_0x5d2ax5[_0xe4bc[235]],_0x5d2ax15=Math[_0xe4bc[160]](Math[_0xe4bc[425]](_0x5d2ax14-_0x5d2ax5[_0xe4bc[236]]),_0x5d2ax15)):_0x5d2ax2==mxConstants[_0xe4bc[1358]]?_0x5d2ax14=_0x5d2ax3[_0xe4bc[236]]-2*_0x5d2ax13:_0x5d2ax2==mxConstants[_0xe4bc[1354]]?_0x5d2ax14=_0x5d2ax3[_0xe4bc[236]]+_0x5d2ax3[_0xe4bc[119]]+2*_0x5d2ax13:_0x5d2ax12=_0x5d2ax2==mxConstants[_0xe4bc[1356]]?_0x5d2ax3[_0xe4bc[235]]-2*_0x5d2ax15:_0x5d2ax3[_0xe4bc[235]]+_0x5d2ax3[_0xe4bc[117]]+2*_0x5d2ax15:null!=_0x5d2ax5&&(_0x5d2ax12=_0x5d2ax4[_0xe4bc[2230]](_0x5d2ax3),_0x5d2ax13=Math[_0xe4bc[160]](Math[_0xe4bc[425]](_0x5d2ax12-_0x5d2ax5[_0xe4bc[235]]),_0x5d2ax15),_0x5d2ax14=_0x5d2ax5[_0xe4bc[236]],_0x5d2ax15=0);_0x5d2ax9[_0xe4bc[207]]( new mxPoint(_0x5d2ax12-_0x5d2ax13,_0x5d2ax14-_0x5d2ax15));_0x5d2ax9[_0xe4bc[207]]( new mxPoint(_0x5d2ax12+_0x5d2ax13,_0x5d2ax14+_0x5d2ax15))}},ElbowConnector:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){var _0x5d2axa=null!=_0x5d2ax5&&0<_0x5d2ax5[_0xe4bc[67]]?_0x5d2ax5[0]:null,_0x5d2ax12=!1,_0x5d2ax13=!1;if(null!=_0x5d2ax3&&null!=_0x5d2ax4){if(null!=_0x5d2axa){var _0x5d2ax14=Math[_0xe4bc[243]](_0x5d2ax3[_0xe4bc[235]],_0x5d2ax4[_0xe4bc[235]]),_0x5d2ax15=Math[_0xe4bc[160]](_0x5d2ax3[_0xe4bc[235]]+_0x5d2ax3[_0xe4bc[117]],_0x5d2ax4[_0xe4bc[235]]+_0x5d2ax4[_0xe4bc[117]]),_0x5d2ax13=Math[_0xe4bc[243]](_0x5d2ax3[_0xe4bc[236]],_0x5d2ax4[_0xe4bc[236]]),_0x5d2ax16=Math[_0xe4bc[160]](_0x5d2ax3[_0xe4bc[236]]+_0x5d2ax3[_0xe4bc[119]],_0x5d2ax4[_0xe4bc[236]]+_0x5d2ax4[_0xe4bc[119]]),_0x5d2axa=_0x5d2ax2[_0xe4bc[441]][_0xe4bc[2229]](_0x5d2ax2,_0x5d2axa),_0x5d2ax12=_0x5d2axa[_0xe4bc[236]]<_0x5d2ax13||_0x5d2axa[_0xe4bc[236]]>_0x5d2ax16,_0x5d2ax13=_0x5d2axa[_0xe4bc[235]]<_0x5d2ax14||_0x5d2axa[_0xe4bc[235]]>_0x5d2ax15}else {_0x5d2ax14=Math[_0xe4bc[160]](_0x5d2ax3[_0xe4bc[235]],_0x5d2ax4[_0xe4bc[235]]),_0x5d2ax15=Math[_0xe4bc[243]](_0x5d2ax3[_0xe4bc[235]]+_0x5d2ax3[_0xe4bc[117]],_0x5d2ax4[_0xe4bc[235]]+_0x5d2ax4[_0xe4bc[117]]),_0x5d2ax12=_0x5d2ax14==_0x5d2ax15,_0x5d2ax12||(_0x5d2ax13=Math[_0xe4bc[160]](_0x5d2ax3[_0xe4bc[236]],_0x5d2ax4[_0xe4bc[236]]),_0x5d2ax16=Math[_0xe4bc[243]](_0x5d2ax3[_0xe4bc[236]]+_0x5d2ax3[_0xe4bc[119]],_0x5d2ax4[_0xe4bc[236]]+_0x5d2ax4[_0xe4bc[119]]),_0x5d2ax13=_0x5d2ax13==_0x5d2ax16)}};!_0x5d2ax13&&(_0x5d2ax12||_0x5d2ax2[_0xe4bc[124]][mxConstants[_0xe4bc[2231]]]==mxConstants[_0xe4bc[2232]])?mxEdgeStyle.TopToBottom(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9):mxEdgeStyle.SideToSide(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9)},SideToSide:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){var _0x5d2axa=_0x5d2ax2[_0xe4bc[441]];_0x5d2ax5=null!=_0x5d2ax5&&0<_0x5d2ax5[_0xe4bc[67]]?_0x5d2ax5[0]:null;var _0x5d2ax12=_0x5d2ax2[_0xe4bc[439]],_0x5d2ax13=_0x5d2ax12[0],_0x5d2ax12=_0x5d2ax12[_0x5d2ax12[_0xe4bc[67]]-1];null!=_0x5d2ax5&&(_0x5d2ax5=_0x5d2axa[_0xe4bc[2229]](_0x5d2ax2,_0x5d2ax5));null!=_0x5d2ax13&&(_0x5d2ax3= new mxCellState,_0x5d2ax3[_0xe4bc[235]]=_0x5d2ax13[_0xe4bc[235]],_0x5d2ax3[_0xe4bc[236]]=_0x5d2ax13[_0xe4bc[236]]);null!=_0x5d2ax12&&(_0x5d2ax4= new mxCellState,_0x5d2ax4[_0xe4bc[235]]=_0x5d2ax12[_0xe4bc[235]],_0x5d2ax4[_0xe4bc[236]]=_0x5d2ax12[_0xe4bc[236]]);null!=_0x5d2ax3&&null!=_0x5d2ax4&&(_0x5d2ax2=Math[_0xe4bc[160]](_0x5d2ax3[_0xe4bc[235]],_0x5d2ax4[_0xe4bc[235]]),_0x5d2ax13=Math[_0xe4bc[243]](_0x5d2ax3[_0xe4bc[235]]+_0x5d2ax3[_0xe4bc[117]],_0x5d2ax4[_0xe4bc[235]]+_0x5d2ax4[_0xe4bc[117]]),_0x5d2ax2=null!=_0x5d2ax5?_0x5d2ax5[_0xe4bc[235]]:_0x5d2ax13+(_0x5d2ax2-_0x5d2ax13)/2,_0x5d2ax13=_0x5d2axa[_0xe4bc[2228]](_0x5d2ax3),_0x5d2axa=_0x5d2axa[_0xe4bc[2228]](_0x5d2ax4),null!=_0x5d2ax5&&(_0x5d2ax5[_0xe4bc[236]]>=_0x5d2ax3[_0xe4bc[236]]&&_0x5d2ax5[_0xe4bc[236]]<=_0x5d2ax3[_0xe4bc[236]]+_0x5d2ax3[_0xe4bc[119]]&&(_0x5d2ax13=_0x5d2ax5[_0xe4bc[236]]),_0x5d2ax5[_0xe4bc[236]]>=_0x5d2ax4[_0xe4bc[236]]&&_0x5d2ax5[_0xe4bc[236]]<=_0x5d2ax4[_0xe4bc[236]]+_0x5d2ax4[_0xe4bc[119]]&&(_0x5d2axa=_0x5d2ax5[_0xe4bc[236]])),!mxUtils[_0xe4bc[442]](_0x5d2ax4,_0x5d2ax2,_0x5d2ax13)&&!mxUtils[_0xe4bc[442]](_0x5d2ax3,_0x5d2ax2,_0x5d2ax13)&&_0x5d2ax9[_0xe4bc[207]]( new mxPoint(_0x5d2ax2,_0x5d2ax13)),!mxUtils[_0xe4bc[442]](_0x5d2ax4,_0x5d2ax2,_0x5d2axa)&&!mxUtils[_0xe4bc[442]](_0x5d2ax3,_0x5d2ax2,_0x5d2axa)&&_0x5d2ax9[_0xe4bc[207]]( new mxPoint(_0x5d2ax2,_0x5d2axa)),1==_0x5d2ax9[_0xe4bc[67]]&&(null!=_0x5d2ax5?!mxUtils[_0xe4bc[442]](_0x5d2ax4,_0x5d2ax2,_0x5d2ax5[_0xe4bc[236]])&&!mxUtils[_0xe4bc[442]](_0x5d2ax3,_0x5d2ax2,_0x5d2ax5[_0xe4bc[236]])&&_0x5d2ax9[_0xe4bc[207]]( new mxPoint(_0x5d2ax2,_0x5d2ax5[_0xe4bc[236]])):(_0x5d2axa=Math[_0xe4bc[160]](_0x5d2ax3[_0xe4bc[236]],_0x5d2ax4[_0xe4bc[236]]),_0x5d2ax3=Math[_0xe4bc[243]](_0x5d2ax3[_0xe4bc[236]]+_0x5d2ax3[_0xe4bc[119]],_0x5d2ax4[_0xe4bc[236]]+_0x5d2ax4[_0xe4bc[119]]),_0x5d2ax9[_0xe4bc[207]]( new mxPoint(_0x5d2ax2,_0x5d2axa+(_0x5d2ax3-_0x5d2axa)/2)))))},TopToBottom:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){var _0x5d2axa=_0x5d2ax2[_0xe4bc[441]];_0x5d2ax5=null!=_0x5d2ax5&&0<_0x5d2ax5[_0xe4bc[67]]?_0x5d2ax5[0]:null;var _0x5d2ax12=_0x5d2ax2[_0xe4bc[439]],_0x5d2ax13=_0x5d2ax12[0],_0x5d2ax12=_0x5d2ax12[_0x5d2ax12[_0xe4bc[67]]-1];null!=_0x5d2ax5&&(_0x5d2ax5=_0x5d2axa[_0xe4bc[2229]](_0x5d2ax2,_0x5d2ax5));null!=_0x5d2ax13&&(_0x5d2ax3= new mxCellState,_0x5d2ax3[_0xe4bc[235]]=_0x5d2ax13[_0xe4bc[235]],_0x5d2ax3[_0xe4bc[236]]=_0x5d2ax13[_0xe4bc[236]]);null!=_0x5d2ax12&&(_0x5d2ax4= new mxCellState,_0x5d2ax4[_0xe4bc[235]]=_0x5d2ax12[_0xe4bc[235]],_0x5d2ax4[_0xe4bc[236]]=_0x5d2ax12[_0xe4bc[236]]);null!=_0x5d2ax3&&null!=_0x5d2ax4&&(_0x5d2ax13=Math[_0xe4bc[160]](_0x5d2ax3[_0xe4bc[236]],_0x5d2ax4[_0xe4bc[236]]),_0x5d2ax12=Math[_0xe4bc[243]](_0x5d2ax3[_0xe4bc[236]]+_0x5d2ax3[_0xe4bc[119]],_0x5d2ax4[_0xe4bc[236]]+_0x5d2ax4[_0xe4bc[119]]),_0x5d2ax2=_0x5d2axa[_0xe4bc[2230]](_0x5d2ax3),null!=_0x5d2ax5&&(_0x5d2ax5[_0xe4bc[235]]>=_0x5d2ax3[_0xe4bc[235]]&&_0x5d2ax5[_0xe4bc[235]]<=_0x5d2ax3[_0xe4bc[235]]+_0x5d2ax3[_0xe4bc[117]])&&(_0x5d2ax2=_0x5d2ax5[_0xe4bc[235]]),_0x5d2ax13=null!=_0x5d2ax5?_0x5d2ax5[_0xe4bc[236]]:_0x5d2ax12+(_0x5d2ax13-_0x5d2ax12)/2,!mxUtils[_0xe4bc[442]](_0x5d2ax4,_0x5d2ax2,_0x5d2ax13)&&!mxUtils[_0xe4bc[442]](_0x5d2ax3,_0x5d2ax2,_0x5d2ax13)&&_0x5d2ax9[_0xe4bc[207]]( new mxPoint(_0x5d2ax2,_0x5d2ax13)),_0x5d2ax2=null!=_0x5d2ax5&&_0x5d2ax5[_0xe4bc[235]]>=_0x5d2ax4[_0xe4bc[235]]&&_0x5d2ax5[_0xe4bc[235]]<=_0x5d2ax4[_0xe4bc[235]]+_0x5d2ax4[_0xe4bc[117]]?_0x5d2ax5[_0xe4bc[235]]:_0x5d2axa[_0xe4bc[2230]](_0x5d2ax4),!mxUtils[_0xe4bc[442]](_0x5d2ax4,_0x5d2ax2,_0x5d2ax13)&&!mxUtils[_0xe4bc[442]](_0x5d2ax3,_0x5d2ax2,_0x5d2ax13)&&_0x5d2ax9[_0xe4bc[207]]( new mxPoint(_0x5d2ax2,_0x5d2ax13)),1==_0x5d2ax9[_0xe4bc[67]]&&(null!=_0x5d2ax5&&1==_0x5d2ax9[_0xe4bc[67]]?!mxUtils[_0xe4bc[442]](_0x5d2ax4,_0x5d2ax5[_0xe4bc[235]],_0x5d2ax13)&&!mxUtils[_0xe4bc[442]](_0x5d2ax3,_0x5d2ax5[_0xe4bc[235]],_0x5d2ax13)&&_0x5d2ax9[_0xe4bc[207]]( new mxPoint(_0x5d2ax5[_0xe4bc[235]],_0x5d2ax13)):(_0x5d2axa=Math[_0xe4bc[160]](_0x5d2ax3[_0xe4bc[235]],_0x5d2ax4[_0xe4bc[235]]),_0x5d2ax3=Math[_0xe4bc[243]](_0x5d2ax3[_0xe4bc[235]]+_0x5d2ax3[_0xe4bc[117]],_0x5d2ax4[_0xe4bc[235]]+_0x5d2ax4[_0xe4bc[117]]),_0x5d2ax9[_0xe4bc[207]]( new mxPoint(_0x5d2axa+(_0x5d2ax3-_0x5d2axa)/2,_0x5d2ax13)))))},SegmentConnector:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){var _0x5d2axa=_0x5d2ax2[_0xe4bc[439]],_0x5d2ax12=!0,_0x5d2ax13=null,_0x5d2ax14=_0x5d2axa[0];null==_0x5d2ax14&&null!=_0x5d2ax3?_0x5d2ax14= new mxPoint(_0x5d2ax2[_0xe4bc[441]][_0xe4bc[2230]](_0x5d2ax3),_0x5d2ax2[_0xe4bc[441]][_0xe4bc[2228]](_0x5d2ax3)):null!=_0x5d2ax14&&(_0x5d2ax14=_0x5d2ax14[_0xe4bc[238]]());var _0x5d2ax15=_0x5d2axa[_0xe4bc[67]]-1;if(null!=_0x5d2ax5&&0<_0x5d2ax5[_0xe4bc[67]]){for(var _0x5d2ax13=_0x5d2ax2[_0xe4bc[441]][_0xe4bc[2229]](_0x5d2ax2,_0x5d2ax5[0]),_0x5d2ax16=_0x5d2ax3,_0x5d2ax17=_0x5d2axa[0],_0x5d2ax18=!1,_0x5d2ax19=!1,_0x5d2ax18=_0x5d2ax13,_0x5d2ax1a=_0x5d2ax5[_0xe4bc[67]],_0x5d2ax1b=0;2>_0x5d2ax1b;_0x5d2ax1b++){var _0x5d2ax1c=null!=_0x5d2ax17&&_0x5d2ax17[_0xe4bc[235]]==_0x5d2ax18[_0xe4bc[235]],_0x5d2ax1d=null!=_0x5d2ax17&&_0x5d2ax17[_0xe4bc[236]]==_0x5d2ax18[_0xe4bc[236]],_0x5d2ax1e=null!=_0x5d2ax16&&_0x5d2ax18[_0xe4bc[236]]>=_0x5d2ax16[_0xe4bc[236]]&&_0x5d2ax18[_0xe4bc[236]]<=_0x5d2ax16[_0xe4bc[236]]+_0x5d2ax16[_0xe4bc[119]],_0x5d2ax16=null!=_0x5d2ax16&&_0x5d2ax18[_0xe4bc[235]]>=_0x5d2ax16[_0xe4bc[235]]&&_0x5d2ax18[_0xe4bc[235]]<=_0x5d2ax16[_0xe4bc[235]]+_0x5d2ax16[_0xe4bc[117]],_0x5d2ax18=_0x5d2ax1d||null==_0x5d2ax17&&_0x5d2ax1e,_0x5d2ax19=_0x5d2ax1c||null==_0x5d2ax17&&_0x5d2ax16;if(null!=_0x5d2ax17&&!_0x5d2ax1d&&!_0x5d2ax1c&&(_0x5d2ax1e||_0x5d2ax16)){_0x5d2ax12=_0x5d2ax1e?!1:!0;break};if(_0x5d2ax19||_0x5d2ax18){_0x5d2ax12=_0x5d2ax18;1==_0x5d2ax1b&&(_0x5d2ax12=0==_0x5d2ax5[_0xe4bc[67]]%2?_0x5d2ax18:_0x5d2ax19);break};_0x5d2ax16=_0x5d2ax4;_0x5d2ax17=_0x5d2axa[_0x5d2ax15];_0x5d2ax18=_0x5d2ax2[_0xe4bc[441]][_0xe4bc[2229]](_0x5d2ax2,_0x5d2ax5[_0x5d2ax1a-1])};_0x5d2ax12&&(null!=_0x5d2axa[0]&&_0x5d2axa[0][_0xe4bc[236]]!=_0x5d2ax13[_0xe4bc[236]]||null==_0x5d2axa[0]&&null!=_0x5d2ax3&&(_0x5d2ax13[_0xe4bc[236]]<_0x5d2ax3[_0xe4bc[236]]||_0x5d2ax13[_0xe4bc[236]]>_0x5d2ax3[_0xe4bc[236]]+_0x5d2ax3[_0xe4bc[119]]))?_0x5d2ax9[_0xe4bc[207]]( new mxPoint(_0x5d2ax14[_0xe4bc[235]],_0x5d2ax13[_0xe4bc[236]])):!_0x5d2ax12&&(null!=_0x5d2axa[0]&&_0x5d2axa[0][_0xe4bc[235]]!=_0x5d2ax13[_0xe4bc[235]]||null==_0x5d2axa[0]&&null!=_0x5d2ax3&&(_0x5d2ax13[_0xe4bc[235]]<_0x5d2ax3[_0xe4bc[235]]||_0x5d2ax13[_0xe4bc[235]]>_0x5d2ax3[_0xe4bc[235]]+_0x5d2ax3[_0xe4bc[117]]))&&_0x5d2ax9[_0xe4bc[207]]( new mxPoint(_0x5d2ax13[_0xe4bc[235]],_0x5d2ax14[_0xe4bc[236]]));_0x5d2ax12?_0x5d2ax14[_0xe4bc[236]]=_0x5d2ax13[_0xe4bc[236]]:_0x5d2ax14[_0xe4bc[235]]=_0x5d2ax13[_0xe4bc[235]];for(_0x5d2ax1b=0;_0x5d2ax1b<_0x5d2ax5[_0xe4bc[67]];_0x5d2ax1b++){_0x5d2ax12= !_0x5d2ax12,_0x5d2ax13=_0x5d2ax2[_0xe4bc[441]][_0xe4bc[2229]](_0x5d2ax2,_0x5d2ax5[_0x5d2ax1b]),_0x5d2ax12?_0x5d2ax14[_0xe4bc[236]]=_0x5d2ax13[_0xe4bc[236]]:_0x5d2ax14[_0xe4bc[235]]=_0x5d2ax13[_0xe4bc[235]],_0x5d2ax9[_0xe4bc[207]](_0x5d2ax14[_0xe4bc[238]]())}}else {_0x5d2ax13=_0x5d2ax14,_0x5d2ax12= !0};_0x5d2ax14=_0x5d2axa[_0x5d2ax15];null==_0x5d2ax14&&null!=_0x5d2ax4&&(_0x5d2ax14= new mxPoint(_0x5d2ax2[_0xe4bc[441]][_0xe4bc[2230]](_0x5d2ax4),_0x5d2ax2[_0xe4bc[441]][_0xe4bc[2228]](_0x5d2ax4)));_0x5d2ax12&&(null!=_0x5d2axa[_0x5d2ax15]&&_0x5d2axa[_0x5d2ax15][_0xe4bc[236]]!=_0x5d2ax13[_0xe4bc[236]]||null==_0x5d2axa[_0x5d2ax15]&&null!=_0x5d2ax4&&(_0x5d2ax13[_0xe4bc[236]]<_0x5d2ax4[_0xe4bc[236]]||_0x5d2ax13[_0xe4bc[236]]>_0x5d2ax4[_0xe4bc[236]]+_0x5d2ax4[_0xe4bc[119]]))?_0x5d2ax9[_0xe4bc[207]]( new mxPoint(_0x5d2ax14[_0xe4bc[235]],_0x5d2ax13[_0xe4bc[236]])):!_0x5d2ax12&&(null!=_0x5d2axa[_0x5d2ax15]&&_0x5d2axa[_0x5d2ax15][_0xe4bc[235]]!=_0x5d2ax13[_0xe4bc[235]]||null==_0x5d2axa[_0x5d2ax15]&&null!=_0x5d2ax4&&(_0x5d2ax13[_0xe4bc[235]]<_0x5d2ax4[_0xe4bc[235]]||_0x5d2ax13[_0xe4bc[235]]>_0x5d2ax4[_0xe4bc[235]]+_0x5d2ax4[_0xe4bc[117]]))&&_0x5d2ax9[_0xe4bc[207]]( new mxPoint(_0x5d2ax13[_0xe4bc[235]],_0x5d2ax14[_0xe4bc[236]]));if(null==_0x5d2axa[0]&&null!=_0x5d2ax3){for(;1<_0x5d2ax9[_0xe4bc[67]]&&mxUtils[_0xe4bc[442]](_0x5d2ax3,_0x5d2ax9[1][_0xe4bc[235]],_0x5d2ax9[1][_0xe4bc[236]]);){_0x5d2ax9=_0x5d2ax9[_0xe4bc[300]](1,1)}};if(null==_0x5d2axa[_0x5d2ax15]&&null!=_0x5d2ax4){for(;1<_0x5d2ax9[_0xe4bc[67]]&&mxUtils[_0xe4bc[442]](_0x5d2ax4,_0x5d2ax9[_0x5d2ax9[_0xe4bc[67]]-1][_0xe4bc[235]],_0x5d2ax9[_0x5d2ax9[_0xe4bc[67]]-1][_0xe4bc[236]]);){_0x5d2ax9=_0x5d2ax9[_0xe4bc[300]](_0x5d2ax9[_0xe4bc[67]]-1,1)}}},orthBuffer:10,dirVectors:[[-1,0],[0,-1],[1,0],[0,1],[-1,0],[0,-1],[1,0]],wayPoints1:[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],routePatterns:[[[513,2308,2081,2562],[513,1090,514,2184,2114,2561],[513,1090,514,2564,2184,2562],[513,2308,2561,1090,514,2568,2308]],[[514,1057,513,2308,2081,2562],[514,2184,2114,2561],[514,2184,2562,1057,513,2564,2184],[514,1057,513,2568,2308,2561]],[[1090,514,1057,513,2308,2081,2562],[2114,2561],[1090,2562,1057,513,2564,2184],[1090,514,1057,513,2308,2561,2568]],[[2081,2562],[1057,513,1090,514,2184,2114,2561],[1057,513,1090,514,2184,2562,2564],[1057,2561,1090,514,2568,2308]]],inlineRoutePatterns:[[null,[2114,2568],null,null],[null,[514,2081,2114,2568],null,null],[null,[2114,2561],null,null],[[2081,2562],[1057,2114,2568],[2184,2562],null]],vertexSeperations:[],limits:[[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0]],LEFT_MASK:32,TOP_MASK:64,RIGHT_MASK:128,BOTTOM_MASK:256,LEFT:1,TOP:2,RIGHT:4,BOTTOM:8,SIDE_MASK:480,CENTER_MASK:512,SOURCE_MASK:1024,TARGET_MASK:2048,VERTEX_MASK:3072,OrthConnector:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){var _0x5d2axa=_0x5d2ax2[_0xe4bc[441]][_0xe4bc[1179]],_0x5d2ax12=null==_0x5d2ax3?!1:_0x5d2axa[_0xe4bc[502]]()[_0xe4bc[250]](_0x5d2ax3[_0xe4bc[246]]),_0x5d2axa=null==_0x5d2ax4?!1:_0x5d2axa[_0xe4bc[502]]()[_0xe4bc[250]](_0x5d2ax4[_0xe4bc[246]]);if(null!=_0x5d2ax5&&0<_0x5d2ax5[_0xe4bc[67]]||_0x5d2ax12||_0x5d2axa){mxEdgeStyle.SegmentConnector(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9)}else {_0x5d2ax5=_0x5d2ax2[_0xe4bc[439]];var _0x5d2ax13=_0x5d2ax5[0],_0x5d2ax14=_0x5d2ax5[_0x5d2ax5[_0xe4bc[67]]-1];_0x5d2ax5=null!=_0x5d2ax3?_0x5d2ax3[_0xe4bc[235]]:_0x5d2ax13[_0xe4bc[235]];var _0x5d2ax12=null!=_0x5d2ax3?_0x5d2ax3[_0xe4bc[236]]:_0x5d2ax13[_0xe4bc[236]],_0x5d2ax15=null!=_0x5d2ax3?_0x5d2ax3[_0xe4bc[117]]:1,_0x5d2ax16=null!=_0x5d2ax3?_0x5d2ax3[_0xe4bc[119]]:1,_0x5d2ax17=null!=_0x5d2ax4?_0x5d2ax4[_0xe4bc[235]]:_0x5d2ax14[_0xe4bc[235]],_0x5d2ax18=null!=_0x5d2ax4?_0x5d2ax4[_0xe4bc[236]]:_0x5d2ax14[_0xe4bc[236]],_0x5d2ax19=null!=_0x5d2ax4?_0x5d2ax4[_0xe4bc[117]]:1,_0x5d2ax1a=null!=_0x5d2ax4?_0x5d2ax4[_0xe4bc[119]]:1,_0x5d2axa=_0x5d2ax2[_0xe4bc[441]][_0xe4bc[255]]*mxEdgeStyle[_0xe4bc[2233]],_0x5d2ax1b=[mxConstants[_0xe4bc[2234]],mxConstants[_0xe4bc[2234]]];null!=_0x5d2ax3&&(_0x5d2ax1b[0]=mxUtils[_0xe4bc[2227]](_0x5d2ax3,_0x5d2ax2,!0,mxConstants.DIRECTION_MASK_ALL));null!=_0x5d2ax4&&(_0x5d2ax1b[1]=mxUtils[_0xe4bc[2227]](_0x5d2ax4,_0x5d2ax2,!1,mxConstants.DIRECTION_MASK_ALL));_0x5d2ax2=[0,0];_0x5d2ax5=[[_0x5d2ax5,_0x5d2ax12,_0x5d2ax15,_0x5d2ax16],[_0x5d2ax17,_0x5d2ax18,_0x5d2ax19,_0x5d2ax1a]];for(_0x5d2ax15=0;2>_0x5d2ax15;_0x5d2ax15++){mxEdgeStyle[_0xe4bc[2235]][_0x5d2ax15][1]=_0x5d2ax5[_0x5d2ax15][0]-_0x5d2axa,mxEdgeStyle[_0xe4bc[2235]][_0x5d2ax15][2]=_0x5d2ax5[_0x5d2ax15][1]-_0x5d2axa,mxEdgeStyle[_0xe4bc[2235]][_0x5d2ax15][4]=_0x5d2ax5[_0x5d2ax15][0]+_0x5d2ax5[_0x5d2ax15][2]+_0x5d2axa,mxEdgeStyle[_0xe4bc[2235]][_0x5d2ax15][8]=_0x5d2ax5[_0x5d2ax15][1]+_0x5d2ax5[_0x5d2ax15][3]+_0x5d2axa};_0x5d2ax15=_0x5d2ax5[0][0]+_0x5d2ax5[0][2]/2-(_0x5d2ax5[1][0]+_0x5d2ax5[1][2]/2);_0x5d2ax16=_0x5d2ax5[0][1]+_0x5d2ax5[0][3]/2-(_0x5d2ax5[1][1]+_0x5d2ax5[1][3]/2);_0x5d2ax12=0;0>_0x5d2ax15?_0x5d2ax12=0>_0x5d2ax16?2:1:0>=_0x5d2ax16&&(_0x5d2ax12=3,0==_0x5d2ax15&&(_0x5d2ax12=2));_0x5d2ax16=null;null!=_0x5d2ax3&&(_0x5d2ax16=_0x5d2ax13);_0x5d2ax3=[[0.5,0.5],[0.5,0.5]];for(_0x5d2ax15=0;2>_0x5d2ax15;_0x5d2ax15++){null!=_0x5d2ax16&&(_0x5d2ax3[_0x5d2ax15][0]=(_0x5d2ax16[_0xe4bc[235]]-_0x5d2ax5[_0x5d2ax15][0])/_0x5d2ax5[_0x5d2ax15][2],0.01>_0x5d2ax3[_0x5d2ax15][0]?_0x5d2ax2[_0x5d2ax15]=mxConstants[_0xe4bc[436]]:0.99<_0x5d2ax3[_0x5d2ax15][0]&&(_0x5d2ax2[_0x5d2ax15]=mxConstants[_0xe4bc[438]]),_0x5d2ax3[_0x5d2ax15][1]=(_0x5d2ax16[_0xe4bc[236]]-_0x5d2ax5[_0x5d2ax15][1])/_0x5d2ax5[_0x5d2ax15][3],0.01>_0x5d2ax3[_0x5d2ax15][1]?_0x5d2ax2[_0x5d2ax15]=mxConstants[_0xe4bc[435]]:0.99<_0x5d2ax3[_0x5d2ax15][1]&&(_0x5d2ax2[_0x5d2ax15]=mxConstants[_0xe4bc[437]])),_0x5d2ax16=null,null!=_0x5d2ax4&&(_0x5d2ax16=_0x5d2ax14)};_0x5d2ax15=_0x5d2ax5[0][1]-(_0x5d2ax5[1][1]+_0x5d2ax5[1][3]);_0x5d2ax16=_0x5d2ax5[0][0]-(_0x5d2ax5[1][0]+_0x5d2ax5[1][2]);_0x5d2ax17=_0x5d2ax5[1][1]-(_0x5d2ax5[0][1]+_0x5d2ax5[0][3]);_0x5d2ax18=_0x5d2ax5[1][0]-(_0x5d2ax5[0][0]+_0x5d2ax5[0][2]);mxEdgeStyle[_0xe4bc[2236]][1]=Math[_0xe4bc[160]](_0x5d2ax16-2*_0x5d2axa,0);mxEdgeStyle[_0xe4bc[2236]][2]=Math[_0xe4bc[160]](_0x5d2ax15-2*_0x5d2axa,0);mxEdgeStyle[_0xe4bc[2236]][4]=Math[_0xe4bc[160]](_0x5d2ax17-2*_0x5d2axa,0);mxEdgeStyle[_0xe4bc[2236]][3]=Math[_0xe4bc[160]](_0x5d2ax18-2*_0x5d2axa,0);_0x5d2ax4=[];_0x5d2ax13=[];_0x5d2ax14=[];_0x5d2ax13[0]=_0x5d2ax16>=_0x5d2ax18?mxConstants[_0xe4bc[436]]:mxConstants[_0xe4bc[438]];_0x5d2ax14[0]=_0x5d2ax15>=_0x5d2ax17?mxConstants[_0xe4bc[435]]:mxConstants[_0xe4bc[437]];_0x5d2ax13[1]=mxUtils[_0xe4bc[2237]](_0x5d2ax13[0]);_0x5d2ax14[1]=mxUtils[_0xe4bc[2237]](_0x5d2ax14[0]);_0x5d2ax16=_0x5d2ax16>=_0x5d2ax18?_0x5d2ax16:_0x5d2ax18;_0x5d2ax17=_0x5d2ax15>=_0x5d2ax17?_0x5d2ax15:_0x5d2ax17;_0x5d2ax18=[[0,0],[0,0]];_0x5d2ax19= !1;for(_0x5d2ax15=0;2>_0x5d2ax15;_0x5d2ax15++){0==_0x5d2ax2[_0x5d2ax15]&&(0==(_0x5d2ax13[_0x5d2ax15]&_0x5d2ax1b[_0x5d2ax15])&&(_0x5d2ax13[_0x5d2ax15]=mxUtils[_0xe4bc[2237]](_0x5d2ax13[_0x5d2ax15])),0==(_0x5d2ax14[_0x5d2ax15]&_0x5d2ax1b[_0x5d2ax15])&&(_0x5d2ax14[_0x5d2ax15]=mxUtils[_0xe4bc[2237]](_0x5d2ax14[_0x5d2ax15])),_0x5d2ax18[_0x5d2ax15][0]=_0x5d2ax14[_0x5d2ax15],_0x5d2ax18[_0x5d2ax15][1]=_0x5d2ax13[_0x5d2ax15])};_0x5d2ax17>2*_0x5d2axa&&_0x5d2ax16>2*_0x5d2axa&&(0<(_0x5d2ax13[0]&_0x5d2ax1b[0])&&0<(_0x5d2ax14[1]&_0x5d2ax1b[1])?(_0x5d2ax18[0][0]=_0x5d2ax13[0],_0x5d2ax18[0][1]=_0x5d2ax14[0],_0x5d2ax18[1][0]=_0x5d2ax14[1],_0x5d2ax18[1][1]=_0x5d2ax13[1],_0x5d2ax19= !0):0<(_0x5d2ax14[0]&_0x5d2ax1b[0])&&0<(_0x5d2ax13[1]&_0x5d2ax1b[1])&&(_0x5d2ax18[0][0]=_0x5d2ax14[0],_0x5d2ax18[0][1]=_0x5d2ax13[0],_0x5d2ax18[1][0]=_0x5d2ax13[1],_0x5d2ax18[1][1]=_0x5d2ax14[1],_0x5d2ax19= !0));_0x5d2ax17>2*_0x5d2axa&&!_0x5d2ax19&&(_0x5d2ax18[0][0]=_0x5d2ax14[0],_0x5d2ax18[0][1]=_0x5d2ax13[0],_0x5d2ax18[1][0]=_0x5d2ax14[1],_0x5d2ax18[1][1]=_0x5d2ax13[1],_0x5d2ax19= !0);_0x5d2ax16>2*_0x5d2axa&&!_0x5d2ax19&&(_0x5d2ax18[0][0]=_0x5d2ax13[0],_0x5d2ax18[0][1]=_0x5d2ax14[0],_0x5d2ax18[1][0]=_0x5d2ax13[1],_0x5d2ax18[1][1]=_0x5d2ax14[1]);for(_0x5d2ax15=0;2>_0x5d2ax15;_0x5d2ax15++){if(0==_0x5d2ax2[_0x5d2ax15]&&(0==(_0x5d2ax18[_0x5d2ax15][0]&_0x5d2ax1b[_0x5d2ax15])&&(_0x5d2ax18[_0x5d2ax15][0]=_0x5d2ax18[_0x5d2ax15][1]),_0x5d2ax4[_0x5d2ax15]=_0x5d2ax18[_0x5d2ax15][0]&_0x5d2ax1b[_0x5d2ax15],_0x5d2ax4[_0x5d2ax15]|=(_0x5d2ax18[_0x5d2ax15][1]&_0x5d2ax1b[_0x5d2ax15])<<8,_0x5d2ax4[_0x5d2ax15]|=(_0x5d2ax18[1-_0x5d2ax15][_0x5d2ax15]&_0x5d2ax1b[_0x5d2ax15])<<16,_0x5d2ax4[_0x5d2ax15]|=(_0x5d2ax18[1-_0x5d2ax15][1-_0x5d2ax15]&_0x5d2ax1b[_0x5d2ax15])<<24,0==(_0x5d2ax4[_0x5d2ax15]&15)&&(_0x5d2ax4[_0x5d2ax15]<<=8),0==(_0x5d2ax4[_0x5d2ax15]&3840)&&(_0x5d2ax4[_0x5d2ax15]=_0x5d2ax4[_0x5d2ax15]&15|_0x5d2ax4[_0x5d2ax15]>>8),0==(_0x5d2ax4[_0x5d2ax15]&983040)&&(_0x5d2ax4[_0x5d2ax15]=_0x5d2ax4[_0x5d2ax15]&65535|(_0x5d2ax4[_0x5d2ax15]&251658240)>>8),_0x5d2ax2[_0x5d2ax15]=_0x5d2ax4[_0x5d2ax15]&15,_0x5d2ax1b[_0x5d2ax15]==mxConstants[_0xe4bc[436]]||_0x5d2ax1b[_0x5d2ax15]==mxConstants[_0xe4bc[435]]||_0x5d2ax1b[_0x5d2ax15]==mxConstants[_0xe4bc[438]]||_0x5d2ax1b[_0x5d2ax15]==mxConstants[_0xe4bc[437]])){_0x5d2ax2[_0x5d2ax15]=_0x5d2ax1b[_0x5d2ax15]}};_0x5d2ax15=_0x5d2ax2[0]==mxConstants[_0xe4bc[438]]?3:_0x5d2ax2[0];_0x5d2ax1b=_0x5d2ax2[1]==mxConstants[_0xe4bc[438]]?3:_0x5d2ax2[1];_0x5d2ax15-=_0x5d2ax12;_0x5d2ax1b-=_0x5d2ax12;1>_0x5d2ax15&&(_0x5d2ax15+=4);1>_0x5d2ax1b&&(_0x5d2ax1b+=4);_0x5d2ax1b=mxEdgeStyle[_0xe4bc[2238]][_0x5d2ax15-1][_0x5d2ax1b-1];mxEdgeStyle[_0xe4bc[2239]][0][0]=_0x5d2ax5[0][0];mxEdgeStyle[_0xe4bc[2239]][0][1]=_0x5d2ax5[0][1];switch(_0x5d2ax2[0]){case mxConstants[_0xe4bc[436]]:mxEdgeStyle[_0xe4bc[2239]][0][0]-=_0x5d2axa;mxEdgeStyle[_0xe4bc[2239]][0][1]+=_0x5d2ax3[0][1]*_0x5d2ax5[0][3];break;case mxConstants[_0xe4bc[437]]:mxEdgeStyle[_0xe4bc[2239]][0][0]+=_0x5d2ax3[0][0]*_0x5d2ax5[0][2];mxEdgeStyle[_0xe4bc[2239]][0][1]+=_0x5d2ax5[0][3]+_0x5d2axa;break;case mxConstants[_0xe4bc[438]]:mxEdgeStyle[_0xe4bc[2239]][0][0]+=_0x5d2ax5[0][2]+_0x5d2axa;mxEdgeStyle[_0xe4bc[2239]][0][1]+=_0x5d2ax3[0][1]*_0x5d2ax5[0][3];break;case mxConstants[_0xe4bc[435]]:mxEdgeStyle[_0xe4bc[2239]][0][0]+=_0x5d2ax3[0][0]*_0x5d2ax5[0][2],mxEdgeStyle[_0xe4bc[2239]][0][1]-=_0x5d2axa};_0x5d2axa=0;_0x5d2ax13=_0x5d2ax4=0<(_0x5d2ax2[0]&(mxConstants[_0xe4bc[438]]|mxConstants[_0xe4bc[436]]))?0:1;for(_0x5d2ax15=_0x5d2ax14=0;_0x5d2ax15<_0x5d2ax1b[_0xe4bc[67]];_0x5d2ax15++){_0x5d2ax14=_0x5d2ax1b[_0x5d2ax15]&15;_0x5d2ax1a=_0x5d2ax14==mxConstants[_0xe4bc[438]]?3:_0x5d2ax14;_0x5d2ax1a+=_0x5d2ax12;4<_0x5d2ax1a&&(_0x5d2ax1a-=4);_0x5d2ax16=mxEdgeStyle[_0xe4bc[2240]][_0x5d2ax1a-1];_0x5d2ax14=0<_0x5d2ax1a%2?0:1;_0x5d2ax14!=_0x5d2ax4&&(_0x5d2axa++,mxEdgeStyle[_0xe4bc[2239]][_0x5d2axa][0]=mxEdgeStyle[_0xe4bc[2239]][_0x5d2axa-1][0],mxEdgeStyle[_0xe4bc[2239]][_0x5d2axa][1]=mxEdgeStyle[_0xe4bc[2239]][_0x5d2axa-1][1]);var _0x5d2ax1c=0<(_0x5d2ax1b[_0x5d2ax15]&mxEdgeStyle[_0xe4bc[2241]]),_0x5d2ax19=0<(_0x5d2ax1b[_0x5d2ax15]&mxEdgeStyle[_0xe4bc[2242]]),_0x5d2ax17=(_0x5d2ax1b[_0x5d2ax15]&mxEdgeStyle[_0xe4bc[2243]])>>5,_0x5d2ax17=_0x5d2ax17<<_0x5d2ax12;15<_0x5d2ax17&&(_0x5d2ax17>>=4);_0x5d2ax18=0<(_0x5d2ax1b[_0x5d2ax15]&mxEdgeStyle[_0xe4bc[2244]]);(_0x5d2ax19||_0x5d2ax1c)&&9>_0x5d2ax17?(_0x5d2ax1a=0,_0x5d2ax19=_0x5d2ax19?0:1,_0x5d2ax1a=_0x5d2ax18&&0==_0x5d2ax14?_0x5d2ax5[_0x5d2ax19][0]+_0x5d2ax3[_0x5d2ax19][0]*_0x5d2ax5[_0x5d2ax19][2]:_0x5d2ax18?_0x5d2ax5[_0x5d2ax19][1]+_0x5d2ax3[_0x5d2ax19][1]*_0x5d2ax5[_0x5d2ax19][3]:mxEdgeStyle[_0xe4bc[2235]][_0x5d2ax19][_0x5d2ax17],0==_0x5d2ax14?(_0x5d2ax17=(_0x5d2ax1a-mxEdgeStyle[_0xe4bc[2239]][_0x5d2axa][0])*_0x5d2ax16[0],0<_0x5d2ax17&&(mxEdgeStyle[_0xe4bc[2239]][_0x5d2axa][0]+=_0x5d2ax16[0]*_0x5d2ax17)):(_0x5d2ax17=(_0x5d2ax1a-mxEdgeStyle[_0xe4bc[2239]][_0x5d2axa][1])*_0x5d2ax16[1],0<_0x5d2ax17&&(mxEdgeStyle[_0xe4bc[2239]][_0x5d2axa][1]+=_0x5d2ax16[1]*_0x5d2ax17))):_0x5d2ax18&&(mxEdgeStyle[_0xe4bc[2239]][_0x5d2axa][0]+=_0x5d2ax16[0]*Math[_0xe4bc[425]](mxEdgeStyle[_0xe4bc[2236]][_0x5d2ax1a]/2),mxEdgeStyle[_0xe4bc[2239]][_0x5d2axa][1]+=_0x5d2ax16[1]*Math[_0xe4bc[425]](mxEdgeStyle[_0xe4bc[2236]][_0x5d2ax1a]/2));0<_0x5d2axa&&mxEdgeStyle[_0xe4bc[2239]][_0x5d2axa][_0x5d2ax14]==mxEdgeStyle[_0xe4bc[2239]][_0x5d2axa-1][_0x5d2ax14]?_0x5d2axa--:_0x5d2ax4=_0x5d2ax14};for(_0x5d2ax15=0;_0x5d2ax15<=_0x5d2axa&& !(_0x5d2ax15==_0x5d2axa&&((0<(_0x5d2ax2[1]&(mxConstants[_0xe4bc[438]]|mxConstants[_0xe4bc[436]]))?0:1)==_0x5d2ax13?0:1)!=(_0x5d2axa+1)%2);_0x5d2ax15++){_0x5d2ax9[_0xe4bc[207]]( new mxPoint(mxEdgeStyle[_0xe4bc[2239]][_0x5d2ax15][0],mxEdgeStyle[_0xe4bc[2239]][_0x5d2ax15][1]))}}},getRoutePattern:function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){var _0x5d2ax9=_0x5d2ax2[0]==mxConstants[_0xe4bc[438]]?3:_0x5d2ax2[0];_0x5d2ax2=_0x5d2ax2[1]==mxConstants[_0xe4bc[438]]?3:_0x5d2ax2[1];_0x5d2ax9-=_0x5d2ax3;_0x5d2ax2-=_0x5d2ax3;1>_0x5d2ax9&&(_0x5d2ax9+=4);1>_0x5d2ax2&&(_0x5d2ax2+=4);_0x5d2ax3=routePatterns[_0x5d2ax9-1][_0x5d2ax2-1];if(0==_0x5d2ax4||0==_0x5d2ax5){null!=inlineRoutePatterns[_0x5d2ax9-1][_0x5d2ax2-1]&&(_0x5d2ax3=inlineRoutePatterns[_0x5d2ax9-1][_0x5d2ax2-1])};return _0x5d2ax3}},mxStyleRegistry={values:[],putValue:function(_0x5d2ax2,_0x5d2ax3){mxStyleRegistry[_0xe4bc[2245]][_0x5d2ax2]=_0x5d2ax3},getValue:function(_0x5d2ax2){return mxStyleRegistry[_0xe4bc[2245]][_0x5d2ax2]},getName:function(_0x5d2ax2){for(var _0x5d2ax3 in mxStyleRegistry[_0xe4bc[2245]]){if(mxStyleRegistry[_0xe4bc[2245]][_0x5d2ax3]==_0x5d2ax2){return _0x5d2ax3}};return null}};mxStyleRegistry[_0xe4bc[2246]](mxConstants.EDGESTYLE_ELBOW,mxEdgeStyle.ElbowConnector);mxStyleRegistry[_0xe4bc[2246]](mxConstants.EDGESTYLE_ENTITY_RELATION,mxEdgeStyle.EntityRelation);mxStyleRegistry[_0xe4bc[2246]](mxConstants.EDGESTYLE_LOOP,mxEdgeStyle.Loop);mxStyleRegistry[_0xe4bc[2246]](mxConstants.EDGESTYLE_SIDETOSIDE,mxEdgeStyle.SideToSide);mxStyleRegistry[_0xe4bc[2246]](mxConstants.EDGESTYLE_TOPTOBOTTOM,mxEdgeStyle.TopToBottom);mxStyleRegistry[_0xe4bc[2246]](mxConstants.EDGESTYLE_ORTHOGONAL,mxEdgeStyle.OrthConnector);mxStyleRegistry[_0xe4bc[2246]](mxConstants.EDGESTYLE_SEGMENT,mxEdgeStyle.SegmentConnector);mxStyleRegistry[_0xe4bc[2246]](mxConstants.PERIMETER_ELLIPSE,mxPerimeter.EllipsePerimeter);mxStyleRegistry[_0xe4bc[2246]](mxConstants.PERIMETER_RECTANGLE,mxPerimeter.RectanglePerimeter);mxStyleRegistry[_0xe4bc[2246]](mxConstants.PERIMETER_RHOMBUS,mxPerimeter.RhombusPerimeter);mxStyleRegistry[_0xe4bc[2246]](mxConstants.PERIMETER_TRIANGLE,mxPerimeter.TrianglePerimeter);function mxGraphView(_0x5d2ax2){this[_0xe4bc[1179]]=_0x5d2ax2;this[_0xe4bc[513]]= new mxPoint;this[_0xe4bc[2247]]= new mxRectangle;this[_0xe4bc[1214]]= new mxDictionary}mxGraphView[_0xe4bc[202]]= new mxEventSource;mxGraphView[_0xe4bc[202]][_0xe4bc[196]]=mxGraphView;mxGraphView[_0xe4bc[202]][_0xe4bc[2248]]= new mxPoint;mxGraphView[_0xe4bc[202]][_0xe4bc[2091]]=_0xe4bc[130]!=mxClient[_0xe4bc[90]]?_0xe4bc[819]:_0xe4bc[110];mxGraphView[_0xe4bc[202]][_0xe4bc[2249]]=_0xe4bc[130]!=mxClient[_0xe4bc[90]]?_0xe4bc[2250]:_0xe4bc[110];mxGraphView[_0xe4bc[202]][_0xe4bc[2251]]= !1;mxGraphView[_0xe4bc[202]][_0xe4bc[2252]]= !0;mxGraphView[_0xe4bc[202]][_0xe4bc[2253]]= !0;mxGraphView[_0xe4bc[202]][_0xe4bc[2254]]= !0;mxGraphView[_0xe4bc[202]][_0xe4bc[1179]]=null;mxGraphView[_0xe4bc[202]][_0xe4bc[1741]]=null;mxGraphView[_0xe4bc[202]][_0xe4bc[2247]]=null;mxGraphView[_0xe4bc[202]][_0xe4bc[255]]=1;mxGraphView[_0xe4bc[202]][_0xe4bc[513]]=null;mxGraphView[_0xe4bc[202]][_0xe4bc[2255]]= !1;mxGraphView[_0xe4bc[202]][_0xe4bc[517]]=function(){return this[_0xe4bc[2247]]};mxGraphView[_0xe4bc[202]][_0xe4bc[2256]]=function(_0x5d2ax2){this[_0xe4bc[2247]]=_0x5d2ax2};mxGraphView[_0xe4bc[202]][_0xe4bc[1799]]=function(_0x5d2ax2){var _0x5d2ax3=null;if(null!=_0x5d2ax2&&0<_0x5d2ax2[_0xe4bc[67]]){for(var _0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[502]](),_0x5d2ax5=0;_0x5d2ax5<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax5++){if(_0x5d2ax4[_0xe4bc[1193]](_0x5d2ax2[_0x5d2ax5])||_0x5d2ax4[_0xe4bc[250]](_0x5d2ax2[_0x5d2ax5])){var _0x5d2ax9=this[_0xe4bc[248]](_0x5d2ax2[_0x5d2ax5]);null!=_0x5d2ax9&&(null==_0x5d2ax3?_0x5d2ax3= new mxRectangle(_0x5d2ax9[_0xe4bc[235]],_0x5d2ax9[_0xe4bc[236]],_0x5d2ax9[_0xe4bc[117]],_0x5d2ax9[_0xe4bc[119]]):_0x5d2ax3[_0xe4bc[99]](_0x5d2ax9))}}};return _0x5d2ax3};mxGraphView[_0xe4bc[202]][_0xe4bc[2257]]=function(_0x5d2ax2){if(this[_0xe4bc[1741]]!=_0x5d2ax2){var _0x5d2ax3= new mxCurrentRootChange(this,_0x5d2ax2);_0x5d2ax3[_0xe4bc[350]]();var _0x5d2ax4= new mxUndoableEdit(this,!1);_0x5d2ax4[_0xe4bc[99]](_0x5d2ax3);this[_0xe4bc[746]]( new mxEventObject(mxEvent.UNDO,_0xe4bc[1061],_0x5d2ax4));this[_0xe4bc[1179]][_0xe4bc[2258]]()};return _0x5d2ax2};mxGraphView[_0xe4bc[202]][_0xe4bc[829]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){var _0x5d2ax5=this[_0xe4bc[255]],_0x5d2ax9= new mxPoint(this[_0xe4bc[513]][_0xe4bc[235]],this[_0xe4bc[513]][_0xe4bc[236]]);if(this[_0xe4bc[255]]!=_0x5d2ax2||this[_0xe4bc[513]][_0xe4bc[235]]!=_0x5d2ax3||this[_0xe4bc[513]][_0xe4bc[236]]!=_0x5d2ax4){this[_0xe4bc[255]]=_0x5d2ax2,this[_0xe4bc[513]][_0xe4bc[235]]=_0x5d2ax3,this[_0xe4bc[513]][_0xe4bc[236]]=_0x5d2ax4,this[_0xe4bc[503]]()&&(this[_0xe4bc[2259]](),this[_0xe4bc[1179]][_0xe4bc[2258]]())};this[_0xe4bc[746]]( new mxEventObject(mxEvent.SCALE_AND_TRANSLATE,_0xe4bc[255],_0x5d2ax2,_0xe4bc[2260],_0x5d2ax5,_0xe4bc[513],this[_0xe4bc[513]],_0xe4bc[2261],_0x5d2ax9))};mxGraphView[_0xe4bc[202]][_0xe4bc[518]]=function(){return this[_0xe4bc[255]]};mxGraphView[_0xe4bc[202]][_0xe4bc[2262]]=function(_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[255]];this[_0xe4bc[255]]!=_0x5d2ax2&&(this[_0xe4bc[255]]=_0x5d2ax2,this[_0xe4bc[503]]()&&(this[_0xe4bc[2259]](),this[_0xe4bc[1179]][_0xe4bc[2258]]()));this[_0xe4bc[746]]( new mxEventObject(mxEvent.SCALE,_0xe4bc[255],_0x5d2ax2,_0xe4bc[2260],_0x5d2ax3))};mxGraphView[_0xe4bc[202]][_0xe4bc[512]]=function(){return this[_0xe4bc[513]]};mxGraphView[_0xe4bc[202]][_0xe4bc[1147]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4= new mxPoint(this[_0xe4bc[513]][_0xe4bc[235]],this[_0xe4bc[513]][_0xe4bc[236]]);if(this[_0xe4bc[513]][_0xe4bc[235]]!=_0x5d2ax2||this[_0xe4bc[513]][_0xe4bc[236]]!=_0x5d2ax3){this[_0xe4bc[513]][_0xe4bc[235]]=_0x5d2ax2,this[_0xe4bc[513]][_0xe4bc[236]]=_0x5d2ax3,this[_0xe4bc[503]]()&&(this[_0xe4bc[2259]](),this[_0xe4bc[1179]][_0xe4bc[2258]]())};this[_0xe4bc[746]]( new mxEventObject(mxEvent.TRANSLATE,_0xe4bc[513],this[_0xe4bc[513]],_0xe4bc[2261],_0x5d2ax4))};mxGraphView[_0xe4bc[202]][_0xe4bc[802]]=function(){null!=this[_0xe4bc[1741]]&&this[_0xe4bc[200]]();this[_0xe4bc[2259]]()};mxGraphView[_0xe4bc[202]][_0xe4bc[2259]]=function(){this[_0xe4bc[2263]]();this[_0xe4bc[2264]]()};mxGraphView[_0xe4bc[202]][_0xe4bc[200]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){var _0x5d2ax5=this[_0xe4bc[1179]][_0xe4bc[502]]();_0x5d2ax2=_0x5d2ax2||_0x5d2ax5[_0xe4bc[501]]();_0x5d2ax3=null!=_0x5d2ax3?_0x5d2ax3:!1;_0x5d2ax4=null!=_0x5d2ax4?_0x5d2ax4:!0;this[_0xe4bc[2265]](_0x5d2ax2);if(_0x5d2ax4&&(_0x5d2ax3||_0x5d2ax2!=this[_0xe4bc[1741]])){_0x5d2ax4=_0x5d2ax5[_0xe4bc[262]](_0x5d2ax2);for(var _0x5d2ax9=0;_0x5d2ax9<_0x5d2ax4;_0x5d2ax9++){this[_0xe4bc[200]](_0x5d2ax5[_0xe4bc[263]](_0x5d2ax2,_0x5d2ax9),_0x5d2ax3)}}else {this[_0xe4bc[2263]](_0x5d2ax2)}};mxGraphView[_0xe4bc[202]][_0xe4bc[2263]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){var _0x5d2ax9=this[_0xe4bc[1179]][_0xe4bc[502]]();_0x5d2ax2=_0x5d2ax2||_0x5d2ax9[_0xe4bc[501]]();_0x5d2ax3=null!=_0x5d2ax3?_0x5d2ax3:!0;_0x5d2ax4=null!=_0x5d2ax4?_0x5d2ax4:!0;_0x5d2ax5=null!=_0x5d2ax5?_0x5d2ax5:!1;var _0x5d2axa=this[_0xe4bc[248]](_0x5d2ax2);null!=_0x5d2axa&&(_0x5d2axa[_0xe4bc[2080]]= !0,_0x5d2ax5&&(_0x5d2axa[_0xe4bc[2082]]= !0));if(_0x5d2ax3){for(var _0x5d2ax12=_0x5d2ax9[_0xe4bc[262]](_0x5d2ax2),_0x5d2axa=0;_0x5d2axa<_0x5d2ax12;_0x5d2axa++){var _0x5d2ax13=_0x5d2ax9[_0xe4bc[263]](_0x5d2ax2,_0x5d2axa);this[_0xe4bc[2263]](_0x5d2ax13,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5)}};if(_0x5d2ax4){_0x5d2ax5=_0x5d2ax9[_0xe4bc[1707]](_0x5d2ax2);for(_0x5d2axa=0;_0x5d2axa<_0x5d2ax5;_0x5d2axa++){this[_0xe4bc[2263]](_0x5d2ax9[_0xe4bc[1708]](_0x5d2ax2,_0x5d2axa),_0x5d2ax3,_0x5d2ax4)}}};mxGraphView[_0xe4bc[202]][_0xe4bc[2264]]=function(_0x5d2ax2){var _0x5d2ax3=mxLog[_0xe4bc[2109]](_0xe4bc[2266]);window[_0xe4bc[879]]=mxResources[_0xe4bc[203]](this[_0xe4bc[2249]])||this[_0xe4bc[2249]];var _0x5d2ax4=null;if(this[_0xe4bc[2253]]&&null!=this[_0xe4bc[510]]&&null==this[_0xe4bc[1653]]&&(8==document[_0xe4bc[5]]||mxClient[_0xe4bc[496]])){_0x5d2ax4=this[_0xe4bc[510]][_0xe4bc[124]][_0xe4bc[495]];this[_0xe4bc[510]][_0xe4bc[124]][_0xe4bc[495]]=_0xe4bc[130];var _0x5d2ax5=document[_0xe4bc[55]](_0xe4bc[485]);_0x5d2ax5[_0xe4bc[124]][_0xe4bc[491]]=_0xe4bc[492];_0x5d2ax5[_0xe4bc[124]][_0xe4bc[493]]=_0xe4bc[494];_0x5d2ax5[_0xe4bc[124]][_0xe4bc[187]]=_0xe4bc[188];_0x5d2ax5[_0xe4bc[124]][_0xe4bc[495]]=mxClient[_0xe4bc[496]]?_0xe4bc[497]:_0xe4bc[498];_0x5d2ax5[_0xe4bc[124]][_0xe4bc[499]]=_0xe4bc[500];document[_0xe4bc[112]][_0xe4bc[62]](_0x5d2ax5);this[_0xe4bc[1653]]=_0x5d2ax5};_0x5d2ax2=_0x5d2ax2||(null!=this[_0xe4bc[1741]]?this[_0xe4bc[1741]]:this[_0xe4bc[1179]][_0xe4bc[502]]()[_0xe4bc[501]]());this[_0xe4bc[2267]](null,_0x5d2ax2);_0x5d2ax2=this[_0xe4bc[2268]](null,_0x5d2ax2);null==_0x5d2ax2&&(_0x5d2ax2= new mxRectangle);this[_0xe4bc[2256]](_0x5d2ax2);this[_0xe4bc[2269]]();null!=_0x5d2ax4&&(this[_0xe4bc[510]][_0xe4bc[124]][_0xe4bc[495]]=_0x5d2ax4,document[_0xe4bc[112]][_0xe4bc[266]](this[_0xe4bc[1653]]),this[_0xe4bc[1653]]=null);window[_0xe4bc[879]]=mxResources[_0xe4bc[203]](this[_0xe4bc[2091]])||this[_0xe4bc[2091]];mxLog[_0xe4bc[2110]](_0xe4bc[2266],_0x5d2ax3)};mxGraphView[_0xe4bc[202]][_0xe4bc[2270]]=function(_0x5d2ax2){return  new mxRectangleShape(_0x5d2ax2,_0xe4bc[1391],_0xe4bc[586])};mxGraphView[_0xe4bc[202]][_0xe4bc[2269]]=function(){var _0x5d2ax2=this[_0xe4bc[1179]][_0xe4bc[2271]]();if(null!=_0x5d2ax2){if(null==this[_0xe4bc[1617]]||this[_0xe4bc[1617]][_0xe4bc[618]]!=_0x5d2ax2[_0xe4bc[390]]){null!=this[_0xe4bc[1617]]&&this[_0xe4bc[1617]][_0xe4bc[515]]();var _0x5d2ax3= new mxRectangle(0,0,1,1);this[_0xe4bc[1617]]= new mxImageShape(_0x5d2ax3,_0x5d2ax2[_0xe4bc[390]]);this[_0xe4bc[1617]][_0xe4bc[507]]=this[_0xe4bc[1179]][_0xe4bc[507]];this[_0xe4bc[1617]][_0xe4bc[176]](this[_0xe4bc[2053]]);this[_0xe4bc[1617]][_0xe4bc[258]]()};this[_0xe4bc[2272]](this[_0xe4bc[1617]],_0x5d2ax2)}else {null!=this[_0xe4bc[1617]]&&(this[_0xe4bc[1617]][_0xe4bc[515]](),this[_0xe4bc[1617]]=null)};this[_0xe4bc[1179]][_0xe4bc[2273]]?(_0x5d2ax3=this[_0xe4bc[2274]](),null==this[_0xe4bc[2275]]?(this[_0xe4bc[2275]]=this[_0xe4bc[2270]](_0x5d2ax3),this[_0xe4bc[2275]][_0xe4bc[255]]=this[_0xe4bc[255]],this[_0xe4bc[2275]][_0xe4bc[1596]]= !0,this[_0xe4bc[2275]][_0xe4bc[507]]=this[_0xe4bc[1179]][_0xe4bc[507]],this[_0xe4bc[2275]][_0xe4bc[176]](this[_0xe4bc[2053]]),this[_0xe4bc[2275]][_0xe4bc[258]](),mxEvent[_0xe4bc[169]](this[_0xe4bc[2275]][_0xe4bc[252]],_0xe4bc[760],mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){this[_0xe4bc[1179]][_0xe4bc[761]](_0x5d2ax2)})),mxEvent[_0xe4bc[759]](this[_0xe4bc[2275]][_0xe4bc[252]],mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){this[_0xe4bc[1179]][_0xe4bc[758]](mxEvent.MOUSE_DOWN, new mxMouseEvent(_0x5d2ax2))}),mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){null!=this[_0xe4bc[1179]][_0xe4bc[2276]]&&this[_0xe4bc[1179]][_0xe4bc[2276]][_0xe4bc[2277]]()&&this[_0xe4bc[1179]][_0xe4bc[2276]][_0xe4bc[801]]();this[_0xe4bc[1179]][_0xe4bc[1009]]&&!mxEvent[_0xe4bc[721]](_0x5d2ax2)&&this[_0xe4bc[1179]][_0xe4bc[758]](mxEvent.MOUSE_MOVE, new mxMouseEvent(_0x5d2ax2))}),mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){this[_0xe4bc[1179]][_0xe4bc[758]](mxEvent.MOUSE_UP, new mxMouseEvent(_0x5d2ax2))}))):(this[_0xe4bc[2275]][_0xe4bc[255]]=this[_0xe4bc[255]],this[_0xe4bc[2275]][_0xe4bc[1562]]=_0x5d2ax3,this[_0xe4bc[2275]][_0xe4bc[258]]())):null!=this[_0xe4bc[2275]]&&(this[_0xe4bc[2275]][_0xe4bc[515]](),this[_0xe4bc[2275]]=null)};mxGraphView[_0xe4bc[202]][_0xe4bc[2274]]=function(){var _0x5d2ax2=this[_0xe4bc[1179]][_0xe4bc[2013]],_0x5d2ax3=this[_0xe4bc[255]]*this[_0xe4bc[1179]][_0xe4bc[2012]];return  new mxRectangle(this[_0xe4bc[255]]*this[_0xe4bc[513]][_0xe4bc[235]],this[_0xe4bc[255]]*this[_0xe4bc[513]][_0xe4bc[236]],_0x5d2ax2[_0xe4bc[117]]*_0x5d2ax3,_0x5d2ax2[_0xe4bc[119]]*_0x5d2ax3)};mxGraphView[_0xe4bc[202]][_0xe4bc[2272]]=function(_0x5d2ax2,_0x5d2ax3){_0x5d2ax2[_0xe4bc[255]]=this[_0xe4bc[255]];_0x5d2ax2[_0xe4bc[1562]][_0xe4bc[235]]=this[_0xe4bc[255]]*this[_0xe4bc[513]][_0xe4bc[235]];_0x5d2ax2[_0xe4bc[1562]][_0xe4bc[236]]=this[_0xe4bc[255]]*this[_0xe4bc[513]][_0xe4bc[236]];_0x5d2ax2[_0xe4bc[1562]][_0xe4bc[117]]=this[_0xe4bc[255]]*_0x5d2ax3[_0xe4bc[117]];_0x5d2ax2[_0xe4bc[1562]][_0xe4bc[119]]=this[_0xe4bc[255]]*_0x5d2ax3[_0xe4bc[119]];_0x5d2ax2[_0xe4bc[258]]()};mxGraphView[_0xe4bc[202]][_0xe4bc[2267]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[502]](),_0x5d2ax5=this[_0xe4bc[248]](_0x5d2ax3,!0);if(null!=_0x5d2ax5&&_0x5d2ax5[_0xe4bc[2080]]){if(this[_0xe4bc[1179]][_0xe4bc[1714]](_0x5d2ax3)){if(_0x5d2ax3!=this[_0xe4bc[1741]]&&null!=_0x5d2ax2){_0x5d2ax5[_0xe4bc[2079]][_0xe4bc[235]]=0;_0x5d2ax5[_0xe4bc[2079]][_0xe4bc[236]]=0;_0x5d2ax5[_0xe4bc[2078]][_0xe4bc[235]]=_0x5d2ax2[_0xe4bc[2078]][_0xe4bc[235]];_0x5d2ax5[_0xe4bc[2078]][_0xe4bc[236]]=_0x5d2ax2[_0xe4bc[2078]][_0xe4bc[236]];var _0x5d2ax9=this[_0xe4bc[1179]][_0xe4bc[1198]](_0x5d2ax3);if(null!=_0x5d2ax9){if(!_0x5d2ax4[_0xe4bc[250]](_0x5d2ax3)){var _0x5d2axa=_0x5d2ax9[_0xe4bc[1368]]||this[_0xe4bc[2248]];_0x5d2ax9[_0xe4bc[1500]]?(_0x5d2ax5[_0xe4bc[2078]][_0xe4bc[235]]+=_0x5d2ax9[_0xe4bc[235]]*_0x5d2ax2[_0xe4bc[117]]/this[_0xe4bc[255]]+_0x5d2axa[_0xe4bc[235]],_0x5d2ax5[_0xe4bc[2078]][_0xe4bc[236]]+=_0x5d2ax9[_0xe4bc[236]]*_0x5d2ax2[_0xe4bc[119]]/this[_0xe4bc[255]]+_0x5d2axa[_0xe4bc[236]]):(_0x5d2ax5[_0xe4bc[2079]][_0xe4bc[235]]=this[_0xe4bc[255]]*_0x5d2axa[_0xe4bc[235]],_0x5d2ax5[_0xe4bc[2079]][_0xe4bc[236]]=this[_0xe4bc[255]]*_0x5d2axa[_0xe4bc[236]],_0x5d2ax5[_0xe4bc[2078]][_0xe4bc[235]]+=_0x5d2ax9[_0xe4bc[235]],_0x5d2ax5[_0xe4bc[2078]][_0xe4bc[236]]+=_0x5d2ax9[_0xe4bc[236]])};_0x5d2ax5[_0xe4bc[235]]=this[_0xe4bc[255]]*(this[_0xe4bc[513]][_0xe4bc[235]]+_0x5d2ax5[_0xe4bc[2078]][_0xe4bc[235]]);_0x5d2ax5[_0xe4bc[236]]=this[_0xe4bc[255]]*(this[_0xe4bc[513]][_0xe4bc[236]]+_0x5d2ax5[_0xe4bc[2078]][_0xe4bc[236]]);_0x5d2ax5[_0xe4bc[117]]=this[_0xe4bc[255]]*_0x5d2ax9[_0xe4bc[117]];_0x5d2ax5[_0xe4bc[119]]=this[_0xe4bc[255]]*_0x5d2ax9[_0xe4bc[119]];if(_0x5d2ax4[_0xe4bc[1193]](_0x5d2ax3)){if(_0x5d2ax9[_0xe4bc[1500]]&&(_0x5d2axa=mxUtils[_0xe4bc[431]](_0x5d2ax2[_0xe4bc[124]][mxConstants[_0xe4bc[2278]]]||_0xe4bc[468]),0!=_0x5d2axa)){var _0x5d2ax9=Math[_0xe4bc[426]](_0x5d2axa),_0x5d2axa=Math[_0xe4bc[427]](_0x5d2axa),_0x5d2ax12= new mxPoint(_0x5d2ax5[_0xe4bc[241]](),_0x5d2ax5[_0xe4bc[242]]()),_0x5d2ax13= new mxPoint(_0x5d2ax2[_0xe4bc[241]](),_0x5d2ax2[_0xe4bc[242]]()),_0x5d2ax9=mxUtils[_0xe4bc[432]](_0x5d2ax12,_0x5d2ax9,_0x5d2axa,_0x5d2ax13);_0x5d2ax5[_0xe4bc[235]]=_0x5d2ax9[_0xe4bc[235]]-_0x5d2ax5[_0xe4bc[117]]/2;_0x5d2ax5[_0xe4bc[236]]=_0x5d2ax9[_0xe4bc[236]]-_0x5d2ax5[_0xe4bc[119]]/2};this[_0xe4bc[2279]](_0x5d2ax5)}}}}else {this[_0xe4bc[2265]](_0x5d2ax3)};_0x5d2axa=this[_0xe4bc[1179]][_0xe4bc[2280]](_0x5d2ax3);null!=_0x5d2axa&&(_0x5d2ax5[_0xe4bc[2078]][_0xe4bc[235]]+=_0x5d2axa[_0xe4bc[235]],_0x5d2ax5[_0xe4bc[2078]][_0xe4bc[236]]+=_0x5d2axa[_0xe4bc[236]])};if(null!=_0x5d2ax5&&(!this[_0xe4bc[1179]][_0xe4bc[1742]](_0x5d2ax3)||_0x5d2ax3==this[_0xe4bc[1741]])){_0x5d2ax9=_0x5d2ax4[_0xe4bc[262]](_0x5d2ax3);for(_0x5d2axa=0;_0x5d2axa<_0x5d2ax9;_0x5d2axa++){_0x5d2ax12=_0x5d2ax4[_0xe4bc[263]](_0x5d2ax3,_0x5d2axa),this[_0xe4bc[2267]](_0x5d2ax5,_0x5d2ax12)}}};mxGraphView[_0xe4bc[202]][_0xe4bc[2279]]=function(_0x5d2ax2){var _0x5d2ax3=mxUtils[_0xe4bc[433]](_0x5d2ax2[_0xe4bc[124]],mxConstants.STYLE_LABEL_POSITION,mxConstants.ALIGN_CENTER);_0x5d2ax3==mxConstants[_0xe4bc[2132]]?_0x5d2ax2[_0xe4bc[2079]][_0xe4bc[235]]-=_0x5d2ax2[_0xe4bc[117]]:_0x5d2ax3==mxConstants[_0xe4bc[480]]&&(_0x5d2ax2[_0xe4bc[2079]][_0xe4bc[235]]+=_0x5d2ax2[_0xe4bc[117]]);_0x5d2ax3=mxUtils[_0xe4bc[433]](_0x5d2ax2[_0xe4bc[124]],mxConstants.STYLE_VERTICAL_LABEL_POSITION,mxConstants.ALIGN_MIDDLE);_0x5d2ax3==mxConstants[_0xe4bc[1687]]?_0x5d2ax2[_0xe4bc[2079]][_0xe4bc[236]]-=_0x5d2ax2[_0xe4bc[119]]:_0x5d2ax3==mxConstants[_0xe4bc[482]]&&(_0x5d2ax2[_0xe4bc[2079]][_0xe4bc[236]]+=_0x5d2ax2[_0xe4bc[119]])};mxGraphView[_0xe4bc[202]][_0xe4bc[2268]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[502]](),_0x5d2ax5=this[_0xe4bc[248]](_0x5d2ax3),_0x5d2ax9=null;if(null!=_0x5d2ax5){if(_0x5d2ax5[_0xe4bc[2080]]){var _0x5d2axa=this[_0xe4bc[1179]][_0xe4bc[1198]](_0x5d2ax3);if(null!=_0x5d2axa&&_0x5d2ax4[_0xe4bc[250]](_0x5d2ax3)){var _0x5d2ax12=this[_0xe4bc[248]](this[_0xe4bc[1710]](_0x5d2ax3,!0));_0x5d2ax5[_0xe4bc[2090]](_0x5d2ax12,!0);if(null!=_0x5d2ax12&&_0x5d2ax4[_0xe4bc[250]](_0x5d2ax12[_0xe4bc[246]])&&!_0x5d2ax4[_0xe4bc[1720]](_0x5d2ax12[_0xe4bc[246]],_0x5d2ax3)){var _0x5d2ax13=this[_0xe4bc[248]](_0x5d2ax4[_0xe4bc[1197]](_0x5d2ax12[_0xe4bc[246]]));this[_0xe4bc[2268]](_0x5d2ax13,_0x5d2ax12[_0xe4bc[246]])};var _0x5d2ax14=this[_0xe4bc[248]](this[_0xe4bc[1710]](_0x5d2ax3,!1));_0x5d2ax5[_0xe4bc[2090]](_0x5d2ax14,!1);null!=_0x5d2ax14&&(_0x5d2ax4[_0xe4bc[250]](_0x5d2ax14[_0xe4bc[246]])&&!_0x5d2ax4[_0xe4bc[1720]](_0x5d2ax14[_0xe4bc[246]],_0x5d2ax3))&&(_0x5d2ax13=this[_0xe4bc[248]](_0x5d2ax4[_0xe4bc[1197]](_0x5d2ax14[_0xe4bc[246]])),this[_0xe4bc[2268]](_0x5d2ax13,_0x5d2ax14[_0xe4bc[246]]));this[_0xe4bc[2281]](_0x5d2ax5,_0x5d2ax12,_0x5d2ax14);this[_0xe4bc[2282]](_0x5d2ax5,_0x5d2axa[_0xe4bc[1525]],_0x5d2ax12,_0x5d2ax14);this[_0xe4bc[2283]](_0x5d2ax5,_0x5d2ax12,_0x5d2ax14);this[_0xe4bc[2284]](_0x5d2ax5);this[_0xe4bc[2285]](_0x5d2ax5)}else {null!=_0x5d2axa&&(_0x5d2axa[_0xe4bc[1500]]&&null!=_0x5d2ax2&&_0x5d2ax4[_0xe4bc[250]](_0x5d2ax2[_0xe4bc[246]]))&&(_0x5d2axa=this[_0xe4bc[245]](_0x5d2ax2,_0x5d2axa),null!=_0x5d2axa&&(_0x5d2ax5[_0xe4bc[235]]=_0x5d2axa[_0xe4bc[235]],_0x5d2ax5[_0xe4bc[236]]=_0x5d2axa[_0xe4bc[236]],_0x5d2axa[_0xe4bc[235]]=_0x5d2axa[_0xe4bc[235]]/this[_0xe4bc[255]]-this[_0xe4bc[513]][_0xe4bc[235]],_0x5d2axa[_0xe4bc[236]]=_0x5d2axa[_0xe4bc[236]]/this[_0xe4bc[255]]-this[_0xe4bc[513]][_0xe4bc[236]],_0x5d2ax5[_0xe4bc[2078]]=_0x5d2axa,this[_0xe4bc[2286]](_0x5d2ax2,_0x5d2ax5)))};_0x5d2ax5[_0xe4bc[2080]]= !1;_0x5d2ax3!=this[_0xe4bc[1741]]&&this[_0xe4bc[1179]][_0xe4bc[259]][_0xe4bc[258]](_0x5d2ax5,!1,this[_0xe4bc[2287]]())};if(_0x5d2ax4[_0xe4bc[250]](_0x5d2ax3)||_0x5d2ax4[_0xe4bc[1193]](_0x5d2ax3)){null!=_0x5d2ax5[_0xe4bc[253]]&&null!=_0x5d2ax5[_0xe4bc[253]][_0xe4bc[1563]]&&(_0x5d2ax9=_0x5d2ax5[_0xe4bc[253]][_0xe4bc[1563]][_0xe4bc[238]]()),null!=_0x5d2ax5[_0xe4bc[963]]&&!this[_0xe4bc[1179]][_0xe4bc[2130]](_0x5d2ax5[_0xe4bc[246]])&&null!=_0x5d2ax5[_0xe4bc[963]][_0xe4bc[1563]]&&(null!=_0x5d2ax9?_0x5d2ax9[_0xe4bc[99]](_0x5d2ax5[_0xe4bc[963]][_0xe4bc[1563]]):_0x5d2ax9=_0x5d2ax5[_0xe4bc[963]][_0xe4bc[1563]][_0xe4bc[238]]())}};if(null!=_0x5d2ax5&&(!this[_0xe4bc[1179]][_0xe4bc[1742]](_0x5d2ax3)||_0x5d2ax3==this[_0xe4bc[1741]])){_0x5d2axa=_0x5d2ax4[_0xe4bc[262]](_0x5d2ax3);for(_0x5d2ax12=0;_0x5d2ax12<_0x5d2axa;_0x5d2ax12++){_0x5d2ax13=_0x5d2ax4[_0xe4bc[263]](_0x5d2ax3,_0x5d2ax12),_0x5d2ax13=this[_0xe4bc[2268]](_0x5d2ax5,_0x5d2ax13),null!=_0x5d2ax13&&(null==_0x5d2ax9?_0x5d2ax9=_0x5d2ax13:_0x5d2ax9[_0xe4bc[99]](_0x5d2ax13))}};return _0x5d2ax9};mxGraphView[_0xe4bc[202]][_0xe4bc[2286]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=_0x5d2ax3[_0xe4bc[246]];if(!this[_0xe4bc[1179]][_0xe4bc[1742]](_0x5d2ax4)||_0x5d2ax4==this[_0xe4bc[1741]]){for(var _0x5d2ax5=this[_0xe4bc[1179]][_0xe4bc[502]](),_0x5d2ax9=_0x5d2ax5[_0xe4bc[262]](_0x5d2ax4),_0x5d2axa=0;_0x5d2axa<_0x5d2ax9;_0x5d2axa++){this[_0xe4bc[2267]](_0x5d2ax3,_0x5d2ax5[_0xe4bc[263]](_0x5d2ax4,_0x5d2axa))}}};mxGraphView[_0xe4bc[202]][_0xe4bc[2281]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){this[_0xe4bc[2289]](_0x5d2ax2,_0x5d2ax3,!0,this[_0xe4bc[1179]][_0xe4bc[2288]](_0x5d2ax2,_0x5d2ax3,!0));this[_0xe4bc[2289]](_0x5d2ax2,_0x5d2ax4,!1,this[_0xe4bc[1179]][_0xe4bc[2288]](_0x5d2ax2,_0x5d2ax4,!1))};mxGraphView[_0xe4bc[202]][_0xe4bc[2289]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){var _0x5d2ax9=null;null!=_0x5d2ax5&&(_0x5d2ax9=this[_0xe4bc[1179]][_0xe4bc[2290]](_0x5d2ax3,_0x5d2ax5));if(null==_0x5d2ax9&&null==_0x5d2ax3){_0x5d2ax3=this[_0xe4bc[255]];_0x5d2ax5=this[_0xe4bc[513]];var _0x5d2axa=_0x5d2ax2[_0xe4bc[2078]],_0x5d2ax9=this[_0xe4bc[1179]][_0xe4bc[1198]](_0x5d2ax2[_0xe4bc[246]])[_0xe4bc[2006]](_0x5d2ax4);null!=_0x5d2ax9&&(_0x5d2ax9= new mxPoint(_0x5d2ax3*(_0x5d2ax5[_0xe4bc[235]]+_0x5d2ax9[_0xe4bc[235]]+_0x5d2axa[_0xe4bc[235]]),_0x5d2ax3*(_0x5d2ax5[_0xe4bc[236]]+_0x5d2ax9[_0xe4bc[236]]+_0x5d2axa[_0xe4bc[236]])))};_0x5d2ax2[_0xe4bc[2088]](_0x5d2ax9,_0x5d2ax4)};mxGraphView[_0xe4bc[202]][_0xe4bc[2282]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){if(null!=_0x5d2ax2){var _0x5d2ax9=[];_0x5d2ax9[_0xe4bc[207]](_0x5d2ax2[_0xe4bc[439]][0]);var _0x5d2axa=this[_0xe4bc[2291]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5);if(null!=_0x5d2axa){_0x5d2ax4=this[_0xe4bc[2292]](_0x5d2ax2,_0x5d2ax4,!0),_0x5d2ax5=this[_0xe4bc[2292]](_0x5d2ax2,_0x5d2ax5,!1),_0x5d2axa(_0x5d2ax2,_0x5d2ax4,_0x5d2ax5,_0x5d2ax3,_0x5d2ax9)}else {if(null!=_0x5d2ax3){for(_0x5d2axa=0;_0x5d2axa<_0x5d2ax3[_0xe4bc[67]];_0x5d2axa++){null!=_0x5d2ax3[_0x5d2axa]&&(_0x5d2ax5=mxUtils[_0xe4bc[238]](_0x5d2ax3[_0x5d2axa]),_0x5d2ax9[_0xe4bc[207]](this[_0xe4bc[2229]](_0x5d2ax2,_0x5d2ax5)))}}};_0x5d2ax3=_0x5d2ax2[_0xe4bc[439]];_0x5d2ax9[_0xe4bc[207]](_0x5d2ax3[_0x5d2ax3[_0xe4bc[67]]-1]);_0x5d2ax2[_0xe4bc[439]]=_0x5d2ax9}};mxGraphView[_0xe4bc[202]][_0xe4bc[2229]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=_0x5d2ax2[_0xe4bc[2078]];return  new mxPoint(this[_0xe4bc[255]]*(_0x5d2ax3[_0xe4bc[235]]+this[_0xe4bc[513]][_0xe4bc[235]]+_0x5d2ax4[_0xe4bc[235]]),this[_0xe4bc[255]]*(_0x5d2ax3[_0xe4bc[236]]+this[_0xe4bc[513]][_0xe4bc[236]]+_0x5d2ax4[_0xe4bc[236]]))};mxGraphView[_0xe4bc[202]][_0xe4bc[2291]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){_0x5d2ax2=null!=_0x5d2ax4&&_0x5d2ax4==_0x5d2ax5?mxUtils[_0xe4bc[433]](_0x5d2ax2[_0xe4bc[124]],mxConstants.STYLE_LOOP,this[_0xe4bc[1179]][_0xe4bc[2293]]):!mxUtils[_0xe4bc[433]](_0x5d2ax2[_0xe4bc[124]],mxConstants.STYLE_NOEDGESTYLE,!1)?_0x5d2ax2[_0xe4bc[124]][mxConstants[_0xe4bc[2294]]]:null;_0xe4bc[1516]== typeof _0x5d2ax2&&(_0x5d2ax3=mxStyleRegistry[_0xe4bc[433]](_0x5d2ax2),null==_0x5d2ax3&&this[_0xe4bc[2295]]()&&(_0x5d2ax3=mxUtils[_0xe4bc[1545]](_0x5d2ax2)),_0x5d2ax2=_0x5d2ax3);return _0xe4bc[279]== typeof _0x5d2ax2?_0x5d2ax2:null};mxGraphView[_0xe4bc[202]][_0xe4bc[2283]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){var _0x5d2ax5=_0x5d2ax2[_0xe4bc[439]],_0x5d2ax9=_0x5d2ax5[0];null==_0x5d2ax5[_0x5d2ax5[_0xe4bc[67]]-1]&&null!=_0x5d2ax4&&this[_0xe4bc[2296]](_0x5d2ax2,_0x5d2ax4,_0x5d2ax3,!1);null==_0x5d2ax9&&null!=_0x5d2ax3&&this[_0xe4bc[2296]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,!0)};mxGraphView[_0xe4bc[202]][_0xe4bc[2296]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){_0x5d2ax3=this[_0xe4bc[2292]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax5);var _0x5d2ax9=this[_0xe4bc[2297]](_0x5d2ax2,_0x5d2ax4,_0x5d2ax5),_0x5d2axa=this[_0xe4bc[1179]][_0xe4bc[2298]](_0x5d2ax2);_0x5d2ax4=mxUtils[_0xe4bc[431]](Number(_0x5d2ax3[_0xe4bc[124]][mxConstants[_0xe4bc[2278]]]||_0xe4bc[468]));var _0x5d2ax12= new mxPoint(_0x5d2ax3[_0xe4bc[241]](),_0x5d2ax3[_0xe4bc[242]]());if(0!=_0x5d2ax4){var _0x5d2ax13=Math[_0xe4bc[426]](-_0x5d2ax4),_0x5d2ax14=Math[_0xe4bc[427]](-_0x5d2ax4),_0x5d2ax9=mxUtils[_0xe4bc[432]](_0x5d2ax9,_0x5d2ax13,_0x5d2ax14,_0x5d2ax12)};_0x5d2ax13=parseFloat(_0x5d2ax2[_0xe4bc[124]][mxConstants[_0xe4bc[2299]]]||0);_0x5d2ax13+=parseFloat(_0x5d2ax2[_0xe4bc[124]][_0x5d2ax5?mxConstants[_0xe4bc[2300]]:mxConstants[_0xe4bc[2301]]]||0);_0x5d2ax3=this[_0xe4bc[2302]](_0x5d2ax3,_0x5d2ax9,0==_0x5d2ax4&&_0x5d2axa,_0x5d2ax13);0!=_0x5d2ax4&&(_0x5d2ax13=Math[_0xe4bc[426]](_0x5d2ax4),_0x5d2ax14=Math[_0xe4bc[427]](_0x5d2ax4),_0x5d2ax3=mxUtils[_0xe4bc[432]](_0x5d2ax3,_0x5d2ax13,_0x5d2ax14,_0x5d2ax12));_0x5d2ax2[_0xe4bc[2088]](_0x5d2ax3,_0x5d2ax5)};mxGraphView[_0xe4bc[202]][_0xe4bc[2292]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){_0x5d2ax2=mxUtils[_0xe4bc[433]](_0x5d2ax2[_0xe4bc[124]],_0x5d2ax4?mxConstants[_0xe4bc[2303]]:mxConstants[_0xe4bc[2304]]);null!=_0x5d2ax2&&(_0x5d2ax2=this[_0xe4bc[248]](this[_0xe4bc[1179]][_0xe4bc[502]]()[_0xe4bc[736]](_0x5d2ax2)),null!=_0x5d2ax2&&(_0x5d2ax3=_0x5d2ax2));return _0x5d2ax3};mxGraphView[_0xe4bc[202]][_0xe4bc[2302]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){var _0x5d2ax9=null;if(null!=_0x5d2ax2){var _0x5d2axa=this[_0xe4bc[2305]](_0x5d2ax2);if(null!=_0x5d2axa&&null!=_0x5d2ax3&&(_0x5d2ax5=this[_0xe4bc[2087]](_0x5d2ax2,_0x5d2ax5),0<_0x5d2ax5[_0xe4bc[117]]||0<_0x5d2ax5[_0xe4bc[119]])){_0x5d2ax9=_0x5d2axa(_0x5d2ax5,_0x5d2ax2,_0x5d2ax3,_0x5d2ax4)};null==_0x5d2ax9&&(_0x5d2ax9=this[_0xe4bc[245]](_0x5d2ax2))};return _0x5d2ax9};mxGraphView[_0xe4bc[202]][_0xe4bc[2230]]=function(_0x5d2ax2){var _0x5d2ax3=null!=_0x5d2ax2[_0xe4bc[124]]?parseFloat(_0x5d2ax2[_0xe4bc[124]][mxConstants[_0xe4bc[2306]]])||0:0;return _0x5d2ax2[_0xe4bc[241]]()+_0x5d2ax3*_0x5d2ax2[_0xe4bc[117]]};mxGraphView[_0xe4bc[202]][_0xe4bc[2228]]=function(_0x5d2ax2){var _0x5d2ax3=null!=_0x5d2ax2[_0xe4bc[124]]?parseFloat(_0x5d2ax2[_0xe4bc[124]][mxConstants[_0xe4bc[2307]]])||0:0;return _0x5d2ax2[_0xe4bc[242]]()+_0x5d2ax3*_0x5d2ax2[_0xe4bc[119]]};mxGraphView[_0xe4bc[202]][_0xe4bc[2087]]=function(_0x5d2ax2,_0x5d2ax3){_0x5d2ax3=null!=_0x5d2ax3?_0x5d2ax3:0;null!=_0x5d2ax2&&(_0x5d2ax3+=parseFloat(_0x5d2ax2[_0xe4bc[124]][mxConstants[_0xe4bc[2299]]]||0));return _0x5d2ax2[_0xe4bc[2087]](_0x5d2ax3*this[_0xe4bc[255]])};mxGraphView[_0xe4bc[202]][_0xe4bc[2305]]=function(_0x5d2ax2){_0x5d2ax2=_0x5d2ax2[_0xe4bc[124]][mxConstants[_0xe4bc[2061]]];if(_0xe4bc[1516]== typeof _0x5d2ax2){var _0x5d2ax3=mxStyleRegistry[_0xe4bc[433]](_0x5d2ax2);null==_0x5d2ax3&&this[_0xe4bc[2295]]()&&(_0x5d2ax3=mxUtils[_0xe4bc[1545]](_0x5d2ax2));_0x5d2ax2=_0x5d2ax3};return _0xe4bc[279]== typeof _0x5d2ax2?_0x5d2ax2:null};mxGraphView[_0xe4bc[202]][_0xe4bc[2297]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){_0x5d2ax2=_0x5d2ax2[_0xe4bc[439]];var _0x5d2ax5=null;if(null!=_0x5d2ax2&&(_0x5d2ax4||2<_0x5d2ax2[_0xe4bc[67]]||null==_0x5d2ax3)){_0x5d2ax5=_0x5d2ax2[_0xe4bc[67]],_0x5d2ax5=_0x5d2ax2[_0x5d2ax4?Math[_0xe4bc[243]](1,_0x5d2ax5-1):Math[_0xe4bc[160]](0,_0x5d2ax5-2)]};null==_0x5d2ax5&&null!=_0x5d2ax3&&(_0x5d2ax5= new mxPoint(_0x5d2ax3[_0xe4bc[241]](),_0x5d2ax3[_0xe4bc[242]]()));return _0x5d2ax5};mxGraphView[_0xe4bc[202]][_0xe4bc[1710]]=function(_0x5d2ax2,_0x5d2ax3){for(var _0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[502]](),_0x5d2ax5=_0x5d2ax4[_0xe4bc[1709]](_0x5d2ax2,_0x5d2ax3),_0x5d2ax9=_0x5d2ax5;null!=_0x5d2ax5&&_0x5d2ax5!=this[_0xe4bc[1741]];){if(!this[_0xe4bc[1179]][_0xe4bc[1714]](_0x5d2ax9)||this[_0xe4bc[1179]][_0xe4bc[1742]](_0x5d2ax5)){_0x5d2ax9=_0x5d2ax5};_0x5d2ax5=_0x5d2ax4[_0xe4bc[1197]](_0x5d2ax5)};_0x5d2ax4[_0xe4bc[1197]](_0x5d2ax9)==_0x5d2ax4[_0xe4bc[501]]()&&(_0x5d2ax9=null);return _0x5d2ax9};mxGraphView[_0xe4bc[202]][_0xe4bc[2284]]=function(_0x5d2ax2){var _0x5d2ax3=_0x5d2ax2[_0xe4bc[439]];_0x5d2ax2[_0xe4bc[67]]=0;if(null!=_0x5d2ax3&&0<_0x5d2ax3[_0xe4bc[67]]){var _0x5d2ax4=_0x5d2ax3[0],_0x5d2ax5=_0x5d2ax3[_0x5d2ax3[_0xe4bc[67]]-1];if(null==_0x5d2ax4||null==_0x5d2ax5){_0x5d2ax2[_0xe4bc[246]]!=this[_0xe4bc[1741]]&&this[_0xe4bc[200]](_0x5d2ax2[_0xe4bc[246]],!0)}else {if(_0x5d2ax4[_0xe4bc[235]]!=_0x5d2ax5[_0xe4bc[235]]||_0x5d2ax4[_0xe4bc[236]]!=_0x5d2ax5[_0xe4bc[236]]){var _0x5d2ax9=_0x5d2ax5[_0xe4bc[235]]-_0x5d2ax4[_0xe4bc[235]],_0x5d2axa=_0x5d2ax5[_0xe4bc[236]]-_0x5d2ax4[_0xe4bc[236]];_0x5d2ax2[_0xe4bc[2085]]=Math[_0xe4bc[428]](_0x5d2ax9*_0x5d2ax9+_0x5d2axa*_0x5d2axa)}else {_0x5d2ax2[_0xe4bc[2085]]=0};var _0x5d2ax5=0,_0x5d2ax12=[],_0x5d2axa=_0x5d2ax4;if(null!=_0x5d2axa){for(var _0x5d2ax4=_0x5d2axa[_0xe4bc[235]],_0x5d2ax13=_0x5d2axa[_0xe4bc[236]],_0x5d2ax14=_0x5d2ax4,_0x5d2ax15=_0x5d2ax13,_0x5d2ax16=1;_0x5d2ax16<_0x5d2ax3[_0xe4bc[67]];_0x5d2ax16++){var _0x5d2ax17=_0x5d2ax3[_0x5d2ax16];null!=_0x5d2ax17&&(_0x5d2ax9=_0x5d2axa[_0xe4bc[235]]-_0x5d2ax17[_0xe4bc[235]],_0x5d2axa=_0x5d2axa[_0xe4bc[236]]-_0x5d2ax17[_0xe4bc[236]],_0x5d2ax9=Math[_0xe4bc[428]](_0x5d2ax9*_0x5d2ax9+_0x5d2axa*_0x5d2axa),_0x5d2ax12[_0xe4bc[207]](_0x5d2ax9),_0x5d2ax5+=_0x5d2ax9,_0x5d2axa=_0x5d2ax17,_0x5d2ax4=Math[_0xe4bc[243]](_0x5d2axa[_0xe4bc[235]],_0x5d2ax4),_0x5d2ax13=Math[_0xe4bc[243]](_0x5d2axa[_0xe4bc[236]],_0x5d2ax13),_0x5d2ax14=Math[_0xe4bc[160]](_0x5d2axa[_0xe4bc[235]],_0x5d2ax14),_0x5d2ax15=Math[_0xe4bc[160]](_0x5d2axa[_0xe4bc[236]],_0x5d2ax15))};_0x5d2ax2[_0xe4bc[67]]=_0x5d2ax5;_0x5d2ax2[_0xe4bc[2086]]=_0x5d2ax12;_0x5d2ax2[_0xe4bc[235]]=_0x5d2ax4;_0x5d2ax2[_0xe4bc[236]]=_0x5d2ax13;_0x5d2ax2[_0xe4bc[117]]=Math[_0xe4bc[160]](1,_0x5d2ax14-_0x5d2ax4);_0x5d2ax2[_0xe4bc[119]]=Math[_0xe4bc[160]](1,_0x5d2ax15-_0x5d2ax13)}}}};mxGraphView[_0xe4bc[202]][_0xe4bc[245]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=_0x5d2ax2[_0xe4bc[241]](),_0x5d2ax5=_0x5d2ax2[_0xe4bc[242]]();if(null!=_0x5d2ax2[_0xe4bc[2086]]&&(null==_0x5d2ax3||_0x5d2ax3[_0xe4bc[1500]])){for(var _0x5d2ax9=_0x5d2ax2[_0xe4bc[439]][_0xe4bc[67]],_0x5d2axa=((null!=_0x5d2ax3?_0x5d2ax3[_0xe4bc[235]]/2:0)+0.5)*_0x5d2ax2[_0xe4bc[67]],_0x5d2ax12=_0x5d2ax2[_0xe4bc[2086]][0],_0x5d2ax13=0,_0x5d2ax14=1;_0x5d2axa>_0x5d2ax13+_0x5d2ax12&&_0x5d2ax14<_0x5d2ax9-1;){_0x5d2ax13+=_0x5d2ax12,_0x5d2ax12=_0x5d2ax2[_0xe4bc[2086]][_0x5d2ax14++]};_0x5d2ax9=0==_0x5d2ax12?0:(_0x5d2axa-_0x5d2ax13)/_0x5d2ax12;_0x5d2axa=_0x5d2ax2[_0xe4bc[439]][_0x5d2ax14-1];_0x5d2ax14=_0x5d2ax2[_0xe4bc[439]][_0x5d2ax14];if(null!=_0x5d2axa&&null!=_0x5d2ax14){_0x5d2ax13=_0x5d2ax4=_0x5d2ax5=0;if(null!=_0x5d2ax3){var _0x5d2ax5=_0x5d2ax3[_0xe4bc[236]],_0x5d2ax15=_0x5d2ax3[_0xe4bc[1368]];null!=_0x5d2ax15&&(_0x5d2ax4=_0x5d2ax15[_0xe4bc[235]],_0x5d2ax13=_0x5d2ax15[_0xe4bc[236]])};_0x5d2ax15=_0x5d2ax14[_0xe4bc[235]]-_0x5d2axa[_0xe4bc[235]];_0x5d2ax14=_0x5d2ax14[_0xe4bc[236]]-_0x5d2axa[_0xe4bc[236]];_0x5d2ax4=_0x5d2axa[_0xe4bc[235]]+_0x5d2ax15*_0x5d2ax9+((0==_0x5d2ax12?0:_0x5d2ax14/_0x5d2ax12)*_0x5d2ax5+_0x5d2ax4)*this[_0xe4bc[255]];_0x5d2ax5=_0x5d2axa[_0xe4bc[236]]+_0x5d2ax14*_0x5d2ax9-((0==_0x5d2ax12?0:_0x5d2ax15/_0x5d2ax12)*_0x5d2ax5-_0x5d2ax13)*this[_0xe4bc[255]]}}else {null!=_0x5d2ax3&&(_0x5d2ax15=_0x5d2ax3[_0xe4bc[1368]],null!=_0x5d2ax15&&(_0x5d2ax4+=_0x5d2ax15[_0xe4bc[235]],_0x5d2ax5+=_0x5d2ax15[_0xe4bc[236]]))};return  new mxPoint(_0x5d2ax4,_0x5d2ax5)};mxGraphView[_0xe4bc[202]][_0xe4bc[2308]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){var _0x5d2ax5=this[_0xe4bc[1179]][_0xe4bc[502]]()[_0xe4bc[1721]](_0x5d2ax2[_0xe4bc[246]]);if(null!=_0x5d2ax5){var _0x5d2ax9=_0x5d2ax2[_0xe4bc[439]][_0xe4bc[67]];if(_0x5d2ax5[_0xe4bc[1500]]&&1<_0x5d2ax9){for(var _0x5d2ax5=_0x5d2ax2[_0xe4bc[67]],_0x5d2axa=_0x5d2ax2[_0xe4bc[2086]],_0x5d2ax12=_0x5d2ax2[_0xe4bc[439]][0],_0x5d2ax13=_0x5d2ax2[_0xe4bc[439]][1],_0x5d2ax14=mxUtils[_0xe4bc[440]](_0x5d2ax12[_0xe4bc[235]],_0x5d2ax12[_0xe4bc[236]],_0x5d2ax13[_0xe4bc[235]],_0x5d2ax13[_0xe4bc[236]],_0x5d2ax3,_0x5d2ax4),_0x5d2ax15=0,_0x5d2ax16=0,_0x5d2ax17=0,_0x5d2ax18=2;_0x5d2ax18<_0x5d2ax9;_0x5d2ax18++){_0x5d2ax16+=_0x5d2axa[_0x5d2ax18-2],_0x5d2ax13=_0x5d2ax2[_0xe4bc[439]][_0x5d2ax18],_0x5d2ax12=mxUtils[_0xe4bc[440]](_0x5d2ax12[_0xe4bc[235]],_0x5d2ax12[_0xe4bc[236]],_0x5d2ax13[_0xe4bc[235]],_0x5d2ax13[_0xe4bc[236]],_0x5d2ax3,_0x5d2ax4),_0x5d2ax12<=_0x5d2ax14&&(_0x5d2ax14=_0x5d2ax12,_0x5d2ax15=_0x5d2ax18-1,_0x5d2ax17=_0x5d2ax16),_0x5d2ax12=_0x5d2ax13};_0x5d2ax9=_0x5d2axa[_0x5d2ax15];_0x5d2ax12=_0x5d2ax2[_0xe4bc[439]][_0x5d2ax15];_0x5d2ax13=_0x5d2ax2[_0xe4bc[439]][_0x5d2ax15+1];_0x5d2ax14=_0x5d2ax13[_0xe4bc[235]];_0x5d2axa=_0x5d2ax13[_0xe4bc[236]];_0x5d2ax2=_0x5d2ax12[_0xe4bc[235]]-_0x5d2ax14;_0x5d2ax15=_0x5d2ax12[_0xe4bc[236]]-_0x5d2axa;_0x5d2ax14=_0x5d2ax3-_0x5d2ax14;_0x5d2axa=_0x5d2ax4-_0x5d2axa;_0x5d2ax14=_0x5d2ax2-_0x5d2ax14;_0x5d2axa=_0x5d2ax15-_0x5d2axa;_0x5d2axa=_0x5d2ax14*_0x5d2ax2+_0x5d2axa*_0x5d2ax15;_0x5d2ax2=Math[_0xe4bc[428]](0>=_0x5d2axa?0:_0x5d2axa*_0x5d2axa/(_0x5d2ax2*_0x5d2ax2+_0x5d2ax15*_0x5d2ax15));_0x5d2ax2>_0x5d2ax9&&(_0x5d2ax2=_0x5d2ax9);_0x5d2ax9=Math[_0xe4bc[428]](mxUtils[_0xe4bc[440]](_0x5d2ax12[_0xe4bc[235]],_0x5d2ax12[_0xe4bc[236]],_0x5d2ax13[_0xe4bc[235]],_0x5d2ax13[_0xe4bc[236]],_0x5d2ax3,_0x5d2ax4));-1==mxUtils[_0xe4bc[2309]](_0x5d2ax12[_0xe4bc[235]],_0x5d2ax12[_0xe4bc[236]],_0x5d2ax13[_0xe4bc[235]],_0x5d2ax13[_0xe4bc[236]],_0x5d2ax3,_0x5d2ax4)&&(_0x5d2ax9= -_0x5d2ax9);return  new mxPoint(-2*((_0x5d2ax5/2-_0x5d2ax17-_0x5d2ax2)/_0x5d2ax5),_0x5d2ax9/this[_0xe4bc[255]])}};return  new mxPoint};mxGraphView[_0xe4bc[202]][_0xe4bc[2285]]=function(_0x5d2ax2){var _0x5d2ax3=_0x5d2ax2[_0xe4bc[439]];_0x5d2ax2[_0xe4bc[2079]][_0xe4bc[235]]=_0x5d2ax2[_0xe4bc[241]]();_0x5d2ax2[_0xe4bc[2079]][_0xe4bc[236]]=_0x5d2ax2[_0xe4bc[242]]();if(null!=_0x5d2ax3&&0<_0x5d2ax3[_0xe4bc[67]]&&null!=_0x5d2ax2[_0xe4bc[2086]]){var _0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[1198]](_0x5d2ax2[_0xe4bc[246]]);if(_0x5d2ax4[_0xe4bc[1500]]){var _0x5d2ax5=this[_0xe4bc[245]](_0x5d2ax2,_0x5d2ax4);null!=_0x5d2ax5&&(_0x5d2ax2[_0xe4bc[2079]]=_0x5d2ax5)}else {var _0x5d2ax5=_0x5d2ax3[0],_0x5d2ax9=_0x5d2ax3[_0x5d2ax3[_0xe4bc[67]]-1];if(null!=_0x5d2ax5&&null!=_0x5d2ax9){var _0x5d2ax3=_0x5d2ax9[_0xe4bc[235]]-_0x5d2ax5[_0xe4bc[235]],_0x5d2axa=_0x5d2ax9[_0xe4bc[236]]-_0x5d2ax5[_0xe4bc[236]],_0x5d2ax12=_0x5d2ax9=0,_0x5d2ax4=_0x5d2ax4[_0xe4bc[1368]];null!=_0x5d2ax4&&(_0x5d2ax9=_0x5d2ax4[_0xe4bc[235]],_0x5d2ax12=_0x5d2ax4[_0xe4bc[236]]);_0x5d2ax4=_0x5d2ax5[_0xe4bc[236]]+_0x5d2axa/2+_0x5d2ax12*this[_0xe4bc[255]];_0x5d2ax2[_0xe4bc[2079]][_0xe4bc[235]]=_0x5d2ax5[_0xe4bc[235]]+_0x5d2ax3/2+_0x5d2ax9*this[_0xe4bc[255]];_0x5d2ax2[_0xe4bc[2079]][_0xe4bc[236]]=_0x5d2ax4}}}};mxGraphView[_0xe4bc[202]][_0xe4bc[248]]=function(_0x5d2ax2,_0x5d2ax3){_0x5d2ax3=_0x5d2ax3|| !1;var _0x5d2ax4=null;null!=_0x5d2ax2&&(_0x5d2ax4=this[_0xe4bc[1214]][_0xe4bc[203]](_0x5d2ax2),this[_0xe4bc[1179]][_0xe4bc[1714]](_0x5d2ax2)&&(null==_0x5d2ax4&&_0x5d2ax3&&this[_0xe4bc[1179]][_0xe4bc[1714]](_0x5d2ax2)?(_0x5d2ax4=this[_0xe4bc[1230]](_0x5d2ax2),this[_0xe4bc[1214]][_0xe4bc[204]](_0x5d2ax2,_0x5d2ax4)):_0x5d2ax3&&(null!=_0x5d2ax4&&this[_0xe4bc[2255]])&&(_0x5d2ax4[_0xe4bc[124]]=this[_0xe4bc[1179]][_0xe4bc[1705]](_0x5d2ax2))));return _0x5d2ax4};mxGraphView[_0xe4bc[202]][_0xe4bc[2287]]=function(){return this[_0xe4bc[2254]]};mxGraphView[_0xe4bc[202]][_0xe4bc[2310]]=function(_0x5d2ax2){this[_0xe4bc[2254]]=_0x5d2ax2};mxGraphView[_0xe4bc[202]][_0xe4bc[2295]]=function(){return this[_0xe4bc[2251]]};mxGraphView[_0xe4bc[202]][_0xe4bc[2311]]=function(_0x5d2ax2){this[_0xe4bc[2251]]=_0x5d2ax2};mxGraphView[_0xe4bc[202]][_0xe4bc[2312]]=function(){return this[_0xe4bc[1214]]};mxGraphView[_0xe4bc[202]][_0xe4bc[1517]]=function(_0x5d2ax2){this[_0xe4bc[1214]]=_0x5d2ax2};mxGraphView[_0xe4bc[202]][_0xe4bc[2313]]=function(_0x5d2ax2){if(null==_0x5d2ax2){return this[_0xe4bc[1214]]};for(var _0x5d2ax3=[],_0x5d2ax4=0;_0x5d2ax4<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax4++){var _0x5d2ax5=this[_0xe4bc[248]](_0x5d2ax2[_0x5d2ax4]);null!=_0x5d2ax5&&_0x5d2ax3[_0xe4bc[207]](_0x5d2ax5)};return _0x5d2ax3};mxGraphView[_0xe4bc[202]][_0xe4bc[2265]]=function(_0x5d2ax2){var _0x5d2ax3=null;null!=_0x5d2ax2&&(_0x5d2ax3=this[_0xe4bc[1214]][_0xe4bc[205]](_0x5d2ax2),null!=_0x5d2ax3&&(this[_0xe4bc[1179]][_0xe4bc[259]][_0xe4bc[515]](_0x5d2ax3),_0x5d2ax3[_0xe4bc[515]]()));return _0x5d2ax3};mxGraphView[_0xe4bc[202]][_0xe4bc[1230]]=function(_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[1179]][_0xe4bc[1705]](_0x5d2ax2);_0x5d2ax2= new mxCellState(this,_0x5d2ax2,_0x5d2ax3);this[_0xe4bc[1179]][_0xe4bc[259]][_0xe4bc[2155]](_0x5d2ax2,this[_0xe4bc[2287]]());return _0x5d2ax2};mxGraphView[_0xe4bc[202]][_0xe4bc[2051]]=function(){return this[_0xe4bc[510]]};mxGraphView[_0xe4bc[202]][_0xe4bc[2052]]=function(){return this[_0xe4bc[2053]]};mxGraphView[_0xe4bc[202]][_0xe4bc[2024]]=function(){return this[_0xe4bc[505]]};mxGraphView[_0xe4bc[202]][_0xe4bc[1524]]=function(){return this[_0xe4bc[506]]};mxGraphView[_0xe4bc[202]][_0xe4bc[2314]]=function(_0x5d2ax2){_0x5d2ax2=mxEvent[_0xe4bc[728]](_0x5d2ax2);return _0x5d2ax2==this[_0xe4bc[1179]][_0xe4bc[526]]||_0x5d2ax2[_0xe4bc[265]]==this[_0xe4bc[2053]]||null!=_0x5d2ax2[_0xe4bc[265]]&&_0x5d2ax2[_0xe4bc[265]][_0xe4bc[265]]==this[_0xe4bc[2053]]||_0x5d2ax2==this[_0xe4bc[510]][_0xe4bc[265]]||_0x5d2ax2==this[_0xe4bc[510]]||_0x5d2ax2==this[_0xe4bc[2053]]||_0x5d2ax2==this[_0xe4bc[505]]||_0x5d2ax2==this[_0xe4bc[506]]};mxGraphView[_0xe4bc[202]][_0xe4bc[2315]]=function(_0x5d2ax2){var _0x5d2ax3=mxUtils[_0xe4bc[445]](this[_0xe4bc[1179]][_0xe4bc[526]]);_0x5d2ax2= new mxPoint(_0x5d2ax2[_0xe4bc[782]]-_0x5d2ax3[_0xe4bc[235]],_0x5d2ax2[_0xe4bc[784]]-_0x5d2ax3[_0xe4bc[236]]);var _0x5d2ax3=this[_0xe4bc[1179]][_0xe4bc[526]][_0xe4bc[359]],_0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[526]][_0xe4bc[159]];if(_0x5d2ax3>_0x5d2ax4&&_0x5d2ax2[_0xe4bc[235]]>_0x5d2ax4+2&&_0x5d2ax2[_0xe4bc[235]]<=_0x5d2ax3){return !0};_0x5d2ax3=this[_0xe4bc[1179]][_0xe4bc[526]][_0xe4bc[167]];_0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[526]][_0xe4bc[157]];return _0x5d2ax3>_0x5d2ax4&&_0x5d2ax2[_0xe4bc[236]]>_0x5d2ax4+2&&_0x5d2ax2[_0xe4bc[236]]<=_0x5d2ax3?!0:!1};mxGraphView[_0xe4bc[202]][_0xe4bc[176]]=function(){this[_0xe4bc[2163]]();var _0x5d2ax2=this[_0xe4bc[1179]];_0x5d2ax2[_0xe4bc[507]]==mxConstants[_0xe4bc[508]]?this[_0xe4bc[1569]]():_0x5d2ax2[_0xe4bc[507]]==mxConstants[_0xe4bc[1523]]?this[_0xe4bc[1571]]():this[_0xe4bc[1570]]()};mxGraphView[_0xe4bc[202]][_0xe4bc[2163]]=function(){var _0x5d2ax2=this[_0xe4bc[1179]],_0x5d2ax3=_0x5d2ax2[_0xe4bc[526]];if(null!=_0x5d2ax3){mxEvent[_0xe4bc[759]](_0x5d2ax3,mxUtils[_0xe4bc[885]](this,function(_0x5d2ax3){mxClient[_0xe4bc[754]]&&_0x5d2ax2[_0xe4bc[2203]]()&&_0x5d2ax2[_0xe4bc[2126]](!_0x5d2ax2[_0xe4bc[2134]]());this[_0xe4bc[2314]](_0x5d2ax3)&&(!mxClient[_0xe4bc[80]]&&!mxClient[_0xe4bc[76]]&&!mxClient[_0xe4bc[71]]&&!mxClient[_0xe4bc[75]]||!this[_0xe4bc[2315]](_0x5d2ax3))&&_0x5d2ax2[_0xe4bc[758]](mxEvent.MOUSE_DOWN, new mxMouseEvent(_0x5d2ax3))}),mxUtils[_0xe4bc[885]](this,function(_0x5d2ax3){this[_0xe4bc[2314]](_0x5d2ax3)&&_0x5d2ax2[_0xe4bc[758]](mxEvent.MOUSE_MOVE, new mxMouseEvent(_0x5d2ax3))}),mxUtils[_0xe4bc[885]](this,function(_0x5d2ax3){this[_0xe4bc[2314]](_0x5d2ax3)&&_0x5d2ax2[_0xe4bc[758]](mxEvent.MOUSE_UP, new mxMouseEvent(_0x5d2ax3))}));mxEvent[_0xe4bc[169]](_0x5d2ax3,_0xe4bc[760],mxUtils[_0xe4bc[885]](this,function(_0x5d2ax3){_0x5d2ax2[_0xe4bc[761]](_0x5d2ax3)}));var _0x5d2ax4=function(_0x5d2ax4){var _0x5d2ax9=null;mxClient[_0xe4bc[754]]&&(_0x5d2ax9=mxEvent[_0xe4bc[731]](_0x5d2ax4),_0x5d2ax4=mxEvent[_0xe4bc[733]](_0x5d2ax4),_0x5d2ax4=mxUtils[_0xe4bc[2196]](_0x5d2ax3,_0x5d2ax9,_0x5d2ax4),_0x5d2ax9=_0x5d2ax2[_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax2[_0xe4bc[999]](_0x5d2ax4[_0xe4bc[235]],_0x5d2ax4[_0xe4bc[236]])));return _0x5d2ax9};_0x5d2ax2[_0xe4bc[1133]]({mouseDown:function(_0x5d2ax3,_0x5d2ax4){_0x5d2ax2[_0xe4bc[2316]][_0xe4bc[1032]]()},mouseMove:function(){},mouseUp:function(){}});this[_0xe4bc[2317]]=mxUtils[_0xe4bc[885]](this,function(_0x5d2ax3){null!=_0x5d2ax2[_0xe4bc[2276]]&&_0x5d2ax2[_0xe4bc[2276]][_0xe4bc[2277]]()&&_0x5d2ax2[_0xe4bc[2276]][_0xe4bc[801]]();this[_0xe4bc[2252]]&&(_0x5d2ax2[_0xe4bc[1009]]&&!mxEvent[_0xe4bc[721]](_0x5d2ax3))&&_0x5d2ax2[_0xe4bc[758]](mxEvent.MOUSE_MOVE, new mxMouseEvent(_0x5d2ax3,_0x5d2ax4(_0x5d2ax3)))});this[_0xe4bc[2318]]=mxUtils[_0xe4bc[885]](this,function(_0x5d2ax3){this[_0xe4bc[2252]]&&_0x5d2ax2[_0xe4bc[758]](mxEvent.MOUSE_UP, new mxMouseEvent(_0x5d2ax3))});mxEvent[_0xe4bc[759]](document,null,this[_0xe4bc[2317]],this[_0xe4bc[2318]])}};mxGraphView[_0xe4bc[202]][_0xe4bc[1570]]=function(){var _0x5d2ax2=this[_0xe4bc[1179]][_0xe4bc[526]];null!=_0x5d2ax2&&(this[_0xe4bc[510]]=this[_0xe4bc[2319]](_0xe4bc[118],_0xe4bc[118]),this[_0xe4bc[2053]]=this[_0xe4bc[2319]](_0xe4bc[942],_0xe4bc[942]),this[_0xe4bc[505]]=this[_0xe4bc[2319]](_0xe4bc[942],_0xe4bc[942]),this[_0xe4bc[506]]=this[_0xe4bc[2319]](_0xe4bc[942],_0xe4bc[942]),this[_0xe4bc[510]][_0xe4bc[62]](this[_0xe4bc[2053]]),this[_0xe4bc[510]][_0xe4bc[62]](this[_0xe4bc[505]]),this[_0xe4bc[510]][_0xe4bc[62]](this[_0xe4bc[506]]),_0x5d2ax2[_0xe4bc[62]](this[_0xe4bc[510]]),mxClient[_0xe4bc[496]]&&(_0x5d2ax2=mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){_0x5d2ax2=this[_0xe4bc[517]]();this[_0xe4bc[2320]](_0x5d2ax2[_0xe4bc[235]]+_0x5d2ax2[_0xe4bc[117]]+this[_0xe4bc[1179]][_0xe4bc[467]],_0x5d2ax2[_0xe4bc[236]]+_0x5d2ax2[_0xe4bc[119]]+this[_0xe4bc[1179]][_0xe4bc[467]])}),mxEvent[_0xe4bc[169]](window,_0xe4bc[129],_0x5d2ax2)))};mxGraphView[_0xe4bc[202]][_0xe4bc[2320]]=function(_0x5d2ax2,_0x5d2ax3){if(null!=this[_0xe4bc[1179]][_0xe4bc[526]]){var _0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[526]][_0xe4bc[167]];this[_0xe4bc[510]][_0xe4bc[124]][_0xe4bc[117]]=this[_0xe4bc[1179]][_0xe4bc[526]][_0xe4bc[359]]<_0x5d2ax2?_0x5d2ax2+_0xe4bc[168]:_0xe4bc[118];this[_0xe4bc[510]][_0xe4bc[124]][_0xe4bc[119]]=_0x5d2ax4<_0x5d2ax3?_0x5d2ax3+_0xe4bc[168]:_0xe4bc[118]}};mxGraphView[_0xe4bc[202]][_0xe4bc[2319]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=document[_0xe4bc[55]](_0xe4bc[529]);null!=_0x5d2ax2&&null!=_0x5d2ax3?(_0x5d2ax4[_0xe4bc[124]][_0xe4bc[491]]=_0xe4bc[492],_0x5d2ax4[_0xe4bc[124]][_0xe4bc[361]]=_0xe4bc[946],_0x5d2ax4[_0xe4bc[124]][_0xe4bc[125]]=_0xe4bc[946],_0x5d2ax4[_0xe4bc[124]][_0xe4bc[117]]=_0x5d2ax2,_0x5d2ax4[_0xe4bc[124]][_0xe4bc[119]]=_0x5d2ax3):_0x5d2ax4[_0xe4bc[124]][_0xe4bc[491]]=_0xe4bc[1500];return _0x5d2ax4};mxGraphView[_0xe4bc[202]][_0xe4bc[1571]]=function(){var _0x5d2ax2=this[_0xe4bc[1179]][_0xe4bc[526]];if(null!=_0x5d2ax2){var _0x5d2ax3=_0x5d2ax2[_0xe4bc[359]],_0x5d2ax4=_0x5d2ax2[_0xe4bc[167]];this[_0xe4bc[510]]=this[_0xe4bc[2321]](_0x5d2ax3,_0x5d2ax4);this[_0xe4bc[2053]]=this[_0xe4bc[2321]](_0x5d2ax3,_0x5d2ax4);this[_0xe4bc[505]]=this[_0xe4bc[2321]](_0x5d2ax3,_0x5d2ax4);this[_0xe4bc[506]]=this[_0xe4bc[2321]](_0x5d2ax3,_0x5d2ax4);this[_0xe4bc[510]][_0xe4bc[62]](this[_0xe4bc[2053]]);this[_0xe4bc[510]][_0xe4bc[62]](this[_0xe4bc[505]]);this[_0xe4bc[510]][_0xe4bc[62]](this[_0xe4bc[506]]);_0x5d2ax2[_0xe4bc[62]](this[_0xe4bc[510]])}};mxGraphView[_0xe4bc[202]][_0xe4bc[2321]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=document[_0xe4bc[55]](mxClient[_0xe4bc[463]]+_0xe4bc[1499]);_0x5d2ax4[_0xe4bc[124]][_0xe4bc[491]]=_0xe4bc[492];_0x5d2ax4[_0xe4bc[124]][_0xe4bc[361]]=_0xe4bc[946];_0x5d2ax4[_0xe4bc[124]][_0xe4bc[125]]=_0xe4bc[946];_0x5d2ax4[_0xe4bc[124]][_0xe4bc[117]]=_0x5d2ax2+_0xe4bc[168];_0x5d2ax4[_0xe4bc[124]][_0xe4bc[119]]=_0x5d2ax3+_0xe4bc[168];_0x5d2ax4[_0xe4bc[57]](_0xe4bc[1462],_0x5d2ax2+_0xe4bc[537]+_0x5d2ax3);_0x5d2ax4[_0xe4bc[57]](_0xe4bc[2322],_0xe4bc[2323]);return _0x5d2ax4};mxGraphView[_0xe4bc[202]][_0xe4bc[1569]]=function(){var _0x5d2ax2=this[_0xe4bc[1179]][_0xe4bc[526]];this[_0xe4bc[510]]=document[_0xe4bc[509]](mxConstants.NS_SVG,_0xe4bc[449]);this[_0xe4bc[2053]]=document[_0xe4bc[509]](mxConstants.NS_SVG,_0xe4bc[449]);this[_0xe4bc[510]][_0xe4bc[62]](this[_0xe4bc[2053]]);this[_0xe4bc[505]]=document[_0xe4bc[509]](mxConstants.NS_SVG,_0xe4bc[449]);this[_0xe4bc[510]][_0xe4bc[62]](this[_0xe4bc[505]]);this[_0xe4bc[506]]=document[_0xe4bc[509]](mxConstants.NS_SVG,_0xe4bc[449]);this[_0xe4bc[510]][_0xe4bc[62]](this[_0xe4bc[506]]);var _0x5d2ax3=document[_0xe4bc[509]](mxConstants.NS_SVG,_0xe4bc[571]);_0x5d2ax3[_0xe4bc[124]][_0xe4bc[117]]=_0xe4bc[118];_0x5d2ax3[_0xe4bc[124]][_0xe4bc[119]]=_0xe4bc[118];_0x5d2ax3[_0xe4bc[124]][_0xe4bc[495]]=_0xe4bc[694];_0x5d2ax3[_0xe4bc[62]](this[_0xe4bc[510]]);null!=_0x5d2ax2&&(_0x5d2ax2[_0xe4bc[62]](_0x5d2ax3),_0xe4bc[2324]==mxUtils[_0xe4bc[275]](_0x5d2ax2)[_0xe4bc[491]]&&(_0x5d2ax2[_0xe4bc[124]][_0xe4bc[491]]=_0xe4bc[1500]))};mxGraphView[_0xe4bc[202]][_0xe4bc[515]]=function(){var _0x5d2ax2=null!=this[_0xe4bc[510]]?this[_0xe4bc[510]][_0xe4bc[538]]:null;null==_0x5d2ax2&&(_0x5d2ax2=this[_0xe4bc[510]]);null!=_0x5d2ax2&&null!=_0x5d2ax2[_0xe4bc[265]]&&(this[_0xe4bc[200]](this[_0xe4bc[1741]],!0),mxEvent[_0xe4bc[938]](document,null,this[_0xe4bc[2317]],this[_0xe4bc[2318]]),mxEvent[_0xe4bc[762]](this[_0xe4bc[1179]][_0xe4bc[526]]),_0x5d2ax2[_0xe4bc[265]][_0xe4bc[266]](_0x5d2ax2),this[_0xe4bc[506]]=this[_0xe4bc[505]]=this[_0xe4bc[2053]]=this[_0xe4bc[510]]=this[_0xe4bc[2318]]=this[_0xe4bc[2317]]=null)};function mxCurrentRootChange(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[441]]=_0x5d2ax2;this[_0xe4bc[257]]=this[_0xe4bc[813]]=_0x5d2ax3;this[_0xe4bc[2325]]=null==_0x5d2ax3;if(!this[_0xe4bc[2325]]){for(var _0x5d2ax4=this[_0xe4bc[441]][_0xe4bc[1741]],_0x5d2ax5=this[_0xe4bc[441]][_0xe4bc[1179]][_0xe4bc[502]]();null!=_0x5d2ax4;){if(_0x5d2ax4==_0x5d2ax3){this[_0xe4bc[2325]]= !0;break};_0x5d2ax4=_0x5d2ax5[_0xe4bc[1197]](_0x5d2ax4)}}}mxCurrentRootChange[_0xe4bc[202]][_0xe4bc[350]]=function(){var _0x5d2ax2=this[_0xe4bc[441]][_0xe4bc[1741]];this[_0xe4bc[441]][_0xe4bc[1741]]=this[_0xe4bc[257]];this[_0xe4bc[257]]=_0x5d2ax2;_0x5d2ax2=this[_0xe4bc[441]][_0xe4bc[1179]][_0xe4bc[2326]](this[_0xe4bc[441]][_0xe4bc[1741]]);null!=_0x5d2ax2&&(this[_0xe4bc[441]][_0xe4bc[513]]= new mxPoint(-_0x5d2ax2[_0xe4bc[235]],-_0x5d2ax2[_0xe4bc[236]]));this[_0xe4bc[441]][_0xe4bc[746]]( new mxEventObject(this[_0xe4bc[2325]]?mxEvent[_0xe4bc[2327]]:mxEvent[_0xe4bc[2328]],_0xe4bc[813],this[_0xe4bc[441]][_0xe4bc[1741]],_0xe4bc[257],this[_0xe4bc[257]]));this[_0xe4bc[2325]]?(this[_0xe4bc[441]][_0xe4bc[200]](this[_0xe4bc[441]][_0xe4bc[1741]],!0),this[_0xe4bc[441]][_0xe4bc[2264]]()):this[_0xe4bc[441]][_0xe4bc[802]]();this[_0xe4bc[2325]]=!this[_0xe4bc[2325]]};function mxGraph(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){this[_0xe4bc[2329]]=null;this[_0xe4bc[2330]]=_0x5d2ax4;this[_0xe4bc[507]]=mxClient[_0xe4bc[48]]?mxConstants[_0xe4bc[508]]:_0x5d2ax4==mxConstants[_0xe4bc[2331]]&&mxClient[_0xe4bc[47]]?mxConstants[_0xe4bc[1523]]:_0x5d2ax4==mxConstants[_0xe4bc[2332]]?mxConstants[_0xe4bc[1656]]:_0x5d2ax4==mxConstants[_0xe4bc[2333]]?mxConstants[_0xe4bc[2209]]:mxConstants[_0xe4bc[2334]];this[_0xe4bc[251]]=null!=_0x5d2ax3?_0x5d2ax3: new mxGraphModel;this[_0xe4bc[2335]]=[];this[_0xe4bc[2336]]=[];this[_0xe4bc[259]]=this[_0xe4bc[2337]]();this[_0xe4bc[2339]](this[_0xe4bc[2338]]());this[_0xe4bc[2341]](null!=_0x5d2ax5?_0x5d2ax5:this[_0xe4bc[2340]]());this[_0xe4bc[441]]=this[_0xe4bc[2342]]();this[_0xe4bc[2343]]=mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[1177]](_0x5d2ax3[_0xe4bc[720]](_0xe4bc[1061])[_0xe4bc[1065]])});this[_0xe4bc[251]][_0xe4bc[169]](mxEvent.CHANGE,this[_0xe4bc[2343]]);this[_0xe4bc[2344]]();null!=_0x5d2ax2&&this[_0xe4bc[176]](_0x5d2ax2);this[_0xe4bc[441]][_0xe4bc[2259]]()}mxLoadResources&&mxResources[_0xe4bc[99]](mxClient[_0xe4bc[86]]+_0xe4bc[2345]);mxGraph[_0xe4bc[202]]= new mxEventSource;mxGraph[_0xe4bc[202]][_0xe4bc[196]]=mxGraph;mxGraph[_0xe4bc[202]][_0xe4bc[2346]]=[];mxGraph[_0xe4bc[202]][_0xe4bc[2329]]=null;mxGraph[_0xe4bc[202]][_0xe4bc[1009]]= !1;mxGraph[_0xe4bc[202]][_0xe4bc[251]]=null;mxGraph[_0xe4bc[202]][_0xe4bc[441]]=null;mxGraph[_0xe4bc[202]][_0xe4bc[94]]=null;mxGraph[_0xe4bc[202]][_0xe4bc[2105]]=null;mxGraph[_0xe4bc[202]][_0xe4bc[2347]]=null;mxGraph[_0xe4bc[202]][_0xe4bc[259]]=null;mxGraph[_0xe4bc[202]][_0xe4bc[2335]]=null;mxGraph[_0xe4bc[202]][_0xe4bc[2330]]=null;mxGraph[_0xe4bc[202]][_0xe4bc[507]]=null;mxGraph[_0xe4bc[202]][_0xe4bc[1020]]=10;mxGraph[_0xe4bc[202]][_0xe4bc[991]]= !0;mxGraph[_0xe4bc[202]][_0xe4bc[2348]]= !0;mxGraph[_0xe4bc[202]][_0xe4bc[2349]]= !0;mxGraph[_0xe4bc[202]][_0xe4bc[2350]]=700;mxGraph[_0xe4bc[202]][_0xe4bc[2351]]=25;mxGraph[_0xe4bc[202]][_0xe4bc[2352]]=0;mxGraph[_0xe4bc[202]][_0xe4bc[2352]]=0;mxGraph[_0xe4bc[202]][_0xe4bc[2213]]=0;mxGraph[_0xe4bc[202]][_0xe4bc[2215]]= !0;mxGraph[_0xe4bc[202]][_0xe4bc[2353]]=4;mxGraph[_0xe4bc[202]][_0xe4bc[2354]]=0.5;mxGraph[_0xe4bc[202]][_0xe4bc[2355]]=null;mxGraph[_0xe4bc[202]][_0xe4bc[2356]]=null;mxGraph[_0xe4bc[202]][_0xe4bc[1617]]=null;mxGraph[_0xe4bc[202]][_0xe4bc[2273]]= !1;mxGraph[_0xe4bc[202]][_0xe4bc[2357]]= !1;mxGraph[_0xe4bc[202]][_0xe4bc[2358]]=_0xe4bc[579];mxGraph[_0xe4bc[202]][_0xe4bc[2359]]= !0;mxGraph[_0xe4bc[202]][_0xe4bc[2360]]=20;mxGraph[_0xe4bc[202]][_0xe4bc[2361]]= !1;mxGraph[_0xe4bc[202]][_0xe4bc[2013]]=mxConstants[_0xe4bc[516]];mxGraph[_0xe4bc[202]][_0xe4bc[2012]]=1.5;mxGraph[_0xe4bc[202]][_0xe4bc[984]]= !0;mxGraph[_0xe4bc[202]][_0xe4bc[2362]]= !0;mxGraph[_0xe4bc[202]][_0xe4bc[2363]]= !0;mxGraph[_0xe4bc[202]][_0xe4bc[2364]]= !1;mxGraph[_0xe4bc[202]][_0xe4bc[2365]]= !0;mxGraph[_0xe4bc[202]][_0xe4bc[2366]]= !0;mxGraph[_0xe4bc[202]][_0xe4bc[2367]]= !0;mxGraph[_0xe4bc[202]][_0xe4bc[2368]]= !1;mxGraph[_0xe4bc[202]][_0xe4bc[2369]]= !0;mxGraph[_0xe4bc[202]][_0xe4bc[2206]]= !0;mxGraph[_0xe4bc[202]][_0xe4bc[2370]]= !0;mxGraph[_0xe4bc[202]][_0xe4bc[2371]]= !0;mxGraph[_0xe4bc[202]][_0xe4bc[2372]]= !0;mxGraph[_0xe4bc[202]][_0xe4bc[2373]]= !0;mxGraph[_0xe4bc[202]][_0xe4bc[2374]]= !1;mxGraph[_0xe4bc[202]][_0xe4bc[2375]]= !1;mxGraph[_0xe4bc[202]][_0xe4bc[2376]]= !0;mxGraph[_0xe4bc[202]][_0xe4bc[2377]]= !0;mxGraph[_0xe4bc[202]][_0xe4bc[2378]]= !0;mxGraph[_0xe4bc[202]][_0xe4bc[2379]]= !0;mxGraph[_0xe4bc[202]][_0xe4bc[2380]]= !0;mxGraph[_0xe4bc[202]][_0xe4bc[2381]]= !1;mxGraph[_0xe4bc[202]][_0xe4bc[1012]]= !0;mxGraph[_0xe4bc[202]][_0xe4bc[2382]]= !1;mxGraph[_0xe4bc[202]][_0xe4bc[2383]]= !1;mxGraph[_0xe4bc[202]][_0xe4bc[2384]]= !1;mxGraph[_0xe4bc[202]][_0xe4bc[1013]]= !0;mxGraph[_0xe4bc[202]][_0xe4bc[2385]]=null;mxGraph[_0xe4bc[202]][_0xe4bc[2386]]=null;mxGraph[_0xe4bc[202]][_0xe4bc[2387]]=null;mxGraph[_0xe4bc[202]][_0xe4bc[2388]]=null;mxGraph[_0xe4bc[202]][_0xe4bc[2389]]= !1;mxGraph[_0xe4bc[202]][_0xe4bc[467]]=0;mxGraph[_0xe4bc[202]][_0xe4bc[2158]]= !0;mxGraph[_0xe4bc[202]][_0xe4bc[2159]]= !1;mxGraph[_0xe4bc[202]][_0xe4bc[2168]]= !0;mxGraph[_0xe4bc[202]][_0xe4bc[2390]]= !0;mxGraph[_0xe4bc[202]][_0xe4bc[2391]]= !0;mxGraph[_0xe4bc[202]][_0xe4bc[2392]]= !0;mxGraph[_0xe4bc[202]][_0xe4bc[2393]]= !0;mxGraph[_0xe4bc[202]][_0xe4bc[2394]]= !0;mxGraph[_0xe4bc[202]][_0xe4bc[2395]]=1.2;mxGraph[_0xe4bc[202]][_0xe4bc[2396]]= !1;mxGraph[_0xe4bc[202]][_0xe4bc[2397]]= !0;mxGraph[_0xe4bc[202]][_0xe4bc[2398]]= !0;mxGraph[_0xe4bc[202]][_0xe4bc[2399]]= !1;mxGraph[_0xe4bc[202]][_0xe4bc[2400]]= !1;mxGraph[_0xe4bc[202]][_0xe4bc[2401]]= !0;mxGraph[_0xe4bc[202]][_0xe4bc[2402]]= !1;mxGraph[_0xe4bc[202]][_0xe4bc[2293]]=mxEdgeStyle[_0xe4bc[2403]];mxGraph[_0xe4bc[202]][_0xe4bc[2404]]= !0;mxGraph[_0xe4bc[202]][_0xe4bc[2405]]= !1;mxGraph[_0xe4bc[202]][_0xe4bc[2406]]= !0;mxGraph[_0xe4bc[202]][_0xe4bc[2407]]= !1;mxGraph[_0xe4bc[202]][_0xe4bc[2408]]= !0;mxGraph[_0xe4bc[202]][_0xe4bc[2409]]= !0;mxGraph[_0xe4bc[202]][_0xe4bc[2410]]= !1;mxGraph[_0xe4bc[202]][_0xe4bc[2411]]= !0;mxGraph[_0xe4bc[202]][_0xe4bc[2412]]= !0;mxGraph[_0xe4bc[202]][_0xe4bc[2180]]=mxConstants[_0xe4bc[2065]];mxGraph[_0xe4bc[202]][_0xe4bc[2336]]=null;mxGraph[_0xe4bc[202]][_0xe4bc[2413]]=0.1;mxGraph[_0xe4bc[202]][_0xe4bc[2414]]=8;mxGraph[_0xe4bc[202]][_0xe4bc[1136]]=0;mxGraph[_0xe4bc[202]][_0xe4bc[1137]]=0;mxGraph[_0xe4bc[202]][_0xe4bc[2415]]= new mxImage(mxClient[_0xe4bc[88]]+_0xe4bc[2416],9,9);mxGraph[_0xe4bc[202]][_0xe4bc[2417]]= new mxImage(mxClient[_0xe4bc[88]]+_0xe4bc[2418],9,9);mxGraph[_0xe4bc[202]][_0xe4bc[2419]]= new mxImage(_0xe4bc[2420],16,16);mxGraph[_0xe4bc[202]][_0xe4bc[2421]]=_0xe4bc[130]!=mxClient[_0xe4bc[90]]?_0xe4bc[2422]:_0xe4bc[110];mxGraph[_0xe4bc[202]][_0xe4bc[2423]]=_0xe4bc[130]!=mxClient[_0xe4bc[90]]?_0xe4bc[2424]:_0xe4bc[110];mxGraph[_0xe4bc[202]][_0xe4bc[2425]]=_0xe4bc[130]!=mxClient[_0xe4bc[90]]?_0xe4bc[2426]:_0xe4bc[110];mxGraph[_0xe4bc[202]][_0xe4bc[176]]=function(_0x5d2ax2){this[_0xe4bc[526]]=_0x5d2ax2;this[_0xe4bc[2347]]=this[_0xe4bc[2427]]();this[_0xe4bc[441]][_0xe4bc[176]]();this[_0xe4bc[2258]]();mxClient[_0xe4bc[80]]&&(mxEvent[_0xe4bc[169]](window,_0xe4bc[2428],mxUtils[_0xe4bc[885]](this,function(){this[_0xe4bc[515]]()})),mxEvent[_0xe4bc[169]](_0x5d2ax2,_0xe4bc[2429],mxUtils[_0xe4bc[885]](this,function(){return this[_0xe4bc[2203]]()})));8==document[_0xe4bc[5]]&&_0x5d2ax2[_0xe4bc[1583]](_0xe4bc[1582],_0xe4bc[2430])};mxGraph[_0xe4bc[202]][_0xe4bc[2344]]=function(_0x5d2ax2){this[_0xe4bc[2276]]= new mxTooltipHandler(this);this[_0xe4bc[2276]][_0xe4bc[995]](!1);this[_0xe4bc[2316]]= new mxPanningHandler(this);this[_0xe4bc[2316]][_0xe4bc[2431]]= !1;this[_0xe4bc[2432]]= new mxSelectionCellsHandler(this);this[_0xe4bc[2433]]= new mxConnectionHandler(this);this[_0xe4bc[2433]][_0xe4bc[995]](!1);this[_0xe4bc[1011]]= new mxGraphHandler(this)};mxGraph[_0xe4bc[202]][_0xe4bc[2338]]=function(){return  new mxGraphSelectionModel(this)};mxGraph[_0xe4bc[202]][_0xe4bc[2340]]=function(){return  new mxStylesheet};mxGraph[_0xe4bc[202]][_0xe4bc[2342]]=function(){return  new mxGraphView(this)};mxGraph[_0xe4bc[202]][_0xe4bc[2337]]=function(){return  new mxCellRenderer};mxGraph[_0xe4bc[202]][_0xe4bc[2427]]=function(){return  new mxCellEditor(this)};mxGraph[_0xe4bc[202]][_0xe4bc[502]]=function(){return this[_0xe4bc[251]]};mxGraph[_0xe4bc[202]][_0xe4bc[249]]=function(){return this[_0xe4bc[441]]};mxGraph[_0xe4bc[202]][_0xe4bc[2434]]=function(){return this[_0xe4bc[94]]};mxGraph[_0xe4bc[202]][_0xe4bc[2341]]=function(_0x5d2ax2){this[_0xe4bc[94]]=_0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[2435]]=function(){return this[_0xe4bc[2105]]};mxGraph[_0xe4bc[202]][_0xe4bc[2339]]=function(_0x5d2ax2){this[_0xe4bc[2105]]=_0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[2436]]=function(_0x5d2ax2){for(var _0x5d2ax3=[],_0x5d2ax4=0;_0x5d2ax4<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax4++){var _0x5d2ax5=_0x5d2ax2[_0x5d2ax4];if(_0x5d2ax5[_0xe4bc[196]]!=mxRootChange){var _0x5d2ax9=null;_0x5d2ax5 instanceof mxChildChange&&null==_0x5d2ax5[_0xe4bc[257]]?_0x5d2ax9=_0x5d2ax5[_0xe4bc[247]]:null!=_0x5d2ax5[_0xe4bc[246]]&&_0x5d2ax5[_0xe4bc[246]] instanceof mxCell&&(_0x5d2ax9=_0x5d2ax5[_0xe4bc[246]]);null!=_0x5d2ax9&&0>mxUtils[_0xe4bc[2]](_0x5d2ax3,_0x5d2ax9)&&_0x5d2ax3[_0xe4bc[207]](_0x5d2ax9)}};return this[_0xe4bc[502]]()[_0xe4bc[1964]](_0x5d2ax3)};mxGraph[_0xe4bc[202]][_0xe4bc[1177]]=function(_0x5d2ax2){for(var _0x5d2ax3=0;_0x5d2ax3<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax3++){this[_0xe4bc[2437]](_0x5d2ax2[_0x5d2ax3])};this[_0xe4bc[2439]](this[_0xe4bc[2438]](_0x5d2ax2));this[_0xe4bc[441]][_0xe4bc[2264]]();this[_0xe4bc[2258]]()};mxGraph[_0xe4bc[202]][_0xe4bc[2438]]=function(_0x5d2ax2){for(var _0x5d2ax3=[],_0x5d2ax4=0;_0x5d2ax4<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax4++){var _0x5d2ax5=_0x5d2ax2[_0x5d2ax4];if(_0x5d2ax5 instanceof mxRootChange){break}else {_0x5d2ax5 instanceof mxChildChange?null!=_0x5d2ax5[_0xe4bc[257]]&&null==_0x5d2ax5[_0xe4bc[1101]]&&(_0x5d2ax3=_0x5d2ax3[_0xe4bc[1919]](this[_0xe4bc[251]][_0xe4bc[1939]](_0x5d2ax5[_0xe4bc[247]]))):_0x5d2ax5 instanceof mxVisibleChange&&(_0x5d2ax3=_0x5d2ax3[_0xe4bc[1919]](this[_0xe4bc[251]][_0xe4bc[1939]](_0x5d2ax5[_0xe4bc[246]])))}};return _0x5d2ax3};mxGraph[_0xe4bc[202]][_0xe4bc[2437]]=function(_0x5d2ax2){if(_0x5d2ax2 instanceof mxRootChange){this[_0xe4bc[2440]](),this[_0xe4bc[2441]](_0x5d2ax2[_0xe4bc[257]]),this[_0xe4bc[2398]]&&(this[_0xe4bc[441]][_0xe4bc[255]]=1,this[_0xe4bc[441]][_0xe4bc[513]][_0xe4bc[235]]=0,this[_0xe4bc[441]][_0xe4bc[513]][_0xe4bc[236]]=0),this[_0xe4bc[746]]( new mxEventObject(mxEvent.ROOT))}else {if(_0x5d2ax2 instanceof mxChildChange){var _0x5d2ax3=this[_0xe4bc[251]][_0xe4bc[1197]](_0x5d2ax2[_0xe4bc[247]]);null!=_0x5d2ax3?this[_0xe4bc[441]][_0xe4bc[2263]](_0x5d2ax2[_0xe4bc[247]],!0,!1,null!=_0x5d2ax2[_0xe4bc[257]]):(this[_0xe4bc[2441]](_0x5d2ax2[_0xe4bc[247]]),this[_0xe4bc[441]][_0xe4bc[1741]]==_0x5d2ax2[_0xe4bc[247]]&&this[_0xe4bc[2442]]());_0x5d2ax3!=_0x5d2ax2[_0xe4bc[257]]&&(null!=_0x5d2ax3&&this[_0xe4bc[441]][_0xe4bc[2263]](_0x5d2ax3,!1,!1),null!=_0x5d2ax2[_0xe4bc[257]]&&this[_0xe4bc[441]][_0xe4bc[2263]](_0x5d2ax2[_0xe4bc[257]],!1,!1))}else {_0x5d2ax2 instanceof mxTerminalChange||_0x5d2ax2 instanceof mxGeometryChange?this[_0xe4bc[441]][_0xe4bc[2263]](_0x5d2ax2[_0xe4bc[246]]):_0x5d2ax2 instanceof mxValueChange?this[_0xe4bc[441]][_0xe4bc[2263]](_0x5d2ax2[_0xe4bc[246]],!1,!1):_0x5d2ax2 instanceof mxStyleChange?(this[_0xe4bc[441]][_0xe4bc[2263]](_0x5d2ax2[_0xe4bc[246]],!0,!0,!1),this[_0xe4bc[441]][_0xe4bc[2265]](_0x5d2ax2[_0xe4bc[246]])):null!=_0x5d2ax2[_0xe4bc[246]]&&_0x5d2ax2[_0xe4bc[246]] instanceof mxCell&&this[_0xe4bc[2441]](_0x5d2ax2[_0xe4bc[246]])}}};mxGraph[_0xe4bc[202]][_0xe4bc[2441]]=function(_0x5d2ax2){for(var _0x5d2ax3=this[_0xe4bc[251]][_0xe4bc[262]](_0x5d2ax2),_0x5d2ax4=0;_0x5d2ax4<_0x5d2ax3;_0x5d2ax4++){this[_0xe4bc[2441]](this[_0xe4bc[251]][_0xe4bc[263]](_0x5d2ax2,_0x5d2ax4))};this[_0xe4bc[441]][_0xe4bc[2265]](_0x5d2ax2)};mxGraph[_0xe4bc[202]][_0xe4bc[2443]]=function(_0x5d2ax2,_0x5d2ax3){null==_0x5d2ax2[_0xe4bc[1211]]&&(_0x5d2ax2[_0xe4bc[1211]]=[]);_0x5d2ax2[_0xe4bc[1211]][_0xe4bc[207]](_0x5d2ax3);var _0x5d2ax4=this[_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax2);null!=_0x5d2ax4&&this[_0xe4bc[259]][_0xe4bc[258]](_0x5d2ax4);this[_0xe4bc[746]]( new mxEventObject(mxEvent.ADD_OVERLAY,_0xe4bc[246],_0x5d2ax2,_0xe4bc[2201],_0x5d2ax3));return _0x5d2ax3};mxGraph[_0xe4bc[202]][_0xe4bc[2200]]=function(_0x5d2ax2){return _0x5d2ax2[_0xe4bc[1211]]};mxGraph[_0xe4bc[202]][_0xe4bc[2444]]=function(_0x5d2ax2,_0x5d2ax3){if(null==_0x5d2ax3){this[_0xe4bc[2445]](_0x5d2ax2)}else {var _0x5d2ax4=mxUtils[_0xe4bc[2]](_0x5d2ax2[_0xe4bc[1211]],_0x5d2ax3);0<=_0x5d2ax4?(_0x5d2ax2[_0xe4bc[1211]][_0xe4bc[300]](_0x5d2ax4,1),0==_0x5d2ax2[_0xe4bc[1211]][_0xe4bc[67]]&&(_0x5d2ax2[_0xe4bc[1211]]=null),_0x5d2ax4=this[_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax2),null!=_0x5d2ax4&&this[_0xe4bc[259]][_0xe4bc[258]](_0x5d2ax4),this[_0xe4bc[746]]( new mxEventObject(mxEvent.REMOVE_OVERLAY,_0xe4bc[246],_0x5d2ax2,_0xe4bc[2201],_0x5d2ax3))):_0x5d2ax3=null};return _0x5d2ax3};mxGraph[_0xe4bc[202]][_0xe4bc[2445]]=function(_0x5d2ax2){var _0x5d2ax3=_0x5d2ax2[_0xe4bc[1211]];if(null!=_0x5d2ax3){_0x5d2ax2[_0xe4bc[1211]]=null;var _0x5d2ax4=this[_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax2);null!=_0x5d2ax4&&this[_0xe4bc[259]][_0xe4bc[258]](_0x5d2ax4);for(_0x5d2ax4=0;_0x5d2ax4<_0x5d2ax3[_0xe4bc[67]];_0x5d2ax4++){this[_0xe4bc[746]]( new mxEventObject(mxEvent.REMOVE_OVERLAY,_0xe4bc[246],_0x5d2ax2,_0xe4bc[2201],_0x5d2ax3[_0x5d2ax4]))}};return _0x5d2ax3};mxGraph[_0xe4bc[202]][_0xe4bc[2446]]=function(_0x5d2ax2){_0x5d2ax2=null!=_0x5d2ax2?_0x5d2ax2:this[_0xe4bc[251]][_0xe4bc[501]]();this[_0xe4bc[2445]](_0x5d2ax2);for(var _0x5d2ax3=this[_0xe4bc[251]][_0xe4bc[262]](_0x5d2ax2),_0x5d2ax4=0;_0x5d2ax4<_0x5d2ax3;_0x5d2ax4++){var _0x5d2ax5=this[_0xe4bc[251]][_0xe4bc[263]](_0x5d2ax2,_0x5d2ax4);this[_0xe4bc[2446]](_0x5d2ax5)}};mxGraph[_0xe4bc[202]][_0xe4bc[2447]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){if(null!=_0x5d2ax3&&0<_0x5d2ax3[_0xe4bc[67]]){return _0x5d2ax4=null!=_0x5d2ax4?_0x5d2ax4:this[_0xe4bc[2419]],_0x5d2ax3= new mxCellOverlay(_0x5d2ax4,_0xe4bc[2448]+_0x5d2ax3+_0xe4bc[2449]),_0x5d2ax5&&_0x5d2ax3[_0xe4bc[169]](mxEvent.CLICK,mxUtils[_0xe4bc[885]](this,function(_0x5d2ax3,_0x5d2ax4){this[_0xe4bc[994]]()&&this[_0xe4bc[2450]](_0x5d2ax2)})),this[_0xe4bc[2443]](_0x5d2ax2,_0x5d2ax3)};this[_0xe4bc[2445]](_0x5d2ax2);return null};mxGraph[_0xe4bc[202]][_0xe4bc[855]]=function(_0x5d2ax2){this[_0xe4bc[2451]](null,_0x5d2ax2)};mxGraph[_0xe4bc[202]][_0xe4bc[2451]]=function(_0x5d2ax2,_0x5d2ax3){null==_0x5d2ax2&&(_0x5d2ax2=this[_0xe4bc[2452]](),null!=_0x5d2ax2&&!this[_0xe4bc[2453]](_0x5d2ax2)&&(_0x5d2ax2=null));null!=_0x5d2ax2&&(this[_0xe4bc[746]]( new mxEventObject(mxEvent.START_EDITING,_0xe4bc[246],_0x5d2ax2,_0xe4bc[763],_0x5d2ax3)),this[_0xe4bc[2347]][_0xe4bc[855]](_0x5d2ax2,_0x5d2ax3))};mxGraph[_0xe4bc[202]][_0xe4bc[2142]]=function(_0x5d2ax2,_0x5d2ax3){return this[_0xe4bc[2454]](_0x5d2ax2)};mxGraph[_0xe4bc[202]][_0xe4bc[2126]]=function(_0x5d2ax2){this[_0xe4bc[2347]][_0xe4bc[2126]](_0x5d2ax2)};mxGraph[_0xe4bc[202]][_0xe4bc[850]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){this[_0xe4bc[251]][_0xe4bc[473]]();try{this[_0xe4bc[2456]](_0x5d2ax2,_0x5d2ax3,this[_0xe4bc[2455]](_0x5d2ax2)),this[_0xe4bc[746]]( new mxEventObject(mxEvent.LABEL_CHANGED,_0xe4bc[246],_0x5d2ax2,_0xe4bc[131],_0x5d2ax3,_0xe4bc[763],_0x5d2ax4))}finally{this[_0xe4bc[251]][_0xe4bc[476]]()};return _0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[2456]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){this[_0xe4bc[251]][_0xe4bc[473]]();try{this[_0xe4bc[251]][_0xe4bc[1966]](_0x5d2ax2,_0x5d2ax3),_0x5d2ax4&&this[_0xe4bc[2457]](_0x5d2ax2,!1)}finally{this[_0xe4bc[251]][_0xe4bc[476]]()}};mxGraph[_0xe4bc[202]][_0xe4bc[859]]=function(_0x5d2ax2){this[_0xe4bc[2126]](!0);this[_0xe4bc[2433]][_0xe4bc[862]]();this[_0xe4bc[1011]][_0xe4bc[862]]();_0x5d2ax2=this[_0xe4bc[897]]();for(var _0x5d2ax3=0;_0x5d2ax3<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax3++){var _0x5d2ax4=this[_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax2[_0x5d2ax3]);null!=_0x5d2ax4&&null!=_0x5d2ax4[_0xe4bc[2458]]&&_0x5d2ax4[_0xe4bc[2458]][_0xe4bc[862]]()}};mxGraph[_0xe4bc[202]][_0xe4bc[173]]=function(_0x5d2ax2){var _0x5d2ax3=_0x5d2ax2[_0xe4bc[727]](),_0x5d2ax4=_0x5d2ax2[_0xe4bc[736]](),_0x5d2ax5= new mxEventObject(mxEvent.CLICK,_0xe4bc[763],_0x5d2ax3,_0xe4bc[246],_0x5d2ax4);_0x5d2ax2[_0xe4bc[721]]()&&_0x5d2ax5[_0xe4bc[722]]();this[_0xe4bc[746]](_0x5d2ax5);this[_0xe4bc[994]]()&&(!mxEvent[_0xe4bc[721]](_0x5d2ax3)&&!_0x5d2ax5[_0xe4bc[721]]())&&(null!=_0x5d2ax4?this[_0xe4bc[2459]](_0x5d2ax4,_0x5d2ax3):(_0x5d2ax4=null,this[_0xe4bc[2460]]()&&(_0x5d2ax4=this[_0xe4bc[2461]](_0x5d2ax2[_0xe4bc[734]](),_0x5d2ax2[_0xe4bc[735]]())),null!=_0x5d2ax4?this[_0xe4bc[2459]](_0x5d2ax4,_0x5d2ax3):this[_0xe4bc[2462]](_0x5d2ax3)||this[_0xe4bc[2440]]()))};mxGraph[_0xe4bc[202]][_0xe4bc[761]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4= new mxEventObject(mxEvent.DOUBLE_CLICK,_0xe4bc[763],_0x5d2ax2,_0xe4bc[246],_0x5d2ax3);this[_0xe4bc[746]](_0x5d2ax4);this[_0xe4bc[994]]()&&(!mxEvent[_0xe4bc[721]](_0x5d2ax2)&&!_0x5d2ax4[_0xe4bc[721]]()&&null!=_0x5d2ax3&&this[_0xe4bc[2453]](_0x5d2ax3))&&this[_0xe4bc[2451]](_0x5d2ax3,_0x5d2ax2)};mxGraph[_0xe4bc[202]][_0xe4bc[1014]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){if(!this[_0xe4bc[2382]]&&(this[_0xe4bc[2384]]||mxUtils[_0xe4bc[1134]](this[_0xe4bc[526]]))){var _0x5d2ax9=this[_0xe4bc[526]];_0x5d2ax5=null!=_0x5d2ax5?_0x5d2ax5:20;if(_0x5d2ax2>=_0x5d2ax9[_0xe4bc[360]]&&_0x5d2ax3>=_0x5d2ax9[_0xe4bc[190]]&&_0x5d2ax2<=_0x5d2ax9[_0xe4bc[360]]+_0x5d2ax9[_0xe4bc[159]]&&_0x5d2ax3<=_0x5d2ax9[_0xe4bc[190]]+_0x5d2ax9[_0xe4bc[157]]){var _0x5d2axa=_0x5d2ax9[_0xe4bc[360]]+_0x5d2ax9[_0xe4bc[159]]-_0x5d2ax2;if(_0x5d2axa<_0x5d2ax5){if(_0x5d2ax2=_0x5d2ax9[_0xe4bc[360]],_0x5d2ax9[_0xe4bc[360]]+=_0x5d2ax5-_0x5d2axa,_0x5d2ax4&&_0x5d2ax2==_0x5d2ax9[_0xe4bc[360]]){if(this[_0xe4bc[507]]==mxConstants[_0xe4bc[508]]){_0x5d2ax2=this[_0xe4bc[441]][_0xe4bc[2024]]()[_0xe4bc[538]];var _0x5d2ax12=this[_0xe4bc[526]][_0xe4bc[1526]]+_0x5d2ax5-_0x5d2axa}else {_0x5d2ax12=Math[_0xe4bc[160]](_0x5d2ax9[_0xe4bc[159]],_0x5d2ax9[_0xe4bc[1526]])+_0x5d2ax5-_0x5d2axa,_0x5d2ax2=this[_0xe4bc[441]][_0xe4bc[2051]]()};_0x5d2ax2[_0xe4bc[124]][_0xe4bc[117]]=_0x5d2ax12+_0xe4bc[168];_0x5d2ax9[_0xe4bc[360]]+=_0x5d2ax5-_0x5d2axa}}else {_0x5d2axa=_0x5d2ax2-_0x5d2ax9[_0xe4bc[360]],_0x5d2axa<_0x5d2ax5&&(_0x5d2ax9[_0xe4bc[360]]-=_0x5d2ax5-_0x5d2axa)};_0x5d2axa=_0x5d2ax9[_0xe4bc[190]]+_0x5d2ax9[_0xe4bc[157]]-_0x5d2ax3;_0x5d2axa<_0x5d2ax5?(_0x5d2ax2=_0x5d2ax9[_0xe4bc[190]],_0x5d2ax9[_0xe4bc[190]]+=_0x5d2ax5-_0x5d2axa,_0x5d2ax2==_0x5d2ax9[_0xe4bc[190]]&&_0x5d2ax4&&(this[_0xe4bc[507]]==mxConstants[_0xe4bc[508]]?(_0x5d2ax2=this[_0xe4bc[441]][_0xe4bc[2024]]()[_0xe4bc[538]],_0x5d2ax3=this[_0xe4bc[526]][_0xe4bc[191]]+_0x5d2ax5-_0x5d2axa):(_0x5d2ax3=Math[_0xe4bc[160]](_0x5d2ax9[_0xe4bc[157]],_0x5d2ax9[_0xe4bc[191]])+_0x5d2ax5-_0x5d2axa,_0x5d2ax2=this[_0xe4bc[441]][_0xe4bc[2051]]()),_0x5d2ax2[_0xe4bc[124]][_0xe4bc[119]]=_0x5d2ax3+_0xe4bc[168],_0x5d2ax9[_0xe4bc[190]]+=_0x5d2ax5-_0x5d2axa)):(_0x5d2axa=_0x5d2ax3-_0x5d2ax9[_0xe4bc[190]],_0x5d2axa<_0x5d2ax5&&(_0x5d2ax9[_0xe4bc[190]]-=_0x5d2ax5-_0x5d2axa))}}else {this[_0xe4bc[2383]]&&!this[_0xe4bc[2316]][_0xe4bc[1124]]&&(null==this[_0xe4bc[2463]]&&(this[_0xe4bc[2463]]=this[_0xe4bc[2464]]()),this[_0xe4bc[2463]][_0xe4bc[1143]](_0x5d2ax2+this[_0xe4bc[1136]],_0x5d2ax3+this[_0xe4bc[1137]]))}};mxGraph[_0xe4bc[202]][_0xe4bc[2464]]=function(){return  new mxPanningManager(this)};mxGraph[_0xe4bc[202]][_0xe4bc[2465]]=function(){function _0x5d2ax2(_0x5d2ax2){var _0x5d2ax3=0,_0x5d2ax3=_0xe4bc[2466]==_0x5d2ax2?2:_0xe4bc[2467]==_0x5d2ax2?4:_0xe4bc[2468]==_0x5d2ax2?6:parseInt(_0x5d2ax2);isNaN(_0x5d2ax3)&&(_0x5d2ax3=0);return _0x5d2ax3}var _0x5d2ax3=mxUtils[_0xe4bc[275]](this[_0xe4bc[526]]),_0x5d2ax4= new mxRectangle;_0x5d2ax4[_0xe4bc[235]]=_0x5d2ax2(_0x5d2ax3[_0xe4bc[2469]])+parseInt(_0x5d2ax3[_0xe4bc[357]]||0);_0x5d2ax4[_0xe4bc[236]]=_0x5d2ax2(_0x5d2ax3[_0xe4bc[2470]])+parseInt(_0x5d2ax3[_0xe4bc[2471]]||0);_0x5d2ax4[_0xe4bc[117]]=_0x5d2ax2(_0x5d2ax3[_0xe4bc[2472]])+parseInt(_0x5d2ax3[_0xe4bc[1164]]||0);_0x5d2ax4[_0xe4bc[119]]=_0x5d2ax2(_0x5d2ax3[_0xe4bc[2473]])+parseInt(_0x5d2ax3[_0xe4bc[2474]]||0);return _0x5d2ax4};mxGraph[_0xe4bc[202]][_0xe4bc[2475]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){_0x5d2ax2=this[_0xe4bc[441]][_0xe4bc[255]];var _0x5d2ax5=this[_0xe4bc[441]][_0xe4bc[513]],_0x5d2ax9=this[_0xe4bc[2013]],_0x5d2axa=_0x5d2ax2*this[_0xe4bc[2012]],_0x5d2ax9= new mxRectangle(0,0,_0x5d2ax9[_0xe4bc[117]]*_0x5d2axa,_0x5d2ax9[_0xe4bc[119]]*_0x5d2axa);_0x5d2ax3=this[_0xe4bc[2357]]?Math[_0xe4bc[430]](_0x5d2ax3/_0x5d2ax9[_0xe4bc[117]]):1;_0x5d2ax4=this[_0xe4bc[2357]]?Math[_0xe4bc[430]](_0x5d2ax4/_0x5d2ax9[_0xe4bc[119]]):1;return  new mxRectangle(0,0,_0x5d2ax3*_0x5d2ax9[_0xe4bc[117]]+2+_0x5d2ax5[_0xe4bc[235]]/_0x5d2ax2,_0x5d2ax4*_0x5d2ax9[_0xe4bc[119]]+2+_0x5d2ax5[_0xe4bc[236]]/_0x5d2ax2)};mxGraph[_0xe4bc[202]][_0xe4bc[2258]]=function(){var _0x5d2ax2=this[_0xe4bc[517]]();if(null!=this[_0xe4bc[526]]){var _0x5d2ax3=this[_0xe4bc[2476]](),_0x5d2ax4=Math[_0xe4bc[160]](0,_0x5d2ax2[_0xe4bc[235]]+_0x5d2ax2[_0xe4bc[117]]+1+_0x5d2ax3),_0x5d2ax3=Math[_0xe4bc[160]](0,_0x5d2ax2[_0xe4bc[236]]+_0x5d2ax2[_0xe4bc[119]]+1+_0x5d2ax3);null!=this[_0xe4bc[2387]]&&(_0x5d2ax4=Math[_0xe4bc[160]](_0x5d2ax4,this[_0xe4bc[2387]][_0xe4bc[117]]),_0x5d2ax3=Math[_0xe4bc[160]](_0x5d2ax3,this[_0xe4bc[2387]][_0xe4bc[119]]));this[_0xe4bc[2389]]&&this[_0xe4bc[2477]](_0x5d2ax4,_0x5d2ax3);if(this[_0xe4bc[2361]]||!mxClient[_0xe4bc[80]]&&this[_0xe4bc[2273]]){var _0x5d2ax5=this[_0xe4bc[2475]](_0x5d2ax2,_0x5d2ax4,_0x5d2ax3);null!=_0x5d2ax5&&(_0x5d2ax4=_0x5d2ax5[_0xe4bc[117]],_0x5d2ax3=_0x5d2ax5[_0xe4bc[119]])};null!=this[_0xe4bc[2386]]&&(_0x5d2ax4=Math[_0xe4bc[160]](_0x5d2ax4,this[_0xe4bc[2386]][_0xe4bc[117]]*this[_0xe4bc[441]][_0xe4bc[255]]),_0x5d2ax3=Math[_0xe4bc[160]](_0x5d2ax3,this[_0xe4bc[2386]][_0xe4bc[119]]*this[_0xe4bc[441]][_0xe4bc[255]]));_0x5d2ax4=Math[_0xe4bc[430]](_0x5d2ax4-1);_0x5d2ax3=Math[_0xe4bc[430]](_0x5d2ax3-1);this[_0xe4bc[507]]==mxConstants[_0xe4bc[508]]?(_0x5d2ax5=this[_0xe4bc[441]][_0xe4bc[2024]]()[_0xe4bc[538]],_0x5d2ax5[_0xe4bc[124]][_0xe4bc[2478]]=Math[_0xe4bc[160]](1,_0x5d2ax4)+_0xe4bc[168],_0x5d2ax5[_0xe4bc[124]][_0xe4bc[2479]]=Math[_0xe4bc[160]](1,_0x5d2ax3)+_0xe4bc[168],_0x5d2ax5[_0xe4bc[124]][_0xe4bc[117]]=_0xe4bc[118],_0x5d2ax5[_0xe4bc[124]][_0xe4bc[119]]=_0xe4bc[118]):mxClient[_0xe4bc[496]]?this[_0xe4bc[441]][_0xe4bc[2320]](Math[_0xe4bc[160]](1,_0x5d2ax4),Math[_0xe4bc[160]](1,_0x5d2ax3)):(this[_0xe4bc[441]][_0xe4bc[510]][_0xe4bc[124]][_0xe4bc[2478]]=Math[_0xe4bc[160]](1,_0x5d2ax4)+_0xe4bc[168],this[_0xe4bc[441]][_0xe4bc[510]][_0xe4bc[124]][_0xe4bc[2479]]=Math[_0xe4bc[160]](1,_0x5d2ax3)+_0xe4bc[168]);this[_0xe4bc[2480]](this[_0xe4bc[2357]],_0x5d2ax4-1,_0x5d2ax3-1)};this[_0xe4bc[746]]( new mxEventObject(mxEvent.SIZE,_0xe4bc[1562],_0x5d2ax2))};mxGraph[_0xe4bc[202]][_0xe4bc[2477]]=function(_0x5d2ax2,_0x5d2ax3){if(mxClient[_0xe4bc[80]]){if(mxClient[_0xe4bc[496]]){var _0x5d2ax4=this[_0xe4bc[2465]]();_0x5d2ax2+=Math[_0xe4bc[160]](2,_0x5d2ax4[_0xe4bc[235]]+_0x5d2ax4[_0xe4bc[117]]+1);_0x5d2ax3+=Math[_0xe4bc[160]](2,_0x5d2ax4[_0xe4bc[236]]+_0x5d2ax4[_0xe4bc[119]]+1)}else {9<=document[_0xe4bc[5]]?(_0x5d2ax2+=3,_0x5d2ax3+=5):(_0x5d2ax2+=1,_0x5d2ax3+=1)}}else {_0x5d2ax3+=1};null!=this[_0xe4bc[2388]]&&(_0x5d2ax2=Math[_0xe4bc[243]](this[_0xe4bc[2388]][_0xe4bc[117]],_0x5d2ax2),_0x5d2ax3=Math[_0xe4bc[243]](this[_0xe4bc[2388]][_0xe4bc[119]],_0x5d2ax3));this[_0xe4bc[526]][_0xe4bc[124]][_0xe4bc[117]]=Math[_0xe4bc[430]](_0x5d2ax2)+_0xe4bc[168];this[_0xe4bc[526]][_0xe4bc[124]][_0xe4bc[119]]=Math[_0xe4bc[430]](_0x5d2ax3)+_0xe4bc[168]};mxGraph[_0xe4bc[202]][_0xe4bc[2480]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){var _0x5d2ax5=this[_0xe4bc[441]][_0xe4bc[255]],_0x5d2ax9=this[_0xe4bc[441]][_0xe4bc[513]],_0x5d2axa=this[_0xe4bc[2013]],_0x5d2ax12=_0x5d2ax5*this[_0xe4bc[2012]],_0x5d2ax9= new mxRectangle(_0x5d2ax5*_0x5d2ax9[_0xe4bc[235]],_0x5d2ax5*_0x5d2ax9[_0xe4bc[236]],_0x5d2axa[_0xe4bc[117]]*_0x5d2ax12,_0x5d2axa[_0xe4bc[119]]*_0x5d2ax12);_0x5d2ax2=_0x5d2ax2&&Math[_0xe4bc[243]](_0x5d2ax9[_0xe4bc[117]],_0x5d2ax9[_0xe4bc[119]])>this[_0xe4bc[2360]];_0x5d2ax9[_0xe4bc[235]]=mxUtils[_0xe4bc[1454]](_0x5d2ax9[_0xe4bc[235]],_0x5d2ax9[_0xe4bc[117]]);_0x5d2ax9[_0xe4bc[236]]=mxUtils[_0xe4bc[1454]](_0x5d2ax9[_0xe4bc[236]],_0x5d2ax9[_0xe4bc[119]]);_0x5d2axa=_0x5d2ax2?Math[_0xe4bc[430]]((_0x5d2ax3-_0x5d2ax9[_0xe4bc[235]])/_0x5d2ax9[_0xe4bc[117]]):0;_0x5d2ax2=_0x5d2ax2?Math[_0xe4bc[430]]((_0x5d2ax4-_0x5d2ax9[_0xe4bc[236]])/_0x5d2ax9[_0xe4bc[119]]):0;null==this[_0xe4bc[2481]]&&0<_0x5d2axa&&(this[_0xe4bc[2481]]=[]);if(null!=this[_0xe4bc[2481]]){for(_0x5d2ax12=0;_0x5d2ax12<=_0x5d2axa;_0x5d2ax12++){var _0x5d2ax13=[ new mxPoint(_0x5d2ax9[_0xe4bc[235]]+_0x5d2ax12*_0x5d2ax9[_0xe4bc[117]],1), new mxPoint(_0x5d2ax9[_0xe4bc[235]]+_0x5d2ax12*_0x5d2ax9[_0xe4bc[117]],_0x5d2ax4)];null!=this[_0xe4bc[2481]][_0x5d2ax12]?(this[_0xe4bc[2481]][_0x5d2ax12][_0xe4bc[255]]=1,this[_0xe4bc[2481]][_0x5d2ax12][_0xe4bc[1525]]=_0x5d2ax13,this[_0xe4bc[2481]][_0x5d2ax12][_0xe4bc[258]]()):(_0x5d2ax13= new mxPolyline(_0x5d2ax13,this[_0xe4bc[2358]],this[_0xe4bc[255]]),_0x5d2ax13[_0xe4bc[507]]=this[_0xe4bc[507]],_0x5d2ax13[_0xe4bc[1522]]=this[_0xe4bc[2359]],_0x5d2ax13[_0xe4bc[255]]=_0x5d2ax5,_0x5d2ax13[_0xe4bc[176]](this[_0xe4bc[441]][_0xe4bc[2053]]),_0x5d2ax13[_0xe4bc[258]](),this[_0xe4bc[2481]][_0x5d2ax12]=_0x5d2ax13)};for(_0x5d2ax12=_0x5d2axa;_0x5d2ax12<this[_0xe4bc[2481]][_0xe4bc[67]];_0x5d2ax12++){this[_0xe4bc[2481]][_0x5d2ax12][_0xe4bc[515]]()};this[_0xe4bc[2481]][_0xe4bc[300]](_0x5d2axa,this[_0xe4bc[2481]][_0xe4bc[67]]-_0x5d2axa)};null==this[_0xe4bc[2482]]&&0<_0x5d2ax2&&(this[_0xe4bc[2482]]=[]);if(null!=this[_0xe4bc[2482]]){for(_0x5d2ax12=0;_0x5d2ax12<=_0x5d2ax2;_0x5d2ax12++){_0x5d2ax13=[ new mxPoint(1,_0x5d2ax9[_0xe4bc[236]]+_0x5d2ax12*_0x5d2ax9[_0xe4bc[119]]), new mxPoint(_0x5d2ax3,_0x5d2ax9[_0xe4bc[236]]+_0x5d2ax12*_0x5d2ax9[_0xe4bc[119]])],null!=this[_0xe4bc[2482]][_0x5d2ax12]?(this[_0xe4bc[2482]][_0x5d2ax12][_0xe4bc[255]]=1,this[_0xe4bc[2482]][_0x5d2ax12][_0xe4bc[1525]]=_0x5d2ax13,this[_0xe4bc[2482]][_0x5d2ax12][_0xe4bc[258]]()):(_0x5d2ax13= new mxPolyline(_0x5d2ax13,this[_0xe4bc[2358]],_0x5d2ax5),_0x5d2ax13[_0xe4bc[507]]=this[_0xe4bc[507]],_0x5d2ax13[_0xe4bc[1522]]=this[_0xe4bc[2359]],_0x5d2ax13[_0xe4bc[255]]=_0x5d2ax5,_0x5d2ax13[_0xe4bc[176]](this[_0xe4bc[441]][_0xe4bc[2053]]),_0x5d2ax13[_0xe4bc[258]](),this[_0xe4bc[2482]][_0x5d2ax12]=_0x5d2ax13)};for(_0x5d2ax12=_0x5d2ax2;_0x5d2ax12<this[_0xe4bc[2482]][_0xe4bc[67]];_0x5d2ax12++){this[_0xe4bc[2482]][_0x5d2ax12][_0xe4bc[515]]()};this[_0xe4bc[2482]][_0xe4bc[300]](_0x5d2ax2,this[_0xe4bc[2482]][_0xe4bc[67]]-_0x5d2ax2)}};mxGraph[_0xe4bc[202]][_0xe4bc[1705]]=function(_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[251]][_0xe4bc[474]](_0x5d2ax2),_0x5d2ax4=null,_0x5d2ax4=this[_0xe4bc[251]][_0xe4bc[250]](_0x5d2ax2)?this[_0xe4bc[94]][_0xe4bc[2077]]():this[_0xe4bc[94]][_0xe4bc[2076]]();null!=_0x5d2ax3&&(_0x5d2ax4=this[_0xe4bc[2483]](this[_0xe4bc[94]][_0xe4bc[1705]](_0x5d2ax3,_0x5d2ax4)));null==_0x5d2ax4&&(_0x5d2ax4=mxGraph[_0xe4bc[202]][_0xe4bc[2346]]);return _0x5d2ax4};mxGraph[_0xe4bc[202]][_0xe4bc[2483]]=function(_0x5d2ax2){if(null!=_0x5d2ax2){var _0x5d2ax3=_0x5d2ax2[mxConstants[_0xe4bc[2484]]],_0x5d2ax4=this[_0xe4bc[2485]](_0x5d2ax3);null!=_0x5d2ax4?_0x5d2ax2[mxConstants[_0xe4bc[2484]]]=_0x5d2ax4:_0x5d2ax4=_0x5d2ax3;null!=_0x5d2ax4&&_0xe4bc[2486]==_0x5d2ax4[_0xe4bc[85]](0,11)&&(_0x5d2ax3=_0x5d2ax4[_0xe4bc[2]](_0xe4bc[537]),0<_0x5d2ax3&&(_0x5d2ax4=_0x5d2ax4[_0xe4bc[85]](0,_0x5d2ax3)+_0xe4bc[2487]+_0x5d2ax4[_0xe4bc[85]](_0x5d2ax3+1)),_0x5d2ax2[mxConstants[_0xe4bc[2484]]]=_0x5d2ax4)};return _0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[2488]]=function(_0x5d2ax2,_0x5d2ax3){_0x5d2ax3=_0x5d2ax3||this[_0xe4bc[897]]();if(null!=_0x5d2ax3){this[_0xe4bc[251]][_0xe4bc[473]]();try{for(var _0x5d2ax4=0;_0x5d2ax4<_0x5d2ax3[_0xe4bc[67]];_0x5d2ax4++){this[_0xe4bc[251]][_0xe4bc[475]](_0x5d2ax3[_0x5d2ax4],_0x5d2ax2)}}finally{this[_0xe4bc[251]][_0xe4bc[476]]()}}};mxGraph[_0xe4bc[202]][_0xe4bc[2489]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){_0x5d2ax4=_0x5d2ax4||this[_0xe4bc[2452]]();this[_0xe4bc[2490]](_0x5d2ax2,_0x5d2ax3,[_0x5d2ax4])};mxGraph[_0xe4bc[202]][_0xe4bc[2490]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){_0x5d2ax3=null!=_0x5d2ax3?_0x5d2ax3:!1;_0x5d2ax4=_0x5d2ax4||this[_0xe4bc[897]]();if(null!=_0x5d2ax4&&0<_0x5d2ax4[_0xe4bc[67]]){var _0x5d2ax5=this[_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax4[0]),_0x5d2ax5=null!=_0x5d2ax5?_0x5d2ax5[_0xe4bc[124]]:this[_0xe4bc[1705]](_0x5d2ax4[0]);null!=_0x5d2ax5&&(_0x5d2ax3=mxUtils[_0xe4bc[433]](_0x5d2ax5,_0x5d2ax2,_0x5d2ax3)?0:1,this[_0xe4bc[1717]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4))}};mxGraph[_0xe4bc[202]][_0xe4bc[1717]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){_0x5d2ax4=_0x5d2ax4||this[_0xe4bc[897]]();mxUtils[_0xe4bc[1717]](this[_0xe4bc[251]],_0x5d2ax4,_0x5d2ax2,_0x5d2ax3)};mxGraph[_0xe4bc[202]][_0xe4bc[2491]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){this[_0xe4bc[2492]](_0x5d2ax2,_0x5d2ax3,null,_0x5d2ax4)};mxGraph[_0xe4bc[202]][_0xe4bc[2492]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){_0x5d2ax5=_0x5d2ax5||this[_0xe4bc[897]]();if(null!=_0x5d2ax5&&0<_0x5d2ax5[_0xe4bc[67]]){if(null==_0x5d2ax4){var _0x5d2ax9=this[_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax5[0]),_0x5d2ax9=null!=_0x5d2ax9?_0x5d2ax9[_0xe4bc[124]]:this[_0xe4bc[1705]](_0x5d2ax5[0]);null!=_0x5d2ax9&&(_0x5d2ax4=(parseInt(_0x5d2ax9[_0x5d2ax2]||0)&_0x5d2ax3)!=_0x5d2ax3)};mxUtils[_0xe4bc[2492]](this[_0xe4bc[251]],_0x5d2ax5,_0x5d2ax2,_0x5d2ax3,_0x5d2ax4)}};mxGraph[_0xe4bc[202]][_0xe4bc[849]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){null==_0x5d2ax3&&(_0x5d2ax3=this[_0xe4bc[897]]());if(null!=_0x5d2ax3&&1<_0x5d2ax3[_0xe4bc[67]]){if(null==_0x5d2ax4){for(var _0x5d2ax5=0;_0x5d2ax5<_0x5d2ax3[_0xe4bc[67]];_0x5d2ax5++){var _0x5d2ax9=this[_0xe4bc[1198]](_0x5d2ax3[_0x5d2ax5]);if(null!=_0x5d2ax9&&!this[_0xe4bc[251]][_0xe4bc[250]](_0x5d2ax3[_0x5d2ax5])){if(null==_0x5d2ax4){if(_0x5d2ax2==mxConstants[_0xe4bc[479]]){_0x5d2ax4=_0x5d2ax9[_0xe4bc[235]]+_0x5d2ax9[_0xe4bc[117]]/2;break}else {if(_0x5d2ax2==mxConstants[_0xe4bc[480]]){_0x5d2ax4=_0x5d2ax9[_0xe4bc[235]]+_0x5d2ax9[_0xe4bc[117]]}else {if(_0x5d2ax2==mxConstants[_0xe4bc[1687]]){_0x5d2ax4=_0x5d2ax9[_0xe4bc[236]]}else {if(_0x5d2ax2==mxConstants[_0xe4bc[481]]){_0x5d2ax4=_0x5d2ax9[_0xe4bc[236]]+_0x5d2ax9[_0xe4bc[119]]/2;break}else {_0x5d2ax4=_0x5d2ax2==mxConstants[_0xe4bc[482]]?_0x5d2ax9[_0xe4bc[236]]+_0x5d2ax9[_0xe4bc[119]]:_0x5d2ax9[_0xe4bc[235]]}}}}}else {_0x5d2ax4=_0x5d2ax2==mxConstants[_0xe4bc[480]]?Math[_0xe4bc[160]](_0x5d2ax4,_0x5d2ax9[_0xe4bc[235]]+_0x5d2ax9[_0xe4bc[117]]):_0x5d2ax2==mxConstants[_0xe4bc[1687]]?Math[_0xe4bc[243]](_0x5d2ax4,_0x5d2ax9[_0xe4bc[236]]):_0x5d2ax2==mxConstants[_0xe4bc[482]]?Math[_0xe4bc[160]](_0x5d2ax4,_0x5d2ax9[_0xe4bc[236]]+_0x5d2ax9[_0xe4bc[119]]):Math[_0xe4bc[243]](_0x5d2ax4,_0x5d2ax9[_0xe4bc[235]])}}}};if(null!=_0x5d2ax4){this[_0xe4bc[251]][_0xe4bc[473]]();try{for(_0x5d2ax5=0;_0x5d2ax5<_0x5d2ax3[_0xe4bc[67]];_0x5d2ax5++){_0x5d2ax9=this[_0xe4bc[1198]](_0x5d2ax3[_0x5d2ax5]),null!=_0x5d2ax9&&!this[_0xe4bc[251]][_0xe4bc[250]](_0x5d2ax3[_0x5d2ax5])&&(_0x5d2ax9=_0x5d2ax9[_0xe4bc[238]](),_0x5d2ax2==mxConstants[_0xe4bc[479]]?_0x5d2ax9[_0xe4bc[235]]=_0x5d2ax4-_0x5d2ax9[_0xe4bc[117]]/2:_0x5d2ax2==mxConstants[_0xe4bc[480]]?_0x5d2ax9[_0xe4bc[235]]=_0x5d2ax4-_0x5d2ax9[_0xe4bc[117]]:_0x5d2ax2==mxConstants[_0xe4bc[1687]]?_0x5d2ax9[_0xe4bc[236]]=_0x5d2ax4:_0x5d2ax2==mxConstants[_0xe4bc[481]]?_0x5d2ax9[_0xe4bc[236]]=_0x5d2ax4-_0x5d2ax9[_0xe4bc[119]]/2:_0x5d2ax2==mxConstants[_0xe4bc[482]]?_0x5d2ax9[_0xe4bc[236]]=_0x5d2ax4-_0x5d2ax9[_0xe4bc[119]]:_0x5d2ax9[_0xe4bc[235]]=_0x5d2ax4,this[_0xe4bc[251]][_0xe4bc[1724]](_0x5d2ax3[_0x5d2ax5],_0x5d2ax9))};this[_0xe4bc[746]]( new mxEventObject(mxEvent.ALIGN_CELLS,_0xe4bc[611],_0x5d2ax2,_0xe4bc[895],_0x5d2ax3))}finally{this[_0xe4bc[251]][_0xe4bc[476]]()}}};return _0x5d2ax3};mxGraph[_0xe4bc[202]][_0xe4bc[854]]=function(_0x5d2ax2){if(null!=_0x5d2ax2&&null!=this[_0xe4bc[2356]]){this[_0xe4bc[251]][_0xe4bc[473]]();try{var _0x5d2ax3=this[_0xe4bc[251]][_0xe4bc[474]](_0x5d2ax2);null==_0x5d2ax3||0==_0x5d2ax3[_0xe4bc[67]]?this[_0xe4bc[251]][_0xe4bc[475]](_0x5d2ax2,this[_0xe4bc[2356]]):this[_0xe4bc[251]][_0xe4bc[475]](_0x5d2ax2,null);this[_0xe4bc[1809]](_0x5d2ax2);this[_0xe4bc[746]]( new mxEventObject(mxEvent.FLIP_EDGE,_0xe4bc[1989],_0x5d2ax2))}finally{this[_0xe4bc[251]][_0xe4bc[476]]()}};return _0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[2493]]=function(_0x5d2ax2){this[_0xe4bc[2336]][_0xe4bc[207]](_0x5d2ax2)};mxGraph[_0xe4bc[202]][_0xe4bc[2494]]=function(_0x5d2ax2){for(var _0x5d2ax3=[],_0x5d2ax4=0;_0x5d2ax4<this[_0xe4bc[2336]][_0xe4bc[67]];_0x5d2ax4++){this[_0xe4bc[2336]][_0x5d2ax4]!=_0x5d2ax2&&_0x5d2ax3[_0xe4bc[207]](this[_0xe4bc[2336]][_0x5d2ax4])};this[_0xe4bc[2336]]=_0x5d2ax3};mxGraph[_0xe4bc[202]][_0xe4bc[2485]]=function(_0x5d2ax2){if(null!=_0x5d2ax2){for(var _0x5d2ax3=0;_0x5d2ax3<this[_0xe4bc[2336]][_0xe4bc[67]];_0x5d2ax3++){var _0x5d2ax4=this[_0xe4bc[2336]][_0x5d2ax3][_0xe4bc[1202]](_0x5d2ax2);if(null!=_0x5d2ax4){return _0x5d2ax4}}};return null};mxGraph[_0xe4bc[202]][_0xe4bc[840]]=function(_0x5d2ax2,_0x5d2ax3){null==_0x5d2ax3&&(_0x5d2ax3=mxUtils[_0xe4bc[1779]](this[_0xe4bc[897]](),!0));this[_0xe4bc[251]][_0xe4bc[473]]();try{this[_0xe4bc[841]](_0x5d2ax3,_0x5d2ax2),this[_0xe4bc[746]]( new mxEventObject(mxEvent.ORDER_CELLS,_0xe4bc[2495],_0x5d2ax2,_0xe4bc[895],_0x5d2ax3))}finally{this[_0xe4bc[251]][_0xe4bc[476]]()};return _0x5d2ax3};mxGraph[_0xe4bc[202]][_0xe4bc[841]]=function(_0x5d2ax2,_0x5d2ax3){if(null!=_0x5d2ax2){this[_0xe4bc[251]][_0xe4bc[473]]();try{for(var _0x5d2ax4=0;_0x5d2ax4<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax4++){var _0x5d2ax5=this[_0xe4bc[251]][_0xe4bc[1197]](_0x5d2ax2[_0x5d2ax4]);_0x5d2ax3?this[_0xe4bc[251]][_0xe4bc[99]](_0x5d2ax5,_0x5d2ax2[_0x5d2ax4],_0x5d2ax4):this[_0xe4bc[251]][_0xe4bc[99]](_0x5d2ax5,_0x5d2ax2[_0x5d2ax4],this[_0xe4bc[251]][_0xe4bc[262]](_0x5d2ax5)-1)};this[_0xe4bc[746]]( new mxEventObject(mxEvent.CELLS_ORDERED,_0xe4bc[2495],_0x5d2ax3,_0xe4bc[895],_0x5d2ax2))}finally{this[_0xe4bc[251]][_0xe4bc[476]]()}}};mxGraph[_0xe4bc[202]][_0xe4bc[844]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){null==_0x5d2ax4&&(_0x5d2ax4=mxUtils[_0xe4bc[1779]](this[_0xe4bc[897]](),!0));_0x5d2ax4=this[_0xe4bc[2496]](_0x5d2ax4);null==_0x5d2ax2&&(_0x5d2ax2=this[_0xe4bc[2497]](_0x5d2ax4));var _0x5d2ax5=this[_0xe4bc[2498]](_0x5d2ax2,_0x5d2ax4,_0x5d2ax3);if(0<_0x5d2ax4[_0xe4bc[67]]&&null!=_0x5d2ax5){var _0x5d2ax9=this[_0xe4bc[251]][_0xe4bc[1197]](_0x5d2ax2);null==_0x5d2ax9&&(_0x5d2ax9=this[_0xe4bc[251]][_0xe4bc[1197]](_0x5d2ax4[0]));this[_0xe4bc[251]][_0xe4bc[473]]();try{null==this[_0xe4bc[1198]](_0x5d2ax2)&&this[_0xe4bc[251]][_0xe4bc[1724]](_0x5d2ax2, new mxGeometry);var _0x5d2axa=this[_0xe4bc[251]][_0xe4bc[262]](_0x5d2ax9);this[_0xe4bc[833]]([_0x5d2ax2],_0x5d2ax9,_0x5d2axa,null,null,!1);_0x5d2axa=this[_0xe4bc[251]][_0xe4bc[262]](_0x5d2ax2);this[_0xe4bc[833]](_0x5d2ax4,_0x5d2ax2,_0x5d2axa,null,null,!1,!1);this[_0xe4bc[835]](_0x5d2ax4,-_0x5d2ax5[_0xe4bc[235]],-_0x5d2ax5[_0xe4bc[236]],!1,!0);this[_0xe4bc[837]]([_0x5d2ax2],[_0x5d2ax5]);this[_0xe4bc[746]]( new mxEventObject(mxEvent.GROUP_CELLS,_0xe4bc[1504],_0x5d2ax2,_0xe4bc[467],_0x5d2ax3,_0xe4bc[895],_0x5d2ax4))}finally{this[_0xe4bc[251]][_0xe4bc[476]]()}};return _0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[2496]]=function(_0x5d2ax2){var _0x5d2ax3=[];if(null!=_0x5d2ax2&&0<_0x5d2ax2[_0xe4bc[67]]){var _0x5d2ax4=this[_0xe4bc[251]][_0xe4bc[1197]](_0x5d2ax2[0]);_0x5d2ax3[_0xe4bc[207]](_0x5d2ax2[0]);for(var _0x5d2ax5=1;_0x5d2ax5<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax5++){this[_0xe4bc[251]][_0xe4bc[1197]](_0x5d2ax2[_0x5d2ax5])==_0x5d2ax4&&_0x5d2ax3[_0xe4bc[207]](_0x5d2ax2[_0x5d2ax5])}};return _0x5d2ax3};mxGraph[_0xe4bc[202]][_0xe4bc[2498]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){_0x5d2ax3=this[_0xe4bc[1729]](_0x5d2ax3);null!=_0x5d2ax3&&(this[_0xe4bc[1730]](_0x5d2ax2)&&(_0x5d2ax2=this[_0xe4bc[1731]](_0x5d2ax2),_0x5d2ax3[_0xe4bc[235]]-=_0x5d2ax2[_0xe4bc[117]],_0x5d2ax3[_0xe4bc[236]]-=_0x5d2ax2[_0xe4bc[119]],_0x5d2ax3[_0xe4bc[117]]+=_0x5d2ax2[_0xe4bc[117]],_0x5d2ax3[_0xe4bc[119]]+=_0x5d2ax2[_0xe4bc[119]]),_0x5d2ax3[_0xe4bc[235]]-=_0x5d2ax4,_0x5d2ax3[_0xe4bc[236]]-=_0x5d2ax4,_0x5d2ax3[_0xe4bc[117]]+=2*_0x5d2ax4,_0x5d2ax3[_0xe4bc[119]]+=2*_0x5d2ax4);return _0x5d2ax3};mxGraph[_0xe4bc[202]][_0xe4bc[2497]]=function(_0x5d2ax2){_0x5d2ax2= new mxCell(_0xe4bc[110]);_0x5d2ax2[_0xe4bc[1993]](!0);_0x5d2ax2[_0xe4bc[1995]](!1);return _0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[845]]=function(_0x5d2ax2){var _0x5d2ax3=[];if(null==_0x5d2ax2){_0x5d2ax2=this[_0xe4bc[897]]();for(var _0x5d2ax4=[],_0x5d2ax5=0;_0x5d2ax5<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax5++){0<this[_0xe4bc[251]][_0xe4bc[262]](_0x5d2ax2[_0x5d2ax5])&&_0x5d2ax4[_0xe4bc[207]](_0x5d2ax2[_0x5d2ax5])};_0x5d2ax2=_0x5d2ax4};if(null!=_0x5d2ax2&&0<_0x5d2ax2[_0xe4bc[67]]){this[_0xe4bc[251]][_0xe4bc[473]]();try{for(_0x5d2ax5=0;_0x5d2ax5<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax5++){var _0x5d2ax9=this[_0xe4bc[251]][_0xe4bc[1953]](_0x5d2ax2[_0x5d2ax5]);if(null!=_0x5d2ax9&&0<_0x5d2ax9[_0xe4bc[67]]){var _0x5d2ax9=_0x5d2ax9[_0xe4bc[1853]](),_0x5d2axa=this[_0xe4bc[251]][_0xe4bc[1197]](_0x5d2ax2[_0x5d2ax5]),_0x5d2ax12=this[_0xe4bc[251]][_0xe4bc[262]](_0x5d2axa);this[_0xe4bc[833]](_0x5d2ax9,_0x5d2axa,_0x5d2ax12,null,null,!0);_0x5d2ax3=_0x5d2ax3[_0xe4bc[1919]](_0x5d2ax9)}};this[_0xe4bc[843]](this[_0xe4bc[2499]](_0x5d2ax2));this[_0xe4bc[746]]( new mxEventObject(mxEvent.UNGROUP_CELLS,_0xe4bc[895],_0x5d2ax2))}finally{this[_0xe4bc[251]][_0xe4bc[476]]()}};return _0x5d2ax3};mxGraph[_0xe4bc[202]][_0xe4bc[846]]=function(_0x5d2ax2){null==_0x5d2ax2&&(_0x5d2ax2=this[_0xe4bc[897]]());this[_0xe4bc[251]][_0xe4bc[473]]();try{var _0x5d2ax3=this[_0xe4bc[902]](),_0x5d2ax4=this[_0xe4bc[251]][_0xe4bc[262]](_0x5d2ax3);this[_0xe4bc[833]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,null,null,!0);this[_0xe4bc[746]]( new mxEventObject(mxEvent.REMOVE_CELLS_FROM_PARENT,_0xe4bc[895],_0x5d2ax2))}finally{this[_0xe4bc[251]][_0xe4bc[476]]()};return _0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[1917]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){null==_0x5d2ax2&&(_0x5d2ax2=this[_0xe4bc[897]]());_0x5d2ax3=null!=_0x5d2ax3?_0x5d2ax3:0;_0x5d2ax4=null!=_0x5d2ax4?_0x5d2ax4:!1;this[_0xe4bc[251]][_0xe4bc[473]]();try{for(var _0x5d2ax5=0;_0x5d2ax5<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax5++){var _0x5d2ax9=this[_0xe4bc[1198]](_0x5d2ax2[_0x5d2ax5]);if(null!=_0x5d2ax9){var _0x5d2axa=this[_0xe4bc[1955]](_0x5d2ax2[_0x5d2ax5]);if(null!=_0x5d2axa&&0<_0x5d2axa[_0xe4bc[67]]){var _0x5d2ax12=this[_0xe4bc[1729]](_0x5d2axa);if(0<_0x5d2ax12[_0xe4bc[117]]&&0<_0x5d2ax12[_0xe4bc[119]]){var _0x5d2ax13=this[_0xe4bc[1730]](_0x5d2ax2[_0x5d2ax5])?this[_0xe4bc[1731]](_0x5d2ax2[_0x5d2ax5]): new mxRectangle,_0x5d2ax9=_0x5d2ax9[_0xe4bc[238]]();_0x5d2ax4&&(_0x5d2ax9[_0xe4bc[235]]+=_0x5d2ax12[_0xe4bc[235]]-_0x5d2ax13[_0xe4bc[117]]-_0x5d2ax3,_0x5d2ax9[_0xe4bc[236]]+=_0x5d2ax12[_0xe4bc[236]]-_0x5d2ax13[_0xe4bc[119]]-_0x5d2ax3);_0x5d2ax9[_0xe4bc[117]]=_0x5d2ax12[_0xe4bc[117]]+_0x5d2ax13[_0xe4bc[117]]+2*_0x5d2ax3;_0x5d2ax9[_0xe4bc[119]]=_0x5d2ax12[_0xe4bc[119]]+_0x5d2ax13[_0xe4bc[119]]+2*_0x5d2ax3;this[_0xe4bc[251]][_0xe4bc[1724]](_0x5d2ax2[_0x5d2ax5],_0x5d2ax9);this[_0xe4bc[834]](_0x5d2axa,-_0x5d2ax12[_0xe4bc[235]]+_0x5d2ax13[_0xe4bc[117]]+_0x5d2ax3,-_0x5d2ax12[_0xe4bc[236]]+_0x5d2ax13[_0xe4bc[119]]+_0x5d2ax3)}}}}}finally{this[_0xe4bc[251]][_0xe4bc[476]]()};return _0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[899]]=function(_0x5d2ax2,_0x5d2ax3){_0x5d2ax3=null!=_0x5d2ax3?_0x5d2ax3:!0;var _0x5d2ax4=null;if(null!=_0x5d2ax2){for(var _0x5d2ax5={},_0x5d2ax4=[],_0x5d2ax9=0;_0x5d2ax9<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax9++){var _0x5d2axa=mxCellPath[_0xe4bc[385]](_0x5d2ax2[_0x5d2ax9]);_0x5d2ax5[_0x5d2axa]=_0x5d2ax2[_0x5d2ax9];_0x5d2ax4[_0xe4bc[207]](_0x5d2ax2[_0x5d2ax9])};if(0<_0x5d2ax4[_0xe4bc[67]]){for(var _0x5d2axa=this[_0xe4bc[441]][_0xe4bc[255]],_0x5d2ax12=this[_0xe4bc[441]][_0xe4bc[513]],_0x5d2ax4=this[_0xe4bc[251]][_0xe4bc[899]](_0x5d2ax2,!0),_0x5d2ax9=0;_0x5d2ax9<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax9++){if(!_0x5d2ax3&&this[_0xe4bc[251]][_0xe4bc[250]](_0x5d2ax4[_0x5d2ax9])&&null!=this[_0xe4bc[2500]](_0x5d2ax4[_0x5d2ax9],this[_0xe4bc[251]][_0xe4bc[1709]](_0x5d2ax4[_0x5d2ax9],!0),this[_0xe4bc[251]][_0xe4bc[1709]](_0x5d2ax4[_0x5d2ax9],!1))){_0x5d2ax4[_0x5d2ax9]=null}else {var _0x5d2ax13=this[_0xe4bc[251]][_0xe4bc[1721]](_0x5d2ax4[_0x5d2ax9]);if(null!=_0x5d2ax13){var _0x5d2ax14=this[_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax2[_0x5d2ax9]),_0x5d2ax15=this[_0xe4bc[441]][_0xe4bc[248]](this[_0xe4bc[251]][_0xe4bc[1197]](_0x5d2ax2[_0x5d2ax9]));if(null!=_0x5d2ax14&&null!=_0x5d2ax15){var _0x5d2ax16=_0x5d2ax15[_0xe4bc[2078]][_0xe4bc[235]],_0x5d2ax15=_0x5d2ax15[_0xe4bc[2078]][_0xe4bc[236]];if(this[_0xe4bc[251]][_0xe4bc[250]](_0x5d2ax4[_0x5d2ax9])){for(var _0x5d2ax14=_0x5d2ax14[_0xe4bc[439]],_0x5d2ax17=this[_0xe4bc[251]][_0xe4bc[1709]](_0x5d2ax2[_0x5d2ax9],!0),_0x5d2ax18=mxCellPath[_0xe4bc[385]](_0x5d2ax17);null!=_0x5d2ax17&&null==_0x5d2ax5[_0x5d2ax18];){_0x5d2ax17=this[_0xe4bc[251]][_0xe4bc[1197]](_0x5d2ax17),_0x5d2ax18=mxCellPath[_0xe4bc[385]](_0x5d2ax17)};null==_0x5d2ax17&&_0x5d2ax13[_0xe4bc[2007]]( new mxPoint(_0x5d2ax14[0][_0xe4bc[235]]/_0x5d2axa-_0x5d2ax12[_0xe4bc[235]],_0x5d2ax14[0][_0xe4bc[236]]/_0x5d2axa-_0x5d2ax12[_0xe4bc[236]]),!0);_0x5d2ax17=this[_0xe4bc[251]][_0xe4bc[1709]](_0x5d2ax2[_0x5d2ax9],!1);for(_0x5d2ax18=mxCellPath[_0xe4bc[385]](_0x5d2ax17);null!=_0x5d2ax17&&null==_0x5d2ax5[_0x5d2ax18];){_0x5d2ax17=this[_0xe4bc[251]][_0xe4bc[1197]](_0x5d2ax17),_0x5d2ax18=mxCellPath[_0xe4bc[385]](_0x5d2ax17)};null==_0x5d2ax17&&(_0x5d2ax17=_0x5d2ax14[_0xe4bc[67]]-1,_0x5d2ax13[_0xe4bc[2007]]( new mxPoint(_0x5d2ax14[_0x5d2ax17][_0xe4bc[235]]/_0x5d2axa-_0x5d2ax12[_0xe4bc[235]],_0x5d2ax14[_0x5d2ax17][_0xe4bc[236]]/_0x5d2axa-_0x5d2ax12[_0xe4bc[236]]),!1));_0x5d2ax13=_0x5d2ax13[_0xe4bc[1525]];if(null!=_0x5d2ax13){for(_0x5d2ax14=0;_0x5d2ax14<_0x5d2ax13[_0xe4bc[67]];_0x5d2ax14++){_0x5d2ax13[_0x5d2ax14][_0xe4bc[235]]+=_0x5d2ax16,_0x5d2ax13[_0x5d2ax14][_0xe4bc[236]]+=_0x5d2ax15}}}else {_0x5d2ax13[_0xe4bc[235]]+=_0x5d2ax16,_0x5d2ax13[_0xe4bc[236]]+=_0x5d2ax15}}}}}}else {_0x5d2ax4=[]}};return _0x5d2ax4};mxGraph[_0xe4bc[202]][_0xe4bc[2501]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa,_0x5d2ax12,_0x5d2ax13,_0x5d2ax14){_0x5d2ax3=this[_0xe4bc[2502]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa,_0x5d2ax12,_0x5d2ax13,_0x5d2ax14);return this[_0xe4bc[2103]](_0x5d2ax3,_0x5d2ax2)};mxGraph[_0xe4bc[202]][_0xe4bc[2502]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa,_0x5d2ax12,_0x5d2ax13,_0x5d2ax14){_0x5d2ax2= new mxGeometry(_0x5d2ax5,_0x5d2ax9,_0x5d2axa,_0x5d2ax12);_0x5d2ax2[_0xe4bc[1500]]=null!=_0x5d2ax14?_0x5d2ax14:!1;_0x5d2ax4= new mxCell(_0x5d2ax4,_0x5d2ax2,_0x5d2ax13);_0x5d2ax4[_0xe4bc[1945]](_0x5d2ax3);_0x5d2ax4[_0xe4bc[1993]](!0);_0x5d2ax4[_0xe4bc[1995]](!0);return _0x5d2ax4};mxGraph[_0xe4bc[202]][_0xe4bc[1960]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa){_0x5d2ax3=this[_0xe4bc[2503]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa);return this[_0xe4bc[2504]](_0x5d2ax3,_0x5d2ax2,_0x5d2ax5,_0x5d2ax9)};mxGraph[_0xe4bc[202]][_0xe4bc[2503]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa){_0x5d2ax2= new mxCell(_0x5d2ax4, new mxGeometry,_0x5d2axa);_0x5d2ax2[_0xe4bc[1945]](_0x5d2ax3);_0x5d2ax2[_0xe4bc[1994]](!0);_0x5d2ax2[_0xe4bc[256]][_0xe4bc[1500]]= !0;return _0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[2504]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){return this[_0xe4bc[2103]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax9,_0x5d2ax4,_0x5d2ax5)};mxGraph[_0xe4bc[202]][_0xe4bc[2103]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){return this[_0xe4bc[832]]([_0x5d2ax2],_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9)[0]};mxGraph[_0xe4bc[202]][_0xe4bc[832]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){null==_0x5d2ax3&&(_0x5d2ax3=this[_0xe4bc[902]]());null==_0x5d2ax4&&(_0x5d2ax4=this[_0xe4bc[251]][_0xe4bc[262]](_0x5d2ax3));this[_0xe4bc[251]][_0xe4bc[473]]();try{this[_0xe4bc[833]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,!1,!0),this[_0xe4bc[746]]( new mxEventObject(mxEvent.ADD_CELLS,_0xe4bc[895],_0x5d2ax2,_0xe4bc[1101],_0x5d2ax3,_0xe4bc[1983],_0x5d2ax4,_0xe4bc[1097],_0x5d2ax5,_0xe4bc[772],_0x5d2ax9))}finally{this[_0xe4bc[251]][_0xe4bc[476]]()};return _0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[833]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa,_0x5d2ax12){if(null!=_0x5d2ax2&&null!=_0x5d2ax3&&null!=_0x5d2ax4){this[_0xe4bc[251]][_0xe4bc[473]]();try{for(var _0x5d2ax13=_0x5d2axa?this[_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax3):null,_0x5d2ax14=null!=_0x5d2ax13?_0x5d2ax13[_0xe4bc[2078]]:null,_0x5d2ax15= new mxPoint(0,0),_0x5d2ax13=0;_0x5d2ax13<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax13++){if(null==_0x5d2ax2[_0x5d2ax13]){_0x5d2ax4--}else {var _0x5d2ax16=this[_0xe4bc[251]][_0xe4bc[1197]](_0x5d2ax2[_0x5d2ax13]);if(null!=_0x5d2ax14&&_0x5d2ax2[_0x5d2ax13]!=_0x5d2ax3&&_0x5d2ax3!=_0x5d2ax16){var _0x5d2ax17=this[_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax16),_0x5d2ax18=null!=_0x5d2ax17?_0x5d2ax17[_0xe4bc[2078]]:_0x5d2ax15,_0x5d2ax19=this[_0xe4bc[251]][_0xe4bc[1721]](_0x5d2ax2[_0x5d2ax13]);if(null!=_0x5d2ax19){var _0x5d2ax1a=_0x5d2ax18[_0xe4bc[235]]-_0x5d2ax14[_0xe4bc[235]],_0x5d2ax1b=_0x5d2ax18[_0xe4bc[236]]-_0x5d2ax14[_0xe4bc[236]],_0x5d2ax19=_0x5d2ax19[_0xe4bc[238]]();_0x5d2ax19[_0xe4bc[513]](_0x5d2ax1a,_0x5d2ax1b);!_0x5d2ax19[_0xe4bc[1500]]&&(this[_0xe4bc[251]][_0xe4bc[1193]](_0x5d2ax2[_0x5d2ax13])&&!this[_0xe4bc[2505]]())&&(_0x5d2ax19[_0xe4bc[235]]=Math[_0xe4bc[160]](0,_0x5d2ax19[_0xe4bc[235]]),_0x5d2ax19[_0xe4bc[236]]=Math[_0xe4bc[160]](0,_0x5d2ax19[_0xe4bc[236]]));this[_0xe4bc[251]][_0xe4bc[1724]](_0x5d2ax2[_0x5d2ax13],_0x5d2ax19)}};_0x5d2ax3==_0x5d2ax16&&_0x5d2ax4+_0x5d2ax13>this[_0xe4bc[251]][_0xe4bc[262]](_0x5d2ax3)&&_0x5d2ax4--;this[_0xe4bc[251]][_0xe4bc[99]](_0x5d2ax3,_0x5d2ax2[_0x5d2ax13],_0x5d2ax4+_0x5d2ax13);this[_0xe4bc[2506]]()&&this[_0xe4bc[2507]](_0x5d2ax2[_0x5d2ax13])&&this[_0xe4bc[2508]](_0x5d2ax2[_0x5d2ax13]);(null==_0x5d2ax12||_0x5d2ax12)&&this[_0xe4bc[2509]](_0x5d2ax2[_0x5d2ax13]);null!=_0x5d2ax5&&this[_0xe4bc[852]](_0x5d2ax2[_0x5d2ax13],_0x5d2ax5,!0);null!=_0x5d2ax9&&this[_0xe4bc[852]](_0x5d2ax2[_0x5d2ax13],_0x5d2ax9,!1)}};this[_0xe4bc[746]]( new mxEventObject(mxEvent.CELLS_ADDED,_0xe4bc[895],_0x5d2ax2,_0xe4bc[1101],_0x5d2ax3,_0xe4bc[1983],_0x5d2ax4,_0xe4bc[1097],_0x5d2ax5,_0xe4bc[772],_0x5d2ax9,_0xe4bc[492],_0x5d2axa))}finally{this[_0xe4bc[251]][_0xe4bc[476]]()}}};mxGraph[_0xe4bc[202]][_0xe4bc[842]]=function(_0x5d2ax2,_0x5d2ax3){_0x5d2ax3=null!=_0x5d2ax3?_0x5d2ax3:!0;null==_0x5d2ax2&&(_0x5d2ax2=this[_0xe4bc[2510]](this[_0xe4bc[897]]()));_0x5d2ax3&&(_0x5d2ax2=this[_0xe4bc[2510]](this[_0xe4bc[2499]](_0x5d2ax2)));this[_0xe4bc[251]][_0xe4bc[473]]();try{this[_0xe4bc[843]](_0x5d2ax2),this[_0xe4bc[746]]( new mxEventObject(mxEvent.REMOVE_CELLS,_0xe4bc[895],_0x5d2ax2,_0xe4bc[2511],_0x5d2ax3))}finally{this[_0xe4bc[251]][_0xe4bc[476]]()};return _0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[843]]=function(_0x5d2ax2){if(null!=_0x5d2ax2&&0<_0x5d2ax2[_0xe4bc[67]]){var _0x5d2ax3=this[_0xe4bc[441]][_0xe4bc[255]],_0x5d2ax4=this[_0xe4bc[441]][_0xe4bc[513]];this[_0xe4bc[251]][_0xe4bc[473]]();try{for(var _0x5d2ax5={},_0x5d2ax9=0;_0x5d2ax9<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax9++){var _0x5d2axa=mxCellPath[_0xe4bc[385]](_0x5d2ax2[_0x5d2ax9]);_0x5d2ax5[_0x5d2axa]=_0x5d2ax2[_0x5d2ax9]};for(_0x5d2ax9=0;_0x5d2ax9<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax9++){for(var _0x5d2ax12=this[_0xe4bc[1756]](_0x5d2ax2[_0x5d2ax9]),_0x5d2ax13=0;_0x5d2ax13<_0x5d2ax12[_0xe4bc[67]];_0x5d2ax13++){if(_0x5d2axa=mxCellPath[_0xe4bc[385]](_0x5d2ax12[_0x5d2ax13]),null==_0x5d2ax5[_0x5d2axa]){var _0x5d2ax14=this[_0xe4bc[251]][_0xe4bc[1721]](_0x5d2ax12[_0x5d2ax13]);if(null!=_0x5d2ax14){var _0x5d2ax15=this[_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax12[_0x5d2ax13]);if(null!=_0x5d2ax15){var _0x5d2ax14=_0x5d2ax14[_0xe4bc[238]](),_0x5d2ax16=_0x5d2ax15[_0xe4bc[1710]](!0)==_0x5d2ax2[_0x5d2ax9],_0x5d2ax17=_0x5d2ax15[_0xe4bc[439]],_0x5d2ax18=_0x5d2ax16?0:_0x5d2ax17[_0xe4bc[67]]-1;_0x5d2ax14[_0xe4bc[2007]]( new mxPoint(_0x5d2ax17[_0x5d2ax18][_0xe4bc[235]]/_0x5d2ax3-_0x5d2ax4[_0xe4bc[235]],_0x5d2ax17[_0x5d2ax18][_0xe4bc[236]]/_0x5d2ax3-_0x5d2ax4[_0xe4bc[236]]),_0x5d2ax16);this[_0xe4bc[251]][_0xe4bc[1957]](_0x5d2ax12[_0x5d2ax13],null,_0x5d2ax16);this[_0xe4bc[251]][_0xe4bc[1724]](_0x5d2ax12[_0x5d2ax13],_0x5d2ax14)}}}};this[_0xe4bc[251]][_0xe4bc[205]](_0x5d2ax2[_0x5d2ax9])};this[_0xe4bc[746]]( new mxEventObject(mxEvent.CELLS_REMOVED,_0xe4bc[895],_0x5d2ax2))}finally{this[_0xe4bc[251]][_0xe4bc[476]]()}}};mxGraph[_0xe4bc[202]][_0xe4bc[853]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){_0x5d2ax5=_0x5d2ax5||0;_0x5d2ax9=_0x5d2ax9||0;null==_0x5d2ax4&&(_0x5d2ax4=this[_0xe4bc[899]]([_0x5d2ax2])[0]);var _0x5d2axa=this[_0xe4bc[251]][_0xe4bc[1197]](_0x5d2ax2),_0x5d2ax12=this[_0xe4bc[251]][_0xe4bc[1709]](_0x5d2ax2,!0);this[_0xe4bc[251]][_0xe4bc[473]]();try{this[_0xe4bc[835]](_0x5d2ax3,_0x5d2ax5,_0x5d2ax9,!1,!1),this[_0xe4bc[833]](_0x5d2ax3,_0x5d2axa,this[_0xe4bc[251]][_0xe4bc[262]](_0x5d2axa),null,null,!0),this[_0xe4bc[833]]([_0x5d2ax4],_0x5d2axa,this[_0xe4bc[251]][_0xe4bc[262]](_0x5d2axa),_0x5d2ax12,_0x5d2ax3[0],!1),this[_0xe4bc[852]](_0x5d2ax2,_0x5d2ax3[0],!0),this[_0xe4bc[746]]( new mxEventObject(mxEvent.SPLIT_EDGE,_0xe4bc[1989],_0x5d2ax2,_0xe4bc[895],_0x5d2ax3,_0xe4bc[2512],_0x5d2ax4,_0xe4bc[1126],_0x5d2ax5,_0xe4bc[1125],_0x5d2ax9))}finally{this[_0xe4bc[251]][_0xe4bc[476]]()};return _0x5d2ax4};mxGraph[_0xe4bc[202]][_0xe4bc[838]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){null==_0x5d2ax3&&(_0x5d2ax3=this[_0xe4bc[897]]());_0x5d2ax4&&(_0x5d2ax3=this[_0xe4bc[2499]](_0x5d2ax3));this[_0xe4bc[251]][_0xe4bc[473]]();try{this[_0xe4bc[839]](_0x5d2ax3,_0x5d2ax2),this[_0xe4bc[746]]( new mxEventObject(mxEvent.TOGGLE_CELLS,_0xe4bc[539],_0x5d2ax2,_0xe4bc[895],_0x5d2ax3,_0xe4bc[2511],_0x5d2ax4))}finally{this[_0xe4bc[251]][_0xe4bc[476]]()};return _0x5d2ax3};mxGraph[_0xe4bc[202]][_0xe4bc[839]]=function(_0x5d2ax2,_0x5d2ax3){if(null!=_0x5d2ax2&&0<_0x5d2ax2[_0xe4bc[67]]){this[_0xe4bc[251]][_0xe4bc[473]]();try{for(var _0x5d2ax4=0;_0x5d2ax4<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax4++){this[_0xe4bc[251]][_0xe4bc[175]](_0x5d2ax2[_0x5d2ax4],_0x5d2ax3)}}finally{this[_0xe4bc[251]][_0xe4bc[476]]()}}};mxGraph[_0xe4bc[202]][_0xe4bc[847]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){_0x5d2ax3=null!=_0x5d2ax3?_0x5d2ax3:!1;null==_0x5d2ax4&&(_0x5d2ax4=this[_0xe4bc[2513]](this[_0xe4bc[897]](),_0x5d2ax2));this[_0xe4bc[2126]](!1);this[_0xe4bc[251]][_0xe4bc[473]]();try{this[_0xe4bc[848]](_0x5d2ax4,_0x5d2ax2,_0x5d2ax3,_0x5d2ax5),this[_0xe4bc[746]]( new mxEventObject(mxEvent.FOLD_CELLS,_0xe4bc[2514],_0x5d2ax2,_0xe4bc[2515],_0x5d2ax3,_0xe4bc[895],_0x5d2ax4))}finally{this[_0xe4bc[251]][_0xe4bc[476]]()};return _0x5d2ax4};mxGraph[_0xe4bc[202]][_0xe4bc[848]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){if(null!=_0x5d2ax2&&0<_0x5d2ax2[_0xe4bc[67]]){this[_0xe4bc[251]][_0xe4bc[473]]();try{for(var _0x5d2ax9=0;_0x5d2ax9<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax9++){if((!_0x5d2ax5||this[_0xe4bc[2516]](_0x5d2ax2[_0x5d2ax9],_0x5d2ax3))&&_0x5d2ax3!=this[_0xe4bc[1742]](_0x5d2ax2[_0x5d2ax9])){if(this[_0xe4bc[251]][_0xe4bc[1972]](_0x5d2ax2[_0x5d2ax9],_0x5d2ax3),this[_0xe4bc[2517]](_0x5d2ax2[_0x5d2ax9],_0x5d2ax3),this[_0xe4bc[2507]](_0x5d2ax2[_0x5d2ax9])&&this[_0xe4bc[2508]](_0x5d2ax2[_0x5d2ax9]),_0x5d2ax4){var _0x5d2axa=this[_0xe4bc[251]][_0xe4bc[1953]](_0x5d2ax2[_0x5d2ax9]);this[_0xe4bc[847]](_0x5d2axa,_0x5d2ax3,_0x5d2ax4)}}};this[_0xe4bc[746]]( new mxEventObject(mxEvent.CELLS_FOLDED,_0xe4bc[895],_0x5d2ax2,_0xe4bc[2514],_0x5d2ax3,_0xe4bc[2515],_0x5d2ax4))}finally{this[_0xe4bc[251]][_0xe4bc[476]]()}}};mxGraph[_0xe4bc[202]][_0xe4bc[2517]]=function(_0x5d2ax2,_0x5d2ax3){if(null!=_0x5d2ax2){var _0x5d2ax4=this[_0xe4bc[251]][_0xe4bc[1721]](_0x5d2ax2);null!=_0x5d2ax4&&(_0x5d2ax4=_0x5d2ax4[_0xe4bc[238]](),this[_0xe4bc[2518]](_0x5d2ax2,_0x5d2ax4,_0x5d2ax3),_0x5d2ax4[_0xe4bc[2005]](),this[_0xe4bc[251]][_0xe4bc[1724]](_0x5d2ax2,_0x5d2ax4))}};mxGraph[_0xe4bc[202]][_0xe4bc[2518]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){if(null!=_0x5d2ax2&&null!=_0x5d2ax3){_0x5d2ax4=this[_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax2);_0x5d2ax4=null!=_0x5d2ax4?_0x5d2ax4[_0xe4bc[124]]:this[_0xe4bc[1705]](_0x5d2ax2);if(null==_0x5d2ax3[_0xe4bc[2002]]){var _0x5d2ax5=_0x5d2ax3;this[_0xe4bc[2394]]&&(_0x5d2ax2=this[_0xe4bc[2519]](_0x5d2ax2),null!=_0x5d2ax2&&(_0x5d2ax5=_0x5d2ax2,_0x5d2ax2=mxUtils[_0xe4bc[433]](_0x5d2ax4,mxConstants.STYLE_STARTSIZE),0<_0x5d2ax2&&(_0x5d2ax5[_0xe4bc[119]]=Math[_0xe4bc[160]](_0x5d2ax5[_0xe4bc[119]],_0x5d2ax2))));_0x5d2ax3[_0xe4bc[2002]]= new mxRectangle(0,0,_0x5d2ax5[_0xe4bc[117]],_0x5d2ax5[_0xe4bc[119]])};if(null!=_0x5d2ax3[_0xe4bc[2002]]){_0x5d2ax3[_0xe4bc[2002]][_0xe4bc[235]]=_0x5d2ax3[_0xe4bc[235]];_0x5d2ax3[_0xe4bc[2002]][_0xe4bc[236]]=_0x5d2ax3[_0xe4bc[236]];var _0x5d2ax9=mxUtils[_0xe4bc[431]](_0x5d2ax4[mxConstants[_0xe4bc[2278]]]||_0xe4bc[468]);0!=_0x5d2ax9&&(_0x5d2ax2=_0x5d2ax3[_0xe4bc[2002]][_0xe4bc[241]]()-_0x5d2ax3[_0xe4bc[241]](),_0x5d2ax4=_0x5d2ax3[_0xe4bc[2002]][_0xe4bc[242]]()-_0x5d2ax3[_0xe4bc[242]](),_0x5d2ax5=Math[_0xe4bc[426]](_0x5d2ax9),_0x5d2ax9=Math[_0xe4bc[427]](_0x5d2ax9),_0x5d2ax3[_0xe4bc[2002]][_0xe4bc[235]]+=_0x5d2ax5*_0x5d2ax2-_0x5d2ax9*_0x5d2ax4-_0x5d2ax2,_0x5d2ax3[_0xe4bc[2002]][_0xe4bc[236]]+=_0x5d2ax9*_0x5d2ax2+_0x5d2ax5*_0x5d2ax4-_0x5d2ax4)}}};mxGraph[_0xe4bc[202]][_0xe4bc[2499]]=function(_0x5d2ax2){var _0x5d2ax3=_0x5d2ax2[_0xe4bc[1853]]();return _0x5d2ax3=_0x5d2ax3[_0xe4bc[1919]](this[_0xe4bc[2520]](_0x5d2ax2))};mxGraph[_0xe4bc[202]][_0xe4bc[2520]]=function(_0x5d2ax2){var _0x5d2ax3=[];if(null!=_0x5d2ax2){for(var _0x5d2ax4=0;_0x5d2ax4<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax4++){for(var _0x5d2ax5=this[_0xe4bc[251]][_0xe4bc[1707]](_0x5d2ax2[_0x5d2ax4]),_0x5d2ax9=0;_0x5d2ax9<_0x5d2ax5;_0x5d2ax9++){_0x5d2ax3[_0xe4bc[207]](this[_0xe4bc[251]][_0xe4bc[1708]](_0x5d2ax2[_0x5d2ax4],_0x5d2ax9))};_0x5d2ax5=this[_0xe4bc[251]][_0xe4bc[1953]](_0x5d2ax2[_0x5d2ax4]);_0x5d2ax3=_0x5d2ax3[_0xe4bc[1919]](this[_0xe4bc[2520]](_0x5d2ax5))}};return _0x5d2ax3};mxGraph[_0xe4bc[202]][_0xe4bc[858]]=function(_0x5d2ax2,_0x5d2ax3){_0x5d2ax3=null!=_0x5d2ax3?_0x5d2ax3:!1;this[_0xe4bc[251]][_0xe4bc[473]]();try{this[_0xe4bc[2457]](_0x5d2ax2,_0x5d2ax3),this[_0xe4bc[746]]( new mxEventObject(mxEvent.UPDATE_CELL_SIZE,_0xe4bc[246],_0x5d2ax2,_0xe4bc[2521],_0x5d2ax3))}finally{this[_0xe4bc[251]][_0xe4bc[476]]()};return _0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[2457]]=function(_0x5d2ax2,_0x5d2ax3){if(null!=_0x5d2ax2){this[_0xe4bc[251]][_0xe4bc[473]]();try{var _0x5d2ax4=this[_0xe4bc[2519]](_0x5d2ax2),_0x5d2ax5=this[_0xe4bc[251]][_0xe4bc[1721]](_0x5d2ax2);if(null!=_0x5d2ax4&&null!=_0x5d2ax5){var _0x5d2ax9=this[_0xe4bc[1742]](_0x5d2ax2),_0x5d2ax5=_0x5d2ax5[_0xe4bc[238]]();if(this[_0xe4bc[1730]](_0x5d2ax2)){var _0x5d2axa=this[_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax2),_0x5d2ax12=null!=_0x5d2axa?_0x5d2axa[_0xe4bc[124]]:this[_0xe4bc[1705]](_0x5d2ax2),_0x5d2ax13=this[_0xe4bc[251]][_0xe4bc[474]](_0x5d2ax2);null==_0x5d2ax13&&(_0x5d2ax13=_0xe4bc[110]);mxUtils[_0xe4bc[433]](_0x5d2ax12,mxConstants.STYLE_HORIZONTAL,!0)?(_0x5d2ax13=mxUtils[_0xe4bc[475]](_0x5d2ax13,mxConstants.STYLE_STARTSIZE,_0x5d2ax4[_0xe4bc[119]]+8),_0x5d2ax9&&(_0x5d2ax5[_0xe4bc[119]]=_0x5d2ax4[_0xe4bc[119]]+8),_0x5d2ax5[_0xe4bc[117]]=_0x5d2ax4[_0xe4bc[117]]):(_0x5d2ax13=mxUtils[_0xe4bc[475]](_0x5d2ax13,mxConstants.STYLE_STARTSIZE,_0x5d2ax4[_0xe4bc[117]]+8),_0x5d2ax9&&(_0x5d2ax5[_0xe4bc[117]]=_0x5d2ax4[_0xe4bc[117]]+8),_0x5d2ax5[_0xe4bc[119]]=_0x5d2ax4[_0xe4bc[119]]);this[_0xe4bc[251]][_0xe4bc[475]](_0x5d2ax2,_0x5d2ax13)}else {_0x5d2ax5[_0xe4bc[117]]=_0x5d2ax4[_0xe4bc[117]],_0x5d2ax5[_0xe4bc[119]]=_0x5d2ax4[_0xe4bc[119]]};if(!_0x5d2ax3&& !_0x5d2ax9){var _0x5d2ax14=this[_0xe4bc[441]][_0xe4bc[1799]](this[_0xe4bc[251]][_0xe4bc[1953]](_0x5d2ax2));if(null!=_0x5d2ax14){var _0x5d2ax15=this[_0xe4bc[441]][_0xe4bc[513]],_0x5d2ax16=this[_0xe4bc[441]][_0xe4bc[255]],_0x5d2ax17=(_0x5d2ax14[_0xe4bc[236]]+_0x5d2ax14[_0xe4bc[119]])/_0x5d2ax16-_0x5d2ax5[_0xe4bc[236]]-_0x5d2ax15[_0xe4bc[236]];_0x5d2ax5[_0xe4bc[117]]=Math[_0xe4bc[160]](_0x5d2ax5[_0xe4bc[117]],(_0x5d2ax14[_0xe4bc[235]]+_0x5d2ax14[_0xe4bc[117]])/_0x5d2ax16-_0x5d2ax5[_0xe4bc[235]]-_0x5d2ax15[_0xe4bc[235]]);_0x5d2ax5[_0xe4bc[119]]=Math[_0xe4bc[160]](_0x5d2ax5[_0xe4bc[119]],_0x5d2ax17)}};this[_0xe4bc[837]]([_0x5d2ax2],[_0x5d2ax5])}}finally{this[_0xe4bc[251]][_0xe4bc[476]]()}}};mxGraph[_0xe4bc[202]][_0xe4bc[2519]]=function(_0x5d2ax2){var _0x5d2ax3=null;if(null!=_0x5d2ax2){var _0x5d2ax4=this[_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax2),_0x5d2ax5=null!=_0x5d2ax4?_0x5d2ax4[_0xe4bc[124]]:this[_0xe4bc[1705]](_0x5d2ax2);if(null!=_0x5d2ax5&&!this[_0xe4bc[251]][_0xe4bc[250]](_0x5d2ax2)){var _0x5d2ax9=_0x5d2ax5[mxConstants[_0xe4bc[2185]]]||mxConstants[_0xe4bc[483]],_0x5d2axa=0,_0x5d2ax3=0;if((null!=this[_0xe4bc[1202]](_0x5d2ax4)||null!=_0x5d2ax5[mxConstants[_0xe4bc[2484]]])&&_0x5d2ax5[mxConstants[_0xe4bc[2059]]]==mxConstants[_0xe4bc[2522]]){_0x5d2ax5[mxConstants[_0xe4bc[2063]]]==mxConstants[_0xe4bc[481]]&&(_0x5d2axa+=parseFloat(_0x5d2ax5[mxConstants[_0xe4bc[2523]]])||mxLabel[_0xe4bc[202]][_0xe4bc[1680]]),_0x5d2ax5[mxConstants[_0xe4bc[2064]]]!=mxConstants[_0xe4bc[479]]&&(_0x5d2ax3+=parseFloat(_0x5d2ax5[mxConstants[_0xe4bc[2524]]])||mxLabel[_0xe4bc[202]][_0xe4bc[1680]])};_0x5d2axa+=2*(_0x5d2ax5[mxConstants[_0xe4bc[2143]]]||0);_0x5d2axa+=_0x5d2ax5[mxConstants[_0xe4bc[2147]]]||0;_0x5d2axa+=_0x5d2ax5[mxConstants[_0xe4bc[2145]]]||0;_0x5d2ax3+=2*(_0x5d2ax5[mxConstants[_0xe4bc[2143]]]||0);_0x5d2ax3+=_0x5d2ax5[mxConstants[_0xe4bc[2144]]]||0;_0x5d2ax3+=_0x5d2ax5[mxConstants[_0xe4bc[2146]]]||0;_0x5d2ax4=this[_0xe4bc[2205]](_0x5d2ax4);null!=_0x5d2ax4&&(_0x5d2axa+=_0x5d2ax4[_0xe4bc[117]]+8);_0x5d2ax4=this[_0xe4bc[2183]](_0x5d2ax2);null!=_0x5d2ax4&&0<_0x5d2ax4[_0xe4bc[67]]?(this[_0xe4bc[2186]](_0x5d2ax2)||(_0x5d2ax4=_0x5d2ax4[_0xe4bc[230]](/\n/g,_0xe4bc[545])),_0x5d2ax9=mxUtils[_0xe4bc[2525]](_0x5d2ax4,_0x5d2ax9,_0x5d2ax5[mxConstants[_0xe4bc[2188]]]),_0x5d2ax2=_0x5d2ax9[_0xe4bc[117]]+_0x5d2axa,_0x5d2ax3=_0x5d2ax9[_0xe4bc[119]]+_0x5d2ax3,mxUtils[_0xe4bc[433]](_0x5d2ax5,mxConstants.STYLE_HORIZONTAL,!0)||(_0x5d2ax5=_0x5d2ax3,_0x5d2ax3=_0x5d2ax2,_0x5d2ax2=_0x5d2ax5),this[_0xe4bc[991]]&&(_0x5d2ax2=this[_0xe4bc[1021]](_0x5d2ax2+this[_0xe4bc[1020]]/2),_0x5d2ax3=this[_0xe4bc[1021]](_0x5d2ax3+this[_0xe4bc[1020]]/2)),_0x5d2ax3= new mxRectangle(0,0,_0x5d2ax2,_0x5d2ax3)):(_0x5d2ax5=4*this[_0xe4bc[1020]],_0x5d2ax3= new mxRectangle(0,0,_0x5d2ax5,_0x5d2ax5))}};return _0x5d2ax3};mxGraph[_0xe4bc[202]][_0xe4bc[2216]]=function(_0x5d2ax2,_0x5d2ax3){if(0.2<Math[_0xe4bc[425]](1-_0x5d2ax3[_0xe4bc[255]])){var _0x5d2ax4=this[_0xe4bc[441]][_0xe4bc[255]],_0x5d2ax5=this[_0xe4bc[441]][_0xe4bc[513]],_0x5d2ax9=_0x5d2ax2[_0xe4bc[117]]*_0x5d2ax3[_0xe4bc[255]],_0x5d2axa=_0x5d2ax2[_0xe4bc[119]]*_0x5d2ax3[_0xe4bc[255]],_0x5d2ax12=_0x5d2ax2[_0xe4bc[236]]-(_0x5d2axa-_0x5d2ax2[_0xe4bc[119]])/2,_0x5d2ax4= new mxRectangle(this[_0xe4bc[1021]]((_0x5d2ax2[_0xe4bc[235]]-(_0x5d2ax9-_0x5d2ax2[_0xe4bc[117]])/2)/_0x5d2ax4)-_0x5d2ax5[_0xe4bc[235]],this[_0xe4bc[1021]](_0x5d2ax12/_0x5d2ax4)-_0x5d2ax5[_0xe4bc[236]],this[_0xe4bc[1021]](_0x5d2ax9/_0x5d2ax4),this[_0xe4bc[1021]](_0x5d2axa/_0x5d2ax4));this[_0xe4bc[2526]](_0x5d2ax2[_0xe4bc[246]],_0x5d2ax4)}};mxGraph[_0xe4bc[202]][_0xe4bc[2526]]=function(_0x5d2ax2,_0x5d2ax3){return this[_0xe4bc[836]]([_0x5d2ax2],[_0x5d2ax3])[0]};mxGraph[_0xe4bc[202]][_0xe4bc[836]]=function(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[251]][_0xe4bc[473]]();try{this[_0xe4bc[837]](_0x5d2ax2,_0x5d2ax3),this[_0xe4bc[746]]( new mxEventObject(mxEvent.RESIZE_CELLS,_0xe4bc[895],_0x5d2ax2,_0xe4bc[1562],_0x5d2ax3))}finally{this[_0xe4bc[251]][_0xe4bc[476]]()};return _0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[837]]=function(_0x5d2ax2,_0x5d2ax3){if(null!=_0x5d2ax2&&null!=_0x5d2ax3&&_0x5d2ax2[_0xe4bc[67]]==_0x5d2ax3[_0xe4bc[67]]){this[_0xe4bc[251]][_0xe4bc[473]]();try{for(var _0x5d2ax4=0;_0x5d2ax4<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax4++){var _0x5d2ax5=_0x5d2ax3[_0x5d2ax4],_0x5d2ax9=this[_0xe4bc[251]][_0xe4bc[1721]](_0x5d2ax2[_0x5d2ax4]);if(null!=_0x5d2ax9&&(_0x5d2ax9[_0xe4bc[235]]!=_0x5d2ax5[_0xe4bc[235]]||_0x5d2ax9[_0xe4bc[236]]!=_0x5d2ax5[_0xe4bc[236]]||_0x5d2ax9[_0xe4bc[117]]!=_0x5d2ax5[_0xe4bc[117]]||_0x5d2ax9[_0xe4bc[119]]!=_0x5d2ax5[_0xe4bc[119]])){_0x5d2ax9=_0x5d2ax9[_0xe4bc[238]]();if(_0x5d2ax9[_0xe4bc[1500]]){var _0x5d2axa=_0x5d2ax9[_0xe4bc[1368]];null!=_0x5d2axa&&(_0x5d2axa[_0xe4bc[235]]+=_0x5d2ax5[_0xe4bc[235]]-_0x5d2ax9[_0xe4bc[235]],_0x5d2axa[_0xe4bc[236]]+=_0x5d2ax5[_0xe4bc[236]]-_0x5d2ax9[_0xe4bc[236]])}else {_0x5d2ax9[_0xe4bc[235]]=_0x5d2ax5[_0xe4bc[235]],_0x5d2ax9[_0xe4bc[236]]=_0x5d2ax5[_0xe4bc[236]]};_0x5d2ax9[_0xe4bc[117]]=_0x5d2ax5[_0xe4bc[117]];_0x5d2ax9[_0xe4bc[119]]=_0x5d2ax5[_0xe4bc[119]];!_0x5d2ax9[_0xe4bc[1500]]&&(this[_0xe4bc[251]][_0xe4bc[1193]](_0x5d2ax2[_0x5d2ax4])&&!this[_0xe4bc[2505]]())&&(_0x5d2ax9[_0xe4bc[235]]=Math[_0xe4bc[160]](0,_0x5d2ax9[_0xe4bc[235]]),_0x5d2ax9[_0xe4bc[236]]=Math[_0xe4bc[160]](0,_0x5d2ax9[_0xe4bc[236]]));this[_0xe4bc[251]][_0xe4bc[1724]](_0x5d2ax2[_0x5d2ax4],_0x5d2ax9);this[_0xe4bc[2507]](_0x5d2ax2[_0x5d2ax4])&&this[_0xe4bc[2508]](_0x5d2ax2[_0x5d2ax4])}};this[_0xe4bc[2399]]&&this[_0xe4bc[1750]](_0x5d2ax2);this[_0xe4bc[746]]( new mxEventObject(mxEvent.CELLS_RESIZED,_0xe4bc[895],_0x5d2ax2,_0xe4bc[1562],_0x5d2ax3))}finally{this[_0xe4bc[251]][_0xe4bc[476]]()}}};mxGraph[_0xe4bc[202]][_0xe4bc[2508]]=function(_0x5d2ax2){if(null!=_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[251]][_0xe4bc[1197]](_0x5d2ax2),_0x5d2ax4=this[_0xe4bc[251]][_0xe4bc[1721]](_0x5d2ax3);if(null!=_0x5d2ax3&&(null!=_0x5d2ax4&&!this[_0xe4bc[1742]](_0x5d2ax3))&&(_0x5d2ax2=this[_0xe4bc[251]][_0xe4bc[1721]](_0x5d2ax2),null!=_0x5d2ax2&&(_0x5d2ax4[_0xe4bc[117]]<_0x5d2ax2[_0xe4bc[235]]+_0x5d2ax2[_0xe4bc[117]]||_0x5d2ax4[_0xe4bc[119]]<_0x5d2ax2[_0xe4bc[236]]+_0x5d2ax2[_0xe4bc[119]]))){_0x5d2ax4=_0x5d2ax4[_0xe4bc[238]](),_0x5d2ax4[_0xe4bc[117]]=Math[_0xe4bc[160]](_0x5d2ax4[_0xe4bc[117]],_0x5d2ax2[_0xe4bc[235]]+_0x5d2ax2[_0xe4bc[117]]),_0x5d2ax4[_0xe4bc[119]]=Math[_0xe4bc[160]](_0x5d2ax4[_0xe4bc[119]],_0x5d2ax2[_0xe4bc[236]]+_0x5d2ax2[_0xe4bc[119]]),this[_0xe4bc[837]]([_0x5d2ax3],[_0x5d2ax4])}}};mxGraph[_0xe4bc[202]][_0xe4bc[903]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){return this[_0xe4bc[834]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,!0,_0x5d2ax5,_0x5d2ax9)};mxGraph[_0xe4bc[202]][_0xe4bc[834]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa){_0x5d2ax3=null!=_0x5d2ax3?_0x5d2ax3:0;_0x5d2ax4=null!=_0x5d2ax4?_0x5d2ax4:0;_0x5d2ax5=null!=_0x5d2ax5?_0x5d2ax5:!1;if(null!=_0x5d2ax2&&(0!=_0x5d2ax3||0!=_0x5d2ax4||_0x5d2ax5||null!=_0x5d2ax9)){this[_0xe4bc[251]][_0xe4bc[473]]();try{_0x5d2ax5&&(_0x5d2ax2=this[_0xe4bc[899]](_0x5d2ax2,this[_0xe4bc[2527]]()),null==_0x5d2ax9&&(_0x5d2ax9=this[_0xe4bc[902]]()));var _0x5d2ax12=this[_0xe4bc[2505]]();null!=_0x5d2ax9&&this[_0xe4bc[2528]](!0);this[_0xe4bc[835]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,!_0x5d2ax5&&this[_0xe4bc[2529]]()&&this[_0xe4bc[2530]](),null==_0x5d2ax9);this[_0xe4bc[2528]](_0x5d2ax12);if(null!=_0x5d2ax9){var _0x5d2ax13=this[_0xe4bc[251]][_0xe4bc[262]](_0x5d2ax9);this[_0xe4bc[833]](_0x5d2ax2,_0x5d2ax9,_0x5d2ax13,null,null,!0)};this[_0xe4bc[746]]( new mxEventObject(mxEvent.MOVE_CELLS,_0xe4bc[895],_0x5d2ax2,_0xe4bc[1126],_0x5d2ax3,_0xe4bc[1125],_0x5d2ax4,_0xe4bc[238],_0x5d2ax5,_0xe4bc[772],_0x5d2ax9,_0xe4bc[763],_0x5d2axa))}finally{this[_0xe4bc[251]][_0xe4bc[476]]()}};return _0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[835]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){if(null!=_0x5d2ax2&&(0!=_0x5d2ax3||0!=_0x5d2ax4)){this[_0xe4bc[251]][_0xe4bc[473]]();try{_0x5d2ax5&&this[_0xe4bc[2531]](_0x5d2ax2);for(var _0x5d2axa=0;_0x5d2axa<_0x5d2ax2[_0xe4bc[67]];_0x5d2axa++){this[_0xe4bc[2532]](_0x5d2ax2[_0x5d2axa],_0x5d2ax3,_0x5d2ax4),_0x5d2ax9&&this[_0xe4bc[2509]](_0x5d2ax2[_0x5d2axa])};this[_0xe4bc[2400]]&&this[_0xe4bc[1750]](_0x5d2ax2);this[_0xe4bc[746]]( new mxEventObject(mxEvent.CELLS_MOVED,_0xe4bc[895],_0x5d2ax2,_0xe4bc[1126],_0x5d2ax4,_0xe4bc[1125],_0x5d2ax4,_0xe4bc[808],_0x5d2ax5))}finally{this[_0xe4bc[251]][_0xe4bc[476]]()}}};mxGraph[_0xe4bc[202]][_0xe4bc[2532]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){var _0x5d2ax5=this[_0xe4bc[251]][_0xe4bc[1721]](_0x5d2ax2);null!=_0x5d2ax5&&(_0x5d2ax5=_0x5d2ax5[_0xe4bc[238]](),_0x5d2ax5[_0xe4bc[513]](_0x5d2ax3,_0x5d2ax4),!_0x5d2ax5[_0xe4bc[1500]]&&(this[_0xe4bc[251]][_0xe4bc[1193]](_0x5d2ax2)&&!this[_0xe4bc[2505]]())&&(_0x5d2ax5[_0xe4bc[235]]=Math[_0xe4bc[160]](0,_0x5d2ax5[_0xe4bc[235]]),_0x5d2ax5[_0xe4bc[236]]=Math[_0xe4bc[160]](0,_0x5d2ax5[_0xe4bc[236]])),_0x5d2ax5[_0xe4bc[1500]]&&!this[_0xe4bc[251]][_0xe4bc[250]](_0x5d2ax2)&&(null==_0x5d2ax5[_0xe4bc[1368]]?_0x5d2ax5[_0xe4bc[1368]]= new mxPoint(_0x5d2ax3,_0x5d2ax4):(_0x5d2ax5[_0xe4bc[1368]][_0xe4bc[235]]+=_0x5d2ax3,_0x5d2ax5[_0xe4bc[1368]][_0xe4bc[236]]+=_0x5d2ax4)),this[_0xe4bc[251]][_0xe4bc[1724]](_0x5d2ax2,_0x5d2ax5))};mxGraph[_0xe4bc[202]][_0xe4bc[2533]]=function(_0x5d2ax2){if(null!=_0x5d2ax2&&!this[_0xe4bc[251]][_0xe4bc[250]](_0x5d2ax2)){var _0x5d2ax3=this[_0xe4bc[251]][_0xe4bc[1197]](_0x5d2ax2);if(_0x5d2ax3==this[_0xe4bc[902]]()||_0x5d2ax3==this[_0xe4bc[2534]]()){return this[_0xe4bc[2535]]()};if(null!=_0x5d2ax3&&_0x5d2ax3!=this[_0xe4bc[902]]()){var _0x5d2ax4=this[_0xe4bc[251]][_0xe4bc[1721]](_0x5d2ax3);if(null!=_0x5d2ax4){var _0x5d2ax5=_0x5d2ax2=0,_0x5d2ax9=_0x5d2ax4[_0xe4bc[117]],_0x5d2ax4=_0x5d2ax4[_0xe4bc[119]];this[_0xe4bc[1730]](_0x5d2ax3)&&(_0x5d2ax3=this[_0xe4bc[1731]](_0x5d2ax3),_0x5d2ax2=_0x5d2ax3[_0xe4bc[117]],_0x5d2ax9-=_0x5d2ax3[_0xe4bc[117]],_0x5d2ax5=_0x5d2ax3[_0xe4bc[119]],_0x5d2ax4-=_0x5d2ax3[_0xe4bc[119]]);return  new mxRectangle(_0x5d2ax2,_0x5d2ax5,_0x5d2ax9,_0x5d2ax4)}}};return null};mxGraph[_0xe4bc[202]][_0xe4bc[2535]]=function(){return this[_0xe4bc[2385]]};mxGraph[_0xe4bc[202]][_0xe4bc[2509]]=function(_0x5d2ax2){if(null!=_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[251]][_0xe4bc[1721]](_0x5d2ax2),_0x5d2ax4=this[_0xe4bc[2536]](_0x5d2ax2)?this[_0xe4bc[2533]](_0x5d2ax2):this[_0xe4bc[2535]]();if(null!=_0x5d2ax3&&null!=_0x5d2ax4&&!_0x5d2ax3[_0xe4bc[1500]]&&(_0x5d2ax3[_0xe4bc[235]]<_0x5d2ax4[_0xe4bc[235]]||_0x5d2ax3[_0xe4bc[236]]<_0x5d2ax4[_0xe4bc[236]]||_0x5d2ax4[_0xe4bc[117]]<_0x5d2ax3[_0xe4bc[235]]+_0x5d2ax3[_0xe4bc[117]]||_0x5d2ax4[_0xe4bc[119]]<_0x5d2ax3[_0xe4bc[236]]+_0x5d2ax3[_0xe4bc[119]])){_0x5d2ax2=this[_0xe4bc[2537]](_0x5d2ax2),0<_0x5d2ax4[_0xe4bc[117]]&&(_0x5d2ax3[_0xe4bc[235]]=Math[_0xe4bc[243]](_0x5d2ax3[_0xe4bc[235]],_0x5d2ax4[_0xe4bc[235]]+_0x5d2ax4[_0xe4bc[117]]-(1-_0x5d2ax2)*_0x5d2ax3[_0xe4bc[117]])),0<_0x5d2ax4[_0xe4bc[119]]&&(_0x5d2ax3[_0xe4bc[236]]=Math[_0xe4bc[243]](_0x5d2ax3[_0xe4bc[236]],_0x5d2ax4[_0xe4bc[236]]+_0x5d2ax4[_0xe4bc[119]]-(1-_0x5d2ax2)*_0x5d2ax3[_0xe4bc[119]])),_0x5d2ax3[_0xe4bc[235]]=Math[_0xe4bc[160]](_0x5d2ax3[_0xe4bc[235]],_0x5d2ax4[_0xe4bc[235]]-_0x5d2ax3[_0xe4bc[117]]*_0x5d2ax2),_0x5d2ax3[_0xe4bc[236]]=Math[_0xe4bc[160]](_0x5d2ax3[_0xe4bc[236]],_0x5d2ax4[_0xe4bc[236]]-_0x5d2ax3[_0xe4bc[119]]*_0x5d2ax2)}}};mxGraph[_0xe4bc[202]][_0xe4bc[1750]]=function(_0x5d2ax2){if(null!=_0x5d2ax2){for(var _0x5d2ax3={},_0x5d2ax4=0;_0x5d2ax4<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax4++){var _0x5d2ax5=mxCellPath[_0xe4bc[385]](_0x5d2ax2[_0x5d2ax4]);_0x5d2ax3[_0x5d2ax5]=_0x5d2ax2[_0x5d2ax4]};this[_0xe4bc[251]][_0xe4bc[473]]();try{for(_0x5d2ax4=0;_0x5d2ax4<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax4++){var _0x5d2ax9=this[_0xe4bc[251]][_0xe4bc[264]](_0x5d2ax2[_0x5d2ax4]);if(null!=_0x5d2ax9){for(_0x5d2ax5=0;_0x5d2ax5<_0x5d2ax9[_0xe4bc[67]];_0x5d2ax5++){var _0x5d2axa=this[_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax9[_0x5d2ax5]),_0x5d2ax12=null!=_0x5d2axa?_0x5d2axa[_0xe4bc[1710]](!0):this[_0xe4bc[441]][_0xe4bc[1710]](_0x5d2ax9[_0x5d2ax5],!0),_0x5d2ax13=null!=_0x5d2axa?_0x5d2axa[_0xe4bc[1710]](!1):this[_0xe4bc[441]][_0xe4bc[1710]](_0x5d2ax9[_0x5d2ax5],!1),_0x5d2ax14=mxCellPath[_0xe4bc[385]](_0x5d2ax12),_0x5d2ax15=mxCellPath[_0xe4bc[385]](_0x5d2ax13);(null==_0x5d2ax3[_0x5d2ax14]||null==_0x5d2ax3[_0x5d2ax15])&&this[_0xe4bc[1809]](_0x5d2ax9[_0x5d2ax5])}};this[_0xe4bc[1750]](this[_0xe4bc[251]][_0xe4bc[1953]](_0x5d2ax2[_0x5d2ax4]))}}finally{this[_0xe4bc[251]][_0xe4bc[476]]()}}};mxGraph[_0xe4bc[202]][_0xe4bc[1809]]=function(_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[251]][_0xe4bc[1721]](_0x5d2ax2);null!=_0x5d2ax3&&(null!=_0x5d2ax3[_0xe4bc[1525]]&&0<_0x5d2ax3[_0xe4bc[1525]][_0xe4bc[67]])&&(_0x5d2ax3=_0x5d2ax3[_0xe4bc[238]](),_0x5d2ax3[_0xe4bc[1525]]=[],this[_0xe4bc[251]][_0xe4bc[1724]](_0x5d2ax2,_0x5d2ax3));return _0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[2538]]=function(_0x5d2ax2,_0x5d2ax3){return null!=_0x5d2ax2&&null!=_0x5d2ax2[_0xe4bc[253]]&&null!=_0x5d2ax2[_0xe4bc[253]][_0xe4bc[1561]]?_0x5d2ax2[_0xe4bc[253]][_0xe4bc[1561]][_0xe4bc[1531]]:null};mxGraph[_0xe4bc[202]][_0xe4bc[2288]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){_0x5d2ax3=null;var _0x5d2ax5=_0x5d2ax2[_0xe4bc[124]][_0x5d2ax4?mxConstants[_0xe4bc[2539]]:mxConstants[_0xe4bc[2540]]];if(null!=_0x5d2ax5){var _0x5d2ax9=_0x5d2ax2[_0xe4bc[124]][_0x5d2ax4?mxConstants[_0xe4bc[2541]]:mxConstants[_0xe4bc[2542]]];null!=_0x5d2ax9&&(_0x5d2ax3= new mxPoint(parseFloat(_0x5d2ax5),parseFloat(_0x5d2ax9)))};_0x5d2ax5= !1;null!=_0x5d2ax3&&(_0x5d2ax5=mxUtils[_0xe4bc[433]](_0x5d2ax2[_0xe4bc[124]],_0x5d2ax4?mxConstants[_0xe4bc[2543]]:mxConstants[_0xe4bc[2544]],!0));return  new mxConnectionConstraint(_0x5d2ax3,_0x5d2ax5)};mxGraph[_0xe4bc[202]][_0xe4bc[2545]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){if(null!=_0x5d2ax5){this[_0xe4bc[251]][_0xe4bc[473]]();try{null==_0x5d2ax5||null==_0x5d2ax5[_0xe4bc[2546]]?(this[_0xe4bc[1717]](_0x5d2ax4?mxConstants[_0xe4bc[2539]]:mxConstants[_0xe4bc[2540]],null,[_0x5d2ax2]),this[_0xe4bc[1717]](_0x5d2ax4?mxConstants[_0xe4bc[2541]]:mxConstants[_0xe4bc[2542]],null,[_0x5d2ax2]),this[_0xe4bc[1717]](_0x5d2ax4?mxConstants[_0xe4bc[2543]]:mxConstants[_0xe4bc[2544]],null,[_0x5d2ax2])):null!=_0x5d2ax5[_0xe4bc[2546]]&&(this[_0xe4bc[1717]](_0x5d2ax4?mxConstants[_0xe4bc[2539]]:mxConstants[_0xe4bc[2540]],_0x5d2ax5[_0xe4bc[2546]][_0xe4bc[235]],[_0x5d2ax2]),this[_0xe4bc[1717]](_0x5d2ax4?mxConstants[_0xe4bc[2541]]:mxConstants[_0xe4bc[2542]],_0x5d2ax5[_0xe4bc[2546]][_0xe4bc[236]],[_0x5d2ax2]),_0x5d2ax5[_0xe4bc[591]]?this[_0xe4bc[1717]](_0x5d2ax4?mxConstants[_0xe4bc[2543]]:mxConstants[_0xe4bc[2544]],null,[_0x5d2ax2]):this[_0xe4bc[1717]](_0x5d2ax4?mxConstants[_0xe4bc[2543]]:mxConstants[_0xe4bc[2544]],_0xe4bc[468],[_0x5d2ax2]))}finally{this[_0xe4bc[251]][_0xe4bc[476]]()}}};mxGraph[_0xe4bc[202]][_0xe4bc[2290]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=null;if(null!=_0x5d2ax2){var _0x5d2ax5=this[_0xe4bc[441]][_0xe4bc[2087]](_0x5d2ax2),_0x5d2ax9= new mxPoint(_0x5d2ax5[_0xe4bc[241]](),_0x5d2ax5[_0xe4bc[242]]()),_0x5d2axa=_0x5d2ax2[_0xe4bc[124]][mxConstants[_0xe4bc[2011]]],_0x5d2ax12=0;if(null!=_0x5d2axa&&(_0xe4bc[700]==_0x5d2axa?_0x5d2ax12+=270:_0xe4bc[703]==_0x5d2axa?_0x5d2ax12+=180:_0xe4bc[701]==_0x5d2axa&&(_0x5d2ax12+=90),_0xe4bc[700]==_0x5d2axa||_0xe4bc[701]==_0x5d2axa)){_0x5d2ax5[_0xe4bc[235]]+=_0x5d2ax5[_0xe4bc[117]]/2-_0x5d2ax5[_0xe4bc[119]]/2;_0x5d2ax5[_0xe4bc[236]]+=_0x5d2ax5[_0xe4bc[119]]/2-_0x5d2ax5[_0xe4bc[117]]/2;var _0x5d2ax13=_0x5d2ax5[_0xe4bc[117]];_0x5d2ax5[_0xe4bc[117]]=_0x5d2ax5[_0xe4bc[119]];_0x5d2ax5[_0xe4bc[119]]=_0x5d2ax13};if(null!=_0x5d2ax3[_0xe4bc[2546]]){var _0x5d2ax14=_0x5d2ax4=1,_0x5d2ax15=0,_0x5d2ax16=0;if(this[_0xe4bc[502]]()[_0xe4bc[1193]](_0x5d2ax2[_0xe4bc[246]])){var _0x5d2ax17=_0x5d2ax2[_0xe4bc[124]][mxConstants[_0xe4bc[2547]]],_0x5d2ax18=_0x5d2ax2[_0xe4bc[124]][mxConstants[_0xe4bc[2548]]];null!=_0x5d2ax2[_0xe4bc[253]][_0xe4bc[1561]]&&(_0x5d2ax17=1==mxUtils[_0xe4bc[433]](_0x5d2ax2[_0xe4bc[124]],_0xe4bc[1607],0)||_0x5d2ax17,_0x5d2ax18=1==mxUtils[_0xe4bc[433]](_0x5d2ax2[_0xe4bc[124]],_0xe4bc[1608],0)||_0x5d2ax18);if(_0xe4bc[700]==_0x5d2axa||_0xe4bc[701]==_0x5d2axa){_0x5d2ax13=_0x5d2ax17,_0x5d2ax17=_0x5d2ax18,_0x5d2ax18=_0x5d2ax13};_0x5d2ax17&&(_0x5d2ax4= -1,_0x5d2ax15=-_0x5d2ax5[_0xe4bc[117]]);_0x5d2ax18&&(_0x5d2ax14= -1,_0x5d2ax16=-_0x5d2ax5[_0xe4bc[119]])};_0x5d2ax4= new mxPoint(_0x5d2ax5[_0xe4bc[235]]+_0x5d2ax3[_0xe4bc[2546]][_0xe4bc[235]]*_0x5d2ax5[_0xe4bc[117]]*_0x5d2ax4-_0x5d2ax15,_0x5d2ax5[_0xe4bc[236]]+_0x5d2ax3[_0xe4bc[2546]][_0xe4bc[236]]*_0x5d2ax5[_0xe4bc[119]]*_0x5d2ax14-_0x5d2ax16)};_0x5d2axa=_0x5d2ax2[_0xe4bc[124]][mxConstants[_0xe4bc[2278]]]||0;_0x5d2ax3[_0xe4bc[591]]?(0!=_0x5d2ax12&&null!=_0x5d2ax4&&(_0x5d2ax13=_0x5d2ax5=0,90==_0x5d2ax12?_0x5d2ax13=1:180==_0x5d2ax12?_0x5d2ax5= -1:270==_0x5d2axa&&(_0x5d2ax13= -1),_0x5d2ax4=mxUtils[_0xe4bc[432]](_0x5d2ax4,_0x5d2ax5,_0x5d2ax13,_0x5d2ax9)),null!=_0x5d2ax4&&_0x5d2ax3[_0xe4bc[591]]&&(_0x5d2ax4=this[_0xe4bc[441]][_0xe4bc[2302]](_0x5d2ax2,_0x5d2ax4,!1))):_0x5d2axa+=_0x5d2ax12;0!=_0x5d2axa&&null!=_0x5d2ax4&&(_0x5d2ax12=mxUtils[_0xe4bc[431]](_0x5d2axa),_0x5d2ax5=Math[_0xe4bc[426]](_0x5d2ax12),_0x5d2ax13=Math[_0xe4bc[427]](_0x5d2ax12),_0x5d2ax4=mxUtils[_0xe4bc[432]](_0x5d2ax4,_0x5d2ax5,_0x5d2ax13,_0x5d2ax9))};return _0x5d2ax4};mxGraph[_0xe4bc[202]][_0xe4bc[851]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){this[_0xe4bc[251]][_0xe4bc[473]]();try{var _0x5d2ax9=this[_0xe4bc[251]][_0xe4bc[1709]](_0x5d2ax2,_0x5d2ax4);this[_0xe4bc[852]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5);this[_0xe4bc[746]]( new mxEventObject(mxEvent.CONNECT_CELL,_0xe4bc[1989],_0x5d2ax2,_0xe4bc[1984],_0x5d2ax3,_0xe4bc[1097],_0x5d2ax4,_0xe4bc[257],_0x5d2ax9))}finally{this[_0xe4bc[251]][_0xe4bc[476]]()};return _0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[852]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){if(null!=_0x5d2ax2){this[_0xe4bc[251]][_0xe4bc[473]]();try{var _0x5d2ax9=this[_0xe4bc[251]][_0xe4bc[1709]](_0x5d2ax2,_0x5d2ax4);this[_0xe4bc[2545]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5);this[_0xe4bc[2549]]()&&(_0x5d2ax5=null,this[_0xe4bc[1908]](_0x5d2ax3)&&(_0x5d2ax5=_0x5d2ax3[_0xe4bc[1103]](),_0x5d2ax3=this[_0xe4bc[2550]](_0x5d2ax3,_0x5d2ax4)),this[_0xe4bc[1717]](_0x5d2ax4?mxConstants[_0xe4bc[2303]]:mxConstants[_0xe4bc[2304]],_0x5d2ax5,[_0x5d2ax2]));this[_0xe4bc[251]][_0xe4bc[1957]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4);this[_0xe4bc[2401]]&&this[_0xe4bc[1809]](_0x5d2ax2);this[_0xe4bc[746]]( new mxEventObject(mxEvent.CELL_CONNECTED,_0xe4bc[1989],_0x5d2ax2,_0xe4bc[1984],_0x5d2ax3,_0xe4bc[1097],_0x5d2ax4,_0xe4bc[257],_0x5d2ax9))}finally{this[_0xe4bc[251]][_0xe4bc[476]]()}}};mxGraph[_0xe4bc[202]][_0xe4bc[2531]]=function(_0x5d2ax2){if(null!=_0x5d2ax2){this[_0xe4bc[251]][_0xe4bc[473]]();try{for(var _0x5d2ax3=this[_0xe4bc[441]][_0xe4bc[255]],_0x5d2ax4=this[_0xe4bc[441]][_0xe4bc[513]],_0x5d2ax5={},_0x5d2ax9=0;_0x5d2ax9<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax9++){var _0x5d2axa=mxCellPath[_0xe4bc[385]](_0x5d2ax2[_0x5d2ax9]);_0x5d2ax5[_0x5d2axa]=_0x5d2ax2[_0x5d2ax9]};for(_0x5d2ax9=0;_0x5d2ax9<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax9++){if(this[_0xe4bc[251]][_0xe4bc[250]](_0x5d2ax2[_0x5d2ax9])){var _0x5d2ax12=this[_0xe4bc[251]][_0xe4bc[1721]](_0x5d2ax2[_0x5d2ax9]);if(null!=_0x5d2ax12){var _0x5d2ax13=this[_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax2[_0x5d2ax9]),_0x5d2ax14=this[_0xe4bc[441]][_0xe4bc[248]](this[_0xe4bc[251]][_0xe4bc[1197]](_0x5d2ax2[_0x5d2ax9]));if(null!=_0x5d2ax13&&null!=_0x5d2ax14){var _0x5d2ax12=_0x5d2ax12[_0xe4bc[238]](),_0x5d2ax15=-_0x5d2ax14[_0xe4bc[2078]][_0xe4bc[235]],_0x5d2ax16=-_0x5d2ax14[_0xe4bc[2078]][_0xe4bc[236]],_0x5d2ax17=_0x5d2ax13[_0xe4bc[439]],_0x5d2ax18=this[_0xe4bc[251]][_0xe4bc[1709]](_0x5d2ax2[_0x5d2ax9],!0);if(null!=_0x5d2ax18&&this[_0xe4bc[2551]](_0x5d2ax2[_0x5d2ax9],_0x5d2ax18,!0)){for(var _0x5d2ax19=mxCellPath[_0xe4bc[385]](_0x5d2ax18);null!=_0x5d2ax18&&null==_0x5d2ax5[_0x5d2ax19];){_0x5d2ax18=this[_0xe4bc[251]][_0xe4bc[1197]](_0x5d2ax18),_0x5d2ax19=mxCellPath[_0xe4bc[385]](_0x5d2ax18)};null==_0x5d2ax18&&(_0x5d2ax12[_0xe4bc[2007]]( new mxPoint(_0x5d2ax17[0][_0xe4bc[235]]/_0x5d2ax3-_0x5d2ax4[_0xe4bc[235]]+_0x5d2ax15,_0x5d2ax17[0][_0xe4bc[236]]/_0x5d2ax3-_0x5d2ax4[_0xe4bc[236]]+_0x5d2ax16),!0),this[_0xe4bc[251]][_0xe4bc[1957]](_0x5d2ax2[_0x5d2ax9],null,!0))};var _0x5d2ax1a=this[_0xe4bc[251]][_0xe4bc[1709]](_0x5d2ax2[_0x5d2ax9],!1);if(null!=_0x5d2ax1a&&this[_0xe4bc[2551]](_0x5d2ax2[_0x5d2ax9],_0x5d2ax1a,!1)){for(var _0x5d2ax1b=mxCellPath[_0xe4bc[385]](_0x5d2ax1a);null!=_0x5d2ax1a&&null==_0x5d2ax5[_0x5d2ax1b];){_0x5d2ax1a=this[_0xe4bc[251]][_0xe4bc[1197]](_0x5d2ax1a),_0x5d2ax1b=mxCellPath[_0xe4bc[385]](_0x5d2ax1a)};if(null==_0x5d2ax1a){var _0x5d2ax1c=_0x5d2ax17[_0xe4bc[67]]-1;_0x5d2ax12[_0xe4bc[2007]]( new mxPoint(_0x5d2ax17[_0x5d2ax1c][_0xe4bc[235]]/_0x5d2ax3-_0x5d2ax4[_0xe4bc[235]]+_0x5d2ax15,_0x5d2ax17[_0x5d2ax1c][_0xe4bc[236]]/_0x5d2ax3-_0x5d2ax4[_0xe4bc[236]]+_0x5d2ax16),!1);this[_0xe4bc[251]][_0xe4bc[1957]](_0x5d2ax2[_0x5d2ax9],null,!1)}};this[_0xe4bc[251]][_0xe4bc[1724]](_0x5d2ax2[_0x5d2ax9],_0x5d2ax12)}}}}}finally{this[_0xe4bc[251]][_0xe4bc[476]]()}}};mxGraph[_0xe4bc[202]][_0xe4bc[2534]]=function(){return this[_0xe4bc[441]][_0xe4bc[1741]]};mxGraph[_0xe4bc[202]][_0xe4bc[2326]]=function(_0x5d2ax2){return null};mxGraph[_0xe4bc[202]][_0xe4bc[1908]]=function(_0x5d2ax2){return !1};mxGraph[_0xe4bc[202]][_0xe4bc[2550]]=function(_0x5d2ax2,_0x5d2ax3){return this[_0xe4bc[251]][_0xe4bc[1197]](_0x5d2ax2)};mxGraph[_0xe4bc[202]][_0xe4bc[2280]]=function(_0x5d2ax2){return null};mxGraph[_0xe4bc[202]][_0xe4bc[2552]]=function(_0x5d2ax2){_0x5d2ax2=_0x5d2ax2||this[_0xe4bc[2452]]();null!=_0x5d2ax2&&this[_0xe4bc[2553]](_0x5d2ax2)&&(this[_0xe4bc[441]][_0xe4bc[2257]](_0x5d2ax2),this[_0xe4bc[2440]]())};mxGraph[_0xe4bc[202]][_0xe4bc[2554]]=function(){var _0x5d2ax2=this[_0xe4bc[251]][_0xe4bc[501]](),_0x5d2ax3=this[_0xe4bc[2534]]();if(null!=_0x5d2ax3){for(var _0x5d2ax4=this[_0xe4bc[251]][_0xe4bc[1197]](_0x5d2ax3);_0x5d2ax4!=_0x5d2ax2&&!this[_0xe4bc[2553]](_0x5d2ax4)&&this[_0xe4bc[251]][_0xe4bc[1197]](_0x5d2ax4)!=_0x5d2ax2;){_0x5d2ax4=this[_0xe4bc[251]][_0xe4bc[1197]](_0x5d2ax4)};_0x5d2ax4==_0x5d2ax2||this[_0xe4bc[251]][_0xe4bc[1197]](_0x5d2ax4)==_0x5d2ax2?this[_0xe4bc[441]][_0xe4bc[2257]](null):this[_0xe4bc[441]][_0xe4bc[2257]](_0x5d2ax4);null!=this[_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax3)&&this[_0xe4bc[2450]](_0x5d2ax3)}};mxGraph[_0xe4bc[202]][_0xe4bc[2442]]=function(){var _0x5d2ax2=this[_0xe4bc[2534]]();null!=_0x5d2ax2&&(this[_0xe4bc[441]][_0xe4bc[2257]](null),null!=this[_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax2)&&this[_0xe4bc[2450]](_0x5d2ax2))};mxGraph[_0xe4bc[202]][_0xe4bc[2553]]=function(_0x5d2ax2){return null!=_0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[517]]=function(){return this[_0xe4bc[441]][_0xe4bc[517]]()};mxGraph[_0xe4bc[202]][_0xe4bc[2555]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){var _0x5d2ax5=[_0x5d2ax2];_0x5d2ax3&&(_0x5d2ax5=_0x5d2ax5[_0xe4bc[1919]](this[_0xe4bc[251]][_0xe4bc[264]](_0x5d2ax2)));_0x5d2ax5=this[_0xe4bc[441]][_0xe4bc[1799]](_0x5d2ax5);if(_0x5d2ax4){_0x5d2ax4=this[_0xe4bc[251]][_0xe4bc[262]](_0x5d2ax2);for(var _0x5d2ax9=0;_0x5d2ax9<_0x5d2ax4;_0x5d2ax9++){var _0x5d2axa=this[_0xe4bc[2555]](this[_0xe4bc[251]][_0xe4bc[263]](_0x5d2ax2,_0x5d2ax9),_0x5d2ax3,!0);null!=_0x5d2ax5?_0x5d2ax5[_0xe4bc[99]](_0x5d2axa):_0x5d2ax5=_0x5d2axa}};return _0x5d2ax5};mxGraph[_0xe4bc[202]][_0xe4bc[1729]]=function(_0x5d2ax2,_0x5d2ax3){_0x5d2ax3=null!=_0x5d2ax3?_0x5d2ax3:!1;var _0x5d2ax4=null;if(null!=_0x5d2ax2){for(var _0x5d2ax5=0;_0x5d2ax5<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax5++){if(_0x5d2ax3||this[_0xe4bc[251]][_0xe4bc[1193]](_0x5d2ax2[_0x5d2ax5])){var _0x5d2ax9=this[_0xe4bc[1198]](_0x5d2ax2[_0x5d2ax5]);if(null!=_0x5d2ax9){var _0x5d2axa=_0x5d2ax9[_0xe4bc[1525]];if(null!=_0x5d2axa&&0<_0x5d2axa[_0xe4bc[67]]){for(var _0x5d2ax12= new mxRectangle(_0x5d2axa[0][_0xe4bc[235]],_0x5d2axa[0][_0xe4bc[236]],0,0),_0x5d2ax13=function(_0x5d2ax2){null!=_0x5d2ax2&&_0x5d2ax12[_0xe4bc[99]]( new mxRectangle(_0x5d2ax2[_0xe4bc[235]],_0x5d2ax2[_0xe4bc[236]],0,0))},_0x5d2ax14=1;_0x5d2ax14<_0x5d2axa[_0xe4bc[67]];_0x5d2ax14++){_0x5d2ax13(_0x5d2axa[_0x5d2ax14])};_0x5d2ax13(_0x5d2ax9[_0xe4bc[2006]](!0));_0x5d2ax13(_0x5d2ax9[_0xe4bc[2006]](!1))};null==_0x5d2ax4?_0x5d2ax4= new mxRectangle(_0x5d2ax9[_0xe4bc[235]],_0x5d2ax9[_0xe4bc[236]],_0x5d2ax9[_0xe4bc[117]],_0x5d2ax9[_0xe4bc[119]]):_0x5d2ax4[_0xe4bc[99]](_0x5d2ax9)}}}};return _0x5d2ax4};mxGraph[_0xe4bc[202]][_0xe4bc[802]]=function(_0x5d2ax2){this[_0xe4bc[441]][_0xe4bc[200]](_0x5d2ax2,null==_0x5d2ax2);this[_0xe4bc[441]][_0xe4bc[2264]]();this[_0xe4bc[2258]]();this[_0xe4bc[746]]( new mxEventObject(mxEvent.REFRESH))};mxGraph[_0xe4bc[202]][_0xe4bc[1021]]=function(_0x5d2ax2){this[_0xe4bc[991]]&&(_0x5d2ax2=Math[_0xe4bc[488]](_0x5d2ax2/this[_0xe4bc[1020]])*this[_0xe4bc[1020]]);return _0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[1135]]=function(_0x5d2ax2,_0x5d2ax3){if(this[_0xe4bc[2365]]&&mxUtils[_0xe4bc[1134]](this[_0xe4bc[526]])){this[_0xe4bc[526]][_0xe4bc[360]]= -_0x5d2ax2,this[_0xe4bc[526]][_0xe4bc[190]]= -_0x5d2ax3}else {var _0x5d2ax4=this[_0xe4bc[441]][_0xe4bc[2051]]();if(this[_0xe4bc[507]]==mxConstants[_0xe4bc[508]]){if(0==_0x5d2ax2&&0==_0x5d2ax3){if(mxClient[_0xe4bc[80]]?_0x5d2ax4[_0xe4bc[57]](_0xe4bc[535],_0xe4bc[536]+_0x5d2ax2+_0xe4bc[537]+_0x5d2ax3+_0xe4bc[460]):_0x5d2ax4[_0xe4bc[1390]](_0xe4bc[535]),null!=this[_0xe4bc[2556]]){for(var _0x5d2ax5=this[_0xe4bc[2556]][_0xe4bc[285]];null!=_0x5d2ax5;){var _0x5d2ax9=_0x5d2ax5[_0xe4bc[287]];this[_0xe4bc[526]][_0xe4bc[62]](_0x5d2ax5);_0x5d2ax5=_0x5d2ax9};this[_0xe4bc[2556]][_0xe4bc[265]][_0xe4bc[266]](this[_0xe4bc[2556]]);this[_0xe4bc[2556]]=null;this[_0xe4bc[526]][_0xe4bc[62]](_0x5d2ax4[_0xe4bc[265]]);for(_0x5d2ax5=this[_0xe4bc[2557]][_0xe4bc[285]];null!=_0x5d2ax5;){_0x5d2ax9=_0x5d2ax5[_0xe4bc[287]],this[_0xe4bc[526]][_0xe4bc[62]](_0x5d2ax5),_0x5d2ax5=_0x5d2ax9};this[_0xe4bc[2557]][_0xe4bc[265]][_0xe4bc[266]](this[_0xe4bc[2557]]);this[_0xe4bc[2557]]=null}}else {_0x5d2ax4[_0xe4bc[57]](_0xe4bc[535],_0xe4bc[536]+_0x5d2ax2+_0xe4bc[537]+_0x5d2ax3+_0xe4bc[460]);if(null==this[_0xe4bc[2556]]){this[_0xe4bc[2556]]=document[_0xe4bc[55]](_0xe4bc[485]);this[_0xe4bc[2556]][_0xe4bc[124]][_0xe4bc[491]]=_0xe4bc[492];this[_0xe4bc[2556]][_0xe4bc[124]][_0xe4bc[277]]=_0xe4bc[189];this[_0xe4bc[2557]]=document[_0xe4bc[55]](_0xe4bc[485]);this[_0xe4bc[2557]][_0xe4bc[124]][_0xe4bc[491]]=_0xe4bc[492];this[_0xe4bc[2557]][_0xe4bc[124]][_0xe4bc[277]]=_0xe4bc[189];for(var _0x5d2axa=this[_0xe4bc[2556]],_0x5d2ax5=this[_0xe4bc[526]][_0xe4bc[285]];null!=_0x5d2ax5;){_0x5d2ax9=_0x5d2ax5[_0xe4bc[287]],_0x5d2ax5!=_0x5d2ax4[_0xe4bc[265]]?_0x5d2axa[_0xe4bc[62]](_0x5d2ax5):_0x5d2axa=this[_0xe4bc[2557]],_0x5d2ax5=_0x5d2ax9};this[_0xe4bc[526]][_0xe4bc[950]](this[_0xe4bc[2556]],_0x5d2ax4[_0xe4bc[265]]);this[_0xe4bc[526]][_0xe4bc[62]](this[_0xe4bc[2557]])};this[_0xe4bc[2556]][_0xe4bc[124]][_0xe4bc[361]]=_0x5d2ax2+_0xe4bc[168];this[_0xe4bc[2556]][_0xe4bc[124]][_0xe4bc[125]]=_0x5d2ax3+_0xe4bc[168];this[_0xe4bc[2557]][_0xe4bc[124]][_0xe4bc[361]]=_0x5d2ax2+_0xe4bc[168];this[_0xe4bc[2557]][_0xe4bc[124]][_0xe4bc[125]]=_0x5d2ax3+_0xe4bc[168]}}else {_0x5d2ax4[_0xe4bc[124]][_0xe4bc[361]]=_0x5d2ax2+_0xe4bc[168],_0x5d2ax4[_0xe4bc[124]][_0xe4bc[125]]=_0x5d2ax3+_0xe4bc[168]};this[_0xe4bc[1136]]=_0x5d2ax2;this[_0xe4bc[1137]]=_0x5d2ax3;this[_0xe4bc[746]]( new mxEventObject(mxEvent.PAN))}};mxGraph[_0xe4bc[202]][_0xe4bc[2558]]=function(){this[_0xe4bc[499]](this[_0xe4bc[2395]])};mxGraph[_0xe4bc[202]][_0xe4bc[2559]]=function(){this[_0xe4bc[499]](1/this[_0xe4bc[2395]])};mxGraph[_0xe4bc[202]][_0xe4bc[2560]]=function(){1==this[_0xe4bc[441]][_0xe4bc[255]]?this[_0xe4bc[441]][_0xe4bc[1147]](0,0):(this[_0xe4bc[441]][_0xe4bc[513]][_0xe4bc[235]]=0,this[_0xe4bc[441]][_0xe4bc[513]][_0xe4bc[236]]=0,this[_0xe4bc[441]][_0xe4bc[2262]](1))};mxGraph[_0xe4bc[202]][_0xe4bc[2561]]=function(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[499]](_0x5d2ax2/this[_0xe4bc[441]][_0xe4bc[255]],_0x5d2ax3)};mxGraph[_0xe4bc[202]][_0xe4bc[499]]=function(_0x5d2ax2,_0x5d2ax3){_0x5d2ax3=null!=_0x5d2ax3?_0x5d2ax3:this[_0xe4bc[2397]];var _0x5d2ax4=this[_0xe4bc[441]][_0xe4bc[255]]*_0x5d2ax2,_0x5d2ax5=this[_0xe4bc[441]][_0xe4bc[248]](this[_0xe4bc[2452]]());if(this[_0xe4bc[2396]]&&null!=_0x5d2ax5){_0x5d2ax5= new mxRectangle(_0x5d2ax5[_0xe4bc[235]]*_0x5d2ax2,_0x5d2ax5[_0xe4bc[236]]*_0x5d2ax2,_0x5d2ax5[_0xe4bc[117]]*_0x5d2ax2,_0x5d2ax5[_0xe4bc[119]]*_0x5d2ax2),this[_0xe4bc[441]][_0xe4bc[255]]=_0x5d2ax4,this[_0xe4bc[2562]](_0x5d2ax5)||(this[_0xe4bc[441]][_0xe4bc[2259]](),this[_0xe4bc[441]][_0xe4bc[2262]](_0x5d2ax4))}else {if(_0x5d2ax3&&!mxUtils[_0xe4bc[1134]](this[_0xe4bc[526]])){var _0x5d2ax5=this[_0xe4bc[526]][_0xe4bc[359]],_0x5d2ax9=this[_0xe4bc[526]][_0xe4bc[167]];if(1<_0x5d2ax2){var _0x5d2axa=(_0x5d2ax2-1)/(2*_0x5d2ax4),_0x5d2ax5=_0x5d2ax5* -_0x5d2axa,_0x5d2ax9=_0x5d2ax9* -_0x5d2axa}else {_0x5d2axa=(1/_0x5d2ax2-1)/(2*this[_0xe4bc[441]][_0xe4bc[255]]),_0x5d2ax5*=_0x5d2axa,_0x5d2ax9*=_0x5d2axa};this[_0xe4bc[441]][_0xe4bc[829]](_0x5d2ax4,this[_0xe4bc[441]][_0xe4bc[513]][_0xe4bc[235]]+_0x5d2ax5,this[_0xe4bc[441]][_0xe4bc[513]][_0xe4bc[236]]+_0x5d2ax9)}else {this[_0xe4bc[441]][_0xe4bc[2262]](_0x5d2ax4),mxUtils[_0xe4bc[1134]](this[_0xe4bc[526]])&&(_0x5d2ax9=_0x5d2ax5=0,_0x5d2ax3&&(_0x5d2ax5=this[_0xe4bc[526]][_0xe4bc[359]]*(_0x5d2ax2-1)/2,_0x5d2ax9=this[_0xe4bc[526]][_0xe4bc[167]]*(_0x5d2ax2-1)/2),this[_0xe4bc[526]][_0xe4bc[360]]=Math[_0xe4bc[488]](this[_0xe4bc[526]][_0xe4bc[360]]*_0x5d2ax2+_0x5d2ax5),this[_0xe4bc[526]][_0xe4bc[190]]=Math[_0xe4bc[488]](this[_0xe4bc[526]][_0xe4bc[190]]*_0x5d2ax2+_0x5d2ax9))}}};mxGraph[_0xe4bc[202]][_0xe4bc[2563]]=function(_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[526]][_0xe4bc[159]]/_0x5d2ax2[_0xe4bc[117]]/(this[_0xe4bc[526]][_0xe4bc[157]]/_0x5d2ax2[_0xe4bc[119]]);_0x5d2ax2[_0xe4bc[235]]=Math[_0xe4bc[160]](0,_0x5d2ax2[_0xe4bc[235]]);_0x5d2ax2[_0xe4bc[236]]=Math[_0xe4bc[160]](0,_0x5d2ax2[_0xe4bc[236]]);var _0x5d2ax4=Math[_0xe4bc[243]](this[_0xe4bc[526]][_0xe4bc[1526]],_0x5d2ax2[_0xe4bc[235]]+_0x5d2ax2[_0xe4bc[117]]),_0x5d2ax5=Math[_0xe4bc[243]](this[_0xe4bc[526]][_0xe4bc[191]],_0x5d2ax2[_0xe4bc[236]]+_0x5d2ax2[_0xe4bc[119]]);_0x5d2ax2[_0xe4bc[117]]=_0x5d2ax4-_0x5d2ax2[_0xe4bc[235]];_0x5d2ax2[_0xe4bc[119]]=_0x5d2ax5-_0x5d2ax2[_0xe4bc[236]];1>_0x5d2ax3?(_0x5d2ax3=_0x5d2ax2[_0xe4bc[119]]/_0x5d2ax3,_0x5d2ax4=(_0x5d2ax3-_0x5d2ax2[_0xe4bc[119]])/2,_0x5d2ax2[_0xe4bc[119]]=_0x5d2ax3,_0x5d2ax3=Math[_0xe4bc[243]](_0x5d2ax2[_0xe4bc[236]],_0x5d2ax4),_0x5d2ax2[_0xe4bc[236]]-=_0x5d2ax3,_0x5d2ax5=Math[_0xe4bc[243]](this[_0xe4bc[526]][_0xe4bc[191]],_0x5d2ax2[_0xe4bc[236]]+_0x5d2ax2[_0xe4bc[119]]),_0x5d2ax2[_0xe4bc[119]]=_0x5d2ax5-_0x5d2ax2[_0xe4bc[236]]):(_0x5d2ax3*=_0x5d2ax2[_0xe4bc[117]],_0x5d2ax4=(_0x5d2ax3-_0x5d2ax2[_0xe4bc[117]])/2,_0x5d2ax2[_0xe4bc[117]]=_0x5d2ax3,_0x5d2ax3=Math[_0xe4bc[243]](_0x5d2ax2[_0xe4bc[235]],_0x5d2ax4),_0x5d2ax2[_0xe4bc[235]]-=_0x5d2ax3,_0x5d2ax4=Math[_0xe4bc[243]](this[_0xe4bc[526]][_0xe4bc[1526]],_0x5d2ax2[_0xe4bc[235]]+_0x5d2ax2[_0xe4bc[117]]),_0x5d2ax2[_0xe4bc[117]]=_0x5d2ax4-_0x5d2ax2[_0xe4bc[235]]);_0x5d2ax3=this[_0xe4bc[526]][_0xe4bc[159]]/_0x5d2ax2[_0xe4bc[117]];_0x5d2ax4=this[_0xe4bc[441]][_0xe4bc[255]]*_0x5d2ax3;mxUtils[_0xe4bc[1134]](this[_0xe4bc[526]])?(this[_0xe4bc[441]][_0xe4bc[2262]](_0x5d2ax4),this[_0xe4bc[526]][_0xe4bc[360]]=Math[_0xe4bc[488]](_0x5d2ax2[_0xe4bc[235]]*_0x5d2ax3),this[_0xe4bc[526]][_0xe4bc[190]]=Math[_0xe4bc[488]](_0x5d2ax2[_0xe4bc[236]]*_0x5d2ax3)):this[_0xe4bc[441]][_0xe4bc[829]](_0x5d2ax4,this[_0xe4bc[441]][_0xe4bc[513]][_0xe4bc[235]]-_0x5d2ax2[_0xe4bc[235]]/this[_0xe4bc[441]][_0xe4bc[255]],this[_0xe4bc[441]][_0xe4bc[513]][_0xe4bc[236]]-_0x5d2ax2[_0xe4bc[236]]/this[_0xe4bc[441]][_0xe4bc[255]])};mxGraph[_0xe4bc[202]][_0xe4bc[933]]=function(_0x5d2ax2,_0x5d2ax3){if(null!=this[_0xe4bc[526]]){_0x5d2ax2=null!=_0x5d2ax2?_0x5d2ax2:0;_0x5d2ax3=null!=_0x5d2ax3?_0x5d2ax3:!1;var _0x5d2ax4=this[_0xe4bc[526]][_0xe4bc[159]],_0x5d2ax5=this[_0xe4bc[526]][_0xe4bc[157]],_0x5d2ax9=this[_0xe4bc[441]][_0xe4bc[517]]();_0x5d2ax3&&(null!=_0x5d2ax9[_0xe4bc[235]]&&null!=_0x5d2ax9[_0xe4bc[236]])&&(_0x5d2ax9[_0xe4bc[117]]+=_0x5d2ax9[_0xe4bc[235]],_0x5d2ax9[_0xe4bc[119]]+=_0x5d2ax9[_0xe4bc[236]],_0x5d2ax9[_0xe4bc[235]]=0,_0x5d2ax9[_0xe4bc[236]]=0);var _0x5d2axa=this[_0xe4bc[441]][_0xe4bc[255]],_0x5d2ax12=_0x5d2ax9[_0xe4bc[117]]/_0x5d2axa,_0x5d2ax13=_0x5d2ax9[_0xe4bc[119]]/_0x5d2axa;null!=this[_0xe4bc[1617]]&&(_0x5d2ax12=Math[_0xe4bc[160]](_0x5d2ax12,this[_0xe4bc[1617]][_0xe4bc[117]]-_0x5d2ax9[_0xe4bc[235]]/_0x5d2axa),_0x5d2ax13=Math[_0xe4bc[160]](_0x5d2ax13,this[_0xe4bc[1617]][_0xe4bc[119]]-_0x5d2ax9[_0xe4bc[236]]/_0x5d2axa));var _0x5d2ax14=_0x5d2ax3?_0x5d2ax2:2*_0x5d2ax2,_0x5d2ax4=Math[_0xe4bc[519]](100*Math[_0xe4bc[243]](_0x5d2ax4/(_0x5d2ax12+_0x5d2ax14),_0x5d2ax5/(_0x5d2ax13+_0x5d2ax14)))/100;null!=this[_0xe4bc[2413]]&&(_0x5d2ax4=Math[_0xe4bc[160]](_0x5d2ax4,this[_0xe4bc[2413]]));null!=this[_0xe4bc[2414]]&&(_0x5d2ax4=Math[_0xe4bc[243]](_0x5d2ax4,this[_0xe4bc[2414]]));_0x5d2ax3?this[_0xe4bc[441]][_0xe4bc[255]]!=_0x5d2ax4&&this[_0xe4bc[441]][_0xe4bc[2262]](_0x5d2ax4):mxUtils[_0xe4bc[1134]](this[_0xe4bc[526]])?(this[_0xe4bc[441]][_0xe4bc[2262]](_0x5d2ax4),null!=_0x5d2ax9[_0xe4bc[235]]&&(this[_0xe4bc[526]][_0xe4bc[360]]=Math[_0xe4bc[488]](_0x5d2ax9[_0xe4bc[235]]/_0x5d2axa)*_0x5d2ax4-_0x5d2ax2-Math[_0xe4bc[160]](0,(this[_0xe4bc[526]][_0xe4bc[159]]-_0x5d2ax12*_0x5d2ax4)/2)),null!=_0x5d2ax9[_0xe4bc[236]]&&(this[_0xe4bc[526]][_0xe4bc[190]]=Math[_0xe4bc[488]](_0x5d2ax9[_0xe4bc[236]]/_0x5d2axa)*_0x5d2ax4-_0x5d2ax2-Math[_0xe4bc[160]](0,(this[_0xe4bc[526]][_0xe4bc[157]]-_0x5d2ax13*_0x5d2ax4)/2))):this[_0xe4bc[441]][_0xe4bc[829]](_0x5d2ax4,null!=_0x5d2ax9[_0xe4bc[235]]?Math[_0xe4bc[519]](this[_0xe4bc[441]][_0xe4bc[513]][_0xe4bc[235]]-_0x5d2ax9[_0xe4bc[235]]/_0x5d2axa+_0x5d2ax2+1):_0x5d2ax2,null!=_0x5d2ax9[_0xe4bc[236]]?Math[_0xe4bc[519]](this[_0xe4bc[441]][_0xe4bc[513]][_0xe4bc[236]]-_0x5d2ax9[_0xe4bc[236]]/_0x5d2axa+_0x5d2ax2+1):_0x5d2ax2)};return this[_0xe4bc[441]][_0xe4bc[255]]};mxGraph[_0xe4bc[202]][_0xe4bc[2564]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=-this[_0xe4bc[441]][_0xe4bc[513]][_0xe4bc[235]],_0x5d2ax5=-this[_0xe4bc[441]][_0xe4bc[513]][_0xe4bc[236]],_0x5d2ax9=this[_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax2);null!=_0x5d2ax9&&(_0x5d2ax4= new mxRectangle(_0x5d2ax4+_0x5d2ax9[_0xe4bc[235]],_0x5d2ax5+_0x5d2ax9[_0xe4bc[236]],_0x5d2ax9[_0xe4bc[117]],_0x5d2ax9[_0xe4bc[119]]),_0x5d2ax3&&null!=this[_0xe4bc[526]]&&(_0x5d2ax5=this[_0xe4bc[526]][_0xe4bc[159]],_0x5d2ax9=this[_0xe4bc[526]][_0xe4bc[157]],_0x5d2ax4[_0xe4bc[235]]=_0x5d2ax4[_0xe4bc[241]]()-_0x5d2ax5/2,_0x5d2ax4[_0xe4bc[117]]=_0x5d2ax5,_0x5d2ax4[_0xe4bc[236]]=_0x5d2ax4[_0xe4bc[242]]()-_0x5d2ax9/2,_0x5d2ax4[_0xe4bc[119]]=_0x5d2ax9),this[_0xe4bc[2562]](_0x5d2ax4)&&this[_0xe4bc[441]][_0xe4bc[1147]](this[_0xe4bc[441]][_0xe4bc[513]][_0xe4bc[235]],this[_0xe4bc[441]][_0xe4bc[513]][_0xe4bc[236]]))};mxGraph[_0xe4bc[202]][_0xe4bc[2562]]=function(_0x5d2ax2){var _0x5d2ax3=!1;if(null!=_0x5d2ax2){var _0x5d2ax4=this[_0xe4bc[526]][_0xe4bc[359]],_0x5d2ax5=this[_0xe4bc[526]][_0xe4bc[167]],_0x5d2ax9=Math[_0xe4bc[243]](_0x5d2ax4,_0x5d2ax2[_0xe4bc[117]]),_0x5d2axa=Math[_0xe4bc[243]](_0x5d2ax5,_0x5d2ax2[_0xe4bc[119]]);if(mxUtils[_0xe4bc[1134]](this[_0xe4bc[526]])){_0x5d2ax4=this[_0xe4bc[526]];_0x5d2ax2[_0xe4bc[235]]+=this[_0xe4bc[441]][_0xe4bc[513]][_0xe4bc[235]];_0x5d2ax2[_0xe4bc[236]]+=this[_0xe4bc[441]][_0xe4bc[513]][_0xe4bc[236]];var _0x5d2ax12=_0x5d2ax4[_0xe4bc[360]]-_0x5d2ax2[_0xe4bc[235]],_0x5d2ax5=Math[_0xe4bc[160]](_0x5d2ax12-_0x5d2ax4[_0xe4bc[360]],0);0<_0x5d2ax12?_0x5d2ax4[_0xe4bc[360]]-=_0x5d2ax12+2:(_0x5d2ax12=_0x5d2ax2[_0xe4bc[235]]+_0x5d2ax9-_0x5d2ax4[_0xe4bc[360]]-_0x5d2ax4[_0xe4bc[159]],0<_0x5d2ax12&&(_0x5d2ax4[_0xe4bc[360]]+=_0x5d2ax12+2));_0x5d2ax9=_0x5d2ax4[_0xe4bc[190]]-_0x5d2ax2[_0xe4bc[236]];_0x5d2ax12=Math[_0xe4bc[160]](0,_0x5d2ax9-_0x5d2ax4[_0xe4bc[190]]);0<_0x5d2ax9?_0x5d2ax4[_0xe4bc[190]]-=_0x5d2ax9+2:(_0x5d2ax9=_0x5d2ax2[_0xe4bc[236]]+_0x5d2axa-_0x5d2ax4[_0xe4bc[190]]-_0x5d2ax4[_0xe4bc[157]],0<_0x5d2ax9&&(_0x5d2ax4[_0xe4bc[190]]+=_0x5d2ax9+2));!this[_0xe4bc[2365]]&&(0!=_0x5d2ax5||0!=_0x5d2ax12)&&this[_0xe4bc[441]][_0xe4bc[1147]](_0x5d2ax5,_0x5d2ax12)}else {var _0x5d2ax12=-this[_0xe4bc[441]][_0xe4bc[513]][_0xe4bc[235]],_0x5d2ax13=-this[_0xe4bc[441]][_0xe4bc[513]][_0xe4bc[236]],_0x5d2ax14=this[_0xe4bc[441]][_0xe4bc[255]];_0x5d2ax2[_0xe4bc[235]]+_0x5d2ax9>_0x5d2ax12+_0x5d2ax4&&(this[_0xe4bc[441]][_0xe4bc[513]][_0xe4bc[235]]-=(_0x5d2ax2[_0xe4bc[235]]+_0x5d2ax9-_0x5d2ax4-_0x5d2ax12)/_0x5d2ax14,_0x5d2ax3= !0);_0x5d2ax2[_0xe4bc[236]]+_0x5d2axa>_0x5d2ax13+_0x5d2ax5&&(this[_0xe4bc[441]][_0xe4bc[513]][_0xe4bc[236]]-=(_0x5d2ax2[_0xe4bc[236]]+_0x5d2axa-_0x5d2ax5-_0x5d2ax13)/_0x5d2ax14,_0x5d2ax3= !0);_0x5d2ax2[_0xe4bc[235]]<_0x5d2ax12&&(this[_0xe4bc[441]][_0xe4bc[513]][_0xe4bc[235]]+=(_0x5d2ax12-_0x5d2ax2[_0xe4bc[235]])/_0x5d2ax14,_0x5d2ax3= !0);_0x5d2ax2[_0xe4bc[236]]<_0x5d2ax13&&(this[_0xe4bc[441]][_0xe4bc[513]][_0xe4bc[236]]+=(_0x5d2ax13-_0x5d2ax2[_0xe4bc[236]])/_0x5d2ax14,_0x5d2ax3= !0);_0x5d2ax3&&(this[_0xe4bc[441]][_0xe4bc[802]](),null!=this[_0xe4bc[2432]]&&this[_0xe4bc[2432]][_0xe4bc[802]]())}};return _0x5d2ax3};mxGraph[_0xe4bc[202]][_0xe4bc[1198]]=function(_0x5d2ax2){return this[_0xe4bc[251]][_0xe4bc[1721]](_0x5d2ax2)};mxGraph[_0xe4bc[202]][_0xe4bc[1714]]=function(_0x5d2ax2){return this[_0xe4bc[251]][_0xe4bc[174]](_0x5d2ax2)};mxGraph[_0xe4bc[202]][_0xe4bc[1742]]=function(_0x5d2ax2){return this[_0xe4bc[251]][_0xe4bc[1971]](_0x5d2ax2)};mxGraph[_0xe4bc[202]][_0xe4bc[2565]]=function(_0x5d2ax2){return this[_0xe4bc[251]][_0xe4bc[1965]](_0x5d2ax2)};mxGraph[_0xe4bc[202]][_0xe4bc[2298]]=function(_0x5d2ax2){var _0x5d2ax3=_0x5d2ax2[_0xe4bc[124]][mxConstants[_0xe4bc[2566]]];if(null!=_0x5d2ax3){return _0x5d2ax3};_0x5d2ax2=this[_0xe4bc[441]][_0xe4bc[2291]](_0x5d2ax2);return _0x5d2ax2==mxEdgeStyle[_0xe4bc[2567]]||_0x5d2ax2==mxEdgeStyle[_0xe4bc[2568]]||_0x5d2ax2==mxEdgeStyle[_0xe4bc[2569]]||_0x5d2ax2==mxEdgeStyle[_0xe4bc[2570]]||_0x5d2ax2==mxEdgeStyle[_0xe4bc[2571]]||_0x5d2ax2==mxEdgeStyle[_0xe4bc[2572]]};mxGraph[_0xe4bc[202]][_0xe4bc[2573]]=function(_0x5d2ax2){var _0x5d2ax3=_0x5d2ax2[_0xe4bc[2089]](!0);_0x5d2ax2=_0x5d2ax2[_0xe4bc[2089]](!1);return null!=_0x5d2ax3&&_0x5d2ax3==_0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[2574]]=function(_0x5d2ax2){return mxEvent[_0xe4bc[775]](_0x5d2ax2)};mxGraph[_0xe4bc[202]][_0xe4bc[2462]]=function(_0x5d2ax2){return mxClient[_0xe4bc[2575]]?mxEvent[_0xe4bc[2576]](_0x5d2ax2):mxEvent[_0xe4bc[775]](_0x5d2ax2)};mxGraph[_0xe4bc[202]][_0xe4bc[1018]]=function(_0x5d2ax2){return null!=_0x5d2ax2&&!mxEvent[_0xe4bc[2577]](_0x5d2ax2)};mxGraph[_0xe4bc[202]][_0xe4bc[2578]]=function(_0x5d2ax2){return mxEvent[_0xe4bc[774]](_0x5d2ax2)};mxGraph[_0xe4bc[202]][_0xe4bc[2579]]=function(_0x5d2ax2){return mxEvent[_0xe4bc[2577]](_0x5d2ax2)};mxGraph[_0xe4bc[202]][_0xe4bc[2580]]=function(_0x5d2ax2){mxUtils[_0xe4bc[150]](_0x5d2ax2)};mxGraph[_0xe4bc[202]][_0xe4bc[2581]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){return null==this[_0xe4bc[2500]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4)};mxGraph[_0xe4bc[202]][_0xe4bc[2500]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){if(null!=_0x5d2ax2&&!this[_0xe4bc[2530]]()&&(null==_0x5d2ax3||null==_0x5d2ax4)){return _0xe4bc[110]};if(null!=_0x5d2ax2&&null==this[_0xe4bc[251]][_0xe4bc[1709]](_0x5d2ax2,!0)&&null==this[_0xe4bc[251]][_0xe4bc[1709]](_0x5d2ax2,!1)){return null};if(!this[_0xe4bc[2402]]&&_0x5d2ax3==_0x5d2ax4&&null!=_0x5d2ax3||!this[_0xe4bc[2582]](_0x5d2ax3,_0x5d2ax4)){return _0xe4bc[110]};if(null!=_0x5d2ax3&&null!=_0x5d2ax4){var _0x5d2ax5=_0xe4bc[110];if(!this[_0xe4bc[2404]]){var _0x5d2ax9=this[_0xe4bc[251]][_0xe4bc[1781]](_0x5d2ax3,_0x5d2ax4,!0);if(1<_0x5d2ax9[_0xe4bc[67]]||1==_0x5d2ax9[_0xe4bc[67]]&&_0x5d2ax9[0]!=_0x5d2ax2){_0x5d2ax5+=(mxResources[_0xe4bc[203]](this[_0xe4bc[2421]])||this[_0xe4bc[2421]])+_0xe4bc[192]}};var _0x5d2ax9=this[_0xe4bc[251]][_0xe4bc[1962]](_0x5d2ax3,!0,_0x5d2ax2),_0x5d2axa=this[_0xe4bc[251]][_0xe4bc[1962]](_0x5d2ax4,!1,_0x5d2ax2);if(null!=this[_0xe4bc[2335]]){for(var _0x5d2ax12=0;_0x5d2ax12<this[_0xe4bc[2335]][_0xe4bc[67]];_0x5d2ax12++){var _0x5d2ax13=this[_0xe4bc[2335]][_0x5d2ax12][_0xe4bc[2583]](this,_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax9,_0x5d2axa);null!=_0x5d2ax13&&(_0x5d2ax5+=_0x5d2ax13)}};_0x5d2ax13=this[_0xe4bc[2584]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4);null!=_0x5d2ax13&&(_0x5d2ax5+=_0x5d2ax13);return 0<_0x5d2ax5[_0xe4bc[67]]?_0x5d2ax5:null};return this[_0xe4bc[2406]]?null:_0xe4bc[110]};mxGraph[_0xe4bc[202]][_0xe4bc[2584]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){return null};mxGraph[_0xe4bc[202]][_0xe4bc[2585]]=function(_0x5d2ax2,_0x5d2ax3){_0x5d2ax2=null!=_0x5d2ax2?_0x5d2ax2:this[_0xe4bc[251]][_0xe4bc[501]]();_0x5d2ax3=null!=_0x5d2ax3?_0x5d2ax3:{};for(var _0x5d2ax4=!0,_0x5d2ax5=this[_0xe4bc[251]][_0xe4bc[262]](_0x5d2ax2),_0x5d2ax9=0;_0x5d2ax9<_0x5d2ax5;_0x5d2ax9++){var _0x5d2axa=this[_0xe4bc[251]][_0xe4bc[263]](_0x5d2ax2,_0x5d2ax9),_0x5d2ax12=_0x5d2ax3;this[_0xe4bc[2553]](_0x5d2axa)&&(_0x5d2ax12={});_0x5d2ax12=this[_0xe4bc[2585]](_0x5d2axa,_0x5d2ax12);null!=_0x5d2ax12?this[_0xe4bc[2447]](_0x5d2axa,_0x5d2ax12[_0xe4bc[230]](/\n/g,_0xe4bc[545])):this[_0xe4bc[2447]](_0x5d2axa,null);_0x5d2ax4=_0x5d2ax4&&null==_0x5d2ax12};_0x5d2ax5=_0xe4bc[110];this[_0xe4bc[1742]](_0x5d2ax2)&&!_0x5d2ax4&&(_0x5d2ax5+=(mxResources[_0xe4bc[203]](this[_0xe4bc[2423]])||this[_0xe4bc[2423]])+_0xe4bc[192]);_0x5d2ax5=this[_0xe4bc[251]][_0xe4bc[250]](_0x5d2ax2)?_0x5d2ax5+(this[_0xe4bc[2500]](_0x5d2ax2,this[_0xe4bc[251]][_0xe4bc[1709]](_0x5d2ax2,!0),this[_0xe4bc[251]][_0xe4bc[1709]](_0x5d2ax2,!1))||_0xe4bc[110]):_0x5d2ax5+(this[_0xe4bc[2586]](_0x5d2ax2)||_0xe4bc[110]);_0x5d2ax9=this[_0xe4bc[2587]](_0x5d2ax2,_0x5d2ax3);null!=_0x5d2ax9&&(_0x5d2ax5+=_0x5d2ax9);null==this[_0xe4bc[251]][_0xe4bc[1197]](_0x5d2ax2)&&this[_0xe4bc[441]][_0xe4bc[2264]]();return 0<_0x5d2ax5[_0xe4bc[67]]||!_0x5d2ax4?_0x5d2ax5:null};mxGraph[_0xe4bc[202]][_0xe4bc[2586]]=function(_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[251]][_0xe4bc[1962]](_0x5d2ax2,!0),_0x5d2ax4=this[_0xe4bc[251]][_0xe4bc[1962]](_0x5d2ax2,!1);_0x5d2ax2=this[_0xe4bc[251]][_0xe4bc[433]](_0x5d2ax2);var _0x5d2ax5=_0xe4bc[110];if(null!=this[_0xe4bc[2335]]){for(var _0x5d2ax9=0;_0x5d2ax9<this[_0xe4bc[2335]][_0xe4bc[67]];_0x5d2ax9++){var _0x5d2axa=this[_0xe4bc[2335]][_0x5d2ax9];if(_0x5d2axa[_0xe4bc[1097]]&&mxUtils[_0xe4bc[1331]](_0x5d2ax2,_0x5d2axa[_0xe4bc[60]],_0x5d2axa[_0xe4bc[2588]],_0x5d2axa[_0xe4bc[131]])&&(0==_0x5d2axa[_0xe4bc[160]]&&0<_0x5d2ax3||1==_0x5d2axa[_0xe4bc[243]]&&0==_0x5d2ax3||1==_0x5d2axa[_0xe4bc[160]]&&1<_0x5d2ax3)){_0x5d2ax5+=_0x5d2axa[_0xe4bc[2589]]+_0xe4bc[192]}else {if(!_0x5d2axa[_0xe4bc[1097]]&&mxUtils[_0xe4bc[1331]](_0x5d2ax2,_0x5d2axa[_0xe4bc[60]],_0x5d2axa[_0xe4bc[2588]],_0x5d2axa[_0xe4bc[131]])&&(0==_0x5d2axa[_0xe4bc[160]]&&0<_0x5d2ax4||1==_0x5d2axa[_0xe4bc[243]]&&0==_0x5d2ax4||1==_0x5d2axa[_0xe4bc[160]]&&1<_0x5d2ax4)){_0x5d2ax5+=_0x5d2axa[_0xe4bc[2589]]+_0xe4bc[192]}}}};return 0<_0x5d2ax5[_0xe4bc[67]]?_0x5d2ax5:null};mxGraph[_0xe4bc[202]][_0xe4bc[2587]]=function(_0x5d2ax2,_0x5d2ax3){return null};mxGraph[_0xe4bc[202]][_0xe4bc[2271]]=function(){return this[_0xe4bc[1617]]};mxGraph[_0xe4bc[202]][_0xe4bc[2590]]=function(_0x5d2ax2){this[_0xe4bc[1617]]=_0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[2205]]=function(_0x5d2ax2){if(null!=_0x5d2ax2&&this[_0xe4bc[2206]]&&!this[_0xe4bc[502]]()[_0xe4bc[250]](_0x5d2ax2[_0xe4bc[246]])){var _0x5d2ax3=this[_0xe4bc[1742]](_0x5d2ax2[_0xe4bc[246]]);if(this[_0xe4bc[2516]](_0x5d2ax2[_0xe4bc[246]],!_0x5d2ax3)){return _0x5d2ax3?this[_0xe4bc[2415]]:this[_0xe4bc[2417]]}};return null};mxGraph[_0xe4bc[202]][_0xe4bc[2454]]=function(_0x5d2ax2){_0x5d2ax2=this[_0xe4bc[251]][_0xe4bc[433]](_0x5d2ax2);if(null!=_0x5d2ax2){if(mxUtils[_0xe4bc[1331]](_0x5d2ax2)){return _0x5d2ax2[_0xe4bc[301]]};if(_0xe4bc[279]== typeof _0x5d2ax2[_0xe4bc[2591]]){return _0x5d2ax2.toString()}};return _0xe4bc[110]};mxGraph[_0xe4bc[202]][_0xe4bc[2183]]=function(_0x5d2ax2){var _0x5d2ax3=_0xe4bc[110];if(this[_0xe4bc[2409]]&&null!=_0x5d2ax2){var _0x5d2ax4=this[_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax2),_0x5d2ax4=null!=_0x5d2ax4?_0x5d2ax4[_0xe4bc[124]]:this[_0xe4bc[1705]](_0x5d2ax2);mxUtils[_0xe4bc[433]](_0x5d2ax4,mxConstants.STYLE_NOLABEL,!1)||(_0x5d2ax3=this[_0xe4bc[2454]](_0x5d2ax2))};return _0x5d2ax3};mxGraph[_0xe4bc[202]][_0xe4bc[2186]]=function(_0x5d2ax2){return this[_0xe4bc[2592]]()};mxGraph[_0xe4bc[202]][_0xe4bc[2592]]=function(){return this[_0xe4bc[2410]]};mxGraph[_0xe4bc[202]][_0xe4bc[2593]]=function(_0x5d2ax2){this[_0xe4bc[2410]]=_0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[2131]]=function(_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax2);_0x5d2ax2=null!=_0x5d2ax3?_0x5d2ax3[_0xe4bc[124]]:this[_0xe4bc[1705]](_0x5d2ax2);return null!=_0x5d2ax2?_0xe4bc[1333]==_0x5d2ax2[mxConstants[_0xe4bc[2594]]]:!1};mxGraph[_0xe4bc[202]][_0xe4bc[2130]]=function(_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax2);_0x5d2ax2=null!=_0x5d2ax3?_0x5d2ax3[_0xe4bc[124]]:this[_0xe4bc[1705]](_0x5d2ax2);return null!=_0x5d2ax2?_0xe4bc[188]==_0x5d2ax2[mxConstants[_0xe4bc[2193]]]:!1};mxGraph[_0xe4bc[202]][_0xe4bc[2595]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){var _0x5d2ax9=null;if(null!=_0x5d2ax2){if(null!=_0x5d2ax2[_0xe4bc[2207]]&&(_0x5d2ax3==_0x5d2ax2[_0xe4bc[2207]][_0xe4bc[252]]||_0x5d2ax3[_0xe4bc[265]]==_0x5d2ax2[_0xe4bc[2207]][_0xe4bc[252]])){_0x5d2ax9=this[_0xe4bc[2425]],_0x5d2ax9=mxResources[_0xe4bc[203]](_0x5d2ax9)||_0x5d2ax9};null==_0x5d2ax9&&null!=_0x5d2ax2[_0xe4bc[1211]]&&_0x5d2ax2[_0xe4bc[1211]][_0xe4bc[209]](function(_0x5d2ax2,_0x5d2ax4){if(null==_0x5d2ax9&&(_0x5d2ax3==_0x5d2ax4[_0xe4bc[252]]||_0x5d2ax3[_0xe4bc[265]]==_0x5d2ax4[_0xe4bc[252]])){_0x5d2ax9=_0x5d2ax4[_0xe4bc[2201]].toString()}});null==_0x5d2ax9&&(_0x5d2ax4=this[_0xe4bc[2432]][_0xe4bc[2596]](_0x5d2ax2[_0xe4bc[246]]),null!=_0x5d2ax4&&_0xe4bc[279]== typeof _0x5d2ax4[_0xe4bc[2597]]&&(_0x5d2ax9=_0x5d2ax4[_0xe4bc[2597]](_0x5d2ax3)));null==_0x5d2ax9&&(_0x5d2ax9=this[_0xe4bc[2598]](_0x5d2ax2[_0xe4bc[246]]))};return _0x5d2ax9};mxGraph[_0xe4bc[202]][_0xe4bc[2598]]=function(_0x5d2ax2){var _0x5d2ax3=null;return _0x5d2ax3=null!=_0x5d2ax2&&null!=_0x5d2ax2[_0xe4bc[2595]]?_0x5d2ax2[_0xe4bc[2595]]():this[_0xe4bc[2454]](_0x5d2ax2)};mxGraph[_0xe4bc[202]][_0xe4bc[2599]]=function(_0x5d2ax2){return null};mxGraph[_0xe4bc[202]][_0xe4bc[1731]]=function(_0x5d2ax2){var _0x5d2ax3= new mxRectangle,_0x5d2ax4=this[_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax2);_0x5d2ax2=null!=_0x5d2ax4?_0x5d2ax4[_0xe4bc[124]]:this[_0xe4bc[1705]](_0x5d2ax2);null!=_0x5d2ax2&&(_0x5d2ax4=parseInt(mxUtils[_0xe4bc[433]](_0x5d2ax2,mxConstants.STYLE_STARTSIZE,mxConstants.DEFAULT_STARTSIZE)),mxUtils[_0xe4bc[433]](_0x5d2ax2,mxConstants.STYLE_HORIZONTAL,!0)?_0x5d2ax3[_0xe4bc[119]]=_0x5d2ax4:_0x5d2ax3[_0xe4bc[117]]=_0x5d2ax4);return _0x5d2ax3};mxGraph[_0xe4bc[202]][_0xe4bc[1202]]=function(_0x5d2ax2){return null!=_0x5d2ax2&&null!=_0x5d2ax2[_0xe4bc[124]]?_0x5d2ax2[_0xe4bc[124]][mxConstants[_0xe4bc[2484]]]:null};mxGraph[_0xe4bc[202]][_0xe4bc[2187]]=function(_0x5d2ax2){return null!=_0x5d2ax2&&null!=_0x5d2ax2[_0xe4bc[124]]?_0x5d2ax2[_0xe4bc[124]][mxConstants[_0xe4bc[2063]]]||mxConstants[_0xe4bc[481]]:null};mxGraph[_0xe4bc[202]][_0xe4bc[2173]]=function(_0x5d2ax2){return null!=_0x5d2ax2&&null!=_0x5d2ax2[_0xe4bc[124]]?_0x5d2ax2[_0xe4bc[124]][mxConstants[_0xe4bc[2600]]]:null};mxGraph[_0xe4bc[202]][_0xe4bc[2174]]=function(_0x5d2ax2){return null!=_0x5d2ax2&&null!=_0x5d2ax2[_0xe4bc[124]]?_0x5d2ax2[_0xe4bc[124]][mxConstants[_0xe4bc[2601]]]:null};mxGraph[_0xe4bc[202]][_0xe4bc[2172]]=function(_0x5d2ax2){return null!=_0x5d2ax2&&null!=_0x5d2ax2[_0xe4bc[124]]?_0x5d2ax2[_0xe4bc[124]][mxConstants[_0xe4bc[2602]]]:null};mxGraph[_0xe4bc[202]][_0xe4bc[2176]]=function(_0x5d2ax2){return null!=_0x5d2ax2&&null!=_0x5d2ax2[_0xe4bc[124]]?_0x5d2ax2[_0xe4bc[124]][mxConstants[_0xe4bc[2603]]]:null};mxGraph[_0xe4bc[202]][_0xe4bc[2476]]=function(){return this[_0xe4bc[467]]};mxGraph[_0xe4bc[202]][_0xe4bc[2604]]=function(_0x5d2ax2){this[_0xe4bc[467]]=_0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[1730]]=function(_0x5d2ax2){if(null!=_0x5d2ax2&&this[_0xe4bc[251]][_0xe4bc[1197]](_0x5d2ax2)!=this[_0xe4bc[251]][_0xe4bc[501]]()){var _0x5d2ax3=this[_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax2),_0x5d2ax3=null!=_0x5d2ax3?_0x5d2ax3[_0xe4bc[124]]:this[_0xe4bc[1705]](_0x5d2ax2);if(null!=_0x5d2ax3&&!this[_0xe4bc[251]][_0xe4bc[250]](_0x5d2ax2)){return _0x5d2ax3[mxConstants[_0xe4bc[2059]]]==mxConstants[_0xe4bc[2605]]}};return !1};mxGraph[_0xe4bc[202]][_0xe4bc[2606]]=function(){return this[_0xe4bc[2389]]};mxGraph[_0xe4bc[202]][_0xe4bc[2607]]=function(_0x5d2ax2){this[_0xe4bc[2389]]=_0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[994]]=function(){return this[_0xe4bc[984]]};mxGraph[_0xe4bc[202]][_0xe4bc[995]]=function(_0x5d2ax2){this[_0xe4bc[984]]=_0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[2608]]=function(){return this[_0xe4bc[2362]]};mxGraph[_0xe4bc[202]][_0xe4bc[2609]]=function(_0x5d2ax2){this[_0xe4bc[2362]]=_0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[2134]]=function(){return this[_0xe4bc[2363]]};mxGraph[_0xe4bc[202]][_0xe4bc[2610]]=function(_0x5d2ax2){this[_0xe4bc[2363]]=_0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[2125]]=function(){return this[_0xe4bc[2364]]};mxGraph[_0xe4bc[202]][_0xe4bc[2611]]=function(_0x5d2ax2){this[_0xe4bc[2364]]=_0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[2612]]=function(_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[251]][_0xe4bc[1721]](_0x5d2ax2);return this[_0xe4bc[2613]]()||null!=_0x5d2ax3&&this[_0xe4bc[251]][_0xe4bc[1193]](_0x5d2ax2)&&_0x5d2ax3[_0xe4bc[1500]]};mxGraph[_0xe4bc[202]][_0xe4bc[2613]]=function(){return this[_0xe4bc[2368]]};mxGraph[_0xe4bc[202]][_0xe4bc[2614]]=function(_0x5d2ax2){this[_0xe4bc[2368]]=_0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[2615]]=function(_0x5d2ax2){return this[_0xe4bc[251]][_0xe4bc[1938]](_0x5d2ax2,mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){return this[_0xe4bc[2616]](_0x5d2ax2)}))};mxGraph[_0xe4bc[202]][_0xe4bc[2616]]=function(_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax2);_0x5d2ax2=null!=_0x5d2ax3?_0x5d2ax3[_0xe4bc[124]]:this[_0xe4bc[1705]](_0x5d2ax2);return this[_0xe4bc[2617]]()&&0!=_0x5d2ax2[mxConstants[_0xe4bc[2618]]]};mxGraph[_0xe4bc[202]][_0xe4bc[2617]]=function(){return this[_0xe4bc[2369]]};mxGraph[_0xe4bc[202]][_0xe4bc[2619]]=function(_0x5d2ax2){this[_0xe4bc[2369]]=_0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[898]]=function(_0x5d2ax2){return this[_0xe4bc[251]][_0xe4bc[1938]](_0x5d2ax2,mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){return this[_0xe4bc[2620]](_0x5d2ax2)}))};mxGraph[_0xe4bc[202]][_0xe4bc[2620]]=function(_0x5d2ax2){return this[_0xe4bc[2366]]};mxGraph[_0xe4bc[202]][_0xe4bc[900]]=function(_0x5d2ax2){return this[_0xe4bc[251]][_0xe4bc[1938]](_0x5d2ax2,mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){return this[_0xe4bc[2621]](_0x5d2ax2)}))};mxGraph[_0xe4bc[202]][_0xe4bc[2621]]=function(_0x5d2ax2){return this[_0xe4bc[2367]]};mxGraph[_0xe4bc[202]][_0xe4bc[2102]]=function(_0x5d2ax2){return this[_0xe4bc[2622]]()};mxGraph[_0xe4bc[202]][_0xe4bc[2622]]=function(){return this[_0xe4bc[2379]]};mxGraph[_0xe4bc[202]][_0xe4bc[2623]]=function(_0x5d2ax2){this[_0xe4bc[2379]]=_0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[2510]]=function(_0x5d2ax2){return this[_0xe4bc[251]][_0xe4bc[1938]](_0x5d2ax2,mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){return this[_0xe4bc[2624]](_0x5d2ax2)}))};mxGraph[_0xe4bc[202]][_0xe4bc[2624]]=function(_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax2);_0x5d2ax2=null!=_0x5d2ax3?_0x5d2ax3[_0xe4bc[124]]:this[_0xe4bc[1705]](_0x5d2ax2);return this[_0xe4bc[2625]]()&&0!=_0x5d2ax2[mxConstants[_0xe4bc[2626]]]};mxGraph[_0xe4bc[202]][_0xe4bc[2625]]=function(){return this[_0xe4bc[2371]]};mxGraph[_0xe4bc[202]][_0xe4bc[2627]]=function(_0x5d2ax2){this[_0xe4bc[2371]]=_0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[2628]]=function(_0x5d2ax2){return !this[_0xe4bc[2612]](_0x5d2ax2)&&(this[_0xe4bc[251]][_0xe4bc[250]](_0x5d2ax2)&&this[_0xe4bc[2373]]||this[_0xe4bc[251]][_0xe4bc[1193]](_0x5d2ax2)&&this[_0xe4bc[2374]])};mxGraph[_0xe4bc[202]][_0xe4bc[2629]]=function(_0x5d2ax2){return this[_0xe4bc[251]][_0xe4bc[1938]](_0x5d2ax2,mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){return this[_0xe4bc[1712]](_0x5d2ax2)}))};mxGraph[_0xe4bc[202]][_0xe4bc[1712]]=function(_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax2),_0x5d2ax3=null!=_0x5d2ax3?_0x5d2ax3[_0xe4bc[124]]:this[_0xe4bc[1705]](_0x5d2ax2);return this[_0xe4bc[2630]]()&&!this[_0xe4bc[2612]](_0x5d2ax2)&&0!=_0x5d2ax3[mxConstants[_0xe4bc[2631]]]};mxGraph[_0xe4bc[202]][_0xe4bc[2630]]=function(){return this[_0xe4bc[2372]]};mxGraph[_0xe4bc[202]][_0xe4bc[2632]]=function(_0x5d2ax2){this[_0xe4bc[2372]]=_0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[997]]=function(){return this[_0xe4bc[991]]};mxGraph[_0xe4bc[202]][_0xe4bc[998]]=function(_0x5d2ax2){this[_0xe4bc[991]]=_0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[2549]]=function(){return this[_0xe4bc[2348]]};mxGraph[_0xe4bc[202]][_0xe4bc[2633]]=function(_0x5d2ax2){this[_0xe4bc[2348]]=_0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[2634]]=function(){return this[_0xe4bc[1020]]};mxGraph[_0xe4bc[202]][_0xe4bc[2635]]=function(_0x5d2ax2){this[_0xe4bc[1020]]=_0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[2636]]=function(){return this[_0xe4bc[2353]]};mxGraph[_0xe4bc[202]][_0xe4bc[2637]]=function(_0x5d2ax2){this[_0xe4bc[2353]]=_0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[2638]]=function(){return this[_0xe4bc[2374]]};mxGraph[_0xe4bc[202]][_0xe4bc[2639]]=function(_0x5d2ax2){this[_0xe4bc[2374]]=_0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[2640]]=function(){return this[_0xe4bc[2373]]};mxGraph[_0xe4bc[202]][_0xe4bc[2641]]=function(_0x5d2ax2){this[_0xe4bc[2373]]=_0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[2642]]=function(){return this[_0xe4bc[2412]]};mxGraph[_0xe4bc[202]][_0xe4bc[2643]]=function(_0x5d2ax2){this[_0xe4bc[2412]]=_0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[2460]]=function(){return this[_0xe4bc[2411]]};mxGraph[_0xe4bc[202]][_0xe4bc[2644]]=function(_0x5d2ax2){this[_0xe4bc[2411]]=_0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[2645]]=function(){return this[_0xe4bc[2404]]};mxGraph[_0xe4bc[202]][_0xe4bc[2646]]=function(_0x5d2ax2){this[_0xe4bc[2404]]=_0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[2647]]=function(){return this[_0xe4bc[2402]]};mxGraph[_0xe4bc[202]][_0xe4bc[2648]]=function(_0x5d2ax2){this[_0xe4bc[2406]]=_0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[2530]]=function(){return this[_0xe4bc[2406]]};mxGraph[_0xe4bc[202]][_0xe4bc[2649]]=function(_0x5d2ax2){this[_0xe4bc[2405]]=_0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[2650]]=function(){return this[_0xe4bc[2405]]};mxGraph[_0xe4bc[202]][_0xe4bc[2651]]=function(_0x5d2ax2){this[_0xe4bc[2407]]=_0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[2527]]=function(){return this[_0xe4bc[2407]]};mxGraph[_0xe4bc[202]][_0xe4bc[2652]]=function(_0x5d2ax2){this[_0xe4bc[2402]]=_0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[2529]]=function(){return this[_0xe4bc[2408]]};mxGraph[_0xe4bc[202]][_0xe4bc[2653]]=function(_0x5d2ax2){this[_0xe4bc[2408]]=_0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[1015]]=function(){return this[_0xe4bc[2375]]};mxGraph[_0xe4bc[202]][_0xe4bc[2654]]=function(_0x5d2ax2){this[_0xe4bc[2375]]=_0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[2655]]=function(){return this[_0xe4bc[2376]]};mxGraph[_0xe4bc[202]][_0xe4bc[2656]]=function(_0x5d2ax2){this[_0xe4bc[2376]]=_0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[2657]]=function(_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax2),_0x5d2ax3=null!=_0x5d2ax3?_0x5d2ax3[_0xe4bc[124]]:this[_0xe4bc[1705]](_0x5d2ax2);return this[_0xe4bc[2658]]()&&!this[_0xe4bc[2612]](_0x5d2ax2)&&0!=_0x5d2ax3[mxConstants[_0xe4bc[2659]]]};mxGraph[_0xe4bc[202]][_0xe4bc[2658]]=function(){return this[_0xe4bc[2377]]};mxGraph[_0xe4bc[202]][_0xe4bc[2660]]=function(_0x5d2ax2){this[_0xe4bc[2377]]=_0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[2661]]=function(_0x5d2ax2,_0x5d2ax3){return !0};mxGraph[_0xe4bc[202]][_0xe4bc[2662]]=function(_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax2),_0x5d2ax3=null!=_0x5d2ax3?_0x5d2ax3[_0xe4bc[124]]:this[_0xe4bc[1705]](_0x5d2ax2);return this[_0xe4bc[2663]]()&&!this[_0xe4bc[2612]](_0x5d2ax2)&&0!=_0x5d2ax3[mxConstants[_0xe4bc[2664]]]};mxGraph[_0xe4bc[202]][_0xe4bc[2663]]=function(){return this[_0xe4bc[2378]]};mxGraph[_0xe4bc[202]][_0xe4bc[2665]]=function(_0x5d2ax2){this[_0xe4bc[2378]]=_0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[2453]]=function(_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax2),_0x5d2ax3=null!=_0x5d2ax3?_0x5d2ax3[_0xe4bc[124]]:this[_0xe4bc[1705]](_0x5d2ax2);return this[_0xe4bc[2666]]()&&!this[_0xe4bc[2612]](_0x5d2ax2)&&0!=_0x5d2ax3[mxConstants[_0xe4bc[2667]]]};mxGraph[_0xe4bc[202]][_0xe4bc[2666]]=function(){return this[_0xe4bc[2370]]};mxGraph[_0xe4bc[202]][_0xe4bc[2668]]=function(_0x5d2ax2){this[_0xe4bc[2370]]=_0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[2551]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){return this[_0xe4bc[2669]]()&&!this[_0xe4bc[2612]](_0x5d2ax2)};mxGraph[_0xe4bc[202]][_0xe4bc[2669]]=function(){return this[_0xe4bc[2380]]};mxGraph[_0xe4bc[202]][_0xe4bc[2670]]=function(_0x5d2ax2){this[_0xe4bc[2380]]=_0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[2671]]=function(_0x5d2ax2){return null==_0x5d2ax2&&this[_0xe4bc[2406]]||null!=_0x5d2ax2&&(!this[_0xe4bc[251]][_0xe4bc[250]](_0x5d2ax2)||this[_0xe4bc[2405]])&&this[_0xe4bc[2565]](_0x5d2ax2)};mxGraph[_0xe4bc[202]][_0xe4bc[2672]]=function(_0x5d2ax2){return this[_0xe4bc[2671]](_0x5d2ax2)};mxGraph[_0xe4bc[202]][_0xe4bc[2582]]=function(_0x5d2ax2,_0x5d2ax3){return this[_0xe4bc[2671]](_0x5d2ax2)&&this[_0xe4bc[2672]](_0x5d2ax3)};mxGraph[_0xe4bc[202]][_0xe4bc[1995]]=function(_0x5d2ax2){this[_0xe4bc[2433]][_0xe4bc[995]](_0x5d2ax2)};mxGraph[_0xe4bc[202]][_0xe4bc[1965]]=function(_0x5d2ax2){return this[_0xe4bc[2433]][_0xe4bc[994]]()};mxGraph[_0xe4bc[202]][_0xe4bc[2673]]=function(_0x5d2ax2){this[_0xe4bc[2276]][_0xe4bc[995]](_0x5d2ax2)};mxGraph[_0xe4bc[202]][_0xe4bc[2674]]=function(_0x5d2ax2){this[_0xe4bc[2316]][_0xe4bc[2431]]=_0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[2203]]=function(_0x5d2ax2){if(null!=this[_0xe4bc[2347]]){var _0x5d2ax3=this[_0xe4bc[2347]][_0xe4bc[2148]]();return null==_0x5d2ax2?null!=_0x5d2ax3:_0x5d2ax2==_0x5d2ax3};return !1};mxGraph[_0xe4bc[202]][_0xe4bc[2455]]=function(_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax2);_0x5d2ax2=null!=_0x5d2ax3?_0x5d2ax3[_0xe4bc[124]]:this[_0xe4bc[1705]](_0x5d2ax2);return this[_0xe4bc[2675]]()||1==_0x5d2ax2[mxConstants[_0xe4bc[2676]]]};mxGraph[_0xe4bc[202]][_0xe4bc[2675]]=function(){return this[_0xe4bc[2381]]};mxGraph[_0xe4bc[202]][_0xe4bc[2677]]=function(_0x5d2ax2){this[_0xe4bc[2381]]=_0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[2507]]=function(_0x5d2ax2){return !this[_0xe4bc[502]]()[_0xe4bc[250]](_0x5d2ax2)&&this[_0xe4bc[2678]]()};mxGraph[_0xe4bc[202]][_0xe4bc[2678]]=function(){return this[_0xe4bc[2392]]};mxGraph[_0xe4bc[202]][_0xe4bc[2679]]=function(_0x5d2ax2){this[_0xe4bc[2392]]=_0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[2506]]=function(){return this[_0xe4bc[2393]]};mxGraph[_0xe4bc[202]][_0xe4bc[2680]]=function(_0x5d2ax2){this[_0xe4bc[2393]]=_0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[2536]]=function(_0x5d2ax2){return this[_0xe4bc[2681]]()&&!this[_0xe4bc[502]]()[_0xe4bc[250]](this[_0xe4bc[502]]()[_0xe4bc[1197]](_0x5d2ax2))};mxGraph[_0xe4bc[202]][_0xe4bc[2681]]=function(){return this[_0xe4bc[2391]]};mxGraph[_0xe4bc[202]][_0xe4bc[2682]]=function(_0x5d2ax2){this[_0xe4bc[2391]]=_0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[2505]]=function(){return this[_0xe4bc[2390]]};mxGraph[_0xe4bc[202]][_0xe4bc[2528]]=function(_0x5d2ax2){this[_0xe4bc[2390]]=_0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[2537]]=function(_0x5d2ax2){return this[_0xe4bc[2683]](_0x5d2ax2)?this[_0xe4bc[2354]]:0};mxGraph[_0xe4bc[202]][_0xe4bc[2683]]=function(_0x5d2ax2){return !1};mxGraph[_0xe4bc[202]][_0xe4bc[2513]]=function(_0x5d2ax2,_0x5d2ax3){return this[_0xe4bc[251]][_0xe4bc[1938]](_0x5d2ax2,mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){return this[_0xe4bc[2516]](_0x5d2ax2,_0x5d2ax3)}))};mxGraph[_0xe4bc[202]][_0xe4bc[2516]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=this[_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax2),_0x5d2ax4=null!=_0x5d2ax4?_0x5d2ax4[_0xe4bc[124]]:this[_0xe4bc[1705]](_0x5d2ax2);return 0<this[_0xe4bc[251]][_0xe4bc[262]](_0x5d2ax2)&&0!=_0x5d2ax4[mxConstants[_0xe4bc[2684]]]};mxGraph[_0xe4bc[202]][_0xe4bc[2685]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){return null!=_0x5d2ax2&&(this[_0xe4bc[2655]]()&&this[_0xe4bc[2686]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4)||!this[_0xe4bc[251]][_0xe4bc[250]](_0x5d2ax2)&&(this[_0xe4bc[1730]](_0x5d2ax2)||0<this[_0xe4bc[251]][_0xe4bc[262]](_0x5d2ax2)&&!this[_0xe4bc[1742]](_0x5d2ax2)))};mxGraph[_0xe4bc[202]][_0xe4bc[2686]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){return this[_0xe4bc[251]][_0xe4bc[250]](_0x5d2ax2)&&null!=_0x5d2ax3&&1==_0x5d2ax3[_0xe4bc[67]]&&this[_0xe4bc[2565]](_0x5d2ax3[0])&&null==this[_0xe4bc[2500]](_0x5d2ax2,this[_0xe4bc[251]][_0xe4bc[1709]](_0x5d2ax2,!0),_0x5d2ax3[0])?(_0x5d2ax4=this[_0xe4bc[251]][_0xe4bc[1709]](_0x5d2ax2,!0),_0x5d2ax2=this[_0xe4bc[251]][_0xe4bc[1709]](_0x5d2ax2,!1),!this[_0xe4bc[251]][_0xe4bc[1720]](_0x5d2ax3[0],_0x5d2ax4)&&!this[_0xe4bc[251]][_0xe4bc[1720]](_0x5d2ax3[0],_0x5d2ax2)):!1};mxGraph[_0xe4bc[202]][_0xe4bc[564]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){if(!this[_0xe4bc[2642]]()){for(var _0x5d2ax5=0;_0x5d2ax5<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax5++){if(this[_0xe4bc[1730]](_0x5d2ax2[_0x5d2ax5])){return null}}};_0x5d2ax5=mxUtils[_0xe4bc[2196]](this[_0xe4bc[526]],mxEvent[_0xe4bc[731]](_0x5d2ax3),mxEvent[_0xe4bc[733]](_0x5d2ax3));_0x5d2ax5[_0xe4bc[235]]-=this[_0xe4bc[1136]];_0x5d2ax5[_0xe4bc[236]]-=this[_0xe4bc[1137]];_0x5d2ax5=this[_0xe4bc[2461]](_0x5d2ax5[_0xe4bc[235]],_0x5d2ax5[_0xe4bc[236]]);if(null==_0x5d2ax4){_0x5d2ax4=_0x5d2ax5}else {if(null!=_0x5d2ax5){for(var _0x5d2ax9=this[_0xe4bc[251]][_0xe4bc[1197]](_0x5d2ax5);null!=_0x5d2ax9&&this[_0xe4bc[1730]](_0x5d2ax9)&&_0x5d2ax9!=_0x5d2ax4;){_0x5d2ax9=this[_0xe4bc[251]][_0xe4bc[1197]](_0x5d2ax9)};_0x5d2ax9==_0x5d2ax4&&(_0x5d2ax4=_0x5d2ax5)}};for(;null!=_0x5d2ax4&&!this[_0xe4bc[2685]](_0x5d2ax4,_0x5d2ax2,_0x5d2ax3)&&!this[_0xe4bc[251]][_0xe4bc[1740]](_0x5d2ax4);){_0x5d2ax4=this[_0xe4bc[251]][_0xe4bc[1197]](_0x5d2ax4)};return !this[_0xe4bc[251]][_0xe4bc[1740]](_0x5d2ax4)&&0>mxUtils[_0xe4bc[2]](_0x5d2ax2,_0x5d2ax4)?_0x5d2ax4:null};mxGraph[_0xe4bc[202]][_0xe4bc[902]]=function(){var _0x5d2ax2=this[_0xe4bc[2355]];null==_0x5d2ax2&&(_0x5d2ax2=this[_0xe4bc[2534]](),null==_0x5d2ax2&&(_0x5d2ax2=this[_0xe4bc[251]][_0xe4bc[501]](),_0x5d2ax2=this[_0xe4bc[251]][_0xe4bc[263]](_0x5d2ax2,0)));return _0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[2687]]=function(_0x5d2ax2){this[_0xe4bc[2355]]=_0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[2179]]=function(_0x5d2ax2){for(;null!=_0x5d2ax2&&!this[_0xe4bc[1730]](_0x5d2ax2);){_0x5d2ax2=this[_0xe4bc[251]][_0xe4bc[1197]](_0x5d2ax2)};return _0x5d2ax2};mxGraph[_0xe4bc[202]][_0xe4bc[2461]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){_0x5d2ax4=_0x5d2ax4||this[_0xe4bc[902]]();if(null!=_0x5d2ax4){for(var _0x5d2ax5=this[_0xe4bc[251]][_0xe4bc[262]](_0x5d2ax4),_0x5d2ax9=0;_0x5d2ax9<_0x5d2ax5;_0x5d2ax9++){var _0x5d2axa=this[_0xe4bc[251]][_0xe4bc[263]](_0x5d2ax4,_0x5d2ax9),_0x5d2ax12=this[_0xe4bc[2461]](_0x5d2ax2,_0x5d2ax3,_0x5d2axa);if(null!=_0x5d2ax12){return _0x5d2ax12};if(this[_0xe4bc[1730]](_0x5d2axa)&&(_0x5d2ax12=this[_0xe4bc[441]][_0xe4bc[248]](_0x5d2axa),this[_0xe4bc[1825]](_0x5d2ax12,_0x5d2ax2,_0x5d2ax3))){return _0x5d2axa}}};return null};mxGraph[_0xe4bc[202]][_0xe4bc[999]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){_0x5d2ax5=null!=_0x5d2ax5?_0x5d2ax5:!0;_0x5d2ax9=null!=_0x5d2ax9?_0x5d2ax9:!0;_0x5d2ax4=null!=_0x5d2ax4?_0x5d2ax4:this[_0xe4bc[902]]();if(null!=_0x5d2ax4){for(var _0x5d2axa=this[_0xe4bc[251]][_0xe4bc[262]](_0x5d2ax4)-1;0<=_0x5d2axa;_0x5d2axa--){var _0x5d2ax12=this[_0xe4bc[251]][_0xe4bc[263]](_0x5d2ax4,_0x5d2axa),_0x5d2ax13=this[_0xe4bc[999]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax12,_0x5d2ax5,_0x5d2ax9);if(null!=_0x5d2ax13){return _0x5d2ax13};if(this[_0xe4bc[1714]](_0x5d2ax12)&&(_0x5d2ax9&&this[_0xe4bc[251]][_0xe4bc[250]](_0x5d2ax12)||_0x5d2ax5&&this[_0xe4bc[251]][_0xe4bc[1193]](_0x5d2ax12))){if(_0x5d2ax13=this[_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax12),this[_0xe4bc[1825]](_0x5d2ax13,_0x5d2ax2,_0x5d2ax3)){return _0x5d2ax12}}}};return null};mxGraph[_0xe4bc[202]][_0xe4bc[1825]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){if(null!=_0x5d2ax2){var _0x5d2ax5=_0x5d2ax2[_0xe4bc[439]];if(null!=_0x5d2ax5){_0x5d2ax2=this[_0xe4bc[2353]]*this[_0xe4bc[2353]];for(var _0x5d2ax9=_0x5d2ax5[0],_0x5d2axa=1;_0x5d2axa<_0x5d2ax5[_0xe4bc[67]];_0x5d2axa++){var _0x5d2ax12=_0x5d2ax5[_0x5d2axa];if(mxUtils[_0xe4bc[440]](_0x5d2ax9[_0xe4bc[235]],_0x5d2ax9[_0xe4bc[236]],_0x5d2ax12[_0xe4bc[235]],_0x5d2ax12[_0xe4bc[236]],_0x5d2ax3,_0x5d2ax4)<=_0x5d2ax2){return !0};_0x5d2ax9=_0x5d2ax12}}else {if(_0x5d2ax9=mxUtils[_0xe4bc[431]](mxUtils[_0xe4bc[433]](_0x5d2ax2[_0xe4bc[124]],mxConstants.STYLE_ROTATION)||0),0!=_0x5d2ax9&&(_0x5d2ax5=Math[_0xe4bc[426]](-_0x5d2ax9),_0x5d2ax9=Math[_0xe4bc[427]](-_0x5d2ax9),_0x5d2axa= new mxPoint(_0x5d2ax2[_0xe4bc[241]](),_0x5d2ax2[_0xe4bc[242]]()),_0x5d2ax9=mxUtils[_0xe4bc[432]]( new mxPoint(_0x5d2ax3,_0x5d2ax4),_0x5d2ax5,_0x5d2ax9,_0x5d2axa),_0x5d2ax3=_0x5d2ax9[_0xe4bc[235]],_0x5d2ax4=_0x5d2ax9[_0xe4bc[236]]),mxUtils[_0xe4bc[442]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4)){return !0}}};return !1};mxGraph[_0xe4bc[202]][_0xe4bc[2688]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){var _0x5d2ax5=this[_0xe4bc[249]]()[_0xe4bc[248]](_0x5d2ax2);_0x5d2ax2=this[_0xe4bc[1731]](_0x5d2ax2);if(null!=_0x5d2ax5){var _0x5d2ax9=this[_0xe4bc[249]]()[_0xe4bc[518]]();_0x5d2ax3-=_0x5d2ax5[_0xe4bc[235]];_0x5d2ax4-=_0x5d2ax5[_0xe4bc[236]];if(0<_0x5d2ax2[_0xe4bc[117]]&&0<_0x5d2ax3&&_0x5d2ax3>_0x5d2ax2[_0xe4bc[117]]*_0x5d2ax9||0<_0x5d2ax2[_0xe4bc[119]]&&0<_0x5d2ax4&&_0x5d2ax4>_0x5d2ax2[_0xe4bc[119]]*_0x5d2ax9){return !0}};return !1};mxGraph[_0xe4bc[202]][_0xe4bc[1728]]=function(_0x5d2ax2){return this[_0xe4bc[1955]](_0x5d2ax2,!0,!1)};mxGraph[_0xe4bc[202]][_0xe4bc[1956]]=function(_0x5d2ax2){return this[_0xe4bc[1955]](_0x5d2ax2,!1,!0)};mxGraph[_0xe4bc[202]][_0xe4bc[1955]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){_0x5d2ax2=null!=_0x5d2ax2?_0x5d2ax2:this[_0xe4bc[902]]();_0x5d2ax2=this[_0xe4bc[251]][_0xe4bc[1955]](_0x5d2ax2,null!=_0x5d2ax3?_0x5d2ax3:!1,null!=_0x5d2ax4?_0x5d2ax4:!1);_0x5d2ax3=[];for(_0x5d2ax4=0;_0x5d2ax4<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax4++){this[_0xe4bc[1714]](_0x5d2ax2[_0x5d2ax4])&&_0x5d2ax3[_0xe4bc[207]](_0x5d2ax2[_0x5d2ax4])};return _0x5d2ax3};mxGraph[_0xe4bc[202]][_0xe4bc[1756]]=function(_0x5d2ax2,_0x5d2ax3){return this[_0xe4bc[264]](_0x5d2ax2,_0x5d2ax3,!0,!0,!1)};mxGraph[_0xe4bc[202]][_0xe4bc[1867]]=function(_0x5d2ax2,_0x5d2ax3){return this[_0xe4bc[264]](_0x5d2ax2,_0x5d2ax3,!0,!1,!1)};mxGraph[_0xe4bc[202]][_0xe4bc[1963]]=function(_0x5d2ax2,_0x5d2ax3){return this[_0xe4bc[264]](_0x5d2ax2,_0x5d2ax3,!1,!0,!1)};mxGraph[_0xe4bc[202]][_0xe4bc[264]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa){_0x5d2ax4=null!=_0x5d2ax4?_0x5d2ax4:!0;_0x5d2ax5=null!=_0x5d2ax5?_0x5d2ax5:!0;_0x5d2ax9=null!=_0x5d2ax9?_0x5d2ax9:!0;_0x5d2axa=null!=_0x5d2axa?_0x5d2axa:!1;for(var _0x5d2ax12=[],_0x5d2ax13=this[_0xe4bc[1742]](_0x5d2ax2),_0x5d2ax14=this[_0xe4bc[251]][_0xe4bc[262]](_0x5d2ax2),_0x5d2ax15=0;_0x5d2ax15<_0x5d2ax14;_0x5d2ax15++){var _0x5d2ax16=this[_0xe4bc[251]][_0xe4bc[263]](_0x5d2ax2,_0x5d2ax15);if(_0x5d2ax13||!this[_0xe4bc[1714]](_0x5d2ax16)){_0x5d2ax12=_0x5d2ax12[_0xe4bc[1919]](this[_0xe4bc[251]][_0xe4bc[264]](_0x5d2ax16,_0x5d2ax4,_0x5d2ax5))}};_0x5d2ax12=_0x5d2ax12[_0xe4bc[1919]](this[_0xe4bc[251]][_0xe4bc[264]](_0x5d2ax2,_0x5d2ax4,_0x5d2ax5));_0x5d2ax13=[];for(_0x5d2ax15=0;_0x5d2ax15<_0x5d2ax12[_0xe4bc[67]];_0x5d2ax15++){_0x5d2ax16=this[_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax12[_0x5d2ax15]),_0x5d2ax14=null!=_0x5d2ax16?_0x5d2ax16[_0xe4bc[1710]](!0):this[_0xe4bc[441]][_0xe4bc[1710]](_0x5d2ax12[_0x5d2ax15],!0),_0x5d2ax16=null!=_0x5d2ax16?_0x5d2ax16[_0xe4bc[1710]](!1):this[_0xe4bc[441]][_0xe4bc[1710]](_0x5d2ax12[_0x5d2ax15],!1),(_0x5d2ax9&&_0x5d2ax14==_0x5d2ax16||_0x5d2ax14!=_0x5d2ax16&&(_0x5d2ax4&&_0x5d2ax16==_0x5d2ax2&&(null==_0x5d2ax3||this[_0xe4bc[1920]](_0x5d2ax14,_0x5d2ax3,_0x5d2axa))||_0x5d2ax5&&_0x5d2ax14==_0x5d2ax2&&(null==_0x5d2ax3||this[_0xe4bc[1920]](_0x5d2ax16,_0x5d2ax3,_0x5d2axa))))&&_0x5d2ax13[_0xe4bc[207]](_0x5d2ax12[_0x5d2ax15])};return _0x5d2ax13};mxGraph[_0xe4bc[202]][_0xe4bc[1920]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){return _0x5d2ax4?this[_0xe4bc[251]][_0xe4bc[1720]](_0x5d2ax3,_0x5d2ax2):this[_0xe4bc[251]][_0xe4bc[1197]](_0x5d2ax2)==_0x5d2ax3};mxGraph[_0xe4bc[202]][_0xe4bc[1808]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){_0x5d2ax4=null!=_0x5d2ax4?_0x5d2ax4:!0;_0x5d2ax5=null!=_0x5d2ax5?_0x5d2ax5:!0;var _0x5d2ax9=[],_0x5d2axa={};if(null!=_0x5d2ax2){for(var _0x5d2ax12=0;_0x5d2ax12<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax12++){var _0x5d2ax13=this[_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax2[_0x5d2ax12]),_0x5d2ax14=null!=_0x5d2ax13?_0x5d2ax13[_0xe4bc[1710]](!0):this[_0xe4bc[441]][_0xe4bc[1710]](_0x5d2ax2[_0x5d2ax12],!0),_0x5d2ax13=null!=_0x5d2ax13?_0x5d2ax13[_0xe4bc[1710]](!1):this[_0xe4bc[441]][_0xe4bc[1710]](_0x5d2ax2[_0x5d2ax12],!1);if(_0x5d2ax14==_0x5d2ax3&&null!=_0x5d2ax13&&_0x5d2ax13!=_0x5d2ax3&&_0x5d2ax5){var _0x5d2ax15=mxCellPath[_0xe4bc[385]](_0x5d2ax13);null==_0x5d2axa[_0x5d2ax15]&&(_0x5d2axa[_0x5d2ax15]=_0x5d2ax13,_0x5d2ax9[_0xe4bc[207]](_0x5d2ax13))}else {_0x5d2ax13==_0x5d2ax3&&(null!=_0x5d2ax14&&_0x5d2ax14!=_0x5d2ax3&&_0x5d2ax4)&&(_0x5d2ax15=mxCellPath[_0xe4bc[385]](_0x5d2ax14),null==_0x5d2axa[_0x5d2ax15]&&(_0x5d2axa[_0x5d2ax15]=_0x5d2ax14,_0x5d2ax9[_0xe4bc[207]](_0x5d2ax14)))}}};return _0x5d2ax9};mxGraph[_0xe4bc[202]][_0xe4bc[1781]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){_0x5d2ax4=null!=_0x5d2ax4?_0x5d2ax4:!1;for(var _0x5d2ax5=this[_0xe4bc[264]](_0x5d2ax2),_0x5d2ax9=[],_0x5d2axa=0;_0x5d2axa<_0x5d2ax5[_0xe4bc[67]];_0x5d2axa++){var _0x5d2ax12=this[_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax5[_0x5d2axa]),_0x5d2ax13=null!=_0x5d2ax12?_0x5d2ax12[_0xe4bc[1710]](!0):this[_0xe4bc[441]][_0xe4bc[1710]](_0x5d2ax5[_0x5d2axa],!0),_0x5d2ax12=null!=_0x5d2ax12?_0x5d2ax12[_0xe4bc[1710]](!1):this[_0xe4bc[441]][_0xe4bc[1710]](_0x5d2ax5[_0x5d2axa],!1);(_0x5d2ax13==_0x5d2ax2&&_0x5d2ax12==_0x5d2ax3||!_0x5d2ax4&&_0x5d2ax13==_0x5d2ax3&&_0x5d2ax12==_0x5d2ax2)&&_0x5d2ax9[_0xe4bc[207]](_0x5d2ax5[_0x5d2axa])};return _0x5d2ax9};mxGraph[_0xe4bc[202]][_0xe4bc[2689]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=mxUtils[_0xe4bc[2196]](this[_0xe4bc[526]],mxEvent[_0xe4bc[731]](_0x5d2ax2),mxEvent[_0xe4bc[733]](_0x5d2ax2)),_0x5d2ax5=this[_0xe4bc[441]][_0xe4bc[255]],_0x5d2ax9=this[_0xe4bc[441]][_0xe4bc[513]],_0x5d2axa=!1!=_0x5d2ax3?this[_0xe4bc[1020]]/2:0;_0x5d2ax4[_0xe4bc[235]]=this[_0xe4bc[1021]](_0x5d2ax4[_0xe4bc[235]]/_0x5d2ax5-_0x5d2ax9[_0xe4bc[235]]-_0x5d2axa);_0x5d2ax4[_0xe4bc[236]]=this[_0xe4bc[1021]](_0x5d2ax4[_0xe4bc[236]]/_0x5d2ax5-_0x5d2ax9[_0xe4bc[236]]-_0x5d2axa);return _0x5d2ax4};mxGraph[_0xe4bc[202]][_0xe4bc[2690]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa){_0x5d2axa=null!=_0x5d2axa?_0x5d2axa:[];if(0<_0x5d2ax4||0<_0x5d2ax5){var _0x5d2ax12=_0x5d2ax2+_0x5d2ax4,_0x5d2ax13=_0x5d2ax3+_0x5d2ax5;_0x5d2ax9=_0x5d2ax9||this[_0xe4bc[902]]();if(null!=_0x5d2ax9){for(var _0x5d2ax14=this[_0xe4bc[251]][_0xe4bc[262]](_0x5d2ax9),_0x5d2ax15=0;_0x5d2ax15<_0x5d2ax14;_0x5d2ax15++){var _0x5d2ax16=this[_0xe4bc[251]][_0xe4bc[263]](_0x5d2ax9,_0x5d2ax15),_0x5d2ax17=this[_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax16);if(this[_0xe4bc[1714]](_0x5d2ax16)&&null!=_0x5d2ax17){var _0x5d2ax18=_0x5d2ax17,_0x5d2ax17=mxUtils[_0xe4bc[433]](_0x5d2ax17[_0xe4bc[124]],mxConstants.STYLE_ROTATION)||0;0!=_0x5d2ax17&&(_0x5d2ax18=mxUtils[_0xe4bc[1613]](_0x5d2ax18,_0x5d2ax17));_0x5d2ax18[_0xe4bc[235]]>=_0x5d2ax2&&_0x5d2ax18[_0xe4bc[236]]+_0x5d2ax18[_0xe4bc[119]]<=_0x5d2ax13&&_0x5d2ax18[_0xe4bc[236]]>=_0x5d2ax3&&_0x5d2ax18[_0xe4bc[235]]+_0x5d2ax18[_0xe4bc[117]]<=_0x5d2ax12?_0x5d2axa[_0xe4bc[207]](_0x5d2ax16):this[_0xe4bc[2690]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax16,_0x5d2axa)}}}};return _0x5d2axa};mxGraph[_0xe4bc[202]][_0xe4bc[2691]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){var _0x5d2axa=[];if(_0x5d2ax5||_0x5d2ax9){if(null==_0x5d2ax4&&(_0x5d2ax4=this[_0xe4bc[902]]()),null!=_0x5d2ax4){for(var _0x5d2ax12=this[_0xe4bc[251]][_0xe4bc[262]](_0x5d2ax4),_0x5d2ax13=0;_0x5d2ax13<_0x5d2ax12;_0x5d2ax13++){var _0x5d2ax14=this[_0xe4bc[251]][_0xe4bc[263]](_0x5d2ax4,_0x5d2ax13),_0x5d2ax15=this[_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax14);this[_0xe4bc[1714]](_0x5d2ax14)&&null!=_0x5d2ax15&&(!_0x5d2ax5||_0x5d2ax15[_0xe4bc[235]]>=_0x5d2ax2)&&(!_0x5d2ax9||_0x5d2ax15[_0xe4bc[236]]>=_0x5d2ax3)&&_0x5d2axa[_0xe4bc[207]](_0x5d2ax14)}}};return _0x5d2axa};mxGraph[_0xe4bc[202]][_0xe4bc[1757]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){_0x5d2ax3=null!=_0x5d2ax3?_0x5d2ax3:!1;_0x5d2ax4=null!=_0x5d2ax4?_0x5d2ax4:!1;var _0x5d2ax5=[];if(null!=_0x5d2ax2){for(var _0x5d2ax9=this[_0xe4bc[502]](),_0x5d2axa=_0x5d2ax9[_0xe4bc[262]](_0x5d2ax2),_0x5d2ax12=null,_0x5d2ax13=0,_0x5d2ax14=0;_0x5d2ax14<_0x5d2axa;_0x5d2ax14++){var _0x5d2ax15=_0x5d2ax9[_0xe4bc[263]](_0x5d2ax2,_0x5d2ax14);if(this[_0xe4bc[251]][_0xe4bc[1193]](_0x5d2ax15)&&this[_0xe4bc[1714]](_0x5d2ax15)){for(var _0x5d2ax16=this[_0xe4bc[1756]](_0x5d2ax15,_0x5d2ax3?_0x5d2ax2:null),_0x5d2ax17=0,_0x5d2ax18=0,_0x5d2ax19=0;_0x5d2ax19<_0x5d2ax16[_0xe4bc[67]];_0x5d2ax19++){this[_0xe4bc[441]][_0xe4bc[1710]](_0x5d2ax16[_0x5d2ax19],!0)==_0x5d2ax15?_0x5d2ax17++:_0x5d2ax18++};(_0x5d2ax4&&0==_0x5d2ax17&&0<_0x5d2ax18||!_0x5d2ax4&&0==_0x5d2ax18&&0<_0x5d2ax17)&&_0x5d2ax5[_0xe4bc[207]](_0x5d2ax15);_0x5d2ax16=_0x5d2ax4?_0x5d2ax18-_0x5d2ax17:_0x5d2ax17-_0x5d2ax18;_0x5d2ax16>_0x5d2ax13&&(_0x5d2ax13=_0x5d2ax16,_0x5d2ax12=_0x5d2ax15)}};0==_0x5d2ax5[_0xe4bc[67]]&&null!=_0x5d2ax12&&_0x5d2ax5[_0xe4bc[207]](_0x5d2ax12)};return _0x5d2ax5};mxGraph[_0xe4bc[202]][_0xe4bc[1706]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){if(null!=_0x5d2ax4&&null!=_0x5d2ax2){_0x5d2ax3=null!=_0x5d2ax3?_0x5d2ax3:!0;_0x5d2ax9=_0x5d2ax9||[];var _0x5d2axa=mxCellPath[_0xe4bc[385]](_0x5d2ax2);if(null==_0x5d2ax9[_0x5d2axa]&&(_0x5d2ax9[_0x5d2axa]=_0x5d2ax2,_0x5d2ax5=_0x5d2ax4(_0x5d2ax2,_0x5d2ax5),null==_0x5d2ax5||_0x5d2ax5)){if(_0x5d2ax5=this[_0xe4bc[251]][_0xe4bc[1707]](_0x5d2ax2),0<_0x5d2ax5){for(_0x5d2axa=0;_0x5d2axa<_0x5d2ax5;_0x5d2axa++){var _0x5d2ax12=this[_0xe4bc[251]][_0xe4bc[1708]](_0x5d2ax2,_0x5d2axa),_0x5d2ax13=this[_0xe4bc[251]][_0xe4bc[1709]](_0x5d2ax12,!0)==_0x5d2ax2;if(!_0x5d2ax3||_0x5d2ax13){_0x5d2ax13=this[_0xe4bc[251]][_0xe4bc[1709]](_0x5d2ax12,!_0x5d2ax13),this[_0xe4bc[1706]](_0x5d2ax13,_0x5d2ax3,_0x5d2ax4,_0x5d2ax12,_0x5d2ax9)}}}}}};mxGraph[_0xe4bc[202]][_0xe4bc[2692]]=function(_0x5d2ax2){return this[_0xe4bc[2435]]()[_0xe4bc[2097]](_0x5d2ax2)};mxGraph[_0xe4bc[202]][_0xe4bc[2693]]=function(){return this[_0xe4bc[2435]]()[_0xe4bc[1107]]()};mxGraph[_0xe4bc[202]][_0xe4bc[2440]]=function(){return this[_0xe4bc[2435]]()[_0xe4bc[200]]()};mxGraph[_0xe4bc[202]][_0xe4bc[2694]]=function(){return this[_0xe4bc[2435]]()[_0xe4bc[895]][_0xe4bc[67]]};mxGraph[_0xe4bc[202]][_0xe4bc[2452]]=function(){return this[_0xe4bc[2435]]()[_0xe4bc[895]][0]};mxGraph[_0xe4bc[202]][_0xe4bc[897]]=function(){return this[_0xe4bc[2435]]()[_0xe4bc[895]][_0xe4bc[1853]]()};mxGraph[_0xe4bc[202]][_0xe4bc[2450]]=function(_0x5d2ax2){this[_0xe4bc[2435]]()[_0xe4bc[2099]](_0x5d2ax2)};mxGraph[_0xe4bc[202]][_0xe4bc[904]]=function(_0x5d2ax2){this[_0xe4bc[2435]]()[_0xe4bc[2100]](_0x5d2ax2)};mxGraph[_0xe4bc[202]][_0xe4bc[2695]]=function(_0x5d2ax2){this[_0xe4bc[2435]]()[_0xe4bc[2103]](_0x5d2ax2)};mxGraph[_0xe4bc[202]][_0xe4bc[2696]]=function(_0x5d2ax2){this[_0xe4bc[2435]]()[_0xe4bc[832]](_0x5d2ax2)};mxGraph[_0xe4bc[202]][_0xe4bc[2697]]=function(_0x5d2ax2){this[_0xe4bc[2435]]()[_0xe4bc[2104]](_0x5d2ax2)};mxGraph[_0xe4bc[202]][_0xe4bc[2439]]=function(_0x5d2ax2){this[_0xe4bc[2435]]()[_0xe4bc[842]](_0x5d2ax2)};mxGraph[_0xe4bc[202]][_0xe4bc[2698]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=this[_0xe4bc[2690]](_0x5d2ax2[_0xe4bc[235]],_0x5d2ax2[_0xe4bc[236]],_0x5d2ax2[_0xe4bc[117]],_0x5d2ax2[_0xe4bc[119]]);this[_0xe4bc[2699]](_0x5d2ax4,_0x5d2ax3);return _0x5d2ax4};mxGraph[_0xe4bc[202]][_0xe4bc[2700]]=function(){this[_0xe4bc[2701]](!0)};mxGraph[_0xe4bc[202]][_0xe4bc[2702]]=function(){this[_0xe4bc[2701]]()};mxGraph[_0xe4bc[202]][_0xe4bc[2703]]=function(){this[_0xe4bc[2701]](!1,!0)};mxGraph[_0xe4bc[202]][_0xe4bc[2704]]=function(){this[_0xe4bc[2701]](!1,!1,!0)};mxGraph[_0xe4bc[202]][_0xe4bc[2701]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){var _0x5d2ax5=this[_0xe4bc[2105]],_0x5d2ax9=0<_0x5d2ax5[_0xe4bc[895]][_0xe4bc[67]]?_0x5d2ax5[_0xe4bc[895]][0]:null;1<_0x5d2ax5[_0xe4bc[895]][_0xe4bc[67]]&&_0x5d2ax5[_0xe4bc[200]]();var _0x5d2ax5=null!=_0x5d2ax9?this[_0xe4bc[251]][_0xe4bc[1197]](_0x5d2ax9):this[_0xe4bc[902]](),_0x5d2axa=this[_0xe4bc[251]][_0xe4bc[262]](_0x5d2ax5);null==_0x5d2ax9&&0<_0x5d2axa?(_0x5d2ax2=this[_0xe4bc[251]][_0xe4bc[263]](_0x5d2ax5,0),this[_0xe4bc[2450]](_0x5d2ax2)):(null==_0x5d2ax9||_0x5d2ax3)&&null!=this[_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax5)&&null!=this[_0xe4bc[251]][_0xe4bc[1721]](_0x5d2ax5)?this[_0xe4bc[2534]]()!=_0x5d2ax5&&this[_0xe4bc[2450]](_0x5d2ax5):null!=_0x5d2ax9&&_0x5d2ax4?0<this[_0xe4bc[251]][_0xe4bc[262]](_0x5d2ax9)&&(_0x5d2ax2=this[_0xe4bc[251]][_0xe4bc[263]](_0x5d2ax9,0),this[_0xe4bc[2450]](_0x5d2ax2)):0<_0x5d2axa&&(_0x5d2ax3=_0x5d2ax5[_0xe4bc[1738]](_0x5d2ax9),_0x5d2ax2?(_0x5d2ax3++,_0x5d2ax2=this[_0xe4bc[251]][_0xe4bc[263]](_0x5d2ax5,_0x5d2ax3%_0x5d2axa)):(_0x5d2ax3--,_0x5d2ax2=this[_0xe4bc[251]][_0xe4bc[263]](_0x5d2ax5,0>_0x5d2ax3?_0x5d2axa-1:_0x5d2ax3)),this[_0xe4bc[2450]](_0x5d2ax2))};mxGraph[_0xe4bc[202]][_0xe4bc[2705]]=function(_0x5d2ax2){_0x5d2ax2=_0x5d2ax2||this[_0xe4bc[902]]();_0x5d2ax2=this[_0xe4bc[251]][_0xe4bc[1953]](_0x5d2ax2);null!=_0x5d2ax2&&this[_0xe4bc[904]](_0x5d2ax2)};mxGraph[_0xe4bc[202]][_0xe4bc[2706]]=function(_0x5d2ax2){this[_0xe4bc[2707]](!0,!1,_0x5d2ax2)};mxGraph[_0xe4bc[202]][_0xe4bc[2708]]=function(_0x5d2ax2){this[_0xe4bc[2707]](!1,!0,_0x5d2ax2)};mxGraph[_0xe4bc[202]][_0xe4bc[2707]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){_0x5d2ax4=_0x5d2ax4||this[_0xe4bc[902]]();var _0x5d2ax5=mxUtils[_0xe4bc[885]](this,function(_0x5d2ax4){return null!=this[_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax4)&&0==this[_0xe4bc[251]][_0xe4bc[262]](_0x5d2ax4)&&(this[_0xe4bc[251]][_0xe4bc[1193]](_0x5d2ax4)&&_0x5d2ax2||this[_0xe4bc[251]][_0xe4bc[250]](_0x5d2ax4)&&_0x5d2ax3)});_0x5d2ax4=this[_0xe4bc[251]][_0xe4bc[1921]](_0x5d2ax5,_0x5d2ax4);this[_0xe4bc[904]](_0x5d2ax4)};mxGraph[_0xe4bc[202]][_0xe4bc[2459]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=this[_0xe4bc[2692]](_0x5d2ax2);this[_0xe4bc[2462]](_0x5d2ax3)?_0x5d2ax4?this[_0xe4bc[2697]](_0x5d2ax2):this[_0xe4bc[2695]](_0x5d2ax2):(!_0x5d2ax4||1!=this[_0xe4bc[2694]]())&&this[_0xe4bc[2450]](_0x5d2ax2)};mxGraph[_0xe4bc[202]][_0xe4bc[2699]]=function(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[2462]](_0x5d2ax3)?this[_0xe4bc[2696]](_0x5d2ax2):this[_0xe4bc[904]](_0x5d2ax2)};mxGraph[_0xe4bc[202]][_0xe4bc[2709]]=function(_0x5d2ax2){var _0x5d2ax3=null;null!=_0x5d2ax2&&(this[_0xe4bc[251]][_0xe4bc[250]](_0x5d2ax2[_0xe4bc[246]])?(_0x5d2ax3=this[_0xe4bc[441]][_0xe4bc[2291]](_0x5d2ax2),_0x5d2ax3=this[_0xe4bc[2573]](_0x5d2ax2)||_0x5d2ax3==mxEdgeStyle[_0xe4bc[2568]]||_0x5d2ax3==mxEdgeStyle[_0xe4bc[2569]]||_0x5d2ax3==mxEdgeStyle[_0xe4bc[2570]]? new mxElbowEdgeHandler(_0x5d2ax2):_0x5d2ax3==mxEdgeStyle[_0xe4bc[2567]]||_0x5d2ax3==mxEdgeStyle[_0xe4bc[2572]]? new mxEdgeSegmentHandler(_0x5d2ax2): new mxEdgeHandler(_0x5d2ax2)):_0x5d2ax3= new mxVertexHandler(_0x5d2ax2));return _0x5d2ax3};mxGraph[_0xe4bc[202]][_0xe4bc[1133]]=function(_0x5d2ax2){null==this[_0xe4bc[2329]]&&(this[_0xe4bc[2329]]=[]);this[_0xe4bc[2329]][_0xe4bc[207]](_0x5d2ax2)};mxGraph[_0xe4bc[202]][_0xe4bc[1148]]=function(_0x5d2ax2){if(null!=this[_0xe4bc[2329]]){for(var _0x5d2ax3=0;_0x5d2ax3<this[_0xe4bc[2329]][_0xe4bc[67]];_0x5d2ax3++){if(this[_0xe4bc[2329]][_0x5d2ax3]==_0x5d2ax2){this[_0xe4bc[2329]][_0xe4bc[300]](_0x5d2ax3,1);break}}}};mxGraph[_0xe4bc[202]][_0xe4bc[2710]]=function(_0x5d2ax2){if(null==_0x5d2ax2[_0xe4bc[725]]||null==_0x5d2ax2[_0xe4bc[726]]){var _0x5d2ax3=mxUtils[_0xe4bc[2196]](this[_0xe4bc[526]],_0x5d2ax2[_0xe4bc[730]](),_0x5d2ax2[_0xe4bc[732]]());_0x5d2ax2[_0xe4bc[725]]=_0x5d2ax3[_0xe4bc[235]]-this[_0xe4bc[1136]];_0x5d2ax2[_0xe4bc[726]]=_0x5d2ax3[_0xe4bc[236]]-this[_0xe4bc[1137]]}};mxGraph[_0xe4bc[202]][_0xe4bc[758]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){null==_0x5d2ax4&&(_0x5d2ax4=this);this[_0xe4bc[2710]](_0x5d2ax3);_0x5d2ax2==mxEvent[_0xe4bc[2711]]&&(this[_0xe4bc[1009]]= !0);if(mxClient[_0xe4bc[754]]&&this[_0xe4bc[2349]]&&_0x5d2ax2==mxEvent[_0xe4bc[2711]]){var _0x5d2ax5=( new Date)[_0xe4bc[178]]();_0x5d2ax5-this[_0xe4bc[2213]]<this[_0xe4bc[2350]]&&Math[_0xe4bc[425]](this[_0xe4bc[2712]]-_0x5d2ax3[_0xe4bc[730]]())<this[_0xe4bc[2351]]&&Math[_0xe4bc[425]](this[_0xe4bc[2352]]-_0x5d2ax3[_0xe4bc[732]]())<this[_0xe4bc[2351]]?(this[_0xe4bc[2213]]=0,this[_0xe4bc[761]](_0x5d2ax3[_0xe4bc[727]](),_0x5d2ax3[_0xe4bc[736]]()),_0x5d2ax3[_0xe4bc[727]]()[_0xe4bc[786]]= !0):(this[_0xe4bc[2712]]=_0x5d2ax3[_0xe4bc[730]](),this[_0xe4bc[2352]]=_0x5d2ax3[_0xe4bc[732]](),this[_0xe4bc[2213]]=_0x5d2ax5)};_0x5d2ax5=2!=_0x5d2ax3[_0xe4bc[727]]()[_0xe4bc[764]];if(mxClient[_0xe4bc[80]]&&_0xe4bc[462]==document[_0xe4bc[135]]){if(null!=this[_0xe4bc[2713]]&&Math[_0xe4bc[425]](this[_0xe4bc[2713]]-_0x5d2ax3[_0xe4bc[730]]())>this[_0xe4bc[2351]]||null!=this[_0xe4bc[2714]]&&Math[_0xe4bc[425]](this[_0xe4bc[2714]]-_0x5d2ax3[_0xe4bc[732]]())>this[_0xe4bc[2351]]){_0x5d2ax5= !0};_0x5d2ax2==mxEvent[_0xe4bc[2715]]&&(this[_0xe4bc[2713]]=_0x5d2ax3[_0xe4bc[730]](),this[_0xe4bc[2714]]=_0x5d2ax3[_0xe4bc[732]]())};if((_0x5d2ax2!=mxEvent[_0xe4bc[2715]]||this[_0xe4bc[1009]])&&_0x5d2ax5){if(_0x5d2ax2==mxEvent[_0xe4bc[2715]]&&(this[_0xe4bc[1009]]= !1),!this[_0xe4bc[2203]]()&&(mxClient[_0xe4bc[71]]||mxClient[_0xe4bc[75]]||mxClient[_0xe4bc[76]]||mxClient[_0xe4bc[80]]&&mxClient[_0xe4bc[48]]||_0x5d2ax3[_0xe4bc[727]]()[_0xe4bc[772]]!=this[_0xe4bc[526]])){_0x5d2ax2==mxEvent[_0xe4bc[2716]]&&(this[_0xe4bc[1009]]&&this[_0xe4bc[1012]])&&this[_0xe4bc[1014]](_0x5d2ax3[_0xe4bc[734]](),_0x5d2ax3[_0xe4bc[735]](),this[_0xe4bc[1013]]);if(null!=this[_0xe4bc[2329]]){_0x5d2ax4=[_0x5d2ax4,_0x5d2ax3];_0x5d2ax3[_0xe4bc[727]]()[_0xe4bc[739]]= !0;for(_0x5d2ax5=0;_0x5d2ax5<this[_0xe4bc[2329]][_0xe4bc[67]];_0x5d2ax5++){var _0x5d2ax9=this[_0xe4bc[2329]][_0x5d2ax5];_0x5d2ax2==mxEvent[_0xe4bc[2711]]?_0x5d2ax9[_0xe4bc[787]][_0xe4bc[183]](_0x5d2ax9,_0x5d2ax4):_0x5d2ax2==mxEvent[_0xe4bc[2716]]?_0x5d2ax9[_0xe4bc[788]][_0xe4bc[183]](_0x5d2ax9,_0x5d2ax4):_0x5d2ax2==mxEvent[_0xe4bc[2715]]&&_0x5d2ax9[_0xe4bc[789]][_0xe4bc[183]](_0x5d2ax9,_0x5d2ax4)}};_0x5d2ax2==mxEvent[_0xe4bc[2715]]&&this[_0xe4bc[173]](_0x5d2ax3)}}else {_0x5d2ax2==mxEvent[_0xe4bc[2715]]&&(this[_0xe4bc[1009]]= !1)}};mxGraph[_0xe4bc[202]][_0xe4bc[515]]=function(){this[_0xe4bc[2717]]||(this[_0xe4bc[2717]]= !0,null!=this[_0xe4bc[2276]]&&this[_0xe4bc[2276]][_0xe4bc[515]](),null!=this[_0xe4bc[2432]]&&this[_0xe4bc[2432]][_0xe4bc[515]](),null!=this[_0xe4bc[2316]]&&this[_0xe4bc[2316]][_0xe4bc[515]](),null!=this[_0xe4bc[2433]]&&this[_0xe4bc[2433]][_0xe4bc[515]](),null!=this[_0xe4bc[1011]]&&this[_0xe4bc[1011]][_0xe4bc[515]](),null!=this[_0xe4bc[2347]]&&this[_0xe4bc[2347]][_0xe4bc[515]](),null!=this[_0xe4bc[441]]&&this[_0xe4bc[441]][_0xe4bc[515]](),null!=this[_0xe4bc[251]]&&null!=this[_0xe4bc[2343]]&&(this[_0xe4bc[251]][_0xe4bc[745]](this[_0xe4bc[2343]]),this[_0xe4bc[2343]]=null),this[_0xe4bc[526]]=null)};function mxCellOverlay(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa){this[_0xe4bc[618]]=_0x5d2ax2;this[_0xe4bc[2718]]=_0x5d2ax3;this[_0xe4bc[611]]=null!=_0x5d2ax4?_0x5d2ax4:this[_0xe4bc[611]];this[_0xe4bc[123]]=null!=_0x5d2ax5?_0x5d2ax5:this[_0xe4bc[123]];this[_0xe4bc[1368]]=null!=_0x5d2ax9?_0x5d2ax9: new mxPoint;this[_0xe4bc[270]]=null!=_0x5d2axa?_0x5d2axa:_0xe4bc[2719]}mxCellOverlay[_0xe4bc[202]]= new mxEventSource;mxCellOverlay[_0xe4bc[202]][_0xe4bc[196]]=mxCellOverlay;mxCellOverlay[_0xe4bc[202]][_0xe4bc[618]]=null;mxCellOverlay[_0xe4bc[202]][_0xe4bc[2718]]=null;mxCellOverlay[_0xe4bc[202]][_0xe4bc[611]]=mxConstants[_0xe4bc[480]];mxCellOverlay[_0xe4bc[202]][_0xe4bc[123]]=mxConstants[_0xe4bc[482]];mxCellOverlay[_0xe4bc[202]][_0xe4bc[1368]]=null;mxCellOverlay[_0xe4bc[202]][_0xe4bc[270]]=null;mxCellOverlay[_0xe4bc[202]][_0xe4bc[2354]]=0.5;mxCellOverlay[_0xe4bc[202]][_0xe4bc[1799]]=function(_0x5d2ax2){var _0x5d2ax3=_0x5d2ax2[_0xe4bc[441]][_0xe4bc[1179]][_0xe4bc[502]]()[_0xe4bc[250]](_0x5d2ax2[_0xe4bc[246]]),_0x5d2ax4=_0x5d2ax2[_0xe4bc[441]][_0xe4bc[255]],_0x5d2ax5=null,_0x5d2ax9=this[_0xe4bc[618]][_0xe4bc[117]],_0x5d2axa=this[_0xe4bc[618]][_0xe4bc[119]];_0x5d2ax3?(_0x5d2ax3=_0x5d2ax2[_0xe4bc[439]],1==_0x5d2ax3[_0xe4bc[67]]%2?_0x5d2ax5=_0x5d2ax3[Math[_0xe4bc[519]](_0x5d2ax3[_0xe4bc[67]]/2)]:(_0x5d2ax5=_0x5d2ax3[_0xe4bc[67]]/2,_0x5d2ax2=_0x5d2ax3[_0x5d2ax5-1],_0x5d2ax3=_0x5d2ax3[_0x5d2ax5],_0x5d2ax5= new mxPoint(_0x5d2ax2[_0xe4bc[235]]+(_0x5d2ax3[_0xe4bc[235]]-_0x5d2ax2[_0xe4bc[235]])/2,_0x5d2ax2[_0xe4bc[236]]+(_0x5d2ax3[_0xe4bc[236]]-_0x5d2ax2[_0xe4bc[236]])/2))):(_0x5d2ax5= new mxPoint,_0x5d2ax5[_0xe4bc[235]]=this[_0xe4bc[611]]==mxConstants[_0xe4bc[2132]]?_0x5d2ax2[_0xe4bc[235]]:this[_0xe4bc[611]]==mxConstants[_0xe4bc[479]]?_0x5d2ax2[_0xe4bc[235]]+_0x5d2ax2[_0xe4bc[117]]/2:_0x5d2ax2[_0xe4bc[235]]+_0x5d2ax2[_0xe4bc[117]],_0x5d2ax5[_0xe4bc[236]]=this[_0xe4bc[123]]==mxConstants[_0xe4bc[1687]]?_0x5d2ax2[_0xe4bc[236]]:this[_0xe4bc[123]]==mxConstants[_0xe4bc[481]]?_0x5d2ax2[_0xe4bc[236]]+_0x5d2ax2[_0xe4bc[119]]/2:_0x5d2ax2[_0xe4bc[236]]+_0x5d2ax2[_0xe4bc[119]]);return  new mxRectangle(Math[_0xe4bc[488]](_0x5d2ax5[_0xe4bc[235]]-(_0x5d2ax9*this[_0xe4bc[2354]]-this[_0xe4bc[1368]][_0xe4bc[235]])*_0x5d2ax4),Math[_0xe4bc[488]](_0x5d2ax5[_0xe4bc[236]]-(_0x5d2axa*this[_0xe4bc[2354]]-this[_0xe4bc[1368]][_0xe4bc[236]])*_0x5d2ax4),_0x5d2ax9*_0x5d2ax4,_0x5d2axa*_0x5d2ax4)};mxCellOverlay[_0xe4bc[202]][_0xe4bc[2591]]=function(){return this[_0xe4bc[2718]]};function mxOutline(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[1097]]=_0x5d2ax2;null!=_0x5d2ax3&&this[_0xe4bc[176]](_0x5d2ax3)}mxOutline[_0xe4bc[202]][_0xe4bc[1097]]=null;mxOutline[_0xe4bc[202]][_0xe4bc[2136]]=null;mxOutline[_0xe4bc[202]][_0xe4bc[2720]]=mxConstants[_0xe4bc[2333]];mxOutline[_0xe4bc[202]][_0xe4bc[984]]= !0;mxOutline[_0xe4bc[202]][_0xe4bc[2721]]= !0;mxOutline[_0xe4bc[202]][_0xe4bc[467]]=10;mxOutline[_0xe4bc[202]][_0xe4bc[2722]]=8;mxOutline[_0xe4bc[202]][_0xe4bc[2723]]= !1;mxOutline[_0xe4bc[202]][_0xe4bc[2724]]=null;mxOutline[_0xe4bc[202]][_0xe4bc[1063]]= !1;mxOutline[_0xe4bc[202]][_0xe4bc[176]]=function(_0x5d2ax2){this[_0xe4bc[2136]]= new mxGraph(_0x5d2ax2,this[_0xe4bc[1097]][_0xe4bc[502]](),this[_0xe4bc[2720]],this[_0xe4bc[1097]][_0xe4bc[2434]]());this[_0xe4bc[2136]][_0xe4bc[2206]]= !1;this[_0xe4bc[2136]][_0xe4bc[1012]]= !1;var _0x5d2ax3=this[_0xe4bc[2136]][_0xe4bc[1177]];this[_0xe4bc[2136]][_0xe4bc[1177]]=mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){!this[_0xe4bc[1063]]&&null!=this[_0xe4bc[2136]]&&_0x5d2ax3[_0xe4bc[183]](this[_0xe4bc[2136]],arguments)});mxClient[_0xe4bc[48]]&&(_0x5d2ax2=this[_0xe4bc[2136]][_0xe4bc[249]]()[_0xe4bc[2051]]()[_0xe4bc[265]],_0x5d2ax2[_0xe4bc[57]](_0xe4bc[2725],_0xe4bc[2726]),_0x5d2ax2[_0xe4bc[57]](_0xe4bc[2727],_0xe4bc[2726]));this[_0xe4bc[2136]][_0xe4bc[2409]]= !1;this[_0xe4bc[2136]][_0xe4bc[995]](!1);this[_0xe4bc[2728]]=mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2,_0x5d2ax3){!this[_0xe4bc[1063]]&&!this[_0xe4bc[1124]]&&this[_0xe4bc[2729]]()});this[_0xe4bc[1097]][_0xe4bc[502]]()[_0xe4bc[169]](mxEvent.CHANGE,this[_0xe4bc[2728]]);this[_0xe4bc[2136]][_0xe4bc[1133]](this);_0x5d2ax2=this[_0xe4bc[1097]][_0xe4bc[249]]();_0x5d2ax2[_0xe4bc[169]](mxEvent.SCALE,this[_0xe4bc[2728]]);_0x5d2ax2[_0xe4bc[169]](mxEvent.TRANSLATE,this[_0xe4bc[2728]]);_0x5d2ax2[_0xe4bc[169]](mxEvent.SCALE_AND_TRANSLATE,this[_0xe4bc[2728]]);_0x5d2ax2[_0xe4bc[169]](mxEvent.DOWN,this[_0xe4bc[2728]]);_0x5d2ax2[_0xe4bc[169]](mxEvent.UP,this[_0xe4bc[2728]]);mxEvent[_0xe4bc[169]](this[_0xe4bc[1097]][_0xe4bc[526]],_0xe4bc[276],this[_0xe4bc[2728]]);this[_0xe4bc[2730]]=mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){this[_0xe4bc[2723]]&&this[_0xe4bc[2728]][_0xe4bc[183]](this,arguments)});this[_0xe4bc[1097]][_0xe4bc[169]](mxEvent.PAN,this[_0xe4bc[2730]]);this[_0xe4bc[2731]]=mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){this[_0xe4bc[2136]][_0xe4bc[2341]](this[_0xe4bc[1097]][_0xe4bc[2434]]());this[_0xe4bc[2136]][_0xe4bc[802]]()});this[_0xe4bc[1097]][_0xe4bc[169]](mxEvent.REFRESH,this[_0xe4bc[2731]]);this[_0xe4bc[1562]]= new mxRectangle(0,0,0,0);this[_0xe4bc[2732]]= new mxRectangleShape(this[_0xe4bc[1562]],null,mxConstants.OUTLINE_COLOR,mxConstants.OUTLINE_STROKEWIDTH);this[_0xe4bc[2732]][_0xe4bc[507]]=this[_0xe4bc[2136]][_0xe4bc[507]]!=mxConstants[_0xe4bc[508]]?mxConstants[_0xe4bc[1523]]:mxConstants[_0xe4bc[508]];this[_0xe4bc[2732]][_0xe4bc[176]](this[_0xe4bc[2136]][_0xe4bc[249]]()[_0xe4bc[1524]]());mxEvent[_0xe4bc[2733]](this[_0xe4bc[2732]][_0xe4bc[252]],this[_0xe4bc[2136]]);this[_0xe4bc[2732]][_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[1537]]=_0xe4bc[110];this[_0xe4bc[2734]]=this[_0xe4bc[2735]]();this[_0xe4bc[2734]][_0xe4bc[176]](this[_0xe4bc[2136]][_0xe4bc[249]]()[_0xe4bc[1524]]());this[_0xe4bc[984]]&&(this[_0xe4bc[2734]][_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[270]]=_0xe4bc[356]);mxEvent[_0xe4bc[169]](this[_0xe4bc[2734]][_0xe4bc[252]],mxClient[_0xe4bc[754]]?_0xe4bc[755]:_0xe4bc[751],mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){this[_0xe4bc[2136]][_0xe4bc[758]](mxEvent.MOUSE_DOWN, new mxMouseEvent(_0x5d2ax2))}));this[_0xe4bc[2732]][_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[495]]=this[_0xe4bc[2721]]?_0xe4bc[110]:_0xe4bc[130];this[_0xe4bc[2734]][_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[495]]=this[_0xe4bc[2732]][_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[495]];this[_0xe4bc[2732]][_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[270]]=_0xe4bc[582];this[_0xe4bc[2729]](!1)};mxOutline[_0xe4bc[202]][_0xe4bc[994]]=function(){return this[_0xe4bc[984]]};mxOutline[_0xe4bc[202]][_0xe4bc[995]]=function(_0x5d2ax2){this[_0xe4bc[984]]=_0x5d2ax2};mxOutline[_0xe4bc[202]][_0xe4bc[2736]]=function(_0x5d2ax2){this[_0xe4bc[2734]][_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[187]]=_0x5d2ax2?_0xe4bc[189]:_0xe4bc[188]};mxOutline[_0xe4bc[202]][_0xe4bc[802]]=function(){this[_0xe4bc[2729]](!0)};mxOutline[_0xe4bc[202]][_0xe4bc[2735]]=function(){var _0x5d2ax2=null!=this[_0xe4bc[2724]]? new mxImageShape( new mxRectangle(0,0,this[_0xe4bc[2724]][_0xe4bc[117]],this[_0xe4bc[2724]][_0xe4bc[119]]),this[_0xe4bc[2724]][_0xe4bc[390]]): new mxRectangleShape( new mxRectangle(0,0,this[_0xe4bc[2722]],this[_0xe4bc[2722]]),mxConstants.OUTLINE_HANDLE_FILLCOLOR,mxConstants.OUTLINE_HANDLE_STROKECOLOR);_0x5d2ax2[_0xe4bc[507]]=this[_0xe4bc[2136]][_0xe4bc[507]];return _0x5d2ax2};mxOutline[_0xe4bc[202]][_0xe4bc[2737]]=function(){return  new mxRectangle(0,0,this[_0xe4bc[1097]][_0xe4bc[526]][_0xe4bc[1526]],this[_0xe4bc[1097]][_0xe4bc[526]][_0xe4bc[191]])};mxOutline[_0xe4bc[202]][_0xe4bc[2738]]=function(_0x5d2ax2){return null};mxOutline[_0xe4bc[202]][_0xe4bc[2729]]=function(_0x5d2ax2){if(null!=this[_0xe4bc[1097]]){var _0x5d2ax3=this[_0xe4bc[1097]][_0xe4bc[441]][_0xe4bc[255]],_0x5d2ax4=this[_0xe4bc[1097]][_0xe4bc[517]](),_0x5d2ax4= new mxRectangle(_0x5d2ax4[_0xe4bc[235]]/_0x5d2ax3+this[_0xe4bc[1097]][_0xe4bc[1136]],_0x5d2ax4[_0xe4bc[236]]/_0x5d2ax3+this[_0xe4bc[1097]][_0xe4bc[1137]],_0x5d2ax4[_0xe4bc[117]]/_0x5d2ax3,_0x5d2ax4[_0xe4bc[119]]/_0x5d2ax3),_0x5d2ax5= new mxRectangle(0,0,this[_0xe4bc[1097]][_0xe4bc[526]][_0xe4bc[159]]/_0x5d2ax3,this[_0xe4bc[1097]][_0xe4bc[526]][_0xe4bc[157]]/_0x5d2ax3),_0x5d2ax9=_0x5d2ax4[_0xe4bc[238]]();_0x5d2ax9[_0xe4bc[99]](_0x5d2ax5);var _0x5d2axa=this[_0xe4bc[2737]](),_0x5d2ax5=Math[_0xe4bc[160]](_0x5d2axa[_0xe4bc[117]]/_0x5d2ax3,_0x5d2ax9[_0xe4bc[117]]),_0x5d2ax3=Math[_0xe4bc[160]](_0x5d2axa[_0xe4bc[119]]/_0x5d2ax3,_0x5d2ax9[_0xe4bc[119]]),_0x5d2ax9=Math[_0xe4bc[160]](0,this[_0xe4bc[2136]][_0xe4bc[526]][_0xe4bc[159]]-this[_0xe4bc[467]]),_0x5d2axa=Math[_0xe4bc[160]](0,this[_0xe4bc[2136]][_0xe4bc[526]][_0xe4bc[157]]-this[_0xe4bc[467]]),_0x5d2ax9=Math[_0xe4bc[243]](_0x5d2ax9/_0x5d2ax5,_0x5d2axa/_0x5d2ax3);if(0<_0x5d2ax9){this[_0xe4bc[2136]][_0xe4bc[249]]()[_0xe4bc[255]]!=_0x5d2ax9&&(this[_0xe4bc[2136]][_0xe4bc[249]]()[_0xe4bc[255]]=_0x5d2ax9,_0x5d2ax2= !0);_0x5d2ax5=this[_0xe4bc[2136]][_0xe4bc[249]]();_0x5d2ax5[_0xe4bc[1741]]!=this[_0xe4bc[1097]][_0xe4bc[249]]()[_0xe4bc[1741]]&&_0x5d2ax5[_0xe4bc[2257]](this[_0xe4bc[1097]][_0xe4bc[249]]()[_0xe4bc[1741]]);var _0x5d2ax3=this[_0xe4bc[1097]][_0xe4bc[441]][_0xe4bc[513]],_0x5d2axa=_0x5d2ax3[_0xe4bc[235]]+this[_0xe4bc[1097]][_0xe4bc[1136]],_0x5d2ax12=_0x5d2ax3[_0xe4bc[236]]+this[_0xe4bc[1097]][_0xe4bc[1137]],_0x5d2ax9=this[_0xe4bc[2738]](_0x5d2ax9);null!=_0x5d2ax9&&(_0x5d2axa+=_0x5d2ax9[_0xe4bc[235]],_0x5d2ax12+=_0x5d2ax9[_0xe4bc[236]]);0>_0x5d2ax4[_0xe4bc[235]]&&(_0x5d2axa-=_0x5d2ax4[_0xe4bc[235]]);0>_0x5d2ax4[_0xe4bc[236]]&&(_0x5d2ax12-=_0x5d2ax4[_0xe4bc[236]]);if(_0x5d2ax5[_0xe4bc[513]][_0xe4bc[235]]!=_0x5d2axa||_0x5d2ax5[_0xe4bc[513]][_0xe4bc[236]]!=_0x5d2ax12){_0x5d2ax5[_0xe4bc[513]][_0xe4bc[235]]=_0x5d2axa,_0x5d2ax5[_0xe4bc[513]][_0xe4bc[236]]=_0x5d2ax12,_0x5d2ax2= !0};var _0x5d2ax4=_0x5d2ax5[_0xe4bc[513]],_0x5d2ax9=this[_0xe4bc[1097]][_0xe4bc[249]]()[_0xe4bc[255]],_0x5d2axa=_0x5d2ax9/_0x5d2ax5[_0xe4bc[255]],_0x5d2ax12=1/_0x5d2ax5[_0xe4bc[255]],_0x5d2ax13=this[_0xe4bc[1097]][_0xe4bc[526]];this[_0xe4bc[1562]]= new mxRectangle((_0x5d2ax4[_0xe4bc[235]]-_0x5d2ax3[_0xe4bc[235]]-this[_0xe4bc[1097]][_0xe4bc[1136]])/_0x5d2ax12,(_0x5d2ax4[_0xe4bc[236]]-_0x5d2ax3[_0xe4bc[236]]-this[_0xe4bc[1097]][_0xe4bc[1137]])/_0x5d2ax12,_0x5d2ax13[_0xe4bc[159]]/_0x5d2axa,_0x5d2ax13[_0xe4bc[157]]/_0x5d2axa);this[_0xe4bc[1562]][_0xe4bc[235]]+=this[_0xe4bc[1097]][_0xe4bc[526]][_0xe4bc[360]]*_0x5d2ax5[_0xe4bc[255]]/_0x5d2ax9;this[_0xe4bc[1562]][_0xe4bc[236]]+=this[_0xe4bc[1097]][_0xe4bc[526]][_0xe4bc[190]]*_0x5d2ax5[_0xe4bc[255]]/_0x5d2ax9;_0x5d2ax4=this[_0xe4bc[2732]][_0xe4bc[1562]];if(_0x5d2ax4[_0xe4bc[235]]!=this[_0xe4bc[1562]][_0xe4bc[235]]||_0x5d2ax4[_0xe4bc[236]]!=this[_0xe4bc[1562]][_0xe4bc[236]]||_0x5d2ax4[_0xe4bc[117]]!=this[_0xe4bc[1562]][_0xe4bc[117]]||_0x5d2ax4[_0xe4bc[119]]!=this[_0xe4bc[1562]][_0xe4bc[119]]){this[_0xe4bc[2732]][_0xe4bc[1562]]=this[_0xe4bc[1562]],this[_0xe4bc[2732]][_0xe4bc[258]]()};_0x5d2ax4=this[_0xe4bc[2734]][_0xe4bc[1562]];_0x5d2ax5= new mxRectangle(this[_0xe4bc[1562]][_0xe4bc[235]]+this[_0xe4bc[1562]][_0xe4bc[117]]-_0x5d2ax4[_0xe4bc[117]]/2,this[_0xe4bc[1562]][_0xe4bc[236]]+this[_0xe4bc[1562]][_0xe4bc[119]]-_0x5d2ax4[_0xe4bc[119]]/2,_0x5d2ax4[_0xe4bc[117]],_0x5d2ax4[_0xe4bc[119]]);if(_0x5d2ax4[_0xe4bc[235]]!=_0x5d2ax5[_0xe4bc[235]]||_0x5d2ax4[_0xe4bc[236]]!=_0x5d2ax5[_0xe4bc[236]]||_0x5d2ax4[_0xe4bc[117]]!=_0x5d2ax5[_0xe4bc[117]]||_0x5d2ax4[_0xe4bc[119]]!=_0x5d2ax5[_0xe4bc[119]]){this[_0xe4bc[2734]][_0xe4bc[1562]]=_0x5d2ax5,_0xe4bc[188]!=this[_0xe4bc[2734]][_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[187]]&&this[_0xe4bc[2734]][_0xe4bc[258]]()};_0x5d2ax2&&this[_0xe4bc[2136]][_0xe4bc[441]][_0xe4bc[2259]]()}}};mxOutline[_0xe4bc[202]][_0xe4bc[787]]=function(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[984]]&&this[_0xe4bc[2721]]&&(this[_0xe4bc[499]]=_0x5d2ax3[_0xe4bc[729]](this[_0xe4bc[2734]]),this[_0xe4bc[2739]]=_0x5d2ax3[_0xe4bc[730]](),this[_0xe4bc[2740]]=_0x5d2ax3[_0xe4bc[732]](),this[_0xe4bc[1124]]= !0,this[_0xe4bc[1097]][_0xe4bc[2365]]&&mxUtils[_0xe4bc[1134]](this[_0xe4bc[1097]][_0xe4bc[526]])?(this[_0xe4bc[2741]]=this[_0xe4bc[1097]][_0xe4bc[526]][_0xe4bc[360]],this[_0xe4bc[2742]]=this[_0xe4bc[1097]][_0xe4bc[526]][_0xe4bc[190]]):this[_0xe4bc[2742]]=this[_0xe4bc[2741]]=0);_0x5d2ax3[_0xe4bc[722]]()};mxOutline[_0xe4bc[202]][_0xe4bc[788]]=function(_0x5d2ax2,_0x5d2ax3){if(this[_0xe4bc[1124]]){this[_0xe4bc[2732]][_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[495]]=this[_0xe4bc[2721]]?_0xe4bc[110]:_0xe4bc[130];this[_0xe4bc[2734]][_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[495]]=this[_0xe4bc[2732]][_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[495]];var _0x5d2ax4=_0x5d2ax3[_0xe4bc[730]]()-this[_0xe4bc[2739]],_0x5d2ax5=_0x5d2ax3[_0xe4bc[732]]()-this[_0xe4bc[2740]],_0x5d2ax9=null;if(this[_0xe4bc[499]]){_0x5d2ax9=this[_0xe4bc[1097]][_0xe4bc[526]],_0x5d2ax5=_0x5d2ax4/(_0x5d2ax9[_0xe4bc[159]]/_0x5d2ax9[_0xe4bc[157]]),_0x5d2ax9= new mxRectangle(this[_0xe4bc[1562]][_0xe4bc[235]],this[_0xe4bc[1562]][_0xe4bc[236]],Math[_0xe4bc[160]](1,this[_0xe4bc[1562]][_0xe4bc[117]]+_0x5d2ax4),Math[_0xe4bc[160]](1,this[_0xe4bc[1562]][_0xe4bc[119]]+_0x5d2ax5)),this[_0xe4bc[2732]][_0xe4bc[1562]]=_0x5d2ax9,this[_0xe4bc[2732]][_0xe4bc[258]]()}else {var _0x5d2axa=this[_0xe4bc[2136]][_0xe4bc[249]]()[_0xe4bc[255]],_0x5d2ax9= new mxRectangle(this[_0xe4bc[1562]][_0xe4bc[235]]+_0x5d2ax4,this[_0xe4bc[1562]][_0xe4bc[236]]+_0x5d2ax5,this[_0xe4bc[1562]][_0xe4bc[117]],this[_0xe4bc[1562]][_0xe4bc[119]]);this[_0xe4bc[2732]][_0xe4bc[1562]]=_0x5d2ax9;this[_0xe4bc[2732]][_0xe4bc[258]]();_0x5d2ax4=_0x5d2ax4/_0x5d2axa*this[_0xe4bc[1097]][_0xe4bc[249]]()[_0xe4bc[255]];_0x5d2ax5=_0x5d2ax5/_0x5d2axa*this[_0xe4bc[1097]][_0xe4bc[249]]()[_0xe4bc[255]];this[_0xe4bc[1097]][_0xe4bc[1135]](-_0x5d2ax4-this[_0xe4bc[2741]],-_0x5d2ax5-this[_0xe4bc[2742]])};_0x5d2ax4=this[_0xe4bc[2734]][_0xe4bc[1562]];this[_0xe4bc[2734]][_0xe4bc[1562]]= new mxRectangle(_0x5d2ax9[_0xe4bc[235]]+_0x5d2ax9[_0xe4bc[117]]-_0x5d2ax4[_0xe4bc[117]]/2,_0x5d2ax9[_0xe4bc[236]]+_0x5d2ax9[_0xe4bc[119]]-_0x5d2ax4[_0xe4bc[119]]/2,_0x5d2ax4[_0xe4bc[117]],_0x5d2ax4[_0xe4bc[119]]);_0xe4bc[188]!=this[_0xe4bc[2734]][_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[187]]&&this[_0xe4bc[2734]][_0xe4bc[258]]();_0x5d2ax3[_0xe4bc[722]]()}};mxOutline[_0xe4bc[202]][_0xe4bc[789]]=function(_0x5d2ax2,_0x5d2ax3){if(this[_0xe4bc[1124]]){var _0x5d2ax4=_0x5d2ax3[_0xe4bc[730]]()-this[_0xe4bc[2739]],_0x5d2ax5=_0x5d2ax3[_0xe4bc[732]]()-this[_0xe4bc[2740]];if(0<Math[_0xe4bc[425]](_0x5d2ax4)||0<Math[_0xe4bc[425]](_0x5d2ax5)){if(this[_0xe4bc[499]]){var _0x5d2ax5=this[_0xe4bc[2732]][_0xe4bc[1562]][_0xe4bc[117]],_0x5d2ax9=this[_0xe4bc[1097]][_0xe4bc[249]]()[_0xe4bc[255]];this[_0xe4bc[1097]][_0xe4bc[2561]](_0x5d2ax9-_0x5d2ax4*_0x5d2ax9/_0x5d2ax5,!1)}else {if(!this[_0xe4bc[1097]][_0xe4bc[2365]]||!mxUtils[_0xe4bc[1134]](this[_0xe4bc[1097]][_0xe4bc[526]])){this[_0xe4bc[1097]][_0xe4bc[1135]](0,0),_0x5d2ax4/=this[_0xe4bc[2136]][_0xe4bc[249]]()[_0xe4bc[255]],_0x5d2ax5/=this[_0xe4bc[2136]][_0xe4bc[249]]()[_0xe4bc[255]],_0x5d2ax9=this[_0xe4bc[1097]][_0xe4bc[249]]()[_0xe4bc[513]],this[_0xe4bc[1097]][_0xe4bc[249]]()[_0xe4bc[1147]](_0x5d2ax9[_0xe4bc[235]]-_0x5d2ax4,_0x5d2ax9[_0xe4bc[236]]-_0x5d2ax5)}};this[_0xe4bc[2729]]();_0x5d2ax3[_0xe4bc[722]]()};this[_0xe4bc[1983]]=null;this[_0xe4bc[1124]]= !1}};mxOutline[_0xe4bc[202]][_0xe4bc[515]]=function(){null!=this[_0xe4bc[1097]]&&(this[_0xe4bc[1097]][_0xe4bc[745]](this[_0xe4bc[2730]]),this[_0xe4bc[1097]][_0xe4bc[745]](this[_0xe4bc[2731]]),this[_0xe4bc[1097]][_0xe4bc[502]]()[_0xe4bc[745]](this[_0xe4bc[2728]]),this[_0xe4bc[1097]][_0xe4bc[249]]()[_0xe4bc[745]](this[_0xe4bc[2728]]),mxEvent[_0xe4bc[169]](this[_0xe4bc[1097]][_0xe4bc[526]],_0xe4bc[276],this[_0xe4bc[2728]]),this[_0xe4bc[1097]]=null);null!=this[_0xe4bc[2136]]&&(this[_0xe4bc[2136]][_0xe4bc[1148]](this),this[_0xe4bc[2136]][_0xe4bc[515]](),this[_0xe4bc[2136]]=null);null!=this[_0xe4bc[2732]]&&(this[_0xe4bc[2732]][_0xe4bc[515]](),this[_0xe4bc[2732]]=null);null!=this[_0xe4bc[2734]]&&(this[_0xe4bc[2734]][_0xe4bc[515]](),this[_0xe4bc[2734]]=null)};function mxMultiplicity(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa,_0x5d2ax12,_0x5d2ax13,_0x5d2ax14,_0x5d2ax15){this[_0xe4bc[1097]]=_0x5d2ax2;this[_0xe4bc[60]]=_0x5d2ax3;this[_0xe4bc[2588]]=_0x5d2ax4;this[_0xe4bc[131]]=_0x5d2ax5;this[_0xe4bc[243]]=null!=_0x5d2ax9?_0x5d2ax9:0;this[_0xe4bc[160]]=null!=_0x5d2axa?_0x5d2axa:_0xe4bc[2743];this[_0xe4bc[2744]]=_0x5d2ax12;this[_0xe4bc[2589]]=mxResources[_0xe4bc[203]](_0x5d2ax13)||_0x5d2ax13;this[_0xe4bc[2745]]=mxResources[_0xe4bc[203]](_0x5d2ax14)||_0x5d2ax14;this[_0xe4bc[2746]]=null!=_0x5d2ax15?_0x5d2ax15:!0}mxMultiplicity[_0xe4bc[202]][_0xe4bc[60]]=null;mxMultiplicity[_0xe4bc[202]][_0xe4bc[2588]]=null;mxMultiplicity[_0xe4bc[202]][_0xe4bc[131]]=null;mxMultiplicity[_0xe4bc[202]][_0xe4bc[1097]]=null;mxMultiplicity[_0xe4bc[202]][_0xe4bc[243]]=null;mxMultiplicity[_0xe4bc[202]][_0xe4bc[160]]=null;mxMultiplicity[_0xe4bc[202]][_0xe4bc[2744]]=null;mxMultiplicity[_0xe4bc[202]][_0xe4bc[2746]]= !0;mxMultiplicity[_0xe4bc[202]][_0xe4bc[2589]]=null;mxMultiplicity[_0xe4bc[202]][_0xe4bc[2745]]=null;mxMultiplicity[_0xe4bc[202]][_0xe4bc[2583]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa){var _0x5d2ax12=_0xe4bc[110];if(this[_0xe4bc[1097]]&&this[_0xe4bc[2747]](_0x5d2ax2,_0x5d2ax4,_0x5d2ax3)||!this[_0xe4bc[1097]]&&this[_0xe4bc[2747]](_0x5d2ax2,_0x5d2ax5,_0x5d2ax3)){if(null!=this[_0xe4bc[2589]]&&(this[_0xe4bc[1097]]&&(0==this[_0xe4bc[160]]||_0x5d2ax9>=this[_0xe4bc[160]])||!this[_0xe4bc[1097]]&&(0==this[_0xe4bc[160]]||_0x5d2axa>=this[_0xe4bc[160]]))){_0x5d2ax12+=this[_0xe4bc[2589]]+_0xe4bc[192]};null!=this[_0xe4bc[2744]]&&(null!=this[_0xe4bc[2745]]&&0<this[_0xe4bc[2744]][_0xe4bc[67]])&&(this[_0xe4bc[2748]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5)||(_0x5d2ax12+=this[_0xe4bc[2745]]+_0xe4bc[192]))};return 0<_0x5d2ax12[_0xe4bc[67]]?_0x5d2ax12:null};mxMultiplicity[_0xe4bc[202]][_0xe4bc[2748]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){_0x5d2ax3=_0x5d2ax2[_0xe4bc[251]][_0xe4bc[433]](_0x5d2ax4);_0x5d2ax5=_0x5d2ax2[_0xe4bc[251]][_0xe4bc[433]](_0x5d2ax5);_0x5d2ax4=!this[_0xe4bc[2746]];for(var _0x5d2ax9=this[_0xe4bc[2744]],_0x5d2axa=0;_0x5d2axa<_0x5d2ax9[_0xe4bc[67]];_0x5d2axa++){if(this[_0xe4bc[1097]]&&this[_0xe4bc[2749]](_0x5d2ax2,_0x5d2ax5,_0x5d2ax9[_0x5d2axa])){_0x5d2ax4=this[_0xe4bc[2746]];break}else {if(!this[_0xe4bc[1097]]&&this[_0xe4bc[2749]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax9[_0x5d2axa])){_0x5d2ax4=this[_0xe4bc[2746]];break}}};return _0x5d2ax4};mxMultiplicity[_0xe4bc[202]][_0xe4bc[2747]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){_0x5d2ax3=_0x5d2ax2[_0xe4bc[251]][_0xe4bc[433]](_0x5d2ax3);return this[_0xe4bc[2749]](_0x5d2ax2,_0x5d2ax3,this[_0xe4bc[60]],this[_0xe4bc[2588]],this[_0xe4bc[131]])};mxMultiplicity[_0xe4bc[202]][_0xe4bc[2749]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){return null!=_0x5d2ax3?isNaN(_0x5d2ax3[_0xe4bc[288]])?_0x5d2ax3==_0x5d2ax4:mxUtils[_0xe4bc[1331]](_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9):!1};function mxLayoutManager(_0x5d2ax2){this[_0xe4bc[2750]]=mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2,_0x5d2ax4){this[_0xe4bc[994]]()&&this[_0xe4bc[823]](_0x5d2ax4[_0xe4bc[720]](_0xe4bc[1061]))});this[_0xe4bc[2317]]=mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2,_0x5d2ax4){this[_0xe4bc[994]]()&&this[_0xe4bc[835]](_0x5d2ax4[_0xe4bc[720]](_0xe4bc[895]),_0x5d2ax4[_0xe4bc[720]](_0xe4bc[763]))});this[_0xe4bc[1178]](_0x5d2ax2)}mxLayoutManager[_0xe4bc[202]]= new mxEventSource;mxLayoutManager[_0xe4bc[202]][_0xe4bc[196]]=mxLayoutManager;mxLayoutManager[_0xe4bc[202]][_0xe4bc[1179]]=null;mxLayoutManager[_0xe4bc[202]][_0xe4bc[2751]]= !0;mxLayoutManager[_0xe4bc[202]][_0xe4bc[984]]= !0;mxLayoutManager[_0xe4bc[202]][_0xe4bc[2728]]=null;mxLayoutManager[_0xe4bc[202]][_0xe4bc[2317]]=null;mxLayoutManager[_0xe4bc[202]][_0xe4bc[994]]=function(){return this[_0xe4bc[984]]};mxLayoutManager[_0xe4bc[202]][_0xe4bc[995]]=function(_0x5d2ax2){this[_0xe4bc[984]]=_0x5d2ax2};mxLayoutManager[_0xe4bc[202]][_0xe4bc[2752]]=function(){return this[_0xe4bc[2751]]};mxLayoutManager[_0xe4bc[202]][_0xe4bc[2753]]=function(_0x5d2ax2){this[_0xe4bc[2751]]=_0x5d2ax2};mxLayoutManager[_0xe4bc[202]][_0xe4bc[1703]]=function(){return this[_0xe4bc[1179]]};mxLayoutManager[_0xe4bc[202]][_0xe4bc[1178]]=function(_0x5d2ax2){if(null!=this[_0xe4bc[1179]]){var _0x5d2ax3=this[_0xe4bc[1179]][_0xe4bc[502]]();_0x5d2ax3[_0xe4bc[745]](this[_0xe4bc[2750]]);this[_0xe4bc[1179]][_0xe4bc[745]](this[_0xe4bc[2317]])};this[_0xe4bc[1179]]=_0x5d2ax2;null!=this[_0xe4bc[1179]]&&(_0x5d2ax3=this[_0xe4bc[1179]][_0xe4bc[502]](),_0x5d2ax3[_0xe4bc[169]](mxEvent.BEFORE_UNDO,this[_0xe4bc[2750]]),this[_0xe4bc[1179]][_0xe4bc[169]](mxEvent.MOVE_CELLS,this[_0xe4bc[2317]]))};mxLayoutManager[_0xe4bc[202]][_0xe4bc[2754]]=function(_0x5d2ax2){return null};mxLayoutManager[_0xe4bc[202]][_0xe4bc[823]]=function(_0x5d2ax2){_0x5d2ax2=this[_0xe4bc[2755]](_0x5d2ax2[_0xe4bc[1065]]);var _0x5d2ax3=this[_0xe4bc[1703]]()[_0xe4bc[502]]();if(this[_0xe4bc[2752]]()){for(var _0x5d2ax4=_0x5d2ax3[_0xe4bc[1977]](_0x5d2ax2);0<_0x5d2ax4[_0xe4bc[67]];){_0x5d2ax2=_0x5d2ax2[_0xe4bc[1919]](_0x5d2ax4),_0x5d2ax4=_0x5d2ax3[_0xe4bc[1977]](_0x5d2ax4)}};this[_0xe4bc[828]](mxUtils[_0xe4bc[1779]](_0x5d2ax2,!1))};mxLayoutManager[_0xe4bc[202]][_0xe4bc[835]]=function(_0x5d2ax2,_0x5d2ax3){if(null!=_0x5d2ax2&&null!=_0x5d2ax3){for(var _0x5d2ax4=mxUtils[_0xe4bc[2196]](this[_0xe4bc[1703]]()[_0xe4bc[526]],mxEvent[_0xe4bc[731]](_0x5d2ax3),mxEvent[_0xe4bc[733]](_0x5d2ax3)),_0x5d2ax5=this[_0xe4bc[1703]]()[_0xe4bc[502]](),_0x5d2ax9=0;_0x5d2ax9<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax9++){var _0x5d2axa=this[_0xe4bc[2754]](_0x5d2ax5[_0xe4bc[1197]](_0x5d2ax2[_0x5d2ax9]));null!=_0x5d2axa&&_0x5d2axa[_0xe4bc[1702]](_0x5d2ax2[_0x5d2ax9],_0x5d2ax4[_0xe4bc[235]],_0x5d2ax4[_0xe4bc[236]])}}};mxLayoutManager[_0xe4bc[202]][_0xe4bc[2755]]=function(_0x5d2ax2){for(var _0x5d2ax3=[],_0x5d2ax4={},_0x5d2ax5=0;_0x5d2ax5<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax5++){var _0x5d2ax9=_0x5d2ax2[_0x5d2ax5];if(_0x5d2ax9 instanceof mxRootChange){return []};for(var _0x5d2ax9=this[_0xe4bc[2756]](_0x5d2ax9),_0x5d2axa=0;_0x5d2axa<_0x5d2ax9[_0xe4bc[67]];_0x5d2axa++){if(null!=_0x5d2ax9[_0x5d2axa]){var _0x5d2ax12=mxCellPath[_0xe4bc[385]](_0x5d2ax9[_0x5d2axa]);null==_0x5d2ax4[_0x5d2ax12]&&(_0x5d2ax4[_0x5d2ax12]=_0x5d2ax9[_0x5d2axa],_0x5d2ax3[_0xe4bc[207]](_0x5d2ax9[_0x5d2axa]))}}};return _0x5d2ax3};mxLayoutManager[_0xe4bc[202]][_0xe4bc[2756]]=function(_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[1703]]()[_0xe4bc[502]]();return _0x5d2ax2 instanceof mxChildChange?[_0x5d2ax2[_0xe4bc[247]],_0x5d2ax2[_0xe4bc[257]],_0x5d2ax3[_0xe4bc[1197]](_0x5d2ax2[_0xe4bc[247]])]:_0x5d2ax2 instanceof mxTerminalChange||_0x5d2ax2 instanceof mxGeometryChange?[_0x5d2ax2[_0xe4bc[246]],_0x5d2ax3[_0xe4bc[1197]](_0x5d2ax2[_0xe4bc[246]])]:[]};mxLayoutManager[_0xe4bc[202]][_0xe4bc[828]]=function(_0x5d2ax2){if(0<_0x5d2ax2[_0xe4bc[67]]){var _0x5d2ax3=this[_0xe4bc[1703]]()[_0xe4bc[502]]();_0x5d2ax3[_0xe4bc[473]]();try{for(var _0x5d2ax4=null,_0x5d2ax5=0;_0x5d2ax5<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax5++){_0x5d2ax2[_0x5d2ax5]!=_0x5d2ax3[_0xe4bc[501]]()&&_0x5d2ax2[_0x5d2ax5]!=_0x5d2ax4&&(_0x5d2ax4=_0x5d2ax2[_0x5d2ax5],this[_0xe4bc[2757]](this[_0xe4bc[2754]](_0x5d2ax4),_0x5d2ax4))};this[_0xe4bc[746]]( new mxEventObject(mxEvent.LAYOUT_CELLS,_0xe4bc[895],_0x5d2ax2))}finally{_0x5d2ax3[_0xe4bc[476]]()}}};mxLayoutManager[_0xe4bc[202]][_0xe4bc[2757]]=function(_0x5d2ax2,_0x5d2ax3){null!=_0x5d2ax2&&null!=_0x5d2ax3&&_0x5d2ax2[_0xe4bc[350]](_0x5d2ax3)};mxLayoutManager[_0xe4bc[202]][_0xe4bc[515]]=function(){this[_0xe4bc[1178]](null)};function mxSpaceManager(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){this[_0xe4bc[2758]]=mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[994]]()&&this[_0xe4bc[837]](_0x5d2ax3[_0xe4bc[720]](_0xe4bc[895]))});this[_0xe4bc[2759]]=mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[994]]()&&this[_0xe4bc[837]](_0x5d2ax3[_0xe4bc[720]](_0xe4bc[895]))});this[_0xe4bc[2760]]=null!=_0x5d2ax3?_0x5d2ax3:!0;this[_0xe4bc[2761]]=null!=_0x5d2ax4?_0x5d2ax4:!0;this[_0xe4bc[2392]]=null!=_0x5d2ax5?_0x5d2ax5:!0;this[_0xe4bc[1178]](_0x5d2ax2)}mxSpaceManager[_0xe4bc[202]]= new mxEventSource;mxSpaceManager[_0xe4bc[202]][_0xe4bc[196]]=mxSpaceManager;mxSpaceManager[_0xe4bc[202]][_0xe4bc[1179]]=null;mxSpaceManager[_0xe4bc[202]][_0xe4bc[984]]= !0;mxSpaceManager[_0xe4bc[202]][_0xe4bc[2760]]= !0;mxSpaceManager[_0xe4bc[202]][_0xe4bc[2761]]= !0;mxSpaceManager[_0xe4bc[202]][_0xe4bc[2392]]= !0;mxSpaceManager[_0xe4bc[202]][_0xe4bc[2758]]=null;mxSpaceManager[_0xe4bc[202]][_0xe4bc[2759]]=null;mxSpaceManager[_0xe4bc[202]][_0xe4bc[2762]]=function(_0x5d2ax2){return !this[_0xe4bc[1703]]()[_0xe4bc[502]]()[_0xe4bc[1193]](_0x5d2ax2)};mxSpaceManager[_0xe4bc[202]][_0xe4bc[2763]]=function(_0x5d2ax2){return this[_0xe4bc[1703]]()[_0xe4bc[502]]()[_0xe4bc[1193]](_0x5d2ax2)&&this[_0xe4bc[1703]]()[_0xe4bc[1712]](_0x5d2ax2)};mxSpaceManager[_0xe4bc[202]][_0xe4bc[994]]=function(){return this[_0xe4bc[984]]};mxSpaceManager[_0xe4bc[202]][_0xe4bc[995]]=function(_0x5d2ax2){this[_0xe4bc[984]]=_0x5d2ax2};mxSpaceManager[_0xe4bc[202]][_0xe4bc[2764]]=function(){return this[_0xe4bc[2760]]};mxSpaceManager[_0xe4bc[202]][_0xe4bc[2765]]=function(_0x5d2ax2){this[_0xe4bc[2760]]=_0x5d2ax2};mxSpaceManager[_0xe4bc[202]][_0xe4bc[2766]]=function(){return this[_0xe4bc[2761]]};mxSpaceManager[_0xe4bc[202]][_0xe4bc[2767]]=function(_0x5d2ax2){this[_0xe4bc[2761]]=_0x5d2ax2};mxSpaceManager[_0xe4bc[202]][_0xe4bc[2678]]=function(){return this[_0xe4bc[2392]]};mxSpaceManager[_0xe4bc[202]][_0xe4bc[2679]]=function(_0x5d2ax2){this[_0xe4bc[2392]]=_0x5d2ax2};mxSpaceManager[_0xe4bc[202]][_0xe4bc[1703]]=function(){return this[_0xe4bc[1179]]};mxSpaceManager[_0xe4bc[202]][_0xe4bc[1178]]=function(_0x5d2ax2){null!=this[_0xe4bc[1179]]&&(this[_0xe4bc[1179]][_0xe4bc[745]](this[_0xe4bc[2758]]),this[_0xe4bc[1179]][_0xe4bc[745]](this[_0xe4bc[2759]]));this[_0xe4bc[1179]]=_0x5d2ax2;null!=this[_0xe4bc[1179]]&&(this[_0xe4bc[1179]][_0xe4bc[169]](mxEvent.RESIZE_CELLS,this[_0xe4bc[2758]]),this[_0xe4bc[1179]][_0xe4bc[169]](mxEvent.FOLD_CELLS,this[_0xe4bc[2759]]))};mxSpaceManager[_0xe4bc[202]][_0xe4bc[837]]=function(_0x5d2ax2){if(null!=_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[1179]][_0xe4bc[502]]();_0x5d2ax3[_0xe4bc[473]]();try{for(var _0x5d2ax4=0;_0x5d2ax4<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax4++){if(!this[_0xe4bc[2762]](_0x5d2ax2[_0x5d2ax4])){this[_0xe4bc[2768]](_0x5d2ax2[_0x5d2ax4]);break}}}finally{_0x5d2ax3[_0xe4bc[476]]()}}};mxSpaceManager[_0xe4bc[202]][_0xe4bc[2768]]=function(_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[1703]](),_0x5d2ax4=_0x5d2ax3[_0xe4bc[249]](),_0x5d2ax5=_0x5d2ax3[_0xe4bc[502]](),_0x5d2ax9=_0x5d2ax4[_0xe4bc[248]](_0x5d2ax2),_0x5d2axa=_0x5d2ax4[_0xe4bc[248]](_0x5d2ax5[_0xe4bc[1197]](_0x5d2ax2));if(null!=_0x5d2ax9&&null!=_0x5d2axa){var _0x5d2ax12=this[_0xe4bc[2769]](_0x5d2ax9),_0x5d2ax13=_0x5d2ax5[_0xe4bc[1721]](_0x5d2ax2);if(null!=_0x5d2ax12&&null!=_0x5d2ax13){var _0x5d2ax14=_0x5d2ax4[_0xe4bc[513]],_0x5d2ax15=_0x5d2ax4[_0xe4bc[255]],_0x5d2ax4=_0x5d2ax9[_0xe4bc[235]]-_0x5d2axa[_0xe4bc[2078]][_0xe4bc[235]]-_0x5d2ax14[_0xe4bc[235]]*_0x5d2ax15,_0x5d2axa=_0x5d2ax9[_0xe4bc[236]]-_0x5d2axa[_0xe4bc[2078]][_0xe4bc[236]]-_0x5d2ax14[_0xe4bc[236]]*_0x5d2ax15,_0x5d2ax14=_0x5d2ax9[_0xe4bc[235]]+_0x5d2ax9[_0xe4bc[117]],_0x5d2ax16=_0x5d2ax9[_0xe4bc[236]]+_0x5d2ax9[_0xe4bc[119]],_0x5d2ax17=_0x5d2ax9[_0xe4bc[117]]-_0x5d2ax13[_0xe4bc[117]]*_0x5d2ax15+_0x5d2ax4-_0x5d2ax13[_0xe4bc[235]]*_0x5d2ax15,_0x5d2ax18=_0x5d2ax9[_0xe4bc[119]]-_0x5d2ax13[_0xe4bc[119]]*_0x5d2ax15+_0x5d2axa-_0x5d2ax13[_0xe4bc[236]]*_0x5d2ax15,_0x5d2ax19=1-_0x5d2ax13[_0xe4bc[117]]*_0x5d2ax15/_0x5d2ax9[_0xe4bc[117]],_0x5d2ax9=1-_0x5d2ax13[_0xe4bc[119]]*_0x5d2ax15/_0x5d2ax9[_0xe4bc[119]];_0x5d2ax5[_0xe4bc[473]]();try{for(_0x5d2ax13=0;_0x5d2ax13<_0x5d2ax12[_0xe4bc[67]];_0x5d2ax13++){_0x5d2ax12[_0x5d2ax13]!=_0x5d2ax2&&this[_0xe4bc[2763]](_0x5d2ax12[_0x5d2ax13])&&this[_0xe4bc[2770]](_0x5d2ax12[_0x5d2ax13],_0x5d2ax17,_0x5d2ax18,_0x5d2ax4,_0x5d2axa,_0x5d2ax14,_0x5d2ax16,_0x5d2ax19,_0x5d2ax9,this[_0xe4bc[2678]]()&&_0x5d2ax3[_0xe4bc[2507]](_0x5d2ax12[_0x5d2ax13]))}}finally{_0x5d2ax5[_0xe4bc[476]]()}}}};mxSpaceManager[_0xe4bc[202]][_0xe4bc[2770]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa,_0x5d2ax12,_0x5d2ax13,_0x5d2ax14,_0x5d2ax15){_0x5d2ax5=this[_0xe4bc[1703]]();var _0x5d2ax16=_0x5d2ax5[_0xe4bc[249]]()[_0xe4bc[248]](_0x5d2ax2);if(null!=_0x5d2ax16){var _0x5d2ax17=_0x5d2ax5[_0xe4bc[502]](),_0x5d2ax18=_0x5d2ax17[_0xe4bc[1721]](_0x5d2ax2);if(null!=_0x5d2ax18){_0x5d2ax17[_0xe4bc[473]]();try{if(this[_0xe4bc[2764]]()){if(_0x5d2ax16[_0xe4bc[235]]>=_0x5d2axa){_0x5d2ax18=_0x5d2ax18[_0xe4bc[238]](),_0x5d2ax18[_0xe4bc[513]](-_0x5d2ax3,0)}else {var _0x5d2ax19=Math[_0xe4bc[160]](0,_0x5d2ax16[_0xe4bc[235]]-x0),_0x5d2ax18=_0x5d2ax18[_0xe4bc[238]]();_0x5d2ax18[_0xe4bc[513]](-_0x5d2ax13*_0x5d2ax19,0)}};if(this[_0xe4bc[2766]]()){if(_0x5d2ax16[_0xe4bc[236]]>=_0x5d2ax12){_0x5d2ax18=_0x5d2ax18[_0xe4bc[238]](),_0x5d2ax18[_0xe4bc[513]](0,-_0x5d2ax4)}else {var _0x5d2ax1a=Math[_0xe4bc[160]](0,_0x5d2ax16[_0xe4bc[236]]-_0x5d2ax9),_0x5d2ax18=_0x5d2ax18[_0xe4bc[238]]();_0x5d2ax18[_0xe4bc[513]](0,-_0x5d2ax14*_0x5d2ax1a)}};_0x5d2ax18!=_0x5d2ax17[_0xe4bc[1721]](_0x5d2ax2)&&(_0x5d2ax17[_0xe4bc[1724]](_0x5d2ax2,_0x5d2ax18),_0x5d2ax15&&_0x5d2ax5[_0xe4bc[2508]](_0x5d2ax2))}finally{_0x5d2ax17[_0xe4bc[476]]()}}}};mxSpaceManager[_0xe4bc[202]][_0xe4bc[2769]]=function(_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[1703]](),_0x5d2ax4=_0x5d2ax3[_0xe4bc[502]]()[_0xe4bc[1197]](_0x5d2ax2[_0xe4bc[246]]),_0x5d2ax5=this[_0xe4bc[2766]](),_0x5d2ax9=this[_0xe4bc[2764]]();return _0x5d2ax3[_0xe4bc[2691]](_0x5d2ax2[_0xe4bc[235]]+(_0x5d2ax5?0:_0x5d2ax2[_0xe4bc[117]]),_0x5d2ax2[_0xe4bc[236]]+(_0x5d2ax5&&_0x5d2ax9?0:_0x5d2ax2[_0xe4bc[119]]),_0x5d2ax4,_0x5d2ax9,_0x5d2ax5)};mxSpaceManager[_0xe4bc[202]][_0xe4bc[515]]=function(){this[_0xe4bc[1178]](null)};function mxSwimlaneManager(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){this[_0xe4bc[662]]=null!=_0x5d2ax3?_0x5d2ax3:!0;this[_0xe4bc[2771]]=null!=_0x5d2ax4?_0x5d2ax4:!0;this[_0xe4bc[2772]]=null!=_0x5d2ax5?_0x5d2ax5:!0;this[_0xe4bc[2773]]=mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[994]]()&&this[_0xe4bc[2774]]()&&this[_0xe4bc[833]](_0x5d2ax3[_0xe4bc[720]](_0xe4bc[895]))});this[_0xe4bc[2758]]=mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[994]]()&&this[_0xe4bc[2775]]()&&this[_0xe4bc[837]](_0x5d2ax3[_0xe4bc[720]](_0xe4bc[895]))});this[_0xe4bc[1178]](_0x5d2ax2)}mxSwimlaneManager[_0xe4bc[202]]= new mxEventSource;mxSwimlaneManager[_0xe4bc[202]][_0xe4bc[196]]=mxSwimlaneManager;mxSwimlaneManager[_0xe4bc[202]][_0xe4bc[1179]]=null;mxSwimlaneManager[_0xe4bc[202]][_0xe4bc[984]]= !0;mxSwimlaneManager[_0xe4bc[202]][_0xe4bc[662]]= !0;mxSwimlaneManager[_0xe4bc[202]][_0xe4bc[2771]]= !0;mxSwimlaneManager[_0xe4bc[202]][_0xe4bc[2772]]= !0;mxSwimlaneManager[_0xe4bc[202]][_0xe4bc[2773]]=null;mxSwimlaneManager[_0xe4bc[202]][_0xe4bc[2758]]=null;mxSwimlaneManager[_0xe4bc[202]][_0xe4bc[994]]=function(){return this[_0xe4bc[984]]};mxSwimlaneManager[_0xe4bc[202]][_0xe4bc[995]]=function(_0x5d2ax2){this[_0xe4bc[984]]=_0x5d2ax2};mxSwimlaneManager[_0xe4bc[202]][_0xe4bc[1737]]=function(){return this[_0xe4bc[662]]};mxSwimlaneManager[_0xe4bc[202]][_0xe4bc[2776]]=function(_0x5d2ax2){this[_0xe4bc[662]]=_0x5d2ax2};mxSwimlaneManager[_0xe4bc[202]][_0xe4bc[2774]]=function(){return this[_0xe4bc[2771]]};mxSwimlaneManager[_0xe4bc[202]][_0xe4bc[2777]]=function(_0x5d2ax2){this[_0xe4bc[2771]]=_0x5d2ax2};mxSwimlaneManager[_0xe4bc[202]][_0xe4bc[2775]]=function(){return this[_0xe4bc[2772]]};mxSwimlaneManager[_0xe4bc[202]][_0xe4bc[2778]]=function(_0x5d2ax2){this[_0xe4bc[2772]]=_0x5d2ax2};mxSwimlaneManager[_0xe4bc[202]][_0xe4bc[1703]]=function(){return this[_0xe4bc[1179]]};mxSwimlaneManager[_0xe4bc[202]][_0xe4bc[1178]]=function(_0x5d2ax2){null!=this[_0xe4bc[1179]]&&(this[_0xe4bc[1179]][_0xe4bc[745]](this[_0xe4bc[2773]]),this[_0xe4bc[1179]][_0xe4bc[745]](this[_0xe4bc[2758]]));this[_0xe4bc[1179]]=_0x5d2ax2;null!=this[_0xe4bc[1179]]&&(this[_0xe4bc[1179]][_0xe4bc[169]](mxEvent.ADD_CELLS,this[_0xe4bc[2773]]),this[_0xe4bc[1179]][_0xe4bc[169]](mxEvent.CELLS_RESIZED,this[_0xe4bc[2758]]))};mxSwimlaneManager[_0xe4bc[202]][_0xe4bc[2779]]=function(_0x5d2ax2){return !this[_0xe4bc[1703]]()[_0xe4bc[1730]](_0x5d2ax2)};mxSwimlaneManager[_0xe4bc[202]][_0xe4bc[2780]]=function(_0x5d2ax2){if(this[_0xe4bc[1179]][_0xe4bc[1730]](_0x5d2ax2)){var _0x5d2ax3=this[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax2);_0x5d2ax2=null!=_0x5d2ax3?_0x5d2ax3[_0xe4bc[124]]:this[_0xe4bc[1179]][_0xe4bc[1705]](_0x5d2ax2);return 1==mxUtils[_0xe4bc[433]](_0x5d2ax2,mxConstants.STYLE_HORIZONTAL,1)};return !this[_0xe4bc[1737]]()};mxSwimlaneManager[_0xe4bc[202]][_0xe4bc[833]]=function(_0x5d2ax2){if(null!=_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[1703]]()[_0xe4bc[502]]();_0x5d2ax3[_0xe4bc[473]]();try{for(var _0x5d2ax4=0;_0x5d2ax4<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax4++){this[_0xe4bc[2779]](_0x5d2ax2[_0x5d2ax4])||this[_0xe4bc[2781]](_0x5d2ax2[_0x5d2ax4])}}finally{_0x5d2ax3[_0xe4bc[476]]()}}};mxSwimlaneManager[_0xe4bc[202]][_0xe4bc[2781]]=function(_0x5d2ax2){for(var _0x5d2ax3=this[_0xe4bc[1703]]()[_0xe4bc[502]](),_0x5d2ax4=_0x5d2ax3[_0xe4bc[1197]](_0x5d2ax2),_0x5d2ax5=_0x5d2ax3[_0xe4bc[262]](_0x5d2ax4),_0x5d2ax9=null,_0x5d2axa=0;_0x5d2axa<_0x5d2ax5;_0x5d2axa++){var _0x5d2ax12=_0x5d2ax3[_0xe4bc[263]](_0x5d2ax4,_0x5d2axa);if(_0x5d2ax12!=_0x5d2ax2&&!this[_0xe4bc[2779]](_0x5d2ax12)&&(_0x5d2ax9=_0x5d2ax3[_0xe4bc[1721]](_0x5d2ax12),null!=_0x5d2ax9)){break}};null!=_0x5d2ax9&&this[_0xe4bc[2782]](_0x5d2ax2,_0x5d2ax9[_0xe4bc[117]],_0x5d2ax9[_0xe4bc[119]])};mxSwimlaneManager[_0xe4bc[202]][_0xe4bc[837]]=function(_0x5d2ax2){if(null!=_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[1703]]()[_0xe4bc[502]]();_0x5d2ax3[_0xe4bc[473]]();try{for(var _0x5d2ax4=0;_0x5d2ax4<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax4++){if(!this[_0xe4bc[2779]](_0x5d2ax2[_0x5d2ax4])){var _0x5d2ax5=_0x5d2ax3[_0xe4bc[1721]](_0x5d2ax2[_0x5d2ax4]);if(null!=_0x5d2ax5){for(var _0x5d2ax9= new mxRectangle(0,0,_0x5d2ax5[_0xe4bc[117]],_0x5d2ax5[_0xe4bc[119]]),_0x5d2axa=_0x5d2ax2[_0x5d2ax4],_0x5d2ax12=_0x5d2axa;null!=_0x5d2ax12;){var _0x5d2axa=_0x5d2ax12,_0x5d2ax12=_0x5d2ax3[_0xe4bc[1197]](_0x5d2ax12),_0x5d2ax13=this[_0xe4bc[1179]][_0xe4bc[1730]](_0x5d2ax12)?this[_0xe4bc[1179]][_0xe4bc[1731]](_0x5d2ax12): new mxRectangle;_0x5d2ax9[_0xe4bc[117]]+=_0x5d2ax13[_0xe4bc[117]];_0x5d2ax9[_0xe4bc[119]]+=_0x5d2ax13[_0xe4bc[119]]};this[_0xe4bc[2782]](_0x5d2axa,_0x5d2ax9[_0xe4bc[117]],_0x5d2ax9[_0xe4bc[119]])}}}}finally{_0x5d2ax3[_0xe4bc[476]]()}}};mxSwimlaneManager[_0xe4bc[202]][_0xe4bc[2782]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){var _0x5d2ax5=this[_0xe4bc[1703]]()[_0xe4bc[502]]();_0x5d2ax5[_0xe4bc[473]]();try{if(!this[_0xe4bc[2779]](_0x5d2ax2)){var _0x5d2ax9=_0x5d2ax5[_0xe4bc[1721]](_0x5d2ax2);if(null!=_0x5d2ax9){var _0x5d2axa=this[_0xe4bc[2780]](_0x5d2ax2);if(_0x5d2axa&&_0x5d2ax9[_0xe4bc[119]]!=_0x5d2ax4||!_0x5d2axa&&_0x5d2ax9[_0xe4bc[117]]!=_0x5d2ax3){_0x5d2ax9=_0x5d2ax9[_0xe4bc[238]](),_0x5d2axa?_0x5d2ax9[_0xe4bc[119]]=_0x5d2ax4:_0x5d2ax9[_0xe4bc[117]]=_0x5d2ax3,_0x5d2ax5[_0xe4bc[1724]](_0x5d2ax2,_0x5d2ax9)}}};var _0x5d2ax12=this[_0xe4bc[1179]][_0xe4bc[1730]](_0x5d2ax2)?this[_0xe4bc[1179]][_0xe4bc[1731]](_0x5d2ax2): new mxRectangle;_0x5d2ax3-=_0x5d2ax12[_0xe4bc[117]];_0x5d2ax4-=_0x5d2ax12[_0xe4bc[119]];for(var _0x5d2ax13=_0x5d2ax5[_0xe4bc[262]](_0x5d2ax2),_0x5d2ax9=0;_0x5d2ax9<_0x5d2ax13;_0x5d2ax9++){var _0x5d2ax14=_0x5d2ax5[_0xe4bc[263]](_0x5d2ax2,_0x5d2ax9);this[_0xe4bc[2782]](_0x5d2ax14,_0x5d2ax3,_0x5d2ax4)}}finally{_0x5d2ax5[_0xe4bc[476]]()}};mxSwimlaneManager[_0xe4bc[202]][_0xe4bc[515]]=function(){this[_0xe4bc[1178]](null)};function mxTemporaryCellStates(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){this[_0xe4bc[441]]=_0x5d2ax2;_0x5d2ax3=null!=_0x5d2ax3?_0x5d2ax3:1;this[_0xe4bc[2783]]=_0x5d2ax2[_0xe4bc[517]]();this[_0xe4bc[2784]]=_0x5d2ax2[_0xe4bc[2312]]();this[_0xe4bc[2785]]=_0x5d2ax2[_0xe4bc[518]]();_0x5d2ax2[_0xe4bc[1517]]( new mxDictionary);_0x5d2ax2[_0xe4bc[2262]](_0x5d2ax3);if(null!=_0x5d2ax4){_0x5d2ax3=_0x5d2ax2[_0xe4bc[1230]]( new mxCell);for(var _0x5d2ax5=0;_0x5d2ax5<_0x5d2ax4[_0xe4bc[67]];_0x5d2ax5++){_0x5d2ax2[_0xe4bc[2267]](_0x5d2ax3,_0x5d2ax4[_0x5d2ax5])};for(var _0x5d2ax9=null,_0x5d2ax5=0;_0x5d2ax5<_0x5d2ax4[_0xe4bc[67]];_0x5d2ax5++){var _0x5d2axa=_0x5d2ax2[_0xe4bc[2268]](_0x5d2ax3,_0x5d2ax4[_0x5d2ax5]);null==_0x5d2ax9?_0x5d2ax9=_0x5d2axa:_0x5d2ax9[_0xe4bc[99]](_0x5d2axa)};null==_0x5d2ax9&&(_0x5d2ax9= new mxRectangle);_0x5d2ax2[_0xe4bc[2256]](_0x5d2ax9)}}mxTemporaryCellStates[_0xe4bc[202]][_0xe4bc[441]]=null;mxTemporaryCellStates[_0xe4bc[202]][_0xe4bc[2784]]=null;mxTemporaryCellStates[_0xe4bc[202]][_0xe4bc[2783]]=null;mxTemporaryCellStates[_0xe4bc[202]][_0xe4bc[2785]]=null;mxTemporaryCellStates[_0xe4bc[202]][_0xe4bc[515]]=function(){this[_0xe4bc[441]][_0xe4bc[2262]](this[_0xe4bc[2785]]);this[_0xe4bc[441]][_0xe4bc[1517]](this[_0xe4bc[2784]]);this[_0xe4bc[441]][_0xe4bc[2256]](this[_0xe4bc[2783]])};function mxCellStatePreview(_0x5d2ax2){this[_0xe4bc[1179]]=_0x5d2ax2;this[_0xe4bc[2786]]={}}mxCellStatePreview[_0xe4bc[202]][_0xe4bc[1179]]=null;mxCellStatePreview[_0xe4bc[202]][_0xe4bc[2786]]=null;mxCellStatePreview[_0xe4bc[202]][_0xe4bc[2787]]=0;mxCellStatePreview[_0xe4bc[202]][_0xe4bc[1107]]=function(){return 0==this[_0xe4bc[2787]]};mxCellStatePreview[_0xe4bc[202]][_0xe4bc[1194]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){_0x5d2ax5=null!=_0x5d2ax5?_0x5d2ax5:!0;_0x5d2ax9=null!=_0x5d2ax9?_0x5d2ax9:!0;var _0x5d2axa=mxCellPath[_0xe4bc[385]](_0x5d2ax2[_0xe4bc[246]]),_0x5d2ax12=this[_0xe4bc[2786]][_0x5d2axa];null==_0x5d2ax12?(_0x5d2ax12= new mxPoint(_0x5d2ax3,_0x5d2ax4),this[_0xe4bc[2786]][_0x5d2axa]=_0x5d2ax12,this[_0xe4bc[2787]]++):_0x5d2ax5?(_0x5d2ax12[_0xe4bc[2788]]+=_0x5d2ax3,_0x5d2ax12[_0xe4bc[2789]]+=_0x5d2ax4):(_0x5d2ax12[_0xe4bc[2788]]=_0x5d2ax3,_0x5d2ax12[_0xe4bc[2789]]=_0x5d2ax4);_0x5d2ax9&&this[_0xe4bc[2790]](_0x5d2ax2);return _0x5d2ax12};mxCellStatePreview[_0xe4bc[202]][_0xe4bc[539]]=function(_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[1179]][_0xe4bc[502]](),_0x5d2ax4=_0x5d2ax3[_0xe4bc[501]](),_0x5d2ax5;for(_0x5d2ax5 in this[_0xe4bc[2786]]){var _0x5d2ax9=mxCellPath[_0xe4bc[2791]](_0x5d2ax4,_0x5d2ax5),_0x5d2axa=this[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax9),_0x5d2ax12=this[_0xe4bc[2786]][_0x5d2ax5],_0x5d2ax9=this[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax3[_0xe4bc[1197]](_0x5d2ax9));this[_0xe4bc[2792]](_0x5d2ax9,_0x5d2axa,_0x5d2ax12[_0xe4bc[235]],_0x5d2ax12[_0xe4bc[236]])};for(_0x5d2ax5 in this[_0xe4bc[2786]]){_0x5d2ax9=mxCellPath[_0xe4bc[2791]](_0x5d2ax4,_0x5d2ax5),_0x5d2axa=this[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax9),_0x5d2ax12=this[_0xe4bc[2786]][_0x5d2ax5],_0x5d2ax9=this[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax3[_0xe4bc[1197]](_0x5d2ax9)),this[_0xe4bc[2793]](_0x5d2ax9,_0x5d2axa,_0x5d2ax12[_0xe4bc[235]],_0x5d2ax12[_0xe4bc[236]],_0x5d2ax2)}};mxCellStatePreview[_0xe4bc[202]][_0xe4bc[2792]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){if(null!=_0x5d2ax3){var _0x5d2ax9=this[_0xe4bc[1179]][_0xe4bc[502]]();if(_0x5d2ax9[_0xe4bc[1193]](_0x5d2ax3[_0xe4bc[246]])){_0x5d2ax3[_0xe4bc[2080]]= !0;this[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[2267]](_0x5d2ax2,_0x5d2ax3[_0xe4bc[246]]);_0x5d2ax2=_0x5d2ax9[_0xe4bc[1721]](_0x5d2ax3[_0xe4bc[246]]);var _0x5d2axa=mxCellPath[_0xe4bc[385]](_0x5d2ax3[_0xe4bc[246]]);if((0!=_0x5d2ax4||0!=_0x5d2ax5)&&null!=_0x5d2ax2&&(!_0x5d2ax2[_0xe4bc[1500]]||null!=this[_0xe4bc[2786]][_0x5d2axa])){_0x5d2ax3[_0xe4bc[235]]+=_0x5d2ax4,_0x5d2ax3[_0xe4bc[236]]+=_0x5d2ax5}};_0x5d2ax2=_0x5d2ax9[_0xe4bc[262]](_0x5d2ax3[_0xe4bc[246]]);for(_0x5d2axa=0;_0x5d2axa<_0x5d2ax2;_0x5d2axa++){this[_0xe4bc[2792]](_0x5d2ax3,this[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax9[_0xe4bc[263]](_0x5d2ax3[_0xe4bc[246]],_0x5d2axa)),_0x5d2ax4,_0x5d2ax5)}}};mxCellStatePreview[_0xe4bc[202]][_0xe4bc[2793]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){if(null!=_0x5d2ax3){_0x5d2ax3[_0xe4bc[2080]]= !0;this[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[2268]](_0x5d2ax2,_0x5d2ax3[_0xe4bc[246]]);var _0x5d2axa=mxCellPath[_0xe4bc[385]](_0x5d2ax3[_0xe4bc[246]]),_0x5d2ax12=this[_0xe4bc[1179]][_0xe4bc[502]](),_0x5d2ax13=this[_0xe4bc[1179]][_0xe4bc[1198]](_0x5d2ax3[_0xe4bc[246]]);if((0!=_0x5d2ax4||0!=_0x5d2ax5)&&null!=_0x5d2ax13&&_0x5d2ax13[_0xe4bc[1500]]&&_0x5d2ax12[_0xe4bc[1193]](_0x5d2ax3[_0xe4bc[246]])&&(null==_0x5d2ax2||_0x5d2ax12[_0xe4bc[1193]](_0x5d2ax2[_0xe4bc[246]])||null!=this[_0xe4bc[2786]][_0x5d2axa])){_0x5d2ax3[_0xe4bc[235]]+=_0x5d2ax4,_0x5d2ax3[_0xe4bc[236]]+=_0x5d2ax5,this[_0xe4bc[1179]][_0xe4bc[259]][_0xe4bc[258]](_0x5d2ax3)};null!=_0x5d2ax9&&_0x5d2ax9(_0x5d2ax3);_0x5d2ax2=_0x5d2ax12[_0xe4bc[262]](_0x5d2ax3[_0xe4bc[246]]);for(_0x5d2axa=0;_0x5d2axa<_0x5d2ax2;_0x5d2axa++){this[_0xe4bc[2793]](_0x5d2ax3,this[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax12[_0xe4bc[263]](_0x5d2ax3[_0xe4bc[246]],_0x5d2axa)),_0x5d2ax4,_0x5d2ax5,_0x5d2ax9)}}};mxCellStatePreview[_0xe4bc[202]][_0xe4bc[2790]]=function(_0x5d2ax2){for(var _0x5d2ax3=this[_0xe4bc[1179]][_0xe4bc[502]](),_0x5d2ax4=_0x5d2ax3[_0xe4bc[1707]](_0x5d2ax2[_0xe4bc[246]]),_0x5d2ax5=0;_0x5d2ax5<_0x5d2ax4;_0x5d2ax5++){var _0x5d2ax9=this[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax3[_0xe4bc[1708]](_0x5d2ax2[_0xe4bc[246]],_0x5d2ax5));null!=_0x5d2ax9&&this[_0xe4bc[1194]](_0x5d2ax9,0,0)}};function mxConnectionConstraint(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[2546]]=_0x5d2ax2;this[_0xe4bc[591]]=null!=_0x5d2ax3?_0x5d2ax3:!0}mxConnectionConstraint[_0xe4bc[202]][_0xe4bc[2546]]=null;mxConnectionConstraint[_0xe4bc[202]][_0xe4bc[591]]=null;function mxGraphHandler(_0x5d2ax2){this[_0xe4bc[1179]]=_0x5d2ax2;this[_0xe4bc[1179]][_0xe4bc[1133]](this);this[_0xe4bc[2730]]=mxUtils[_0xe4bc[885]](this,function(){this[_0xe4bc[2794]]()});this[_0xe4bc[1179]][_0xe4bc[169]](mxEvent.PAN,this[_0xe4bc[2730]])}mxGraphHandler[_0xe4bc[202]][_0xe4bc[1179]]=null;mxGraphHandler[_0xe4bc[202]][_0xe4bc[2795]]=mxClient[_0xe4bc[80]]?20:50;mxGraphHandler[_0xe4bc[202]][_0xe4bc[984]]= !0;mxGraphHandler[_0xe4bc[202]][_0xe4bc[2796]]= !0;mxGraphHandler[_0xe4bc[202]][_0xe4bc[2797]]= !0;mxGraphHandler[_0xe4bc[202]][_0xe4bc[2798]]= !0;mxGraphHandler[_0xe4bc[202]][_0xe4bc[990]]= !1;mxGraphHandler[_0xe4bc[202]][_0xe4bc[2799]]=null;mxGraphHandler[_0xe4bc[202]][_0xe4bc[2800]]=null;mxGraphHandler[_0xe4bc[202]][_0xe4bc[2801]]=null;mxGraphHandler[_0xe4bc[202]][_0xe4bc[2802]]= !0;mxGraphHandler[_0xe4bc[202]][_0xe4bc[2803]]= !0;mxGraphHandler[_0xe4bc[202]][_0xe4bc[846]]= !0;mxGraphHandler[_0xe4bc[202]][_0xe4bc[2804]]= !1;mxGraphHandler[_0xe4bc[202]][_0xe4bc[2805]]= !0;mxGraphHandler[_0xe4bc[202]][_0xe4bc[923]]=6;mxGraphHandler[_0xe4bc[202]][_0xe4bc[2806]]=_0xe4bc[586];mxGraphHandler[_0xe4bc[202]][_0xe4bc[2807]]= !1;mxGraphHandler[_0xe4bc[202]][_0xe4bc[253]]=null;mxGraphHandler[_0xe4bc[202]][_0xe4bc[2808]]= !1;mxGraphHandler[_0xe4bc[202]][_0xe4bc[2809]]= !0;mxGraphHandler[_0xe4bc[202]][_0xe4bc[994]]=function(){return this[_0xe4bc[984]]};mxGraphHandler[_0xe4bc[202]][_0xe4bc[995]]=function(_0x5d2ax2){this[_0xe4bc[984]]=_0x5d2ax2};mxGraphHandler[_0xe4bc[202]][_0xe4bc[2810]]=function(){return this[_0xe4bc[2797]]};mxGraphHandler[_0xe4bc[202]][_0xe4bc[2811]]=function(_0x5d2ax2){this[_0xe4bc[2797]]=_0x5d2ax2};mxGraphHandler[_0xe4bc[202]][_0xe4bc[2812]]=function(){return this[_0xe4bc[2798]]};mxGraphHandler[_0xe4bc[202]][_0xe4bc[2813]]=function(_0x5d2ax2){this[_0xe4bc[2798]]=_0x5d2ax2};mxGraphHandler[_0xe4bc[202]][_0xe4bc[2814]]=function(){return this[_0xe4bc[2803]]};mxGraphHandler[_0xe4bc[202]][_0xe4bc[2815]]=function(_0x5d2ax2){this[_0xe4bc[2803]]=_0x5d2ax2};mxGraphHandler[_0xe4bc[202]][_0xe4bc[2816]]=function(){return this[_0xe4bc[846]]};mxGraphHandler[_0xe4bc[202]][_0xe4bc[2817]]=function(_0x5d2ax2){this[_0xe4bc[846]]=_0x5d2ax2};mxGraphHandler[_0xe4bc[202]][_0xe4bc[2818]]=function(_0x5d2ax2){return _0x5d2ax2[_0xe4bc[736]]()};mxGraphHandler[_0xe4bc[202]][_0xe4bc[2819]]=function(_0x5d2ax2){return this[_0xe4bc[1179]][_0xe4bc[2692]](_0x5d2ax2)};mxGraphHandler[_0xe4bc[202]][_0xe4bc[787]]=function(_0x5d2ax2,_0x5d2ax3){if(!_0x5d2ax3[_0xe4bc[721]]()&&this[_0xe4bc[994]]()&&this[_0xe4bc[1179]][_0xe4bc[994]]()&&!this[_0xe4bc[1179]][_0xe4bc[2579]](_0x5d2ax3[_0xe4bc[727]]())&&null!=_0x5d2ax3[_0xe4bc[248]]()){var _0x5d2ax4=this[_0xe4bc[2818]](_0x5d2ax3);this[_0xe4bc[246]]=null;this[_0xe4bc[2820]]=this[_0xe4bc[2819]](_0x5d2ax4);this[_0xe4bc[2814]]()&&!this[_0xe4bc[2820]]&&this[_0xe4bc[1179]][_0xe4bc[2459]](_0x5d2ax4,_0x5d2ax3[_0xe4bc[727]]());if(this[_0xe4bc[2812]]()){var _0x5d2ax5=this[_0xe4bc[1179]][_0xe4bc[251]],_0x5d2ax9=_0x5d2ax5[_0xe4bc[1721]](_0x5d2ax4);this[_0xe4bc[1179]][_0xe4bc[1712]](_0x5d2ax4)&&(!_0x5d2ax5[_0xe4bc[250]](_0x5d2ax4)||1<this[_0xe4bc[1179]][_0xe4bc[2694]]()||null!=_0x5d2ax9[_0xe4bc[1525]]&&0<_0x5d2ax9[_0xe4bc[1525]][_0xe4bc[67]]||null==_0x5d2ax5[_0xe4bc[1709]](_0x5d2ax4,!0)||null==_0x5d2ax5[_0xe4bc[1709]](_0x5d2ax4,!1)||this[_0xe4bc[1179]][_0xe4bc[2406]]||this[_0xe4bc[1179]][_0xe4bc[2574]](_0x5d2ax3[_0xe4bc[727]]())&&this[_0xe4bc[1179]][_0xe4bc[2617]]())&&this[_0xe4bc[861]](_0x5d2ax4,_0x5d2ax3[_0xe4bc[730]](),_0x5d2ax3[_0xe4bc[732]]());this[_0xe4bc[2821]]= !0;!mxClient[_0xe4bc[75]]&&!mxClient[_0xe4bc[76]]||_0xe4bc[2822]!=_0x5d2ax3[_0xe4bc[728]]()[_0xe4bc[301]]?_0x5d2ax3[_0xe4bc[722]]():mxClient[_0xe4bc[75]]&&_0xe4bc[2822]==_0x5d2ax3[_0xe4bc[728]]()[_0xe4bc[301]]&&(this[_0xe4bc[2821]]= !1,this[_0xe4bc[2823]]=null)}}};mxGraphHandler[_0xe4bc[202]][_0xe4bc[1010]]=function(){var _0x5d2ax2=this[_0xe4bc[1179]][_0xe4bc[902]](),_0x5d2ax3=this[_0xe4bc[1179]][_0xe4bc[502]](),_0x5d2ax4=mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){return null!=this[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax2)&&_0x5d2ax3[_0xe4bc[1193]](_0x5d2ax2)&&null!=_0x5d2ax3[_0xe4bc[1721]](_0x5d2ax2)&&!_0x5d2ax3[_0xe4bc[1721]](_0x5d2ax2)[_0xe4bc[1500]]});return this[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[2313]](_0x5d2ax3[_0xe4bc[1921]](_0x5d2ax4,_0x5d2ax2))};mxGraphHandler[_0xe4bc[202]][_0xe4bc[2690]]=function(_0x5d2ax2){return !this[_0xe4bc[2820]]&&this[_0xe4bc[1179]][_0xe4bc[1712]](_0x5d2ax2)?[_0x5d2ax2]:this[_0xe4bc[1179]][_0xe4bc[2629]](this[_0xe4bc[1179]][_0xe4bc[897]]())};mxGraphHandler[_0xe4bc[202]][_0xe4bc[2824]]=function(_0x5d2ax2){_0x5d2ax2=this[_0xe4bc[1613]](_0x5d2ax2);null!=_0x5d2ax2&&(_0x5d2ax2[_0xe4bc[244]](-1,-1),_0x5d2ax2[_0xe4bc[117]]<this[_0xe4bc[923]]&&(_0x5d2ax2[_0xe4bc[235]]-=(this[_0xe4bc[923]]-_0x5d2ax2[_0xe4bc[117]])/2,_0x5d2ax2[_0xe4bc[117]]=this[_0xe4bc[923]]),_0x5d2ax2[_0xe4bc[119]]<this[_0xe4bc[923]]&&(_0x5d2ax2[_0xe4bc[236]]-=(this[_0xe4bc[923]]-_0x5d2ax2[_0xe4bc[119]])/2,_0x5d2ax2[_0xe4bc[119]]=this[_0xe4bc[923]]));return _0x5d2ax2};mxGraphHandler[_0xe4bc[202]][_0xe4bc[1613]]=function(_0x5d2ax2){var _0x5d2ax3=null;if(null!=_0x5d2ax2&&0<_0x5d2ax2[_0xe4bc[67]]){for(var _0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[502]](),_0x5d2ax5=0;_0x5d2ax5<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax5++){if(_0x5d2ax4[_0xe4bc[1193]](_0x5d2ax2[_0x5d2ax5])||_0x5d2ax4[_0xe4bc[250]](_0x5d2ax2[_0x5d2ax5])){var _0x5d2ax9=this[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax2[_0x5d2ax5]);if(null!=_0x5d2ax9){var _0x5d2axa=_0x5d2ax9;_0x5d2ax4[_0xe4bc[1193]](_0x5d2ax2[_0x5d2ax5])&&(null!=_0x5d2ax9[_0xe4bc[253]]&&null!=_0x5d2ax9[_0xe4bc[253]][_0xe4bc[1563]])&&(_0x5d2axa=_0x5d2ax9[_0xe4bc[253]][_0xe4bc[1563]]);null==_0x5d2ax3?_0x5d2ax3= new mxRectangle(_0x5d2axa[_0xe4bc[235]],_0x5d2axa[_0xe4bc[236]],_0x5d2axa[_0xe4bc[117]],_0x5d2axa[_0xe4bc[119]]):_0x5d2ax3[_0xe4bc[99]](_0x5d2axa)}}}};return _0x5d2ax3};mxGraphHandler[_0xe4bc[202]][_0xe4bc[2825]]=function(_0x5d2ax2){_0x5d2ax2= new mxRectangleShape(_0x5d2ax2,null,this[_0xe4bc[2806]]);_0x5d2ax2[_0xe4bc[1522]]= !0;this[_0xe4bc[2807]]?(_0x5d2ax2[_0xe4bc[507]]=mxConstants[_0xe4bc[1656]],_0x5d2ax2[_0xe4bc[176]](this[_0xe4bc[1179]][_0xe4bc[526]])):(_0x5d2ax2[_0xe4bc[507]]=this[_0xe4bc[1179]][_0xe4bc[507]]!=mxConstants[_0xe4bc[508]]?mxConstants[_0xe4bc[1523]]:mxConstants[_0xe4bc[508]],_0x5d2ax2[_0xe4bc[176]](this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[1524]]()),_0x5d2ax2[_0xe4bc[1229]]= !1);return _0x5d2ax2};mxGraphHandler[_0xe4bc[202]][_0xe4bc[861]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){this[_0xe4bc[246]]=_0x5d2ax2;this[_0xe4bc[2823]]=mxUtils[_0xe4bc[2196]](this[_0xe4bc[1179]][_0xe4bc[526]],_0x5d2ax3,_0x5d2ax4);this[_0xe4bc[895]]=this[_0xe4bc[2690]](this[_0xe4bc[246]]);this[_0xe4bc[1562]]=this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[1799]](this[_0xe4bc[895]]);this[_0xe4bc[2826]]=this[_0xe4bc[2824]](this[_0xe4bc[895]]);this[_0xe4bc[990]]&&(this[_0xe4bc[2799]]= new mxGuide(this[_0xe4bc[1179]],this[_0xe4bc[1010]]()))};mxGraphHandler[_0xe4bc[202]][_0xe4bc[2827]]=function(_0x5d2ax2){return null!=this[_0xe4bc[2799]]?this[_0xe4bc[2799]][_0xe4bc[1019]](_0x5d2ax2[_0xe4bc[727]]()):!0};mxGraphHandler[_0xe4bc[202]][_0xe4bc[1021]]=function(_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[2808]]?this[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[255]]:1;_0x5d2ax2[_0xe4bc[235]]=this[_0xe4bc[1179]][_0xe4bc[1021]](_0x5d2ax2[_0xe4bc[235]]/_0x5d2ax3)*_0x5d2ax3;_0x5d2ax2[_0xe4bc[236]]=this[_0xe4bc[1179]][_0xe4bc[1021]](_0x5d2ax2[_0xe4bc[236]]/_0x5d2ax3)*_0x5d2ax3;return _0x5d2ax2};mxGraphHandler[_0xe4bc[202]][_0xe4bc[788]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=this[_0xe4bc[1179]];if(!_0x5d2ax3[_0xe4bc[721]]()&&_0x5d2ax4[_0xe4bc[1009]]&&null!=this[_0xe4bc[246]]&&null!=this[_0xe4bc[2823]]&&null!=this[_0xe4bc[1562]]){var _0x5d2ax5=mxUtils[_0xe4bc[2196]](_0x5d2ax4[_0xe4bc[526]],_0x5d2ax3[_0xe4bc[730]](),_0x5d2ax3[_0xe4bc[732]]()),_0x5d2ax9=_0x5d2ax5[_0xe4bc[235]]-this[_0xe4bc[2823]][_0xe4bc[235]],_0x5d2axa=_0x5d2ax5[_0xe4bc[236]]-this[_0xe4bc[2823]][_0xe4bc[236]],_0x5d2ax5=_0x5d2ax4[_0xe4bc[2353]];if(null!=this[_0xe4bc[253]]||Math[_0xe4bc[425]](_0x5d2ax9)>_0x5d2ax5||Math[_0xe4bc[425]](_0x5d2axa)>_0x5d2ax5){null==this[_0xe4bc[1016]]&&(this[_0xe4bc[1016]]= new mxCellHighlight(this[_0xe4bc[1179]],mxConstants.DROP_TARGET_COLOR,3));null==this[_0xe4bc[253]]&&(this[_0xe4bc[253]]=this[_0xe4bc[2825]](this[_0xe4bc[1562]]));var _0x5d2ax12=_0x5d2ax4[_0xe4bc[1018]](_0x5d2ax3[_0xe4bc[727]]()),_0x5d2ax5=!0;if(null!=this[_0xe4bc[2799]]&&this[_0xe4bc[2827]](_0x5d2ax3)){_0x5d2axa=this[_0xe4bc[2799]][_0xe4bc[582]](this[_0xe4bc[1562]], new mxPoint(_0x5d2ax9,_0x5d2axa),_0x5d2ax12),_0x5d2ax5= !1,_0x5d2ax9=_0x5d2axa[_0xe4bc[235]],_0x5d2axa=_0x5d2axa[_0xe4bc[236]]}else {if(_0x5d2ax12){var _0x5d2ax13=_0x5d2ax4[_0xe4bc[249]]()[_0xe4bc[513]],_0x5d2ax14=_0x5d2ax4[_0xe4bc[249]]()[_0xe4bc[255]],_0x5d2ax12=this[_0xe4bc[1562]][_0xe4bc[235]]-(_0x5d2ax4[_0xe4bc[1021]](this[_0xe4bc[1562]][_0xe4bc[235]]/_0x5d2ax14-_0x5d2ax13[_0xe4bc[235]])+_0x5d2ax13[_0xe4bc[235]])*_0x5d2ax14,_0x5d2ax13=this[_0xe4bc[1562]][_0xe4bc[236]]-(_0x5d2ax4[_0xe4bc[1021]](this[_0xe4bc[1562]][_0xe4bc[236]]/_0x5d2ax14-_0x5d2ax13[_0xe4bc[236]])+_0x5d2ax13[_0xe4bc[236]])*_0x5d2ax14,_0x5d2axa=this[_0xe4bc[1021]]( new mxPoint(_0x5d2ax9,_0x5d2axa)),_0x5d2ax9=_0x5d2axa[_0xe4bc[235]]-_0x5d2ax12,_0x5d2axa=_0x5d2axa[_0xe4bc[236]]-_0x5d2ax13}};null!=this[_0xe4bc[2799]]&&_0x5d2ax5&&this[_0xe4bc[2799]][_0xe4bc[801]]();_0x5d2ax4[_0xe4bc[2578]](_0x5d2ax3[_0xe4bc[727]]())&&(Math[_0xe4bc[425]](_0x5d2ax9)>Math[_0xe4bc[425]](_0x5d2axa)?_0x5d2axa=0:_0x5d2ax9=0);this[_0xe4bc[2800]]=_0x5d2ax9;this[_0xe4bc[2801]]=_0x5d2axa;this[_0xe4bc[2794]]();_0x5d2ax5=null;_0x5d2axa=_0x5d2ax3[_0xe4bc[736]]();_0x5d2ax4[_0xe4bc[1015]]()&&this[_0xe4bc[2796]]&&(_0x5d2ax5=_0x5d2ax4[_0xe4bc[564]](this[_0xe4bc[895]],_0x5d2ax3[_0xe4bc[727]](),_0x5d2axa));_0x5d2ax12=_0x5d2ax5;for(_0x5d2ax13=_0x5d2ax4[_0xe4bc[502]]();null!=_0x5d2ax12&&_0x5d2ax12!=this[_0xe4bc[895]][0];){_0x5d2ax12=_0x5d2ax13[_0xe4bc[1197]](_0x5d2ax12)};var _0x5d2ax14=_0x5d2ax4[_0xe4bc[2574]](_0x5d2ax3[_0xe4bc[727]]())&&_0x5d2ax4[_0xe4bc[2617]]()&&this[_0xe4bc[2810]](),_0x5d2ax9=_0x5d2ax4[_0xe4bc[249]]()[_0xe4bc[248]](_0x5d2ax5),_0x5d2ax15=!1;null!=_0x5d2ax9&&null==_0x5d2ax12&&(_0x5d2ax13[_0xe4bc[1197]](this[_0xe4bc[246]])!=_0x5d2ax5||_0x5d2ax14)?(this[_0xe4bc[772]]!=_0x5d2ax5&&(this[_0xe4bc[772]]=_0x5d2ax5,this[_0xe4bc[2828]](mxConstants.DROP_TARGET_COLOR)),_0x5d2ax15= !0):(this[_0xe4bc[772]]=null,this[_0xe4bc[2804]]&&(null!=_0x5d2axa&&1==this[_0xe4bc[895]][_0xe4bc[67]]&&_0x5d2ax4[_0xe4bc[502]]()[_0xe4bc[1193]](_0x5d2axa)&&_0x5d2ax4[_0xe4bc[2565]](_0x5d2axa))&&(_0x5d2ax9=_0x5d2ax4[_0xe4bc[249]]()[_0xe4bc[248]](_0x5d2axa),null!=_0x5d2ax9&&(_0x5d2ax4=null==_0x5d2ax4[_0xe4bc[2500]](null,this[_0xe4bc[246]],_0x5d2axa)?mxConstants[_0xe4bc[2829]]:mxConstants[_0xe4bc[2830]],this[_0xe4bc[2828]](_0x5d2ax4),_0x5d2ax15= !0)));null!=_0x5d2ax9&&_0x5d2ax15?this[_0xe4bc[1016]][_0xe4bc[1016]](_0x5d2ax9):this[_0xe4bc[1016]][_0xe4bc[801]]()};_0x5d2ax3[_0xe4bc[722]]();mxEvent[_0xe4bc[722]](_0x5d2ax3[_0xe4bc[727]]())}else {if((this[_0xe4bc[2812]]()||this[_0xe4bc[2810]]())&&this[_0xe4bc[2802]]&&!_0x5d2ax3[_0xe4bc[721]]()&&null!=_0x5d2ax3[_0xe4bc[248]]()&&!_0x5d2ax4[_0xe4bc[1009]]){_0x5d2ax9=_0x5d2ax4[_0xe4bc[2599]](_0x5d2ax3[_0xe4bc[736]]()),null==_0x5d2ax9&&(_0x5d2ax4[_0xe4bc[994]]()&&_0x5d2ax4[_0xe4bc[1712]](_0x5d2ax3[_0xe4bc[736]]()))&&(_0x5d2ax9=_0x5d2ax4[_0xe4bc[502]]()[_0xe4bc[250]](_0x5d2ax3[_0xe4bc[736]]())?mxConstants[_0xe4bc[2831]]:mxConstants[_0xe4bc[2832]]),_0x5d2ax3[_0xe4bc[248]]()[_0xe4bc[1609]](_0x5d2ax9),_0x5d2ax3[_0xe4bc[722]]()}}};mxGraphHandler[_0xe4bc[202]][_0xe4bc[2794]]=function(){null!=this[_0xe4bc[253]]&&(this[_0xe4bc[253]][_0xe4bc[1562]]= new mxRectangle(Math[_0xe4bc[488]](this[_0xe4bc[2826]][_0xe4bc[235]]+this[_0xe4bc[2800]]-this[_0xe4bc[1179]][_0xe4bc[1136]]),Math[_0xe4bc[488]](this[_0xe4bc[2826]][_0xe4bc[236]]+this[_0xe4bc[2801]]-this[_0xe4bc[1179]][_0xe4bc[1137]]),this[_0xe4bc[2826]][_0xe4bc[117]],this[_0xe4bc[2826]][_0xe4bc[119]]),this[_0xe4bc[253]][_0xe4bc[258]]())};mxGraphHandler[_0xe4bc[202]][_0xe4bc[2828]]=function(_0x5d2ax2){null!=this[_0xe4bc[1016]]&&this[_0xe4bc[1016]][_0xe4bc[2828]](_0x5d2ax2)};mxGraphHandler[_0xe4bc[202]][_0xe4bc[789]]=function(_0x5d2ax2,_0x5d2ax3){if(!_0x5d2ax3[_0xe4bc[721]]()){var _0x5d2ax4=this[_0xe4bc[1179]];if(null!=this[_0xe4bc[246]]&&null!=this[_0xe4bc[2823]]&&null!=this[_0xe4bc[253]]&&null!=this[_0xe4bc[2800]]&&null!=this[_0xe4bc[2801]]){var _0x5d2ax5=_0x5d2ax4[_0xe4bc[249]]()[_0xe4bc[255]],_0x5d2ax9=_0x5d2ax4[_0xe4bc[2574]](_0x5d2ax3[_0xe4bc[727]]())&&_0x5d2ax4[_0xe4bc[2617]]()&&this[_0xe4bc[2810]](),_0x5d2axa=this[_0xe4bc[2800]]/_0x5d2ax5,_0x5d2ax5=this[_0xe4bc[2801]]/_0x5d2ax5,_0x5d2ax12=_0x5d2ax3[_0xe4bc[736]]();this[_0xe4bc[2804]]&&null==this[_0xe4bc[772]]&&null!=_0x5d2ax12&&_0x5d2ax4[_0xe4bc[502]]()[_0xe4bc[1193]](_0x5d2ax12)&&_0x5d2ax4[_0xe4bc[2565]](_0x5d2ax12)&&_0x5d2ax4[_0xe4bc[2581]](null,this[_0xe4bc[246]],_0x5d2ax12)?_0x5d2ax4[_0xe4bc[2433]][_0xe4bc[807]](this[_0xe4bc[246]],_0x5d2ax12,_0x5d2ax3[_0xe4bc[727]]()):(_0x5d2ax12=this[_0xe4bc[772]],_0x5d2ax4[_0xe4bc[2655]]()&&_0x5d2ax4[_0xe4bc[2686]](_0x5d2ax12,this[_0xe4bc[895]],_0x5d2ax3[_0xe4bc[727]]())?_0x5d2ax4[_0xe4bc[853]](_0x5d2ax12,this[_0xe4bc[895]],null,_0x5d2axa,_0x5d2ax5):this[_0xe4bc[834]](this[_0xe4bc[895]],_0x5d2axa,_0x5d2ax5,_0x5d2ax9,this[_0xe4bc[772]],_0x5d2ax3[_0xe4bc[727]]()))}else {this[_0xe4bc[2814]]()&&(this[_0xe4bc[2820]]&&null!=this[_0xe4bc[246]])&&this[_0xe4bc[2833]](_0x5d2ax3)}};this[_0xe4bc[2821]]&&_0x5d2ax3[_0xe4bc[722]]();this[_0xe4bc[862]]()};mxGraphHandler[_0xe4bc[202]][_0xe4bc[2833]]=function(_0x5d2ax2){this[_0xe4bc[1179]][_0xe4bc[2459]](this[_0xe4bc[246]],_0x5d2ax2[_0xe4bc[727]]())};mxGraphHandler[_0xe4bc[202]][_0xe4bc[862]]=function(){this[_0xe4bc[2834]]();this[_0xe4bc[2820]]=this[_0xe4bc[2821]]= !1;this[_0xe4bc[772]]=this[_0xe4bc[246]]=this[_0xe4bc[2823]]=this[_0xe4bc[2835]]=this[_0xe4bc[2801]]=this[_0xe4bc[2800]]=null};mxGraphHandler[_0xe4bc[202]][_0xe4bc[2836]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){if(this[_0xe4bc[1179]][_0xe4bc[502]]()[_0xe4bc[1193]](_0x5d2ax2)){_0x5d2ax2=this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[248]](_0x5d2ax2);_0x5d2ax4=mxUtils[_0xe4bc[2196]](this[_0xe4bc[1179]][_0xe4bc[526]],mxEvent[_0xe4bc[731]](_0x5d2ax4),mxEvent[_0xe4bc[733]](_0x5d2ax4));var _0x5d2ax5=mxUtils[_0xe4bc[431]](mxUtils[_0xe4bc[433]](_0x5d2ax2[_0xe4bc[124]],mxConstants.STYLE_ROTATION)||0);if(0!=_0x5d2ax5){_0x5d2ax3=Math[_0xe4bc[426]](-_0x5d2ax5);var _0x5d2ax5=Math[_0xe4bc[427]](-_0x5d2ax5),_0x5d2ax9= new mxPoint(_0x5d2ax2[_0xe4bc[241]](),_0x5d2ax2[_0xe4bc[242]]());_0x5d2ax4=mxUtils[_0xe4bc[432]](_0x5d2ax4,_0x5d2ax3,_0x5d2ax5,_0x5d2ax9)};return null!=_0x5d2ax2&&!mxUtils[_0xe4bc[442]](_0x5d2ax2,_0x5d2ax4[_0xe4bc[235]],_0x5d2ax4[_0xe4bc[236]])};return !1};mxGraphHandler[_0xe4bc[202]][_0xe4bc[834]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa){_0x5d2ax5&&(_0x5d2ax2=this[_0xe4bc[1179]][_0xe4bc[2615]](_0x5d2ax2));null==_0x5d2ax9&&(this[_0xe4bc[2816]]()&&this[_0xe4bc[2836]](this[_0xe4bc[1179]][_0xe4bc[502]]()[_0xe4bc[1197]](this[_0xe4bc[246]]),_0x5d2ax2,_0x5d2axa))&&(_0x5d2ax9=this[_0xe4bc[1179]][_0xe4bc[902]]());_0x5d2ax2=this[_0xe4bc[1179]][_0xe4bc[834]](_0x5d2ax2,_0x5d2ax3-this[_0xe4bc[1179]][_0xe4bc[1136]]/this[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[255]],_0x5d2ax4-this[_0xe4bc[1179]][_0xe4bc[1137]]/this[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[255]],_0x5d2ax5,_0x5d2ax9,_0x5d2axa);this[_0xe4bc[2814]]()&&this[_0xe4bc[2805]]&&this[_0xe4bc[1179]][_0xe4bc[2564]](_0x5d2ax2[0]);_0x5d2ax5&&this[_0xe4bc[1179]][_0xe4bc[904]](_0x5d2ax2)};mxGraphHandler[_0xe4bc[202]][_0xe4bc[2834]]=function(){null!=this[_0xe4bc[253]]&&(this[_0xe4bc[253]][_0xe4bc[515]](),this[_0xe4bc[253]]=null);null!=this[_0xe4bc[2799]]&&(this[_0xe4bc[2799]][_0xe4bc[515]](),this[_0xe4bc[2799]]=null);null!=this[_0xe4bc[1016]]&&(this[_0xe4bc[1016]][_0xe4bc[515]](),this[_0xe4bc[1016]]=null)};mxGraphHandler[_0xe4bc[202]][_0xe4bc[515]]=function(){this[_0xe4bc[1179]][_0xe4bc[1148]](this);this[_0xe4bc[1179]][_0xe4bc[745]](this[_0xe4bc[2730]]);this[_0xe4bc[2834]]()};function mxPanningHandler(_0x5d2ax2,_0x5d2ax3){null!=_0x5d2ax2&&(this[_0xe4bc[1179]]=_0x5d2ax2,this[_0xe4bc[1033]]=_0x5d2ax3,this[_0xe4bc[1179]][_0xe4bc[1133]](this),this[_0xe4bc[176]]())}mxPanningHandler[_0xe4bc[202]]= new mxPopupMenu;mxPanningHandler[_0xe4bc[202]][_0xe4bc[196]]=mxPanningHandler;mxPanningHandler[_0xe4bc[202]][_0xe4bc[1179]]=null;mxPanningHandler[_0xe4bc[202]][_0xe4bc[2837]]=null;mxPanningHandler[_0xe4bc[202]][_0xe4bc[2838]]=null;mxPanningHandler[_0xe4bc[202]][_0xe4bc[2839]]= !0;mxPanningHandler[_0xe4bc[202]][_0xe4bc[2840]]= !1;mxPanningHandler[_0xe4bc[202]][_0xe4bc[2841]]= !0;mxPanningHandler[_0xe4bc[202]][_0xe4bc[2842]]= !0;mxPanningHandler[_0xe4bc[202]][_0xe4bc[2843]]= !1;mxPanningHandler[_0xe4bc[202]][_0xe4bc[2844]]= !0;mxPanningHandler[_0xe4bc[202]][_0xe4bc[2845]]= !1;mxPanningHandler[_0xe4bc[202]][_0xe4bc[2431]]= !0;mxPanningHandler[_0xe4bc[202]][_0xe4bc[2846]]=function(){return this[_0xe4bc[2431]]};mxPanningHandler[_0xe4bc[202]][_0xe4bc[2847]]=function(_0x5d2ax2){this[_0xe4bc[2431]]=_0x5d2ax2};mxPanningHandler[_0xe4bc[202]][_0xe4bc[176]]=function(){mxPopupMenu[_0xe4bc[202]][_0xe4bc[176]][_0xe4bc[183]](this);mxEvent[_0xe4bc[169]](this[_0xe4bc[485]],mxClient[_0xe4bc[754]]?_0xe4bc[756]:_0xe4bc[752],mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){this[_0xe4bc[1179]][_0xe4bc[2276]][_0xe4bc[801]]()}))};mxPanningHandler[_0xe4bc[202]][_0xe4bc[2848]]=function(_0x5d2ax2){var _0x5d2ax3=_0x5d2ax2[_0xe4bc[727]]();return this[_0xe4bc[2840]]&&(this[_0xe4bc[2843]]||null==_0x5d2ax2[_0xe4bc[248]]())&&mxEvent[_0xe4bc[1158]](_0x5d2ax3)||mxEvent[_0xe4bc[775]](_0x5d2ax3)&&mxEvent[_0xe4bc[774]](_0x5d2ax3)||this[_0xe4bc[2839]]&&mxEvent[_0xe4bc[737]](_0x5d2ax3)};mxPanningHandler[_0xe4bc[202]][_0xe4bc[787]]=function(_0x5d2ax2,_0x5d2ax3){if(!_0x5d2ax3[_0xe4bc[721]]()&&this[_0xe4bc[994]]()){this[_0xe4bc[1032]]();this[_0xe4bc[2741]]=-this[_0xe4bc[1179]][_0xe4bc[526]][_0xe4bc[360]];this[_0xe4bc[2742]]=-this[_0xe4bc[1179]][_0xe4bc[526]][_0xe4bc[190]];var _0x5d2ax4=mxUtils[_0xe4bc[2196]](this[_0xe4bc[1179]][_0xe4bc[526]],_0x5d2ax3[_0xe4bc[730]](),_0x5d2ax3[_0xe4bc[732]]());this[_0xe4bc[2837]]=_0x5d2ax4[_0xe4bc[235]];this[_0xe4bc[2838]]=_0x5d2ax4[_0xe4bc[236]];this[_0xe4bc[2849]]=this[_0xe4bc[737]](_0x5d2ax3);this[_0xe4bc[2850]]=this[_0xe4bc[2846]]()&&this[_0xe4bc[2848]](_0x5d2ax3);this[_0xe4bc[2739]]=_0x5d2ax3[_0xe4bc[730]]();this[_0xe4bc[2740]]=_0x5d2ax3[_0xe4bc[732]]();this[_0xe4bc[2850]]&&this[_0xe4bc[2851]](_0x5d2ax3)}};mxPanningHandler[_0xe4bc[202]][_0xe4bc[2851]]=function(_0x5d2ax2){_0x5d2ax2[_0xe4bc[722]]()};mxPanningHandler[_0xe4bc[202]][_0xe4bc[788]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=_0x5d2ax3[_0xe4bc[730]]()-this[_0xe4bc[2739]],_0x5d2ax5=_0x5d2ax3[_0xe4bc[732]]()-this[_0xe4bc[2740]];if(this[_0xe4bc[1124]]){this[_0xe4bc[2844]]&&(this[_0xe4bc[2845]]&&(_0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[1021]](_0x5d2ax4),_0x5d2ax5=this[_0xe4bc[1179]][_0xe4bc[1021]](_0x5d2ax5)),this[_0xe4bc[1179]][_0xe4bc[1135]](_0x5d2ax4+this[_0xe4bc[2741]],_0x5d2ax5+this[_0xe4bc[2742]])),this[_0xe4bc[746]]( new mxEventObject(mxEvent.PAN,_0xe4bc[763],_0x5d2ax3)),_0x5d2ax3[_0xe4bc[722]]()}else {if(this[_0xe4bc[2850]]){var _0x5d2ax9=this[_0xe4bc[1124]];this[_0xe4bc[1124]]=Math[_0xe4bc[425]](_0x5d2ax4)>this[_0xe4bc[1179]][_0xe4bc[2353]]||Math[_0xe4bc[425]](_0x5d2ax5)>this[_0xe4bc[1179]][_0xe4bc[2353]];!_0x5d2ax9&&this[_0xe4bc[1124]]&&this[_0xe4bc[746]]( new mxEventObject(mxEvent.PAN_START,_0xe4bc[763],_0x5d2ax3))}}};mxPanningHandler[_0xe4bc[202]][_0xe4bc[789]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=Math[_0xe4bc[425]](_0x5d2ax3[_0xe4bc[730]]()-this[_0xe4bc[2739]]),_0x5d2ax5=Math[_0xe4bc[425]](_0x5d2ax3[_0xe4bc[732]]()-this[_0xe4bc[2740]]);if(this[_0xe4bc[1124]]){if(!this[_0xe4bc[1179]][_0xe4bc[2365]]||!mxUtils[_0xe4bc[1134]](this[_0xe4bc[1179]][_0xe4bc[526]])){_0x5d2ax4=_0x5d2ax3[_0xe4bc[730]]()-this[_0xe4bc[2739]];_0x5d2ax5=_0x5d2ax3[_0xe4bc[732]]()-this[_0xe4bc[2740]];this[_0xe4bc[2845]]&&(_0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[1021]](_0x5d2ax4),_0x5d2ax5=this[_0xe4bc[1179]][_0xe4bc[1021]](_0x5d2ax5));var _0x5d2ax9=this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[255]],_0x5d2axa=this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[513]];this[_0xe4bc[1179]][_0xe4bc[1135]](0,0);this[_0xe4bc[1135]](_0x5d2axa[_0xe4bc[235]]+_0x5d2ax4/_0x5d2ax9,_0x5d2axa[_0xe4bc[236]]+_0x5d2ax5/_0x5d2ax9)};this[_0xe4bc[1124]]= !1;this[_0xe4bc[746]]( new mxEventObject(mxEvent.PAN_END,_0xe4bc[763],_0x5d2ax3));_0x5d2ax3[_0xe4bc[722]]()}else {this[_0xe4bc[2849]]&&(_0x5d2ax4<this[_0xe4bc[1179]][_0xe4bc[2353]]&&_0x5d2ax5<this[_0xe4bc[1179]][_0xe4bc[2353]])&&(_0x5d2ax4=this[_0xe4bc[2852]](_0x5d2ax3),this[_0xe4bc[1179]][_0xe4bc[994]]()&&this[_0xe4bc[2841]]&&null!=_0x5d2ax4&&!this[_0xe4bc[1179]][_0xe4bc[2692]](_0x5d2ax4)?this[_0xe4bc[1179]][_0xe4bc[2450]](_0x5d2ax4):this[_0xe4bc[2842]]&&null==_0x5d2ax4&&this[_0xe4bc[1179]][_0xe4bc[2440]](),this[_0xe4bc[1179]][_0xe4bc[2276]][_0xe4bc[801]](),_0x5d2ax5=mxUtils[_0xe4bc[444]](),_0x5d2ax5= new mxPoint(_0x5d2ax3[_0xe4bc[730]]()+_0x5d2ax5[_0xe4bc[235]],_0x5d2ax3[_0xe4bc[732]]()+_0x5d2ax5[_0xe4bc[236]]),this[_0xe4bc[152]](_0x5d2ax5[_0xe4bc[235]]+1,_0x5d2ax5[_0xe4bc[236]]+1,_0x5d2ax4,_0x5d2ax3[_0xe4bc[727]]()),_0x5d2ax3[_0xe4bc[722]]())};this[_0xe4bc[2849]]=this[_0xe4bc[2850]]= !1};mxPanningHandler[_0xe4bc[202]][_0xe4bc[2852]]=function(_0x5d2ax2){return _0x5d2ax2[_0xe4bc[736]]()};mxPanningHandler[_0xe4bc[202]][_0xe4bc[1135]]=function(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[1147]](_0x5d2ax2,_0x5d2ax3)};mxPanningHandler[_0xe4bc[202]][_0xe4bc[515]]=function(){this[_0xe4bc[1179]][_0xe4bc[1148]](this);mxPopupMenu[_0xe4bc[202]][_0xe4bc[515]][_0xe4bc[183]](this)};function mxCellMarker(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){mxEventSource[_0xe4bc[239]](this);null!=_0x5d2ax2&&(this[_0xe4bc[1179]]=_0x5d2ax2,this[_0xe4bc[2853]]=null!=_0x5d2ax3?_0x5d2ax3:mxConstants[_0xe4bc[2854]],this[_0xe4bc[2855]]=null!=_0x5d2ax3?_0x5d2ax4:mxConstants[_0xe4bc[2856]],this[_0xe4bc[2857]]=null!=_0x5d2ax5?_0x5d2ax5:mxConstants[_0xe4bc[2858]],this[_0xe4bc[1016]]= new mxCellHighlight(_0x5d2ax2))}mxUtils[_0xe4bc[1284]](mxCellMarker,mxEventSource);mxCellMarker[_0xe4bc[202]][_0xe4bc[1179]]=null;mxCellMarker[_0xe4bc[202]][_0xe4bc[984]]= !0;mxCellMarker[_0xe4bc[202]][_0xe4bc[2857]]=mxConstants[_0xe4bc[2858]];mxCellMarker[_0xe4bc[202]][_0xe4bc[2859]]= !1;mxCellMarker[_0xe4bc[202]][_0xe4bc[2853]]=null;mxCellMarker[_0xe4bc[202]][_0xe4bc[2855]]=null;mxCellMarker[_0xe4bc[202]][_0xe4bc[2860]]=null;mxCellMarker[_0xe4bc[202]][_0xe4bc[2861]]=null;mxCellMarker[_0xe4bc[202]][_0xe4bc[2862]]=null;mxCellMarker[_0xe4bc[202]][_0xe4bc[995]]=function(_0x5d2ax2){this[_0xe4bc[984]]=_0x5d2ax2};mxCellMarker[_0xe4bc[202]][_0xe4bc[994]]=function(){return this[_0xe4bc[984]]};mxCellMarker[_0xe4bc[202]][_0xe4bc[2863]]=function(_0x5d2ax2){this[_0xe4bc[2857]]=_0x5d2ax2};mxCellMarker[_0xe4bc[202]][_0xe4bc[2864]]=function(){return this[_0xe4bc[2857]]};mxCellMarker[_0xe4bc[202]][_0xe4bc[2865]]=function(_0x5d2ax2){this[_0xe4bc[2859]]=_0x5d2ax2};mxCellMarker[_0xe4bc[202]][_0xe4bc[2866]]=function(){return this[_0xe4bc[2859]]};mxCellMarker[_0xe4bc[202]][_0xe4bc[2867]]=function(){return null!=this[_0xe4bc[2861]]};mxCellMarker[_0xe4bc[202]][_0xe4bc[2868]]=function(){return this[_0xe4bc[2861]]};mxCellMarker[_0xe4bc[202]][_0xe4bc[2869]]=function(){return this[_0xe4bc[2862]]};mxCellMarker[_0xe4bc[202]][_0xe4bc[862]]=function(){this[_0xe4bc[2861]]=null;null!=this[_0xe4bc[2862]]&&(this[_0xe4bc[2862]]=null,this[_0xe4bc[2870]]())};mxCellMarker[_0xe4bc[202]][_0xe4bc[2871]]=function(_0x5d2ax2){var _0x5d2ax3=null;if(this[_0xe4bc[994]]()){var _0x5d2ax3=this[_0xe4bc[248]](_0x5d2ax2),_0x5d2ax4=null!=_0x5d2ax3?this[_0xe4bc[2872]](_0x5d2ax3):!1;_0x5d2ax2=this[_0xe4bc[2873]](_0x5d2ax2[_0xe4bc[727]](),_0x5d2ax3,_0x5d2ax4);this[_0xe4bc[2861]]=_0x5d2ax4?_0x5d2ax3:null;if(_0x5d2ax3!=this[_0xe4bc[2862]]||_0x5d2ax2!=this[_0xe4bc[2860]]){this[_0xe4bc[2860]]=_0x5d2ax2,null!=_0x5d2ax3&&null!=this[_0xe4bc[2860]]?(this[_0xe4bc[2862]]=_0x5d2ax3,this[_0xe4bc[811]]()):null!=this[_0xe4bc[2862]]&&(this[_0xe4bc[2862]]=null,this[_0xe4bc[2870]]())}};return _0x5d2ax3};mxCellMarker[_0xe4bc[202]][_0xe4bc[2874]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[248]](_0x5d2ax2);null!=_0x5d2ax4&&(this[_0xe4bc[2860]]=null!=_0x5d2ax3?_0x5d2ax3:this[_0xe4bc[2853]],this[_0xe4bc[2862]]=_0x5d2ax4,this[_0xe4bc[811]]())};mxCellMarker[_0xe4bc[202]][_0xe4bc[811]]=function(){this[_0xe4bc[1016]][_0xe4bc[2828]](this[_0xe4bc[2860]]);this[_0xe4bc[1016]][_0xe4bc[1016]](this[_0xe4bc[2862]]);this[_0xe4bc[746]]( new mxEventObject(mxEvent.MARK,_0xe4bc[724],this[_0xe4bc[2862]]))};mxCellMarker[_0xe4bc[202]][_0xe4bc[2870]]=function(){this[_0xe4bc[811]]()};mxCellMarker[_0xe4bc[202]][_0xe4bc[2872]]=function(_0x5d2ax2){return !0};mxCellMarker[_0xe4bc[202]][_0xe4bc[2873]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){return _0x5d2ax4?this[_0xe4bc[2853]]:this[_0xe4bc[2855]]};mxCellMarker[_0xe4bc[202]][_0xe4bc[248]]=function(_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[1179]][_0xe4bc[249]]();cell=this[_0xe4bc[736]](_0x5d2ax2);_0x5d2ax3=this[_0xe4bc[2875]](_0x5d2ax3[_0xe4bc[248]](cell));return null!=_0x5d2ax3&&this[_0xe4bc[1825]](_0x5d2ax3,_0x5d2ax2)?_0x5d2ax3:null};mxCellMarker[_0xe4bc[202]][_0xe4bc[736]]=function(_0x5d2ax2){return _0x5d2ax2[_0xe4bc[736]]()};mxCellMarker[_0xe4bc[202]][_0xe4bc[2875]]=function(_0x5d2ax2){return _0x5d2ax2};mxCellMarker[_0xe4bc[202]][_0xe4bc[1825]]=function(_0x5d2ax2,_0x5d2ax3){return this[_0xe4bc[2859]]?mxUtils[_0xe4bc[2876]](_0x5d2ax2,_0x5d2ax3[_0xe4bc[734]](),_0x5d2ax3[_0xe4bc[735]](),this[_0xe4bc[2857]],mxConstants.MIN_HOTSPOT_SIZE,mxConstants.MAX_HOTSPOT_SIZE):!0};mxCellMarker[_0xe4bc[202]][_0xe4bc[515]]=function(){this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[745]](this[_0xe4bc[2877]]);this[_0xe4bc[1179]][_0xe4bc[502]]()[_0xe4bc[745]](this[_0xe4bc[2877]]);this[_0xe4bc[1016]][_0xe4bc[515]]()};function mxSelectionCellsHandler(_0x5d2ax2){mxEventSource[_0xe4bc[239]](this);this[_0xe4bc[1179]]=_0x5d2ax2;this[_0xe4bc[2878]]= new mxDictionary;this[_0xe4bc[1179]][_0xe4bc[1133]](this);this[_0xe4bc[2731]]=mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2,_0x5d2ax4){this[_0xe4bc[994]]()&&this[_0xe4bc[802]]()});this[_0xe4bc[1179]][_0xe4bc[2435]]()[_0xe4bc[169]](mxEvent.CHANGE,this[_0xe4bc[2731]]);this[_0xe4bc[1179]][_0xe4bc[502]]()[_0xe4bc[169]](mxEvent.CHANGE,this[_0xe4bc[2731]]);this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[169]](mxEvent.SCALE,this[_0xe4bc[2731]]);this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[169]](mxEvent.TRANSLATE,this[_0xe4bc[2731]]);this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[169]](mxEvent.SCALE_AND_TRANSLATE,this[_0xe4bc[2731]]);this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[169]](mxEvent.DOWN,this[_0xe4bc[2731]]);this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[169]](mxEvent.UP,this[_0xe4bc[2731]])}mxUtils[_0xe4bc[1284]](mxSelectionCellsHandler,mxEventSource);mxSelectionCellsHandler[_0xe4bc[202]][_0xe4bc[1179]]=null;mxSelectionCellsHandler[_0xe4bc[202]][_0xe4bc[984]]= !0;mxSelectionCellsHandler[_0xe4bc[202]][_0xe4bc[2731]]=null;mxSelectionCellsHandler[_0xe4bc[202]][_0xe4bc[2879]]=100;mxSelectionCellsHandler[_0xe4bc[202]][_0xe4bc[2878]]=null;mxSelectionCellsHandler[_0xe4bc[202]][_0xe4bc[994]]=function(){return this[_0xe4bc[984]]};mxSelectionCellsHandler[_0xe4bc[202]][_0xe4bc[995]]=function(_0x5d2ax2){this[_0xe4bc[984]]=_0x5d2ax2};mxSelectionCellsHandler[_0xe4bc[202]][_0xe4bc[2596]]=function(_0x5d2ax2){return this[_0xe4bc[2878]][_0xe4bc[203]](_0x5d2ax2)};mxSelectionCellsHandler[_0xe4bc[202]][_0xe4bc[862]]=function(){this[_0xe4bc[2878]][_0xe4bc[209]](function(_0x5d2ax2,_0x5d2ax3){_0x5d2ax3[_0xe4bc[862]][_0xe4bc[183]](_0x5d2ax3)})};mxSelectionCellsHandler[_0xe4bc[202]][_0xe4bc[802]]=function(){var _0x5d2ax2=this[_0xe4bc[2878]];this[_0xe4bc[2878]]= new mxDictionary;for(var _0x5d2ax3=this[_0xe4bc[1179]][_0xe4bc[897]](),_0x5d2ax4=0;_0x5d2ax4<_0x5d2ax3[_0xe4bc[67]];_0x5d2ax4++){var _0x5d2ax5=this[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax3[_0x5d2ax4]);if(null!=_0x5d2ax5){var _0x5d2ax9=_0x5d2ax2[_0xe4bc[205]](_0x5d2ax3[_0x5d2ax4]);null!=_0x5d2ax9&&(_0x5d2ax9[_0xe4bc[724]]!=_0x5d2ax5?(_0x5d2ax9[_0xe4bc[515]](),_0x5d2ax9=null):_0x5d2ax9[_0xe4bc[258]]());null==_0x5d2ax9&&(_0x5d2ax9=this[_0xe4bc[1179]][_0xe4bc[2709]](_0x5d2ax5),this[_0xe4bc[746]]( new mxEventObject(mxEvent.ADD,_0xe4bc[724],_0x5d2ax5)));null!=_0x5d2ax9&&this[_0xe4bc[2878]][_0xe4bc[204]](_0x5d2ax3[_0x5d2ax4],_0x5d2ax9)}};_0x5d2ax2[_0xe4bc[209]](mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[746]]( new mxEventObject(mxEvent.REMOVE,_0xe4bc[724],_0x5d2ax3[_0xe4bc[724]]));_0x5d2ax3[_0xe4bc[515]]()}))};mxSelectionCellsHandler[_0xe4bc[202]][_0xe4bc[787]]=function(_0x5d2ax2,_0x5d2ax3){if(this[_0xe4bc[1179]][_0xe4bc[994]]()&&this[_0xe4bc[994]]()){var _0x5d2ax4=[_0x5d2ax2,_0x5d2ax3];this[_0xe4bc[2878]][_0xe4bc[209]](function(_0x5d2ax2,_0x5d2ax3){_0x5d2ax3[_0xe4bc[787]][_0xe4bc[183]](_0x5d2ax3,_0x5d2ax4)})}};mxSelectionCellsHandler[_0xe4bc[202]][_0xe4bc[788]]=function(_0x5d2ax2,_0x5d2ax3){if(this[_0xe4bc[1179]][_0xe4bc[994]]()&&this[_0xe4bc[994]]()){var _0x5d2ax4=[_0x5d2ax2,_0x5d2ax3];this[_0xe4bc[2878]][_0xe4bc[209]](function(_0x5d2ax2,_0x5d2ax3){_0x5d2ax3[_0xe4bc[788]][_0xe4bc[183]](_0x5d2ax3,_0x5d2ax4)})}};mxSelectionCellsHandler[_0xe4bc[202]][_0xe4bc[789]]=function(_0x5d2ax2,_0x5d2ax3){if(this[_0xe4bc[1179]][_0xe4bc[994]]()&&this[_0xe4bc[994]]()){var _0x5d2ax4=[_0x5d2ax2,_0x5d2ax3];this[_0xe4bc[2878]][_0xe4bc[209]](function(_0x5d2ax2,_0x5d2ax3){_0x5d2ax3[_0xe4bc[789]][_0xe4bc[183]](_0x5d2ax3,_0x5d2ax4)})}};mxSelectionCellsHandler[_0xe4bc[202]][_0xe4bc[515]]=function(){this[_0xe4bc[1179]][_0xe4bc[1148]](this);null!=this[_0xe4bc[2731]]&&(this[_0xe4bc[1179]][_0xe4bc[2435]]()[_0xe4bc[745]](this[_0xe4bc[2731]]),this[_0xe4bc[1179]][_0xe4bc[502]]()[_0xe4bc[745]](this[_0xe4bc[2731]]),this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[745]](this[_0xe4bc[2731]]),this[_0xe4bc[2731]]=null)};function mxConnectionHandler(_0x5d2ax2,_0x5d2ax3){mxEventSource[_0xe4bc[239]](this);null!=_0x5d2ax2&&(this[_0xe4bc[1179]]=_0x5d2ax2,this[_0xe4bc[1033]]=_0x5d2ax3,this[_0xe4bc[176]]())}mxUtils[_0xe4bc[1284]](mxConnectionHandler,mxEventSource);mxConnectionHandler[_0xe4bc[202]][_0xe4bc[1179]]=null;mxConnectionHandler[_0xe4bc[202]][_0xe4bc[1033]]= !0;mxConnectionHandler[_0xe4bc[202]][_0xe4bc[2880]]= !1;mxConnectionHandler[_0xe4bc[202]][_0xe4bc[2881]]= !1;mxConnectionHandler[_0xe4bc[202]][_0xe4bc[2882]]=null;mxConnectionHandler[_0xe4bc[202]][_0xe4bc[2883]]= !1;mxConnectionHandler[_0xe4bc[202]][_0xe4bc[984]]= !0;mxConnectionHandler[_0xe4bc[202]][_0xe4bc[804]]= !0;mxConnectionHandler[_0xe4bc[202]][_0xe4bc[2884]]= !1;mxConnectionHandler[_0xe4bc[202]][_0xe4bc[2885]]=null;mxConnectionHandler[_0xe4bc[202]][_0xe4bc[2886]]=null;mxConnectionHandler[_0xe4bc[202]][_0xe4bc[267]]=null;mxConnectionHandler[_0xe4bc[202]][_0xe4bc[2887]]= !1;mxConnectionHandler[_0xe4bc[202]][_0xe4bc[2888]]= !0;mxConnectionHandler[_0xe4bc[202]][_0xe4bc[2889]]=500;mxConnectionHandler[_0xe4bc[202]][_0xe4bc[2890]]= !1;mxConnectionHandler[_0xe4bc[202]][_0xe4bc[2891]]= !1;mxConnectionHandler[_0xe4bc[202]][_0xe4bc[2892]]=4;mxConnectionHandler[_0xe4bc[202]][_0xe4bc[2893]]=0;mxConnectionHandler[_0xe4bc[202]][_0xe4bc[2894]]=0;mxConnectionHandler[_0xe4bc[202]][_0xe4bc[2895]]= !1;mxConnectionHandler[_0xe4bc[202]][_0xe4bc[2823]]=null;mxConnectionHandler[_0xe4bc[202]][_0xe4bc[2896]]= new mxPoint(0,mxConstants.TOOLTIP_VERTICAL_OFFSET);mxConnectionHandler[_0xe4bc[202]][_0xe4bc[2897]]=null;mxConnectionHandler[_0xe4bc[202]][_0xe4bc[1176]]=null;mxConnectionHandler[_0xe4bc[202]][_0xe4bc[2898]]=null;mxConnectionHandler[_0xe4bc[202]][_0xe4bc[2899]]=0;mxConnectionHandler[_0xe4bc[202]][_0xe4bc[2900]]=mxClient[_0xe4bc[47]];mxConnectionHandler[_0xe4bc[202]][_0xe4bc[994]]=function(){return this[_0xe4bc[984]]};mxConnectionHandler[_0xe4bc[202]][_0xe4bc[995]]=function(_0x5d2ax2){this[_0xe4bc[984]]=_0x5d2ax2};mxConnectionHandler[_0xe4bc[202]][_0xe4bc[2901]]=function(){return this[_0xe4bc[2884]]};mxConnectionHandler[_0xe4bc[202]][_0xe4bc[2902]]=function(_0x5d2ax2){this[_0xe4bc[2884]]=_0x5d2ax2};mxConnectionHandler[_0xe4bc[202]][_0xe4bc[2156]]=function(){var _0x5d2ax2= new mxPolyline([],mxConstants.INVALID_COLOR);_0x5d2ax2[_0xe4bc[507]]=this[_0xe4bc[1179]][_0xe4bc[507]]!=mxConstants[_0xe4bc[508]]?mxConstants[_0xe4bc[1523]]:mxConstants[_0xe4bc[508]];_0x5d2ax2[_0xe4bc[176]](this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[1524]]());_0x5d2ax2[_0xe4bc[1564]]=0;_0x5d2ax2[_0xe4bc[1229]]= !1;_0x5d2ax2[_0xe4bc[1522]]= !0;if(this[_0xe4bc[1179]][_0xe4bc[507]]==mxConstants[_0xe4bc[508]]){_0x5d2ax2[_0xe4bc[252]][_0xe4bc[57]](_0xe4bc[1377],_0xe4bc[130])}else {var _0x5d2ax3=mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){_0x5d2ax2=mxUtils[_0xe4bc[2196]](this[_0xe4bc[1179]][_0xe4bc[526]],mxEvent[_0xe4bc[731]](_0x5d2ax2),mxEvent[_0xe4bc[733]](_0x5d2ax2));return this[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[248]](this[_0xe4bc[1179]][_0xe4bc[999]](_0x5d2ax2[_0xe4bc[235]],_0x5d2ax2[_0xe4bc[236]]))});mxEvent[_0xe4bc[2733]](_0x5d2ax2[_0xe4bc[252]],this[_0xe4bc[1179]],_0x5d2ax3)};return _0x5d2ax2};mxConnectionHandler[_0xe4bc[202]][_0xe4bc[176]]=function(){this[_0xe4bc[1179]][_0xe4bc[1133]](this);this[_0xe4bc[2885]]=this[_0xe4bc[1689]]();this[_0xe4bc[2886]]= new mxConstraintHandler(this[_0xe4bc[1179]]);this[_0xe4bc[1176]]=mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){null!=this[_0xe4bc[2903]]&&(this[_0xe4bc[2903]]=this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[248]](this[_0xe4bc[2903]][_0xe4bc[246]]));null!=this[_0xe4bc[2903]]?this[_0xe4bc[2905]](this[_0xe4bc[2904]],this[_0xe4bc[2903]]):(this[_0xe4bc[2906]](this[_0xe4bc[2904]]),this[_0xe4bc[257]]=null);this[_0xe4bc[2886]][_0xe4bc[862]]()});this[_0xe4bc[1179]][_0xe4bc[502]]()[_0xe4bc[169]](mxEvent.CHANGE,this[_0xe4bc[1176]]);this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[169]](mxEvent.SCALE,this[_0xe4bc[1176]]);this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[169]](mxEvent.TRANSLATE,this[_0xe4bc[1176]]);this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[169]](mxEvent.SCALE_AND_TRANSLATE,this[_0xe4bc[1176]]);this[_0xe4bc[2898]]=mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){this[_0xe4bc[2906]](this[_0xe4bc[2904]])});this[_0xe4bc[1179]][_0xe4bc[169]](mxEvent.START_EDITING,this[_0xe4bc[2898]]);this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[169]](mxEvent.DOWN,this[_0xe4bc[2898]]);this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[169]](mxEvent.UP,this[_0xe4bc[2898]])};mxConnectionHandler[_0xe4bc[202]][_0xe4bc[2907]]=function(_0x5d2ax2){return !0};mxConnectionHandler[_0xe4bc[202]][_0xe4bc[1689]]=function(){var _0x5d2ax2= new mxCellMarker(this[_0xe4bc[1179]]);_0x5d2ax2[_0xe4bc[2859]]= !0;_0x5d2ax2[_0xe4bc[736]]=mxUtils[_0xe4bc[885]](this,function(_0x5d2ax3,_0x5d2ax4){_0x5d2ax4=mxCellMarker[_0xe4bc[202]][_0xe4bc[736]][_0xe4bc[183]](_0x5d2ax2,arguments);this[_0xe4bc[267]]=null;if(!this[_0xe4bc[2907]](_0x5d2ax4)){return null};null!=_0x5d2ax4?this[_0xe4bc[2908]]()?null!=this[_0xe4bc[257]]&&(this[_0xe4bc[267]]=this[_0xe4bc[2909]](this[_0xe4bc[257]][_0xe4bc[246]],_0x5d2ax4),null!=this[_0xe4bc[267]]&&0==this[_0xe4bc[267]][_0xe4bc[67]]&&(_0x5d2ax4=null,this[_0xe4bc[2901]]()&&(this[_0xe4bc[267]]=null))):this[_0xe4bc[2671]](_0x5d2ax4)||(_0x5d2ax4=null):this[_0xe4bc[2908]]()&&(!this[_0xe4bc[2901]]()&&!this[_0xe4bc[1179]][_0xe4bc[2406]])&&(this[_0xe4bc[267]]=_0xe4bc[110]);return _0x5d2ax4});_0x5d2ax2[_0xe4bc[2872]]=mxUtils[_0xe4bc[885]](this,function(_0x5d2ax3){return this[_0xe4bc[2908]]()?null==this[_0xe4bc[267]]:mxCellMarker[_0xe4bc[202]][_0xe4bc[2872]][_0xe4bc[183]](_0x5d2ax2,arguments)});_0x5d2ax2[_0xe4bc[2873]]=mxUtils[_0xe4bc[885]](this,function(_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){return null==this[_0xe4bc[2882]]||this[_0xe4bc[2908]]()?mxCellMarker[_0xe4bc[202]][_0xe4bc[2873]][_0xe4bc[183]](_0x5d2ax2,arguments):null});_0x5d2ax2[_0xe4bc[1825]]=mxUtils[_0xe4bc[885]](this,function(_0x5d2ax3,_0x5d2ax4){return null!=this[_0xe4bc[2882]]||this[_0xe4bc[2908]]()?!0:mxCellMarker[_0xe4bc[202]][_0xe4bc[1825]][_0xe4bc[183]](_0x5d2ax2,arguments)});return _0x5d2ax2};mxConnectionHandler[_0xe4bc[202]][_0xe4bc[861]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){this[_0xe4bc[257]]=_0x5d2ax2;this[_0xe4bc[2823]]= new mxPoint(_0x5d2ax3,_0x5d2ax4);this[_0xe4bc[2897]]=null!=_0x5d2ax5?_0x5d2ax5:this[_0xe4bc[2910]](null);this[_0xe4bc[2885]][_0xe4bc[2860]]=this[_0xe4bc[2885]][_0xe4bc[2853]];this[_0xe4bc[2885]][_0xe4bc[2862]]=_0x5d2ax2;this[_0xe4bc[2885]][_0xe4bc[811]]();this[_0xe4bc[746]]( new mxEventObject(mxEvent.START,_0xe4bc[724],this[_0xe4bc[257]]))};mxConnectionHandler[_0xe4bc[202]][_0xe4bc[2908]]=function(){return null!=this[_0xe4bc[2823]]&&null!=this[_0xe4bc[253]]};mxConnectionHandler[_0xe4bc[202]][_0xe4bc[2671]]=function(_0x5d2ax2){return this[_0xe4bc[1179]][_0xe4bc[2671]](_0x5d2ax2)};mxConnectionHandler[_0xe4bc[202]][_0xe4bc[2672]]=function(_0x5d2ax2){return !0};mxConnectionHandler[_0xe4bc[202]][_0xe4bc[2909]]=function(_0x5d2ax2,_0x5d2ax3){return !this[_0xe4bc[2672]](_0x5d2ax3)?_0xe4bc[110]:this[_0xe4bc[1179]][_0xe4bc[2500]](null,_0x5d2ax2,_0x5d2ax3)};mxConnectionHandler[_0xe4bc[202]][_0xe4bc[2911]]=function(_0x5d2ax2){return this[_0xe4bc[2882]]};mxConnectionHandler[_0xe4bc[202]][_0xe4bc[2912]]=function(_0x5d2ax2){return null!=_0x5d2ax2[_0xe4bc[963]]&&_0x5d2ax2[_0xe4bc[963]][_0xe4bc[252]][_0xe4bc[265]]==this[_0xe4bc[1179]][_0xe4bc[526]]?!0:this[_0xe4bc[2880]]};mxConnectionHandler[_0xe4bc[202]][_0xe4bc[2913]]=function(_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[2911]](_0x5d2ax2);if(null!=_0x5d2ax3&&null!=_0x5d2ax2){this[_0xe4bc[2903]]=_0x5d2ax2;var _0x5d2ax4=[],_0x5d2ax5= new mxRectangle(0,0,_0x5d2ax3[_0xe4bc[117]],_0x5d2ax3[_0xe4bc[119]]),_0x5d2ax9= new mxImageShape(_0x5d2ax5,_0x5d2ax3[_0xe4bc[390]],null,null,0);_0x5d2ax9[_0xe4bc[1674]]= !1;this[_0xe4bc[2912]](_0x5d2ax2)?(_0x5d2ax9[_0xe4bc[507]]=mxConstants[_0xe4bc[1656]],_0x5d2ax9[_0xe4bc[176]](this[_0xe4bc[1179]][_0xe4bc[526]])):(_0x5d2ax9[_0xe4bc[507]]=this[_0xe4bc[1179]][_0xe4bc[507]]==mxConstants[_0xe4bc[508]]?mxConstants[_0xe4bc[508]]:mxConstants[_0xe4bc[1523]],_0x5d2ax9[_0xe4bc[176]](this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[1524]]()),this[_0xe4bc[2881]]&&null!=_0x5d2ax9[_0xe4bc[252]][_0xe4bc[328]]&&_0x5d2ax9[_0xe4bc[252]][_0xe4bc[265]][_0xe4bc[950]](_0x5d2ax9[_0xe4bc[252]],_0x5d2ax9[_0xe4bc[252]][_0xe4bc[265]][_0xe4bc[285]]));_0x5d2ax9[_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[270]]=mxConstants[_0xe4bc[2914]];var _0x5d2axa=mxUtils[_0xe4bc[885]](this,function(){return null!=this[_0xe4bc[2915]]?this[_0xe4bc[2915]]:_0x5d2ax2}),_0x5d2ax3=mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){mxEvent[_0xe4bc[721]](_0x5d2ax2)||(this[_0xe4bc[2916]]=_0x5d2ax9,this[_0xe4bc[1179]][_0xe4bc[758]](mxEvent.MOUSE_DOWN, new mxMouseEvent(_0x5d2ax2,_0x5d2axa())))});mxEvent[_0xe4bc[2733]](_0x5d2ax9[_0xe4bc[252]],this[_0xe4bc[1179]],_0x5d2axa,_0x5d2ax3);_0x5d2ax4[_0xe4bc[207]](_0x5d2ax9);this[_0xe4bc[2905]](_0x5d2ax4,this[_0xe4bc[2903]]);return _0x5d2ax4};return null};mxConnectionHandler[_0xe4bc[202]][_0xe4bc[2905]]=function(_0x5d2ax2,_0x5d2ax3){if(null!=_0x5d2ax2&&null!=_0x5d2ax2[0]&&null!=_0x5d2ax3){var _0x5d2ax4=this[_0xe4bc[2917]](_0x5d2ax2[0],_0x5d2ax3);_0x5d2ax2[0][_0xe4bc[1562]][_0xe4bc[235]]=_0x5d2ax4[_0xe4bc[235]];_0x5d2ax2[0][_0xe4bc[1562]][_0xe4bc[236]]=_0x5d2ax4[_0xe4bc[236]];_0x5d2ax2[0][_0xe4bc[258]]()}};mxConnectionHandler[_0xe4bc[202]][_0xe4bc[2917]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[255]],_0x5d2ax5=_0x5d2ax3[_0xe4bc[241]](),_0x5d2ax9=_0x5d2ax3[_0xe4bc[242]]();if(this[_0xe4bc[1179]][_0xe4bc[1730]](_0x5d2ax3[_0xe4bc[246]])){var _0x5d2axa=this[_0xe4bc[1179]][_0xe4bc[1731]](_0x5d2ax3[_0xe4bc[246]]),_0x5d2ax5=0!=_0x5d2axa[_0xe4bc[117]]?_0x5d2ax3[_0xe4bc[235]]+_0x5d2axa[_0xe4bc[117]]*_0x5d2ax4/2:_0x5d2ax5,_0x5d2ax9=0!=_0x5d2axa[_0xe4bc[119]]?_0x5d2ax3[_0xe4bc[236]]+_0x5d2axa[_0xe4bc[119]]*_0x5d2ax4/2:_0x5d2ax9,_0x5d2axa=mxUtils[_0xe4bc[431]](mxUtils[_0xe4bc[433]](_0x5d2ax3[_0xe4bc[124]],mxConstants.STYLE_ROTATION)||0);if(0!=_0x5d2axa){var _0x5d2ax4=Math[_0xe4bc[426]](_0x5d2axa),_0x5d2axa=Math[_0xe4bc[427]](_0x5d2axa),_0x5d2ax12= new mxPoint(_0x5d2ax3[_0xe4bc[241]](),_0x5d2ax3[_0xe4bc[242]]()),_0x5d2ax9=mxUtils[_0xe4bc[432]]( new mxPoint(_0x5d2ax5,_0x5d2ax9),_0x5d2ax4,_0x5d2axa,_0x5d2ax12),_0x5d2ax5=_0x5d2ax9[_0xe4bc[235]],_0x5d2ax9=_0x5d2ax9[_0xe4bc[236]]}};return  new mxPoint(_0x5d2ax5-_0x5d2ax2[_0xe4bc[1562]][_0xe4bc[117]]/2,_0x5d2ax9-_0x5d2ax2[_0xe4bc[1562]][_0xe4bc[119]]/2)};mxConnectionHandler[_0xe4bc[202]][_0xe4bc[2906]]=function(_0x5d2ax2){if(null!=_0x5d2ax2){this[_0xe4bc[2903]]=null;for(var _0x5d2ax3=0;_0x5d2ax3<_0x5d2ax2[_0xe4bc[67]];_0x5d2ax3++){_0x5d2ax2[_0x5d2ax3][_0xe4bc[515]]()}}};mxConnectionHandler[_0xe4bc[202]][_0xe4bc[2918]]=function(_0x5d2ax2){return !this[_0xe4bc[1179]][_0xe4bc[2579]](_0x5d2ax2[_0xe4bc[727]]())&&(null!=this[_0xe4bc[2886]][_0xe4bc[2919]]&&null!=this[_0xe4bc[2886]][_0xe4bc[2920]]||null!=this[_0xe4bc[257]]&&null==this[_0xe4bc[267]]&&(null==this[_0xe4bc[2904]]||null!=this[_0xe4bc[2904]]&&null!=this[_0xe4bc[2916]]))};mxConnectionHandler[_0xe4bc[202]][_0xe4bc[787]]=function(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[2899]]++;if(this[_0xe4bc[994]]()&&this[_0xe4bc[1179]][_0xe4bc[994]]()&&!_0x5d2ax3[_0xe4bc[721]]()&&!this[_0xe4bc[2908]]()&&this[_0xe4bc[2918]](_0x5d2ax3)){null!=this[_0xe4bc[2886]][_0xe4bc[2920]]&&null!=this[_0xe4bc[2886]][_0xe4bc[2919]]&&null!=this[_0xe4bc[2886]][_0xe4bc[987]]?(this[_0xe4bc[2921]]=this[_0xe4bc[2886]][_0xe4bc[2920]],this[_0xe4bc[257]]=this[_0xe4bc[2886]][_0xe4bc[2919]],this[_0xe4bc[2823]]=this[_0xe4bc[2886]][_0xe4bc[987]][_0xe4bc[238]]()):this[_0xe4bc[2823]]= new mxPoint(_0x5d2ax3[_0xe4bc[734]](),_0x5d2ax3[_0xe4bc[735]]());this[_0xe4bc[2897]]=this[_0xe4bc[2910]](_0x5d2ax3);this[_0xe4bc[2899]]=1;this[_0xe4bc[2887]]&&null==this[_0xe4bc[253]]&&(this[_0xe4bc[2922]]=null,this[_0xe4bc[253]]=this[_0xe4bc[2156]]());if(null==this[_0xe4bc[257]]&&null!=this[_0xe4bc[2897]]){var _0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[2689]](_0x5d2ax3[_0xe4bc[727]]());this[_0xe4bc[2897]][_0xe4bc[246]][_0xe4bc[256]][_0xe4bc[2007]](_0x5d2ax4,!0)};this[_0xe4bc[746]]( new mxEventObject(mxEvent.START,_0xe4bc[724],this[_0xe4bc[257]]));_0x5d2ax3[_0xe4bc[722]]()}else {if(mxClient[_0xe4bc[754]]&&this[_0xe4bc[2888]]&&!this[_0xe4bc[2890]]&&this[_0xe4bc[994]]()&&this[_0xe4bc[1179]][_0xe4bc[994]]()&&!this[_0xe4bc[2908]]()){this[_0xe4bc[2890]]= !0;this[_0xe4bc[2893]]=_0x5d2ax3[_0xe4bc[730]]();this[_0xe4bc[2894]]=_0x5d2ax3[_0xe4bc[732]]();var _0x5d2ax5=this[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[248]](this[_0xe4bc[2885]][_0xe4bc[736]](_0x5d2ax3));this[_0xe4bc[2923]]&&window[_0xe4bc[2924]](this[_0xe4bc[2923]]);this[_0xe4bc[2923]]=window[_0xe4bc[261]](mxUtils[_0xe4bc[885]](this,function(){this[_0xe4bc[2891]]&&this[_0xe4bc[2925]](_0x5d2ax3,_0x5d2ax5);this[_0xe4bc[2891]]=this[_0xe4bc[2890]]= !1}),this[_0xe4bc[2889]]);this[_0xe4bc[2891]]= !0}};this[_0xe4bc[2926]]=this[_0xe4bc[2916]];this[_0xe4bc[2916]]=null};mxConnectionHandler[_0xe4bc[202]][_0xe4bc[2925]]=function(_0x5d2ax2,_0x5d2ax3){null!=_0x5d2ax3&&(this[_0xe4bc[2885]][_0xe4bc[2860]]=this[_0xe4bc[2885]][_0xe4bc[2853]],this[_0xe4bc[2885]][_0xe4bc[2862]]=_0x5d2ax3,this[_0xe4bc[2885]][_0xe4bc[811]](),this[_0xe4bc[2823]]= new mxPoint(_0x5d2ax2[_0xe4bc[734]](),_0x5d2ax2[_0xe4bc[735]]()),this[_0xe4bc[2897]]=this[_0xe4bc[2910]](_0x5d2ax2),this[_0xe4bc[257]]=_0x5d2ax3,this[_0xe4bc[746]]( new mxEventObject(mxEvent.START,_0xe4bc[724],this[_0xe4bc[257]])))};mxConnectionHandler[_0xe4bc[202]][_0xe4bc[2927]]=function(_0x5d2ax2){return !this[_0xe4bc[1179]][_0xe4bc[1712]](_0x5d2ax2[_0xe4bc[246]])};mxConnectionHandler[_0xe4bc[202]][_0xe4bc[2910]]=function(_0x5d2ax2){return null};mxConnectionHandler[_0xe4bc[202]][_0xe4bc[2928]]=function(_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[2885]][_0xe4bc[2871]](_0x5d2ax2);this[_0xe4bc[2886]][_0xe4bc[2729]](_0x5d2ax2,null==this[_0xe4bc[2823]]);this[_0xe4bc[2915]]=_0x5d2ax3};mxConnectionHandler[_0xe4bc[202]][_0xe4bc[2929]]=function(_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[518]](),_0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[512]]();_0x5d2ax2[_0xe4bc[235]]=_0x5d2ax2[_0xe4bc[235]]/_0x5d2ax3-_0x5d2ax4[_0xe4bc[235]];_0x5d2ax2[_0xe4bc[236]]=_0x5d2ax2[_0xe4bc[236]]/_0x5d2ax3-_0x5d2ax4[_0xe4bc[236]]};mxConnectionHandler[_0xe4bc[202]][_0xe4bc[788]]=function(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[2891]]&&(this[_0xe4bc[2891]]=Math[_0xe4bc[425]](this[_0xe4bc[2893]]-_0x5d2ax3[_0xe4bc[730]]())<this[_0xe4bc[2892]]&&Math[_0xe4bc[425]](this[_0xe4bc[2894]]-_0x5d2ax3[_0xe4bc[732]]())<this[_0xe4bc[2892]]);if(!_0x5d2ax3[_0xe4bc[721]]()&&(this[_0xe4bc[2895]]||null!=this[_0xe4bc[2823]]||!this[_0xe4bc[1179]][_0xe4bc[1009]])){!this[_0xe4bc[994]]()&&null!=this[_0xe4bc[2915]]&&(this[_0xe4bc[2906]](this[_0xe4bc[2904]]),this[_0xe4bc[2915]]=null);(null!=this[_0xe4bc[2823]]||this[_0xe4bc[994]]()&&this[_0xe4bc[1179]][_0xe4bc[994]]())&&this[_0xe4bc[2928]](_0x5d2ax3);if(null!=this[_0xe4bc[2823]]){var _0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[255]],_0x5d2ax4= new mxPoint(this[_0xe4bc[1179]][_0xe4bc[1021]](_0x5d2ax3[_0xe4bc[734]]()/_0x5d2ax4)*_0x5d2ax4,this[_0xe4bc[1179]][_0xe4bc[1021]](_0x5d2ax3[_0xe4bc[735]]()/_0x5d2ax4)*_0x5d2ax4),_0x5d2ax5=null,_0x5d2ax9=_0x5d2ax4;null!=this[_0xe4bc[2886]][_0xe4bc[2920]]&&(null!=this[_0xe4bc[2886]][_0xe4bc[2919]]&&null!=this[_0xe4bc[2886]][_0xe4bc[987]])&&(_0x5d2ax5=this[_0xe4bc[2886]][_0xe4bc[2920]],_0x5d2ax9=this[_0xe4bc[2886]][_0xe4bc[987]][_0xe4bc[238]]());var _0x5d2axa=this[_0xe4bc[2823]];if(null!=this[_0xe4bc[2926]]){var _0x5d2ax12=this[_0xe4bc[2926]][_0xe4bc[1562]][_0xe4bc[117]],_0x5d2ax13=this[_0xe4bc[2926]][_0xe4bc[1562]][_0xe4bc[119]];null!=this[_0xe4bc[2915]]&&this[_0xe4bc[2883]]?(_0x5d2ax12=this[_0xe4bc[2917]](this[_0xe4bc[2926]],this[_0xe4bc[2915]]),this[_0xe4bc[2926]][_0xe4bc[1562]][_0xe4bc[235]]=_0x5d2ax12[_0xe4bc[235]],this[_0xe4bc[2926]][_0xe4bc[1562]][_0xe4bc[236]]=_0x5d2ax12[_0xe4bc[236]]):(_0x5d2ax12= new mxRectangle(_0x5d2ax3[_0xe4bc[734]]()+this[_0xe4bc[2896]][_0xe4bc[235]],_0x5d2ax3[_0xe4bc[735]]()+this[_0xe4bc[2896]][_0xe4bc[236]],_0x5d2ax12,_0x5d2ax13),this[_0xe4bc[2926]][_0xe4bc[1562]]=_0x5d2ax12);this[_0xe4bc[2926]][_0xe4bc[258]]()};if(null!=this[_0xe4bc[2897]]){this[_0xe4bc[2897]][_0xe4bc[439]]=[null,null!=this[_0xe4bc[2915]]?null:_0x5d2ax9];this[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[2289]](this[_0xe4bc[2897]],this[_0xe4bc[257]],!0,this[_0xe4bc[2921]]);null!=this[_0xe4bc[2915]]&&(null==_0x5d2ax5&&(_0x5d2ax5=this[_0xe4bc[1179]][_0xe4bc[2288]](this[_0xe4bc[2897]],this[_0xe4bc[257]],!1)),this[_0xe4bc[2897]][_0xe4bc[2088]](null,!1),this[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[2289]](this[_0xe4bc[2897]],this[_0xe4bc[2915]],!1,_0x5d2ax5));_0x5d2axa=null;if(null!=this[_0xe4bc[2922]]){_0x5d2axa=[];for(_0x5d2ax9=0;_0x5d2ax9<this[_0xe4bc[2922]][_0xe4bc[67]];_0x5d2ax9++){_0x5d2ax5=this[_0xe4bc[2922]][_0x5d2ax9][_0xe4bc[238]](),this[_0xe4bc[2929]](_0x5d2ax5),_0x5d2axa[_0x5d2ax9]=_0x5d2ax5}};this[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[2282]](this[_0xe4bc[2897]],_0x5d2axa,this[_0xe4bc[257]],this[_0xe4bc[2915]]);this[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[2283]](this[_0xe4bc[2897]],this[_0xe4bc[257]],this[_0xe4bc[2915]]);_0x5d2ax9=this[_0xe4bc[2897]][_0xe4bc[439]][this[_0xe4bc[2897]][_0xe4bc[439]][_0xe4bc[67]]-1];_0x5d2axa=this[_0xe4bc[2897]][_0xe4bc[439]][0]}else {null!=this[_0xe4bc[2915]]&&null==this[_0xe4bc[2886]][_0xe4bc[2920]]&&(_0x5d2ax12=this[_0xe4bc[2930]](this[_0xe4bc[2915]],_0x5d2ax3),null!=_0x5d2ax12&&(_0x5d2ax9=_0x5d2ax12)),null==this[_0xe4bc[2921]]&&null!=this[_0xe4bc[257]]&&(_0x5d2ax12=this[_0xe4bc[2931]](this[_0xe4bc[257]],null!=this[_0xe4bc[2922]]&&0<this[_0xe4bc[2922]][_0xe4bc[67]]?this[_0xe4bc[2922]][0]:_0x5d2ax9,_0x5d2ax3),null!=_0x5d2ax12&&(_0x5d2axa=_0x5d2ax12))};if(null==this[_0xe4bc[2915]]&&this[_0xe4bc[2900]]){_0x5d2ax12=_0x5d2axa;null!=this[_0xe4bc[2897]]&&2<this[_0xe4bc[2897]][_0xe4bc[439]][_0xe4bc[67]]&&(_0x5d2ax5=this[_0xe4bc[2897]][_0xe4bc[439]][this[_0xe4bc[2897]][_0xe4bc[439]][_0xe4bc[67]]-2],null!=_0x5d2ax5&&(_0x5d2ax12=_0x5d2ax5));_0x5d2ax5=_0x5d2ax9[_0xe4bc[235]]-_0x5d2ax12[_0xe4bc[235]];_0x5d2ax12=_0x5d2ax9[_0xe4bc[236]]-_0x5d2ax12[_0xe4bc[236]];_0x5d2ax13=Math[_0xe4bc[428]](_0x5d2ax5*_0x5d2ax5+_0x5d2ax12*_0x5d2ax12);if(0==_0x5d2ax13){return};_0x5d2ax9[_0xe4bc[235]]-=4*_0x5d2ax5/_0x5d2ax13;_0x5d2ax9[_0xe4bc[236]]-=4*_0x5d2ax12/_0x5d2ax13};if(null==this[_0xe4bc[253]]&&(_0x5d2ax5=Math[_0xe4bc[425]](_0x5d2ax4[_0xe4bc[235]]-this[_0xe4bc[2823]][_0xe4bc[235]]),_0x5d2ax12=Math[_0xe4bc[425]](_0x5d2ax4[_0xe4bc[236]]-this[_0xe4bc[2823]][_0xe4bc[236]]),_0x5d2ax5>this[_0xe4bc[1179]][_0xe4bc[2353]]||_0x5d2ax12>this[_0xe4bc[1179]][_0xe4bc[2353]])){this[_0xe4bc[253]]=this[_0xe4bc[2156]](),this[_0xe4bc[2928]](_0x5d2ax3)};null!=this[_0xe4bc[253]]&&(null!=this[_0xe4bc[2897]]?this[_0xe4bc[253]][_0xe4bc[1525]]=this[_0xe4bc[2897]][_0xe4bc[439]]:(_0x5d2ax4=[_0x5d2axa],null!=this[_0xe4bc[2922]]&&(_0x5d2ax4=_0x5d2ax4[_0xe4bc[1919]](this[_0xe4bc[2922]])),_0x5d2ax4[_0xe4bc[207]](_0x5d2ax9),this[_0xe4bc[253]][_0xe4bc[1525]]=_0x5d2ax4),this[_0xe4bc[2932]]());mxEvent[_0xe4bc[722]](_0x5d2ax3[_0xe4bc[727]]());_0x5d2ax3[_0xe4bc[722]]()}else {!this[_0xe4bc[994]]()||!this[_0xe4bc[1179]][_0xe4bc[994]]()?this[_0xe4bc[2886]][_0xe4bc[862]]():this[_0xe4bc[257]]!=this[_0xe4bc[2915]]&&null==this[_0xe4bc[2897]]?(this[_0xe4bc[2906]](this[_0xe4bc[2904]]),this[_0xe4bc[2904]]=null,null!=this[_0xe4bc[2915]]&&null==this[_0xe4bc[267]]&&(this[_0xe4bc[2904]]=this[_0xe4bc[2913]](this[_0xe4bc[2915]]),null==this[_0xe4bc[2904]]&&(this[_0xe4bc[2915]][_0xe4bc[1609]](mxConstants.CURSOR_CONNECT),_0x5d2ax3[_0xe4bc[722]]())),this[_0xe4bc[257]]=this[_0xe4bc[2915]]):this[_0xe4bc[257]]==this[_0xe4bc[2915]]&&(null!=this[_0xe4bc[2915]]&&null==this[_0xe4bc[2904]]&&!this[_0xe4bc[1179]][_0xe4bc[1009]])&&_0x5d2ax3[_0xe4bc[722]]()};null!=this[_0xe4bc[2886]][_0xe4bc[2920]]&&this[_0xe4bc[2885]][_0xe4bc[862]]();if(!this[_0xe4bc[1179]][_0xe4bc[1009]]&&null!=this[_0xe4bc[2915]]&&null!=this[_0xe4bc[2904]]){_0x5d2ax4= !1;_0x5d2axa=_0x5d2ax3[_0xe4bc[728]]();for(_0x5d2ax9=0;_0x5d2ax9<this[_0xe4bc[2904]][_0xe4bc[67]]&& !_0x5d2ax4;_0x5d2ax9++){_0x5d2ax4=_0x5d2axa==this[_0xe4bc[2904]][_0x5d2ax9][_0xe4bc[252]]||_0x5d2axa[_0xe4bc[265]]==this[_0xe4bc[2904]][_0x5d2ax9][_0xe4bc[252]]};_0x5d2ax4||this[_0xe4bc[2933]](this[_0xe4bc[2915]],this[_0xe4bc[2904]],_0x5d2ax3)}}else {this[_0xe4bc[2886]][_0xe4bc[862]]()}};mxConnectionHandler[_0xe4bc[202]][_0xe4bc[2930]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=null,_0x5d2ax5=_0x5d2ax2[_0xe4bc[441]],_0x5d2ax9=_0x5d2ax5[_0xe4bc[2305]](_0x5d2ax2);if(null!=_0x5d2ax9){var _0x5d2axa=null!=this[_0xe4bc[2922]]&&0<this[_0xe4bc[2922]][_0xe4bc[67]]?this[_0xe4bc[2922]][this[_0xe4bc[2922]][_0xe4bc[67]]-1]: new mxPoint(this[_0xe4bc[257]][_0xe4bc[241]](),this[_0xe4bc[257]][_0xe4bc[242]]()),_0x5d2ax5=_0x5d2ax9(_0x5d2ax5[_0xe4bc[2087]](_0x5d2ax2),this[_0xe4bc[2897]],_0x5d2axa,!1);null!=_0x5d2ax5&&(_0x5d2ax4=_0x5d2ax5)}else {_0x5d2ax4= new mxPoint(_0x5d2ax2[_0xe4bc[241]](),_0x5d2ax2[_0xe4bc[242]]())};return _0x5d2ax4};mxConnectionHandler[_0xe4bc[202]][_0xe4bc[2931]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){_0x5d2ax4=null;var _0x5d2ax5=_0x5d2ax2[_0xe4bc[441]],_0x5d2ax9=_0x5d2ax5[_0xe4bc[2305]](_0x5d2ax2),_0x5d2axa= new mxPoint(_0x5d2ax2[_0xe4bc[241]](),_0x5d2ax2[_0xe4bc[242]]());if(null!=_0x5d2ax9){var _0x5d2ax12=mxUtils[_0xe4bc[433]](_0x5d2ax2[_0xe4bc[124]],mxConstants.STYLE_ROTATION,0),_0x5d2ax13=-_0x5d2ax12*(Math[_0xe4bc[424]]/180);0!=_0x5d2ax12&&(_0x5d2ax3=mxUtils[_0xe4bc[432]]( new mxPoint(_0x5d2ax3[_0xe4bc[235]],_0x5d2ax3[_0xe4bc[236]]),Math[_0xe4bc[426]](_0x5d2ax13),Math[_0xe4bc[427]](_0x5d2ax13),_0x5d2axa));_0x5d2ax2=_0x5d2ax9(_0x5d2ax5[_0xe4bc[2087]](_0x5d2ax2),_0x5d2ax2,_0x5d2ax3,!1);null!=_0x5d2ax2&&(0!=_0x5d2ax12&&(_0x5d2ax2=mxUtils[_0xe4bc[432]]( new mxPoint(_0x5d2ax2[_0xe4bc[235]],_0x5d2ax2[_0xe4bc[236]]),Math[_0xe4bc[426]](-_0x5d2ax13),Math[_0xe4bc[427]](-_0x5d2ax13),_0x5d2axa)),_0x5d2ax4=_0x5d2ax2)}else {_0x5d2ax4=_0x5d2axa};return _0x5d2ax4};mxConnectionHandler[_0xe4bc[202]][_0xe4bc[2933]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){};mxConnectionHandler[_0xe4bc[202]][_0xe4bc[2934]]=function(_0x5d2ax2){return null!=_0x5d2ax2[_0xe4bc[248]]()};mxConnectionHandler[_0xe4bc[202]][_0xe4bc[2935]]=function(_0x5d2ax2){var _0x5d2ax3=mxUtils[_0xe4bc[2196]](this[_0xe4bc[1179]][_0xe4bc[526]],_0x5d2ax2[_0xe4bc[730]](),_0x5d2ax2[_0xe4bc[732]]()),_0x5d2ax4=Math[_0xe4bc[425]](_0x5d2ax3[_0xe4bc[235]]-this[_0xe4bc[2823]][_0xe4bc[235]]),_0x5d2ax3=Math[_0xe4bc[425]](_0x5d2ax3[_0xe4bc[236]]-this[_0xe4bc[2823]][_0xe4bc[236]]);if(null!=this[_0xe4bc[2922]]||1<this[_0xe4bc[2899]]&&(_0x5d2ax4>this[_0xe4bc[1179]][_0xe4bc[2353]]||_0x5d2ax3>this[_0xe4bc[1179]][_0xe4bc[2353]])){null==this[_0xe4bc[2922]]&&(this[_0xe4bc[2922]]=[]),_0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[255]],_0x5d2ax3= new mxPoint(this[_0xe4bc[1179]][_0xe4bc[1021]](_0x5d2ax2[_0xe4bc[734]]()/_0x5d2ax4)*_0x5d2ax4,this[_0xe4bc[1179]][_0xe4bc[1021]](_0x5d2ax2[_0xe4bc[735]]()/_0x5d2ax4)*_0x5d2ax4),this[_0xe4bc[2922]][_0xe4bc[207]](_0x5d2ax3)}};mxConnectionHandler[_0xe4bc[202]][_0xe4bc[789]]=function(_0x5d2ax2,_0x5d2ax3){if(!_0x5d2ax3[_0xe4bc[721]]()&&this[_0xe4bc[2908]]()){if(this[_0xe4bc[2887]]&&!this[_0xe4bc[2934]](_0x5d2ax3)){this[_0xe4bc[2935]](_0x5d2ax3);_0x5d2ax3[_0xe4bc[722]]();return};if(null==this[_0xe4bc[267]]){var _0x5d2ax4=null!=this[_0xe4bc[257]]?this[_0xe4bc[257]][_0xe4bc[246]]:null,_0x5d2ax5=null;null!=this[_0xe4bc[2886]][_0xe4bc[2920]]&&null!=this[_0xe4bc[2886]][_0xe4bc[2919]]&&(_0x5d2ax5=this[_0xe4bc[2886]][_0xe4bc[2919]][_0xe4bc[246]]);null==_0x5d2ax5&&this[_0xe4bc[2885]][_0xe4bc[2867]]()&&(_0x5d2ax5=this[_0xe4bc[2885]][_0xe4bc[2861]][_0xe4bc[246]]);this[_0xe4bc[807]](_0x5d2ax4,_0x5d2ax5,_0x5d2ax3[_0xe4bc[727]](),_0x5d2ax3[_0xe4bc[736]]())}else {null!=this[_0xe4bc[257]]&&(null!=this[_0xe4bc[2885]][_0xe4bc[2861]]&&this[_0xe4bc[257]][_0xe4bc[246]]==this[_0xe4bc[2885]][_0xe4bc[2861]][_0xe4bc[246]])&&this[_0xe4bc[1179]][_0xe4bc[2459]](this[_0xe4bc[2885]][_0xe4bc[1097]],evt),0<this[_0xe4bc[267]][_0xe4bc[67]]&&this[_0xe4bc[1179]][_0xe4bc[2580]](this[_0xe4bc[267]])};this[_0xe4bc[2906]](this[_0xe4bc[2904]]);_0x5d2ax3[_0xe4bc[722]]()};null!=this[_0xe4bc[2823]]&&this[_0xe4bc[862]]();this[_0xe4bc[2891]]=this[_0xe4bc[2890]]= !1};mxConnectionHandler[_0xe4bc[202]][_0xe4bc[862]]=function(){null!=this[_0xe4bc[253]]&&(this[_0xe4bc[253]][_0xe4bc[515]](),this[_0xe4bc[253]]=null);this[_0xe4bc[2906]](this[_0xe4bc[2904]]);this[_0xe4bc[2904]]=null;this[_0xe4bc[2885]][_0xe4bc[862]]();this[_0xe4bc[2886]][_0xe4bc[862]]();this[_0xe4bc[2921]]=this[_0xe4bc[267]]=this[_0xe4bc[257]]=this[_0xe4bc[2897]]=this[_0xe4bc[2926]]=null;this[_0xe4bc[2899]]=0;this[_0xe4bc[2916]]=this[_0xe4bc[2823]]=null;this[_0xe4bc[746]]( new mxEventObject(mxEvent.RESET))};mxConnectionHandler[_0xe4bc[202]][_0xe4bc[2932]]=function(){var _0x5d2ax2=null==this[_0xe4bc[267]];this[_0xe4bc[253]][_0xe4bc[1307]]=this[_0xe4bc[2936]](_0x5d2ax2);_0x5d2ax2=this[_0xe4bc[2937]](_0x5d2ax2);this[_0xe4bc[253]][_0xe4bc[1336]]=_0x5d2ax2;this[_0xe4bc[253]][_0xe4bc[258]]()};mxConnectionHandler[_0xe4bc[202]][_0xe4bc[2937]]=function(_0x5d2ax2){return _0x5d2ax2?mxConstants[_0xe4bc[2829]]:mxConstants[_0xe4bc[2938]]};mxConnectionHandler[_0xe4bc[202]][_0xe4bc[2936]]=function(_0x5d2ax2){return _0x5d2ax2?3:1};mxConnectionHandler[_0xe4bc[202]][_0xe4bc[807]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){if(null!=_0x5d2ax3||this[_0xe4bc[2901]]()||this[_0xe4bc[1179]][_0xe4bc[2406]]){var _0x5d2ax9=this[_0xe4bc[1179]][_0xe4bc[502]](),_0x5d2axa=null;_0x5d2ax9[_0xe4bc[473]]();try{if(null!=_0x5d2ax2&&(null==_0x5d2ax3&&this[_0xe4bc[2901]]())&&(_0x5d2ax3=this[_0xe4bc[2939]](_0x5d2ax4,_0x5d2ax2),null!=_0x5d2ax3)){_0x5d2ax5=this[_0xe4bc[1179]][_0xe4bc[564]]([_0x5d2ax3],_0x5d2ax4,_0x5d2ax5);if(null==_0x5d2ax5||!this[_0xe4bc[1179]][_0xe4bc[502]]()[_0xe4bc[250]](_0x5d2ax5)){var _0x5d2ax12=this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[248]](_0x5d2ax5);if(null!=_0x5d2ax12){var _0x5d2ax13=_0x5d2ax9[_0xe4bc[1721]](_0x5d2ax3);_0x5d2ax13[_0xe4bc[235]]-=_0x5d2ax12[_0xe4bc[2078]][_0xe4bc[235]];_0x5d2ax13[_0xe4bc[236]]-=_0x5d2ax12[_0xe4bc[2078]][_0xe4bc[236]]}}else {_0x5d2ax5=this[_0xe4bc[1179]][_0xe4bc[902]]()};this[_0xe4bc[1179]][_0xe4bc[2103]](_0x5d2ax3,_0x5d2ax5)};var _0x5d2ax14=this[_0xe4bc[1179]][_0xe4bc[902]]();null!=_0x5d2ax2&&(null!=_0x5d2ax3&&_0x5d2ax9[_0xe4bc[1197]](_0x5d2ax2)==_0x5d2ax9[_0xe4bc[1197]](_0x5d2ax3)&&_0x5d2ax9[_0xe4bc[1197]](_0x5d2ax9[_0xe4bc[1197]](_0x5d2ax2))!=_0x5d2ax9[_0xe4bc[501]]())&&(_0x5d2ax14=_0x5d2ax9[_0xe4bc[1197]](_0x5d2ax2),null!=_0x5d2ax2[_0xe4bc[256]]&&_0x5d2ax2[_0xe4bc[256]][_0xe4bc[1500]]&&(null!=_0x5d2ax3[_0xe4bc[256]]&&_0x5d2ax3[_0xe4bc[256]][_0xe4bc[1500]])&&(_0x5d2ax14=_0x5d2ax9[_0xe4bc[1197]](_0x5d2ax14)));_0x5d2ax13=_0x5d2ax12=null;null!=this[_0xe4bc[2897]]&&(_0x5d2ax12=this[_0xe4bc[2897]][_0xe4bc[246]][_0xe4bc[131]],_0x5d2ax13=this[_0xe4bc[2897]][_0xe4bc[246]][_0xe4bc[124]]);_0x5d2axa=this[_0xe4bc[1960]](_0x5d2ax14,null,_0x5d2ax12,_0x5d2ax2,_0x5d2ax3,_0x5d2ax13);if(null!=_0x5d2axa){this[_0xe4bc[1179]][_0xe4bc[2545]](_0x5d2axa,_0x5d2ax2,!0,this[_0xe4bc[2921]]);this[_0xe4bc[1179]][_0xe4bc[2545]](_0x5d2axa,_0x5d2ax3,!1,this[_0xe4bc[2886]][_0xe4bc[2920]]);null!=this[_0xe4bc[2897]]&&_0x5d2ax9[_0xe4bc[1724]](_0x5d2axa,this[_0xe4bc[2897]][_0xe4bc[246]][_0xe4bc[256]]);var _0x5d2ax15=_0x5d2ax9[_0xe4bc[1721]](_0x5d2axa);null==_0x5d2ax15&&(_0x5d2ax15= new mxGeometry,_0x5d2ax15[_0xe4bc[1500]]= !0,_0x5d2ax9[_0xe4bc[1724]](_0x5d2axa,_0x5d2ax15));if(null!=this[_0xe4bc[2922]]&&0<this[_0xe4bc[2922]][_0xe4bc[67]]){var _0x5d2ax16=this[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[255]],_0x5d2ax17=this[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[513]];_0x5d2ax15[_0xe4bc[1525]]=[];for(_0x5d2ax2=0;_0x5d2ax2<this[_0xe4bc[2922]][_0xe4bc[67]];_0x5d2ax2++){var _0x5d2ax18=this[_0xe4bc[2922]][_0x5d2ax2];_0x5d2ax15[_0xe4bc[1525]][_0xe4bc[207]]( new mxPoint(_0x5d2ax18[_0xe4bc[235]]/_0x5d2ax16-_0x5d2ax17[_0xe4bc[235]],_0x5d2ax18[_0xe4bc[236]]/_0x5d2ax16-_0x5d2ax17[_0xe4bc[236]]))}};null==_0x5d2ax3&&(_0x5d2ax18=this[_0xe4bc[1179]][_0xe4bc[2689]](_0x5d2ax4,!1),_0x5d2ax18[_0xe4bc[235]]-=this[_0xe4bc[1179]][_0xe4bc[1136]]/this[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[255]],_0x5d2ax18[_0xe4bc[236]]-=this[_0xe4bc[1179]][_0xe4bc[1137]]/this[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[255]],_0x5d2ax15[_0xe4bc[2007]](_0x5d2ax18,!1));this[_0xe4bc[746]]( new mxEventObject(mxEvent.CONNECT,_0xe4bc[246],_0x5d2axa,_0xe4bc[763],_0x5d2ax4,_0xe4bc[772],_0x5d2ax5))}}catch(q){mxLog[_0xe4bc[539]](),mxLog[_0xe4bc[143]](q[_0xe4bc[281]])}finally{_0x5d2ax9[_0xe4bc[476]]()};this[_0xe4bc[804]]&&this[_0xe4bc[2707]](_0x5d2axa,_0x5d2ax3)}};mxConnectionHandler[_0xe4bc[202]][_0xe4bc[2707]]=function(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[1179]][_0xe4bc[2450]](_0x5d2ax2)};mxConnectionHandler[_0xe4bc[202]][_0xe4bc[1960]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa){if(null==this[_0xe4bc[1033]]){return this[_0xe4bc[1179]][_0xe4bc[1960]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa)};_0x5d2ax3=this[_0xe4bc[2503]](_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa);return _0x5d2ax3=this[_0xe4bc[1179]][_0xe4bc[2504]](_0x5d2ax3,_0x5d2ax2,_0x5d2ax5,_0x5d2ax9)};mxConnectionHandler[_0xe4bc[202]][_0xe4bc[2939]]=function(_0x5d2ax2,_0x5d2ax3){for(var _0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[1198]](_0x5d2ax3);null!=_0x5d2ax4&&_0x5d2ax4[_0xe4bc[1500]];){_0x5d2ax3=this[_0xe4bc[1179]][_0xe4bc[502]]()[_0xe4bc[1197]](_0x5d2ax3),_0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[1198]](_0x5d2ax3)};var _0x5d2ax5=this[_0xe4bc[1179]][_0xe4bc[899]]([_0x5d2ax3])[0],_0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[502]]()[_0xe4bc[1721]](_0x5d2ax5);if(null!=_0x5d2ax4){var _0x5d2ax9=this[_0xe4bc[1179]][_0xe4bc[2689]](_0x5d2ax2);_0x5d2ax4[_0xe4bc[235]]=this[_0xe4bc[1179]][_0xe4bc[1021]](_0x5d2ax9[_0xe4bc[235]]-_0x5d2ax4[_0xe4bc[117]]/2)-this[_0xe4bc[1179]][_0xe4bc[1136]]/this[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[255]];_0x5d2ax4[_0xe4bc[236]]=this[_0xe4bc[1179]][_0xe4bc[1021]](_0x5d2ax9[_0xe4bc[236]]-_0x5d2ax4[_0xe4bc[119]]/2)-this[_0xe4bc[1179]][_0xe4bc[1137]]/this[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[255]];if(null!=this[_0xe4bc[2823]]){var _0x5d2axa=this[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax3);if(null!=_0x5d2axa){var _0x5d2ax12=this[_0xe4bc[2940]]();Math[_0xe4bc[425]](this[_0xe4bc[1179]][_0xe4bc[1021]](this[_0xe4bc[2823]][_0xe4bc[235]])-this[_0xe4bc[1179]][_0xe4bc[1021]](_0x5d2ax9[_0xe4bc[235]]))<=_0x5d2ax12?_0x5d2ax4[_0xe4bc[235]]=_0x5d2axa[_0xe4bc[235]]:Math[_0xe4bc[425]](this[_0xe4bc[1179]][_0xe4bc[1021]](this[_0xe4bc[2823]][_0xe4bc[236]])-this[_0xe4bc[1179]][_0xe4bc[1021]](_0x5d2ax9[_0xe4bc[236]]))<=_0x5d2ax12&&(_0x5d2ax4[_0xe4bc[236]]=_0x5d2axa[_0xe4bc[236]])}}};return _0x5d2ax5};mxConnectionHandler[_0xe4bc[202]][_0xe4bc[2940]]=function(){return this[_0xe4bc[1179]][_0xe4bc[997]]()?this[_0xe4bc[1179]][_0xe4bc[1020]]:this[_0xe4bc[1179]][_0xe4bc[2353]]};mxConnectionHandler[_0xe4bc[202]][_0xe4bc[2503]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){var _0x5d2ax9=null;null!=this[_0xe4bc[1033]]&&(_0x5d2ax9=this[_0xe4bc[1033]](_0x5d2ax3,_0x5d2ax4,_0x5d2ax5));null==_0x5d2ax9&&(_0x5d2ax9= new mxCell(_0x5d2ax2||_0xe4bc[110]),_0x5d2ax9[_0xe4bc[1994]](!0),_0x5d2ax9[_0xe4bc[475]](_0x5d2ax5),_0x5d2ax2= new mxGeometry,_0x5d2ax2[_0xe4bc[1500]]= !0,_0x5d2ax9[_0xe4bc[1724]](_0x5d2ax2));return _0x5d2ax9};mxConnectionHandler[_0xe4bc[202]][_0xe4bc[515]]=function(){this[_0xe4bc[1179]][_0xe4bc[1148]](this);null!=this[_0xe4bc[253]]&&(this[_0xe4bc[253]][_0xe4bc[515]](),this[_0xe4bc[253]]=null);null!=this[_0xe4bc[2885]]&&(this[_0xe4bc[2885]][_0xe4bc[515]](),this[_0xe4bc[2885]]=null);null!=this[_0xe4bc[2886]]&&(this[_0xe4bc[2886]][_0xe4bc[515]](),this[_0xe4bc[2886]]=null);null!=this[_0xe4bc[1176]]&&(this[_0xe4bc[1179]][_0xe4bc[502]]()[_0xe4bc[745]](this[_0xe4bc[1176]]),this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[745]](this[_0xe4bc[1176]]),this[_0xe4bc[1176]]=null);null!=this[_0xe4bc[2898]]&&(this[_0xe4bc[1179]][_0xe4bc[745]](this[_0xe4bc[2898]]),this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[745]](this[_0xe4bc[2898]]),this[_0xe4bc[2898]]=null)};function mxConstraintHandler(_0x5d2ax2){this[_0xe4bc[1179]]=_0x5d2ax2}mxConstraintHandler[_0xe4bc[202]][_0xe4bc[2941]]= new mxImage(mxClient[_0xe4bc[88]]+_0xe4bc[2942],5,5);mxConstraintHandler[_0xe4bc[202]][_0xe4bc[1179]]=null;mxConstraintHandler[_0xe4bc[202]][_0xe4bc[984]]= !0;mxConstraintHandler[_0xe4bc[202]][_0xe4bc[2943]]=mxConstants[_0xe4bc[2854]];mxConstraintHandler[_0xe4bc[202]][_0xe4bc[994]]=function(){return this[_0xe4bc[984]]};mxConstraintHandler[_0xe4bc[202]][_0xe4bc[995]]=function(_0x5d2ax2){this[_0xe4bc[984]]=_0x5d2ax2};mxConstraintHandler[_0xe4bc[202]][_0xe4bc[862]]=function(){if(null!=this[_0xe4bc[2944]]){for(var _0x5d2ax2=0;_0x5d2ax2<this[_0xe4bc[2944]][_0xe4bc[67]];_0x5d2ax2++){this[_0xe4bc[2944]][_0x5d2ax2][_0xe4bc[515]]()};this[_0xe4bc[2944]]=null};null!=this[_0xe4bc[2945]]&&(this[_0xe4bc[2945]][_0xe4bc[515]](),this[_0xe4bc[2945]]=null);this[_0xe4bc[2946]]=this[_0xe4bc[2919]]=this[_0xe4bc[987]]=this[_0xe4bc[2947]]=this[_0xe4bc[2920]]=null};mxConstraintHandler[_0xe4bc[202]][_0xe4bc[2636]]=function(){return this[_0xe4bc[1179]][_0xe4bc[2636]]()};mxConstraintHandler[_0xe4bc[202]][_0xe4bc[2948]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){return this[_0xe4bc[2941]]};mxConstraintHandler[_0xe4bc[202]][_0xe4bc[2949]]=function(_0x5d2ax2,_0x5d2ax3){return !1};mxConstraintHandler[_0xe4bc[202]][_0xe4bc[2729]]=function(_0x5d2ax2,_0x5d2ax3){if(this[_0xe4bc[994]]()&&!this[_0xe4bc[2949]](_0x5d2ax2)){var _0x5d2ax4=this[_0xe4bc[2636]](),_0x5d2ax5= new mxRectangle(_0x5d2ax2[_0xe4bc[734]]()-_0x5d2ax4,_0x5d2ax2[_0xe4bc[735]]()-_0x5d2ax4,2*_0x5d2ax4,2*_0x5d2ax4),_0x5d2ax9=null!=_0x5d2ax2[_0xe4bc[736]]()?this[_0xe4bc[1179]][_0xe4bc[2565]](_0x5d2ax2[_0xe4bc[736]]()):!1;if(null==this[_0xe4bc[2947]]||!mxUtils[_0xe4bc[1825]](this[_0xe4bc[2947]],_0x5d2ax5)||null!=_0x5d2ax2[_0xe4bc[248]]()&&null!=this[_0xe4bc[2919]]&&_0x5d2ax9){if(this[_0xe4bc[2947]]=null,_0x5d2ax2[_0xe4bc[248]]()!=this[_0xe4bc[2919]]){if(this[_0xe4bc[2919]]=null,this[_0xe4bc[1531]]=null!=_0x5d2ax2[_0xe4bc[248]]()&&_0x5d2ax9?this[_0xe4bc[1179]][_0xe4bc[2538]](_0x5d2ax2[_0xe4bc[248]](),_0x5d2ax3):null,null!=this[_0xe4bc[1531]]){this[_0xe4bc[2919]]=_0x5d2ax2[_0xe4bc[248]]();this[_0xe4bc[2947]]= new mxRectangle(_0x5d2ax2[_0xe4bc[248]]()[_0xe4bc[235]],_0x5d2ax2[_0xe4bc[248]]()[_0xe4bc[236]],_0x5d2ax2[_0xe4bc[248]]()[_0xe4bc[117]],_0x5d2ax2[_0xe4bc[248]]()[_0xe4bc[119]]);if(null!=this[_0xe4bc[2944]]){for(_0x5d2ax9=0;_0x5d2ax9<this[_0xe4bc[2944]][_0xe4bc[67]];_0x5d2ax9++){this[_0xe4bc[2944]][_0x5d2ax9][_0xe4bc[515]]()};this[_0xe4bc[2946]]=this[_0xe4bc[2944]]=null};this[_0xe4bc[2944]]=[];this[_0xe4bc[2946]]=[];for(_0x5d2ax9=0;_0x5d2ax9<this[_0xe4bc[1531]][_0xe4bc[67]];_0x5d2ax9++){var _0x5d2axa=this[_0xe4bc[1179]][_0xe4bc[2290]](_0x5d2ax2[_0xe4bc[248]](),this[_0xe4bc[1531]][_0x5d2ax9]),_0x5d2ax12=this[_0xe4bc[2948]](_0x5d2ax2[_0xe4bc[248]](),this[_0xe4bc[1531]][_0x5d2ax9],_0x5d2axa),_0x5d2ax13=_0x5d2ax12[_0xe4bc[390]],_0x5d2ax12= new mxRectangle(_0x5d2axa[_0xe4bc[235]]-_0x5d2ax12[_0xe4bc[117]]/2,_0x5d2axa[_0xe4bc[236]]-_0x5d2ax12[_0xe4bc[119]]/2,_0x5d2ax12[_0xe4bc[117]],_0x5d2ax12[_0xe4bc[119]]),_0x5d2ax12= new mxImageShape(_0x5d2ax12,_0x5d2ax13);_0x5d2ax12[_0xe4bc[507]]=this[_0xe4bc[1179]][_0xe4bc[507]]!=mxConstants[_0xe4bc[508]]?mxConstants[_0xe4bc[2334]]:mxConstants[_0xe4bc[508]];_0x5d2ax12[_0xe4bc[1674]]= !1;_0x5d2ax12[_0xe4bc[176]](this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[1524]]());null!=_0x5d2ax12[_0xe4bc[252]][_0xe4bc[328]]&&_0x5d2ax12[_0xe4bc[252]][_0xe4bc[265]][_0xe4bc[950]](_0x5d2ax12[_0xe4bc[252]],_0x5d2ax12[_0xe4bc[252]][_0xe4bc[265]][_0xe4bc[285]]);_0x5d2ax13=mxUtils[_0xe4bc[885]](this,function(){return null!=this[_0xe4bc[2919]]?this[_0xe4bc[2919]]:_0x5d2ax2[_0xe4bc[248]]()});_0x5d2ax12[_0xe4bc[258]]();mxEvent[_0xe4bc[2733]](_0x5d2ax12[_0xe4bc[252]],this[_0xe4bc[1179]],_0x5d2ax13);this[_0xe4bc[2947]][_0xe4bc[99]](_0x5d2ax12[_0xe4bc[1562]]);this[_0xe4bc[2944]][_0xe4bc[207]](_0x5d2ax12);this[_0xe4bc[2946]][_0xe4bc[207]](_0x5d2axa)};this[_0xe4bc[2947]][_0xe4bc[244]](_0x5d2ax4)}else {if(null!=this[_0xe4bc[2944]]){null!=this[_0xe4bc[2945]]&&(this[_0xe4bc[2945]][_0xe4bc[515]](),this[_0xe4bc[2945]]=null);for(_0x5d2ax9=0;_0x5d2ax9<this[_0xe4bc[2944]][_0xe4bc[67]];_0x5d2ax9++){this[_0xe4bc[2944]][_0x5d2ax9][_0xe4bc[515]]()};this[_0xe4bc[2946]]=this[_0xe4bc[2944]]=null}}}};this[_0xe4bc[987]]=this[_0xe4bc[2920]]=null;if(null!=this[_0xe4bc[2944]]&&null!=this[_0xe4bc[1531]]&&(null==_0x5d2ax2[_0xe4bc[248]]()||this[_0xe4bc[2919]]==_0x5d2ax2[_0xe4bc[248]]())){for(_0x5d2ax9=0;_0x5d2ax9<this[_0xe4bc[2944]][_0xe4bc[67]];_0x5d2ax9++){if(mxUtils[_0xe4bc[1825]](this[_0xe4bc[2944]][_0x5d2ax9][_0xe4bc[1562]],_0x5d2ax5)){this[_0xe4bc[2920]]=this[_0xe4bc[1531]][_0x5d2ax9];this[_0xe4bc[987]]=this[_0xe4bc[2946]][_0x5d2ax9];_0x5d2ax4=this[_0xe4bc[2944]][_0x5d2ax9][_0xe4bc[1562]][_0xe4bc[238]]();_0x5d2ax4[_0xe4bc[244]](mxClient[_0xe4bc[80]]?3:2);mxClient[_0xe4bc[80]]&&(_0x5d2ax4[_0xe4bc[117]]-=1,_0x5d2ax4[_0xe4bc[119]]-=1);null==this[_0xe4bc[2945]]?(_0x5d2ax4= new mxRectangleShape(_0x5d2ax4,null,this[_0xe4bc[2943]],3),_0x5d2ax4[_0xe4bc[507]]=this[_0xe4bc[1179]][_0xe4bc[507]]==mxConstants[_0xe4bc[508]]?mxConstants[_0xe4bc[508]]:mxConstants[_0xe4bc[1523]],_0x5d2ax4[_0xe4bc[176]](this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[1524]]()),this[_0xe4bc[2945]]=_0x5d2ax4,_0x5d2ax13=mxUtils[_0xe4bc[885]](this,function(){return null!=this[_0xe4bc[2919]]?this[_0xe4bc[2919]]:_0x5d2ax2[_0xe4bc[248]]()}),mxEvent[_0xe4bc[2733]](_0x5d2ax4[_0xe4bc[252]],this[_0xe4bc[1179]],_0x5d2ax13)):(this[_0xe4bc[2945]][_0xe4bc[1562]]=_0x5d2ax4,this[_0xe4bc[2945]][_0xe4bc[258]]());break}}};null==this[_0xe4bc[2920]]&&null!=this[_0xe4bc[2945]]&&(this[_0xe4bc[2945]][_0xe4bc[515]](),this[_0xe4bc[2945]]=null)}};mxConstraintHandler[_0xe4bc[202]][_0xe4bc[515]]=function(){this[_0xe4bc[862]]()};function mxRubberband(_0x5d2ax2){null!=_0x5d2ax2&&(this[_0xe4bc[1179]]=_0x5d2ax2,this[_0xe4bc[1179]][_0xe4bc[1133]](this),this[_0xe4bc[2730]]=mxUtils[_0xe4bc[885]](this,function(){this[_0xe4bc[2950]]()}),this[_0xe4bc[1179]][_0xe4bc[169]](mxEvent.PAN,this[_0xe4bc[2730]]),mxClient[_0xe4bc[80]]&&mxEvent[_0xe4bc[169]](window,_0xe4bc[2428],mxUtils[_0xe4bc[885]](this,function(){this[_0xe4bc[515]]()})))}mxRubberband[_0xe4bc[202]][_0xe4bc[2951]]=20;mxRubberband[_0xe4bc[202]][_0xe4bc[984]]= !0;mxRubberband[_0xe4bc[202]][_0xe4bc[485]]=null;mxRubberband[_0xe4bc[202]][_0xe4bc[2952]]=null;mxRubberband[_0xe4bc[202]][_0xe4bc[2953]]=0;mxRubberband[_0xe4bc[202]][_0xe4bc[2954]]=0;mxRubberband[_0xe4bc[202]][_0xe4bc[994]]=function(){return this[_0xe4bc[984]]};mxRubberband[_0xe4bc[202]][_0xe4bc[995]]=function(_0x5d2ax2){this[_0xe4bc[984]]=_0x5d2ax2};mxRubberband[_0xe4bc[202]][_0xe4bc[787]]=function(_0x5d2ax2,_0x5d2ax3){if(!_0x5d2ax3[_0xe4bc[721]]()&&this[_0xe4bc[994]]()&&this[_0xe4bc[1179]][_0xe4bc[994]]()&&(this[_0xe4bc[1179]][_0xe4bc[2579]](_0x5d2ax3[_0xe4bc[727]]())||null==_0x5d2ax3[_0xe4bc[248]]())){var _0x5d2ax4=mxUtils[_0xe4bc[445]](this[_0xe4bc[1179]][_0xe4bc[526]]),_0x5d2ax5=mxUtils[_0xe4bc[444]](this[_0xe4bc[1179]][_0xe4bc[526]]);_0x5d2ax5[_0xe4bc[235]]-=_0x5d2ax4[_0xe4bc[235]];_0x5d2ax5[_0xe4bc[236]]-=_0x5d2ax4[_0xe4bc[236]];this[_0xe4bc[861]](_0x5d2ax3[_0xe4bc[730]]()+_0x5d2ax5[_0xe4bc[235]],_0x5d2ax3[_0xe4bc[732]]()+_0x5d2ax5[_0xe4bc[236]]);if(mxClient[_0xe4bc[133]]&&!mxClient[_0xe4bc[75]]&&!mxClient[_0xe4bc[76]]){var _0x5d2ax9=this[_0xe4bc[1179]][_0xe4bc[526]],_0x5d2axa=function(_0x5d2ax2){_0x5d2ax2= new mxMouseEvent(_0x5d2ax2);var _0x5d2ax3=mxUtils[_0xe4bc[2196]](_0x5d2ax9,_0x5d2ax2[_0xe4bc[730]](),_0x5d2ax2[_0xe4bc[732]]());_0x5d2ax2[_0xe4bc[725]]=_0x5d2ax3[_0xe4bc[235]];_0x5d2ax2[_0xe4bc[726]]=_0x5d2ax3[_0xe4bc[236]];return _0x5d2ax2};this[_0xe4bc[2955]]=mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){this[_0xe4bc[788]](this[_0xe4bc[1179]],_0x5d2axa(_0x5d2ax2))});this[_0xe4bc[981]]=mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){this[_0xe4bc[789]](this[_0xe4bc[1179]],_0x5d2axa(_0x5d2ax2))});mxEvent[_0xe4bc[169]](document,_0xe4bc[752],this[_0xe4bc[2955]]);mxEvent[_0xe4bc[169]](document,_0xe4bc[753],this[_0xe4bc[981]])};_0x5d2ax3[_0xe4bc[722]](!1)}};mxRubberband[_0xe4bc[202]][_0xe4bc[861]]=function(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[2823]]= new mxPoint(_0x5d2ax2,_0x5d2ax3)};mxRubberband[_0xe4bc[202]][_0xe4bc[788]]=function(_0x5d2ax2,_0x5d2ax3){if(!_0x5d2ax3[_0xe4bc[721]]()&&null!=this[_0xe4bc[2823]]){var _0x5d2ax4=mxUtils[_0xe4bc[444]](this[_0xe4bc[1179]][_0xe4bc[526]]),_0x5d2ax5=mxUtils[_0xe4bc[445]](this[_0xe4bc[1179]][_0xe4bc[526]]);_0x5d2ax4[_0xe4bc[235]]-=_0x5d2ax5[_0xe4bc[235]];_0x5d2ax4[_0xe4bc[236]]-=_0x5d2ax5[_0xe4bc[236]];var _0x5d2ax5=_0x5d2ax3[_0xe4bc[730]]()+_0x5d2ax4[_0xe4bc[235]],_0x5d2ax4=_0x5d2ax3[_0xe4bc[732]]()+_0x5d2ax4[_0xe4bc[236]],_0x5d2ax9=this[_0xe4bc[2823]][_0xe4bc[235]]-_0x5d2ax5,_0x5d2axa=this[_0xe4bc[2823]][_0xe4bc[236]]-_0x5d2ax4,_0x5d2ax12=this[_0xe4bc[1179]][_0xe4bc[2353]];if(null!=this[_0xe4bc[485]]||Math[_0xe4bc[425]](_0x5d2ax9)>_0x5d2ax12||Math[_0xe4bc[425]](_0x5d2axa)>_0x5d2ax12){null==this[_0xe4bc[485]]&&(this[_0xe4bc[485]]=this[_0xe4bc[2156]]()),mxUtils[_0xe4bc[2440]](),this[_0xe4bc[2729]](_0x5d2ax5,_0x5d2ax4),_0x5d2ax3[_0xe4bc[722]]()}}};mxRubberband[_0xe4bc[202]][_0xe4bc[2156]]=function(){null==this[_0xe4bc[2952]]&&(this[_0xe4bc[2952]]=document[_0xe4bc[55]](_0xe4bc[485]),this[_0xe4bc[2952]][_0xe4bc[926]]=_0xe4bc[2956],mxUtils[_0xe4bc[254]](this[_0xe4bc[2952]],this[_0xe4bc[2951]]));this[_0xe4bc[1179]][_0xe4bc[526]][_0xe4bc[62]](this[_0xe4bc[2952]]);return this[_0xe4bc[2952]]};mxRubberband[_0xe4bc[202]][_0xe4bc[789]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=null!=this[_0xe4bc[485]];this[_0xe4bc[862]]();_0x5d2ax4&&(_0x5d2ax4= new mxRectangle(this[_0xe4bc[235]],this[_0xe4bc[236]],this[_0xe4bc[117]],this[_0xe4bc[119]]),this[_0xe4bc[1179]][_0xe4bc[2698]](_0x5d2ax4,_0x5d2ax3[_0xe4bc[727]]()),_0x5d2ax3[_0xe4bc[722]]())};mxRubberband[_0xe4bc[202]][_0xe4bc[862]]=function(){null!=this[_0xe4bc[485]]&&this[_0xe4bc[485]][_0xe4bc[265]][_0xe4bc[266]](this[_0xe4bc[485]]);null!=this[_0xe4bc[2955]]&&(mxEvent[_0xe4bc[745]](document,_0xe4bc[752],this[_0xe4bc[2955]]),this[_0xe4bc[2955]]=null);null!=this[_0xe4bc[981]]&&(mxEvent[_0xe4bc[745]](document,_0xe4bc[753],this[_0xe4bc[981]]),this[_0xe4bc[981]]=null);this[_0xe4bc[2954]]=this[_0xe4bc[2953]]=0;this[_0xe4bc[485]]=this[_0xe4bc[2823]]=null};mxRubberband[_0xe4bc[202]][_0xe4bc[2729]]=function(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[2953]]=_0x5d2ax2;this[_0xe4bc[2954]]=_0x5d2ax3;this[_0xe4bc[2950]]()};mxRubberband[_0xe4bc[202]][_0xe4bc[2950]]=function(){if(null!=this[_0xe4bc[485]]){var _0x5d2ax2=this[_0xe4bc[2953]]-this[_0xe4bc[1179]][_0xe4bc[1136]],_0x5d2ax3=this[_0xe4bc[2954]]-this[_0xe4bc[1179]][_0xe4bc[1137]];this[_0xe4bc[235]]=Math[_0xe4bc[243]](this[_0xe4bc[2823]][_0xe4bc[235]],_0x5d2ax2);this[_0xe4bc[236]]=Math[_0xe4bc[243]](this[_0xe4bc[2823]][_0xe4bc[236]],_0x5d2ax3);this[_0xe4bc[117]]=Math[_0xe4bc[160]](this[_0xe4bc[2823]][_0xe4bc[235]],_0x5d2ax2)-this[_0xe4bc[235]];this[_0xe4bc[119]]=Math[_0xe4bc[160]](this[_0xe4bc[2823]][_0xe4bc[236]],_0x5d2ax3)-this[_0xe4bc[236]];_0x5d2ax2=mxClient[_0xe4bc[47]]?this[_0xe4bc[1179]][_0xe4bc[1137]]:0;this[_0xe4bc[485]][_0xe4bc[124]][_0xe4bc[361]]=this[_0xe4bc[235]]+(mxClient[_0xe4bc[47]]?this[_0xe4bc[1179]][_0xe4bc[1136]]:0)+_0xe4bc[168];this[_0xe4bc[485]][_0xe4bc[124]][_0xe4bc[125]]=this[_0xe4bc[236]]+_0x5d2ax2+_0xe4bc[168];this[_0xe4bc[485]][_0xe4bc[124]][_0xe4bc[117]]=Math[_0xe4bc[160]](1,this[_0xe4bc[117]])+_0xe4bc[168];this[_0xe4bc[485]][_0xe4bc[124]][_0xe4bc[119]]=Math[_0xe4bc[160]](1,this[_0xe4bc[119]])+_0xe4bc[168]}};mxRubberband[_0xe4bc[202]][_0xe4bc[515]]=function(){this[_0xe4bc[2717]]||(this[_0xe4bc[2717]]= !0,this[_0xe4bc[1179]][_0xe4bc[1148]](this),this[_0xe4bc[1179]][_0xe4bc[745]](this[_0xe4bc[2730]]),this[_0xe4bc[862]](),null!=this[_0xe4bc[2952]]&&(this[_0xe4bc[2952]]=null))};function mxVertexHandler(_0x5d2ax2){null!=_0x5d2ax2&&(this[_0xe4bc[724]]=_0x5d2ax2,this[_0xe4bc[176]]())}mxVertexHandler[_0xe4bc[202]][_0xe4bc[1179]]=null;mxVertexHandler[_0xe4bc[202]][_0xe4bc[724]]=null;mxVertexHandler[_0xe4bc[202]][_0xe4bc[2957]]= !1;mxVertexHandler[_0xe4bc[202]][_0xe4bc[1983]]=null;mxVertexHandler[_0xe4bc[202]][_0xe4bc[2958]]= !0;mxVertexHandler[_0xe4bc[202]][_0xe4bc[2959]]=null;mxVertexHandler[_0xe4bc[202]][_0xe4bc[2353]]=0;mxVertexHandler[_0xe4bc[202]][_0xe4bc[2809]]= !1;mxVertexHandler[_0xe4bc[202]][_0xe4bc[2960]]= !0;mxVertexHandler[_0xe4bc[202]][_0xe4bc[176]]=function(){this[_0xe4bc[1179]]=this[_0xe4bc[724]][_0xe4bc[441]][_0xe4bc[1179]];this[_0xe4bc[2961]]=this[_0xe4bc[2962]](this[_0xe4bc[724]]);this[_0xe4bc[1562]]= new mxRectangle(this[_0xe4bc[2961]][_0xe4bc[235]],this[_0xe4bc[2961]][_0xe4bc[236]],this[_0xe4bc[2961]][_0xe4bc[117]],this[_0xe4bc[2961]][_0xe4bc[119]]);this[_0xe4bc[2732]]=this[_0xe4bc[2963]](this[_0xe4bc[1562]]);this[_0xe4bc[2732]][_0xe4bc[507]]=this[_0xe4bc[1179]][_0xe4bc[507]]!=mxConstants[_0xe4bc[508]]?mxConstants[_0xe4bc[1523]]:mxConstants[_0xe4bc[508]];this[_0xe4bc[2732]][_0xe4bc[1229]]= !1;this[_0xe4bc[2732]][_0xe4bc[176]](this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[1524]]());this[_0xe4bc[1179]][_0xe4bc[1712]](this[_0xe4bc[724]][_0xe4bc[246]])&&(this[_0xe4bc[2732]][_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[270]]=mxConstants[_0xe4bc[2832]]);mxEvent[_0xe4bc[2733]](this[_0xe4bc[2732]][_0xe4bc[252]],this[_0xe4bc[1179]],this[_0xe4bc[724]]);if(0>=mxGraphHandler[_0xe4bc[202]][_0xe4bc[2795]]||this[_0xe4bc[1179]][_0xe4bc[2694]]()<mxGraphHandler[_0xe4bc[202]][_0xe4bc[2795]]){var _0x5d2ax2=this[_0xe4bc[1179]][_0xe4bc[2657]](this[_0xe4bc[724]][_0xe4bc[246]]);this[_0xe4bc[2964]]=[];if(_0x5d2ax2||this[_0xe4bc[1179]][_0xe4bc[2628]](this[_0xe4bc[724]][_0xe4bc[246]])&&2<=this[_0xe4bc[724]][_0xe4bc[117]]&&2<=this[_0xe4bc[724]][_0xe4bc[119]]){var _0x5d2ax3=0;_0x5d2ax2&&(this[_0xe4bc[2957]]||(this[_0xe4bc[2964]][_0xe4bc[207]](this[_0xe4bc[2735]](_0xe4bc[936],_0x5d2ax3++)),this[_0xe4bc[2964]][_0xe4bc[207]](this[_0xe4bc[2735]](_0xe4bc[2965],_0x5d2ax3++)),this[_0xe4bc[2964]][_0xe4bc[207]](this[_0xe4bc[2735]](_0xe4bc[2966],_0x5d2ax3++)),this[_0xe4bc[2964]][_0xe4bc[207]](this[_0xe4bc[2735]](_0xe4bc[2967],_0x5d2ax3++)),this[_0xe4bc[2964]][_0xe4bc[207]](this[_0xe4bc[2735]](_0xe4bc[2968],_0x5d2ax3++)),this[_0xe4bc[2964]][_0xe4bc[207]](this[_0xe4bc[2735]](_0xe4bc[2969],_0x5d2ax3++)),this[_0xe4bc[2964]][_0xe4bc[207]](this[_0xe4bc[2735]](_0xe4bc[2970],_0x5d2ax3++))),this[_0xe4bc[2964]][_0xe4bc[207]](this[_0xe4bc[2735]](_0xe4bc[2971],_0x5d2ax3++)));_0x5d2ax2=this[_0xe4bc[1179]][_0xe4bc[251]][_0xe4bc[1721]](this[_0xe4bc[724]][_0xe4bc[246]]);null!=_0x5d2ax2&&(!_0x5d2ax2[_0xe4bc[1500]]&&!this[_0xe4bc[1179]][_0xe4bc[1730]](this[_0xe4bc[724]][_0xe4bc[246]])&&this[_0xe4bc[1179]][_0xe4bc[2628]](this[_0xe4bc[724]][_0xe4bc[246]]))&&(this[_0xe4bc[2972]]=this[_0xe4bc[2735]](mxConstants.CURSOR_LABEL_HANDLE,mxEvent.LABEL_HANDLE,mxConstants.LABEL_HANDLE_SIZE,mxConstants.LABEL_HANDLE_FILLCOLOR),this[_0xe4bc[2964]][_0xe4bc[207]](this[_0xe4bc[2972]]))}else {this[_0xe4bc[1179]][_0xe4bc[1712]](this[_0xe4bc[724]][_0xe4bc[246]])&&(!this[_0xe4bc[1179]][_0xe4bc[2657]](this[_0xe4bc[724]][_0xe4bc[246]])&&2>this[_0xe4bc[724]][_0xe4bc[117]]&&2>this[_0xe4bc[724]][_0xe4bc[119]])&&(this[_0xe4bc[2972]]=this[_0xe4bc[2735]](mxConstants.CURSOR_MOVABLE_VERTEX,null,null,mxConstants.LABEL_HANDLE_FILLCOLOR),this[_0xe4bc[2964]][_0xe4bc[207]](this[_0xe4bc[2972]]))}};if(this[_0xe4bc[2809]]&&(0>=mxGraphHandler[_0xe4bc[202]][_0xe4bc[2795]]||this[_0xe4bc[1179]][_0xe4bc[2694]]()<mxGraphHandler[_0xe4bc[202]][_0xe4bc[2795]])){this[_0xe4bc[2973]]=this[_0xe4bc[2735]](_0xe4bc[356],mxEvent.ROTATION_HANDLE,mxConstants[_0xe4bc[2974]]+3,mxConstants.HANDLE_FILLCOLOR),this[_0xe4bc[2964]][_0xe4bc[207]](this[_0xe4bc[2973]])};this[_0xe4bc[258]]()};mxVertexHandler[_0xe4bc[202]][_0xe4bc[2962]]=function(_0x5d2ax2){return  new mxRectangle(Math[_0xe4bc[488]](_0x5d2ax2[_0xe4bc[235]]),Math[_0xe4bc[488]](_0x5d2ax2[_0xe4bc[236]]),Math[_0xe4bc[488]](_0x5d2ax2[_0xe4bc[117]]),Math[_0xe4bc[488]](_0x5d2ax2[_0xe4bc[119]]))};mxVertexHandler[_0xe4bc[202]][_0xe4bc[2963]]=function(_0x5d2ax2){_0x5d2ax2= new mxRectangleShape(_0x5d2ax2,null,this[_0xe4bc[2975]]());_0x5d2ax2[_0xe4bc[1307]]=this[_0xe4bc[2976]]();_0x5d2ax2[_0xe4bc[1522]]=this[_0xe4bc[2977]]();return _0x5d2ax2};mxVertexHandler[_0xe4bc[202]][_0xe4bc[2975]]=function(){return mxConstants[_0xe4bc[2978]]};mxVertexHandler[_0xe4bc[202]][_0xe4bc[2976]]=function(){return mxConstants[_0xe4bc[2979]]};mxVertexHandler[_0xe4bc[202]][_0xe4bc[2977]]=function(){return mxConstants[_0xe4bc[2980]]};mxVertexHandler[_0xe4bc[202]][_0xe4bc[2735]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){_0x5d2ax4=_0x5d2ax4||mxConstants[_0xe4bc[2974]];_0x5d2ax4= new mxRectangle(0,0,_0x5d2ax4,_0x5d2ax4);_0x5d2ax5=this[_0xe4bc[2981]](_0x5d2ax4,_0x5d2ax3,_0x5d2ax5);_0x5d2ax5[_0xe4bc[1567]]()&&null!=this[_0xe4bc[724]][_0xe4bc[963]]&&this[_0xe4bc[724]][_0xe4bc[963]][_0xe4bc[252]][_0xe4bc[265]]==this[_0xe4bc[1179]][_0xe4bc[526]]?(_0x5d2ax5[_0xe4bc[1562]][_0xe4bc[119]]-=1,_0x5d2ax5[_0xe4bc[1562]][_0xe4bc[117]]-=1,_0x5d2ax5[_0xe4bc[507]]=mxConstants[_0xe4bc[1656]],_0x5d2ax5[_0xe4bc[176]](this[_0xe4bc[1179]][_0xe4bc[526]])):(_0x5d2ax5[_0xe4bc[507]]=this[_0xe4bc[1179]][_0xe4bc[507]]!=mxConstants[_0xe4bc[508]]?mxConstants[_0xe4bc[2334]]:mxConstants[_0xe4bc[508]],_0x5d2ax5[_0xe4bc[176]](this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[1524]]()));mxEvent[_0xe4bc[2733]](_0x5d2ax5[_0xe4bc[252]],this[_0xe4bc[1179]],this[_0xe4bc[724]]);this[_0xe4bc[1179]][_0xe4bc[994]]()&&(_0x5d2ax5[_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[270]]=_0x5d2ax2);this[_0xe4bc[2982]](_0x5d2ax3)||(_0x5d2ax5[_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[187]]=_0xe4bc[188]);return _0x5d2ax5};mxVertexHandler[_0xe4bc[202]][_0xe4bc[2982]]=function(_0x5d2ax2){return !0};mxVertexHandler[_0xe4bc[202]][_0xe4bc[2981]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){return null!=this[_0xe4bc[2959]]?(_0x5d2ax2[_0xe4bc[117]]=this[_0xe4bc[2959]][_0xe4bc[117]],_0x5d2ax2[_0xe4bc[119]]=this[_0xe4bc[2959]][_0xe4bc[119]], new mxImageShape(_0x5d2ax2,this[_0xe4bc[2959]][_0xe4bc[390]])):_0x5d2ax3==mxEvent[_0xe4bc[2983]]? new mxEllipse(_0x5d2ax2,_0x5d2ax4||mxConstants[_0xe4bc[2984]],mxConstants.HANDLE_STROKECOLOR): new mxRectangleShape(_0x5d2ax2,_0x5d2ax4||mxConstants[_0xe4bc[2984]],mxConstants.HANDLE_STROKECOLOR)};mxVertexHandler[_0xe4bc[202]][_0xe4bc[2985]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){null!=_0x5d2ax2&&(_0x5d2ax2[_0xe4bc[1562]][_0xe4bc[235]]=Math[_0xe4bc[488]](_0x5d2ax3-_0x5d2ax2[_0xe4bc[1562]][_0xe4bc[117]]/2),_0x5d2ax2[_0xe4bc[1562]][_0xe4bc[236]]=Math[_0xe4bc[488]](_0x5d2ax4-_0x5d2ax2[_0xe4bc[1562]][_0xe4bc[119]]/2),_0x5d2ax2[_0xe4bc[258]]())};mxVertexHandler[_0xe4bc[202]][_0xe4bc[2986]]=function(_0x5d2ax2){if(_0x5d2ax2[_0xe4bc[729]](this[_0xe4bc[2973]])){return mxEvent[_0xe4bc[2983]]};if(_0x5d2ax2[_0xe4bc[729]](this[_0xe4bc[2972]])){return mxEvent[_0xe4bc[2987]]};if(null!=this[_0xe4bc[2964]]){for(var _0x5d2ax3=this[_0xe4bc[2353]],_0x5d2ax3=this[_0xe4bc[2958]]&&(mxClient[_0xe4bc[80]]||0<_0x5d2ax3)? new mxRectangle(_0x5d2ax2[_0xe4bc[734]]()-_0x5d2ax3,_0x5d2ax2[_0xe4bc[735]]()-_0x5d2ax3,2*_0x5d2ax3,2*_0x5d2ax3):null,_0x5d2ax4=0;_0x5d2ax4<this[_0xe4bc[2964]][_0xe4bc[67]];_0x5d2ax4++){if(_0x5d2ax2[_0xe4bc[729]](this[_0xe4bc[2964]][_0x5d2ax4])||null!=_0x5d2ax3&&mxUtils[_0xe4bc[1825]](this[_0xe4bc[2964]][_0x5d2ax4][_0xe4bc[1562]],_0x5d2ax3)){return _0x5d2ax4}}};return null};mxVertexHandler[_0xe4bc[202]][_0xe4bc[787]]=function(_0x5d2ax2,_0x5d2ax3){if(!_0x5d2ax3[_0xe4bc[721]]()&&this[_0xe4bc[1179]][_0xe4bc[994]]()&&!this[_0xe4bc[1179]][_0xe4bc[2579]](_0x5d2ax3[_0xe4bc[727]]())&&(0<this[_0xe4bc[2353]]||_0x5d2ax3[_0xe4bc[248]]()==this[_0xe4bc[724]])){var _0x5d2ax4=this[_0xe4bc[2986]](_0x5d2ax3);null!=_0x5d2ax4&&(this[_0xe4bc[861]](_0x5d2ax3[_0xe4bc[730]](),_0x5d2ax3[_0xe4bc[732]](),_0x5d2ax4),_0x5d2ax3[_0xe4bc[722]]())}};mxVertexHandler[_0xe4bc[202]][_0xe4bc[861]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){_0x5d2ax2=mxUtils[_0xe4bc[2196]](this[_0xe4bc[1179]][_0xe4bc[526]],_0x5d2ax2,_0x5d2ax3);this[_0xe4bc[2739]]=_0x5d2ax2[_0xe4bc[235]];this[_0xe4bc[2740]]=_0x5d2ax2[_0xe4bc[236]];this[_0xe4bc[1983]]=_0x5d2ax4;this[_0xe4bc[2732]][_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[495]]=_0x5d2ax4==mxEvent[_0xe4bc[2983]]?_0xe4bc[497]:_0xe4bc[130];this[_0xe4bc[2988]]=this[_0xe4bc[2963]](this[_0xe4bc[1562]]);!(mxClient[_0xe4bc[48]]&&0!=Number(this[_0xe4bc[724]][_0xe4bc[124]][mxConstants[_0xe4bc[2278]]]||_0xe4bc[468]))&&null!=this[_0xe4bc[724]][_0xe4bc[963]]&&this[_0xe4bc[724]][_0xe4bc[963]][_0xe4bc[252]][_0xe4bc[265]]==this[_0xe4bc[1179]][_0xe4bc[526]]?(this[_0xe4bc[2988]][_0xe4bc[507]]=mxConstants[_0xe4bc[1656]],this[_0xe4bc[2988]][_0xe4bc[176]](this[_0xe4bc[1179]][_0xe4bc[526]])):(this[_0xe4bc[2988]][_0xe4bc[507]]=this[_0xe4bc[1179]][_0xe4bc[507]]!=mxConstants[_0xe4bc[508]]?mxConstants[_0xe4bc[1523]]:mxConstants[_0xe4bc[508]],this[_0xe4bc[2988]][_0xe4bc[176]](this[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[1524]]()))};mxVertexHandler[_0xe4bc[202]][_0xe4bc[788]]=function(_0x5d2ax2,_0x5d2ax3){if(!_0x5d2ax3[_0xe4bc[721]]()&&null!=this[_0xe4bc[1983]]){var _0x5d2ax4= new mxPoint(_0x5d2ax3[_0xe4bc[734]](),_0x5d2ax3[_0xe4bc[735]]()),_0x5d2ax5=this[_0xe4bc[1179]][_0xe4bc[1018]](_0x5d2ax3[_0xe4bc[727]]()),_0x5d2ax9=this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[255]];if(this[_0xe4bc[1983]]==mxEvent[_0xe4bc[2987]]){_0x5d2ax5&&(_0x5d2ax4[_0xe4bc[235]]=this[_0xe4bc[1179]][_0xe4bc[1021]](_0x5d2ax4[_0xe4bc[235]]/_0x5d2ax9)*_0x5d2ax9,_0x5d2ax4[_0xe4bc[236]]=this[_0xe4bc[1179]][_0xe4bc[1021]](_0x5d2ax4[_0xe4bc[236]]/_0x5d2ax9)*_0x5d2ax9),this[_0xe4bc[2985]](this[_0xe4bc[2964]][this[_0xe4bc[2964]][_0xe4bc[67]]-1],_0x5d2ax4[_0xe4bc[235]],_0x5d2ax4[_0xe4bc[236]])}else {if(this[_0xe4bc[1983]]==mxEvent[_0xe4bc[2983]]){var _0x5d2axa=this[_0xe4bc[724]][_0xe4bc[235]]+this[_0xe4bc[724]][_0xe4bc[117]]/2-_0x5d2ax4[_0xe4bc[235]],_0x5d2ax12=this[_0xe4bc[724]][_0xe4bc[236]]+this[_0xe4bc[724]][_0xe4bc[119]]/2-_0x5d2ax4[_0xe4bc[236]];this[_0xe4bc[2989]]=0!=_0x5d2axa?180*Math[_0xe4bc[2990]](_0x5d2ax12/_0x5d2axa)/Math[_0xe4bc[424]]+90:0>_0x5d2ax12?180:0;0<_0x5d2axa&&(this[_0xe4bc[2989]]-=180);this[_0xe4bc[2960]]&&(_0x5d2axa=_0x5d2ax4[_0xe4bc[235]]-this[_0xe4bc[724]][_0xe4bc[241]](),_0x5d2ax12=_0x5d2ax4[_0xe4bc[236]]-this[_0xe4bc[724]][_0xe4bc[242]](),_0x5d2axa=Math[_0xe4bc[425]](Math[_0xe4bc[428]](_0x5d2axa*_0x5d2axa+_0x5d2ax12*_0x5d2ax12)-this[_0xe4bc[724]][_0xe4bc[119]]/2-20),_0x5d2axa=Math[_0xe4bc[160]](1,5*Math[_0xe4bc[243]](3,Math[_0xe4bc[160]](0,Math[_0xe4bc[488]](80/Math[_0xe4bc[425]](_0x5d2axa))))),this[_0xe4bc[2989]]=Math[_0xe4bc[488]](this[_0xe4bc[2989]]/_0x5d2axa)*_0x5d2axa);this[_0xe4bc[2732]][_0xe4bc[603]]=this[_0xe4bc[2989]];this[_0xe4bc[2732]][_0xe4bc[258]]()}else {var _0x5d2ax13=mxUtils[_0xe4bc[431]](this[_0xe4bc[724]][_0xe4bc[124]][mxConstants[_0xe4bc[2278]]]||_0xe4bc[468]),_0x5d2ax14=Math[_0xe4bc[426]](-_0x5d2ax13),_0x5d2ax15=Math[_0xe4bc[427]](-_0x5d2ax13),_0x5d2ax16= new mxPoint(this[_0xe4bc[724]][_0xe4bc[241]](),this[_0xe4bc[724]][_0xe4bc[242]]()),_0x5d2axa=_0x5d2ax4[_0xe4bc[235]]-this[_0xe4bc[2739]],_0x5d2ax12=_0x5d2ax4[_0xe4bc[236]]-this[_0xe4bc[2740]],_0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[513]],_0x5d2ax17=_0x5d2ax15*_0x5d2axa+_0x5d2ax14*_0x5d2ax12,_0x5d2axa=_0x5d2ax14*_0x5d2axa-_0x5d2ax15*_0x5d2ax12;this[_0xe4bc[1562]]=this[_0xe4bc[2991]](this[_0xe4bc[2961]],_0x5d2axa,_0x5d2ax17,this[_0xe4bc[1983]],_0x5d2ax5,_0x5d2ax9,_0x5d2ax4);_0x5d2ax14=Math[_0xe4bc[426]](_0x5d2ax13);_0x5d2ax15=Math[_0xe4bc[427]](_0x5d2ax13);_0x5d2ax12= new mxPoint(this[_0xe4bc[1562]][_0xe4bc[241]](),this[_0xe4bc[1562]][_0xe4bc[242]]());_0x5d2axa=_0x5d2ax12[_0xe4bc[235]]-_0x5d2ax16[_0xe4bc[235]];_0x5d2ax12=_0x5d2ax12[_0xe4bc[236]]-_0x5d2ax16[_0xe4bc[236]];_0x5d2ax16=_0x5d2ax15*_0x5d2axa+_0x5d2ax14*_0x5d2ax12-_0x5d2ax12;this[_0xe4bc[1562]][_0xe4bc[235]]+=_0x5d2ax14*_0x5d2axa-_0x5d2ax15*_0x5d2ax12-_0x5d2axa;this[_0xe4bc[1562]][_0xe4bc[236]]+=_0x5d2ax16;this[_0xe4bc[2932]]()}};_0x5d2ax3[_0xe4bc[722]]()}else {null!=this[_0xe4bc[2986]](_0x5d2ax3)&&_0x5d2ax3[_0xe4bc[722]](!1)}};mxVertexHandler[_0xe4bc[202]][_0xe4bc[789]]=function(_0x5d2ax2,_0x5d2ax3){if(!_0x5d2ax3[_0xe4bc[721]]()&&null!=this[_0xe4bc[1983]]&&null!=this[_0xe4bc[724]]){var _0x5d2ax4= new mxPoint(_0x5d2ax3[_0xe4bc[734]](),_0x5d2ax3[_0xe4bc[735]]());this[_0xe4bc[1179]][_0xe4bc[502]]()[_0xe4bc[473]]();try{if(this[_0xe4bc[1983]]==mxEvent[_0xe4bc[2983]]){null!=this[_0xe4bc[2989]]&&this[_0xe4bc[2992]](this[_0xe4bc[724]][_0xe4bc[246]],this[_0xe4bc[2989]]-(this[_0xe4bc[724]][_0xe4bc[124]][mxConstants[_0xe4bc[2278]]]||0))}else {var _0x5d2ax5=this[_0xe4bc[1179]][_0xe4bc[1018]](_0x5d2ax3[_0xe4bc[727]]()),_0x5d2ax9=mxUtils[_0xe4bc[431]](this[_0xe4bc[724]][_0xe4bc[124]][mxConstants[_0xe4bc[2278]]]||_0xe4bc[468]),_0x5d2axa=Math[_0xe4bc[426]](-_0x5d2ax9),_0x5d2ax12=Math[_0xe4bc[427]](-_0x5d2ax9),_0x5d2ax13=_0x5d2ax4[_0xe4bc[235]]-this[_0xe4bc[2739]],_0x5d2ax14=_0x5d2ax4[_0xe4bc[236]]-this[_0xe4bc[2740]],_0x5d2ax4=_0x5d2ax12*_0x5d2ax13+_0x5d2axa*_0x5d2ax14,_0x5d2ax13=_0x5d2axa*_0x5d2ax13-_0x5d2ax12*_0x5d2ax14,_0x5d2ax14=_0x5d2ax4,_0x5d2ax15=this[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[255]];this[_0xe4bc[2526]](this[_0xe4bc[724]][_0xe4bc[246]],_0x5d2ax13/_0x5d2ax15,_0x5d2ax14/_0x5d2ax15,this[_0xe4bc[1983]],_0x5d2ax5)}}finally{this[_0xe4bc[1179]][_0xe4bc[502]]()[_0xe4bc[476]]()};this[_0xe4bc[862]]();_0x5d2ax3[_0xe4bc[722]]()}};mxVertexHandler[_0xe4bc[202]][_0xe4bc[2992]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[502]]();if(_0x5d2ax4[_0xe4bc[1193]](_0x5d2ax2)){var _0x5d2ax5=_0x5d2ax2==this[_0xe4bc[724]]?this[_0xe4bc[724]]:this[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax2);null!=_0x5d2ax5&&this[_0xe4bc[1179]][_0xe4bc[1717]](mxConstants.STYLE_ROTATION,(_0x5d2ax5[_0xe4bc[124]][mxConstants[_0xe4bc[2278]]]||0)+_0x5d2ax3,[_0x5d2ax2]);if(this[_0xe4bc[724]][_0xe4bc[246]]!=_0x5d2ax2&&(_0x5d2ax5=this[_0xe4bc[1179]][_0xe4bc[1198]](_0x5d2ax2),null!=_0x5d2ax5&&!_0x5d2ax5[_0xe4bc[1500]])){if(0!=_0x5d2ax3){var _0x5d2ax9=this[_0xe4bc[1179]][_0xe4bc[502]]()[_0xe4bc[1197]](_0x5d2ax2),_0x5d2axa=this[_0xe4bc[1179]][_0xe4bc[1198]](_0x5d2ax9);if(!_0x5d2ax5[_0xe4bc[1500]]&&null!=_0x5d2axa){var _0x5d2ax12=mxUtils[_0xe4bc[431]](_0x5d2ax3),_0x5d2ax9=Math[_0xe4bc[426]](_0x5d2ax12),_0x5d2ax12=Math[_0xe4bc[427]](_0x5d2ax12),_0x5d2ax13= new mxPoint(_0x5d2ax5[_0xe4bc[241]](),_0x5d2ax5[_0xe4bc[242]]()),_0x5d2axa= new mxPoint(_0x5d2axa[_0xe4bc[117]]/2,_0x5d2axa[_0xe4bc[119]]/2),_0x5d2ax9=mxUtils[_0xe4bc[432]](_0x5d2ax13,_0x5d2ax9,_0x5d2ax12,_0x5d2axa),_0x5d2ax5=_0x5d2ax5[_0xe4bc[238]]();_0x5d2ax5[_0xe4bc[235]]=_0x5d2ax9[_0xe4bc[235]]-_0x5d2ax5[_0xe4bc[117]]/2;_0x5d2ax5[_0xe4bc[236]]=_0x5d2ax9[_0xe4bc[236]]-_0x5d2ax5[_0xe4bc[119]]/2;_0x5d2ax4[_0xe4bc[1724]](_0x5d2ax2,_0x5d2ax5)}}else {_0x5d2ax5=_0x5d2ax5[_0xe4bc[238]](),_0x5d2ax5[_0xe4bc[235]]+=dx,_0x5d2ax5[_0xe4bc[236]]+=dy,_0x5d2ax4[_0xe4bc[1724]](_0x5d2ax2,_0x5d2ax5)}};_0x5d2ax5=_0x5d2ax4[_0xe4bc[262]](_0x5d2ax2);for(_0x5d2ax9=0;_0x5d2ax9<_0x5d2ax5;_0x5d2ax9++){this[_0xe4bc[2992]](_0x5d2ax4[_0xe4bc[263]](_0x5d2ax2,_0x5d2ax9),_0x5d2ax3)}}};mxVertexHandler[_0xe4bc[202]][_0xe4bc[862]]=function(){this[_0xe4bc[1983]]=this[_0xe4bc[2989]]=null;null!=this[_0xe4bc[2988]]&&(this[_0xe4bc[2988]][_0xe4bc[515]](),this[_0xe4bc[2988]]=null);null!=this[_0xe4bc[2732]]&&(this[_0xe4bc[2732]][_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[495]]=_0xe4bc[497],this[_0xe4bc[2961]]=this[_0xe4bc[2962]](this[_0xe4bc[724]]),this[_0xe4bc[1562]]= new mxRectangle(this[_0xe4bc[2961]][_0xe4bc[235]],this[_0xe4bc[2961]][_0xe4bc[236]],this[_0xe4bc[2961]][_0xe4bc[117]],this[_0xe4bc[2961]][_0xe4bc[119]]),this[_0xe4bc[2932]]())};mxVertexHandler[_0xe4bc[202]][_0xe4bc[2526]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){var _0x5d2axa=this[_0xe4bc[1179]][_0xe4bc[251]][_0xe4bc[1721]](_0x5d2ax2);if(null!=_0x5d2axa){if(_0x5d2ax5==mxEvent[_0xe4bc[2987]]){_0x5d2ax5=this[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[255]],_0x5d2ax3=(this[_0xe4bc[2972]][_0xe4bc[1562]][_0xe4bc[241]]()-this[_0xe4bc[2739]])/_0x5d2ax5,_0x5d2ax4=(this[_0xe4bc[2972]][_0xe4bc[1562]][_0xe4bc[242]]()-this[_0xe4bc[2740]])/_0x5d2ax5,_0x5d2axa=_0x5d2axa[_0xe4bc[238]](),null==_0x5d2axa[_0xe4bc[1368]]?_0x5d2axa[_0xe4bc[1368]]= new mxPoint(_0x5d2ax3,_0x5d2ax4):(_0x5d2axa[_0xe4bc[1368]][_0xe4bc[235]]+=_0x5d2ax3,_0x5d2axa[_0xe4bc[1368]][_0xe4bc[236]]+=_0x5d2ax4),this[_0xe4bc[1179]][_0xe4bc[251]][_0xe4bc[1724]](_0x5d2ax2,_0x5d2axa)}else {_0x5d2ax5=this[_0xe4bc[2991]](_0x5d2axa,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,1, new mxPoint(0,0));var _0x5d2ax12=mxUtils[_0xe4bc[431]](this[_0xe4bc[724]][_0xe4bc[124]][mxConstants[_0xe4bc[2278]]]||_0xe4bc[468]);if(0!=_0x5d2ax12){_0x5d2ax3=_0x5d2ax5[_0xe4bc[241]]()-_0x5d2axa[_0xe4bc[241]]();_0x5d2ax4=_0x5d2ax5[_0xe4bc[242]]()-_0x5d2axa[_0xe4bc[242]]();_0x5d2ax9=Math[_0xe4bc[426]](_0x5d2ax12);var _0x5d2ax13=Math[_0xe4bc[427]](_0x5d2ax12),_0x5d2ax12=_0x5d2ax9*_0x5d2ax3-_0x5d2ax13*_0x5d2ax4-_0x5d2ax3;_0x5d2ax3=_0x5d2ax13*_0x5d2ax3+_0x5d2ax9*_0x5d2ax4-_0x5d2ax4;_0x5d2ax4=_0x5d2ax5[_0xe4bc[235]]-_0x5d2axa[_0xe4bc[235]];var _0x5d2ax14=_0x5d2ax5[_0xe4bc[236]]-_0x5d2axa[_0xe4bc[236]],_0x5d2ax15=_0x5d2ax9*_0x5d2ax4-_0x5d2ax13*_0x5d2ax14;_0x5d2ax9=_0x5d2ax13*_0x5d2ax4+_0x5d2ax9*_0x5d2ax14;_0x5d2ax5[_0xe4bc[235]]+=_0x5d2ax12;_0x5d2ax5[_0xe4bc[236]]+=_0x5d2ax3;if(!this[_0xe4bc[1179]][_0xe4bc[1742]](_0x5d2ax2)&&(0!=_0x5d2ax12||0!=_0x5d2ax3)){_0x5d2ax4=_0x5d2axa[_0xe4bc[235]]-_0x5d2ax5[_0xe4bc[235]]+_0x5d2ax15,_0x5d2ax14=_0x5d2axa[_0xe4bc[236]]-_0x5d2ax5[_0xe4bc[236]]+_0x5d2ax9,this[_0xe4bc[2993]](_0x5d2ax2,_0x5d2ax4,_0x5d2ax14)}};this[_0xe4bc[1179]][_0xe4bc[2526]](_0x5d2ax2,_0x5d2ax5)}}};mxVertexHandler[_0xe4bc[202]][_0xe4bc[2993]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){for(var _0x5d2ax5=this[_0xe4bc[1179]][_0xe4bc[502]](),_0x5d2ax9=_0x5d2ax5[_0xe4bc[262]](_0x5d2ax2),_0x5d2axa=0;_0x5d2axa<_0x5d2ax9;_0x5d2axa++){var _0x5d2ax12=_0x5d2ax5[_0xe4bc[263]](_0x5d2ax2,_0x5d2axa);if(_0x5d2ax5[_0xe4bc[1193]](_0x5d2ax12)){var _0x5d2ax13=this[_0xe4bc[1179]][_0xe4bc[1198]](_0x5d2ax12);null!=_0x5d2ax13&&!_0x5d2ax13[_0xe4bc[1500]]&&(_0x5d2ax13=_0x5d2ax13[_0xe4bc[238]](),_0x5d2ax13[_0xe4bc[235]]+=_0x5d2ax3,_0x5d2ax13[_0xe4bc[236]]+=_0x5d2ax4,_0x5d2ax5[_0xe4bc[1724]](_0x5d2ax12,_0x5d2ax13))}}};mxVertexHandler[_0xe4bc[202]][_0xe4bc[2991]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa,_0x5d2ax12){if(this[_0xe4bc[2957]]){_0x5d2ax12=_0x5d2ax2[_0xe4bc[235]]+_0x5d2ax2[_0xe4bc[117]]+_0x5d2ax3;var _0x5d2ax13=_0x5d2ax2[_0xe4bc[236]]+_0x5d2ax2[_0xe4bc[119]]+_0x5d2ax4;_0x5d2ax9&&(_0x5d2ax12=this[_0xe4bc[1179]][_0xe4bc[1021]](_0x5d2ax12/_0x5d2axa)*_0x5d2axa,_0x5d2ax13=this[_0xe4bc[1179]][_0xe4bc[1021]](_0x5d2ax13/_0x5d2axa)*_0x5d2axa);_0x5d2axa= new mxRectangle(_0x5d2ax2[_0xe4bc[235]],_0x5d2ax2[_0xe4bc[236]],0,0);_0x5d2axa[_0xe4bc[99]]( new mxRectangle(_0x5d2ax12,_0x5d2ax13,0,0));return _0x5d2axa};var _0x5d2ax13=_0x5d2ax2[_0xe4bc[235]]-_0x5d2ax12[_0xe4bc[235]]*_0x5d2axa,_0x5d2ax14=_0x5d2ax13+_0x5d2ax2[_0xe4bc[117]],_0x5d2ax15=_0x5d2ax2[_0xe4bc[236]]-_0x5d2ax12[_0xe4bc[236]]*_0x5d2axa;_0x5d2ax2=_0x5d2ax15+_0x5d2ax2[_0xe4bc[119]];4<_0x5d2ax5?(_0x5d2ax2+=_0x5d2ax4,_0x5d2ax9&&(_0x5d2ax2=this[_0xe4bc[1179]][_0xe4bc[1021]](_0x5d2ax2/_0x5d2axa)*_0x5d2axa)):3>_0x5d2ax5&&(_0x5d2ax15+=_0x5d2ax4,_0x5d2ax9&&(_0x5d2ax15=this[_0xe4bc[1179]][_0xe4bc[1021]](_0x5d2ax15/_0x5d2axa)*_0x5d2axa));if(0==_0x5d2ax5||3==_0x5d2ax5||5==_0x5d2ax5){_0x5d2ax13+=_0x5d2ax3,_0x5d2ax9&&(_0x5d2ax13=this[_0xe4bc[1179]][_0xe4bc[1021]](_0x5d2ax13/_0x5d2axa)*_0x5d2axa)}else {if(2==_0x5d2ax5||4==_0x5d2ax5||7==_0x5d2ax5){_0x5d2ax14+=_0x5d2ax3,_0x5d2ax9&&(_0x5d2ax14=this[_0xe4bc[1179]][_0xe4bc[1021]](_0x5d2ax14/_0x5d2axa)*_0x5d2axa)}};_0x5d2ax9=_0x5d2ax14-_0x5d2ax13;_0x5d2ax2-=_0x5d2ax15;0>_0x5d2ax9&&(_0x5d2ax13+=_0x5d2ax9,_0x5d2ax9=Math[_0xe4bc[425]](_0x5d2ax9));0>_0x5d2ax2&&(_0x5d2ax15+=_0x5d2ax2,_0x5d2ax2=Math[_0xe4bc[425]](_0x5d2ax2));return  new mxRectangle(_0x5d2ax13+_0x5d2ax12[_0xe4bc[235]]*_0x5d2axa,_0x5d2ax15+_0x5d2ax12[_0xe4bc[236]]*_0x5d2axa,_0x5d2ax9,_0x5d2ax2)};mxVertexHandler[_0xe4bc[202]][_0xe4bc[258]]=function(){this[_0xe4bc[2961]]=this[_0xe4bc[2962]](this[_0xe4bc[724]]);this[_0xe4bc[1562]]= new mxRectangle(this[_0xe4bc[724]][_0xe4bc[235]],this[_0xe4bc[724]][_0xe4bc[236]],this[_0xe4bc[724]][_0xe4bc[117]],this[_0xe4bc[724]][_0xe4bc[119]]);var _0x5d2ax2=this[_0xe4bc[724]];if(null!=this[_0xe4bc[2964]]){var _0x5d2ax3=_0x5d2ax2[_0xe4bc[235]]+_0x5d2ax2[_0xe4bc[117]],_0x5d2ax4=_0x5d2ax2[_0xe4bc[236]]+_0x5d2ax2[_0xe4bc[119]];if(this[_0xe4bc[2957]]){this[_0xe4bc[2985]](this[_0xe4bc[2964]][0],_0x5d2ax3,_0x5d2ax4)}else {var _0x5d2ax5=_0x5d2ax2[_0xe4bc[235]]+_0x5d2ax2[_0xe4bc[117]]/2,_0x5d2ax9=_0x5d2ax2[_0xe4bc[236]]+_0x5d2ax2[_0xe4bc[119]]/2;if(1<this[_0xe4bc[2964]][_0xe4bc[67]]){var _0x5d2axa=mxUtils[_0xe4bc[431]](_0x5d2ax2[_0xe4bc[124]][mxConstants[_0xe4bc[2278]]]||_0xe4bc[468]),_0x5d2ax12=Math[_0xe4bc[426]](_0x5d2axa),_0x5d2axa=Math[_0xe4bc[427]](_0x5d2axa),_0x5d2ax13= new mxPoint(_0x5d2ax2[_0xe4bc[241]](),_0x5d2ax2[_0xe4bc[242]]()),_0x5d2ax14=mxUtils[_0xe4bc[432]]( new mxPoint(_0x5d2ax2[_0xe4bc[235]],_0x5d2ax2[_0xe4bc[236]]),_0x5d2ax12,_0x5d2axa,_0x5d2ax13);this[_0xe4bc[2985]](this[_0xe4bc[2964]][0],_0x5d2ax14[_0xe4bc[235]],_0x5d2ax14[_0xe4bc[236]]);_0x5d2ax14[_0xe4bc[235]]=_0x5d2ax5;_0x5d2ax14[_0xe4bc[236]]=_0x5d2ax2[_0xe4bc[236]];_0x5d2ax14=mxUtils[_0xe4bc[432]](_0x5d2ax14,_0x5d2ax12,_0x5d2axa,_0x5d2ax13);this[_0xe4bc[2985]](this[_0xe4bc[2964]][1],_0x5d2ax14[_0xe4bc[235]],_0x5d2ax14[_0xe4bc[236]]);_0x5d2ax14[_0xe4bc[235]]=_0x5d2ax3;_0x5d2ax14[_0xe4bc[236]]=_0x5d2ax2[_0xe4bc[236]];_0x5d2ax14=mxUtils[_0xe4bc[432]](_0x5d2ax14,_0x5d2ax12,_0x5d2axa,_0x5d2ax13);this[_0xe4bc[2985]](this[_0xe4bc[2964]][2],_0x5d2ax14[_0xe4bc[235]],_0x5d2ax14[_0xe4bc[236]]);_0x5d2ax14[_0xe4bc[235]]=_0x5d2ax2[_0xe4bc[235]];_0x5d2ax14[_0xe4bc[236]]=_0x5d2ax9;_0x5d2ax14=mxUtils[_0xe4bc[432]](_0x5d2ax14,_0x5d2ax12,_0x5d2axa,_0x5d2ax13);this[_0xe4bc[2985]](this[_0xe4bc[2964]][3],_0x5d2ax14[_0xe4bc[235]],_0x5d2ax14[_0xe4bc[236]]);_0x5d2ax14[_0xe4bc[235]]=_0x5d2ax3;_0x5d2ax14[_0xe4bc[236]]=_0x5d2ax9;_0x5d2ax14=mxUtils[_0xe4bc[432]](_0x5d2ax14,_0x5d2ax12,_0x5d2axa,_0x5d2ax13);this[_0xe4bc[2985]](this[_0xe4bc[2964]][4],_0x5d2ax14[_0xe4bc[235]],_0x5d2ax14[_0xe4bc[236]]);_0x5d2ax14[_0xe4bc[235]]=_0x5d2ax2[_0xe4bc[235]];_0x5d2ax14[_0xe4bc[236]]=_0x5d2ax4;_0x5d2ax14=mxUtils[_0xe4bc[432]](_0x5d2ax14,_0x5d2ax12,_0x5d2axa,_0x5d2ax13);this[_0xe4bc[2985]](this[_0xe4bc[2964]][5],_0x5d2ax14[_0xe4bc[235]],_0x5d2ax14[_0xe4bc[236]]);_0x5d2ax14[_0xe4bc[235]]=_0x5d2ax5;_0x5d2ax14[_0xe4bc[236]]=_0x5d2ax4;_0x5d2ax14=mxUtils[_0xe4bc[432]](_0x5d2ax14,_0x5d2ax12,_0x5d2axa,_0x5d2ax13);this[_0xe4bc[2985]](this[_0xe4bc[2964]][6],_0x5d2ax14[_0xe4bc[235]],_0x5d2ax14[_0xe4bc[236]]);_0x5d2ax14[_0xe4bc[235]]=_0x5d2ax3;_0x5d2ax14[_0xe4bc[236]]=_0x5d2ax4;_0x5d2ax14=mxUtils[_0xe4bc[432]](_0x5d2ax14,_0x5d2ax12,_0x5d2axa,_0x5d2ax13);this[_0xe4bc[2985]](this[_0xe4bc[2964]][7],_0x5d2ax14[_0xe4bc[235]],_0x5d2ax14[_0xe4bc[236]]);this[_0xe4bc[2985]](this[_0xe4bc[2964]][8],_0x5d2ax5+_0x5d2ax2[_0xe4bc[2079]][_0xe4bc[235]],_0x5d2ax9+_0x5d2ax2[_0xe4bc[2079]][_0xe4bc[236]])}else {2<=this[_0xe4bc[724]][_0xe4bc[117]]&&2<=this[_0xe4bc[724]][_0xe4bc[119]]?this[_0xe4bc[2985]](this[_0xe4bc[2964]][0],_0x5d2ax5+_0x5d2ax2[_0xe4bc[2079]][_0xe4bc[235]],_0x5d2ax9+_0x5d2ax2[_0xe4bc[2079]][_0xe4bc[236]]):this[_0xe4bc[2985]](this[_0xe4bc[2964]][0],_0x5d2ax2[_0xe4bc[235]],_0x5d2ax2[_0xe4bc[236]])}}};null!=this[_0xe4bc[2973]]&&(_0x5d2axa=mxUtils[_0xe4bc[431]](this[_0xe4bc[724]][_0xe4bc[124]][mxConstants[_0xe4bc[2278]]]||_0xe4bc[468]),_0x5d2ax12=Math[_0xe4bc[426]](_0x5d2axa),_0x5d2axa=Math[_0xe4bc[427]](_0x5d2axa),_0x5d2ax13= new mxPoint(this[_0xe4bc[724]][_0xe4bc[241]](),this[_0xe4bc[724]][_0xe4bc[242]]()),_0x5d2ax14=mxUtils[_0xe4bc[432]]( new mxPoint(_0x5d2ax2[_0xe4bc[235]]+_0x5d2ax2[_0xe4bc[117]]/2,_0x5d2ax2[_0xe4bc[236]]-16),_0x5d2ax12,_0x5d2axa,_0x5d2ax13),this[_0xe4bc[2985]](this[_0xe4bc[2973]],_0x5d2ax14[_0xe4bc[235]],_0x5d2ax14[_0xe4bc[236]]));this[_0xe4bc[2732]][_0xe4bc[603]]=Number(this[_0xe4bc[724]][_0xe4bc[124]][mxConstants[_0xe4bc[2278]]]||_0xe4bc[468]);this[_0xe4bc[2932]]()};mxVertexHandler[_0xe4bc[202]][_0xe4bc[2932]]=function(){null!=this[_0xe4bc[2988]]&&(this[_0xe4bc[2988]][_0xe4bc[1562]]=this[_0xe4bc[1562]],this[_0xe4bc[2988]][_0xe4bc[252]][_0xe4bc[265]]==this[_0xe4bc[1179]][_0xe4bc[526]]&&(this[_0xe4bc[2988]][_0xe4bc[1562]][_0xe4bc[117]]=Math[_0xe4bc[160]](0,this[_0xe4bc[2988]][_0xe4bc[1562]][_0xe4bc[117]]-1),this[_0xe4bc[2988]][_0xe4bc[1562]][_0xe4bc[119]]=Math[_0xe4bc[160]](0,this[_0xe4bc[2988]][_0xe4bc[1562]][_0xe4bc[119]]-1)),this[_0xe4bc[2988]][_0xe4bc[603]]=Number(this[_0xe4bc[724]][_0xe4bc[124]][mxConstants[_0xe4bc[2278]]]||_0xe4bc[468]),this[_0xe4bc[2988]][_0xe4bc[258]]());this[_0xe4bc[2732]][_0xe4bc[1562]]=this[_0xe4bc[1562]];this[_0xe4bc[2732]][_0xe4bc[258]]()};mxVertexHandler[_0xe4bc[202]][_0xe4bc[515]]=function(){null!=this[_0xe4bc[2988]]&&(this[_0xe4bc[2988]][_0xe4bc[515]](),this[_0xe4bc[2988]]=null);this[_0xe4bc[2732]][_0xe4bc[515]]();this[_0xe4bc[2972]]=this[_0xe4bc[2732]]=null;if(null!=this[_0xe4bc[2964]]){for(var _0x5d2ax2=0;_0x5d2ax2<this[_0xe4bc[2964]][_0xe4bc[67]];_0x5d2ax2++){this[_0xe4bc[2964]][_0x5d2ax2][_0xe4bc[515]](),this[_0xe4bc[2964]][_0x5d2ax2]=null}}};function mxEdgeHandler(_0x5d2ax2){null!=_0x5d2ax2&&(this[_0xe4bc[724]]=_0x5d2ax2,this[_0xe4bc[176]]())}mxEdgeHandler[_0xe4bc[202]][_0xe4bc[1179]]=null;mxEdgeHandler[_0xe4bc[202]][_0xe4bc[724]]=null;mxEdgeHandler[_0xe4bc[202]][_0xe4bc[2885]]=null;mxEdgeHandler[_0xe4bc[202]][_0xe4bc[2886]]=null;mxEdgeHandler[_0xe4bc[202]][_0xe4bc[267]]=null;mxEdgeHandler[_0xe4bc[202]][_0xe4bc[253]]=null;mxEdgeHandler[_0xe4bc[202]][_0xe4bc[2994]]=null;mxEdgeHandler[_0xe4bc[202]][_0xe4bc[2972]]=null;mxEdgeHandler[_0xe4bc[202]][_0xe4bc[2797]]= !0;mxEdgeHandler[_0xe4bc[202]][_0xe4bc[2771]]= !1;mxEdgeHandler[_0xe4bc[202]][_0xe4bc[2995]]= !1;mxEdgeHandler[_0xe4bc[202]][_0xe4bc[574]]= !1;mxEdgeHandler[_0xe4bc[202]][_0xe4bc[2958]]= !0;mxEdgeHandler[_0xe4bc[202]][_0xe4bc[2996]]= !1;mxEdgeHandler[_0xe4bc[202]][_0xe4bc[2959]]=null;mxEdgeHandler[_0xe4bc[202]][_0xe4bc[2353]]=0;mxEdgeHandler[_0xe4bc[202]][_0xe4bc[176]]=function(){this[_0xe4bc[1179]]=this[_0xe4bc[724]][_0xe4bc[441]][_0xe4bc[1179]];this[_0xe4bc[2885]]=this[_0xe4bc[1689]]();this[_0xe4bc[2886]]= new mxConstraintHandler(this[_0xe4bc[1179]]);this[_0xe4bc[1525]]=[];this[_0xe4bc[2997]]=this[_0xe4bc[2998]](this[_0xe4bc[724]]);this[_0xe4bc[253]]=this[_0xe4bc[2963]](this[_0xe4bc[2997]]);this[_0xe4bc[253]][_0xe4bc[507]]=this[_0xe4bc[1179]][_0xe4bc[507]]!=mxConstants[_0xe4bc[508]]?mxConstants[_0xe4bc[2334]]:mxConstants[_0xe4bc[508]];this[_0xe4bc[253]][_0xe4bc[176]](this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[1524]]());this[_0xe4bc[253]][_0xe4bc[1564]]=0;this[_0xe4bc[253]][_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[270]]=mxConstants[_0xe4bc[2831]];mxEvent[_0xe4bc[169]](this[_0xe4bc[253]][_0xe4bc[252]],_0xe4bc[760],mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){this[_0xe4bc[1179]][_0xe4bc[761]](_0x5d2ax2,this[_0xe4bc[724]][_0xe4bc[246]])}));mxEvent[_0xe4bc[759]](this[_0xe4bc[253]][_0xe4bc[252]],mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){this[_0xe4bc[2771]]&&this[_0xe4bc[2999]](_0x5d2ax2)?this[_0xe4bc[3000]](this[_0xe4bc[724]],_0x5d2ax2):this[_0xe4bc[1179]][_0xe4bc[758]](mxEvent.MOUSE_DOWN, new mxMouseEvent(_0x5d2ax2,this[_0xe4bc[724]]))}),mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){var _0x5d2ax4=this[_0xe4bc[724]][_0xe4bc[246]];if(null!=this[_0xe4bc[1983]]){var _0x5d2ax5=mxUtils[_0xe4bc[2196]](this[_0xe4bc[1179]][_0xe4bc[526]],mxEvent[_0xe4bc[731]](_0x5d2ax2),mxEvent[_0xe4bc[733]](_0x5d2ax2)),_0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[999]](_0x5d2ax5[_0xe4bc[235]],_0x5d2ax5[_0xe4bc[236]]);this[_0xe4bc[1179]][_0xe4bc[1730]](_0x5d2ax4)&&this[_0xe4bc[1179]][_0xe4bc[2688]](_0x5d2ax4,_0x5d2ax5[_0xe4bc[235]],_0x5d2ax5[_0xe4bc[236]])&&(_0x5d2ax4=null)};this[_0xe4bc[1179]][_0xe4bc[758]](mxEvent.MOUSE_MOVE, new mxMouseEvent(_0x5d2ax2,this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[248]](_0x5d2ax4)))}),mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){this[_0xe4bc[1179]][_0xe4bc[758]](mxEvent.MOUSE_UP, new mxMouseEvent(_0x5d2ax2,this[_0xe4bc[724]]))}));this[_0xe4bc[574]]=null!=this[_0xe4bc[724]][_0xe4bc[963]]&&this[_0xe4bc[724]][_0xe4bc[963]][_0xe4bc[252]][_0xe4bc[265]]==this[_0xe4bc[1179]][_0xe4bc[526]];if(!this[_0xe4bc[574]]){var _0x5d2ax2=this[_0xe4bc[724]][_0xe4bc[2089]](!0);null!=_0x5d2ax2&&(this[_0xe4bc[574]]=null!=_0x5d2ax2[_0xe4bc[963]]&&_0x5d2ax2[_0xe4bc[963]][_0xe4bc[252]][_0xe4bc[265]]==this[_0xe4bc[1179]][_0xe4bc[526]]);this[_0xe4bc[574]]||(_0x5d2ax2=this[_0xe4bc[724]][_0xe4bc[2089]](!1),null!=_0x5d2ax2&&(this[_0xe4bc[574]]=null!=_0x5d2ax2[_0xe4bc[963]]&&_0x5d2ax2[_0xe4bc[963]][_0xe4bc[252]][_0xe4bc[265]]==this[_0xe4bc[1179]][_0xe4bc[526]]))};if(this[_0xe4bc[1179]][_0xe4bc[2694]]()<mxGraphHandler[_0xe4bc[202]][_0xe4bc[2795]]||0>=mxGraphHandler[_0xe4bc[202]][_0xe4bc[2795]]){this[_0xe4bc[2994]]=this[_0xe4bc[3001]]()};this[_0xe4bc[685]]= new mxPoint(this[_0xe4bc[724]][_0xe4bc[2079]][_0xe4bc[235]],this[_0xe4bc[724]][_0xe4bc[2079]][_0xe4bc[236]]);this[_0xe4bc[2972]]= new mxRectangleShape( new mxRectangle,mxConstants.LABEL_HANDLE_FILLCOLOR,mxConstants.HANDLE_STROKECOLOR);this[_0xe4bc[2972]][_0xe4bc[1229]]= !1;this[_0xe4bc[3002]](this[_0xe4bc[2972]]);this[_0xe4bc[2972]][_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[270]]=mxConstants[_0xe4bc[3003]];mxEvent[_0xe4bc[2733]](this[_0xe4bc[2972]][_0xe4bc[252]],this[_0xe4bc[1179]],this[_0xe4bc[724]]);this[_0xe4bc[258]]()};mxEdgeHandler[_0xe4bc[202]][_0xe4bc[2999]]=function(_0x5d2ax2){return mxEvent[_0xe4bc[774]](_0x5d2ax2)};mxEdgeHandler[_0xe4bc[202]][_0xe4bc[3004]]=function(_0x5d2ax2){return mxEvent[_0xe4bc[774]](_0x5d2ax2)};mxEdgeHandler[_0xe4bc[202]][_0xe4bc[2998]]=function(_0x5d2ax2){return _0x5d2ax2[_0xe4bc[439]]};mxEdgeHandler[_0xe4bc[202]][_0xe4bc[2963]]=function(_0x5d2ax2){_0x5d2ax2= new mxPolyline(_0x5d2ax2,this[_0xe4bc[2975]]());_0x5d2ax2[_0xe4bc[1307]]=this[_0xe4bc[2976]]();_0x5d2ax2[_0xe4bc[1522]]=this[_0xe4bc[2977]]();return _0x5d2ax2};mxEdgeHandler[_0xe4bc[202]][_0xe4bc[2975]]=function(){return mxConstants[_0xe4bc[3005]]};mxEdgeHandler[_0xe4bc[202]][_0xe4bc[2976]]=function(){return mxConstants[_0xe4bc[3006]]};mxEdgeHandler[_0xe4bc[202]][_0xe4bc[2977]]=function(){return mxConstants[_0xe4bc[3007]]};mxEdgeHandler[_0xe4bc[202]][_0xe4bc[2907]]=function(_0x5d2ax2){return !0};mxEdgeHandler[_0xe4bc[202]][_0xe4bc[1689]]=function(){var _0x5d2ax2= new mxCellMarker(this[_0xe4bc[1179]]),_0x5d2ax3=this;_0x5d2ax2[_0xe4bc[736]]=function(_0x5d2ax2){var _0x5d2ax5=mxCellMarker[_0xe4bc[202]][_0xe4bc[736]][_0xe4bc[183]](this,arguments);if(!_0x5d2ax3[_0xe4bc[2907]](_0x5d2ax5)){return null};var _0x5d2ax9=_0x5d2ax3[_0xe4bc[1179]][_0xe4bc[502]]();if(_0x5d2ax5==_0x5d2ax3[_0xe4bc[724]][_0xe4bc[246]]||null!=_0x5d2ax5&&!_0x5d2ax3[_0xe4bc[1179]][_0xe4bc[2405]]&&_0x5d2ax9[_0xe4bc[250]](_0x5d2ax5)){_0x5d2ax5=null};return _0x5d2ax5};_0x5d2ax2[_0xe4bc[2872]]=function(_0x5d2ax2){var _0x5d2ax5=_0x5d2ax3[_0xe4bc[1179]][_0xe4bc[502]](),_0x5d2ax5=_0x5d2ax3[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[2292]](_0x5d2ax2,_0x5d2ax3[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[248]](_0x5d2ax5[_0xe4bc[1709]](_0x5d2ax3[_0xe4bc[724]][_0xe4bc[246]],!_0x5d2ax3[_0xe4bc[729]])),!_0x5d2ax3[_0xe4bc[729]]),_0x5d2ax5=null!=_0x5d2ax5?_0x5d2ax5[_0xe4bc[246]]:null;_0x5d2ax3[_0xe4bc[267]]=_0x5d2ax3[_0xe4bc[2909]](_0x5d2ax3[_0xe4bc[729]]?_0x5d2ax2[_0xe4bc[246]]:_0x5d2ax5,_0x5d2ax3[_0xe4bc[729]]?_0x5d2ax5:_0x5d2ax2[_0xe4bc[246]]);return null==_0x5d2ax3[_0xe4bc[267]]};return _0x5d2ax2};mxEdgeHandler[_0xe4bc[202]][_0xe4bc[2909]]=function(_0x5d2ax2,_0x5d2ax3){return this[_0xe4bc[1179]][_0xe4bc[2500]](this[_0xe4bc[724]][_0xe4bc[246]],_0x5d2ax2,_0x5d2ax3)};mxEdgeHandler[_0xe4bc[202]][_0xe4bc[3001]]=function(){for(var _0x5d2ax2=this[_0xe4bc[724]][_0xe4bc[246]],_0x5d2ax3=[],_0x5d2ax4=0;_0x5d2ax4<this[_0xe4bc[2997]][_0xe4bc[67]];_0x5d2ax4++){if(this[_0xe4bc[3008]](_0x5d2ax4)){var _0x5d2ax5=_0x5d2ax4==this[_0xe4bc[2997]][_0xe4bc[67]]-1;if((_0x5d2ax5=0==_0x5d2ax4||_0x5d2ax5)||this[_0xe4bc[1179]][_0xe4bc[2662]](_0x5d2ax2)){var _0x5d2ax9=this[_0xe4bc[3009]](_0x5d2ax4);this[_0xe4bc[3002]](_0x5d2ax9);mxClient[_0xe4bc[754]]&&_0x5d2ax9[_0xe4bc[252]][_0xe4bc[57]](_0xe4bc[1377],_0xe4bc[130]);if(this[_0xe4bc[3010]](_0x5d2ax4)){if(mxClient[_0xe4bc[754]]){var _0x5d2axa=mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){_0x5d2ax2=mxUtils[_0xe4bc[2196]](this[_0xe4bc[1179]][_0xe4bc[526]],mxEvent[_0xe4bc[731]](_0x5d2ax2),mxEvent[_0xe4bc[733]](_0x5d2ax2));return this[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[248]](this[_0xe4bc[1179]][_0xe4bc[999]](_0x5d2ax2[_0xe4bc[235]],_0x5d2ax2[_0xe4bc[236]]))});mxEvent[_0xe4bc[2733]](_0x5d2ax9[_0xe4bc[252]],this[_0xe4bc[1179]],_0x5d2axa)}else {_0x5d2ax9[_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[270]]=mxConstants[_0xe4bc[3011]],mxEvent[_0xe4bc[2733]](_0x5d2ax9[_0xe4bc[252]],this[_0xe4bc[1179]],this[_0xe4bc[724]])}};_0x5d2ax3[_0xe4bc[207]](_0x5d2ax9);_0x5d2ax5||(this[_0xe4bc[1525]][_0xe4bc[207]]( new mxPoint(0,0)),_0x5d2ax9[_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[187]]=_0xe4bc[188])}}};return _0x5d2ax3};mxEdgeHandler[_0xe4bc[202]][_0xe4bc[3010]]=function(_0x5d2ax2){return !0};mxEdgeHandler[_0xe4bc[202]][_0xe4bc[3008]]=function(_0x5d2ax2){return !0};mxEdgeHandler[_0xe4bc[202]][_0xe4bc[3009]]=function(_0x5d2ax2){if(null!=this[_0xe4bc[2959]]){return  new mxImageShape( new mxRectangle(0,0,this[_0xe4bc[2959]][_0xe4bc[117]],this[_0xe4bc[2959]][_0xe4bc[119]]),this[_0xe4bc[2959]][_0xe4bc[390]])};_0x5d2ax2=mxConstants[_0xe4bc[2974]];this[_0xe4bc[574]]&&(_0x5d2ax2-=1);return  new mxRectangleShape( new mxRectangle(0,0,_0x5d2ax2,_0x5d2ax2),mxConstants.HANDLE_FILLCOLOR,mxConstants.HANDLE_STROKECOLOR)};mxEdgeHandler[_0xe4bc[202]][_0xe4bc[3002]]=function(_0x5d2ax2){this[_0xe4bc[574]]?(_0x5d2ax2[_0xe4bc[507]]=mxConstants[_0xe4bc[1656]],_0x5d2ax2[_0xe4bc[176]](this[_0xe4bc[1179]][_0xe4bc[526]])):(_0x5d2ax2[_0xe4bc[507]]=this[_0xe4bc[1179]][_0xe4bc[507]]!=mxConstants[_0xe4bc[508]]?mxConstants[_0xe4bc[2334]]:mxConstants[_0xe4bc[508]],_0x5d2ax2[_0xe4bc[176]](this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[1524]]()))};mxEdgeHandler[_0xe4bc[202]][_0xe4bc[2986]]=function(_0x5d2ax2){if(null!=this[_0xe4bc[2994]]){for(var _0x5d2ax3=this[_0xe4bc[2353]],_0x5d2ax3=this[_0xe4bc[2958]]&&(mxClient[_0xe4bc[80]]||0<_0x5d2ax3)? new mxRectangle(_0x5d2ax2[_0xe4bc[734]]()-_0x5d2ax3,_0x5d2ax2[_0xe4bc[735]]()-_0x5d2ax3,2*_0x5d2ax3,2*_0x5d2ax3):null,_0x5d2ax4=0;_0x5d2ax4<this[_0xe4bc[2994]][_0xe4bc[67]];_0x5d2ax4++){if((_0x5d2ax2[_0xe4bc[729]](this[_0xe4bc[2994]][_0x5d2ax4])||null!=_0x5d2ax3&&mxUtils[_0xe4bc[1825]](this[_0xe4bc[2994]][_0x5d2ax4][_0xe4bc[1562]],_0x5d2ax3))&&_0xe4bc[188]!=this[_0xe4bc[2994]][_0x5d2ax4][_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[187]]){return _0x5d2ax4}}};if(_0x5d2ax2[_0xe4bc[729]](this[_0xe4bc[2972]])&&_0xe4bc[188]!=this[_0xe4bc[2972]][_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[187]]||_0x5d2ax2[_0xe4bc[729]](this[_0xe4bc[724]][_0xe4bc[963]])){if(!mxClient[_0xe4bc[75]]&&!mxClient[_0xe4bc[76]]||_0xe4bc[2822]!=_0x5d2ax2[_0xe4bc[728]]()[_0xe4bc[301]]){return mxEvent[_0xe4bc[2987]]}};return null};mxEdgeHandler[_0xe4bc[202]][_0xe4bc[787]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=null,_0x5d2ax4=this[_0xe4bc[2986]](_0x5d2ax3);null!=_0x5d2ax4&&(!_0x5d2ax3[_0xe4bc[721]]()&&this[_0xe4bc[1179]][_0xe4bc[994]]()&&!this[_0xe4bc[1179]][_0xe4bc[2579]](_0x5d2ax3[_0xe4bc[727]]()))&&(this[_0xe4bc[2995]]&&this[_0xe4bc[3004]](_0x5d2ax3[_0xe4bc[727]]())?this[_0xe4bc[3012]](this[_0xe4bc[724]],_0x5d2ax4):(_0x5d2ax4!=mxEvent[_0xe4bc[2987]]||this[_0xe4bc[1179]][_0xe4bc[2628]](_0x5d2ax3[_0xe4bc[736]]()))&&this[_0xe4bc[861]](_0x5d2ax3[_0xe4bc[730]](),_0x5d2ax3[_0xe4bc[732]](),_0x5d2ax4),_0x5d2ax3[_0xe4bc[722]]())};mxEdgeHandler[_0xe4bc[202]][_0xe4bc[861]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){this[_0xe4bc[2739]]=_0x5d2ax2;this[_0xe4bc[2740]]=_0x5d2ax3;this[_0xe4bc[729]]=null==this[_0xe4bc[2994]]?!1:0==_0x5d2ax4;this[_0xe4bc[3013]]=null==this[_0xe4bc[2994]]?!1:_0x5d2ax4==this[_0xe4bc[2994]][_0xe4bc[67]]-1;this[_0xe4bc[3014]]=_0x5d2ax4==mxEvent[_0xe4bc[2987]];if(this[_0xe4bc[729]]||this[_0xe4bc[3013]]){if(_0x5d2ax2=this[_0xe4bc[724]][_0xe4bc[246]],_0x5d2ax3=this[_0xe4bc[1179]][_0xe4bc[251]][_0xe4bc[1709]](_0x5d2ax2,this[_0xe4bc[729]]),null==_0x5d2ax3&&this[_0xe4bc[1179]][_0xe4bc[2661]](_0x5d2ax2,this[_0xe4bc[729]])||null!=_0x5d2ax3&&this[_0xe4bc[1179]][_0xe4bc[2551]](_0x5d2ax2,_0x5d2ax3,this[_0xe4bc[729]])){this[_0xe4bc[1983]]=_0x5d2ax4}}else {this[_0xe4bc[1983]]=_0x5d2ax4}};mxEdgeHandler[_0xe4bc[202]][_0xe4bc[3015]]=function(_0x5d2ax2,_0x5d2ax3){return this[_0xe4bc[724]][_0xe4bc[238]]()};mxEdgeHandler[_0xe4bc[202]][_0xe4bc[3016]]=function(){return this[_0xe4bc[1179]][_0xe4bc[1020]]*this[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[255]]/2};mxEdgeHandler[_0xe4bc[202]][_0xe4bc[2689]]=function(_0x5d2ax2){var _0x5d2ax3= new mxPoint(_0x5d2ax2[_0xe4bc[734]](),_0x5d2ax2[_0xe4bc[735]]()),_0x5d2ax4=this[_0xe4bc[3016]](),_0x5d2ax5=this[_0xe4bc[1179]][_0xe4bc[249]](),_0x5d2ax9=!1,_0x5d2axa=!1;if(this[_0xe4bc[2996]]&&0<_0x5d2ax4){var _0x5d2ax12=function(_0x5d2ax2){if(null!=_0x5d2ax2){var _0x5d2ax5=_0x5d2ax2[_0xe4bc[235]];Math[_0xe4bc[425]](_0x5d2ax3[_0xe4bc[235]]-_0x5d2ax5)<_0x5d2ax4&&(_0x5d2ax3[_0xe4bc[235]]=_0x5d2ax5,_0x5d2ax9= !0);_0x5d2ax2=_0x5d2ax2[_0xe4bc[236]];Math[_0xe4bc[425]](_0x5d2ax3[_0xe4bc[236]]-_0x5d2ax2)<_0x5d2ax4&&(_0x5d2ax3[_0xe4bc[236]]=_0x5d2ax2,_0x5d2axa= !0)}},_0x5d2ax13=function(_0x5d2ax2){null!=_0x5d2ax2&&_0x5d2ax12[_0xe4bc[239]](this, new mxPoint(_0x5d2ax5[_0xe4bc[2230]](_0x5d2ax2),_0x5d2ax5[_0xe4bc[2228]](_0x5d2ax2)))};_0x5d2ax13[_0xe4bc[239]](this,this[_0xe4bc[724]][_0xe4bc[2089]](!0));_0x5d2ax13[_0xe4bc[239]](this,this[_0xe4bc[724]][_0xe4bc[2089]](!1));if(null!=this[_0xe4bc[2997]]){for(_0x5d2ax13=0;_0x5d2ax13<this[_0xe4bc[2997]];_0x5d2ax13++){_0x5d2ax13!=this[_0xe4bc[1983]]&&_0x5d2ax12[_0xe4bc[239]](this,this[_0xe4bc[2997]][_0x5d2ax13])}}};this[_0xe4bc[1179]][_0xe4bc[1018]](_0x5d2ax2[_0xe4bc[727]]())&&(_0x5d2ax2=_0x5d2ax5[_0xe4bc[255]],_0x5d2ax13=_0x5d2ax5[_0xe4bc[513]],_0x5d2ax9||(_0x5d2ax3[_0xe4bc[235]]=(this[_0xe4bc[1179]][_0xe4bc[1021]](_0x5d2ax3[_0xe4bc[235]]/_0x5d2ax2-_0x5d2ax13[_0xe4bc[235]])+_0x5d2ax13[_0xe4bc[235]])*_0x5d2ax2),_0x5d2axa||(_0x5d2ax3[_0xe4bc[236]]=(this[_0xe4bc[1179]][_0xe4bc[1021]](_0x5d2ax3[_0xe4bc[236]]/_0x5d2ax2-_0x5d2ax13[_0xe4bc[236]])+_0x5d2ax13[_0xe4bc[236]])*_0x5d2ax2));return _0x5d2ax3};mxEdgeHandler[_0xe4bc[202]][_0xe4bc[3017]]=function(_0x5d2ax2){this[_0xe4bc[2886]][_0xe4bc[2729]](_0x5d2ax2,this[_0xe4bc[729]]);this[_0xe4bc[2885]][_0xe4bc[2871]](_0x5d2ax2);_0x5d2ax2=this[_0xe4bc[2885]][_0xe4bc[2868]]();var _0x5d2ax3=null;null!=this[_0xe4bc[2886]][_0xe4bc[2919]]&&null!=this[_0xe4bc[2886]][_0xe4bc[2920]]&&this[_0xe4bc[2885]][_0xe4bc[862]]();null!=_0x5d2ax2?_0x5d2ax3=_0x5d2ax2:null!=this[_0xe4bc[2886]][_0xe4bc[2920]]&&null!=this[_0xe4bc[2886]][_0xe4bc[2919]]&&(_0x5d2ax3=this[_0xe4bc[2886]][_0xe4bc[2919]]);return _0x5d2ax3};mxEdgeHandler[_0xe4bc[202]][_0xe4bc[3018]]=function(_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[1179]][_0xe4bc[1198]](this[_0xe4bc[724]][_0xe4bc[246]]),_0x5d2ax3=null!=_0x5d2ax3[_0xe4bc[1525]]?_0x5d2ax3[_0xe4bc[1525]][_0xe4bc[1853]]():null;!this[_0xe4bc[729]]&&!this[_0xe4bc[3013]]?(this[_0xe4bc[2196]](_0x5d2ax2,!1),null==_0x5d2ax3?_0x5d2ax3=[_0x5d2ax2]:_0x5d2ax3[this[_0xe4bc[1983]]-1]=_0x5d2ax2):this[_0xe4bc[1179]][_0xe4bc[2401]]&&(_0x5d2ax3=null);return _0x5d2ax3};mxEdgeHandler[_0xe4bc[202]][_0xe4bc[3019]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){var _0x5d2ax5=this[_0xe4bc[729]]?_0x5d2ax4:this[_0xe4bc[724]][_0xe4bc[2089]](!0),_0x5d2ax9=this[_0xe4bc[3013]]?_0x5d2ax4:this[_0xe4bc[724]][_0xe4bc[2089]](!1),_0x5d2axa=this[_0xe4bc[1179]][_0xe4bc[2288]](_0x5d2ax2,_0x5d2ax5,!0),_0x5d2ax12=this[_0xe4bc[1179]][_0xe4bc[2288]](_0x5d2ax2,_0x5d2ax9,!1),_0x5d2ax13=this[_0xe4bc[2886]][_0xe4bc[2920]];null==_0x5d2ax13&&(_0x5d2ax13= new mxConnectionConstraint);this[_0xe4bc[729]]?_0x5d2axa=_0x5d2ax13:this[_0xe4bc[3013]]&&(_0x5d2ax12=_0x5d2ax13);(!this[_0xe4bc[729]]||null!=_0x5d2ax5)&&_0x5d2ax2[_0xe4bc[441]][_0xe4bc[2289]](_0x5d2ax2,_0x5d2ax5,!0,_0x5d2axa);(!this[_0xe4bc[3013]]||null!=_0x5d2ax9)&&_0x5d2ax2[_0xe4bc[441]][_0xe4bc[2289]](_0x5d2ax2,_0x5d2ax9,!1,_0x5d2ax12);if((this[_0xe4bc[729]]||this[_0xe4bc[3013]])&&null==_0x5d2ax4){_0x5d2ax2[_0xe4bc[2088]](_0x5d2ax3,this[_0xe4bc[729]]),null==this[_0xe4bc[2885]][_0xe4bc[2869]]()&&(this[_0xe4bc[267]]=this[_0xe4bc[1179]][_0xe4bc[2406]]?null:_0xe4bc[110])};_0x5d2ax2[_0xe4bc[441]][_0xe4bc[2282]](_0x5d2ax2,this[_0xe4bc[1525]],_0x5d2ax5,_0x5d2ax9);_0x5d2ax2[_0xe4bc[441]][_0xe4bc[2283]](_0x5d2ax2,_0x5d2ax5,_0x5d2ax9)};mxEdgeHandler[_0xe4bc[202]][_0xe4bc[788]]=function(_0x5d2ax2,_0x5d2ax3){if(null!=this[_0xe4bc[1983]]&&null!=this[_0xe4bc[2885]]){var _0x5d2ax4=this[_0xe4bc[2689]](_0x5d2ax3);if(this[_0xe4bc[3014]]){this[_0xe4bc[685]][_0xe4bc[235]]=_0x5d2ax4[_0xe4bc[235]],this[_0xe4bc[685]][_0xe4bc[236]]=_0x5d2ax4[_0xe4bc[236]]}else {this[_0xe4bc[1525]]=this[_0xe4bc[3018]](_0x5d2ax4);var _0x5d2ax5=this[_0xe4bc[729]]||this[_0xe4bc[3013]]?this[_0xe4bc[3017]](_0x5d2ax3):null,_0x5d2ax9=this[_0xe4bc[3015]](_0x5d2ax4,null!=_0x5d2ax5?_0x5d2ax5[_0xe4bc[246]]:null);this[_0xe4bc[3019]](_0x5d2ax9,_0x5d2ax4,_0x5d2ax5);this[_0xe4bc[3020]](null==this[_0xe4bc[267]]?this[_0xe4bc[2885]][_0xe4bc[2853]]:this[_0xe4bc[2885]][_0xe4bc[2855]]);this[_0xe4bc[2997]]=_0x5d2ax9[_0xe4bc[439]];this[_0xe4bc[1124]]= !0};this[_0xe4bc[2932]]();mxEvent[_0xe4bc[722]](_0x5d2ax3[_0xe4bc[727]]());_0x5d2ax3[_0xe4bc[722]]()}else {mxClient[_0xe4bc[80]]&&null!=this[_0xe4bc[2986]](_0x5d2ax3)&&_0x5d2ax3[_0xe4bc[722]](!1)}};mxEdgeHandler[_0xe4bc[202]][_0xe4bc[789]]=function(_0x5d2ax2,_0x5d2ax3){if(null!=this[_0xe4bc[1983]]&&null!=this[_0xe4bc[2885]]){var _0x5d2ax4=this[_0xe4bc[724]][_0xe4bc[246]];if(_0x5d2ax3[_0xe4bc[730]]()!=this[_0xe4bc[2739]]||_0x5d2ax3[_0xe4bc[732]]()!=this[_0xe4bc[2740]]){if(null!=this[_0xe4bc[267]]){0<this[_0xe4bc[267]][_0xe4bc[67]]&&this[_0xe4bc[1179]][_0xe4bc[2580]](this[_0xe4bc[267]])}else {if(this[_0xe4bc[3014]]){this[_0xe4bc[3021]](this[_0xe4bc[724]],this[_0xe4bc[685]][_0xe4bc[235]],this[_0xe4bc[685]][_0xe4bc[236]])}else {if(this[_0xe4bc[729]]||this[_0xe4bc[3013]]){var _0x5d2ax5=null;null!=this[_0xe4bc[2886]][_0xe4bc[2920]]&&null!=this[_0xe4bc[2886]][_0xe4bc[2919]]&&(_0x5d2ax5=this[_0xe4bc[2886]][_0xe4bc[2919]][_0xe4bc[246]]);null==_0x5d2ax5&&this[_0xe4bc[2885]][_0xe4bc[2867]]()&&(_0x5d2ax5=this[_0xe4bc[2885]][_0xe4bc[2861]][_0xe4bc[246]]);if(null!=_0x5d2ax5){_0x5d2ax4=this[_0xe4bc[807]](_0x5d2ax4,_0x5d2ax5,this[_0xe4bc[729]],this[_0xe4bc[1179]][_0xe4bc[2574]](_0x5d2ax3[_0xe4bc[727]]())&&this[_0xe4bc[2797]]&&this[_0xe4bc[1179]][_0xe4bc[2617]](),_0x5d2ax3)}else {if(this[_0xe4bc[1179]][_0xe4bc[2530]]()){_0x5d2ax5=this[_0xe4bc[2997]][this[_0xe4bc[729]]?0:this[_0xe4bc[2997]][_0xe4bc[67]]-1];_0x5d2ax5[_0xe4bc[235]]=_0x5d2ax5[_0xe4bc[235]]/this[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[255]]-this[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[513]][_0xe4bc[235]];_0x5d2ax5[_0xe4bc[236]]=_0x5d2ax5[_0xe4bc[236]]/this[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[255]]-this[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[513]][_0xe4bc[236]];var _0x5d2ax9=this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[248]](this[_0xe4bc[1179]][_0xe4bc[502]]()[_0xe4bc[1197]](_0x5d2ax4));null!=_0x5d2ax9&&(_0x5d2ax5[_0xe4bc[235]]-=_0x5d2ax9[_0xe4bc[2078]][_0xe4bc[235]],_0x5d2ax5[_0xe4bc[236]]-=_0x5d2ax9[_0xe4bc[2078]][_0xe4bc[236]]);_0x5d2ax5[_0xe4bc[235]]-=this[_0xe4bc[1179]][_0xe4bc[1136]]/this[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[255]];_0x5d2ax5[_0xe4bc[236]]-=this[_0xe4bc[1179]][_0xe4bc[1137]]/this[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[255]];this[_0xe4bc[3022]](_0x5d2ax4,_0x5d2ax5,this[_0xe4bc[729]])}}}else {this[_0xe4bc[1124]]?this[_0xe4bc[3023]](_0x5d2ax4,this[_0xe4bc[1525]]):(this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[2263]](this[_0xe4bc[724]][_0xe4bc[246]]),this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[2259]](this[_0xe4bc[724]][_0xe4bc[246]]))}}}};null!=this[_0xe4bc[2885]]&&(this[_0xe4bc[862]](),_0x5d2ax4!=this[_0xe4bc[724]][_0xe4bc[246]]&&this[_0xe4bc[1179]][_0xe4bc[2450]](_0x5d2ax4));_0x5d2ax3[_0xe4bc[722]]()}};mxEdgeHandler[_0xe4bc[202]][_0xe4bc[862]]=function(){this[_0xe4bc[1525]]=this[_0xe4bc[685]]=this[_0xe4bc[1983]]=this[_0xe4bc[267]]=null;this[_0xe4bc[3013]]=this[_0xe4bc[729]]=this[_0xe4bc[3014]]=this[_0xe4bc[1124]]= !1;this[_0xe4bc[2885]][_0xe4bc[862]]();this[_0xe4bc[2886]][_0xe4bc[862]]();this[_0xe4bc[3020]](mxConstants.EDGE_SELECTION_COLOR);this[_0xe4bc[258]]()};mxEdgeHandler[_0xe4bc[202]][_0xe4bc[3020]]=function(_0x5d2ax2){null!=this[_0xe4bc[253]]&&(this[_0xe4bc[253]][_0xe4bc[1336]]=_0x5d2ax2)};mxEdgeHandler[_0xe4bc[202]][_0xe4bc[2196]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[518]](),_0x5d2ax5=this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[512]]();_0x5d2ax3&&(_0x5d2ax2[_0xe4bc[235]]=this[_0xe4bc[1179]][_0xe4bc[1021]](_0x5d2ax2[_0xe4bc[235]]),_0x5d2ax2[_0xe4bc[236]]=this[_0xe4bc[1179]][_0xe4bc[1021]](_0x5d2ax2[_0xe4bc[236]]));_0x5d2ax2[_0xe4bc[235]]=Math[_0xe4bc[488]](_0x5d2ax2[_0xe4bc[235]]/_0x5d2ax4-_0x5d2ax5[_0xe4bc[235]]);_0x5d2ax2[_0xe4bc[236]]=Math[_0xe4bc[488]](_0x5d2ax2[_0xe4bc[236]]/_0x5d2ax4-_0x5d2ax5[_0xe4bc[236]]);_0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[248]](this[_0xe4bc[1179]][_0xe4bc[502]]()[_0xe4bc[1197]](this[_0xe4bc[724]][_0xe4bc[246]]));null!=_0x5d2ax4&&(_0x5d2ax2[_0xe4bc[235]]-=_0x5d2ax4[_0xe4bc[2078]][_0xe4bc[235]],_0x5d2ax2[_0xe4bc[236]]-=_0x5d2ax4[_0xe4bc[2078]][_0xe4bc[236]]);return _0x5d2ax2};mxEdgeHandler[_0xe4bc[202]][_0xe4bc[3021]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){var _0x5d2ax5=this[_0xe4bc[1179]][_0xe4bc[502]](),_0x5d2ax9=_0x5d2ax5[_0xe4bc[1721]](_0x5d2ax2[_0xe4bc[246]]);if(null!=_0x5d2ax9){var _0x5d2ax9=_0x5d2ax9[_0xe4bc[238]](),_0x5d2axa=this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[2308]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4);_0x5d2ax9[_0xe4bc[235]]=_0x5d2axa[_0xe4bc[235]];_0x5d2ax9[_0xe4bc[236]]=_0x5d2axa[_0xe4bc[236]];var _0x5d2ax12=this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[255]];_0x5d2ax9[_0xe4bc[1368]]= new mxPoint(0,0);_0x5d2axa=this[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[245]](_0x5d2ax2,_0x5d2ax9);_0x5d2ax9[_0xe4bc[1368]]= new mxPoint((_0x5d2ax3-_0x5d2axa[_0xe4bc[235]])/_0x5d2ax12,(_0x5d2ax4-_0x5d2axa[_0xe4bc[236]])/_0x5d2ax12);_0x5d2ax5[_0xe4bc[1724]](_0x5d2ax2[_0xe4bc[246]],_0x5d2ax9)}};mxEdgeHandler[_0xe4bc[202]][_0xe4bc[807]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){_0x5d2ax9=this[_0xe4bc[1179]][_0xe4bc[502]]();var _0x5d2axa=_0x5d2ax9[_0xe4bc[1197]](_0x5d2ax2);_0x5d2ax9[_0xe4bc[473]]();try{if(_0x5d2ax5){var _0x5d2ax12=_0x5d2ax2[_0xe4bc[238]]();_0x5d2ax9[_0xe4bc[99]](_0x5d2axa,_0x5d2ax12,_0x5d2ax9[_0xe4bc[262]](_0x5d2axa));var _0x5d2ax13=_0x5d2ax9[_0xe4bc[1709]](_0x5d2ax2,!_0x5d2ax4);this[_0xe4bc[1179]][_0xe4bc[851]](_0x5d2ax12,_0x5d2ax13,!_0x5d2ax4);_0x5d2ax2=_0x5d2ax12};var _0x5d2ax14=this[_0xe4bc[2886]][_0xe4bc[2920]];null==_0x5d2ax14&&(_0x5d2ax14= new mxConnectionConstraint);this[_0xe4bc[1179]][_0xe4bc[851]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax14)}finally{_0x5d2ax9[_0xe4bc[476]]()};return _0x5d2ax2};mxEdgeHandler[_0xe4bc[202]][_0xe4bc[3022]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){var _0x5d2ax5=this[_0xe4bc[1179]][_0xe4bc[502]](),_0x5d2ax9=_0x5d2ax5[_0xe4bc[1721]](_0x5d2ax2);if(null!=_0x5d2ax9){_0x5d2ax5[_0xe4bc[473]]();try{_0x5d2ax9=_0x5d2ax9[_0xe4bc[238]](),_0x5d2ax9[_0xe4bc[2007]](_0x5d2ax3,_0x5d2ax4),_0x5d2ax5[_0xe4bc[1724]](_0x5d2ax2,_0x5d2ax9),this[_0xe4bc[1179]][_0xe4bc[851]](_0x5d2ax2,null,_0x5d2ax4, new mxConnectionConstraint)}finally{_0x5d2ax5[_0xe4bc[476]]()}}};mxEdgeHandler[_0xe4bc[202]][_0xe4bc[3023]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[502]](),_0x5d2ax5=_0x5d2ax4[_0xe4bc[1721]](_0x5d2ax2);null!=_0x5d2ax5&&(_0x5d2ax5=_0x5d2ax5[_0xe4bc[238]](),_0x5d2ax5[_0xe4bc[1525]]=_0x5d2ax3,_0x5d2ax4[_0xe4bc[1724]](_0x5d2ax2,_0x5d2ax5))};mxEdgeHandler[_0xe4bc[202]][_0xe4bc[3000]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=mxUtils[_0xe4bc[2196]](this[_0xe4bc[1179]][_0xe4bc[526]],mxEvent[_0xe4bc[731]](_0x5d2ax3),mxEvent[_0xe4bc[733]](_0x5d2ax3)),_0x5d2ax5=this[_0xe4bc[1179]][_0xe4bc[1018]](_0x5d2ax3);this[_0xe4bc[2196]](_0x5d2ax4,_0x5d2ax5);this[_0xe4bc[3024]](_0x5d2ax2,_0x5d2ax4[_0xe4bc[235]],_0x5d2ax4[_0xe4bc[236]]);mxEvent[_0xe4bc[722]](_0x5d2ax3)};mxEdgeHandler[_0xe4bc[202]][_0xe4bc[3024]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){var _0x5d2ax5=this[_0xe4bc[1179]][_0xe4bc[1198]](_0x5d2ax2[_0xe4bc[246]]);_0x5d2ax3= new mxPoint(_0x5d2ax3,_0x5d2ax4);if(null!=_0x5d2ax5){_0x5d2ax5=_0x5d2ax5[_0xe4bc[238]]();_0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[513]];var _0x5d2ax9=this[_0xe4bc[1179]][_0xe4bc[441]][_0xe4bc[255]];_0x5d2ax4=mxUtils[_0xe4bc[3025]](_0x5d2ax2,(_0x5d2ax3[_0xe4bc[235]]+_0x5d2ax4[_0xe4bc[235]])*_0x5d2ax9,(_0x5d2ax3[_0xe4bc[236]]+_0x5d2ax4[_0xe4bc[236]])*_0x5d2ax9);null==_0x5d2ax5[_0xe4bc[1525]]?_0x5d2ax5[_0xe4bc[1525]]=[_0x5d2ax3]:_0x5d2ax5[_0xe4bc[1525]][_0xe4bc[300]](_0x5d2ax4,0,_0x5d2ax3);this[_0xe4bc[1179]][_0xe4bc[502]]()[_0xe4bc[1724]](_0x5d2ax2[_0xe4bc[246]],_0x5d2ax5);this[_0xe4bc[515]]();this[_0xe4bc[176]]()}};mxEdgeHandler[_0xe4bc[202]][_0xe4bc[3012]]=function(_0x5d2ax2,_0x5d2ax3){if(0<_0x5d2ax3&&_0x5d2ax3<this[_0xe4bc[2997]][_0xe4bc[67]]-1){var _0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[1198]](this[_0xe4bc[724]][_0xe4bc[246]]);null!=_0x5d2ax4&&null!=_0x5d2ax4[_0xe4bc[1525]]&&(_0x5d2ax4=_0x5d2ax4[_0xe4bc[238]](),_0x5d2ax4[_0xe4bc[1525]][_0xe4bc[300]](_0x5d2ax3-1,1),this[_0xe4bc[1179]][_0xe4bc[502]]()[_0xe4bc[1724]](_0x5d2ax2[_0xe4bc[246]],_0x5d2ax4),this[_0xe4bc[515]](),this[_0xe4bc[176]]())}};mxEdgeHandler[_0xe4bc[202]][_0xe4bc[3026]]=function(_0x5d2ax2){_0x5d2ax2=0==_0x5d2ax2;var _0x5d2ax3=this[_0xe4bc[724]][_0xe4bc[246]],_0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[502]]()[_0xe4bc[1709]](_0x5d2ax3,_0x5d2ax2),_0x5d2ax5=mxConstants[_0xe4bc[2984]];null!=_0x5d2ax4&&!this[_0xe4bc[1179]][_0xe4bc[2551]](_0x5d2ax3,_0x5d2ax4,_0x5d2ax2)||null==_0x5d2ax4&&!this[_0xe4bc[1179]][_0xe4bc[2661]](_0x5d2ax3,_0x5d2ax2)?_0x5d2ax5=mxConstants[_0xe4bc[3027]]:null!=_0x5d2ax4&&this[_0xe4bc[1179]][_0xe4bc[2551]](_0x5d2ax3,_0x5d2ax4,_0x5d2ax2)&&(_0x5d2ax5=mxConstants[_0xe4bc[3028]]);return _0x5d2ax5};mxEdgeHandler[_0xe4bc[202]][_0xe4bc[258]]=function(){this[_0xe4bc[2997]]=this[_0xe4bc[724]][_0xe4bc[439]][_0xe4bc[1853]]();var _0x5d2ax2=this[_0xe4bc[724]][_0xe4bc[246]],_0x5d2ax3=mxConstants[_0xe4bc[3029]];this[_0xe4bc[685]]= new mxPoint(this[_0xe4bc[724]][_0xe4bc[2079]][_0xe4bc[235]],this[_0xe4bc[724]][_0xe4bc[2079]][_0xe4bc[236]]);this[_0xe4bc[2972]][_0xe4bc[1562]]= new mxRectangle(Math[_0xe4bc[488]](this[_0xe4bc[685]][_0xe4bc[235]]-_0x5d2ax3/2),Math[_0xe4bc[488]](this[_0xe4bc[685]][_0xe4bc[236]]-_0x5d2ax3/2),_0x5d2ax3,_0x5d2ax3);this[_0xe4bc[2972]][_0xe4bc[258]]();_0x5d2ax3=this[_0xe4bc[1179]][_0xe4bc[2183]](_0x5d2ax2);null!=_0x5d2ax3&&0<_0x5d2ax3[_0xe4bc[67]]&&this[_0xe4bc[1179]][_0xe4bc[2628]](_0x5d2ax2)?this[_0xe4bc[2972]][_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[187]]=_0xe4bc[189]:this[_0xe4bc[2972]][_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[187]]=_0xe4bc[188];if(null!=this[_0xe4bc[2994]]&&0<this[_0xe4bc[2994]][_0xe4bc[67]]){var _0x5d2ax4=this[_0xe4bc[2997]][_0xe4bc[67]]-1,_0x5d2ax2=this[_0xe4bc[2997]][0],_0x5d2ax5=this[_0xe4bc[2997]][0][_0xe4bc[236]],_0x5d2ax3=this[_0xe4bc[2994]][0][_0xe4bc[1562]];this[_0xe4bc[2994]][0][_0xe4bc[1562]]= new mxRectangle(Math[_0xe4bc[488]](this[_0xe4bc[2997]][0][_0xe4bc[235]]-_0x5d2ax3[_0xe4bc[117]]/2),Math[_0xe4bc[488]](_0x5d2ax5-_0x5d2ax3[_0xe4bc[119]]/2),_0x5d2ax3[_0xe4bc[117]],_0x5d2ax3[_0xe4bc[119]]);this[_0xe4bc[2994]][0][_0xe4bc[1334]]=this[_0xe4bc[3026]](0);this[_0xe4bc[2994]][0][_0xe4bc[258]]();var _0x5d2ax5=this[_0xe4bc[2997]][_0x5d2ax4],_0x5d2ax9=this[_0xe4bc[2997]][_0x5d2ax4][_0xe4bc[235]],_0x5d2ax4=this[_0xe4bc[2997]][_0x5d2ax4][_0xe4bc[236]],_0x5d2axa=this[_0xe4bc[2994]][_0xe4bc[67]]-1,_0x5d2ax3=this[_0xe4bc[2994]][_0x5d2axa][_0xe4bc[1562]];this[_0xe4bc[2994]][_0x5d2axa][_0xe4bc[1562]]= new mxRectangle(Math[_0xe4bc[488]](_0x5d2ax9-_0x5d2ax3[_0xe4bc[117]]/2),Math[_0xe4bc[488]](_0x5d2ax4-_0x5d2ax3[_0xe4bc[119]]/2),_0x5d2ax3[_0xe4bc[117]],_0x5d2ax3[_0xe4bc[119]]);this[_0xe4bc[2994]][_0x5d2axa][_0xe4bc[1334]]=this[_0xe4bc[3026]](_0x5d2axa);this[_0xe4bc[2994]][_0x5d2axa][_0xe4bc[258]]();this[_0xe4bc[3030]](_0x5d2ax2,_0x5d2ax5)};this[_0xe4bc[2932]]()};mxEdgeHandler[_0xe4bc[202]][_0xe4bc[3030]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[502]]()[_0xe4bc[1721]](this[_0xe4bc[724]][_0xe4bc[246]])[_0xe4bc[1525]];if(null!=_0x5d2ax4){null==this[_0xe4bc[1525]]&&(this[_0xe4bc[1525]]=[]);for(var _0x5d2ax5=1;_0x5d2ax5<this[_0xe4bc[2994]][_0xe4bc[67]]-1;_0x5d2ax5++){if(null!=this[_0xe4bc[2994]][_0x5d2ax5]){if(null!=this[_0xe4bc[2997]][_0x5d2ax5]){var _0x5d2ax9=this[_0xe4bc[2997]][_0x5d2ax5][_0xe4bc[235]],_0x5d2axa=this[_0xe4bc[2997]][_0x5d2ax5][_0xe4bc[236]],_0x5d2ax12=this[_0xe4bc[2994]][_0x5d2ax5][_0xe4bc[1562]];this[_0xe4bc[2994]][_0x5d2ax5][_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[187]]=_0xe4bc[189];this[_0xe4bc[2994]][_0x5d2ax5][_0xe4bc[1562]]= new mxRectangle(Math[_0xe4bc[488]](_0x5d2ax9-_0x5d2ax12[_0xe4bc[117]]/2),Math[_0xe4bc[488]](_0x5d2axa-_0x5d2ax12[_0xe4bc[119]]/2),_0x5d2ax12[_0xe4bc[117]],_0x5d2ax12[_0xe4bc[119]]);this[_0xe4bc[2994]][_0x5d2ax5][_0xe4bc[258]]();this[_0xe4bc[1525]][_0x5d2ax5-1]=_0x5d2ax4[_0x5d2ax5-1]}else {this[_0xe4bc[2994]][_0x5d2ax5][_0xe4bc[515]](),this[_0xe4bc[2994]][_0x5d2ax5]=null}}}}};mxEdgeHandler[_0xe4bc[202]][_0xe4bc[2932]]=function(){if(this[_0xe4bc[3014]]){var _0x5d2ax2=mxConstants[_0xe4bc[3029]],_0x5d2ax2= new mxRectangle(Math[_0xe4bc[488]](this[_0xe4bc[685]][_0xe4bc[235]]-_0x5d2ax2/2),Math[_0xe4bc[488]](this[_0xe4bc[685]][_0xe4bc[236]]-_0x5d2ax2/2),_0x5d2ax2,_0x5d2ax2);this[_0xe4bc[2972]][_0xe4bc[1562]]=_0x5d2ax2;this[_0xe4bc[2972]][_0xe4bc[258]]()}else {this[_0xe4bc[253]][_0xe4bc[1525]]=this[_0xe4bc[2997]],this[_0xe4bc[253]][_0xe4bc[258]]()}};mxEdgeHandler[_0xe4bc[202]][_0xe4bc[515]]=function(){null!=this[_0xe4bc[2885]]&&(this[_0xe4bc[2885]][_0xe4bc[515]](),this[_0xe4bc[2885]]=null);null!=this[_0xe4bc[253]]&&(this[_0xe4bc[253]][_0xe4bc[515]](),this[_0xe4bc[253]]=null);null!=this[_0xe4bc[2972]]&&(this[_0xe4bc[2972]][_0xe4bc[515]](),this[_0xe4bc[2972]]=null);null!=this[_0xe4bc[2886]]&&(this[_0xe4bc[2886]][_0xe4bc[515]](),this[_0xe4bc[2886]]=null);if(null!=this[_0xe4bc[2994]]){for(var _0x5d2ax2=0;_0x5d2ax2<this[_0xe4bc[2994]][_0xe4bc[67]];_0x5d2ax2++){null!=this[_0xe4bc[2994]][_0x5d2ax2]&&(this[_0xe4bc[2994]][_0x5d2ax2][_0xe4bc[515]](),this[_0xe4bc[2994]][_0x5d2ax2]=null)}}};function mxElbowEdgeHandler(_0x5d2ax2){mxEdgeHandler[_0xe4bc[239]](this,_0x5d2ax2)}mxUtils[_0xe4bc[1284]](mxElbowEdgeHandler,mxEdgeHandler);mxElbowEdgeHandler[_0xe4bc[202]]= new mxEdgeHandler;mxElbowEdgeHandler[_0xe4bc[202]][_0xe4bc[196]]=mxElbowEdgeHandler;mxElbowEdgeHandler[_0xe4bc[202]][_0xe4bc[3031]]= !0;mxElbowEdgeHandler[_0xe4bc[202]][_0xe4bc[3032]]=_0xe4bc[130]!=mxClient[_0xe4bc[90]]?_0xe4bc[3033]:_0xe4bc[110];mxElbowEdgeHandler[_0xe4bc[202]][_0xe4bc[3001]]=function(){var _0x5d2ax2=[],_0x5d2ax3=this[_0xe4bc[3009]](0);this[_0xe4bc[3002]](_0x5d2ax3);_0x5d2ax3[_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[270]]=mxConstants[_0xe4bc[3011]];mxEvent[_0xe4bc[2733]](_0x5d2ax3[_0xe4bc[252]],this[_0xe4bc[1179]],this[_0xe4bc[724]]);_0x5d2ax2[_0xe4bc[207]](_0x5d2ax3);mxClient[_0xe4bc[754]]&&_0x5d2ax3[_0xe4bc[252]][_0xe4bc[57]](_0xe4bc[1377],_0xe4bc[130]);_0x5d2ax2[_0xe4bc[207]](this[_0xe4bc[3034]]());this[_0xe4bc[1525]][_0xe4bc[207]]( new mxPoint(0,0));_0x5d2ax3=this[_0xe4bc[3009]](2);this[_0xe4bc[3002]](_0x5d2ax3);_0x5d2ax3[_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[270]]=mxConstants[_0xe4bc[3011]];mxEvent[_0xe4bc[2733]](_0x5d2ax3[_0xe4bc[252]],this[_0xe4bc[1179]],this[_0xe4bc[724]]);_0x5d2ax2[_0xe4bc[207]](_0x5d2ax3);mxClient[_0xe4bc[754]]&&_0x5d2ax3[_0xe4bc[252]][_0xe4bc[57]](_0xe4bc[1377],_0xe4bc[130]);return _0x5d2ax2};mxElbowEdgeHandler[_0xe4bc[202]][_0xe4bc[3034]]=function(){var _0x5d2ax2=this[_0xe4bc[3009]]();this[_0xe4bc[3002]](_0x5d2ax2);var _0x5d2ax3=this[_0xe4bc[3035]]();_0x5d2ax2[_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[270]]=_0x5d2ax3;_0x5d2ax3=mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){!mxEvent[_0xe4bc[721]](_0x5d2ax2)&&this[_0xe4bc[3031]]&&(this[_0xe4bc[1179]][_0xe4bc[854]](this[_0xe4bc[724]][_0xe4bc[246]],_0x5d2ax2),mxEvent[_0xe4bc[722]](_0x5d2ax2))});mxEvent[_0xe4bc[2733]](_0x5d2ax2[_0xe4bc[252]],this[_0xe4bc[1179]],this[_0xe4bc[724]],null,null,null,_0x5d2ax3);this[_0xe4bc[1179]][_0xe4bc[2662]](this[_0xe4bc[724]][_0xe4bc[246]])||(_0x5d2ax2[_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[495]]=_0xe4bc[130]);return _0x5d2ax2};mxElbowEdgeHandler[_0xe4bc[202]][_0xe4bc[3035]]=function(){return this[_0xe4bc[724]][_0xe4bc[124]][mxConstants[_0xe4bc[2294]]]==mxEdgeStyle[_0xe4bc[2570]]||this[_0xe4bc[724]][_0xe4bc[124]][mxConstants[_0xe4bc[2294]]]==mxConstants[_0xe4bc[3036]]||(this[_0xe4bc[724]][_0xe4bc[124]][mxConstants[_0xe4bc[2294]]]==mxEdgeStyle[_0xe4bc[2568]]||this[_0xe4bc[724]][_0xe4bc[124]][mxConstants[_0xe4bc[2294]]]==mxConstants[_0xe4bc[3037]])&&this[_0xe4bc[724]][_0xe4bc[124]][mxConstants[_0xe4bc[2231]]]==mxConstants[_0xe4bc[2232]]?_0xe4bc[3038]:_0xe4bc[3039]};mxElbowEdgeHandler[_0xe4bc[202]][_0xe4bc[2597]]=function(_0x5d2ax2){var _0x5d2ax3=null;if(null!=this[_0xe4bc[2994]]&&null!=this[_0xe4bc[2994]][1]&&(_0x5d2ax2==this[_0xe4bc[2994]][1][_0xe4bc[252]]||_0x5d2ax2[_0xe4bc[265]]==this[_0xe4bc[2994]][1][_0xe4bc[252]])){_0x5d2ax3=this[_0xe4bc[3032]],_0x5d2ax3=mxResources[_0xe4bc[203]](_0x5d2ax3)||_0x5d2ax3};return _0x5d2ax3};mxElbowEdgeHandler[_0xe4bc[202]][_0xe4bc[2196]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[518]](),_0x5d2ax5=this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[512]](),_0x5d2ax9=this[_0xe4bc[724]][_0xe4bc[2078]];_0x5d2ax3&&(_0x5d2ax2[_0xe4bc[235]]=this[_0xe4bc[1179]][_0xe4bc[1021]](_0x5d2ax2[_0xe4bc[235]]),_0x5d2ax2[_0xe4bc[236]]=this[_0xe4bc[1179]][_0xe4bc[1021]](_0x5d2ax2[_0xe4bc[236]]));_0x5d2ax2[_0xe4bc[235]]=Math[_0xe4bc[488]](_0x5d2ax2[_0xe4bc[235]]/_0x5d2ax4-_0x5d2ax5[_0xe4bc[235]]-_0x5d2ax9[_0xe4bc[235]]);_0x5d2ax2[_0xe4bc[236]]=Math[_0xe4bc[488]](_0x5d2ax2[_0xe4bc[236]]/_0x5d2ax4-_0x5d2ax5[_0xe4bc[236]]-_0x5d2ax9[_0xe4bc[236]])};mxElbowEdgeHandler[_0xe4bc[202]][_0xe4bc[3030]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[502]]()[_0xe4bc[1721]](this[_0xe4bc[724]][_0xe4bc[246]])[_0xe4bc[1525]],_0x5d2ax4=null!=_0x5d2ax4?_0x5d2ax4[0]:null,_0x5d2ax4=null==_0x5d2ax4? new mxPoint(_0x5d2ax2[_0xe4bc[235]]+(_0x5d2ax3[_0xe4bc[235]]-_0x5d2ax2[_0xe4bc[235]])/2,_0x5d2ax2[_0xe4bc[236]]+(_0x5d2ax3[_0xe4bc[236]]-_0x5d2ax2[_0xe4bc[236]])/2): new mxPoint(this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[255]]*(_0x5d2ax4[_0xe4bc[235]]+this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[513]][_0xe4bc[235]]+this[_0xe4bc[724]][_0xe4bc[2078]][_0xe4bc[235]]),this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[255]]*(_0x5d2ax4[_0xe4bc[236]]+this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[513]][_0xe4bc[236]]+this[_0xe4bc[724]][_0xe4bc[2078]][_0xe4bc[236]])),_0x5d2ax5=this[_0xe4bc[2994]][1][_0xe4bc[1562]],_0x5d2ax9=_0x5d2ax5[_0xe4bc[117]],_0x5d2ax5=_0x5d2ax5[_0xe4bc[119]];null==this[_0xe4bc[2959]]&&(_0x5d2ax5=_0x5d2ax9=mxConstants[_0xe4bc[2974]]);var _0x5d2axa= new mxRectangle(Math[_0xe4bc[488]](_0x5d2ax4[_0xe4bc[235]]-_0x5d2ax9/2),Math[_0xe4bc[488]](_0x5d2ax4[_0xe4bc[236]]-_0x5d2ax5/2),_0x5d2ax9,_0x5d2ax5);null==this[_0xe4bc[2959]]&&(_0xe4bc[188]!=this[_0xe4bc[2972]][_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[187]]&&mxUtils[_0xe4bc[1825]](_0x5d2axa,this[_0xe4bc[2972]][_0xe4bc[1562]]))&&(_0x5d2ax9+=3,_0x5d2ax5+=3,_0x5d2axa= new mxRectangle(Math[_0xe4bc[488]](_0x5d2ax4[_0xe4bc[235]]-_0x5d2ax9/2),Math[_0xe4bc[488]](_0x5d2ax4[_0xe4bc[236]]-_0x5d2ax5/2),_0x5d2ax9,_0x5d2ax5));this[_0xe4bc[2994]][1][_0xe4bc[1562]]=_0x5d2axa;this[_0xe4bc[2994]][1][_0xe4bc[258]]()};function mxEdgeSegmentHandler(_0x5d2ax2){mxEdgeHandler[_0xe4bc[239]](this,_0x5d2ax2)}mxUtils[_0xe4bc[1284]](mxEdgeSegmentHandler,mxEdgeHandler);mxEdgeSegmentHandler[_0xe4bc[202]]= new mxElbowEdgeHandler;mxEdgeSegmentHandler[_0xe4bc[202]][_0xe4bc[196]]=mxEdgeSegmentHandler;mxEdgeSegmentHandler[_0xe4bc[202]][_0xe4bc[3018]]=function(_0x5d2ax2){if(this[_0xe4bc[729]]||this[_0xe4bc[3013]]){return mxElbowEdgeHandler[_0xe4bc[202]][_0xe4bc[3018]][_0xe4bc[183]](this,arguments)};this[_0xe4bc[2196]](_0x5d2ax2,!1);var _0x5d2ax3=this[_0xe4bc[724]][_0xe4bc[439]],_0x5d2ax4=_0x5d2ax3[0][_0xe4bc[238]]();this[_0xe4bc[2196]](_0x5d2ax4,!1);for(var _0x5d2ax5=[],_0x5d2ax9=1;_0x5d2ax9<_0x5d2ax3[_0xe4bc[67]];_0x5d2ax9++){var _0x5d2axa=_0x5d2ax3[_0x5d2ax9][_0xe4bc[238]]();this[_0xe4bc[2196]](_0x5d2axa,!1);_0x5d2ax9==this[_0xe4bc[1983]]&&(_0x5d2ax4[_0xe4bc[235]]==_0x5d2axa[_0xe4bc[235]]?(_0x5d2ax4[_0xe4bc[235]]=_0x5d2ax2[_0xe4bc[235]],_0x5d2axa[_0xe4bc[235]]=_0x5d2ax2[_0xe4bc[235]]):(_0x5d2ax4[_0xe4bc[236]]=_0x5d2ax2[_0xe4bc[236]],_0x5d2axa[_0xe4bc[236]]=_0x5d2ax2[_0xe4bc[236]]));_0x5d2ax9<_0x5d2ax3[_0xe4bc[67]]-1&&_0x5d2ax5[_0xe4bc[207]](_0x5d2axa);_0x5d2ax4=_0x5d2axa};if(1==_0x5d2ax5[_0xe4bc[67]]){if(_0x5d2ax4=this[_0xe4bc[724]][_0xe4bc[441]],_0x5d2ax9=this[_0xe4bc[724]][_0xe4bc[2089]](!0),_0x5d2axa=this[_0xe4bc[724]][_0xe4bc[2089]](!1),null!=_0x5d2axa&null!=_0x5d2ax9){var _0x5d2ax12=this[_0xe4bc[724]][_0xe4bc[2078]][_0xe4bc[235]],_0x5d2ax13=this[_0xe4bc[724]][_0xe4bc[2078]][_0xe4bc[236]];mxUtils[_0xe4bc[442]](_0x5d2axa,_0x5d2ax5[0][_0xe4bc[235]]+_0x5d2ax12,_0x5d2ax5[0][_0xe4bc[236]]+_0x5d2ax13)?_0x5d2ax3[1][_0xe4bc[236]]==_0x5d2ax3[2][_0xe4bc[236]]?_0x5d2ax5[0][_0xe4bc[236]]=_0x5d2ax4[_0xe4bc[2228]](_0x5d2ax9)-_0x5d2ax13:_0x5d2ax5[0][_0xe4bc[235]]=_0x5d2ax4[_0xe4bc[2230]](_0x5d2ax9)-_0x5d2ax12:mxUtils[_0xe4bc[442]](_0x5d2ax9,_0x5d2ax5[0][_0xe4bc[235]]+_0x5d2ax12,_0x5d2ax5[0][_0xe4bc[236]]+_0x5d2ax13)&&(_0x5d2ax3[1][_0xe4bc[236]]==_0x5d2ax3[0][_0xe4bc[236]]?_0x5d2ax5[0][_0xe4bc[236]]=_0x5d2ax4[_0xe4bc[2228]](_0x5d2axa)-_0x5d2ax13:_0x5d2ax5[0][_0xe4bc[235]]=_0x5d2ax4[_0xe4bc[2230]](_0x5d2axa)-_0x5d2ax12)}}else {0==_0x5d2ax5[_0xe4bc[67]]&&(_0x5d2ax5=[_0x5d2ax2])};return _0x5d2ax5};mxEdgeSegmentHandler[_0xe4bc[202]][_0xe4bc[3001]]=function(){var _0x5d2ax2=[],_0x5d2ax3=this[_0xe4bc[3009]](0);this[_0xe4bc[3002]](_0x5d2ax3);_0x5d2ax3[_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[270]]=mxConstants[_0xe4bc[3011]];mxEvent[_0xe4bc[2733]](_0x5d2ax3[_0xe4bc[252]],this[_0xe4bc[1179]],this[_0xe4bc[724]]);_0x5d2ax2[_0xe4bc[207]](_0x5d2ax3);mxClient[_0xe4bc[754]]&&_0x5d2ax3[_0xe4bc[252]][_0xe4bc[57]](_0xe4bc[1377],_0xe4bc[130]);var _0x5d2ax4=this[_0xe4bc[724]][_0xe4bc[439]];if(this[_0xe4bc[1179]][_0xe4bc[2662]](this[_0xe4bc[724]][_0xe4bc[246]])){null==this[_0xe4bc[1525]]&&(this[_0xe4bc[1525]]=[]);for(var _0x5d2ax5=0;_0x5d2ax5<_0x5d2ax4[_0xe4bc[67]]-1;_0x5d2ax5++){_0x5d2ax3=this[_0xe4bc[3034]](),_0x5d2ax2[_0xe4bc[207]](_0x5d2ax3),_0x5d2ax3[_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[270]]=0==_0x5d2ax4[_0x5d2ax5][_0xe4bc[235]]-_0x5d2ax4[_0x5d2ax5+1][_0xe4bc[235]]?_0xe4bc[3039]:_0xe4bc[3038],this[_0xe4bc[1525]][_0xe4bc[207]]( new mxPoint(0,0)),mxClient[_0xe4bc[754]]&&_0x5d2ax3[_0xe4bc[252]][_0xe4bc[57]](_0xe4bc[1377],_0xe4bc[130])}};_0x5d2ax3=this[_0xe4bc[3009]](_0x5d2ax4[_0xe4bc[67]]);this[_0xe4bc[3002]](_0x5d2ax3);_0x5d2ax3[_0xe4bc[252]][_0xe4bc[124]][_0xe4bc[270]]=mxConstants[_0xe4bc[3011]];mxEvent[_0xe4bc[2733]](_0x5d2ax3[_0xe4bc[252]],this[_0xe4bc[1179]],this[_0xe4bc[724]]);_0x5d2ax2[_0xe4bc[207]](_0x5d2ax3);mxClient[_0xe4bc[754]]&&_0x5d2ax3[_0xe4bc[252]][_0xe4bc[57]](_0xe4bc[1377],_0xe4bc[130]);return _0x5d2ax2};mxEdgeSegmentHandler[_0xe4bc[202]][_0xe4bc[258]]=function(){this[_0xe4bc[802]]();mxEdgeHandler[_0xe4bc[202]][_0xe4bc[258]][_0xe4bc[183]](this,arguments)};mxEdgeSegmentHandler[_0xe4bc[202]][_0xe4bc[802]]=function(){if(null!=this[_0xe4bc[2994]]){for(var _0x5d2ax2=0;_0x5d2ax2<this[_0xe4bc[2994]][_0xe4bc[67]];_0x5d2ax2++){null!=this[_0xe4bc[2994]][_0x5d2ax2]&&(this[_0xe4bc[2994]][_0x5d2ax2][_0xe4bc[515]](),this[_0xe4bc[2994]][_0x5d2ax2]=null)};this[_0xe4bc[2994]]=this[_0xe4bc[3001]]()}};mxEdgeSegmentHandler[_0xe4bc[202]][_0xe4bc[3030]]=function(_0x5d2ax2,_0x5d2ax3){if(this[_0xe4bc[1179]][_0xe4bc[2662]](this[_0xe4bc[724]][_0xe4bc[246]])){var _0x5d2ax4=mxConstants[_0xe4bc[2974]],_0x5d2ax5=this[_0xe4bc[724]][_0xe4bc[439]];if(null!=_0x5d2ax5&&1<_0x5d2ax5[_0xe4bc[67]]){for(var _0x5d2ax9=0;_0x5d2ax9<this[_0xe4bc[724]][_0xe4bc[439]][_0xe4bc[67]]-1;_0x5d2ax9++){if(null!=this[_0xe4bc[2994]][_0x5d2ax9+1]){_0x5d2ax2=_0x5d2ax5[_0x5d2ax9];_0x5d2ax3=_0x5d2ax5[_0x5d2ax9+1];var _0x5d2axa= new mxPoint(_0x5d2ax2[_0xe4bc[235]]+(_0x5d2ax3[_0xe4bc[235]]-_0x5d2ax2[_0xe4bc[235]])/2,_0x5d2ax2[_0xe4bc[236]]+(_0x5d2ax3[_0xe4bc[236]]-_0x5d2ax2[_0xe4bc[236]])/2);this[_0xe4bc[2994]][_0x5d2ax9+1][_0xe4bc[1562]]= new mxRectangle(Math[_0xe4bc[488]](_0x5d2axa[_0xe4bc[235]]-_0x5d2ax4/2),Math[_0xe4bc[488]](_0x5d2axa[_0xe4bc[236]]-_0x5d2ax4/2),_0x5d2ax4,_0x5d2ax4);this[_0xe4bc[2994]][_0x5d2ax9+1][_0xe4bc[258]]()}}}}};mxEdgeSegmentHandler[_0xe4bc[202]][_0xe4bc[3023]]=function(_0x5d2ax2,_0x5d2ax3){_0x5d2ax3=[];var _0x5d2ax4=this[_0xe4bc[2997]];if(1<_0x5d2ax4[_0xe4bc[67]]){for(var _0x5d2ax5=_0x5d2ax4[0],_0x5d2ax9=_0x5d2ax4[1],_0x5d2axa=2;_0x5d2axa<_0x5d2ax4[_0xe4bc[67]];_0x5d2axa++){var _0x5d2ax12=_0x5d2ax4[_0x5d2axa];if((Math[_0xe4bc[488]](_0x5d2ax5[_0xe4bc[235]])!=Math[_0xe4bc[488]](_0x5d2ax9[_0xe4bc[235]])||Math[_0xe4bc[488]](_0x5d2ax9[_0xe4bc[235]])!=Math[_0xe4bc[488]](_0x5d2ax12[_0xe4bc[235]]))&&(Math[_0xe4bc[488]](_0x5d2ax5[_0xe4bc[236]])!=Math[_0xe4bc[488]](_0x5d2ax9[_0xe4bc[236]])||Math[_0xe4bc[488]](_0x5d2ax9[_0xe4bc[236]])!=Math[_0xe4bc[488]](_0x5d2ax12[_0xe4bc[236]]))){_0x5d2ax5=_0x5d2ax9,_0x5d2ax9=_0x5d2ax9[_0xe4bc[238]](),this[_0xe4bc[2196]](_0x5d2ax9,!1),_0x5d2ax3[_0xe4bc[207]](_0x5d2ax9)};_0x5d2ax9=_0x5d2ax12}};mxElbowEdgeHandler[_0xe4bc[202]][_0xe4bc[3023]][_0xe4bc[183]](this,arguments)};function mxKeyHandler(_0x5d2ax2,_0x5d2ax3){null!=_0x5d2ax2&&(this[_0xe4bc[1179]]=_0x5d2ax2,this[_0xe4bc[772]]=_0x5d2ax3||document[_0xe4bc[158]],this[_0xe4bc[3040]]=[],this[_0xe4bc[3041]]=[],this[_0xe4bc[3042]]=[],this[_0xe4bc[3043]]=[],mxEvent[_0xe4bc[169]](this[_0xe4bc[772]],_0xe4bc[2123],mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){this[_0xe4bc[3044]](_0x5d2ax2)})),mxClient[_0xe4bc[80]]&&mxEvent[_0xe4bc[169]](window,_0xe4bc[2428],mxUtils[_0xe4bc[885]](this,function(){this[_0xe4bc[515]]()})))}mxKeyHandler[_0xe4bc[202]][_0xe4bc[1179]]=null;mxKeyHandler[_0xe4bc[202]][_0xe4bc[772]]=null;mxKeyHandler[_0xe4bc[202]][_0xe4bc[3040]]=null;mxKeyHandler[_0xe4bc[202]][_0xe4bc[3041]]=null;mxKeyHandler[_0xe4bc[202]][_0xe4bc[3042]]=null;mxKeyHandler[_0xe4bc[202]][_0xe4bc[3043]]=null;mxKeyHandler[_0xe4bc[202]][_0xe4bc[984]]= !0;mxKeyHandler[_0xe4bc[202]][_0xe4bc[994]]=function(){return this[_0xe4bc[984]]};mxKeyHandler[_0xe4bc[202]][_0xe4bc[995]]=function(_0x5d2ax2){this[_0xe4bc[984]]=_0x5d2ax2};mxKeyHandler[_0xe4bc[202]][_0xe4bc[3045]]=function(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[3040]][_0x5d2ax2]=_0x5d2ax3};mxKeyHandler[_0xe4bc[202]][_0xe4bc[3046]]=function(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[3041]][_0x5d2ax2]=_0x5d2ax3};mxKeyHandler[_0xe4bc[202]][_0xe4bc[3047]]=function(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[3042]][_0x5d2ax2]=_0x5d2ax3};mxKeyHandler[_0xe4bc[202]][_0xe4bc[3048]]=function(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[3043]][_0x5d2ax2]=_0x5d2ax3};mxKeyHandler[_0xe4bc[202]][_0xe4bc[775]]=function(_0x5d2ax2){return mxEvent[_0xe4bc[775]](_0x5d2ax2)};mxKeyHandler[_0xe4bc[202]][_0xe4bc[3049]]=function(_0x5d2ax2){return null!=_0x5d2ax2?this[_0xe4bc[775]](_0x5d2ax2)?mxEvent[_0xe4bc[774]](_0x5d2ax2)?this[_0xe4bc[3043]][_0x5d2ax2[_0xe4bc[2124]]]:this[_0xe4bc[3042]][_0x5d2ax2[_0xe4bc[2124]]]:mxEvent[_0xe4bc[774]](_0x5d2ax2)?this[_0xe4bc[3041]][_0x5d2ax2[_0xe4bc[2124]]]:this[_0xe4bc[3040]][_0x5d2ax2[_0xe4bc[2124]]]:null};mxKeyHandler[_0xe4bc[202]][_0xe4bc[3050]]=function(_0x5d2ax2){_0x5d2ax2=mxEvent[_0xe4bc[728]](_0x5d2ax2);if(_0x5d2ax2==this[_0xe4bc[772]]||_0x5d2ax2[_0xe4bc[265]]==this[_0xe4bc[772]]||null!=this[_0xe4bc[1179]][_0xe4bc[2347]]&&_0x5d2ax2==this[_0xe4bc[1179]][_0xe4bc[2347]][_0xe4bc[126]]){return !0};for(;null!=_0x5d2ax2;){if(_0x5d2ax2==this[_0xe4bc[1179]][_0xe4bc[526]]){return !0};_0x5d2ax2=_0x5d2ax2[_0xe4bc[265]]};return !1};mxKeyHandler[_0xe4bc[202]][_0xe4bc[3044]]=function(_0x5d2ax2){if(this[_0xe4bc[1179]][_0xe4bc[994]]()&&!mxEvent[_0xe4bc[721]](_0x5d2ax2)&&this[_0xe4bc[3050]](_0x5d2ax2)&&this[_0xe4bc[994]]()){if(27==_0x5d2ax2[_0xe4bc[2124]]){this[_0xe4bc[859]](_0x5d2ax2)}else {if(!this[_0xe4bc[1179]][_0xe4bc[2203]]()){var _0x5d2ax3=this[_0xe4bc[3049]](_0x5d2ax2);null!=_0x5d2ax3&&(_0x5d2ax3(_0x5d2ax2),mxEvent[_0xe4bc[722]](_0x5d2ax2))}}}};mxKeyHandler[_0xe4bc[202]][_0xe4bc[859]]=function(_0x5d2ax2){this[_0xe4bc[1179]][_0xe4bc[2608]]()&&this[_0xe4bc[1179]][_0xe4bc[859]](_0x5d2ax2)};mxKeyHandler[_0xe4bc[202]][_0xe4bc[515]]=function(){this[_0xe4bc[772]]=null};function mxTooltipHandler(_0x5d2ax2,_0x5d2ax3){null!=_0x5d2ax2&&(this[_0xe4bc[1179]]=_0x5d2ax2,this[_0xe4bc[1140]]=_0x5d2ax3||500,this[_0xe4bc[1179]][_0xe4bc[1133]](this))}mxTooltipHandler[_0xe4bc[202]][_0xe4bc[931]]=10005;mxTooltipHandler[_0xe4bc[202]][_0xe4bc[1179]]=null;mxTooltipHandler[_0xe4bc[202]][_0xe4bc[1140]]=null;mxTooltipHandler[_0xe4bc[202]][_0xe4bc[3051]]= !1;mxTooltipHandler[_0xe4bc[202]][_0xe4bc[984]]= !0;mxTooltipHandler[_0xe4bc[202]][_0xe4bc[994]]=function(){return this[_0xe4bc[984]]};mxTooltipHandler[_0xe4bc[202]][_0xe4bc[995]]=function(_0x5d2ax2){this[_0xe4bc[984]]=_0x5d2ax2};mxTooltipHandler[_0xe4bc[202]][_0xe4bc[2277]]=function(){return this[_0xe4bc[3051]]};mxTooltipHandler[_0xe4bc[202]][_0xe4bc[3052]]=function(_0x5d2ax2){this[_0xe4bc[3051]]=_0x5d2ax2};mxTooltipHandler[_0xe4bc[202]][_0xe4bc[176]]=function(){null!=document[_0xe4bc[112]]&&(this[_0xe4bc[485]]=document[_0xe4bc[55]](_0xe4bc[485]),this[_0xe4bc[485]][_0xe4bc[926]]=_0xe4bc[3053],this[_0xe4bc[485]][_0xe4bc[124]][_0xe4bc[187]]=_0xe4bc[188],this[_0xe4bc[485]][_0xe4bc[124]][_0xe4bc[931]]=this[_0xe4bc[931]],document[_0xe4bc[112]][_0xe4bc[62]](this[_0xe4bc[485]]),mxEvent[_0xe4bc[169]](this[_0xe4bc[485]],_0xe4bc[751],mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){this[_0xe4bc[3054]]()})))};mxTooltipHandler[_0xe4bc[202]][_0xe4bc[787]]=function(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[862]](_0x5d2ax3,!1);this[_0xe4bc[3054]]()};mxTooltipHandler[_0xe4bc[202]][_0xe4bc[788]]=function(_0x5d2ax2,_0x5d2ax3){if(_0x5d2ax3[_0xe4bc[730]]()!=this[_0xe4bc[1217]]||_0x5d2ax3[_0xe4bc[732]]()!=this[_0xe4bc[1218]]){this[_0xe4bc[862]](_0x5d2ax3,!0),(this[_0xe4bc[2277]]()||_0x5d2ax3[_0xe4bc[248]]()!=this[_0xe4bc[724]]||_0x5d2ax3[_0xe4bc[728]]()!=this[_0xe4bc[252]]&&(!this[_0xe4bc[3055]]||null!=_0x5d2ax3[_0xe4bc[248]]()&&this[_0xe4bc[3055]]==(_0x5d2ax3[_0xe4bc[729]](_0x5d2ax3[_0xe4bc[248]]()[_0xe4bc[253]])||!_0x5d2ax3[_0xe4bc[729]](_0x5d2ax3[_0xe4bc[248]]()[_0xe4bc[963]]))))&&this[_0xe4bc[3054]]()};this[_0xe4bc[1217]]=_0x5d2ax3[_0xe4bc[730]]();this[_0xe4bc[1218]]=_0x5d2ax3[_0xe4bc[732]]()};mxTooltipHandler[_0xe4bc[202]][_0xe4bc[789]]=function(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[862]](_0x5d2ax3,!0);this[_0xe4bc[3054]]()};mxTooltipHandler[_0xe4bc[202]][_0xe4bc[3056]]=function(){null!=this[_0xe4bc[1123]]&&(window[_0xe4bc[2924]](this[_0xe4bc[1123]]),this[_0xe4bc[1123]]=null)};mxTooltipHandler[_0xe4bc[202]][_0xe4bc[862]]=function(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[3056]]();if(_0x5d2ax3&&this[_0xe4bc[994]]()&&null!=_0x5d2ax2[_0xe4bc[248]]()&&(null==this[_0xe4bc[485]]||_0xe4bc[188]==this[_0xe4bc[485]][_0xe4bc[124]][_0xe4bc[187]])){var _0x5d2ax4=_0x5d2ax2[_0xe4bc[248]](),_0x5d2ax5=_0x5d2ax2[_0xe4bc[728]](),_0x5d2ax9=_0x5d2ax2[_0xe4bc[730]](),_0x5d2axa=_0x5d2ax2[_0xe4bc[732]](),_0x5d2ax12=_0x5d2ax2[_0xe4bc[729]](_0x5d2ax4[_0xe4bc[253]])||_0x5d2ax2[_0xe4bc[729]](_0x5d2ax4[_0xe4bc[963]]);this[_0xe4bc[1123]]=window[_0xe4bc[261]](mxUtils[_0xe4bc[885]](this,function(){if(!this[_0xe4bc[1179]][_0xe4bc[2203]]()&&!this[_0xe4bc[1179]][_0xe4bc[2316]][_0xe4bc[1031]]()){var _0x5d2ax2=this[_0xe4bc[1179]][_0xe4bc[2595]](_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa);this[_0xe4bc[539]](_0x5d2ax2,_0x5d2ax9,_0x5d2axa);this[_0xe4bc[724]]=_0x5d2ax4;this[_0xe4bc[252]]=_0x5d2ax5;this[_0xe4bc[3055]]=_0x5d2ax12}}),this[_0xe4bc[1140]])}};mxTooltipHandler[_0xe4bc[202]][_0xe4bc[801]]=function(){this[_0xe4bc[3056]]();this[_0xe4bc[3054]]()};mxTooltipHandler[_0xe4bc[202]][_0xe4bc[3054]]=function(){null!=this[_0xe4bc[485]]&&(this[_0xe4bc[485]][_0xe4bc[124]][_0xe4bc[187]]=_0xe4bc[188])};mxTooltipHandler[_0xe4bc[202]][_0xe4bc[539]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){if(null!=_0x5d2ax2&&0<_0x5d2ax2[_0xe4bc[67]]){null==this[_0xe4bc[485]]&&this[_0xe4bc[176]]();var _0x5d2ax5=mxUtils[_0xe4bc[444]]();this[_0xe4bc[485]][_0xe4bc[124]][_0xe4bc[361]]=_0x5d2ax3+_0x5d2ax5[_0xe4bc[235]]+_0xe4bc[168];this[_0xe4bc[485]][_0xe4bc[124]][_0xe4bc[125]]=_0x5d2ax4+mxConstants[_0xe4bc[560]]+_0x5d2ax5[_0xe4bc[236]]+_0xe4bc[168];mxUtils[_0xe4bc[1331]](_0x5d2ax2)?(this[_0xe4bc[485]][_0xe4bc[339]]=_0xe4bc[110],this[_0xe4bc[485]][_0xe4bc[62]](_0x5d2ax2)):this[_0xe4bc[485]][_0xe4bc[339]]=_0x5d2ax2[_0xe4bc[230]](/\n/g,_0xe4bc[545]);this[_0xe4bc[485]][_0xe4bc[124]][_0xe4bc[187]]=_0xe4bc[110];mxUtils[_0xe4bc[933]](this[_0xe4bc[485]])}};mxTooltipHandler[_0xe4bc[202]][_0xe4bc[515]]=function(){this[_0xe4bc[1179]][_0xe4bc[1148]](this);mxEvent[_0xe4bc[762]](this[_0xe4bc[485]]);null!=this[_0xe4bc[485]]&&null!=this[_0xe4bc[485]][_0xe4bc[265]]&&this[_0xe4bc[485]][_0xe4bc[265]][_0xe4bc[266]](this[_0xe4bc[485]]);this[_0xe4bc[485]]=null};function mxCellTracker(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){mxCellMarker[_0xe4bc[239]](this,_0x5d2ax2,_0x5d2ax3);this[_0xe4bc[1179]][_0xe4bc[1133]](this);null!=_0x5d2ax4&&(this[_0xe4bc[736]]=_0x5d2ax4);mxClient[_0xe4bc[80]]&&mxEvent[_0xe4bc[169]](window,_0xe4bc[2428],mxUtils[_0xe4bc[885]](this,function(){this[_0xe4bc[515]]()}))}mxUtils[_0xe4bc[1284]](mxCellTracker,mxCellMarker);mxCellTracker[_0xe4bc[202]][_0xe4bc[787]]=function(_0x5d2ax2,_0x5d2ax3){};mxCellTracker[_0xe4bc[202]][_0xe4bc[788]]=function(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[994]]()&&this[_0xe4bc[2871]](_0x5d2ax3)};mxCellTracker[_0xe4bc[202]][_0xe4bc[789]]=function(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[862]]()};mxCellTracker[_0xe4bc[202]][_0xe4bc[515]]=function(){this[_0xe4bc[2717]]||(this[_0xe4bc[2717]]= !0,this[_0xe4bc[1179]][_0xe4bc[1148]](this),mxCellMarker[_0xe4bc[202]][_0xe4bc[515]][_0xe4bc[183]](this))};function mxCellHighlight(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){null!=_0x5d2ax2&&(this[_0xe4bc[1179]]=_0x5d2ax2,this[_0xe4bc[2943]]=null!=_0x5d2ax3?_0x5d2ax3:mxConstants[_0xe4bc[2854]],this[_0xe4bc[610]]=null!=_0x5d2ax4?_0x5d2ax4:mxConstants[_0xe4bc[3057]],this[_0xe4bc[648]]=null!=_0x5d2ax5?_0x5d2ax5:!1,this[_0xe4bc[3058]]=mxUtils[_0xe4bc[885]](this,function(){this[_0xe4bc[2950]]()}),this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[169]](mxEvent.SCALE,this[_0xe4bc[3058]]),this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[169]](mxEvent.TRANSLATE,this[_0xe4bc[3058]]),this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[169]](mxEvent.SCALE_AND_TRANSLATE,this[_0xe4bc[3058]]),this[_0xe4bc[1179]][_0xe4bc[502]]()[_0xe4bc[169]](mxEvent.CHANGE,this[_0xe4bc[3058]]),this[_0xe4bc[2877]]=mxUtils[_0xe4bc[885]](this,function(){this[_0xe4bc[801]]()}),this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[169]](mxEvent.DOWN,this[_0xe4bc[2877]]),this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[169]](mxEvent.UP,this[_0xe4bc[2877]]))}mxCellHighlight[_0xe4bc[202]][_0xe4bc[3059]]= !1;mxCellHighlight[_0xe4bc[202]][_0xe4bc[1179]]= !0;mxCellHighlight[_0xe4bc[202]][_0xe4bc[724]]=null;mxCellHighlight[_0xe4bc[202]][_0xe4bc[657]]=2;mxCellHighlight[_0xe4bc[202]][_0xe4bc[2877]]=null;mxCellHighlight[_0xe4bc[202]][_0xe4bc[2828]]=function(_0x5d2ax2){this[_0xe4bc[2943]]=_0x5d2ax2;null!=this[_0xe4bc[253]]&&(this[_0xe4bc[253]][_0xe4bc[1336]]=_0x5d2ax2)};mxCellHighlight[_0xe4bc[202]][_0xe4bc[3060]]=function(){this[_0xe4bc[253]]=this[_0xe4bc[2156]]();this[_0xe4bc[2950]]();!this[_0xe4bc[3059]]&&this[_0xe4bc[253]][_0xe4bc[252]][_0xe4bc[265]][_0xe4bc[285]]!=this[_0xe4bc[253]][_0xe4bc[252]]&&this[_0xe4bc[253]][_0xe4bc[252]][_0xe4bc[265]][_0xe4bc[950]](this[_0xe4bc[253]][_0xe4bc[252]],this[_0xe4bc[253]][_0xe4bc[252]][_0xe4bc[265]][_0xe4bc[285]])};mxCellHighlight[_0xe4bc[202]][_0xe4bc[2156]]=function(){var _0x5d2ax2=null,_0x5d2ax2=this[_0xe4bc[1179]][_0xe4bc[251]][_0xe4bc[250]](this[_0xe4bc[724]][_0xe4bc[246]])? new mxPolyline(this[_0xe4bc[724]][_0xe4bc[439]],this[_0xe4bc[2943]],this[_0xe4bc[610]]): new mxRectangleShape( new mxRectangle,null,this[_0xe4bc[2943]],this[_0xe4bc[610]]);_0x5d2ax2[_0xe4bc[507]]=this[_0xe4bc[1179]][_0xe4bc[507]]!=mxConstants[_0xe4bc[508]]?mxConstants[_0xe4bc[1523]]:mxConstants[_0xe4bc[508]];_0x5d2ax2[_0xe4bc[176]](this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[1524]]());mxEvent[_0xe4bc[2733]](_0x5d2ax2[_0xe4bc[252]],this[_0xe4bc[1179]],this[_0xe4bc[724]]);_0x5d2ax2[_0xe4bc[1564]]=0;_0x5d2ax2[_0xe4bc[1229]]= !1;_0x5d2ax2[_0xe4bc[1522]]=this[_0xe4bc[648]];return _0x5d2ax2};mxCellHighlight[_0xe4bc[202]][_0xe4bc[2950]]=function(){if(null!=this[_0xe4bc[724]]&&null!=this[_0xe4bc[253]]){var _0x5d2ax2=0;this[_0xe4bc[1179]][_0xe4bc[251]][_0xe4bc[250]](this[_0xe4bc[724]][_0xe4bc[246]])?this[_0xe4bc[253]][_0xe4bc[1525]]=this[_0xe4bc[724]][_0xe4bc[439]]:(this[_0xe4bc[253]][_0xe4bc[1562]]= new mxRectangle(this[_0xe4bc[724]][_0xe4bc[235]]-this[_0xe4bc[657]],this[_0xe4bc[724]][_0xe4bc[236]]-this[_0xe4bc[657]],this[_0xe4bc[724]][_0xe4bc[117]]+2*this[_0xe4bc[657]],this[_0xe4bc[724]][_0xe4bc[119]]+2*this[_0xe4bc[657]]),_0x5d2ax2=Number(this[_0xe4bc[724]][_0xe4bc[124]][mxConstants[_0xe4bc[2278]]]||_0xe4bc[468]));null!=this[_0xe4bc[724]][_0xe4bc[253]]&&this[_0xe4bc[253]][_0xe4bc[1609]](this[_0xe4bc[724]][_0xe4bc[253]][_0xe4bc[1610]]());0!=_0x5d2ax2&&(this[_0xe4bc[253]][_0xe4bc[603]]=_0x5d2ax2);this[_0xe4bc[253]][_0xe4bc[258]]()}};mxCellHighlight[_0xe4bc[202]][_0xe4bc[801]]=function(){this[_0xe4bc[1016]](null)};mxCellHighlight[_0xe4bc[202]][_0xe4bc[1016]]=function(_0x5d2ax2){this[_0xe4bc[724]]!=_0x5d2ax2&&(null!=this[_0xe4bc[253]]&&(this[_0xe4bc[253]][_0xe4bc[515]](),this[_0xe4bc[253]]=null),this[_0xe4bc[724]]=_0x5d2ax2,null!=this[_0xe4bc[724]]&&this[_0xe4bc[3060]]())};mxCellHighlight[_0xe4bc[202]][_0xe4bc[515]]=function(){this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[745]](this[_0xe4bc[3058]]);this[_0xe4bc[1179]][_0xe4bc[502]]()[_0xe4bc[745]](this[_0xe4bc[3058]]);this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[745]](this[_0xe4bc[2877]]);this[_0xe4bc[1179]][_0xe4bc[502]]()[_0xe4bc[745]](this[_0xe4bc[2877]]);null!=this[_0xe4bc[253]]&&(this[_0xe4bc[253]][_0xe4bc[515]](),this[_0xe4bc[253]]=null)};function mxDefaultKeyHandler(_0x5d2ax2){if(null!=_0x5d2ax2){this[_0xe4bc[3061]]=_0x5d2ax2;this[_0xe4bc[2458]]= new mxKeyHandler(_0x5d2ax2[_0xe4bc[1179]]);var _0x5d2ax3=this[_0xe4bc[2458]][_0xe4bc[859]];this[_0xe4bc[2458]][_0xe4bc[859]]=function(_0x5d2ax4){_0x5d2ax3[_0xe4bc[183]](this,arguments);_0x5d2ax2[_0xe4bc[3062]]();_0x5d2ax2[_0xe4bc[746]]( new mxEventObject(mxEvent.ESCAPE,_0xe4bc[763],_0x5d2ax4))}}}mxDefaultKeyHandler[_0xe4bc[202]][_0xe4bc[3061]]=null;mxDefaultKeyHandler[_0xe4bc[202]][_0xe4bc[2458]]=null;mxDefaultKeyHandler[_0xe4bc[202]][_0xe4bc[3063]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){var _0x5d2ax5=mxUtils[_0xe4bc[885]](this,function(){this[_0xe4bc[3061]][_0xe4bc[350]](_0x5d2ax3)});_0x5d2ax4?this[_0xe4bc[2458]][_0xe4bc[3047]](_0x5d2ax2,_0x5d2ax5):this[_0xe4bc[2458]][_0xe4bc[3045]](_0x5d2ax2,_0x5d2ax5)};mxDefaultKeyHandler[_0xe4bc[202]][_0xe4bc[515]]=function(){this[_0xe4bc[2458]][_0xe4bc[515]]();this[_0xe4bc[2458]]=null};function mxDefaultPopupMenu(_0x5d2ax2){this[_0xe4bc[3064]]=_0x5d2ax2}mxDefaultPopupMenu[_0xe4bc[202]][_0xe4bc[88]]=null;mxDefaultPopupMenu[_0xe4bc[202]][_0xe4bc[3064]]=null;mxDefaultPopupMenu[_0xe4bc[202]][_0xe4bc[3065]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){if(null!=this[_0xe4bc[3064]]){var _0x5d2ax9=this[_0xe4bc[3066]](_0x5d2ax2,_0x5d2ax4,_0x5d2ax5);this[_0xe4bc[3067]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,this[_0xe4bc[3064]][_0xe4bc[285]],null)}};mxDefaultPopupMenu[_0xe4bc[202]][_0xe4bc[3067]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa,_0x5d2ax12){for(var _0x5d2ax13=!1;null!=_0x5d2axa;){if(_0xe4bc[99]==_0x5d2axa[_0xe4bc[301]]){var _0x5d2ax14=_0x5d2axa[_0xe4bc[284]](_0xe4bc[3068]);if(null==_0x5d2ax14||_0x5d2ax9[_0x5d2ax14]){var _0x5d2ax14=_0x5d2axa[_0xe4bc[284]](_0xe4bc[3069]),_0x5d2ax14=mxResources[_0xe4bc[203]](_0x5d2ax14)||_0x5d2ax14,_0x5d2ax15=mxUtils[_0xe4bc[1545]](mxUtils[_0xe4bc[329]](_0x5d2axa)),_0x5d2ax16=_0x5d2axa[_0xe4bc[284]](_0xe4bc[892]),_0x5d2ax17=_0x5d2axa[_0xe4bc[284]](_0xe4bc[2916]),_0x5d2ax18=_0x5d2axa[_0xe4bc[284]](_0xe4bc[3070]);_0x5d2ax13&&(_0x5d2ax3[_0xe4bc[1051]](_0x5d2ax12),_0x5d2ax13= !1);null!=_0x5d2ax17&&this[_0xe4bc[88]]&&(_0x5d2ax17=this[_0xe4bc[88]]+_0x5d2ax17);_0x5d2ax14=this[_0xe4bc[3071]](_0x5d2ax3,_0x5d2ax2,_0x5d2ax14,_0x5d2ax17,_0x5d2ax15,_0x5d2ax16,_0x5d2ax4,_0x5d2ax12,_0x5d2ax18);this[_0xe4bc[3067]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa[_0xe4bc[285]],_0x5d2ax14)}}else {_0xe4bc[3072]==_0x5d2axa[_0xe4bc[301]]&&(_0x5d2ax13= !0)};_0x5d2axa=_0x5d2axa[_0xe4bc[287]]}};mxDefaultPopupMenu[_0xe4bc[202]][_0xe4bc[3071]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa,_0x5d2ax12,_0x5d2ax13,_0x5d2ax14){return _0x5d2ax2[_0xe4bc[1025]](_0x5d2ax4,_0x5d2ax5,function(_0x5d2ax2){_0xe4bc[279]== typeof _0x5d2ax9&&_0x5d2ax9[_0xe4bc[239]](_0x5d2ax3,_0x5d2ax3,_0x5d2ax12,_0x5d2ax2);null!=_0x5d2axa&&_0x5d2ax3[_0xe4bc[350]](_0x5d2axa,_0x5d2ax12,_0x5d2ax2)},_0x5d2ax13,_0x5d2ax14)};mxDefaultPopupMenu[_0xe4bc[202]][_0xe4bc[3066]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){var _0x5d2ax5=_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[502]](),_0x5d2ax9=_0x5d2ax5[_0xe4bc[262]](_0x5d2ax3),_0x5d2axa=[];_0x5d2axa[_0xe4bc[3073]]=null==_0x5d2ax3;_0x5d2axa[_0xe4bc[3074]]=1<_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[2694]]();_0x5d2axa[_0xe4bc[3075]]=_0x5d2ax5[_0xe4bc[501]]()!=_0x5d2ax5[_0xe4bc[1197]](_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[902]]());_0x5d2axa[_0xe4bc[246]]=null!=_0x5d2ax3;_0x5d2ax5=null!=_0x5d2ax3&&1==_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[2694]]();_0x5d2axa[_0xe4bc[3076]]=_0x5d2ax5&&0<_0x5d2ax9;_0x5d2axa[_0xe4bc[3077]]=_0x5d2ax5&&_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[2516]](_0x5d2ax3,!1);_0x5d2axa[_0xe4bc[3078]]=_0x5d2ax5&&_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[2516]](_0x5d2ax3,!0);_0x5d2axa[_0xe4bc[3079]]=_0x5d2ax5&&_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[2553]](_0x5d2ax3);_0x5d2axa[_0xe4bc[3080]]=_0x5d2axa[_0xe4bc[3079]]&&0==_0x5d2ax9;_0x5d2axa[_0xe4bc[687]]=_0x5d2ax5&&_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[1730]](_0x5d2ax3);_0x5d2ax9=this[_0xe4bc[3064]][_0xe4bc[64]](_0xe4bc[3081]);for(_0x5d2ax5=0;_0x5d2ax5<_0x5d2ax9[_0xe4bc[67]];_0x5d2ax5++){var _0x5d2ax12=mxUtils[_0xe4bc[1545]](mxUtils[_0xe4bc[329]](_0x5d2ax9[_0x5d2ax5])),_0x5d2ax13=_0x5d2ax9[_0x5d2ax5][_0xe4bc[284]](_0xe4bc[298]);null!=_0x5d2ax13&&_0xe4bc[279]== typeof _0x5d2ax12&&(_0x5d2axa[_0x5d2ax13]=_0x5d2ax12(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4))};return _0x5d2axa};function mxDefaultToolbar(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[3061]]=_0x5d2ax3;null!=_0x5d2ax2&&null!=_0x5d2ax3&&this[_0xe4bc[176]](_0x5d2ax2)}mxDefaultToolbar[_0xe4bc[202]][_0xe4bc[3061]]=null;mxDefaultToolbar[_0xe4bc[202]][_0xe4bc[3082]]=null;mxDefaultToolbar[_0xe4bc[202]][_0xe4bc[2877]]=null;mxDefaultToolbar[_0xe4bc[202]][_0xe4bc[657]]=4;mxDefaultToolbar[_0xe4bc[202]][_0xe4bc[2804]]= !1;mxDefaultToolbar[_0xe4bc[202]][_0xe4bc[176]]=function(_0x5d2ax2){null!=_0x5d2ax2&&(this[_0xe4bc[3082]]= new mxToolbar(_0x5d2ax2),this[_0xe4bc[3082]][_0xe4bc[169]](mxEvent.SELECT,mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2,_0x5d2ax4){var _0x5d2ax5=_0x5d2ax4[_0xe4bc[720]](_0xe4bc[279]);this[_0xe4bc[3061]][_0xe4bc[3083]]=null!=_0x5d2ax5?mxUtils[_0xe4bc[885]](this,function(){_0x5d2ax5[_0xe4bc[183]](this,arguments);this[_0xe4bc[3082]][_0xe4bc[1050]]()}):null})),this[_0xe4bc[2877]]=mxUtils[_0xe4bc[885]](this,function(){null!=this[_0xe4bc[3082]]&&this[_0xe4bc[3082]][_0xe4bc[1050]](!0)}),this[_0xe4bc[3061]][_0xe4bc[1179]][_0xe4bc[169]](mxEvent.DOUBLE_CLICK,this[_0xe4bc[2877]]),this[_0xe4bc[3061]][_0xe4bc[169]](mxEvent.ESCAPE,this[_0xe4bc[2877]]))};mxDefaultToolbar[_0xe4bc[202]][_0xe4bc[1025]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){var _0x5d2ax9=mxUtils[_0xe4bc[885]](this,function(){null!=_0x5d2ax4&&0<_0x5d2ax4[_0xe4bc[67]]&&this[_0xe4bc[3061]][_0xe4bc[350]](_0x5d2ax4)});return this[_0xe4bc[3082]][_0xe4bc[1025]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax9,_0x5d2ax5)};mxDefaultToolbar[_0xe4bc[202]][_0xe4bc[1051]]=function(_0x5d2ax2){_0x5d2ax2=_0x5d2ax2||mxClient[_0xe4bc[88]]+_0xe4bc[3084];this[_0xe4bc[3082]][_0xe4bc[1051]](_0x5d2ax2)};mxDefaultToolbar[_0xe4bc[202]][_0xe4bc[970]]=function(){return this[_0xe4bc[3082]][_0xe4bc[970]]()};mxDefaultToolbar[_0xe4bc[202]][_0xe4bc[1038]]=function(_0x5d2ax2){return this[_0xe4bc[3082]][_0xe4bc[1038]](_0x5d2ax2)};mxDefaultToolbar[_0xe4bc[202]][_0xe4bc[3085]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){var _0x5d2ax5=mxUtils[_0xe4bc[885]](this,function(){this[_0xe4bc[3061]][_0xe4bc[350]](_0x5d2ax4)});this[_0xe4bc[972]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax5)};mxDefaultToolbar[_0xe4bc[202]][_0xe4bc[972]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){return this[_0xe4bc[3082]][_0xe4bc[972]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4)};mxDefaultToolbar[_0xe4bc[202]][_0xe4bc[1048]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){var _0x5d2axa=mxUtils[_0xe4bc[885]](this,function(){this[_0xe4bc[3061]][_0xe4bc[3086]](_0x5d2ax4);null!=_0x5d2ax9&&_0x5d2ax9(this[_0xe4bc[3061]])});return this[_0xe4bc[3082]][_0xe4bc[1042]](_0x5d2ax2,_0x5d2ax3,_0x5d2axa,_0x5d2ax5)};mxDefaultToolbar[_0xe4bc[202]][_0xe4bc[3087]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9,_0x5d2axa){var _0x5d2ax12=function(){return _0xe4bc[279]== typeof _0x5d2ax4?_0x5d2ax4():null!=_0x5d2ax4?_0x5d2ax4[_0xe4bc[238]]():null},_0x5d2ax13=mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2,_0x5d2ax3){_0xe4bc[279]== typeof _0x5d2ax9?_0x5d2ax9(this[_0xe4bc[3061]],_0x5d2ax12(),_0x5d2ax2,_0x5d2ax3):this[_0xe4bc[1008]](_0x5d2ax12(),_0x5d2ax2,_0x5d2ax3);this[_0xe4bc[3082]][_0xe4bc[1050]]();mxEvent[_0xe4bc[722]](_0x5d2ax2)});_0x5d2ax2=this[_0xe4bc[3082]][_0xe4bc[1048]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax13,_0x5d2ax5,null,_0x5d2axa);this[_0xe4bc[3088]](_0x5d2ax2,function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){_0x5d2ax13(_0x5d2ax3,_0x5d2ax4)});return _0x5d2ax2};mxDefaultToolbar[_0xe4bc[202]][_0xe4bc[1008]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){var _0x5d2ax5=this[_0xe4bc[3061]][_0xe4bc[1179]],_0x5d2ax9=_0x5d2ax5[_0xe4bc[502]]();if(null==_0x5d2ax4||_0x5d2ax9[_0xe4bc[250]](_0x5d2ax4)||!this[_0xe4bc[2804]]||!_0x5d2ax5[_0xe4bc[2565]](_0x5d2ax4)){for(;null!=_0x5d2ax4&&!_0x5d2ax5[_0xe4bc[2685]](_0x5d2ax4,[_0x5d2ax2],_0x5d2ax3);){_0x5d2ax4=_0x5d2ax9[_0xe4bc[1197]](_0x5d2ax4)};this[_0xe4bc[1937]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4)}else {this[_0xe4bc[807]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4)}};mxDefaultToolbar[_0xe4bc[202]][_0xe4bc[1937]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){var _0x5d2ax5=this[_0xe4bc[3061]][_0xe4bc[1179]];if(_0x5d2ax5[_0xe4bc[2621]](_0x5d2ax2)){var _0x5d2ax9=mxEvent[_0xe4bc[731]](_0x5d2ax3),_0x5d2axa=mxEvent[_0xe4bc[733]](_0x5d2ax3),_0x5d2ax9=mxUtils[_0xe4bc[2196]](_0x5d2ax5[_0xe4bc[526]],_0x5d2ax9,_0x5d2axa);return _0x5d2ax5[_0xe4bc[2655]]()&&_0x5d2ax5[_0xe4bc[2686]](_0x5d2ax4,[_0x5d2ax2],_0x5d2ax3)?_0x5d2ax5[_0xe4bc[853]](_0x5d2ax4,[_0x5d2ax2],null,_0x5d2ax9[_0xe4bc[235]],_0x5d2ax9[_0xe4bc[236]]):this[_0xe4bc[3061]][_0xe4bc[817]](_0x5d2ax4,_0x5d2ax2,_0x5d2ax9[_0xe4bc[235]],_0x5d2ax9[_0xe4bc[236]])};return null};mxDefaultToolbar[_0xe4bc[202]][_0xe4bc[807]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){_0x5d2ax3=this[_0xe4bc[3061]][_0xe4bc[1179]];var _0x5d2ax5=_0x5d2ax3[_0xe4bc[502]]();if(null!=_0x5d2ax4&&_0x5d2ax3[_0xe4bc[2565]](_0x5d2ax2)&&_0x5d2ax3[_0xe4bc[2581]](null,_0x5d2ax4,_0x5d2ax2)){var _0x5d2ax9=null;_0x5d2ax5[_0xe4bc[473]]();try{var _0x5d2axa=_0x5d2ax5[_0xe4bc[1721]](_0x5d2ax4),_0x5d2ax12=_0x5d2ax5[_0xe4bc[1721]](_0x5d2ax2)[_0xe4bc[238]]();_0x5d2ax12[_0xe4bc[235]]=_0x5d2axa[_0xe4bc[235]]+(_0x5d2axa[_0xe4bc[117]]-_0x5d2ax12[_0xe4bc[117]])/2;_0x5d2ax12[_0xe4bc[236]]=_0x5d2axa[_0xe4bc[236]]+(_0x5d2axa[_0xe4bc[119]]-_0x5d2ax12[_0xe4bc[119]])/2;var _0x5d2ax13=this[_0xe4bc[657]]*_0x5d2ax3[_0xe4bc[1020]],_0x5d2ax14=20*_0x5d2ax5[_0xe4bc[1962]](_0x5d2ax4,!0);this[_0xe4bc[3061]][_0xe4bc[3089]]?_0x5d2ax12[_0xe4bc[235]]+=(_0x5d2ax12[_0xe4bc[117]]+_0x5d2axa[_0xe4bc[117]])/2+_0x5d2ax13+_0x5d2ax14:_0x5d2ax12[_0xe4bc[236]]+=(_0x5d2ax12[_0xe4bc[119]]+_0x5d2axa[_0xe4bc[119]])/2+_0x5d2ax13+_0x5d2ax14;_0x5d2ax2[_0xe4bc[1724]](_0x5d2ax12);var _0x5d2ax15=_0x5d2ax5[_0xe4bc[1197]](_0x5d2ax4);_0x5d2ax3[_0xe4bc[2103]](_0x5d2ax2,_0x5d2ax15);_0x5d2ax3[_0xe4bc[2509]](_0x5d2ax2);_0x5d2ax9=this[_0xe4bc[3061]][_0xe4bc[2503]](_0x5d2ax4,_0x5d2ax2);if(null==_0x5d2ax5[_0xe4bc[1721]](_0x5d2ax9)){var _0x5d2ax16= new mxGeometry;_0x5d2ax16[_0xe4bc[1500]]= !0;_0x5d2ax5[_0xe4bc[1724]](_0x5d2ax9,_0x5d2ax16)};_0x5d2ax3[_0xe4bc[2504]](_0x5d2ax9,_0x5d2ax15,_0x5d2ax4,_0x5d2ax2)}finally{_0x5d2ax5[_0xe4bc[476]]()};_0x5d2ax3[_0xe4bc[904]]([_0x5d2ax2,_0x5d2ax9]);_0x5d2ax3[_0xe4bc[2564]](_0x5d2ax2)}};mxDefaultToolbar[_0xe4bc[202]][_0xe4bc[3088]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=document[_0xe4bc[55]](_0xe4bc[466]);_0x5d2ax4[_0xe4bc[57]](_0xe4bc[390],_0x5d2ax2[_0xe4bc[284]](_0xe4bc[390]));var _0x5d2ax5=mxUtils[_0xe4bc[885]](this,function(_0x5d2ax9){_0x5d2ax4[_0xe4bc[124]][_0xe4bc[117]]=2*_0x5d2ax2[_0xe4bc[359]]+_0xe4bc[168];_0x5d2ax4[_0xe4bc[124]][_0xe4bc[119]]=2*_0x5d2ax2[_0xe4bc[167]]+_0xe4bc[168];mxUtils[_0xe4bc[3090]](_0x5d2ax2,this[_0xe4bc[3061]][_0xe4bc[1179]],_0x5d2ax3,_0x5d2ax4);mxEvent[_0xe4bc[745]](_0x5d2ax4,_0xe4bc[219],_0x5d2ax5)});mxClient[_0xe4bc[80]]?_0x5d2ax5():mxEvent[_0xe4bc[169]](_0x5d2ax4,_0xe4bc[219],_0x5d2ax5)};mxDefaultToolbar[_0xe4bc[202]][_0xe4bc[515]]=function(){null!=this[_0xe4bc[2877]]&&(this[_0xe4bc[3061]][_0xe4bc[1179]][_0xe4bc[745]](_0xe4bc[760],this[_0xe4bc[2877]]),this[_0xe4bc[3061]][_0xe4bc[745]](_0xe4bc[859],this[_0xe4bc[2877]]),this[_0xe4bc[2877]]=null);null!=this[_0xe4bc[3082]]&&(this[_0xe4bc[3082]][_0xe4bc[515]](),this[_0xe4bc[3082]]=null)};function mxEditor(_0x5d2ax2){this[_0xe4bc[3091]]=[];this[_0xe4bc[3092]]();if(null!=document[_0xe4bc[112]]){this[_0xe4bc[3093]]=[];this[_0xe4bc[3094]]= new mxDefaultPopupMenu;this[_0xe4bc[3095]]= new mxUndoManager;this[_0xe4bc[1179]]=this[_0xe4bc[3096]]();this[_0xe4bc[3082]]=this[_0xe4bc[3097]]();this[_0xe4bc[3098]]= new mxDefaultKeyHandler(this);this[_0xe4bc[3099]](_0x5d2ax2);this[_0xe4bc[1179]][_0xe4bc[2180]]=this[_0xe4bc[3100]];!mxClient[_0xe4bc[3101]]&&null!=this[_0xe4bc[1056]]&&(this[_0xe4bc[812]]=this[_0xe4bc[3102]]());if(null!=this[_0xe4bc[1987]]){this[_0xe4bc[1987]]()};mxClient[_0xe4bc[80]]&&mxEvent[_0xe4bc[169]](window,_0xe4bc[2428],mxUtils[_0xe4bc[885]](this,function(){this[_0xe4bc[515]]()}))}}mxLoadResources&&mxResources[_0xe4bc[99]](mxClient[_0xe4bc[86]]+_0xe4bc[3103]);mxEditor[_0xe4bc[202]]= new mxEventSource;mxEditor[_0xe4bc[202]][_0xe4bc[196]]=mxEditor;mxEditor[_0xe4bc[202]][_0xe4bc[3104]]=_0xe4bc[130]!=mxClient[_0xe4bc[90]]?_0xe4bc[3105]:_0xe4bc[110];mxEditor[_0xe4bc[202]][_0xe4bc[3106]]=_0xe4bc[130]!=mxClient[_0xe4bc[90]]?_0xe4bc[3107]:_0xe4bc[110];mxEditor[_0xe4bc[202]][_0xe4bc[3108]]=_0xe4bc[130]!=mxClient[_0xe4bc[90]]?_0xe4bc[3109]:_0xe4bc[110];mxEditor[_0xe4bc[202]][_0xe4bc[3110]]=_0xe4bc[130]!=mxClient[_0xe4bc[90]]?_0xe4bc[716]:_0xe4bc[110];mxEditor[_0xe4bc[202]][_0xe4bc[3111]]=_0xe4bc[130]!=mxClient[_0xe4bc[90]]?_0xe4bc[3112]:_0xe4bc[110];mxEditor[_0xe4bc[202]][_0xe4bc[3113]]=_0xe4bc[130]!=mxClient[_0xe4bc[90]]?_0xe4bc[2719]:_0xe4bc[110];mxEditor[_0xe4bc[202]][_0xe4bc[3114]]=_0xe4bc[130]!=mxClient[_0xe4bc[90]]?_0xe4bc[2136]:_0xe4bc[110];mxEditor[_0xe4bc[202]][_0xe4bc[2136]]=null;mxEditor[_0xe4bc[202]][_0xe4bc[1179]]=null;mxEditor[_0xe4bc[202]][_0xe4bc[2720]]=null;mxEditor[_0xe4bc[202]][_0xe4bc[3082]]=null;mxEditor[_0xe4bc[202]][_0xe4bc[812]]=null;mxEditor[_0xe4bc[202]][_0xe4bc[879]]=null;mxEditor[_0xe4bc[202]][_0xe4bc[3094]]=null;mxEditor[_0xe4bc[202]][_0xe4bc[3095]]=null;mxEditor[_0xe4bc[202]][_0xe4bc[3098]]=null;mxEditor[_0xe4bc[202]][_0xe4bc[3091]]=null;mxEditor[_0xe4bc[202]][_0xe4bc[3115]]=_0xe4bc[1061];mxEditor[_0xe4bc[202]][_0xe4bc[3116]]= !1;mxEditor[_0xe4bc[202]][_0xe4bc[1157]]= !0;mxEditor[_0xe4bc[202]][_0xe4bc[3083]]=null;mxEditor[_0xe4bc[202]][_0xe4bc[3117]]= !1;mxEditor[_0xe4bc[202]][_0xe4bc[3118]]=null;mxEditor[_0xe4bc[202]][_0xe4bc[2075]]=null;mxEditor[_0xe4bc[202]][_0xe4bc[3119]]=null;mxEditor[_0xe4bc[202]][_0xe4bc[3120]]=null;mxEditor[_0xe4bc[202]][_0xe4bc[3121]]=null;mxEditor[_0xe4bc[202]][_0xe4bc[3122]]=null;mxEditor[_0xe4bc[202]][_0xe4bc[1069]]=_0xe4bc[336];mxEditor[_0xe4bc[202]][_0xe4bc[3123]]=_0xe4bc[338];mxEditor[_0xe4bc[202]][_0xe4bc[1070]]= !0;mxEditor[_0xe4bc[202]][_0xe4bc[3124]]=null;mxEditor[_0xe4bc[202]][_0xe4bc[3125]]=null;mxEditor[_0xe4bc[202]][_0xe4bc[1056]]=null;mxEditor[_0xe4bc[202]][_0xe4bc[1058]]=null;mxEditor[_0xe4bc[202]][_0xe4bc[1057]]=null;mxEditor[_0xe4bc[202]][_0xe4bc[3089]]= !1;mxEditor[_0xe4bc[202]][_0xe4bc[3126]]= !1;mxEditor[_0xe4bc[202]][_0xe4bc[3127]]=0;mxEditor[_0xe4bc[202]][_0xe4bc[3128]]= !1;mxEditor[_0xe4bc[202]][_0xe4bc[3129]]= !1;mxEditor[_0xe4bc[202]][_0xe4bc[3093]]=null;mxEditor[_0xe4bc[202]][_0xe4bc[3130]]=0;mxEditor[_0xe4bc[202]][_0xe4bc[3100]]=_0xe4bc[604];mxEditor[_0xe4bc[202]][_0xe4bc[3112]]=null;mxEditor[_0xe4bc[202]][_0xe4bc[3131]]=null;mxEditor[_0xe4bc[202]][_0xe4bc[3132]]=20;mxEditor[_0xe4bc[202]][_0xe4bc[2719]]=null;mxEditor[_0xe4bc[202]][_0xe4bc[3133]]=null;mxEditor[_0xe4bc[202]][_0xe4bc[3134]]=null;mxEditor[_0xe4bc[202]][_0xe4bc[3135]]=300;mxEditor[_0xe4bc[202]][_0xe4bc[3136]]=260;mxEditor[_0xe4bc[202]][_0xe4bc[3137]]=240;mxEditor[_0xe4bc[202]][_0xe4bc[3138]]=null;mxEditor[_0xe4bc[202]][_0xe4bc[3139]]= !1;mxEditor[_0xe4bc[202]][_0xe4bc[3140]]= !1;mxEditor[_0xe4bc[202]][_0xe4bc[2113]]= !1;mxEditor[_0xe4bc[202]][_0xe4bc[2133]]=function(){return this[_0xe4bc[2113]]};mxEditor[_0xe4bc[202]][_0xe4bc[2128]]=function(_0x5d2ax2){this[_0xe4bc[2113]]=_0x5d2ax2};mxEditor[_0xe4bc[202]][_0xe4bc[3092]]=function(){this[_0xe4bc[3071]](_0xe4bc[815],function(_0x5d2ax2){_0x5d2ax2[_0xe4bc[815]]()});this[_0xe4bc[3071]](_0xe4bc[540],function(_0x5d2ax2){( new mxPrintPreview(_0x5d2ax2[_0xe4bc[1179]],1))[_0xe4bc[392]]()});this[_0xe4bc[3071]](_0xe4bc[539],function(_0x5d2ax2){mxUtils[_0xe4bc[539]](_0x5d2ax2[_0xe4bc[1179]],null,10,10)});this[_0xe4bc[3071]](_0xe4bc[3141],function(_0x5d2ax2){var _0x5d2ax3=_0x5d2ax2[_0xe4bc[3142]]();if(null==_0x5d2ax3||mxClient[_0xe4bc[3101]]){_0x5d2ax2[_0xe4bc[350]](_0xe4bc[539])}else {var _0x5d2ax4=mxUtils[_0xe4bc[3143]](_0x5d2ax2[_0xe4bc[1179]],1),_0x5d2ax4=mxUtils[_0xe4bc[875]](_0x5d2ax4,_0xe4bc[192]);mxUtils[_0xe4bc[894]](_0x5d2ax3,_0x5d2ax2[_0xe4bc[3123]]+_0xe4bc[226]+encodeURIComponent(_0x5d2ax4),document,_0xe4bc[3144])}});this[_0xe4bc[3071]](_0xe4bc[802],function(_0x5d2ax2){_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[802]]()});this[_0xe4bc[3071]](_0xe4bc[3145],function(_0x5d2ax2){_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[994]]()&&mxClipboard[_0xe4bc[3145]](_0x5d2ax2[_0xe4bc[1179]])});this[_0xe4bc[3071]](_0xe4bc[149],function(_0x5d2ax2){_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[994]]()&&mxClipboard[_0xe4bc[149]](_0x5d2ax2[_0xe4bc[1179]])});this[_0xe4bc[3071]](_0xe4bc[3146],function(_0x5d2ax2){_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[994]]()&&mxClipboard[_0xe4bc[3146]](_0x5d2ax2[_0xe4bc[1179]])});this[_0xe4bc[3071]](_0xe4bc[3147],function(_0x5d2ax2){_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[994]]()&&_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[842]]()});this[_0xe4bc[3071]](_0xe4bc[1504],function(_0x5d2ax2){_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[994]]()&&_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[2450]](_0x5d2ax2[_0xe4bc[844]]())});this[_0xe4bc[3071]](_0xe4bc[3148],function(_0x5d2ax2){_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[994]]()&&_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[904]](_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[845]]())});this[_0xe4bc[3071]](_0xe4bc[1997],function(_0x5d2ax2){_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[994]]()&&_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[846]]()});this[_0xe4bc[3071]](_0xe4bc[824],function(_0x5d2ax2){_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[994]]()&&_0x5d2ax2[_0xe4bc[824]]()});this[_0xe4bc[3071]](_0xe4bc[825],function(_0x5d2ax2){_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[994]]()&&_0x5d2ax2[_0xe4bc[825]]()});this[_0xe4bc[3071]](_0xe4bc[2558],function(_0x5d2ax2){_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[2558]]()});this[_0xe4bc[3071]](_0xe4bc[2559],function(_0x5d2ax2){_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[2559]]()});this[_0xe4bc[3071]](_0xe4bc[3149],function(_0x5d2ax2){_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[2560]]()});this[_0xe4bc[3071]](_0xe4bc[933],function(_0x5d2ax2){_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[933]]()});this[_0xe4bc[3071]](_0xe4bc[3150],function(_0x5d2ax2,_0x5d2ax3){_0x5d2ax2[_0xe4bc[3150]](_0x5d2ax3)});this[_0xe4bc[3071]](_0xe4bc[2705],function(_0x5d2ax2){_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[994]]()&&_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[2705]]()});this[_0xe4bc[3071]](_0xe4bc[3151],function(_0x5d2ax2){_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[994]]()&&_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[2440]]()});this[_0xe4bc[3071]](_0xe4bc[2706],function(_0x5d2ax2){_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[994]]()&&_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[2706]]()});this[_0xe4bc[3071]](_0xe4bc[2708],function(_0x5d2ax2){_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[994]]()&&_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[2708]]()});this[_0xe4bc[3071]](_0xe4bc[1061],function(_0x5d2ax2,_0x5d2ax3){_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[994]]()&&_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[2453]](_0x5d2ax3)&&_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[2451]](_0x5d2ax3)});this[_0xe4bc[3071]](_0xe4bc[3152],function(_0x5d2ax2,_0x5d2ax3){_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[994]]()&&_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[840]](!0)});this[_0xe4bc[3071]](_0xe4bc[3153],function(_0x5d2ax2,_0x5d2ax3){_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[994]]()&&_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[840]](!1)});this[_0xe4bc[3071]](_0xe4bc[2552],function(_0x5d2ax2,_0x5d2ax3){_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[2552]](_0x5d2ax3)});this[_0xe4bc[3071]](_0xe4bc[2554],function(_0x5d2ax2){_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[2554]]()});this[_0xe4bc[3071]](_0xe4bc[2442],function(_0x5d2ax2){_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[2442]]()});this[_0xe4bc[3071]](_0xe4bc[3154],function(_0x5d2ax2){_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[994]]()&&_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[2702]]()});this[_0xe4bc[3071]](_0xe4bc[3155],function(_0x5d2ax2){_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[994]]()&&_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[2700]]()});this[_0xe4bc[3071]](_0xe4bc[3156],function(_0x5d2ax2){_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[994]]()&&_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[2703]]()});this[_0xe4bc[3071]](_0xe4bc[3157],function(_0x5d2ax2){_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[994]]()&&_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[2704]]()});this[_0xe4bc[3071]](_0xe4bc[2514],function(_0x5d2ax2){_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[994]]()&&_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[847]](!0)});this[_0xe4bc[3071]](_0xe4bc[3158],function(_0x5d2ax2){if(_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[994]]()){var _0x5d2ax3=_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[1728]]();_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[847]](!0,!1,_0x5d2ax3)}});this[_0xe4bc[3071]](_0xe4bc[3159],function(_0x5d2ax2){_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[994]]()&&_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[847]](!1)});this[_0xe4bc[3071]](_0xe4bc[3160],function(_0x5d2ax2){if(_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[994]]()){var _0x5d2ax3=_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[1728]]();_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[847]](!1,!1,_0x5d2ax3)}});this[_0xe4bc[3071]](_0xe4bc[1447],function(_0x5d2ax2){_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[994]]()&&_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[2491]](mxConstants.STYLE_FONTSTYLE,mxConstants.FONT_BOLD)});this[_0xe4bc[3071]](_0xe4bc[1449],function(_0x5d2ax2){_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[994]]()&&_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[2491]](mxConstants.STYLE_FONTSTYLE,mxConstants.FONT_ITALIC)});this[_0xe4bc[3071]](_0xe4bc[355],function(_0x5d2ax2){_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[994]]()&&_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[2491]](mxConstants.STYLE_FONTSTYLE,mxConstants.FONT_UNDERLINE)});this[_0xe4bc[3071]](_0xe4bc[639],function(_0x5d2ax2){_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[994]]()&&_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[2491]](mxConstants.STYLE_FONTSTYLE,mxConstants.FONT_SHADOW)});this[_0xe4bc[3071]](_0xe4bc[3161],function(_0x5d2ax2){_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[994]]()&&_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[849]](mxConstants.ALIGN_LEFT)});this[_0xe4bc[3071]](_0xe4bc[3162],function(_0x5d2ax2){_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[994]]()&&_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[849]](mxConstants.ALIGN_CENTER)});this[_0xe4bc[3071]](_0xe4bc[3163],function(_0x5d2ax2){_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[994]]()&&_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[849]](mxConstants.ALIGN_RIGHT)});this[_0xe4bc[3071]](_0xe4bc[3164],function(_0x5d2ax2){_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[994]]()&&_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[849]](mxConstants.ALIGN_TOP)});this[_0xe4bc[3071]](_0xe4bc[3165],function(_0x5d2ax2){_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[994]]()&&_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[849]](mxConstants.ALIGN_MIDDLE)});this[_0xe4bc[3071]](_0xe4bc[3166],function(_0x5d2ax2){_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[994]]()&&_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[849]](mxConstants.ALIGN_BOTTOM)});this[_0xe4bc[3071]](_0xe4bc[3167],function(_0x5d2ax2){_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[1717]](mxConstants.STYLE_ALIGN,mxConstants.ALIGN_LEFT)});this[_0xe4bc[3071]](_0xe4bc[3168],function(_0x5d2ax2){_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[994]]()&&_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[1717]](mxConstants.STYLE_ALIGN,mxConstants.ALIGN_CENTER)});this[_0xe4bc[3071]](_0xe4bc[3169],function(_0x5d2ax2){_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[994]]()&&_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[1717]](mxConstants.STYLE_ALIGN,mxConstants.ALIGN_RIGHT)});this[_0xe4bc[3071]](_0xe4bc[3170],function(_0x5d2ax2){_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[994]]()&&_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[1717]](mxConstants.STYLE_VERTICAL_ALIGN,mxConstants.ALIGN_TOP)});this[_0xe4bc[3071]](_0xe4bc[3171],function(_0x5d2ax2){_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[994]]()&&_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[1717]](mxConstants.STYLE_VERTICAL_ALIGN,mxConstants.ALIGN_MIDDLE)});this[_0xe4bc[3071]](_0xe4bc[3172],function(_0x5d2ax2){_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[994]]()&&_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[1717]](mxConstants.STYLE_VERTICAL_ALIGN,mxConstants.ALIGN_BOTTOM)});this[_0xe4bc[3071]](_0xe4bc[499],function(_0x5d2ax2){var _0x5d2ax3=100*_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[255]],_0x5d2ax3=parseFloat(mxUtils[_0xe4bc[3173]](mxResources[_0xe4bc[203]](_0x5d2ax2[_0xe4bc[3104]])||_0x5d2ax2[_0xe4bc[3104]],_0x5d2ax3))/100;isNaN(_0x5d2ax3)||_0x5d2ax2[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[2262]](_0x5d2ax3)});this[_0xe4bc[3071]](_0xe4bc[3174],function(_0x5d2ax2){null!=_0x5d2ax2[_0xe4bc[3112]]?_0x5d2ax2[_0xe4bc[3112]][_0xe4bc[175]](!_0x5d2ax2[_0xe4bc[3112]][_0xe4bc[174]]()):_0x5d2ax2[_0xe4bc[3175]]()});this[_0xe4bc[3071]](_0xe4bc[3176],function(_0x5d2ax2){null!=_0x5d2ax2[_0xe4bc[2719]]?_0x5d2ax2[_0xe4bc[2719]][_0xe4bc[175]](!_0x5d2ax2[_0xe4bc[2719]][_0xe4bc[174]]()):_0x5d2ax2[_0xe4bc[3177]]()});this[_0xe4bc[3071]](_0xe4bc[3178],function(_0x5d2ax2){null==_0x5d2ax2[_0xe4bc[2136]]?_0x5d2ax2[_0xe4bc[3179]]():_0x5d2ax2[_0xe4bc[2136]][_0xe4bc[175]](!_0x5d2ax2[_0xe4bc[2136]][_0xe4bc[174]]())});this[_0xe4bc[3071]](_0xe4bc[3180],function(_0x5d2ax2){mxLog[_0xe4bc[175]](!mxLog[_0xe4bc[174]]())})};mxEditor[_0xe4bc[202]][_0xe4bc[3102]]=function(){var _0x5d2ax2=mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){this[_0xe4bc[746]]( new mxEventObject(mxEvent.SESSION,_0xe4bc[812],_0x5d2ax2))});return this[_0xe4bc[807]](this[_0xe4bc[1056]],this[_0xe4bc[1057]],this[_0xe4bc[1058]],_0x5d2ax2)};mxEditor[_0xe4bc[202]][_0xe4bc[3099]]=function(_0x5d2ax2){null!=_0x5d2ax2&&(( new mxCodec(_0x5d2ax2[_0xe4bc[295]]))[_0xe4bc[1093]](_0x5d2ax2,this),this[_0xe4bc[3181]]())};mxEditor[_0xe4bc[202]][_0xe4bc[3182]]=function(){document[_0xe4bc[3183]]=_0xe4bc[3184]};mxEditor[_0xe4bc[202]][_0xe4bc[3181]]=function(){this[_0xe4bc[1184]]=( new Date)[_0xe4bc[178]]();this[_0xe4bc[3095]][_0xe4bc[200]]();this[_0xe4bc[1183]]=0;this[_0xe4bc[2128]](!1)};mxEditor[_0xe4bc[202]][_0xe4bc[3071]]=function(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[3091]][_0x5d2ax2]=_0x5d2ax3};mxEditor[_0xe4bc[202]][_0xe4bc[350]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){var _0x5d2ax5=this[_0xe4bc[3091]][_0x5d2ax2];if(null!=_0x5d2ax5){try{var _0x5d2ax9=arguments;_0x5d2ax9[0]=this;_0x5d2ax5[_0xe4bc[183]](this,_0x5d2ax9)}catch(f){throw mxUtils[_0xe4bc[267]](_0xe4bc[3185]+_0x5d2ax2+_0xe4bc[3186]+f[_0xe4bc[281]],280,!0),f}}else {mxUtils[_0xe4bc[267]](_0xe4bc[3187]+_0x5d2ax2,280,!0)}};mxEditor[_0xe4bc[202]][_0xe4bc[3188]]=function(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[3118]][_0x5d2ax2]=_0x5d2ax3};mxEditor[_0xe4bc[202]][_0xe4bc[3189]]=function(_0x5d2ax2){return this[_0xe4bc[3118]][_0x5d2ax2]};mxEditor[_0xe4bc[202]][_0xe4bc[3096]]=function(){var _0x5d2ax2= new mxGraph(null,null,this[_0xe4bc[2720]]);_0x5d2ax2[_0xe4bc[2673]](!0);_0x5d2ax2[_0xe4bc[2674]](!0);this[_0xe4bc[3190]](_0x5d2ax2);this[_0xe4bc[3191]](_0x5d2ax2);this[_0xe4bc[3192]](_0x5d2ax2);this[_0xe4bc[3193]](_0x5d2ax2);this[_0xe4bc[3194]](_0x5d2ax2);_0x5d2ax2[_0xe4bc[2316]][_0xe4bc[1033]]=mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2,_0x5d2ax4,_0x5d2ax5){return this[_0xe4bc[3195]](_0x5d2ax2,_0x5d2ax4,_0x5d2ax5)});_0x5d2ax2[_0xe4bc[2433]][_0xe4bc[1033]]=mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2,_0x5d2ax4){return this[_0xe4bc[2503]](_0x5d2ax2,_0x5d2ax4)});this[_0xe4bc[3196]](_0x5d2ax2);this[_0xe4bc[3197]](_0x5d2ax2);return _0x5d2ax2};mxEditor[_0xe4bc[202]][_0xe4bc[3196]]=function(_0x5d2ax2){_0x5d2ax2= new mxSwimlaneManager(_0x5d2ax2,!1);_0x5d2ax2[_0xe4bc[1737]]=mxUtils[_0xe4bc[885]](this,function(){return this[_0xe4bc[3089]]});_0x5d2ax2[_0xe4bc[994]]=mxUtils[_0xe4bc[885]](this,function(){return this[_0xe4bc[3128]]});return _0x5d2ax2};mxEditor[_0xe4bc[202]][_0xe4bc[3197]]=function(_0x5d2ax2){var _0x5d2ax3= new mxLayoutManager(_0x5d2ax2),_0x5d2ax4=this;_0x5d2ax3[_0xe4bc[2754]]=function(_0x5d2ax3){var _0x5d2ax9=null,_0x5d2axa=_0x5d2ax4[_0xe4bc[1179]][_0xe4bc[502]]();if(null!=_0x5d2axa[_0xe4bc[1197]](_0x5d2ax3)){if(_0x5d2ax4[_0xe4bc[3129]]&&_0x5d2ax2[_0xe4bc[1730]](_0x5d2ax3)){null==_0x5d2ax4[_0xe4bc[3198]]&&(_0x5d2ax4[_0xe4bc[3198]]=_0x5d2ax4[_0xe4bc[3199]]()),_0x5d2ax9=_0x5d2ax4[_0xe4bc[3198]]}else {if(_0x5d2ax4[_0xe4bc[3126]]&&(_0x5d2ax2[_0xe4bc[2553]](_0x5d2ax3)||null==_0x5d2axa[_0xe4bc[1197]](_0x5d2axa[_0xe4bc[1197]](_0x5d2ax3)))){null==_0x5d2ax4[_0xe4bc[3200]]&&(_0x5d2ax4[_0xe4bc[3200]]=_0x5d2ax4[_0xe4bc[3201]]()),_0x5d2ax9=_0x5d2ax4[_0xe4bc[3200]]}}};return _0x5d2ax9};return _0x5d2ax3};mxEditor[_0xe4bc[202]][_0xe4bc[3202]]=function(_0x5d2ax2){null==this[_0xe4bc[1179]][_0xe4bc[526]]&&(this[_0xe4bc[1179]][_0xe4bc[176]](_0x5d2ax2),this[_0xe4bc[3203]]= new mxRubberband(this[_0xe4bc[1179]]),this[_0xe4bc[1157]]&&mxEvent[_0xe4bc[1157]](_0x5d2ax2),mxClient[_0xe4bc[496]]&& new mxDivResizer(_0x5d2ax2))};mxEditor[_0xe4bc[202]][_0xe4bc[3190]]=function(_0x5d2ax2){_0x5d2ax2[_0xe4bc[169]](mxEvent.DOUBLE_CLICK,mxUtils[_0xe4bc[885]](this,function(_0x5d2ax3,_0x5d2ax4){var _0x5d2ax5=_0x5d2ax4[_0xe4bc[720]](_0xe4bc[246]);null!=_0x5d2ax5&&(_0x5d2ax2[_0xe4bc[994]]()&&null!=this[_0xe4bc[3115]])&&(this[_0xe4bc[350]](this[_0xe4bc[3115]],_0x5d2ax5),_0x5d2ax4[_0xe4bc[722]]())}))};mxEditor[_0xe4bc[202]][_0xe4bc[3191]]=function(_0x5d2ax2){var _0x5d2ax3=mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax9=_0x5d2ax3[_0xe4bc[720]](_0xe4bc[1061]);this[_0xe4bc[3095]][_0xe4bc[1114]](_0x5d2ax9)});_0x5d2ax2[_0xe4bc[502]]()[_0xe4bc[169]](mxEvent.UNDO,_0x5d2ax3);_0x5d2ax2[_0xe4bc[249]]()[_0xe4bc[169]](mxEvent.UNDO,_0x5d2ax3);_0x5d2ax3=function(_0x5d2ax3,_0x5d2ax5){var _0x5d2ax9=_0x5d2ax5[_0xe4bc[720]](_0xe4bc[1061])[_0xe4bc[1065]];_0x5d2ax2[_0xe4bc[904]](_0x5d2ax2[_0xe4bc[2436]](_0x5d2ax9))};this[_0xe4bc[3095]][_0xe4bc[169]](mxEvent.UNDO,_0x5d2ax3);this[_0xe4bc[3095]][_0xe4bc[169]](mxEvent.REDO,_0x5d2ax3)};mxEditor[_0xe4bc[202]][_0xe4bc[3192]]=function(_0x5d2ax2){var _0x5d2ax3=mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2){this[_0xe4bc[746]]( new mxEventObject(mxEvent.ROOT))});_0x5d2ax2[_0xe4bc[249]]()[_0xe4bc[169]](mxEvent.DOWN,_0x5d2ax3);_0x5d2ax2[_0xe4bc[249]]()[_0xe4bc[169]](mxEvent.UP,_0x5d2ax3)};mxEditor[_0xe4bc[202]][_0xe4bc[3193]]=function(_0x5d2ax2){var _0x5d2ax3=mxUtils[_0xe4bc[885]](this,function(_0x5d2ax3,_0x5d2ax5){this[_0xe4bc[2128]](!0);!0==this[_0xe4bc[3140]]&&_0x5d2ax2[_0xe4bc[2585]]();for(var _0x5d2ax9=_0x5d2ax5[_0xe4bc[720]](_0xe4bc[1061])[_0xe4bc[1065]],_0x5d2axa=0;_0x5d2axa<_0x5d2ax9[_0xe4bc[67]];_0x5d2axa++){var _0x5d2ax12=_0x5d2ax9[_0x5d2axa];if(_0x5d2ax12 instanceof mxRootChange||_0x5d2ax12 instanceof mxValueChange&&_0x5d2ax12[_0xe4bc[246]]==this[_0xe4bc[1179]][_0xe4bc[251]][_0xe4bc[813]]||_0x5d2ax12 instanceof mxCellAttributeChange&&_0x5d2ax12[_0xe4bc[246]]==this[_0xe4bc[1179]][_0xe4bc[251]][_0xe4bc[813]]){this[_0xe4bc[746]]( new mxEventObject(mxEvent.ROOT));break}}});_0x5d2ax2[_0xe4bc[502]]()[_0xe4bc[169]](mxEvent.CHANGE,_0x5d2ax3)};mxEditor[_0xe4bc[202]][_0xe4bc[3194]]=function(_0x5d2ax2){var _0x5d2ax3=this;_0x5d2ax2[_0xe4bc[1133]]({mouseDown:function(_0x5d2ax2,_0x5d2ax5){if(null!=_0x5d2ax3[_0xe4bc[3083]]&&!_0x5d2ax5[_0xe4bc[737]]()&&(_0x5d2ax3[_0xe4bc[3117]]||null==_0x5d2ax5[_0xe4bc[248]]())){_0x5d2ax3[_0xe4bc[1179]][_0xe4bc[2440]](),_0x5d2ax3[_0xe4bc[3083]](_0x5d2ax5[_0xe4bc[727]](),_0x5d2ax5[_0xe4bc[736]]()),this[_0xe4bc[1142]]= !0,_0x5d2ax5[_0xe4bc[722]]()}},mouseMove:function(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[1142]]&&_0x5d2ax3[_0xe4bc[722]]()},mouseUp:function(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[1142]]&&(this[_0xe4bc[1142]]= !1,_0x5d2ax3[_0xe4bc[722]]())}})};mxEditor[_0xe4bc[202]][_0xe4bc[3201]]=function(){var _0x5d2ax2=this[_0xe4bc[1179]][_0xe4bc[1020]],_0x5d2ax3= new mxStackLayout(this[_0xe4bc[1179]],!this[_0xe4bc[3089]],this[_0xe4bc[3127]],2*_0x5d2ax2,2*_0x5d2ax2);_0x5d2ax3[_0xe4bc[1713]]=function(_0x5d2ax2){return !_0x5d2ax3[_0xe4bc[1179]][_0xe4bc[1730]](_0x5d2ax2)};return _0x5d2ax3};mxEditor[_0xe4bc[202]][_0xe4bc[3199]]=function(){return  new mxCompactTreeLayout(this[_0xe4bc[1179]],this[_0xe4bc[3089]])};mxEditor[_0xe4bc[202]][_0xe4bc[3097]]=function(){return  new mxDefaultToolbar(null,this)};mxEditor[_0xe4bc[202]][_0xe4bc[3204]]=function(_0x5d2ax2){this[_0xe4bc[3082]][_0xe4bc[176]](_0x5d2ax2);mxClient[_0xe4bc[496]]&& new mxDivResizer(_0x5d2ax2)};mxEditor[_0xe4bc[202]][_0xe4bc[3205]]=function(_0x5d2ax2){null==this[_0xe4bc[879]]&&(this[_0xe4bc[879]]=_0x5d2ax2,this[_0xe4bc[169]](mxEvent.SAVE,mxUtils[_0xe4bc[885]](this,function(){var _0x5d2ax2=( new Date)[_0xe4bc[3206]]();this[_0xe4bc[3207]]((mxResources[_0xe4bc[203]](this[_0xe4bc[3106]])||this[_0xe4bc[3106]])+_0xe4bc[3186]+_0x5d2ax2)})),this[_0xe4bc[169]](mxEvent.OPEN,mxUtils[_0xe4bc[885]](this,function(){this[_0xe4bc[3207]]((mxResources[_0xe4bc[203]](this[_0xe4bc[3108]])||this[_0xe4bc[3108]])+_0xe4bc[3186]+this[_0xe4bc[3122]])})),mxClient[_0xe4bc[496]]&& new mxDivResizer(_0x5d2ax2))};mxEditor[_0xe4bc[202]][_0xe4bc[3207]]=function(_0x5d2ax2){null!=this[_0xe4bc[879]]&&null!=_0x5d2ax2&&(this[_0xe4bc[879]][_0xe4bc[339]]=_0x5d2ax2)};mxEditor[_0xe4bc[202]][_0xe4bc[3208]]=function(_0x5d2ax2){this[_0xe4bc[169]](mxEvent.ROOT,mxUtils[_0xe4bc[885]](this,function(_0x5d2ax3){_0x5d2ax2[_0xe4bc[339]]=this[_0xe4bc[3209]]()}));mxClient[_0xe4bc[496]]&& new mxDivResizer(_0x5d2ax2)};mxEditor[_0xe4bc[202]][_0xe4bc[3210]]=function(_0x5d2ax2,_0x5d2ax3){null!=_0x5d2ax2&&( new mxCompactTreeLayout(this[_0xe4bc[1179]],_0x5d2ax3))[_0xe4bc[350]](_0x5d2ax2)};mxEditor[_0xe4bc[202]][_0xe4bc[3209]]=function(){for(var _0x5d2ax2=_0xe4bc[110],_0x5d2ax3=this[_0xe4bc[1179]],_0x5d2ax4=_0x5d2ax3[_0xe4bc[2534]]();null!=_0x5d2ax4&&null!=_0x5d2ax3[_0xe4bc[502]]()[_0xe4bc[1197]](_0x5d2ax3[_0xe4bc[502]]()[_0xe4bc[1197]](_0x5d2ax4));){_0x5d2ax3[_0xe4bc[2553]](_0x5d2ax4)&&(_0x5d2ax2=_0xe4bc[3211]+_0x5d2ax3[_0xe4bc[2454]](_0x5d2ax4)+_0x5d2ax2),_0x5d2ax4=_0x5d2ax3[_0xe4bc[502]]()[_0xe4bc[1197]](_0x5d2ax4)};return this[_0xe4bc[3212]]()+_0x5d2ax2};mxEditor[_0xe4bc[202]][_0xe4bc[3212]]=function(){var _0x5d2ax2=this[_0xe4bc[1179]][_0xe4bc[502]]()[_0xe4bc[501]]();return this[_0xe4bc[1179]][_0xe4bc[2454]](_0x5d2ax2)};mxEditor[_0xe4bc[202]][_0xe4bc[824]]=function(){this[_0xe4bc[3095]][_0xe4bc[824]]()};mxEditor[_0xe4bc[202]][_0xe4bc[825]]=function(){this[_0xe4bc[3095]][_0xe4bc[825]]()};mxEditor[_0xe4bc[202]][_0xe4bc[844]]=function(){var _0x5d2ax2=null!=this[_0xe4bc[3121]]?this[_0xe4bc[3121]]:this[_0xe4bc[1179]][_0xe4bc[1020]];return this[_0xe4bc[1179]][_0xe4bc[844]](this[_0xe4bc[3213]](),_0x5d2ax2)};mxEditor[_0xe4bc[202]][_0xe4bc[3213]]=function(){return this[_0xe4bc[1179]][_0xe4bc[502]]()[_0xe4bc[1978]](this[_0xe4bc[3120]])};mxEditor[_0xe4bc[202]][_0xe4bc[392]]=function(_0x5d2ax2){if(null!=_0x5d2ax2){var _0x5d2ax3=mxUtils[_0xe4bc[219]](_0x5d2ax2)[_0xe4bc[875]]();this[_0xe4bc[3214]](_0x5d2ax3[_0xe4bc[158]]);this[_0xe4bc[3122]]=_0x5d2ax2;this[_0xe4bc[746]]( new mxEventObject(mxEvent.OPEN,_0xe4bc[3122],_0x5d2ax2))}};mxEditor[_0xe4bc[202]][_0xe4bc[3214]]=function(_0x5d2ax2){( new mxCodec(_0x5d2ax2[_0xe4bc[295]]))[_0xe4bc[1093]](_0x5d2ax2,this[_0xe4bc[1179]][_0xe4bc[502]]());this[_0xe4bc[3181]]()};mxEditor[_0xe4bc[202]][_0xe4bc[815]]=function(_0x5d2ax2,_0x5d2ax3){_0x5d2ax2=_0x5d2ax2||this[_0xe4bc[3215]]();if(null!=_0x5d2ax2&&0<_0x5d2ax2[_0xe4bc[67]]){var _0x5d2ax4=this[_0xe4bc[3216]](_0x5d2ax3);this[_0xe4bc[3217]](_0x5d2ax2,_0x5d2ax4);this[_0xe4bc[2128]](!1)};this[_0xe4bc[746]]( new mxEventObject(mxEvent.SAVE,_0xe4bc[863],_0x5d2ax2))};mxEditor[_0xe4bc[202]][_0xe4bc[3217]]=function(_0x5d2ax2,_0x5d2ax3){this[_0xe4bc[1070]]&&(_0x5d2ax3=encodeURIComponent(_0x5d2ax3));mxUtils[_0xe4bc[814]](_0x5d2ax2,this[_0xe4bc[3123]]+_0xe4bc[226]+_0x5d2ax3,mxUtils[_0xe4bc[885]](this,function(_0x5d2ax4){this[_0xe4bc[746]]( new mxEventObject(mxEvent.POST,_0xe4bc[870],_0x5d2ax4,_0xe4bc[863],_0x5d2ax2,_0xe4bc[410],_0x5d2ax3))}))};mxEditor[_0xe4bc[202]][_0xe4bc[3216]]=function(_0x5d2ax2){_0x5d2ax2=null!=_0x5d2ax2?_0x5d2ax2:this[_0xe4bc[1069]];var _0x5d2ax3=( new mxCodec)[_0xe4bc[514]](this[_0xe4bc[1179]][_0xe4bc[502]]());return mxUtils[_0xe4bc[875]](_0x5d2ax3,_0x5d2ax2)};mxEditor[_0xe4bc[202]][_0xe4bc[3215]]=function(){return this[_0xe4bc[3124]]};mxEditor[_0xe4bc[202]][_0xe4bc[3142]]=function(){return this[_0xe4bc[3125]]};mxEditor[_0xe4bc[202]][_0xe4bc[807]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){var _0x5d2ax9=null;mxClient[_0xe4bc[3101]]||(_0x5d2ax9= new mxSession(this[_0xe4bc[1179]][_0xe4bc[502]](),_0x5d2ax2,_0x5d2ax3,_0x5d2ax4),_0x5d2ax9[_0xe4bc[169]](mxEvent.RECEIVE,mxUtils[_0xe4bc[885]](this,function(_0x5d2ax2,_0x5d2ax3){null!=_0x5d2ax3[_0xe4bc[720]](_0xe4bc[252])[_0xe4bc[284]](_0xe4bc[1088])&&this[_0xe4bc[3181]]()})),_0x5d2ax9[_0xe4bc[169]](mxEvent.DISCONNECT,_0x5d2ax5),_0x5d2ax9[_0xe4bc[169]](mxEvent.CONNECT,_0x5d2ax5),_0x5d2ax9[_0xe4bc[169]](mxEvent.NOTIFY,_0x5d2ax5),_0x5d2ax9[_0xe4bc[169]](mxEvent.GET,_0x5d2ax5),_0x5d2ax9[_0xe4bc[861]]());return _0x5d2ax9};mxEditor[_0xe4bc[202]][_0xe4bc[3218]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[2434]]()[_0xe4bc[2054]][_0x5d2ax3];this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[2434]]()[_0xe4bc[2074]](_0x5d2ax3,this[_0xe4bc[1179]][_0xe4bc[2434]]()[_0xe4bc[2054]][_0x5d2ax2]);this[_0xe4bc[1179]][_0xe4bc[2434]]()[_0xe4bc[2074]](_0x5d2ax2,_0x5d2ax4);this[_0xe4bc[1179]][_0xe4bc[802]]()};mxEditor[_0xe4bc[202]][_0xe4bc[3150]]=function(_0x5d2ax2){_0x5d2ax2=_0x5d2ax2||this[_0xe4bc[1179]][_0xe4bc[2452]]();null==_0x5d2ax2&&(_0x5d2ax2=this[_0xe4bc[1179]][_0xe4bc[2534]](),null==_0x5d2ax2&&(_0x5d2ax2=this[_0xe4bc[1179]][_0xe4bc[502]]()[_0xe4bc[501]]()));if(null!=_0x5d2ax2){this[_0xe4bc[1179]][_0xe4bc[2126]](!0);var _0x5d2ax3=mxUtils[_0xe4bc[445]](this[_0xe4bc[1179]][_0xe4bc[526]]),_0x5d2ax4=_0x5d2ax3[_0xe4bc[235]]+10,_0x5d2ax3=_0x5d2ax3[_0xe4bc[236]];if(null!=this[_0xe4bc[716]]&&!this[_0xe4bc[3139]]){_0x5d2ax4=this[_0xe4bc[716]][_0xe4bc[730]](),_0x5d2ax3=this[_0xe4bc[716]][_0xe4bc[732]]()}else {var _0x5d2ax5=this[_0xe4bc[1179]][_0xe4bc[2555]](_0x5d2ax2);null!=_0x5d2ax5&&(_0x5d2ax4+=_0x5d2ax5[_0xe4bc[235]]+Math[_0xe4bc[243]](200,_0x5d2ax5[_0xe4bc[117]]),_0x5d2ax3+=_0x5d2ax5[_0xe4bc[236]])};this[_0xe4bc[3062]]();_0x5d2ax2=this[_0xe4bc[3219]](_0x5d2ax2);null!=_0x5d2ax2&&(this[_0xe4bc[716]]= new mxWindow(mxResources[_0xe4bc[203]](this[_0xe4bc[3110]])||this[_0xe4bc[3110]],_0x5d2ax2,_0x5d2ax4,_0x5d2ax3,this[_0xe4bc[3137]],this[_0xe4bc[3138]],!1),this[_0xe4bc[716]][_0xe4bc[175]](!0))}};mxEditor[_0xe4bc[202]][_0xe4bc[3220]]=function(){return null!=this[_0xe4bc[716]]};mxEditor[_0xe4bc[202]][_0xe4bc[3219]]=function(_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[1179]][_0xe4bc[502]](),_0x5d2ax4=_0x5d2ax3[_0xe4bc[433]](_0x5d2ax2);if(mxUtils[_0xe4bc[1331]](_0x5d2ax4)){var _0x5d2ax5= new mxForm(_0xe4bc[716]);_0x5d2ax5[_0xe4bc[961]](_0xe4bc[3222],_0x5d2ax2[_0xe4bc[1103]]())[_0xe4bc[57]](_0xe4bc[3221],_0xe4bc[128]);var _0x5d2ax9=null,_0x5d2axa=null,_0x5d2ax12=null,_0x5d2ax13=null,_0x5d2ax14=null;_0x5d2ax3[_0xe4bc[1193]](_0x5d2ax2)&&(_0x5d2ax9=_0x5d2ax3[_0xe4bc[1721]](_0x5d2ax2),null!=_0x5d2ax9&&(_0x5d2axa=_0x5d2ax5[_0xe4bc[961]](_0xe4bc[125],_0x5d2ax9[_0xe4bc[236]]),_0x5d2ax12=_0x5d2ax5[_0xe4bc[961]](_0xe4bc[361],_0x5d2ax9[_0xe4bc[235]]),_0x5d2ax13=_0x5d2ax5[_0xe4bc[961]](_0xe4bc[117],_0x5d2ax9[_0xe4bc[117]]),_0x5d2ax14=_0x5d2ax5[_0xe4bc[961]](_0xe4bc[119],_0x5d2ax9[_0xe4bc[119]])));for(var _0x5d2ax15=_0x5d2ax3[_0xe4bc[474]](_0x5d2ax2),_0x5d2ax16=_0x5d2ax5[_0xe4bc[961]](_0xe4bc[3223],_0x5d2ax15||_0xe4bc[110]),_0x5d2ax17=_0x5d2ax4[_0xe4bc[320]],_0x5d2ax18=[],_0x5d2ax4=0;_0x5d2ax4<_0x5d2ax17[_0xe4bc[67]];_0x5d2ax4++){_0x5d2ax18[_0x5d2ax4]=_0x5d2ax5[_0xe4bc[968]](_0x5d2ax17[_0x5d2ax4][_0xe4bc[301]],_0x5d2ax17[_0x5d2ax4][_0xe4bc[318]],_0xe4bc[685]==_0x5d2ax17[_0x5d2ax4][_0xe4bc[301]]?4:2)};_0x5d2ax4=mxUtils[_0xe4bc[885]](this,function(){this[_0xe4bc[3062]]();_0x5d2ax3[_0xe4bc[473]]();try{null!=_0x5d2ax9&&(_0x5d2ax9=_0x5d2ax9[_0xe4bc[238]](),_0x5d2ax9[_0xe4bc[235]]=parseFloat(_0x5d2ax12[_0xe4bc[131]]),_0x5d2ax9[_0xe4bc[236]]=parseFloat(_0x5d2axa[_0xe4bc[131]]),_0x5d2ax9[_0xe4bc[117]]=parseFloat(_0x5d2ax13[_0xe4bc[131]]),_0x5d2ax9[_0xe4bc[119]]=parseFloat(_0x5d2ax14[_0xe4bc[131]]),_0x5d2ax3[_0xe4bc[1724]](_0x5d2ax2,_0x5d2ax9));0<_0x5d2ax16[_0xe4bc[131]][_0xe4bc[67]]?_0x5d2ax3[_0xe4bc[475]](_0x5d2ax2,_0x5d2ax16[_0xe4bc[131]]):_0x5d2ax3[_0xe4bc[475]](_0x5d2ax2,null);for(var _0x5d2ax4=0;_0x5d2ax4<_0x5d2ax17[_0xe4bc[67]];_0x5d2ax4++){var _0x5d2ax5= new mxCellAttributeChange(_0x5d2ax2,_0x5d2ax17[_0x5d2ax4][_0xe4bc[301]],_0x5d2ax18[_0x5d2ax4][_0xe4bc[131]]);_0x5d2ax3[_0xe4bc[350]](_0x5d2ax5)};this[_0xe4bc[1179]][_0xe4bc[2455]](_0x5d2ax2)&&this[_0xe4bc[1179]][_0xe4bc[858]](_0x5d2ax2)}finally{_0x5d2ax3[_0xe4bc[476]]()}});_0x5d2ax15=mxUtils[_0xe4bc[885]](this,function(){this[_0xe4bc[3062]]()});_0x5d2ax5[_0xe4bc[956]](_0x5d2ax4,_0x5d2ax15);return _0x5d2ax5[_0xe4bc[116]]};return null};mxEditor[_0xe4bc[202]][_0xe4bc[3062]]=function(){null!=this[_0xe4bc[716]]&&(this[_0xe4bc[716]][_0xe4bc[515]](),this[_0xe4bc[716]]=null)};mxEditor[_0xe4bc[202]][_0xe4bc[3175]]=function(){if(null==this[_0xe4bc[3112]]){var _0x5d2ax2=document[_0xe4bc[55]](_0xe4bc[485]);_0x5d2ax2[_0xe4bc[124]][_0xe4bc[549]]=_0xe4bc[952];_0x5d2ax2[_0xe4bc[124]][_0xe4bc[357]]=_0xe4bc[550];var _0x5d2ax3=document[_0xe4bc[112]][_0xe4bc[159]],_0x5d2ax3= new mxWindow(mxResources[_0xe4bc[203]](this[_0xe4bc[3111]])||this[_0xe4bc[3111]],_0x5d2ax2,_0x5d2ax3-220,this[_0xe4bc[3132]],200);_0x5d2ax3[_0xe4bc[164]](!0);_0x5d2ax3[_0xe4bc[165]]= !1;var _0x5d2ax4=mxUtils[_0xe4bc[885]](this,function(_0x5d2ax3){mxEvent[_0xe4bc[762]](_0x5d2ax2);_0x5d2ax2[_0xe4bc[339]]=_0xe4bc[110];this[_0xe4bc[3224]](_0x5d2ax2)});this[_0xe4bc[1179]][_0xe4bc[502]]()[_0xe4bc[169]](mxEvent.CHANGE,_0x5d2ax4);this[_0xe4bc[1179]][_0xe4bc[2435]]()[_0xe4bc[169]](mxEvent.CHANGE,_0x5d2ax4);this[_0xe4bc[1179]][_0xe4bc[169]](mxEvent.ROOT,_0x5d2ax4);null!=this[_0xe4bc[3131]]&&_0x5d2ax3[_0xe4bc[951]](this[_0xe4bc[3131]]);this[_0xe4bc[3112]]=_0x5d2ax3;this[_0xe4bc[3224]](_0x5d2ax2)};this[_0xe4bc[3112]][_0xe4bc[175]](!0)};mxEditor[_0xe4bc[202]][_0xe4bc[3225]]=function(_0x5d2ax2){null!=this[_0xe4bc[3112]]&&(_0x5d2ax2=this[_0xe4bc[3112]][_0xe4bc[905]],mxEvent[_0xe4bc[762]](_0x5d2ax2),_0x5d2ax2[_0xe4bc[339]]=_0xe4bc[110],this[_0xe4bc[3224]](_0x5d2ax2))};mxEditor[_0xe4bc[202]][_0xe4bc[3224]]=function(_0x5d2ax2){};mxEditor[_0xe4bc[202]][_0xe4bc[3177]]=function(_0x5d2ax2){if(null==this[_0xe4bc[2719]]){var _0x5d2ax3=document[_0xe4bc[55]](_0xe4bc[389]);_0x5d2ax3[_0xe4bc[57]](_0xe4bc[390],mxResources[_0xe4bc[203]](_0xe4bc[3134])||this[_0xe4bc[3134]]);_0x5d2ax3[_0xe4bc[57]](_0xe4bc[119],_0xe4bc[118]);_0x5d2ax3[_0xe4bc[57]](_0xe4bc[117],_0xe4bc[118]);_0x5d2ax3[_0xe4bc[57]](_0xe4bc[3226],_0xe4bc[468]);_0x5d2ax3[_0xe4bc[124]][_0xe4bc[1028]]=_0xe4bc[1391];_0x5d2ax2=document[_0xe4bc[112]][_0xe4bc[159]];var _0x5d2ax4=document[_0xe4bc[112]][_0xe4bc[157]]||document[_0xe4bc[158]][_0xe4bc[157]],_0x5d2ax5= new mxWindow(mxResources[_0xe4bc[203]](this[_0xe4bc[3113]])||this[_0xe4bc[3113]],_0x5d2ax3,(_0x5d2ax2-this[_0xe4bc[3135]])/2,(_0x5d2ax4-this[_0xe4bc[3136]])/3,this[_0xe4bc[3135]],this[_0xe4bc[3136]]);_0x5d2ax5[_0xe4bc[161]](!0);_0x5d2ax5[_0xe4bc[164]](!0);_0x5d2ax5[_0xe4bc[165]]= !1;_0x5d2ax5[_0xe4bc[163]](!0);null!=this[_0xe4bc[3133]]&&_0x5d2ax5[_0xe4bc[951]](this[_0xe4bc[3133]]);mxClient[_0xe4bc[133]]&&(_0x5d2ax2=function(_0x5d2ax2){_0x5d2ax3[_0xe4bc[57]](_0xe4bc[119],_0x5d2ax5[_0xe4bc[485]][_0xe4bc[167]]-26+_0xe4bc[168])},_0x5d2ax5[_0xe4bc[169]](mxEvent.RESIZE_END,_0x5d2ax2),_0x5d2ax5[_0xe4bc[169]](mxEvent.MAXIMIZE,_0x5d2ax2),_0x5d2ax5[_0xe4bc[169]](mxEvent.NORMALIZE,_0x5d2ax2),_0x5d2ax5[_0xe4bc[169]](mxEvent.SHOW,_0x5d2ax2));this[_0xe4bc[2719]]=_0x5d2ax5};this[_0xe4bc[2719]][_0xe4bc[175]](!0)};mxEditor[_0xe4bc[202]][_0xe4bc[3179]]=function(){if(null==this[_0xe4bc[2136]]){var _0x5d2ax2=document[_0xe4bc[55]](_0xe4bc[485]);_0x5d2ax2[_0xe4bc[124]][_0xe4bc[277]]=_0xe4bc[188];_0x5d2ax2[_0xe4bc[124]][_0xe4bc[117]]=_0xe4bc[118];_0x5d2ax2[_0xe4bc[124]][_0xe4bc[119]]=_0xe4bc[118];_0x5d2ax2[_0xe4bc[124]][_0xe4bc[1537]]=_0xe4bc[1391];_0x5d2ax2[_0xe4bc[124]][_0xe4bc[270]]=_0xe4bc[582];var _0x5d2ax3= new mxWindow(mxResources[_0xe4bc[203]](this[_0xe4bc[3114]])||this[_0xe4bc[3114]],_0x5d2ax2,600,480,200,200,!1),_0x5d2ax4= new mxOutline(this[_0xe4bc[1179]],_0x5d2ax2);_0x5d2ax3[_0xe4bc[164]](!0);_0x5d2ax3[_0xe4bc[163]](!0);_0x5d2ax3[_0xe4bc[165]]= !1;_0x5d2ax3[_0xe4bc[169]](mxEvent.RESIZE_END,function(){_0x5d2ax4[_0xe4bc[2729]]()});this[_0xe4bc[2136]]=_0x5d2ax3;this[_0xe4bc[2136]][_0xe4bc[2136]]=_0x5d2ax4};this[_0xe4bc[2136]][_0xe4bc[175]](!0);this[_0xe4bc[2136]][_0xe4bc[2136]][_0xe4bc[2729]](!0)};mxEditor[_0xe4bc[202]][_0xe4bc[3086]]=function(_0x5d2ax2){_0xe4bc[804]==_0x5d2ax2?(this[_0xe4bc[1179]][_0xe4bc[2316]][_0xe4bc[2840]]= !1,this[_0xe4bc[1179]][_0xe4bc[1995]](!1)):_0xe4bc[807]==_0x5d2ax2?(this[_0xe4bc[1179]][_0xe4bc[2316]][_0xe4bc[2840]]= !1,this[_0xe4bc[1179]][_0xe4bc[1995]](!0)):_0xe4bc[796]==_0x5d2ax2&&(this[_0xe4bc[1179]][_0xe4bc[2316]][_0xe4bc[2840]]= !0,this[_0xe4bc[1179]][_0xe4bc[1995]](!1))};mxEditor[_0xe4bc[202]][_0xe4bc[3195]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){this[_0xe4bc[3094]][_0xe4bc[3065]](this,_0x5d2ax2,_0x5d2ax3,_0x5d2ax4)};mxEditor[_0xe4bc[202]][_0xe4bc[2503]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=null;if(null!=this[_0xe4bc[2075]]){_0x5d2ax4=this[_0xe4bc[1179]][_0xe4bc[502]]()[_0xe4bc[1978]](this[_0xe4bc[2075]])}else {_0x5d2ax4= new mxCell(_0xe4bc[110]);_0x5d2ax4[_0xe4bc[1994]](!0);var _0x5d2ax5= new mxGeometry;_0x5d2ax5[_0xe4bc[1500]]= !0;_0x5d2ax4[_0xe4bc[1724]](_0x5d2ax5)};_0x5d2ax5=this[_0xe4bc[2291]]();null!=_0x5d2ax5&&_0x5d2ax4[_0xe4bc[475]](_0x5d2ax5);return _0x5d2ax4};mxEditor[_0xe4bc[202]][_0xe4bc[2291]]=function(){return this[_0xe4bc[3119]]};mxEditor[_0xe4bc[202]][_0xe4bc[3227]]=function(_0x5d2ax2){return null!=this[_0xe4bc[3093]]&&0<this[_0xe4bc[3093]][_0xe4bc[67]]&&this[_0xe4bc[1179]][_0xe4bc[1730]](_0x5d2ax2)?this[_0xe4bc[3093]][this[_0xe4bc[3130]]++ %this[_0xe4bc[3093]][_0xe4bc[67]]]:null};mxEditor[_0xe4bc[202]][_0xe4bc[3228]]=function(_0x5d2ax2){if(null!=this[_0xe4bc[3100]]){var _0x5d2ax3=this[_0xe4bc[3227]](_0x5d2ax2);null!=_0x5d2ax3&&_0x5d2ax2[_0xe4bc[475]](_0x5d2ax2[_0xe4bc[474]]()+_0xe4bc[471]+this[_0xe4bc[3100]]+_0xe4bc[226]+_0x5d2ax3)}};mxEditor[_0xe4bc[202]][_0xe4bc[817]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){for(var _0x5d2ax9=this[_0xe4bc[1179]][_0xe4bc[502]]();null!=_0x5d2ax2&&!this[_0xe4bc[1179]][_0xe4bc[2685]](_0x5d2ax2);){_0x5d2ax2=_0x5d2ax9[_0xe4bc[1197]](_0x5d2ax2)};_0x5d2ax2=null!=_0x5d2ax2?_0x5d2ax2:this[_0xe4bc[1179]][_0xe4bc[2461]](_0x5d2ax4,_0x5d2ax5);var _0x5d2axa=this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[255]],_0x5d2ax12=_0x5d2ax9[_0xe4bc[1721]](_0x5d2ax3),_0x5d2ax13=_0x5d2ax9[_0xe4bc[1721]](_0x5d2ax2);if(this[_0xe4bc[1179]][_0xe4bc[1730]](_0x5d2ax3)&&!this[_0xe4bc[1179]][_0xe4bc[2412]]){_0x5d2ax2=null}else {if(null==_0x5d2ax2&&this[_0xe4bc[3116]]){return null};if(null!=_0x5d2ax2&&null!=_0x5d2ax13){var _0x5d2ax14=this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[248]](_0x5d2ax2);if(null!=_0x5d2ax14){if(_0x5d2ax4-=_0x5d2ax14[_0xe4bc[2078]][_0xe4bc[235]]*_0x5d2axa,_0x5d2ax5-=_0x5d2ax14[_0xe4bc[2078]][_0xe4bc[236]]*_0x5d2axa,this[_0xe4bc[1179]][_0xe4bc[3229]]){var _0x5d2ax13=_0x5d2ax12[_0xe4bc[117]],_0x5d2ax15=_0x5d2ax12[_0xe4bc[119]],_0x5d2ax16=_0x5d2ax14[_0xe4bc[235]]+_0x5d2ax14[_0xe4bc[117]];_0x5d2ax4+_0x5d2ax13>_0x5d2ax16&&(_0x5d2ax4-=_0x5d2ax4+_0x5d2ax13-_0x5d2ax16);_0x5d2ax16=_0x5d2ax14[_0xe4bc[236]]+_0x5d2ax14[_0xe4bc[119]];_0x5d2ax5+_0x5d2ax15>_0x5d2ax16&&(_0x5d2ax5-=_0x5d2ax5+_0x5d2ax15-_0x5d2ax16)}}else {null!=_0x5d2ax13&&(_0x5d2ax4-=_0x5d2ax13[_0xe4bc[235]]*_0x5d2axa,_0x5d2ax5-=_0x5d2ax13[_0xe4bc[236]]*_0x5d2axa)}}};_0x5d2ax12=_0x5d2ax12[_0xe4bc[238]]();_0x5d2ax12[_0xe4bc[235]]=this[_0xe4bc[1179]][_0xe4bc[1021]](_0x5d2ax4/_0x5d2axa-this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[513]][_0xe4bc[235]]-this[_0xe4bc[1179]][_0xe4bc[1020]]/2);_0x5d2ax12[_0xe4bc[236]]=this[_0xe4bc[1179]][_0xe4bc[1021]](_0x5d2ax5/_0x5d2axa-this[_0xe4bc[1179]][_0xe4bc[249]]()[_0xe4bc[513]][_0xe4bc[236]]-this[_0xe4bc[1179]][_0xe4bc[1020]]/2);_0x5d2ax3[_0xe4bc[1724]](_0x5d2ax12);null==_0x5d2ax2&&(_0x5d2ax2=this[_0xe4bc[1179]][_0xe4bc[902]]());this[_0xe4bc[3228]](_0x5d2ax3);this[_0xe4bc[746]]( new mxEventObject(mxEvent.BEFORE_ADD_VERTEX,_0xe4bc[1988],_0x5d2ax3,_0xe4bc[1101],_0x5d2ax2));_0x5d2ax9[_0xe4bc[473]]();try{_0x5d2ax3=this[_0xe4bc[1179]][_0xe4bc[2103]](_0x5d2ax3,_0x5d2ax2),null!=_0x5d2ax3&&(this[_0xe4bc[1179]][_0xe4bc[2509]](_0x5d2ax3),this[_0xe4bc[746]]( new mxEventObject(mxEvent.ADD_VERTEX,_0xe4bc[1988],_0x5d2ax3)))}finally{_0x5d2ax9[_0xe4bc[476]]()};null!=_0x5d2ax3&&(this[_0xe4bc[1179]][_0xe4bc[2450]](_0x5d2ax3),this[_0xe4bc[1179]][_0xe4bc[2564]](_0x5d2ax3),this[_0xe4bc[746]]( new mxEventObject(mxEvent.AFTER_ADD_VERTEX,_0xe4bc[1988],_0x5d2ax3)));return _0x5d2ax3};mxEditor[_0xe4bc[202]][_0xe4bc[515]]=function(){this[_0xe4bc[2717]]||(this[_0xe4bc[2717]]= !0,null!=this[_0xe4bc[3112]]&&this[_0xe4bc[3112]][_0xe4bc[515]](),null!=this[_0xe4bc[2136]]&&this[_0xe4bc[2136]][_0xe4bc[515]](),null!=this[_0xe4bc[716]]&&this[_0xe4bc[716]][_0xe4bc[515]](),null!=this[_0xe4bc[3098]]&&this[_0xe4bc[3098]][_0xe4bc[515]](),null!=this[_0xe4bc[3203]]&&this[_0xe4bc[3203]][_0xe4bc[515]](),null!=this[_0xe4bc[3082]]&&this[_0xe4bc[3082]][_0xe4bc[515]](),null!=this[_0xe4bc[1179]]&&this[_0xe4bc[1179]][_0xe4bc[515]](),this[_0xe4bc[3118]]=this[_0xe4bc[879]]=null)};var mxCodecRegistry={codecs:[],aliases:[],register:function(_0x5d2ax2){if(null!=_0x5d2ax2){var _0x5d2ax3=_0x5d2ax2[_0xe4bc[718]]();mxCodecRegistry[_0xe4bc[3230]][_0x5d2ax3]=_0x5d2ax2;var _0x5d2ax4=mxUtils[_0xe4bc[197]](_0x5d2ax2[_0xe4bc[3231]][_0xe4bc[196]]);_0x5d2ax4!=_0x5d2ax3&&mxCodecRegistry[_0xe4bc[3232]](_0x5d2ax4,_0x5d2ax3)};return _0x5d2ax2},addAlias:function(_0x5d2ax2,_0x5d2ax3){mxCodecRegistry[_0xe4bc[3233]][_0x5d2ax2]=_0x5d2ax3},getCodec:function(_0x5d2ax2){var _0x5d2ax3=null;if(null!=_0x5d2ax2){var _0x5d2ax3=mxUtils[_0xe4bc[197]](_0x5d2ax2),_0x5d2ax4=mxCodecRegistry[_0xe4bc[3233]][_0x5d2ax3];null!=_0x5d2ax4&&(_0x5d2ax3=_0x5d2ax4);_0x5d2ax3=mxCodecRegistry[_0xe4bc[3230]][_0x5d2ax3];if(null==_0x5d2ax3){try{_0x5d2ax3= new mxObjectCodec( new _0x5d2ax2),mxCodecRegistry[_0xe4bc[3234]](_0x5d2ax3)}catch(d){}}};return _0x5d2ax3}};function mxCodec(_0x5d2ax2){this[_0xe4bc[395]]=_0x5d2ax2||mxUtils[_0xe4bc[306]]();this[_0xe4bc[68]]=[]}mxCodec[_0xe4bc[202]][_0xe4bc[395]]=null;mxCodec[_0xe4bc[202]][_0xe4bc[68]]=null;mxCodec[_0xe4bc[202]][_0xe4bc[3235]]= !1;mxCodec[_0xe4bc[202]][_0xe4bc[1104]]=function(_0x5d2ax2,_0x5d2ax3){return this[_0xe4bc[68]][_0x5d2ax2]=_0x5d2ax3};mxCodec[_0xe4bc[202]][_0xe4bc[3236]]=function(_0x5d2ax2){var _0x5d2ax3=null;null!=_0x5d2ax2&&(_0x5d2ax3=this[_0xe4bc[68]][_0x5d2ax2],null==_0x5d2ax3&&(_0x5d2ax3=this[_0xe4bc[1060]](_0x5d2ax2),null==_0x5d2ax3&&(_0x5d2ax2=this[_0xe4bc[1362]](_0x5d2ax2),null!=_0x5d2ax2&&(_0x5d2ax3=this[_0xe4bc[1093]](_0x5d2ax2)))));return _0x5d2ax3};mxCodec[_0xe4bc[202]][_0xe4bc[1060]]=function(_0x5d2ax2){return null};mxCodec[_0xe4bc[202]][_0xe4bc[1362]]=function(_0x5d2ax2,_0x5d2ax3){return mxUtils[_0xe4bc[290]](this[_0xe4bc[395]][_0xe4bc[158]],null!=_0x5d2ax3?_0x5d2ax3:_0xe4bc[1363],_0x5d2ax2)};mxCodec[_0xe4bc[202]][_0xe4bc[1103]]=function(_0x5d2ax2){var _0x5d2ax3=null;null!=_0x5d2ax2&&(_0x5d2ax3=this[_0xe4bc[3237]](_0x5d2ax2),null==_0x5d2ax3&&_0x5d2ax2 instanceof mxCell&&(_0x5d2ax3=_0x5d2ax2[_0xe4bc[1103]](),null==_0x5d2ax3&&(_0x5d2ax3=mxCellPath[_0xe4bc[385]](_0x5d2ax2),0==_0x5d2ax3[_0xe4bc[67]]&&(_0x5d2ax3=_0xe4bc[813]))));return _0x5d2ax3};mxCodec[_0xe4bc[202]][_0xe4bc[3237]]=function(_0x5d2ax2){return null};mxCodec[_0xe4bc[202]][_0xe4bc[514]]=function(_0x5d2ax2){var _0x5d2ax3=null;if(null!=_0x5d2ax2&&null!=_0x5d2ax2[_0xe4bc[196]]){var _0x5d2ax4=mxCodecRegistry[_0xe4bc[3238]](_0x5d2ax2[_0xe4bc[196]]);null!=_0x5d2ax4?_0x5d2ax3=_0x5d2ax4[_0xe4bc[514]](this,_0x5d2ax2):mxUtils[_0xe4bc[1331]](_0x5d2ax2)?_0x5d2ax3=mxClient[_0xe4bc[80]]?_0x5d2ax2[_0xe4bc[511]](!0):this[_0xe4bc[395]][_0xe4bc[3239]](_0x5d2ax2,!0):mxLog[_0xe4bc[283]](_0xe4bc[3240]+mxUtils[_0xe4bc[197]](_0x5d2ax2[_0xe4bc[196]]))};return _0x5d2ax3};mxCodec[_0xe4bc[202]][_0xe4bc[1093]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=null;if(null!=_0x5d2ax2&&_0x5d2ax2[_0xe4bc[288]]==mxConstants[_0xe4bc[289]]){var _0x5d2ax5=null;try{_0x5d2ax5=eval(_0x5d2ax2[_0xe4bc[301]])}catch(e){};try{var _0x5d2axa=mxCodecRegistry[_0xe4bc[3238]](_0x5d2ax5);null!=_0x5d2axa?_0x5d2ax4=_0x5d2axa[_0xe4bc[1093]](this,_0x5d2ax2,_0x5d2ax3):(_0x5d2ax4=_0x5d2ax2[_0xe4bc[511]](!0),_0x5d2ax4[_0xe4bc[1390]](_0xe4bc[3069]))}catch(g){mxLog[_0xe4bc[143]](_0xe4bc[3241]+_0x5d2ax2[_0xe4bc[301]]+_0xe4bc[3186]+g[_0xe4bc[281]])}};return _0x5d2ax4};mxCodec[_0xe4bc[202]][_0xe4bc[3242]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){_0x5d2ax3[_0xe4bc[62]](this[_0xe4bc[514]](_0x5d2ax2));if(null==_0x5d2ax4||_0x5d2ax4){_0x5d2ax4=_0x5d2ax2[_0xe4bc[262]]();for(var _0x5d2ax5=0;_0x5d2ax5<_0x5d2ax4;_0x5d2ax5++){this[_0xe4bc[3242]](_0x5d2ax2[_0xe4bc[263]](_0x5d2ax5),_0x5d2ax3)}}};mxCodec[_0xe4bc[202]][_0xe4bc[3243]]=function(_0x5d2ax2){return null!=_0x5d2ax2&&_0xe4bc[279]== typeof _0x5d2ax2[_0xe4bc[3243]]?_0x5d2ax2[_0xe4bc[3243]]():!1};mxCodec[_0xe4bc[202]][_0xe4bc[3244]]=function(_0x5d2ax2,_0x5d2ax3){_0x5d2ax3=null!=_0x5d2ax3?_0x5d2ax3:!0;var _0x5d2ax4=null;if(null!=_0x5d2ax2&&_0x5d2ax2[_0xe4bc[288]]==mxConstants[_0xe4bc[289]]){_0x5d2ax4=mxCodecRegistry[_0xe4bc[3238]](_0x5d2ax2[_0xe4bc[301]]);if(!this[_0xe4bc[3243]](_0x5d2ax4)){for(var _0x5d2ax5=_0x5d2ax2[_0xe4bc[285]];null!=_0x5d2ax5&&!this[_0xe4bc[3243]](_0x5d2ax4);){_0x5d2ax4=mxCodecRegistry[_0xe4bc[3238]](_0x5d2ax5[_0xe4bc[301]]),_0x5d2ax5=_0x5d2ax5[_0xe4bc[287]]}};this[_0xe4bc[3243]](_0x5d2ax4)||(_0x5d2ax4=mxCodecRegistry[_0xe4bc[3238]](mxCell));_0x5d2ax4=_0x5d2ax4[_0xe4bc[1093]](this,_0x5d2ax2);_0x5d2ax3&&this[_0xe4bc[3245]](_0x5d2ax4)};return _0x5d2ax4};mxCodec[_0xe4bc[202]][_0xe4bc[3245]]=function(_0x5d2ax2){var _0x5d2ax3=_0x5d2ax2[_0xe4bc[1101]],_0x5d2ax4=_0x5d2ax2[_0xe4bc[1709]](!0),_0x5d2ax5=_0x5d2ax2[_0xe4bc[1709]](!1);_0x5d2ax2[_0xe4bc[1957]](null,!1);_0x5d2ax2[_0xe4bc[1957]](null,!0);_0x5d2ax2[_0xe4bc[1101]]=null;null!=_0x5d2ax3&&_0x5d2ax3[_0xe4bc[1937]](_0x5d2ax2);null!=_0x5d2ax4&&_0x5d2ax4[_0xe4bc[1960]](_0x5d2ax2,!0);null!=_0x5d2ax5&&_0x5d2ax5[_0xe4bc[1960]](_0x5d2ax2,!1)};mxCodec[_0xe4bc[202]][_0xe4bc[57]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){null!=_0x5d2ax3&&null!=_0x5d2ax4&&_0x5d2ax2[_0xe4bc[57]](_0x5d2ax3,_0x5d2ax4)};function mxObjectCodec(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){this[_0xe4bc[3231]]=_0x5d2ax2;this[_0xe4bc[3246]]=null!=_0x5d2ax3?_0x5d2ax3:[];this[_0xe4bc[3247]]=null!=_0x5d2ax4?_0x5d2ax4:[];this[_0xe4bc[3248]]=null!=_0x5d2ax5?_0x5d2ax5:[];this[_0xe4bc[3249]]={};for(var _0x5d2ax9 in this[_0xe4bc[3248]]){this[_0xe4bc[3249]][this[_0xe4bc[3248]][_0x5d2ax9]]=_0x5d2ax9}}mxObjectCodec[_0xe4bc[202]][_0xe4bc[3231]]=null;mxObjectCodec[_0xe4bc[202]][_0xe4bc[3246]]=null;mxObjectCodec[_0xe4bc[202]][_0xe4bc[3247]]=null;mxObjectCodec[_0xe4bc[202]][_0xe4bc[3248]]=null;mxObjectCodec[_0xe4bc[202]][_0xe4bc[3249]]=null;mxObjectCodec[_0xe4bc[202]][_0xe4bc[718]]=function(){return mxUtils[_0xe4bc[197]](this[_0xe4bc[3231]][_0xe4bc[196]])};mxObjectCodec[_0xe4bc[202]][_0xe4bc[3250]]=function(){return  new this[_0xe4bc[3231]][_0xe4bc[196]]};mxObjectCodec[_0xe4bc[202]][_0xe4bc[3251]]=function(_0x5d2ax2){if(null!=_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[3249]][_0x5d2ax2];null!=_0x5d2ax3&&(_0x5d2ax2=_0x5d2ax3)};return _0x5d2ax2};mxObjectCodec[_0xe4bc[202]][_0xe4bc[3252]]=function(_0x5d2ax2){if(null!=_0x5d2ax2){var _0x5d2ax3=this[_0xe4bc[3248]][_0x5d2ax2];null!=_0x5d2ax3&&(_0x5d2ax2=_0x5d2ax3)};return _0x5d2ax2};mxObjectCodec[_0xe4bc[202]][_0xe4bc[3253]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){return _0x5d2ax3==mxObjectIdentity[_0xe4bc[195]]||0<=mxUtils[_0xe4bc[2]](this[_0xe4bc[3246]],_0x5d2ax3)};mxObjectCodec[_0xe4bc[202]][_0xe4bc[3254]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){return 0<=mxUtils[_0xe4bc[2]](this[_0xe4bc[3247]],_0x5d2ax3)};mxObjectCodec[_0xe4bc[202]][_0xe4bc[514]]=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4=_0x5d2ax2[_0xe4bc[395]][_0xe4bc[55]](this[_0xe4bc[718]]());_0x5d2ax3=this[_0xe4bc[3255]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4);this[_0xe4bc[3256]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4);return this[_0xe4bc[3257]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4)};mxObjectCodec[_0xe4bc[202]][_0xe4bc[3256]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){_0x5d2ax2[_0xe4bc[57]](_0x5d2ax4,_0xe4bc[1363],_0x5d2ax2[_0xe4bc[1103]](_0x5d2ax3));for(var _0x5d2ax5 in _0x5d2ax3){var _0x5d2ax9=_0x5d2ax5,_0x5d2axa=_0x5d2ax3[_0x5d2ax9];null!=_0x5d2axa&&!this[_0xe4bc[3253]](_0x5d2ax3,_0x5d2ax9,_0x5d2axa,!0)&&(mxUtils[_0xe4bc[1946]](_0x5d2ax9)&&(_0x5d2ax9=null),this[_0xe4bc[3258]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax9,_0x5d2axa,_0x5d2ax4))}};mxObjectCodec[_0xe4bc[202]][_0xe4bc[3258]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){if(null!=_0x5d2ax5){if(this[_0xe4bc[3254]](_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,!0)){var _0x5d2axa=_0x5d2ax2[_0xe4bc[1103]](_0x5d2ax5);if(null==_0x5d2axa){mxLog[_0xe4bc[283]](_0xe4bc[3259]+this[_0xe4bc[718]]()+_0xe4bc[87]+_0x5d2ax4+_0xe4bc[226]+_0x5d2ax5);return};_0x5d2ax5=_0x5d2axa};_0x5d2axa=this[_0xe4bc[3231]][_0x5d2ax4];if(null==_0x5d2ax4||_0x5d2ax2[_0xe4bc[3235]]||_0x5d2axa!=_0x5d2ax5){_0x5d2ax4=this[_0xe4bc[3252]](_0x5d2ax4),this[_0xe4bc[3260]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9)}}};mxObjectCodec[_0xe4bc[202]][_0xe4bc[3260]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){_0xe4bc[194]!= typeof _0x5d2ax5?this[_0xe4bc[3261]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9):this[_0xe4bc[3262]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9)};mxObjectCodec[_0xe4bc[202]][_0xe4bc[3261]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){_0x5d2ax5=this[_0xe4bc[3263]](_0x5d2ax5);null==_0x5d2ax4?(_0x5d2ax3=_0x5d2ax2[_0xe4bc[395]][_0xe4bc[55]](_0xe4bc[99]),_0xe4bc[279]== typeof _0x5d2ax5?_0x5d2ax3[_0xe4bc[62]](_0x5d2ax2[_0xe4bc[395]][_0xe4bc[344]](_0x5d2ax5)):_0x5d2ax2[_0xe4bc[57]](_0x5d2ax3,_0xe4bc[131],_0x5d2ax5),_0x5d2ax9[_0xe4bc[62]](_0x5d2ax3)):_0xe4bc[279]!= typeof _0x5d2ax5&&_0x5d2ax2[_0xe4bc[57]](_0x5d2ax9,_0x5d2ax4,_0x5d2ax5)};mxObjectCodec[_0xe4bc[202]][_0xe4bc[3262]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){_0x5d2ax2=_0x5d2ax2[_0xe4bc[514]](_0x5d2ax5);null!=_0x5d2ax2?(null!=_0x5d2ax4&&_0x5d2ax2[_0xe4bc[57]](_0xe4bc[3069],_0x5d2ax4),_0x5d2ax9[_0xe4bc[62]](_0x5d2ax2)):mxLog[_0xe4bc[283]](_0xe4bc[3264]+this[_0xe4bc[718]]()+_0xe4bc[87]+_0x5d2ax4+_0xe4bc[3186]+_0x5d2ax5)};mxObjectCodec[_0xe4bc[202]][_0xe4bc[3263]]=function(_0x5d2ax2){if(_0xe4bc[82]== typeof _0x5d2ax2[_0xe4bc[67]]&&(!0==_0x5d2ax2||!1==_0x5d2ax2)){_0x5d2ax2=!0==_0x5d2ax2?_0xe4bc[500]:_0xe4bc[468]};return _0x5d2ax2};mxObjectCodec[_0xe4bc[202]][_0xe4bc[3265]]=function(_0x5d2ax2){mxUtils[_0xe4bc[1946]](_0x5d2ax2)&&(_0x5d2ax2=parseFloat(_0x5d2ax2));return _0x5d2ax2};mxObjectCodec[_0xe4bc[202]][_0xe4bc[3255]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){return _0x5d2ax3};mxObjectCodec[_0xe4bc[202]][_0xe4bc[3257]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){return _0x5d2ax4};mxObjectCodec[_0xe4bc[202]][_0xe4bc[1093]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){var _0x5d2ax5=_0x5d2ax3[_0xe4bc[284]](_0xe4bc[1363]),_0x5d2ax9=_0x5d2ax2[_0xe4bc[68]][_0x5d2ax5];null==_0x5d2ax9&&(_0x5d2ax9=_0x5d2ax4||this[_0xe4bc[3250]](),null!=_0x5d2ax5&&_0x5d2ax2[_0xe4bc[1104]](_0x5d2ax5,_0x5d2ax9));_0x5d2ax3=this[_0xe4bc[3266]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax9);this[_0xe4bc[3267]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax9);return this[_0xe4bc[3268]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax9)};mxObjectCodec[_0xe4bc[202]][_0xe4bc[3267]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){null!=_0x5d2ax3&&(this[_0xe4bc[3269]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4),this[_0xe4bc[3270]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4))};mxObjectCodec[_0xe4bc[202]][_0xe4bc[3269]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){_0x5d2ax3=_0x5d2ax3[_0xe4bc[320]];if(null!=_0x5d2ax3){for(var _0x5d2ax5=0;_0x5d2ax5<_0x5d2ax3[_0xe4bc[67]];_0x5d2ax5++){this[_0xe4bc[3271]](_0x5d2ax2,_0x5d2ax3[_0x5d2ax5],_0x5d2ax4)}}};mxObjectCodec[_0xe4bc[202]][_0xe4bc[3271]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){var _0x5d2ax5=_0x5d2ax3[_0xe4bc[301]];if(_0xe4bc[3069]!=_0x5d2ax5&&_0xe4bc[1363]!=_0x5d2ax5){_0x5d2ax3=this[_0xe4bc[3265]](_0x5d2ax3[_0xe4bc[318]]);var _0x5d2ax9=this[_0xe4bc[3251]](_0x5d2ax5);if(this[_0xe4bc[3254]](_0x5d2ax4,_0x5d2ax9,_0x5d2ax3,!1)){_0x5d2ax2=_0x5d2ax2[_0xe4bc[3236]](_0x5d2ax3);if(null==_0x5d2ax2){mxLog[_0xe4bc[283]](_0xe4bc[3272]+this[_0xe4bc[718]]()+_0xe4bc[87]+_0x5d2ax5+_0xe4bc[226]+_0x5d2ax3);return};_0x5d2ax3=_0x5d2ax2};this[_0xe4bc[3253]](_0x5d2ax4,_0x5d2ax5,_0x5d2ax3,!1)||(_0x5d2ax4[_0x5d2ax5]=_0x5d2ax3)}};mxObjectCodec[_0xe4bc[202]][_0xe4bc[3270]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){for(_0x5d2ax3=_0x5d2ax3[_0xe4bc[285]];null!=_0x5d2ax3;){var _0x5d2ax5=_0x5d2ax3[_0xe4bc[287]];_0x5d2ax3[_0xe4bc[288]]==mxConstants[_0xe4bc[289]]&&!this[_0xe4bc[3273]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4)&&this[_0xe4bc[3274]](_0x5d2ax2,_0x5d2ax3,_0x5d2ax4);_0x5d2ax3=_0x5d2ax5}};mxObjectCodec[_0xe4bc[202]][_0xe4bc[3274]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){var _0x5d2ax5=this[_0xe4bc[3251]](_0x5d2ax3[_0xe4bc[284]](_0xe4bc[3069]));if(null==_0x5d2ax5||!this[_0xe4bc[3253]](_0x5d2ax4,_0x5d2ax5,_0x5d2ax3,!1)){var _0x5d2ax9=this[_0xe4bc[3275]](_0x5d2ax4,_0x5d2ax5,_0x5d2ax3),_0x5d2axa=null;_0xe4bc[99]==_0x5d2ax3[_0xe4bc[301]]?(_0x5d2axa=_0x5d2ax3[_0xe4bc[284]](_0xe4bc[131]),null==_0x5d2axa&&(_0x5d2axa=mxUtils[_0xe4bc[1545]](mxUtils[_0xe4bc[329]](_0x5d2ax3)))):_0x5d2axa=_0x5d2ax2[_0xe4bc[1093]](_0x5d2ax3,_0x5d2ax9);this[_0xe4bc[3276]](_0x5d2ax4,_0x5d2ax5,_0x5d2axa,_0x5d2ax9)}};mxObjectCodec[_0xe4bc[202]][_0xe4bc[3275]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){_0x5d2ax2=_0x5d2ax2[_0x5d2ax3];_0x5d2ax2 instanceof Array&&0<_0x5d2ax2[_0xe4bc[67]]&&(_0x5d2ax2=null);return _0x5d2ax2};mxObjectCodec[_0xe4bc[202]][_0xe4bc[3276]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4,_0x5d2ax5){null!=_0x5d2ax4&&_0x5d2ax4!=_0x5d2ax5&&(null!=_0x5d2ax3&&0<_0x5d2ax3[_0xe4bc[67]]?_0x5d2ax2[_0x5d2ax3]=_0x5d2ax4:_0x5d2ax2[_0xe4bc[207]](_0x5d2ax4))};mxObjectCodec[_0xe4bc[202]][_0xe4bc[3273]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){if(_0xe4bc[3277]==_0x5d2ax3[_0xe4bc[301]]){_0x5d2ax3=_0x5d2ax3[_0xe4bc[284]](_0xe4bc[298]);if(null!=_0x5d2ax3){try{var _0x5d2ax5=mxUtils[_0xe4bc[219]](_0x5d2ax3)[_0xe4bc[874]]();null!=_0x5d2ax5&&_0x5d2ax2[_0xe4bc[1093]](_0x5d2ax5,_0x5d2ax4)}catch(e){}};return !0};return !1};mxObjectCodec[_0xe4bc[202]][_0xe4bc[3266]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){return _0x5d2ax3};mxObjectCodec[_0xe4bc[202]][_0xe4bc[3268]]=function(_0x5d2ax2,_0x5d2ax3,_0x5d2ax4){return _0x5d2ax4};mxCodecRegistry[_0xe4bc[3234]](function(){var _0x5d2ax2= new mxObjectCodec( new mxCell,[_0xe4bc[1954],_0xe4bc[1842],_0xe4bc[1211],_0xe4bc[1991]],[_0xe4bc[1101],_0xe4bc[1097],_0xe4bc[772]]);_0x5d2ax2[_0xe4bc[3243]]=function(){return !0};_0x5d2ax2[_0xe4bc[3253]]=function(_0x5d2ax2,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){return mxObjectCodec[_0xe4bc[202]][_0xe4bc[3253]][_0xe4bc[183]](this,arguments)||_0x5d2ax9&&_0xe4bc[131]==_0x5d2ax4&&_0x5d2ax5[_0xe4bc[288]]==mxConstants[_0xe4bc[289]]};_0x5d2ax2[_0xe4bc[3257]]=function(_0x5d2ax2,_0x5d2ax4,_0x5d2ax5){if(null!=_0x5d2ax4[_0xe4bc[131]]&&_0x5d2ax4[_0xe4bc[131]][_0xe4bc[288]]==mxConstants[_0xe4bc[289]]){var _0x5d2ax9=_0x5d2ax5;_0x5d2ax5=mxClient[_0xe4bc[80]]?_0x5d2ax4[_0xe4bc[131]][_0xe4bc[511]](!0):_0x5d2ax2[_0xe4bc[395]][_0xe4bc[3239]](_0x5d2ax4[_0xe4bc[131]],!0);_0x5d2ax5[_0xe4bc[62]](_0x5d2ax9);_0x5d2ax2=_0x5d2ax9[_0xe4bc[284]](_0xe4bc[1363]);_0x5d2ax5[_0xe4bc[57]](_0xe4bc[1363],_0x5d2ax2);_0x5d2ax9[_0xe4bc[1390]](_0xe4bc[1363])};return _0x5d2ax5};_0x5d2ax2[_0xe4bc[3266]]=function(_0x5d2ax2,_0x5d2ax4,_0x5d2ax5){var _0x5d2ax9=_0x5d2ax4,_0x5d2axa=this[_0xe4bc[718]]();_0x5d2ax4[_0xe4bc[301]]!=_0x5d2axa?(_0x5d2ax9=_0x5d2ax4[_0xe4bc[64]](_0x5d2axa)[0],null!=_0x5d2ax9&&_0x5d2ax9[_0xe4bc[265]]==_0x5d2ax4?(mxUtils[_0xe4bc[3278]](_0x5d2ax9,!0),mxUtils[_0xe4bc[3278]](_0x5d2ax9,!1),_0x5d2ax9[_0xe4bc[265]][_0xe4bc[266]](_0x5d2ax9)):_0x5d2ax9=null,_0x5d2ax5[_0xe4bc[131]]=_0x5d2ax4[_0xe4bc[511]](!0),_0x5d2ax4=_0x5d2ax5[_0xe4bc[131]][_0xe4bc[284]](_0xe4bc[1363]),null!=_0x5d2ax4&&(_0x5d2ax5[_0xe4bc[1945]](_0x5d2ax4),_0x5d2ax5[_0xe4bc[131]][_0xe4bc[1390]](_0xe4bc[1363]))):_0x5d2ax5[_0xe4bc[1945]](_0x5d2ax4[_0xe4bc[284]](_0xe4bc[1363]));if(null!=_0x5d2ax9){for(_0x5d2ax4=0;_0x5d2ax4<this[_0xe4bc[3247]][_0xe4bc[67]];_0x5d2ax4++){var _0x5d2axa=this[_0xe4bc[3247]][_0x5d2ax4],_0x5d2ax12=_0x5d2ax9[_0xe4bc[284]](_0x5d2axa);if(null!=_0x5d2ax12){_0x5d2ax9[_0xe4bc[1390]](_0x5d2axa);var _0x5d2ax13=_0x5d2ax2[_0xe4bc[68]][_0x5d2ax12]||_0x5d2ax2[_0xe4bc[1060]](_0x5d2ax12);null==_0x5d2ax13&&(_0x5d2ax12=_0x5d2ax2[_0xe4bc[1362]](_0x5d2ax12),null!=_0x5d2ax12&&(_0x5d2ax13=(mxCodecRegistry[_0xe4bc[3230]][_0x5d2ax12[_0xe4bc[301]]]||this)[_0xe4bc[1093]](_0x5d2ax2,_0x5d2ax12)));_0x5d2ax5[_0x5d2axa]=_0x5d2ax13}}};return _0x5d2ax9};return _0x5d2ax2}());mxCodecRegistry[_0xe4bc[3234]](function(){var _0x5d2ax2= new mxObjectCodec( new mxGraphModel);_0x5d2ax2[_0xe4bc[3256]]=function(_0x5d2ax2,_0x5d2ax4,_0x5d2ax5){var _0x5d2ax9=_0x5d2ax2[_0xe4bc[395]][_0xe4bc[55]](_0xe4bc[813]);_0x5d2ax2[_0xe4bc[3242]](_0x5d2ax4[_0xe4bc[501]](),_0x5d2ax9);_0x5d2ax5[_0xe4bc[62]](_0x5d2ax9)};_0x5d2ax2[_0xe4bc[3274]]=function(_0x5d2ax2,_0x5d2ax4,_0x5d2ax5){_0xe4bc[813]==_0x5d2ax4[_0xe4bc[301]]?this[_0xe4bc[3279]](_0x5d2ax2,_0x5d2ax4,_0x5d2ax5):mxObjectCodec[_0xe4bc[202]][_0xe4bc[3274]][_0xe4bc[183]](this,arguments)};_0x5d2ax2[_0xe4bc[3279]]=function(_0x5d2ax2,_0x5d2ax4,_0x5d2ax5){var _0x5d2ax9=null;for(_0x5d2ax4=_0x5d2ax4[_0xe4bc[285]];null!=_0x5d2ax4;){var _0x5d2axa=_0x5d2ax2[_0xe4bc[3244]](_0x5d2ax4);null!=_0x5d2axa&&null==_0x5d2axa[_0xe4bc[1197]]()&&(_0x5d2ax9=_0x5d2axa);_0x5d2ax4=_0x5d2ax4[_0xe4bc[287]]};null!=_0x5d2ax9&&_0x5d2ax5[_0xe4bc[1927]](_0x5d2ax9)};return _0x5d2ax2}());mxCodecRegistry[_0xe4bc[3234]](function(){var _0x5d2ax2= new mxObjectCodec( new mxRootChange,[_0xe4bc[251],_0xe4bc[257],_0xe4bc[813]]);_0x5d2ax2[_0xe4bc[3257]]=function(_0x5d2ax2,_0x5d2ax4,_0x5d2ax5){_0x5d2ax2[_0xe4bc[3242]](_0x5d2ax4[_0xe4bc[813]],_0x5d2ax5);return _0x5d2ax5};_0x5d2ax2[_0xe4bc[3266]]=function(_0x5d2ax2,_0x5d2ax4,_0x5d2ax5){if(null!=_0x5d2ax4[_0xe4bc[285]]&&_0x5d2ax4[_0xe4bc[285]][_0xe4bc[288]]==mxConstants[_0xe4bc[289]]){_0x5d2ax4=_0x5d2ax4[_0xe4bc[511]](!0);var _0x5d2ax9=_0x5d2ax4[_0xe4bc[285]];_0x5d2ax5[_0xe4bc[813]]=_0x5d2ax2[_0xe4bc[3244]](_0x5d2ax9,!1);_0x5d2ax5=_0x5d2ax9[_0xe4bc[287]];_0x5d2ax9[_0xe4bc[265]][_0xe4bc[266]](_0x5d2ax9);for(_0x5d2ax9=_0x5d2ax5;null!=_0x5d2ax9;){_0x5d2ax5=_0x5d2ax9[_0xe4bc[287]],_0x5d2ax2[_0xe4bc[3244]](_0x5d2ax9),_0x5d2ax9[_0xe4bc[265]][_0xe4bc[266]](_0x5d2ax9),_0x5d2ax9=_0x5d2ax5}};return _0x5d2ax4};_0x5d2ax2[_0xe4bc[3268]]=function(_0x5d2ax2,_0x5d2ax4,_0x5d2ax5){_0x5d2ax5[_0xe4bc[257]]=_0x5d2ax5[_0xe4bc[813]];return _0x5d2ax5};return _0x5d2ax2}());mxCodecRegistry[_0xe4bc[3234]](function(){var _0x5d2ax2= new mxObjectCodec( new mxChildChange,[_0xe4bc[251],_0xe4bc[247],_0xe4bc[1982]],[_0xe4bc[1101],_0xe4bc[257]]);_0x5d2ax2[_0xe4bc[3254]]=function(_0x5d2ax2,_0x5d2ax4,_0x5d2ax5,_0x5d2ax9){return _0xe4bc[247]==_0x5d2ax4&&(null!=_0x5d2ax2[_0xe4bc[257]]|| !_0x5d2ax9)?!0:0<=mxUtils[_0xe4bc[2]](this[_0xe4bc[3247]],_0x5d2ax4)};_0x5d2ax2[_0xe4bc[3257]]=function(_0x5d2ax2,_0x5d2ax4,_0x5d2ax5){this[_0xe4bc[3254]](_0x5d2ax4,_0xe4bc[247],_0x5d2ax4[_0xe4bc[247]],!0)?_0x5d2ax5[_0xe4bc[57]](_0xe4bc[247],_0x5d2ax2[_0xe4bc[1103]](_0x5d2ax4[_0xe4bc[247]])):_0x5d2ax2[_0xe4bc[3242]](_0x5d2ax4[_0xe4bc[247]],_0x5d2ax5);return _0x5d2ax5};_0x5d2ax2[_0xe4bc[3266]]=function(_0x5d2ax2,_0x5d2ax4,_0x5d2ax5){if(null!=_0x5d2ax4[_0xe4bc[285]]&&_0x5d2ax4[_0xe4bc[285]][_0xe4bc[288]]==mxConstants[_0xe4bc[289]]){_0x5d2ax4=_0x5d2ax4[_0xe4bc[511]](!0);var _0x5d2ax9=_0x5d2ax4[_0xe4bc[285]];_0x5d2ax5[_0xe4bc[247]]=_0x5d2ax2[_0xe4bc[3244]](_0x5d2ax9,!1);_0x5d2ax5=_0x5d2ax9[_0xe4bc[287]];_0x5d2ax9[_0xe4bc[265]][_0xe4bc[266]](_0x5d2ax9);for(_0x5d2ax9=_0x5d2ax5;null!=_0x5d2ax9;){_0x5d2ax5=_0x5d2ax9[_0xe4bc[287]];if(_0x5d2ax9[_0xe4bc[288]]==mxConstants[_0xe4bc[289]]){var _0x5d2axa=_0x5d2ax9[_0xe4bc[284]](_0xe4bc[1363]);null==_0x5d2ax2[_0xe4bc[1060]](_0x5d2axa)&&_0x5d2ax2[_0xe4bc[3244]](_0x5d2ax9)};_0x5d2ax9[_0xe4bc[265]][_0xe4bc[266]](_0x5d2ax9);_0x5d2ax9=_0x5d2ax5}}else {_0x5d2ax9=_0x5d2ax4[_0xe4bc[284]](_0xe4bc[247]),_0x5d2ax5[_0xe4bc[247]]=_0x5d2ax2[_0xe4bc[3236]](_0x5d2ax9)};return _0x5d2ax4};_0x5d2ax2[_0xe4bc[3268]]=function(_0x5d2ax2,_0x5d2ax4,_0x5d2ax5){_0x5d2ax5[_0xe4bc[247]][_0xe4bc[1101]]=_0x5d2ax5[_0xe4bc[257]];_0x5d2ax5[_0xe4bc[257]]=_0x5d2ax5[_0xe4bc[1101]];_0x5d2ax5[_0xe4bc[1982]]=_0x5d2ax5[_0xe4bc[1983]];return _0x5d2ax5};return _0x5d2ax2}());mxCodecRegistry[_0xe4bc[3234]](function(){var _0x5d2ax2= new mxObjectCodec( new mxTerminalChange,[_0xe4bc[251],_0xe4bc[257]],[_0xe4bc[246],_0xe4bc[1984]]);_0x5d2ax2[_0xe4bc[3268]]=function(_0x5d2ax2,_0x5d2ax4,_0x5d2ax5){_0x5d2ax5[_0xe4bc[257]]=_0x5d2ax5[_0xe4bc[1984]];return _0x5d2ax5};return _0x5d2ax2}());var mxGenericChangeCodec=function(_0x5d2ax2,_0x5d2ax3){var _0x5d2ax4= new mxObjectCodec(_0x5d2ax2,[_0xe4bc[251],_0xe4bc[257]],[_0xe4bc[246]]);_0x5d2ax4[_0xe4bc[3268]]=function(_0x5d2ax2,_0x5d2ax4,_0x5d2axa){mxUtils[_0xe4bc[1331]](_0x5d2axa[_0xe4bc[246]])&&(_0x5d2axa[_0xe4bc[246]]=_0x5d2ax2[_0xe4bc[3244]](_0x5d2axa[_0xe4bc[246]],!1));_0x5d2axa[_0xe4bc[257]]=_0x5d2axa[_0x5d2ax3];return _0x5d2axa};return _0x5d2ax4};mxCodecRegistry[_0xe4bc[3234]](mxGenericChangeCodec( new mxValueChange,_0xe4bc[131]));mxCodecRegistry[_0xe4bc[3234]](mxGenericChangeCodec( new mxStyleChange,_0xe4bc[124]));mxCodecRegistry[_0xe4bc[3234]](mxGenericChangeCodec( new mxGeometryChange,_0xe4bc[256]));mxCodecRegistry[_0xe4bc[3234]](mxGenericChangeCodec( new mxCollapseChange,_0xe4bc[1985]));mxCodecRegistry[_0xe4bc[3234]](mxGenericChangeCodec( new mxVisibleChange,_0xe4bc[189]));mxCodecRegistry[_0xe4bc[3234]](mxGenericChangeCodec( new mxCellAttributeChange,_0xe4bc[131]));mxCodecRegistry[_0xe4bc[3234]](function(){return  new mxObjectCodec( new mxGraph,_0xe4bc[3280][_0xe4bc[224]](_0xe4bc[185]))}());mxCodecRegistry[_0xe4bc[3234]](function(){var _0x5d2ax2= new mxObjectCodec( new mxGraphView);_0x5d2ax2[_0xe4bc[514]]=function(_0x5d2ax2,_0x5d2ax4){return this[_0xe4bc[3242]](_0x5d2ax2,_0x5d2ax4,_0x5d2ax4[_0xe4bc[1179]][_0xe4bc[502]]()[_0xe4bc[501]]())};_0x5d2ax2[_0xe4bc[3242]]=function(_0x5d2ax2,_0x5d2ax4,_0x5d2ax5){var _0x5d2ax9=_0x5d2ax4[_0xe4bc[1179]][_0xe4bc[502]](),_0x5d2axa=_0x5d2ax4[_0xe4bc[248]](_0x5d2ax5),_0x5d2ax12=_0x5d2ax9[_0xe4bc[1197]](_0x5d2ax5);if(null==_0x5d2ax12||null!=_0x5d2axa){var _0x5d2ax13=_0x5d2ax9[_0xe4bc[262]](_0x5d2ax5),_0x5d2ax14=_0x5d2ax4[_0xe4bc[1179]][_0xe4bc[1198]](_0x5d2ax5),_0x5d2ax15=null;_0x5d2ax12==_0x5d2ax9[_0xe4bc[501]]()?_0x5d2ax15=_0xe4bc[3281]:null==_0x5d2ax12?_0x5d2ax15=_0xe4bc[1179]:_0x5d2ax9[_0xe4bc[250]](_0x5d2ax5)?_0x5d2ax15=_0xe4bc[1989]:0<_0x5d2ax13&&null!=_0x5d2ax14?_0x5d2ax15=_0xe4bc[1504]:_0x5d2ax9[_0xe4bc[1193]](_0x5d2ax5)&&(_0x5d2ax15=_0xe4bc[1988]);if(null!=_0x5d2ax15){var _0x5d2ax16=_0x5d2ax2[_0xe4bc[395]][_0xe4bc[55]](_0x5d2ax15);null!=_0x5d2ax4[_0xe4bc[1179]][_0xe4bc[2183]](_0x5d2ax5)&&(_0x5d2ax16[_0xe4bc[57]](_0xe4bc[685],_0x5d2ax4[_0xe4bc[1179]][_0xe4bc[2183]](_0x5d2ax5)),_0x5d2ax4[_0xe4bc[1179]][_0xe4bc[2186]](_0x5d2ax5)&&_0x5d2ax16[_0xe4bc[57]](_0xe4bc[1428],!0));if(null==_0x5d2ax12){var _0x5d2ax17=_0x5d2ax4[_0xe4bc[517]]();null!=_0x5d2ax17&&(_0x5d2ax16[_0xe4bc[57]](_0xe4bc[235],Math[_0xe4bc[488]](_0x5d2ax17[_0xe4bc[235]])),_0x5d2ax16[_0xe4bc[57]](_0xe4bc[236],Math[_0xe4bc[488]](_0x5d2ax17[_0xe4bc[236]])),_0x5d2ax16[_0xe4bc[57]](_0xe4bc[117],Math[_0xe4bc[488]](_0x5d2ax17[_0xe4bc[117]])),_0x5d2ax16[_0xe4bc[57]](_0xe4bc[119],Math[_0xe4bc[488]](_0x5d2ax17[_0xe4bc[119]])));_0x5d2ax16[_0xe4bc[57]](_0xe4bc[255],_0x5d2ax4[_0xe4bc[255]])}else {if(null!=_0x5d2axa&&null!=_0x5d2ax14){for(_0x5d2ax17 in _0x5d2axa[_0xe4bc[124]]){_0x5d2ax12=_0x5d2axa[_0xe4bc[124]][_0x5d2ax17],_0xe4bc[279]== typeof _0x5d2ax12&&_0xe4bc[194]== typeof _0x5d2ax12&&(_0x5d2ax12=mxStyleRegistry[_0xe4bc[718]](_0x5d2ax12)),null!=_0x5d2ax12&&(_0xe4bc[279]!= typeof _0x5d2ax12&&_0xe4bc[194]!= typeof _0x5d2ax12)&&_0x5d2ax16[_0xe4bc[57]](_0x5d2ax17,_0x5d2ax12)};_0x5d2ax12=_0x5d2axa[_0xe4bc[439]];if(null!=_0x5d2ax12&&0<_0x5d2ax12[_0xe4bc[67]]){_0x5d2ax14=Math[_0xe4bc[488]](_0x5d2ax12[0][_0xe4bc[235]])+_0xe4bc[537]+Math[_0xe4bc[488]](_0x5d2ax12[0][_0xe4bc[236]]);for(_0x5d2ax17=1;_0x5d2ax17<_0x5d2ax12[_0xe4bc[67]];_0x5d2ax17++){_0x5d2ax14+=_0xe4bc[185]+Math[_0xe4bc[488]](_0x5d2ax12[_0x5d2ax17][_0xe4bc[235]])+_0xe4bc[537]+Math[_0xe4bc[488]](_0x5d2ax12[_0x5d2ax17][_0xe4bc[236]])};_0x5d2ax16[_0xe4bc[57]](_0xe4bc[1525],_0x5d2ax14)}else {_0x5d2ax16[_0xe4bc[57]](_0xe4bc[235],Math[_0xe4bc[488]](_0x5d2axa[_0xe4bc[235]])),_0x5d2ax16[_0xe4bc[57]](_0xe4bc[236],Math[_0xe4bc[488]](_0x5d2axa[_0xe4bc[236]])),_0x5d2ax16[_0xe4bc[57]](_0xe4bc[117],Math[_0xe4bc[488]](_0x5d2axa[_0xe4bc[117]])),_0x5d2ax16[_0xe4bc[57]](_0xe4bc[119],Math[_0xe4bc[488]](_0x5d2axa[_0xe4bc[119]]))};_0x5d2ax17=_0x5d2axa[_0xe4bc[2079]];null!=_0x5d2ax17&&(0!=_0x5d2ax17[_0xe4bc[235]]&&_0x5d2ax16[_0xe4bc[57]](_0xe4bc[1126],Math[_0xe4bc[488]](_0x5d2ax17[_0xe4bc[235]])),0!=_0x5d2ax17[_0xe4bc[236]]&&_0x5d2ax16[_0xe4bc[57]](_0xe4bc[1125],Math[_0xe4bc[488]](_0x5d2ax17[_0xe4bc[236]])))}};for(_0x5d2ax17=0;_0x5d2ax17<_0x5d2ax13;_0x5d2ax17++){_0x5d2axa=this[_0xe4bc[3242]](_0x5d2ax2,_0x5d2ax4,_0x5d2ax9[_0xe4bc[263]](_0x5d2ax5,_0x5d2ax17)),null!=_0x5d2axa&&_0x5d2ax16[_0xe4bc[62]](_0x5d2axa)}}};return _0x5d2ax16};return _0x5d2ax2}());mxCodecRegistry[_0xe4bc[3234]](function(){var _0x5d2ax2= new mxObjectCodec( new mxStylesheet);_0x5d2ax2[_0xe4bc[514]]=function(_0x5d2ax2,_0x5d2ax4){var _0x5d2ax5=_0x5d2ax2[_0xe4bc[395]][_0xe4bc[55]](this[_0xe4bc[718]]()),_0x5d2ax9;for(_0x5d2ax9 in _0x5d2ax4[_0xe4bc[2054]]){var _0x5d2axa=_0x5d2ax4[_0xe4bc[2054]][_0x5d2ax9],_0x5d2ax12=_0x5d2ax2[_0xe4bc[395]][_0xe4bc[55]](_0xe4bc[99]);if(null!=_0x5d2ax9){_0x5d2ax12[_0xe4bc[57]](_0xe4bc[3069],_0x5d2ax9);for(var _0x5d2ax13 in _0x5d2axa){var _0x5d2ax14=this[_0xe4bc[3282]](_0x5d2ax13,_0x5d2axa[_0x5d2ax13]);if(null!=_0x5d2ax14){var _0x5d2ax15=_0x5d2ax2[_0xe4bc[395]][_0xe4bc[55]](_0xe4bc[99]);_0x5d2ax15[_0xe4bc[57]](_0xe4bc[131],_0x5d2ax14);_0x5d2ax15[_0xe4bc[57]](_0xe4bc[3069],_0x5d2ax13);_0x5d2ax12[_0xe4bc[62]](_0x5d2ax15)}};0<_0x5d2ax12[_0xe4bc[271]][_0xe4bc[67]]&&_0x5d2ax5[_0xe4bc[62]](_0x5d2ax12)}};return _0x5d2ax5};_0x5d2ax2[_0xe4bc[3282]]=function(_0x5d2ax2,_0x5d2ax4){var _0x5d2ax5= typeof _0x5d2ax4;_0xe4bc[279]==_0x5d2ax5?_0x5d2ax4=mxStyleRegistry[_0xe4bc[718]](style[j]):_0xe4bc[194]==_0x5d2ax5&&(_0x5d2ax4=null);return _0x5d2ax4};_0x5d2ax2[_0xe4bc[1093]]=function(_0x5d2ax2,_0x5d2ax4,_0x5d2ax5){_0x5d2ax5=_0x5d2ax5|| new this[_0xe4bc[3231]][_0xe4bc[196]];var _0x5d2ax9=_0x5d2ax4[_0xe4bc[284]](_0xe4bc[1363]);null!=_0x5d2ax9&&(_0x5d2ax2[_0xe4bc[68]][_0x5d2ax9]=_0x5d2ax5);for(_0x5d2ax4=_0x5d2ax4[_0xe4bc[285]];null!=_0x5d2ax4;){if(!this[_0xe4bc[3273]](_0x5d2ax2,_0x5d2ax4,_0x5d2ax5)&&_0xe4bc[99]==_0x5d2ax4[_0xe4bc[301]]&&(_0x5d2ax9=_0x5d2ax4[_0xe4bc[284]](_0xe4bc[3069]),null!=_0x5d2ax9)){var _0x5d2axa=_0x5d2ax4[_0xe4bc[284]](_0xe4bc[1284]),_0x5d2ax12=null!=_0x5d2axa?mxUtils[_0xe4bc[238]](_0x5d2ax5[_0xe4bc[2054]][_0x5d2axa]):null;null==_0x5d2ax12&&(null!=_0x5d2axa&&mxLog[_0xe4bc[283]](_0xe4bc[3283]+_0x5d2axa+_0xe4bc[3284]),_0x5d2ax12={});for(_0x5d2axa=_0x5d2ax4[_0xe4bc[285]];null!=_0x5d2axa;){if(_0x5d2axa[_0xe4bc[288]]==mxConstants[_0xe4bc[289]]){var _0x5d2ax13=_0x5d2axa[_0xe4bc[284]](_0xe4bc[3069]);if(_0xe4bc[99]==_0x5d2axa[_0xe4bc[301]]){var _0x5d2ax14=mxUtils[_0xe4bc[329]](_0x5d2axa),_0x5d2ax15=null;null!=_0x5d2ax14&&0<_0x5d2ax14[_0xe4bc[67]]?_0x5d2ax15=mxUtils[_0xe4bc[1545]](_0x5d2ax14):(_0x5d2ax15=_0x5d2axa[_0xe4bc[284]](_0xe4bc[131]),mxUtils[_0xe4bc[1946]](_0x5d2ax15)&&(_0x5d2ax15=parseFloat(_0x5d2ax15)));null!=_0x5d2ax15&&(_0x5d2ax12[_0x5d2ax13]=_0x5d2ax15)}else {_0xe4bc[205]==_0x5d2axa[_0xe4bc[301]]&& delete _0x5d2ax12[_0x5d2ax13]}};_0x5d2axa=_0x5d2axa[_0xe4bc[287]]};_0x5d2ax5[_0xe4bc[2074]](_0x5d2ax9,_0x5d2ax12)};_0x5d2ax4=_0x5d2ax4[_0xe4bc[287]]};return _0x5d2ax5};return _0x5d2ax2}());mxCodecRegistry[_0xe4bc[3234]](function(){var _0x5d2ax2= new mxObjectCodec( new mxDefaultKeyHandler);_0x5d2ax2[_0xe4bc[514]]=function(_0x5d2ax2,_0x5d2ax4){return null};_0x5d2ax2[_0xe4bc[1093]]=function(_0x5d2ax2,_0x5d2ax4,_0x5d2ax5){if(null!=_0x5d2ax5){for(_0x5d2ax4=_0x5d2ax4[_0xe4bc[285]];null!=_0x5d2ax4;){if(!this[_0xe4bc[3273]](_0x5d2ax2,_0x5d2ax4,_0x5d2ax5)&&_0xe4bc[99]==_0x5d2ax4[_0xe4bc[301]]){var _0x5d2ax9=_0x5d2ax4[_0xe4bc[284]](_0xe4bc[3069]),_0x5d2axa=_0x5d2ax4[_0xe4bc[284]](_0xe4bc[892]),_0x5d2ax12=_0x5d2ax4[_0xe4bc[284]](_0xe4bc[2207]);_0x5d2ax5[_0xe4bc[3063]](_0x5d2ax9,_0x5d2axa,_0x5d2ax12)};_0x5d2ax4=_0x5d2ax4[_0xe4bc[287]]}};return _0x5d2ax5};return _0x5d2ax2}());mxCodecRegistry[_0xe4bc[3234]](function(){var _0x5d2ax2= new mxObjectCodec( new mxDefaultToolbar);_0x5d2ax2[_0xe4bc[514]]=function(_0x5d2ax2,_0x5d2ax4){return null};_0x5d2ax2[_0xe4bc[1093]]=function(_0x5d2ax2,_0x5d2ax4,_0x5d2ax5){if(null!=_0x5d2ax5){var _0x5d2ax9=_0x5d2ax5[_0xe4bc[3061]];for(_0x5d2ax4=_0x5d2ax4[_0xe4bc[285]];null!=_0x5d2ax4;){if(_0x5d2ax4[_0xe4bc[288]]==mxConstants[_0xe4bc[289]]&&!this[_0xe4bc[3273]](_0x5d2ax2,_0x5d2ax4,_0x5d2ax5)){if(_0xe4bc[3072]==_0x5d2ax4[_0xe4bc[301]]){_0x5d2ax5[_0xe4bc[1051]]()}else {if(_0xe4bc[345]==_0x5d2ax4[_0xe4bc[301]]){_0x5d2ax5[_0xe4bc[3082]][_0xe4bc[1052]]()}else {if(_0xe4bc[1054]==_0x5d2ax4[_0xe4bc[301]]){_0x5d2ax5[_0xe4bc[3082]][_0xe4bc[1053]]()}else {if(_0xe4bc[99]==_0x5d2ax4[_0xe4bc[301]]){var _0x5d2axa=_0x5d2ax4[_0xe4bc[284]](_0xe4bc[3069]),_0x5d2axa=mxResources[_0xe4bc[203]](_0x5d2axa)||_0x5d2axa,_0x5d2ax12=_0x5d2ax4[_0xe4bc[284]](_0xe4bc[2916]),_0x5d2ax13=_0x5d2ax4[_0xe4bc[284]](_0xe4bc[3285]),_0x5d2ax14=_0x5d2ax4[_0xe4bc[284]](_0xe4bc[892]),_0x5d2ax15=_0x5d2ax4[_0xe4bc[284]](_0xe4bc[3286]),_0x5d2ax16=_0x5d2ax4[_0xe4bc[284]](_0xe4bc[3231]),_0x5d2ax17=_0xe4bc[468]!=_0x5d2ax4[_0xe4bc[284]](_0xe4bc[3287]),_0x5d2ax18=mxUtils[_0xe4bc[329]](_0x5d2ax4),_0x5d2ax19=null;if(null!=_0x5d2ax14){_0x5d2ax19=_0x5d2ax5[_0xe4bc[1025]](_0x5d2axa,_0x5d2ax12,_0x5d2ax14,_0x5d2ax13)}else {if(null!=_0x5d2ax15){var _0x5d2ax1a=mxUtils[_0xe4bc[1545]](_0x5d2ax18),_0x5d2ax19=_0x5d2ax5[_0xe4bc[1048]](_0x5d2axa,_0x5d2ax12,_0x5d2ax15,_0x5d2ax13,_0x5d2ax1a)}else {if(null!=_0x5d2ax16||null!=_0x5d2ax18&&0<_0x5d2ax18[_0xe4bc[67]]){_0x5d2ax19=_0x5d2ax9[_0xe4bc[3118]][_0x5d2ax16],_0x5d2ax16=_0x5d2ax4[_0xe4bc[284]](_0xe4bc[124]),null!=_0x5d2ax19&&null!=_0x5d2ax16&&(_0x5d2ax19=_0x5d2ax19[_0xe4bc[238]](),_0x5d2ax19[_0xe4bc[475]](_0x5d2ax16)),_0x5d2ax16=null,null!=_0x5d2ax18&&0<_0x5d2ax18[_0xe4bc[67]]&&(_0x5d2ax16=mxUtils[_0xe4bc[1545]](_0x5d2ax18)),_0x5d2ax19=_0x5d2ax5[_0xe4bc[3087]](_0x5d2axa,_0x5d2ax12,_0x5d2ax19,_0x5d2ax13,_0x5d2ax16,_0x5d2ax17)}else {if(_0x5d2ax13=mxUtils[_0xe4bc[1540]](_0x5d2ax4),0<_0x5d2ax13[_0xe4bc[67]]){if(null==_0x5d2ax12){_0x5d2ax16=_0x5d2ax5[_0xe4bc[1038]](_0x5d2axa);for(_0x5d2axa=0;_0x5d2axa<_0x5d2ax13[_0xe4bc[67]];_0x5d2axa++){_0x5d2ax17=_0x5d2ax13[_0x5d2axa],_0xe4bc[3072]==_0x5d2ax17[_0xe4bc[301]]?_0x5d2ax5[_0xe4bc[972]](_0x5d2ax16,_0xe4bc[3288]):_0xe4bc[99]==_0x5d2ax17[_0xe4bc[301]]&&(_0x5d2ax12=_0x5d2ax17[_0xe4bc[284]](_0xe4bc[3069]),_0x5d2ax17=_0x5d2ax17[_0xe4bc[284]](_0xe4bc[892]),_0x5d2ax5[_0xe4bc[3085]](_0x5d2ax16,_0x5d2ax12,_0x5d2ax17))}}else {var _0x5d2ax1b=null,_0x5d2ax1c=_0x5d2ax5[_0xe4bc[3087]](_0x5d2axa,_0x5d2ax12,function(){var _0x5d2ax2=_0x5d2ax9[_0xe4bc[3118]][_0x5d2ax1b[_0xe4bc[131]]];if(null!=_0x5d2ax2){var _0x5d2ax2=_0x5d2ax2[_0xe4bc[238]](),_0x5d2ax3=_0x5d2ax1b[_0xe4bc[1040]][_0x5d2ax1b[_0xe4bc[1039]]][_0xe4bc[3289]];null!=_0x5d2ax3&&_0x5d2ax2[_0xe4bc[475]](_0x5d2ax3);return _0x5d2ax2};mxLog[_0xe4bc[283]](_0xe4bc[3290]+_0x5d2ax2+_0xe4bc[3291]);return null},null,null,_0x5d2ax17),_0x5d2ax1b=_0x5d2ax5[_0xe4bc[970]]();mxEvent[_0xe4bc[169]](_0x5d2ax1b,_0xe4bc[826],function(){_0x5d2ax5[_0xe4bc[3082]][_0xe4bc[1047]](_0x5d2ax1c,function(_0x5d2ax2){_0x5d2ax2=mxUtils[_0xe4bc[2196]](_0x5d2ax9[_0xe4bc[1179]][_0xe4bc[526]],mxEvent[_0xe4bc[731]](_0x5d2ax2),mxEvent[_0xe4bc[733]](_0x5d2ax2));return _0x5d2ax9[_0xe4bc[817]](null,_0x5d2ax1a(),_0x5d2ax2[_0xe4bc[235]],_0x5d2ax2[_0xe4bc[236]])});_0x5d2ax5[_0xe4bc[3082]][_0xe4bc[1023]]= !1});for(_0x5d2axa=0;_0x5d2axa<_0x5d2ax13[_0xe4bc[67]];_0x5d2axa++){_0x5d2ax17=_0x5d2ax13[_0x5d2axa],_0xe4bc[3072]==_0x5d2ax17[_0xe4bc[301]]?_0x5d2ax5[_0xe4bc[972]](_0x5d2ax1b,_0xe4bc[3288]):_0xe4bc[99]==_0x5d2ax17[_0xe4bc[301]]&&(_0x5d2ax12=_0x5d2ax17[_0xe4bc[284]](_0xe4bc[3069]),_0x5d2ax18=_0x5d2ax17[_0xe4bc[284]](_0xe4bc[3231]),_0x5d2ax5[_0xe4bc[972]](_0x5d2ax1b,_0x5d2ax12,_0x5d2ax18||_0x5d2ax16)[_0xe4bc[3289]]=_0x5d2ax17[_0xe4bc[284]](_0xe4bc[124]))}}}}}};null!=_0x5d2ax19&&(_0x5d2ax16=_0x5d2ax4[_0xe4bc[284]](_0xe4bc[1363]),null!=_0x5d2ax16&&0<_0x5d2ax16[_0xe4bc[67]]&&_0x5d2ax19[_0xe4bc[57]](_0xe4bc[1363],_0x5d2ax16))}}}}};_0x5d2ax4=_0x5d2ax4[_0xe4bc[287]]}};return _0x5d2ax5};return _0x5d2ax2}());mxCodecRegistry[_0xe4bc[3234]](function(){var _0x5d2ax2= new mxObjectCodec( new mxDefaultPopupMenu);_0x5d2ax2[_0xe4bc[514]]=function(_0x5d2ax2,_0x5d2ax4){return null};_0x5d2ax2[_0xe4bc[1093]]=function(_0x5d2ax2,_0x5d2ax4,_0x5d2ax5){var _0x5d2ax9=_0x5d2ax4[_0xe4bc[64]](_0xe4bc[3277])[0];null!=_0x5d2ax9?this[_0xe4bc[3273]](_0x5d2ax2,_0x5d2ax9,_0x5d2ax5):null!=_0x5d2ax5&&(_0x5d2ax5[_0xe4bc[3064]]=_0x5d2ax4);return _0x5d2ax5};return _0x5d2ax2}());mxCodecRegistry[_0xe4bc[3234]](function(){var _0x5d2ax2= new mxObjectCodec( new mxEditor,_0xe4bc[3292][_0xe4bc[224]](_0xe4bc[185]));_0x5d2ax2[_0xe4bc[3268]]=function(_0x5d2ax2,_0x5d2ax4,_0x5d2ax5){_0x5d2ax2=_0x5d2ax4[_0xe4bc[284]](_0xe4bc[2075]);null!=_0x5d2ax2&&(_0x5d2ax4[_0xe4bc[1390]](_0xe4bc[2075]),_0x5d2ax5[_0xe4bc[2075]]=_0x5d2ax5[_0xe4bc[3118]][_0x5d2ax2]);_0x5d2ax2=_0x5d2ax4[_0xe4bc[284]](_0xe4bc[3120]);null!=_0x5d2ax2&&(_0x5d2ax4[_0xe4bc[1390]](_0xe4bc[3120]),_0x5d2ax5[_0xe4bc[3120]]=_0x5d2ax5[_0xe4bc[3118]][_0x5d2ax2]);return _0x5d2ax5};_0x5d2ax2[_0xe4bc[3274]]=function(_0x5d2ax2,_0x5d2ax4,_0x5d2ax5){if(_0xe4bc[3293]==_0x5d2ax4[_0xe4bc[301]]){if(_0xe4bc[3118]==_0x5d2ax4[_0xe4bc[284]](_0xe4bc[3069])){this[_0xe4bc[3294]](_0x5d2ax2,_0x5d2ax4,_0x5d2ax5);return}}else {if(_0xe4bc[3295]==_0x5d2ax4[_0xe4bc[301]]){this[_0xe4bc[3296]](_0x5d2ax2,_0x5d2ax4,_0x5d2ax5);return}};mxObjectCodec[_0xe4bc[202]][_0xe4bc[3274]][_0xe4bc[183]](this,arguments)};_0x5d2ax2[_0xe4bc[3296]]=function(_0x5d2ax2,_0x5d2ax4,_0x5d2ax5){for(_0x5d2ax2=_0x5d2ax4[_0xe4bc[285]];null!=_0x5d2ax2;){if(_0xe4bc[99]==_0x5d2ax2[_0xe4bc[301]]){_0x5d2ax4=_0x5d2ax2[_0xe4bc[284]](_0xe4bc[3069]);var _0x5d2ax9=_0x5d2ax2[_0xe4bc[284]](_0xe4bc[980]),_0x5d2axa=_0x5d2ax2[_0xe4bc[284]](_0xe4bc[124]),_0x5d2ax12=null;if(null!=_0x5d2ax9){_0x5d2ax12=document[_0xe4bc[1362]](_0x5d2ax9),null!=_0x5d2ax12&&null!=_0x5d2axa&&(_0x5d2ax12[_0xe4bc[124]][_0xe4bc[103]]+=_0xe4bc[471]+_0x5d2axa)}else {var _0x5d2ax9=parseInt(_0x5d2ax2[_0xe4bc[284]](_0xe4bc[235])),_0x5d2ax13=parseInt(_0x5d2ax2[_0xe4bc[284]](_0xe4bc[236])),_0x5d2ax14=_0x5d2ax2[_0xe4bc[284]](_0xe4bc[117]),_0x5d2ax15=_0x5d2ax2[_0xe4bc[284]](_0xe4bc[119]),_0x5d2ax12=document[_0xe4bc[55]](_0xe4bc[485]);_0x5d2ax12[_0xe4bc[124]][_0xe4bc[103]]=_0x5d2axa;( new mxWindow(mxResources[_0xe4bc[203]](_0x5d2ax4)||_0x5d2ax4,_0x5d2ax12,_0x5d2ax9,_0x5d2ax13,_0x5d2ax14,_0x5d2ax15,!1,!0))[_0xe4bc[175]](!0)};_0xe4bc[1179]==_0x5d2ax4?_0x5d2ax5[_0xe4bc[3202]](_0x5d2ax12):_0xe4bc[3082]==_0x5d2ax4?_0x5d2ax5[_0xe4bc[3204]](_0x5d2ax12):_0xe4bc[924]==_0x5d2ax4?_0x5d2ax5[_0xe4bc[3208]](_0x5d2ax12):_0xe4bc[879]==_0x5d2ax4?_0x5d2ax5[_0xe4bc[3205]](_0x5d2ax12):_0xe4bc[201]==_0x5d2ax4&&_0x5d2ax5[_0xe4bc[3297]](_0x5d2ax12)}else {_0xe4bc[3298]==_0x5d2ax2[_0xe4bc[301]]?mxResources[_0xe4bc[99]](_0x5d2ax2[_0xe4bc[284]](_0xe4bc[3299])):_0xe4bc[94]==_0x5d2ax2[_0xe4bc[301]]&&mxClient[_0xe4bc[54]](_0xe4bc[94],_0x5d2ax2[_0xe4bc[284]](_0xe4bc[298]))};_0x5d2ax2=_0x5d2ax2[_0xe4bc[287]]}};_0x5d2ax2[_0xe4bc[3294]]=function(_0x5d2ax2,_0x5d2ax4,_0x5d2ax5){null==_0x5d2ax5[_0xe4bc[3118]]&&(_0x5d2ax5[_0xe4bc[3118]]=[]);_0x5d2ax4=mxUtils[_0xe4bc[1540]](_0x5d2ax4);for(var _0x5d2ax9=0;_0x5d2ax9<_0x5d2ax4[_0xe4bc[67]];_0x5d2ax9++){for(var _0x5d2axa=_0x5d2ax4[_0x5d2ax9][_0xe4bc[284]](_0xe4bc[3069]),_0x5d2ax12=_0x5d2ax4[_0x5d2ax9][_0xe4bc[285]];null!=_0x5d2ax12&&1!=_0x5d2ax12[_0xe4bc[288]];){_0x5d2ax12=_0x5d2ax12[_0xe4bc[287]]};null!=_0x5d2ax12&&(_0x5d2ax5[_0xe4bc[3118]][_0x5d2axa]=_0x5d2ax2[_0xe4bc[3244]](_0x5d2ax12))}};return _0x5d2ax2}())
\ No newline at end of file
+var mxClient = {
+  VERSION: "2.0.0.0",
+  IS_IE: 0 <= navigator.userAgent.indexOf("MSIE"),
+  IS_IE6: 0 <= navigator.userAgent.indexOf("MSIE 6"),
+  IS_QUIRKS: 0 <= navigator.userAgent.indexOf("MSIE") && (null == document.documentMode || 5 == document.documentMode),
+  VML_PREFIX: "v",
+  OFFICE_PREFIX: "o",
+  IS_NS: 0 <= navigator.userAgent.indexOf("Mozilla/") && 0 > navigator.userAgent.indexOf("MSIE"),
+  IS_OP: 0 <= navigator.userAgent.indexOf("Opera/"),
+  IS_OT: 0 > navigator.userAgent.indexOf("Presto/2.4.") && 0 > navigator.userAgent.indexOf("Presto/2.3.") && 0 > navigator.userAgent.indexOf("Presto/2.2.") &&
+    0 > navigator.userAgent.indexOf("Presto/2.1.") && 0 > navigator.userAgent.indexOf("Presto/2.0.") && 0 > navigator.userAgent.indexOf("Presto/1."),
+  IS_SF: 0 <= navigator.userAgent.indexOf("AppleWebKit/") && 0 > navigator.userAgent.indexOf("Chrome/"),
+  IS_GC: 0 <= navigator.userAgent.indexOf("Chrome/"),
+  IS_MT: 0 <= navigator.userAgent.indexOf("Firefox/") && 0 > navigator.userAgent.indexOf("Firefox/1.") && 0 > navigator.userAgent.indexOf("Firefox/2.") || 0 <= navigator.userAgent.indexOf(
+      "Iceweasel/") && 0 > navigator.userAgent.indexOf("Iceweasel/1.") &&
+    0 > navigator.userAgent.indexOf("Iceweasel/2.") || 0 <= navigator.userAgent.indexOf("SeaMonkey/") && 0 > navigator.userAgent.indexOf("SeaMonkey/1.") || 0 <= navigator.userAgent.indexOf(
+      "Iceape/") && 0 > navigator.userAgent.indexOf("Iceape/1."),
+  IS_SVG: 0 <= navigator.userAgent.indexOf("Firefox/") || 0 <= navigator.userAgent.indexOf("Iceweasel/") || 0 <= navigator.userAgent.indexOf("Seamonkey/") || 0 <= navigator.userAgent.indexOf(
+      "Iceape/") || 0 <= navigator.userAgent.indexOf("Galeon/") || 0 <= navigator.userAgent.indexOf("Epiphany/") || 0 <=
+    navigator.userAgent.indexOf("AppleWebKit/") || 0 <= navigator.userAgent.indexOf("Gecko/") || 0 <= navigator.userAgent.indexOf("Opera/"),
+  NO_FO: 0 <= navigator.userAgent.indexOf("Firefox/1.") || 0 <= navigator.userAgent.indexOf("Iceweasel/1.") || 0 <= navigator.userAgent.indexOf("Firefox/2.") || 0 <= navigator.userAgent.indexOf(
+      "Iceweasel/2.") || 0 <= navigator.userAgent.indexOf("SeaMonkey/1.") || 0 <= navigator.userAgent.indexOf("Iceape/1.") || 0 <= navigator.userAgent.indexOf("Camino/1.") || 0 <= navigator.userAgent
+    .indexOf("Epiphany/2.") ||
+    0 <= navigator.userAgent.indexOf("Opera/") || 0 <= navigator.userAgent.indexOf("MSIE") || 0 <= navigator.userAgent.indexOf("Mozilla/2."),
+  IS_VML: "MICROSOFT INTERNET EXPLORER" == navigator.appName.toUpperCase(),
+  IS_MAC: 0 < navigator.userAgent.toUpperCase().indexOf("MACINTOSH"),
+  IS_TOUCH: 0 < navigator.userAgent.toUpperCase().indexOf("IPAD") || 0 < navigator.userAgent.toUpperCase().indexOf("IPOD") || 0 < navigator.userAgent.toUpperCase().indexOf("IPHONE") || 0 <
+    navigator.userAgent.toUpperCase().indexOf("ANDROID"),
+  IS_LOCAL: 0 > document.location.href.indexOf("http://") &&
+    0 > document.location.href.indexOf("https://"),
+  isBrowserSupported: function() {
+    return mxClient.IS_VML || mxClient.IS_SVG
+  },
+  link: function(a, b, c) {
+    c = c || document;
+    if (mxClient.IS_IE6) c.write('\x3clink rel\x3d"' + a + '" href\x3d"' + b + '" charset\x3d"ISO-8859-1" type\x3d"text/css"/\x3e');
+    else {
+      var d = c.createElement("link");
+      d.setAttribute("rel", a);
+      d.setAttribute("href", b);
+      d.setAttribute("charset", "ISO-8859-1");
+      d.setAttribute("type", "text/css");
+      c.getElementsByTagName("head")[0].appendChild(d)
+    }
+  },
+  include: function(a) {
+    document.write('\x3cscript src\x3d"' +
+      a + '"\x3e\x3c/script\x3e')
+  },
+  dispose: function() {
+    for (var a = 0; a < mxEvent.objects.length; a++) null != mxEvent.objects[a].mxListenerList && mxEvent.removeAllListeners(mxEvent.objects[a])
+  }
+};
+mxClient.IS_OP && mxClient.IS_OT ? mxClient.CSS_PREFIX = "O" : mxClient.IS_SF || mxClient.IS_GC ? mxClient.CSS_PREFIX = "Webkit" : mxClient.IS_MT ? mxClient.CSS_PREFIX = "Moz" : mxClient.IS_IE && 9 <=
+  document.documentMode && (mxClient.CSS_PREFIX = "ms");
+"undefined" == typeof mxLoadResources && (mxLoadResources = !0);
+"undefined" == typeof mxResourceExtension && (mxResourceExtension = ".txt");
+"undefined" == typeof mxLoadStylesheets && (mxLoadStylesheets = !0);
+"undefined" != typeof mxBasePath && 0 < mxBasePath.length ? ("/" == mxBasePath.substring(mxBasePath.length - 1) && (mxBasePath = mxBasePath.substring(0, mxBasePath.length - 1)), mxClient.basePath =
+  mxBasePath) : mxClient.basePath = ".";
+"undefined" != typeof mxImageBasePath && 0 < mxImageBasePath.length ? ("/" == mxImageBasePath.substring(mxImageBasePath.length - 1) && (mxImageBasePath = mxImageBasePath.substring(0, mxImageBasePath.length -
+  1)), mxClient.imageBasePath = mxImageBasePath) : mxClient.imageBasePath = mxClient.basePath + "/images";
+mxClient.language = "undefined" != typeof mxLanguage ? mxLanguage : mxClient.IS_IE ? navigator.userLanguage : navigator.language;
+mxClient.defaultLanguage = "undefined" != typeof mxDefaultLanguage ? mxDefaultLanguage : "en";
+mxLoadStylesheets && mxClient.link("stylesheet", mxClient.basePath + "/css/common.css");
+"undefined" != typeof mxLanguages && (mxClient.languages = mxLanguages);
+if (mxClient.IS_IE) {
+  if (9 <= document.documentMode) mxClient.IS_VML = !1, mxClient.IS_SVG = !0;
+  else {
+    8 == document.documentMode ? (document.namespaces.add(mxClient.VML_PREFIX, "urn:schemas-microsoft-com:vml", "#default#VML"), document.namespaces.add(mxClient.OFFICE_PREFIX,
+      "urn:schemas-microsoft-com:office:office", "#default#VML")) : (document.namespaces.add(mxClient.VML_PREFIX, "urn:schemas-microsoft-com:vml"), document.namespaces.add(mxClient.OFFICE_PREFIX,
+      "urn:schemas-microsoft-com:office:office"));
+    var ss = document.createStyleSheet();
+    ss.cssText = "v\\:*{behavior:url(#default#VML)}o\\:*{behavior:url(#default#VML)}";
+    mxLoadStylesheets && mxClient.link("stylesheet", mxClient.basePath + "/css/explorer.css")
+  }
+  window.attachEvent("onunload", mxClient.dispose)
+}
+var mxLog = {
+    consoleName: "Console",
+    TRACE: !1,
+    DEBUG: !0,
+    WARN: !0,
+    buffer: "",
+    init: function() {
+      if (null == mxLog.window && null != document.body) {
+        var a = mxLog.consoleName + " - mxGraph " + mxClient.VERSION,
+          b = document.createElement("table");
+        b.setAttribute("width", "100%");
+        b.setAttribute("height", "100%");
+        var c = document.createElement("tbody"),
+          d = document.createElement("tr"),
+          e = document.createElement("td");
+        e.style.verticalAlign = "top";
+        mxLog.textarea = document.createElement("textarea");
+        mxLog.textarea.setAttribute("readOnly", "true");
+        mxLog.textarea.style.height = "100%";
+        mxLog.textarea.style.resize = "none";
+        mxLog.textarea.value = mxLog.buffer;
+        mxLog.textarea.style.width = mxClient.IS_NS && "BackCompat" != document.compatMode ? "99%" : "100%";
+        e.appendChild(mxLog.textarea);
+        d.appendChild(e);
+        c.appendChild(d);
+        d = document.createElement("tr");
+        mxLog.td = document.createElement("td");
+        mxLog.td.style.verticalAlign = "top";
+        mxLog.td.setAttribute("height", "30px");
+        d.appendChild(mxLog.td);
+        c.appendChild(d);
+        b.appendChild(c);
+        mxLog.addButton("Info", function(a) {
+          mxLog.info()
+        });
+        mxLog.addButton("DOM", function(a) {
+          a = mxUtils.getInnerHtml(document.body);
+          mxLog.debug(a)
+        });
+        mxLog.addButton("Trace", function(a) {
+          mxLog.TRACE = !mxLog.TRACE;
+          mxLog.TRACE ? mxLog.debug("Tracing enabled") : mxLog.debug("Tracing disabled")
+        });
+        mxLog.addButton("Copy", function(a) {
+          try {
+            mxUtils.copy(mxLog.textarea.value)
+          } catch (b) {
+            mxUtils.alert(b)
+          }
+        });
+        mxLog.addButton("Show", function(a) {
+          try {
+            mxUtils.popup(mxLog.textarea.value)
+          } catch (b) {
+            mxUtils.alert(b)
+          }
+        });
+        mxLog.addButton("Clear", function(a) {
+          mxLog.textarea.value = ""
+        });
+        d = c = 0;
+        "number" === typeof window.innerWidth ? (c = window.innerHeight, d = window.innerWidth) : (c = document.documentElement.clientHeight || document.body.clientHeight, d = document.body.clientWidth);
+        mxLog.window = new mxWindow(a, b, Math.max(0, d - 320), Math.max(0, c - 210), 300, 160);
+        mxLog.window.setMaximizable(!0);
+        mxLog.window.setScrollable(!1);
+        mxLog.window.setResizable(!0);
+        mxLog.window.setClosable(!0);
+        mxLog.window.destroyOnClose = !1;
+        if ((mxClient.IS_NS || mxClient.IS_IE) && !mxClient.IS_GC && !mxClient.IS_SF && "BackCompat" != document.compatMode) {
+          var f =
+            mxLog.window.getElement(),
+            a = function(a, b) {
+              mxLog.textarea.style.height = Math.max(0, f.offsetHeight - 70) + "px"
+            };
+          mxLog.window.addListener(mxEvent.RESIZE_END, a);
+          mxLog.window.addListener(mxEvent.MAXIMIZE, a);
+          mxLog.window.addListener(mxEvent.NORMALIZE, a);
+          mxLog.textarea.style.height = "92px"
+        }
+      }
+    },
+    info: function() {
+      mxLog.writeln(mxUtils.toString(navigator))
+    },
+    addButton: function(a, b) {
+      var c = document.createElement("button");
+      mxUtils.write(c, a);
+      mxEvent.addListener(c, "click", b);
+      mxLog.td.appendChild(c)
+    },
+    isVisible: function() {
+      return null !=
+        mxLog.window ? mxLog.window.isVisible() : !1
+    },
+    show: function() {
+      mxLog.setVisible(!0)
+    },
+    setVisible: function(a) {
+      null == mxLog.window && mxLog.init();
+      null != mxLog.window && mxLog.window.setVisible(a)
+    },
+    enter: function(a) {
+      if (mxLog.TRACE) return mxLog.writeln("Entering " + a), (new Date).getTime()
+    },
+    leave: function(a, b) {
+      if (mxLog.TRACE) {
+        var c = 0 != b ? " (" + ((new Date).getTime() - b) + " ms)" : "";
+        mxLog.writeln("Leaving " + a + c)
+      }
+    },
+    debug: function() {
+      mxLog.DEBUG && mxLog.writeln.apply(this, arguments)
+    },
+    warn: function() {
+      mxLog.WARN && mxLog.writeln.apply(this,
+        arguments)
+    },
+    write: function() {
+      for (var a = "", b = 0; b < arguments.length; b++) a += arguments[b], b < arguments.length - 1 && (a += " ");
+      null != mxLog.textarea ? (mxLog.textarea.value += a, 0 <= navigator.userAgent.indexOf("Presto/2.5") && (mxLog.textarea.style.visibility = "hidden", mxLog.textarea.style.visibility = "visible"),
+        mxLog.textarea.scrollTop = mxLog.textarea.scrollHeight) : mxLog.buffer += a
+    },
+    writeln: function() {
+      for (var a = "", b = 0; b < arguments.length; b++) a += arguments[b], b < arguments.length - 1 && (a += " ");
+      mxLog.write(a + "\n")
+    }
+  },
+  mxObjectIdentity = {
+    FIELD_NAME: "mxObjectId",
+    counter: 0,
+    get: function(a) {
+      if ("object" == typeof a && null == a[mxObjectIdentity.FIELD_NAME]) {
+        var b = mxUtils.getFunctionName(a.constructor);
+        a[mxObjectIdentity.FIELD_NAME] = b + "#" + mxObjectIdentity.counter++
+      }
+      return a[mxObjectIdentity.FIELD_NAME]
+    },
+    clear: function(a) {
+      "object" == typeof a && delete a[mxObjectIdentity.FIELD_NAME]
+    }
+  };
+
+function mxDictionary() {
+  this.clear()
+}
+mxDictionary.prototype.map = null;
+mxDictionary.prototype.clear = function() {
+  this.map = {}
+};
+mxDictionary.prototype.get = function(a) {
+  a = mxObjectIdentity.get(a);
+  return this.map[a]
+};
+mxDictionary.prototype.put = function(a, b) {
+  var c = mxObjectIdentity.get(a),
+    d = this.map[c];
+  this.map[c] = b;
+  return d
+};
+mxDictionary.prototype.remove = function(a) {
+  a = mxObjectIdentity.get(a);
+  var b = this.map[a];
+  delete this.map[a];
+  return b
+};
+mxDictionary.prototype.getKeys = function() {
+  var a = [],
+    b;
+  for (b in this.map) a.push(b);
+  return a
+};
+mxDictionary.prototype.getValues = function() {
+  var a = [],
+    b;
+  for (b in this.map) a.push(this.map[b]);
+  return a
+};
+mxDictionary.prototype.visit = function(a) {
+  for (var b in this.map) a(b, this.map[b])
+};
+var mxResources = {
+  resources: [],
+  extension: mxResourceExtension,
+  resourcesEncoded: !1,
+  loadDefaultBundle: !0,
+  loadSpecialBundle: !0,
+  isLanguageSupported: function(a) {
+    return null != mxClient.languages ? 0 <= mxUtils.indexOf(mxClient.languages, a) : !0
+  },
+  getDefaultBundle: function(a, b) {
+    return mxResources.loadDefaultBundle || !mxResources.isLanguageSupported(b) ? a + mxResources.extension : null
+  },
+  getSpecialBundle: function(a, b) {
+    if (null == mxClient.languages || !this.isLanguageSupported(b)) {
+      var c = b.indexOf("-");
+      0 < c && (b = b.substring(0, c))
+    }
+    return mxResources.loadSpecialBundle &&
+      mxResources.isLanguageSupported(b) && b != mxClient.defaultLanguage ? a + "_" + b + mxResources.extension : null
+  },
+  add: function(a, b) {
+    b = null != b ? b : mxClient.language.toLowerCase();
+    if (b != mxConstants.NONE) {
+      var c = mxResources.getDefaultBundle(a, b);
+      if (null != c) try {
+        var d = mxUtils.load(c);
+        d.isReady() && mxResources.parse(d.getText())
+      } catch (e) {}
+      c = mxResources.getSpecialBundle(a, b);
+      if (null != c) try {
+        d = mxUtils.load(c), d.isReady() && mxResources.parse(d.getText())
+      } catch (f) {}
+    }
+  },
+  parse: function(a) {
+    if (null != a) {
+      a = a.split("\n");
+      for (var b = 0; b <
+        a.length; b++)
+        if ("#" != a[b].charAt(0)) {
+          var c = a[b].indexOf("\x3d");
+          if (0 < c) {
+            var d = a[b].substring(0, c),
+              e = a[b].length;
+            13 == a[b].charCodeAt(e - 1) && e--;
+            c = a[b].substring(c + 1, e);
+            this.resourcesEncoded ? (c = c.replace(/\\(?=u[a-fA-F\d]{4})/g, "%"), mxResources.resources[d] = unescape(c)) : mxResources.resources[d] = c
+          }
+        }
+    }
+  },
+  get: function(a, b, c) {
+    a = mxResources.resources[a];
+    null == a && (a = c);
+    if (null != a && null != b) {
+      c = [];
+      for (var d = null, e = 0; e < a.length; e++) {
+        var f = a.charAt(e);
+        "{" == f ? d = "" : null != d && "}" == f ? (d = parseInt(d) - 1, 0 <= d && d < b.length &&
+          c.push(b[d]), d = null) : null != d ? d += f : c.push(f)
+      }
+      a = c.join("")
+    }
+    return a
+  }
+};
+
+function mxPoint(a, b) {
+  this.x = null != a ? a : 0;
+  this.y = null != b ? b : 0
+}
+mxPoint.prototype.x = null;
+mxPoint.prototype.y = null;
+mxPoint.prototype.equals = function(a) {
+  return a.x == this.x && a.y == this.y
+};
+mxPoint.prototype.clone = function() {
+  return mxUtils.clone(this)
+};
+
+function mxRectangle(a, b, c, d) {
+  mxPoint.call(this, a, b);
+  this.width = null != c ? c : 0;
+  this.height = null != d ? d : 0
+}
+mxRectangle.prototype = new mxPoint;
+mxRectangle.prototype.constructor = mxRectangle;
+mxRectangle.prototype.width = null;
+mxRectangle.prototype.height = null;
+mxRectangle.prototype.setRect = function(a, b, c, d) {
+  this.x = a;
+  this.y = b;
+  this.width = c;
+  this.height = d
+};
+mxRectangle.prototype.getCenterX = function() {
+  return this.x + this.width / 2
+};
+mxRectangle.prototype.getCenterY = function() {
+  return this.y + this.height / 2
+};
+mxRectangle.prototype.add = function(a) {
+  if (null != a) {
+    var b = Math.min(this.x, a.x),
+      c = Math.min(this.y, a.y),
+      d = Math.max(this.x + this.width, a.x + a.width);
+    a = Math.max(this.y + this.height, a.y + a.height);
+    this.x = b;
+    this.y = c;
+    this.width = d - b;
+    this.height = a - c
+  }
+};
+mxRectangle.prototype.grow = function(a) {
+  this.x -= a;
+  this.y -= a;
+  this.width += 2 * a;
+  this.height += 2 * a
+};
+mxRectangle.prototype.getPoint = function() {
+  return new mxPoint(this.x, this.y)
+};
+mxRectangle.prototype.equals = function(a) {
+  return a.x == this.x && a.y == this.y && a.width == this.width && a.height == this.height
+};
+var mxEffects = {
+    animateChanges: function(a, b, c) {
+      var d = 0,
+        e = function() {
+          for (var g = !1, h = 0; h < b.length; h++) {
+            var k = b[h];
+            if (k instanceof mxGeometryChange || k instanceof mxTerminalChange || k instanceof mxValueChange || k instanceof mxChildChange || k instanceof mxStyleChange) {
+              var l = a.getView().getState(k.cell || k.child, !1);
+              if (null != l)
+                if (g = !0, k.constructor != mxGeometryChange || a.model.isEdge(k.cell)) mxUtils.setOpacity(l.shape.node, 100 * d / 10);
+                else {
+                  var m = a.getView().scale,
+                    n = (k.geometry.x - k.previous.x) * m,
+                    p = (k.geometry.y -
+                      k.previous.y) * m,
+                    q = (k.geometry.width - k.previous.width) * m,
+                    m = (k.geometry.height - k.previous.height) * m;
+                  0 == d ? (l.x -= n, l.y -= p, l.width -= q, l.height -= m) : (l.x += n / 10, l.y += p / 10, l.width += q / 10, l.height += m / 10);
+                  a.cellRenderer.redraw(l);
+                  mxEffects.cascadeOpacity(a, k.cell, 100 * d / 10)
+                }
+            }
+          }
+          10 > d && g ? (d++, window.setTimeout(e, f)) : null != c && c()
+        },
+        f = 30;
+      e()
+    },
+    cascadeOpacity: function(a, b, c) {
+      for (var d = a.model.getChildCount(b), e = 0; e < d; e++) {
+        var f = a.model.getChildAt(b, e),
+          g = a.getView().getState(f);
+        null != g && (mxUtils.setOpacity(g.shape.node,
+          c), mxEffects.cascadeOpacity(a, f, c))
+      }
+      b = a.model.getEdges(b);
+      if (null != b)
+        for (e = 0; e < b.length; e++) d = a.getView().getState(b[e]), null != d && mxUtils.setOpacity(d.shape.node, c)
+    },
+    fadeOut: function(a, b, c, d, e, f) {
+      d = d || 40;
+      e = e || 30;
+      var g = b || 100;
+      mxUtils.setOpacity(a, g);
+      if (f || null == f) {
+        var h = function() {
+          g = Math.max(g - d, 0);
+          mxUtils.setOpacity(a, g);
+          0 < g ? window.setTimeout(h, e) : (a.style.visibility = "hidden", c && a.parentNode && a.parentNode.removeChild(a))
+        };
+        window.setTimeout(h, e)
+      } else a.style.visibility = "hidden", c && a.parentNode && a.parentNode.removeChild(a)
+    }
+  },
+  mxUtils = {
+    errorResource: "none" != mxClient.language ? "error" : "",
+    closeResource: "none" != mxClient.language ? "close" : "",
+    errorImage: mxClient.imageBasePath + "/error.gif",
+    removeCursors: function(a) {
+      null != a.style && (a.style.cursor = "");
+      a = a.childNodes;
+      if (null != a)
+        for (var b = a.length, c = 0; c < b; c += 1) mxUtils.removeCursors(a[c])
+    },
+    getCurrentStyle: function() {
+      return mxClient.IS_IE ? function(a) {
+        return null != a ? a.currentStyle : null
+      } : function(a) {
+        return null != a ? window.getComputedStyle(a, "") : null
+      }
+    }(),
+    hasScrollbars: function(a) {
+      a = mxUtils.getCurrentStyle(a);
+      return null != a && ("scroll" == a.overflow || "auto" == a.overflow)
+    },
+    bind: function(a, b) {
+      return function() {
+        return b.apply(a, arguments)
+      }
+    },
+    eval: function(a) {
+      var b = null;
+      if (0 <= a.indexOf("function")) try {
+        eval("var _mxJavaScriptExpression\x3d" + a), b = _mxJavaScriptExpression, _mxJavaScriptExpression = null
+      } catch (c) {
+        mxLog.warn(c.message + " while evaluating " + a)
+      } else try {
+        b = eval(a)
+      } catch (d) {
+        mxLog.warn(d.message + " while evaluating " + a)
+      }
+      return b
+    },
+    findNode: function(a, b, c) {
+      var d = a.getAttribute(b);
+      if (null != d && d == c) return a;
+      for (a =
+        a.firstChild; null != a;) {
+        d = mxUtils.findNode(a, b, c);
+        if (null != d) return d;
+        a = a.nextSibling
+      }
+      return null
+    },
+    findNodeByAttribute: function() {
+      return 9 <= document.documentMode ? function(a, b, c) {
+        var d = null;
+        if (null != a)
+          if (a.nodeType == mxConstants.NODETYPE_ELEMENT && a.getAttribute(b) == c) d = a;
+          else
+            for (a = a.firstChild; null != a && null == d;) d = mxUtils.findNodeByAttribute(a, b, c), a = a.nextSibling;
+        return d
+      } : mxClient.IS_IE ? function(a, b, c) {
+        return null == a ? null : a.ownerDocument.selectSingleNode("//*[@" + b + "\x3d'" + c + "']")
+      } : function(a, b, c) {
+        return null ==
+          a ? null : a.ownerDocument.evaluate("//*[@" + b + "\x3d'" + c + "']", a.ownerDocument, null, XPathResult.ANY_TYPE, null).iterateNext()
+      }
+    }(),
+    getFunctionName: function(a) {
+      var b = null;
+      if (null != a)
+        if (null != a.name) b = a.name;
+        else {
+          a = a.toString();
+          for (b = 9;
+            " " == a.charAt(b);) b++;
+          var c = a.indexOf("(", b),
+            b = a.substring(b, c)
+        }
+      return b
+    },
+    indexOf: function(a, b) {
+      if (null != a && null != b)
+        for (var c = 0; c < a.length; c++)
+          if (a[c] == b) return c;
+      return -1
+    },
+    remove: function(a, b) {
+      var c = null;
+      if ("object" == typeof b)
+        for (var d = mxUtils.indexOf(b, a); 0 <= d;) b.splice(d,
+          1), c = a, d = mxUtils.indexOf(b, a);
+      for (var e in b) b[e] == a && (delete b[e], c = a);
+      return c
+    },
+    isNode: function(a, b, c, d) {
+      return null != a && !isNaN(a.nodeType) && (null == b || a.nodeName.toLowerCase() == b.toLowerCase()) ? null == c || a.getAttribute(c) == d : !1
+    },
+    getChildNodes: function(a, b) {
+      b = b || mxConstants.NODETYPE_ELEMENT;
+      for (var c = [], d = a.firstChild; null != d;) d.nodeType == b && c.push(d), d = d.nextSibling;
+      return c
+    },
+    createXmlDocument: function() {
+      var a = null;
+      document.implementation && document.implementation.createDocument ? a = document.implementation.createDocument("",
+        "", null) : window.ActiveXObject && (a = new ActiveXObject("Microsoft.XMLDOM"));
+      return a
+    },
+    parseXml: function() {
+      return mxClient.IS_IE && ("undefined" === typeof document.documentMode || 9 > document.documentMode) ? function(a) {
+        var b = mxUtils.createXmlDocument();
+        b.async = "false";
+        b.loadXML(a);
+        return b
+      } : function(a) {
+        return (new DOMParser).parseFromString(a, "text/xml")
+      }
+    }(),
+    clearSelection: function() {
+      if (document.selection) return function() {
+        document.selection.empty()
+      };
+      if (window.getSelection) return function() {
+        window.getSelection().removeAllRanges()
+      }
+    }(),
+    getPrettyXml: function(a, b, c) {
+      var d = [];
+      if (null != a)
+        if (b = b || "  ", c = c || "", a.nodeType == mxConstants.NODETYPE_TEXT) d.push(a.nodeValue);
+        else {
+          d.push(c + "\x3c" + a.nodeName);
+          var e = a.attributes;
+          if (null != e)
+            for (var f = 0; f < e.length; f++) {
+              var g = mxUtils.htmlEntities(e[f].nodeValue);
+              d.push(" " + e[f].nodeName + '\x3d"' + g + '"')
+            }
+          e = a.firstChild;
+          if (null != e) {
+            for (d.push("\x3e\n"); null != e;) d.push(mxUtils.getPrettyXml(e, b, c + b)), e = e.nextSibling;
+            d.push(c + "\x3c/" + a.nodeName + "\x3e\n")
+          } else d.push("/\x3e\n")
+        }
+      return d.join("")
+    },
+    removeWhitespace: function(a,
+      b) {
+      for (var c = b ? a.previousSibling : a.nextSibling; null != c && c.nodeType == mxConstants.NODETYPE_TEXT;) {
+        var d = b ? c.previousSibling : c.nextSibling,
+          e = mxUtils.getTextContent(c);
+        0 == mxUtils.trim(e).length && c.parentNode.removeChild(c);
+        c = d
+      }
+    },
+    htmlEntities: function(a, b) {
+      a = (a || "").replace(/&/g, "\x26amp;");
+      a = a.replace(/"/g, "\x26quot;");
+      a = a.replace(/\'/g, "\x26#39;");
+      a = a.replace(/</g, "\x26lt;");
+      a = a.replace(/>/g, "\x26gt;");
+      if (null == b || b) a = a.replace(/\n/g, "\x26#xa;");
+      return a
+    },
+    isVml: function(a) {
+      return null != a && "urn:schemas-microsoft-com:vml" ==
+        a.tagUrn
+    },
+    getXml: function(a, b) {
+      var c = "";
+      null != a && (c = a.xml, c = null == c ? a.innerHTML ? a.innerHTML : (new XMLSerializer).serializeToString(a) : c.replace(/\r\n\t[\t]*/g, "").replace(/>\r\n/g, "\x3e").replace(/\r\n/g, "\n"));
+      return c = c.replace(/\n/g, b || "\x26#xa;")
+    },
+    getTextContent: function(a) {
+      var b = "";
+      null != a && (null != a.firstChild && (a = a.firstChild), b = a.nodeValue || "");
+      return b
+    },
+    getInnerHtml: function() {
+      return mxClient.IS_IE ? function(a) {
+        return null != a ? a.innerHTML : ""
+      } : function(a) {
+        return null != a ? (new XMLSerializer).serializeToString(a) :
+          ""
+      }
+    }(),
+    getOuterHtml: function() {
+      return mxClient.IS_IE ? function(a) {
+        if (null != a) {
+          if (null != a.outerHTML) return a.outerHTML;
+          var b = [];
+          b.push("\x3c" + a.nodeName);
+          var c = a.attributes;
+          if (null != c)
+            for (var d = 0; d < c.length; d++) {
+              var e = c[d].nodeValue;
+              null != e && 0 < e.length && (b.push(" "), b.push(c[d].nodeName), b.push('\x3d"'), b.push(e), b.push('"'))
+            }
+          0 == a.innerHTML.length ? b.push("/\x3e") : (b.push("\x3e"), b.push(a.innerHTML), b.push("\x3c/" + a.nodeName + "\x3e"));
+          return b.join("")
+        }
+        return ""
+      } : function(a) {
+        return null != a ? (new XMLSerializer).serializeToString(a) :
+          ""
+      }
+    }(),
+    write: function(a, b) {
+      var c = a.ownerDocument.createTextNode(b);
+      null != a && a.appendChild(c);
+      return c
+    },
+    writeln: function(a, b) {
+      var c = a.ownerDocument.createTextNode(b);
+      null != a && (a.appendChild(c), a.appendChild(document.createElement("br")));
+      return c
+    },
+    br: function(a, b) {
+      b = b || 1;
+      for (var c = null, d = 0; d < b; d++) null != a && (c = a.ownerDocument.createElement("br"), a.appendChild(c));
+      return c
+    },
+    button: function(a, b, c) {
+      c = null != c ? c : document;
+      c = c.createElement("button");
+      mxUtils.write(c, a);
+      mxEvent.addListener(c, "click", function(a) {
+        b(a)
+      });
+      return c
+    },
+    para: function(a, b) {
+      var c = document.createElement("p");
+      mxUtils.write(c, b);
+      null != a && a.appendChild(c);
+      return c
+    },
+    addTransparentBackgroundFilter: function(a) {
+      a.style.filter += "progid:DXImageTransform.Microsoft.AlphaImageLoader(src\x3d'" + mxClient.imageBasePath + "/transparent.gif', sizingMethod\x3d'scale')"
+    },
+    linkAction: function(a, b, c, d, e) {
+      return mxUtils.link(a, b, function() {
+        c.execute(d)
+      }, e)
+    },
+    linkInvoke: function(a, b, c, d, e, f) {
+      return mxUtils.link(a, b, function() {
+        c[d](e)
+      }, f)
+    },
+    link: function(a, b, c, d) {
+      var e =
+        document.createElement("span");
+      e.style.color = "blue";
+      e.style.textDecoration = "underline";
+      e.style.cursor = "pointer";
+      null != d && (e.style.paddingLeft = d + "px");
+      mxEvent.addListener(e, "click", c);
+      mxUtils.write(e, b);
+      null != a && a.appendChild(e);
+      return e
+    },
+    fit: function(a) {
+      var b = parseInt(a.offsetLeft),
+        c = parseInt(a.offsetWidth),
+        d = document.body,
+        e = document.documentElement,
+        f = (d.scrollLeft || e.scrollLeft) + (d.clientWidth || e.clientWidth);
+      b + c > f && (a.style.left = Math.max(d.scrollLeft || e.scrollLeft, f - c) + "px");
+      b = parseInt(a.offsetTop);
+      c = parseInt(a.offsetHeight);
+      f = (d.scrollTop || e.scrollTop) + Math.max(d.clientHeight || 0, e.clientHeight);
+      b + c > f && (a.style.top = Math.max(d.scrollTop || e.scrollTop, f - c) + "px")
+    },
+    open: function(a) {
+      if (mxClient.IS_NS) {
+        try {
+          netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect")
+        } catch (b) {
+          return mxUtils.alert("Permission to read file denied."), ""
+        }
+        var c = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
+        c.initWithPath(a);
+        if (!c.exists()) return mxUtils.alert("File not found."),
+          "";
+        a = Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream);
+        a.init(c, 1, 4, null);
+        c = Components.classes["@mozilla.org/scriptableinputstream;1"].createInstance(Components.interfaces.nsIScriptableInputStream);
+        c.init(a);
+        return c.read(c.available())
+      }
+      c = (new ActiveXObject("Scripting.FileSystemObject")).OpenTextFile(a, 1);
+      a = c.readAll();
+      c.close();
+      return a
+    },
+    save: function(a, b) {
+      if (mxClient.IS_NS) {
+        try {
+          netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect")
+        } catch (c) {
+          mxUtils.alert("Permission to write file denied.");
+          return
+        }
+        var d = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
+        d.initWithPath(a);
+        d.exists() || d.create(0, 420);
+        var e = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream);
+        e.init(d, 34, 4, null);
+        e.write(b, b.length);
+        e.flush();
+        e.close()
+      } else d = (new ActiveXObject("Scripting.FileSystemObject")).CreateTextFile(a, !0), d.Write(b), d.Close()
+    },
+    saveAs: function(a) {
+      var b = document.createElement("iframe");
+      b.setAttribute("src", "");
+      b.style.visibility = "hidden";
+      document.body.appendChild(b);
+      try {
+        if (mxClient.IS_NS) {
+          var c = b.contentDocument;
+          c.open();
+          c.write(a);
+          c.close();
+          try {
+            netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"), b.focus(), saveDocument(c)
+          } catch (d) {
+            mxUtils.alert("Permission to save document denied.")
+          }
+        } else c = b.contentWindow.document, c.write(a), c.execCommand("SaveAs", !1, document.location)
+      } finally {
+        document.body.removeChild(b)
+      }
+    },
+    copy: function(a) {
+      if (window.clipboardData) window.clipboardData.setData("Text",
+        a);
+      else {
+        netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
+        var b = Components.classes["@mozilla.org/widget/clipboard;1"].createInstance(Components.interfaces.nsIClipboard);
+        if (b) {
+          var c = Components.classes["@mozilla.org/widget/transferable;1"].createInstance(Components.interfaces.nsITransferable);
+          if (c) {
+            c.addDataFlavor("text/unicode");
+            var d = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
+            d.data = a;
+            c.setTransferData("text/unicode",
+              d, 2 * a.length);
+            b.setData(c, null, Components.interfaces.nsIClipboard.kGlobalClipboard)
+          }
+        }
+      }
+    },
+    load: function(a) {
+      a = new mxXmlRequest(a, null, "GET", !1);
+      a.send();
+      return a
+    },
+    get: function(a, b, c) {
+      return (new mxXmlRequest(a, null, "GET")).send(b, c)
+    },
+    post: function(a, b, c, d) {
+      return (new mxXmlRequest(a, b)).send(c, d)
+    },
+    submit: function(a, b, c, d) {
+      return (new mxXmlRequest(a, b)).simulate(c, d)
+    },
+    loadInto: function(a, b, c) {
+      mxClient.IS_IE ? b.onreadystatechange = function() {
+        4 == b.readyState && c()
+      } : b.addEventListener("load", c, !1);
+      b.load(a)
+    },
+    getValue: function(a, b, c) {
+      a = null != a ? a[b] : null;
+      null == a && (a = c);
+      return a
+    },
+    getNumber: function(a, b, c) {
+      a = null != a ? a[b] : null;
+      null == a && (a = c || 0);
+      return Number(a)
+    },
+    getColor: function(a, b, c) {
+      a = null != a ? a[b] : null;
+      null == a ? a = c : a == mxConstants.NONE && (a = null);
+      return a
+    },
+    clone: function(a, b, c) {
+      c = null != c ? c : !1;
+      var d = null;
+      if (null != a && "function" == typeof a.constructor) {
+        var d = new a.constructor,
+          e;
+        for (e in a)
+          if (e != mxObjectIdentity.FIELD_NAME && (null == b || 0 > mxUtils.indexOf(b, e))) d[e] = !c && "object" == typeof a[e] ? mxUtils.clone(a[e]) : a[e]
+      }
+      return d
+    },
+    equalPoints: function(a, b) {
+      if (null == a && null != b || null != a && null == b || null != a && null != b && a.length != b.length) return !1;
+      if (null != a && null != b)
+        for (var c = 0; c < a.length; c++)
+          if (a[c] == b[c] || null != a[c] && !a[c].equals(b[c])) return !1;
+      return !0
+    },
+    equalEntries: function(a, b) {
+      if (null == a && null != b || null != a && null == b || null != a && null != b && a.length != b.length) return !1;
+      if (null != a && null != b)
+        for (var c in a)
+          if (a[c] != b[c]) return !1;
+      return !0
+    },
+    extend: function(a, b) {
+      var c = function() {};
+      c.prototype = b.prototype;
+      a.prototype = new c;
+      a.prototype.constructor =
+        a
+    },
+    toString: function(a) {
+      var b = "",
+        c;
+      for (c in a) try {
+        if (null == a[c]) b += c + " \x3d [null]\n";
+        else if ("function" == typeof a[c]) b += c + " \x3d\x3e [Function]\n";
+        else if ("object" == typeof a[c]) var d = mxUtils.getFunctionName(a[c].constructor),
+          b = b + (c + " \x3d\x3e [" + d + "]\n");
+        else b += c + " \x3d " + a[c] + "\n"
+      } catch (e) {
+        b += c + "\x3d" + e.message
+      }
+      return b
+    },
+    toRadians: function(a) {
+      return Math.PI * a / 180
+    },
+    arcToCurves: function(a, b, c, d, e, f, g, h, k) {
+      h -= a;
+      k -= b;
+      if (0 === c || 0 === d) return p;
+      c = Math.abs(c);
+      d = Math.abs(d);
+      var l = -h / 2,
+        m = -k / 2,
+        n = Math.cos(e *
+          Math.PI / 180),
+        p = Math.sin(e * Math.PI / 180);
+      e = n * l + p * m;
+      var l = -1 * p * l + n * m,
+        m = e * e,
+        q = l * l,
+        s = c * c,
+        r = d * d,
+        t = m / s + q / r;
+      1 < t ? (c *= Math.sqrt(t), d *= Math.sqrt(t), f = 0) : (t = 1, f === g && (t = -1), f = t * Math.sqrt((s * r - s * q - r * m) / (s * q + r * m)));
+      m = f * c * l / d;
+      q = -1 * f * d * e / c;
+      h = n * m - p * q + h / 2;
+      k = p * m + n * q + k / 2;
+      s = Math.atan2((l - q) / d, (e - m) / c) - Math.atan2(0, 1);
+      f = 0 <= s ? s : 2 * Math.PI + s;
+      s = Math.atan2((-l - q) / d, (-e - m) / c) - Math.atan2((l - q) / d, (e - m) / c);
+      e = 0 <= s ? s : 2 * Math.PI + s;
+      0 == g && 0 < e ? e -= 2 * Math.PI : 0 != g && 0 > e && (e += 2 * Math.PI);
+      g = 2 * e / Math.PI;
+      g = Math.ceil(0 > g ? -1 * g : g);
+      e /= g;
+      l = 8 / 3 * Math.sin(e /
+        4) * Math.sin(e / 4) / Math.sin(e / 2);
+      m = n * c;
+      n *= d;
+      c *= p;
+      d *= p;
+      for (var v = Math.cos(f), w = Math.sin(f), q = -l * (m * w + d * v), s = -l * (c * w - n * v), t = r = 0, p = [], u = 0; u < g; ++u) {
+        f += e;
+        var v = Math.cos(f),
+          w = Math.sin(f),
+          r = m * v - d * w + h,
+          t = c * v + n * w + k,
+          y = -l * (m * w + d * v),
+          v = -l * (c * w - n * v),
+          w = 6 * u;
+        p[w] = Number(q + a);
+        p[w + 1] = Number(s + b);
+        p[w + 2] = Number(r - y + a);
+        p[w + 3] = Number(t - v + b);
+        p[w + 4] = Number(r + a);
+        p[w + 5] = Number(t + b);
+        q = r + y;
+        s = t + v
+      }
+      return p
+    },
+    getBoundingBox: function(a, b) {
+      var c = null;
+      if (null != a && null != b && 0 != b) {
+        var d = mxUtils.toRadians(b),
+          c = Math.cos(d),
+          e = Math.sin(d),
+          f =
+          new mxPoint(a.x + a.width / 2, a.y + a.height / 2),
+          g = new mxPoint(a.x, a.y),
+          d = new mxPoint(a.x + a.width, a.y),
+          h = new mxPoint(d.x, a.y + a.height),
+          k = new mxPoint(a.x, h.y),
+          g = mxUtils.getRotatedPoint(g, c, e, f),
+          d = mxUtils.getRotatedPoint(d, c, e, f),
+          h = mxUtils.getRotatedPoint(h, c, e, f),
+          k = mxUtils.getRotatedPoint(k, c, e, f),
+          c = new mxRectangle(g.x, g.y, 0, 0);
+        c.add(new mxRectangle(d.x, d.y, 0, 0));
+        c.add(new mxRectangle(h.x, h.y, 0, 0));
+        c.add(new mxRectangle(k.x, k.y, 0, 0))
+      }
+      return c
+    },
+    getRotatedPoint: function(a, b, c, d) {
+      d = null != d ? d : new mxPoint;
+      var e =
+        a.x - d.x;
+      a = a.y - d.y;
+      return new mxPoint(e * b - a * c + d.x, a * b + e * c + d.y)
+    },
+    getPortConstraints: function(a, b, c, d) {
+      a = mxUtils.getValue(a.style, mxConstants.STYLE_PORT_CONSTRAINT, null);
+      if (null == a) return d;
+      d = a.toString();
+      a = mxConstants.DIRECTION_MASK_NONE;
+      0 <= d.indexOf(mxConstants.DIRECTION_NORTH) && (a |= mxConstants.DIRECTION_MASK_NORTH);
+      0 <= d.indexOf(mxConstants.DIRECTION_WEST) && (a |= mxConstants.DIRECTION_MASK_WEST);
+      0 <= d.indexOf(mxConstants.DIRECTION_SOUTH) && (a |= mxConstants.DIRECTION_MASK_SOUTH);
+      0 <= d.indexOf(mxConstants.DIRECTION_EAST) &&
+        (a |= mxConstants.DIRECTION_MASK_EAST);
+      return a
+    },
+    reversePortConstraints: function(a) {
+      var b = 0,
+        b = (a & mxConstants.DIRECTION_MASK_WEST) << 3,
+        b = b | (a & mxConstants.DIRECTION_MASK_NORTH) << 1,
+        b = b | (a & mxConstants.DIRECTION_MASK_SOUTH) >> 1;
+      return b |= (a & mxConstants.DIRECTION_MASK_EAST) >> 3
+    },
+    findNearestSegment: function(a, b, c) {
+      var d = -1;
+      if (0 < a.absolutePoints.length)
+        for (var e = a.absolutePoints[0], f = null, g = 1; g < a.absolutePoints.length; g++) {
+          var h = a.absolutePoints[g],
+            e = mxUtils.ptSegDistSq(e.x, e.y, h.x, h.y, b, c);
+          if (null == f || e < f) f =
+            e, d = g - 1;
+          e = h
+        }
+      return d
+    },
+    rectangleIntersectsSegment: function(a, b, c) {
+      var d = a.y,
+        e = a.x,
+        f = d + a.height,
+        g = e + a.width;
+      a = b.x;
+      var h = c.x;
+      b.x > c.x && (a = c.x, h = b.x);
+      h > g && (h = g);
+      a < e && (a = e);
+      if (a > h) return !1;
+      var e = b.y,
+        g = c.y,
+        k = c.x - b.x;
+      1E-7 < Math.abs(k) && (c = (c.y - b.y) / k, b = b.y - c * b.x, e = c * a + b, g = c * h + b);
+      e > g && (b = g, g = e, e = b);
+      g > f && (g = f);
+      e < d && (e = d);
+      return e > g ? !1 : !0
+    },
+    contains: function(a, b, c) {
+      return a.x <= b && a.x + a.width >= b && a.y <= c && a.y + a.height >= c
+    },
+    intersects: function(a, b) {
+      var c = a.width,
+        d = a.height,
+        e = b.width,
+        f = b.height;
+      if (0 >= e || 0 >= f || 0 >= c ||
+        0 >= d) return !1;
+      var g = a.x,
+        h = a.y,
+        k = b.x,
+        l = b.y,
+        e = e + k,
+        f = f + l,
+        c = c + g,
+        d = d + h;
+      return (e < k || e > g) && (f < l || f > h) && (c < g || c > k) && (d < h || d > l)
+    },
+    intersectsHotspot: function(a, b, c, d, e, f) {
+      d = null != d ? d : 1;
+      e = null != e ? e : 0;
+      f = null != f ? f : 0;
+      if (0 < d) {
+        var g = a.getCenterX(),
+          h = a.getCenterY(),
+          k = a.width,
+          l = a.height,
+          m = mxUtils.getValue(a.style, mxConstants.STYLE_STARTSIZE) * a.view.scale;
+        0 < m && (mxUtils.getValue(a.style, mxConstants.STYLE_HORIZONTAL, !0) ? (h = a.y + m / 2, l = m) : (g = a.x + m / 2, k = m));
+        k = Math.max(e, k * d);
+        l = Math.max(e, l * d);
+        0 < f && (k = Math.min(k, f), l = Math.min(l,
+          f));
+        d = new mxRectangle(g - k / 2, h - l / 2, k, l);
+        g = mxUtils.toRadians(mxUtils.getValue(a.style, mxConstants.STYLE_ROTATION) || 0);
+        0 != g && (e = Math.cos(-g), f = Math.sin(-g), g = new mxPoint(a.getCenterX(), a.getCenterY()), a = mxUtils.getRotatedPoint(new mxPoint(b, c), e, f, g), b = a.x, c = a.y);
+        return mxUtils.contains(d, b, c)
+      }
+      return !0
+    },
+    getOffset: function(a, b) {
+      var c = 0,
+        d = 0;
+      if (null != b && b) var e = document.body,
+        f = document.documentElement,
+        c = c + (e.scrollLeft || f.scrollLeft),
+        d = d + (e.scrollTop || f.scrollTop);
+      for (; a.offsetParent;) c += a.offsetLeft, d +=
+        a.offsetTop, a = a.offsetParent;
+      return new mxPoint(c, d)
+    },
+    getScrollOrigin: function(a) {
+      for (var b = document.body, c = document.documentElement, d = new mxPoint(b.scrollLeft || c.scrollLeft, b.scrollTop || c.scrollTop); null != a && a != b && a != c;) !isNaN(a.scrollLeft) && !
+        isNaN(a.scrollTop) && (d.x += a.scrollLeft, d.y += a.scrollTop), a = a.parentNode;
+      return d
+    },
+    convertPoint: function(a, b, c) {
+      var d = mxUtils.getScrollOrigin(a);
+      a = mxUtils.getOffset(a);
+      a.x -= d.x;
+      a.y -= d.y;
+      return new mxPoint(b - a.x, c - a.y)
+    },
+    ltrim: function(a, b) {
+      return a.replace(RegExp("^[" +
+        (b || "\\s") + "]+", "g"), "")
+    },
+    rtrim: function(a, b) {
+      return a.replace(RegExp("[" + (b || "\\s") + "]+$", "g"), "")
+    },
+    trim: function(a, b) {
+      return mxUtils.ltrim(mxUtils.rtrim(a, b), b)
+    },
+    isNumeric: function(a) {
+      return null != a && (null == a.length || 0 < a.length && 0 > a.indexOf("0x") && 0 > a.indexOf("0X")) && !isNaN(a)
+    },
+    mod: function(a, b) {
+      return (a % b + b) % b
+    },
+    intersection: function(a, b, c, d, e, f, g, h) {
+      var k = (h - f) * (c - a) - (g - e) * (d - b);
+      g = ((g - e) * (b - f) - (h - f) * (a - e)) / k;
+      e = ((c - a) * (b - f) - (d - b) * (a - e)) / k;
+      return 0 <= g && 1 >= g && 0 <= e && 1 >= e ? new mxPoint(a + g * (c - a), b + g *
+        (d - b)) : null
+    },
+    ptSegDistSq: function(a, b, c, d, e, f) {
+      c -= a;
+      d -= b;
+      e -= a;
+      f -= b;
+      0 >= e * c + f * d ? c = 0 : (e = c - e, f = d - f, a = e * c + f * d, c = 0 >= a ? 0 : a * a / (c * c + d * d));
+      e = e * e + f * f - c;
+      0 > e && (e = 0);
+      return e
+    },
+    relativeCcw: function(a, b, c, d, e, f) {
+      c -= a;
+      d -= b;
+      e -= a;
+      f -= b;
+      a = e * d - f * c;
+      0 == a && (a = e * c + f * d, 0 < a && (a = (e - c) * c + (f - d) * d, 0 > a && (a = 0)));
+      return 0 > a ? -1 : 0 < a ? 1 : 0
+    },
+    animateChanges: function(a, b) {
+      mxEffects.animateChanges.apply(this, arguments)
+    },
+    cascadeOpacity: function(a, b, c) {
+      mxEffects.cascadeOpacity.apply(this, arguments)
+    },
+    fadeOut: function(a, b, c, d, e, f) {
+      mxEffects.fadeOut.apply(this,
+        arguments)
+    },
+    setOpacity: function(a, b) {
+      mxUtils.isVml(a) ? a.style.filter = 100 <= b ? null : "alpha(opacity\x3d" + b / 5 + ")" : mxClient.IS_IE && ("undefined" === typeof document.documentMode || 9 > document.documentMode) ? a.style
+        .filter = 100 <= b ? null : "alpha(opacity\x3d" + b + ")" : a.style.opacity = b / 100
+    },
+    createImage: function(a) {
+      var b = null;
+      mxClient.IS_IE6 && "CSS1Compat" != document.compatMode ? (b = document.createElement(mxClient.VML_PREFIX + ":image"), b.setAttribute("src", a), b.style.borderStyle = "none") : (b = document.createElement(
+        "img"), b.setAttribute("src",
+        a), b.setAttribute("border", "0"));
+      return b
+    },
+    sortCells: function(a, b) {
+      b = null != b ? b : !0;
+      var c = new mxDictionary;
+      a.sort(function(a, e) {
+        var f = c.get(a);
+        null == f && (f = mxCellPath.create(a).split(mxCellPath.PATH_SEPARATOR), c.put(a, f));
+        var g = c.get(e);
+        null == g && (g = mxCellPath.create(e).split(mxCellPath.PATH_SEPARATOR), c.put(e, g));
+        f = mxCellPath.compare(f, g);
+        return 0 == f ? 0 : 0 < f == b ? 1 : -1
+      });
+      return a
+    },
+    getStylename: function(a) {
+      return null != a && (a = a.split(";")[0], 0 > a.indexOf("\x3d")) ? a : ""
+    },
+    getStylenames: function(a) {
+      var b = [];
+      if (null !=
+        a) {
+        a = a.split(";");
+        for (var c = 0; c < a.length; c++) 0 > a[c].indexOf("\x3d") && b.push(a[c])
+      }
+      return b
+    },
+    indexOfStylename: function(a, b) {
+      if (null != a && null != b)
+        for (var c = a.split(";"), d = 0, e = 0; e < c.length; e++) {
+          if (c[e] == b) return d;
+          d += c[e].length + 1
+        }
+      return -1
+    },
+    addStylename: function(a, b) {
+      0 > mxUtils.indexOfStylename(a, b) && (null == a ? a = "" : 0 < a.length && ";" != a.charAt(a.length - 1) && (a += ";"), a += b);
+      return a
+    },
+    removeStylename: function(a, b) {
+      var c = [];
+      if (null != a)
+        for (var d = a.split(";"), e = 0; e < d.length; e++) d[e] != b && c.push(d[e]);
+      return c.join(";")
+    },
+    removeAllStylenames: function(a) {
+      var b = [];
+      if (null != a) {
+        a = a.split(";");
+        for (var c = 0; c < a.length; c++) 0 <= a[c].indexOf("\x3d") && b.push(a[c])
+      }
+      return b.join(";")
+    },
+    setCellStyles: function(a, b, c, d) {
+      if (null != b && 0 < b.length) {
+        a.beginUpdate();
+        try {
+          for (var e = 0; e < b.length; e++)
+            if (null != b[e]) {
+              var f = mxUtils.setStyle(a.getStyle(b[e]), c, d);
+              a.setStyle(b[e], f)
+            }
+        } finally {
+          a.endUpdate()
+        }
+      }
+    },
+    setStyle: function(a, b, c) {
+      var d = null != c && ("undefined" == typeof c.length || 0 < c.length);
+      if (null == a || 0 == a.length) d && (a = b + "\x3d" + c);
+      else {
+        var e = a.indexOf(b +
+          "\x3d");
+        0 > e ? d && (d = ";" == a.charAt(a.length - 1) ? "" : ";", a = a + d + b + "\x3d" + c) : (b = d ? b + "\x3d" + c : "", c = a.indexOf(";", e), d || c++, a = a.substring(0, e) + b + (c > e ?
+          a.substring(c) : ""))
+      }
+      return a
+    },
+    setCellStyleFlags: function(a, b, c, d, e) {
+      if (null != b && 0 < b.length) {
+        a.beginUpdate();
+        try {
+          for (var f = 0; f < b.length; f++)
+            if (null != b[f]) {
+              var g = mxUtils.setStyleFlag(a.getStyle(b[f]), c, d, e);
+              a.setStyle(b[f], g)
+            }
+        } finally {
+          a.endUpdate()
+        }
+      }
+    },
+    setStyleFlag: function(a, b, c, d) {
+      if (null == a || 0 == a.length) a = d || null == d ? b + "\x3d" + c : b + "\x3d0";
+      else {
+        var e = a.indexOf(b +
+          "\x3d");
+        if (0 > e) e = ";" == a.charAt(a.length - 1) ? "" : ";", a = d || null == d ? a + e + b + "\x3d" + c : a + e + b + "\x3d0";
+        else {
+          var f = a.indexOf(";", e),
+            g = "",
+            g = 0 > f ? a.substring(e + b.length + 1) : a.substring(e + b.length + 1, f),
+            g = null == d ? parseInt(g) ^ c : d ? parseInt(g) | c : parseInt(g) & ~c;
+          a = a.substring(0, e) + b + "\x3d" + g + (0 <= f ? a.substring(f) : "")
+        }
+      }
+      return a
+    },
+    getAlignmentAsPoint: function(a, b) {
+      var c = 0,
+        d = 0;
+      a == mxConstants.ALIGN_CENTER ? c = -0.5 : a == mxConstants.ALIGN_RIGHT && (c = -1);
+      b == mxConstants.ALIGN_MIDDLE ? d = -0.5 : b == mxConstants.ALIGN_BOTTOM && (d = -1);
+      return new mxPoint(c,
+        d)
+    },
+    getSizeForString: function(a, b, c) {
+      b = null != b ? b : mxConstants.DEFAULT_FONTSIZE;
+      c = null != c ? c : mxConstants.DEFAULT_FONTFAMILY;
+      var d = document.createElement("div");
+      d.style.fontFamily = c;
+      d.style.fontSize = Math.round(b) + "px";
+      d.style.lineHeight = Math.round(b * mxConstants.LINE_HEIGHT) + "px";
+      d.style.position = "absolute";
+      d.style.whiteSpace = "nowrap";
+      d.style.visibility = "hidden";
+      d.style.display = mxClient.IS_QUIRKS ? "inline" : "inline-block";
+      d.style.zoom = "1";
+      d.innerHTML = a;
+      document.body.appendChild(d);
+      a = new mxRectangle(0, 0,
+        d.offsetWidth, d.offsetHeight);
+      document.body.removeChild(d);
+      return a
+    },
+    getViewXml: function(a, b, c, d, e) {
+      d = null != d ? d : 0;
+      e = null != e ? e : 0;
+      b = null != b ? b : 1;
+      null == c && (c = [a.getModel().getRoot()]);
+      var f = a.getView(),
+        g = null,
+        h = f.isEventsEnabled();
+      f.setEventsEnabled(!1);
+      var k = f.drawPane,
+        l = f.overlayPane;
+      a.dialect == mxConstants.DIALECT_SVG ? (f.drawPane = document.createElementNS(mxConstants.NS_SVG, "g"), f.canvas.appendChild(f.drawPane), f.overlayPane = document.createElementNS(mxConstants.NS_SVG,
+        "g")) : (f.drawPane = f.drawPane.cloneNode(!1),
+        f.canvas.appendChild(f.drawPane), f.overlayPane = f.overlayPane.cloneNode(!1));
+      f.canvas.appendChild(f.overlayPane);
+      var m = f.getTranslate();
+      f.translate = new mxPoint(d, e);
+      b = new mxTemporaryCellStates(a.getView(), b, c);
+      try {
+        g = (new mxCodec).encode(a.getView())
+      } finally {
+        b.destroy(), f.translate = m, f.canvas.removeChild(f.drawPane), f.canvas.removeChild(f.overlayPane), f.drawPane = k, f.overlayPane = l, f.setEventsEnabled(h)
+      }
+      return g
+    },
+    getScaleForPageCount: function(a, b, c, d) {
+      if (1 > a) return 1;
+      c = null != c ? c : mxConstants.PAGE_FORMAT_A4_PORTRAIT;
+      d = null != d ? d : 0;
+      var e = c.width - 2 * d;
+      c = c.height - 2 * d;
+      d = b.getGraphBounds().clone();
+      b = b.getView().getScale();
+      d.width /= b;
+      d.height /= b;
+      b = d.width;
+      c = b / d.height / (e / c);
+      d = Math.sqrt(a);
+      var f = Math.sqrt(c);
+      c = d * f;
+      d /= f;
+      if (1 > c && d > a) {
+        var g = d / a;
+        d = a;
+        c /= g
+      }
+      1 > d && c > a && (g = c / a, c = a, d /= g);
+      g = Math.ceil(c) * Math.ceil(d);
+      for (f = 0; g > a;) {
+        var g = Math.floor(c) / c,
+          h = Math.floor(d) / d;
+        1 == g && (g = Math.floor(c - 1) / c);
+        1 == h && (h = Math.floor(d - 1) / d);
+        g = g > h ? g : h;
+        c *= g;
+        d *= g;
+        g = Math.ceil(c) * Math.ceil(d);
+        f++;
+        if (10 < f) break
+      }
+      return 0.99999 * (e * c / b)
+    },
+    show: function(a,
+      b, c, d) {
+      c = null != c ? c : 0;
+      d = null != d ? d : 0;
+      null == b ? b = window.open().document : b.open();
+      var e = a.getGraphBounds();
+      c = -e.x + c;
+      d = -e.y + d;
+      if (mxClient.IS_IE) {
+        for (var e = "\x3chtml\x3e\x3chead\x3e", f = document.getElementsByTagName("base"), g = 0; g < f.length; g++) e += f[g].outerHTML;
+        e += "\x3cstyle\x3e";
+        for (g = 0; g < document.styleSheets.length; g++) try {
+          e += document.styleSheets(g).cssText
+        } catch (h) {}
+        e += "\x3c/style\x3e\x3c/head\x3e";
+        e += "\x3cbody\x3e";
+        e += a.container.innerHTML;
+        e += "\x3c/body\x3e";
+        e += "\x3chtml\x3e";
+        b.writeln(e);
+        b.close();
+        a =
+          b.body.getElementsByTagName("DIV")[0];
+        null != a && (a.style.position = "absolute", a.style.left = c + "px", a.style.top = d + "px")
+      } else {
+        b.writeln("\x3chtml");
+        b.writeln("\x3chead\x3e");
+        f = document.getElementsByTagName("base");
+        for (g = 0; g < f.length; g++) b.writeln(mxUtils.getOuterHtml(f[g]));
+        f = document.getElementsByTagName("link");
+        for (g = 0; g < f.length; g++) b.writeln(mxUtils.getOuterHtml(f[g]));
+        f = document.getElementsByTagName("style");
+        for (g = 0; g < f.length; g++) b.writeln(mxUtils.getOuterHtml(f[g]));
+        b.writeln("\x3c/head\x3e");
+        b.writeln("\x3c/html\x3e");
+        b.close();
+        null == b.body && b.documentElement.appendChild(b.createElement("body"));
+        b.body.style.overflow = "auto";
+        for (a = a.container.firstChild; null != a;) g = a.cloneNode(!0), b.body.appendChild(g), a = a.nextSibling;
+        a = b.getElementsByTagName("g")[0];
+        null != a && (a.setAttribute("transform", "translate(" + c + "," + d + ")"), c = a.ownerSVGElement, c.setAttribute("width", e.width + Math.max(e.x, 0) + 3), c.setAttribute("height", e.height +
+          Math.max(e.y, 0) + 3))
+      }
+      mxUtils.removeCursors(b.body);
+      return b
+    },
+    printScreen: function(a) {
+      var b = window.open();
+      mxUtils.show(a, b.document);
+      a = function() {
+        b.focus();
+        b.print();
+        b.close()
+      };
+      mxClient.IS_GC ? b.setTimeout(a, 500) : a()
+    },
+    popup: function(a, b) {
+      if (b) {
+        var c = document.createElement("div");
+        c.style.overflow = "scroll";
+        c.style.width = "636px";
+        c.style.height = "460px";
+        var d = document.createElement("pre");
+        d.innerHTML = mxUtils.htmlEntities(a, !1).replace(/\n/g, "\x3cbr\x3e").replace(/ /g, "\x26nbsp;");
+        c.appendChild(d);
+        c = new mxWindow("Popup Window", c, document.body.clientWidth / 2 - 320, (document.body.clientHeight || document.documentElement.clientHeight) /
+          2 - 240, 640, 480, !1, !0);
+        c.setClosable(!0);
+        c.setVisible(!0)
+      } else mxClient.IS_NS ? (c = window.open(), c.document.writeln("\x3cpre\x3e" + mxUtils.htmlEntities(a) + "\x3c/pre"), c.document.close()) : (c = window.open(), d = c.document.createElement(
+        "pre"), d.innerHTML = mxUtils.htmlEntities(a, !1).replace(/\n/g, "\x3cbr\x3e").replace(/ /g, "\x26nbsp;"), c.document.body.appendChild(d))
+    },
+    alert: function(a) {
+      alert(a)
+    },
+    prompt: function(a, b) {
+      return prompt(a, b)
+    },
+    confirm: function(a) {
+      return confirm(a)
+    },
+    error: function(a, b, c, d) {
+      var e = document.createElement("div");
+      e.style.padding = "20px";
+      var f = document.createElement("img");
+      f.setAttribute("src", d || mxUtils.errorImage);
+      f.setAttribute("valign", "bottom");
+      f.style.verticalAlign = "middle";
+      e.appendChild(f);
+      e.appendChild(document.createTextNode("\u00a0"));
+      e.appendChild(document.createTextNode("\u00a0"));
+      e.appendChild(document.createTextNode("\u00a0"));
+      mxUtils.write(e, a);
+      a = document.body.clientWidth;
+      d = document.body.clientHeight || document.documentElement.clientHeight;
+      var g = new mxWindow(mxResources.get(mxUtils.errorResource) ||
+        mxUtils.errorResource, e, (a - b) / 2, d / 4, b, null, !1, !0);
+      c && (mxUtils.br(e), b = document.createElement("p"), c = document.createElement("button"), mxClient.IS_IE ? c.style.cssText = "float:right" : c.setAttribute("style", "float:right"), mxEvent.addListener(
+        c, "click",
+        function(a) {
+          g.destroy()
+        }), mxUtils.write(c, mxResources.get(mxUtils.closeResource) || mxUtils.closeResource), b.appendChild(c), e.appendChild(b), mxUtils.br(e), g.setClosable(!0));
+      g.setVisible(!0);
+      return g
+    },
+    makeDraggable: function(a, b, c, d, e, f, g, h, k, l) {
+      a = new mxDragSource(a,
+        c);
+      a.dragOffset = new mxPoint(null != e ? e : 0, null != f ? f : mxConstants.TOOLTIP_VERTICAL_OFFSET);
+      a.autoscroll = g;
+      a.setGuidesEnabled(!1);
+      null != k && (a.highlightDropTargets = k);
+      null != l && (a.getDropTarget = l);
+      a.getGraphForEvent = function(a) {
+        return "function" == typeof b ? b(a) : b
+      };
+      null != d && (a.createDragElement = function() {
+        return d.cloneNode(!0)
+      }, h && (a.createPreviewElement = function(a) {
+        var b = d.cloneNode(!0),
+          c = parseInt(b.style.width),
+          e = parseInt(b.style.height);
+        b.style.width = Math.round(c * a.view.scale) + "px";
+        b.style.height = Math.round(e *
+          a.view.scale) + "px";
+        return b
+      }));
+      return a
+    }
+  },
+  mxConstants = {
+    DEFAULT_HOTSPOT: 0.3,
+    MIN_HOTSPOT_SIZE: 8,
+    MAX_HOTSPOT_SIZE: 0,
+    RENDERING_HINT_EXACT: "exact",
+    RENDERING_HINT_FASTER: "faster",
+    RENDERING_HINT_FASTEST: "fastest",
+    DIALECT_SVG: "svg",
+    DIALECT_VML: "vml",
+    DIALECT_MIXEDHTML: "mixedHtml",
+    DIALECT_PREFERHTML: "preferHtml",
+    DIALECT_STRICTHTML: "strictHtml",
+    NS_SVG: "http://www.w3.org/2000/svg",
+    NS_XHTML: "http://www.w3.org/1999/xhtml",
+    NS_XLINK: "http://www.w3.org/1999/xlink",
+    SHADOWCOLOR: "gray",
+    SHADOW_OFFSET_X: 2,
+    SHADOW_OFFSET_Y: 3,
+    SHADOW_OPACITY: 1,
+    NODETYPE_ELEMENT: 1,
+    NODETYPE_ATTRIBUTE: 2,
+    NODETYPE_TEXT: 3,
+    NODETYPE_CDATA: 4,
+    NODETYPE_ENTITY_REFERENCE: 5,
+    NODETYPE_ENTITY: 6,
+    NODETYPE_PROCESSING_INSTRUCTION: 7,
+    NODETYPE_COMMENT: 8,
+    NODETYPE_DOCUMENT: 9,
+    NODETYPE_DOCUMENTTYPE: 10,
+    NODETYPE_DOCUMENT_FRAGMENT: 11,
+    NODETYPE_NOTATION: 12,
+    TOOLTIP_VERTICAL_OFFSET: 16,
+    DEFAULT_VALID_COLOR: "#00FF00",
+    DEFAULT_INVALID_COLOR: "#FF0000",
+    HIGHLIGHT_STROKEWIDTH: 3,
+    CURSOR_MOVABLE_VERTEX: "move",
+    CURSOR_MOVABLE_EDGE: "move",
+    CURSOR_LABEL_HANDLE: "default",
+    CURSOR_BEND_HANDLE: "pointer",
+    CURSOR_CONNECT: "pointer",
+    HIGHLIGHT_COLOR: "#00FF00",
+    CONNECT_TARGET_COLOR: "#0000FF",
+    INVALID_CONNECT_TARGET_COLOR: "#FF0000",
+    DROP_TARGET_COLOR: "#0000FF",
+    VALID_COLOR: "#00FF00",
+    INVALID_COLOR: "#FF0000",
+    EDGE_SELECTION_COLOR: "#00FF00",
+    VERTEX_SELECTION_COLOR: "#00FF00",
+    VERTEX_SELECTION_STROKEWIDTH: 1,
+    EDGE_SELECTION_STROKEWIDTH: 1,
+    VERTEX_SELECTION_DASHED: !0,
+    EDGE_SELECTION_DASHED: !0,
+    GUIDE_COLOR: "#FF0000",
+    GUIDE_STROKEWIDTH: 1,
+    OUTLINE_COLOR: "#0099FF",
+    OUTLINE_STROKEWIDTH: mxClient.IS_IE ? 2 : 3,
+    HANDLE_SIZE: 7,
+    LABEL_HANDLE_SIZE: 4,
+    HANDLE_FILLCOLOR: "#00FF00",
+    HANDLE_STROKECOLOR: "black",
+    LABEL_HANDLE_FILLCOLOR: "yellow",
+    CONNECT_HANDLE_FILLCOLOR: "#0000FF",
+    LOCKED_HANDLE_FILLCOLOR: "#FF0000",
+    OUTLINE_HANDLE_FILLCOLOR: "#00FFFF",
+    OUTLINE_HANDLE_STROKECOLOR: "#0033FF",
+    DEFAULT_FONTFAMILY: "Arial,Helvetica",
+    DEFAULT_FONTSIZE: 11,
+    LINE_HEIGHT: 1.2,
+    DEFAULT_FONTSTYLE: 0,
+    DEFAULT_STARTSIZE: 40,
+    DEFAULT_MARKERSIZE: 6,
+    DEFAULT_IMAGESIZE: 24,
+    ENTITY_SEGMENT: 30,
+    RECTANGLE_ROUNDING_FACTOR: 0.15,
+    LINE_ARCSIZE: 20,
+    ARROW_SPACING: 10,
+    ARROW_WIDTH: 30,
+    ARROW_SIZE: 30,
+    PAGE_FORMAT_A4_PORTRAIT: new mxRectangle(0,
+      0, 826, 1169),
+    PAGE_FORMAT_A4_LANDSCAPE: new mxRectangle(0, 0, 1169, 826),
+    PAGE_FORMAT_LETTER_PORTRAIT: new mxRectangle(0, 0, 850, 1100),
+    PAGE_FORMAT_LETTER_LANDSCAPE: new mxRectangle(0, 0, 1100, 850),
+    NONE: "none",
+    STYLE_PERIMETER: "perimeter",
+    STYLE_SOURCE_PORT: "sourcePort",
+    STYLE_TARGET_PORT: "targetPort",
+    STYLE_PORT_CONSTRAINT: "portConstraint",
+    STYLE_OPACITY: "opacity",
+    STYLE_TEXT_OPACITY: "textOpacity",
+    STYLE_OVERFLOW: "overflow",
+    STYLE_ORTHOGONAL: "orthogonal",
+    STYLE_EXIT_X: "exitX",
+    STYLE_EXIT_Y: "exitY",
+    STYLE_EXIT_PERIMETER: "exitPerimeter",
+    STYLE_ENTRY_X: "entryX",
+    STYLE_ENTRY_Y: "entryY",
+    STYLE_ENTRY_PERIMETER: "entryPerimeter",
+    STYLE_WHITE_SPACE: "whiteSpace",
+    STYLE_ROTATION: "rotation",
+    STYLE_FILLCOLOR: "fillColor",
+    STYLE_SWIMLANE_FILLCOLOR: "swimlaneFillColor",
+    STYLE_GRADIENTCOLOR: "gradientColor",
+    STYLE_GRADIENT_DIRECTION: "gradientDirection",
+    STYLE_STROKECOLOR: "strokeColor",
+    STYLE_SEPARATORCOLOR: "separatorColor",
+    STYLE_STROKEWIDTH: "strokeWidth",
+    STYLE_ALIGN: "align",
+    STYLE_VERTICAL_ALIGN: "verticalAlign",
+    STYLE_LABEL_POSITION: "labelPosition",
+    STYLE_VERTICAL_LABEL_POSITION: "verticalLabelPosition",
+    STYLE_IMAGE_ASPECT: "imageAspect",
+    STYLE_IMAGE_ALIGN: "imageAlign",
+    STYLE_IMAGE_VERTICAL_ALIGN: "imageVerticalAlign",
+    STYLE_GLASS: "glass",
+    STYLE_IMAGE: "image",
+    STYLE_IMAGE_WIDTH: "imageWidth",
+    STYLE_IMAGE_HEIGHT: "imageHeight",
+    STYLE_IMAGE_BACKGROUND: "imageBackground",
+    STYLE_IMAGE_BORDER: "imageBorder",
+    STYLE_FLIPH: "flipH",
+    STYLE_FLIPV: "flipV",
+    STYLE_NOLABEL: "noLabel",
+    STYLE_NOEDGESTYLE: "noEdgeStyle",
+    STYLE_LABEL_BACKGROUNDCOLOR: "labelBackgroundColor",
+    STYLE_LABEL_BORDERCOLOR: "labelBorderColor",
+    STYLE_LABEL_PADDING: "labelPadding",
+    STYLE_INDICATOR_SHAPE: "indicatorShape",
+    STYLE_INDICATOR_IMAGE: "indicatorImage",
+    STYLE_INDICATOR_COLOR: "indicatorColor",
+    STYLE_INDICATOR_STROKECOLOR: "indicatorStrokeColor",
+    STYLE_INDICATOR_GRADIENTCOLOR: "indicatorGradientColor",
+    STYLE_INDICATOR_SPACING: "indicatorSpacing",
+    STYLE_INDICATOR_WIDTH: "indicatorWidth",
+    STYLE_INDICATOR_HEIGHT: "indicatorHeight",
+    STYLE_INDICATOR_DIRECTION: "indicatorDirection",
+    STYLE_SHADOW: "shadow",
+    STYLE_SEGMENT: "segment",
+    STYLE_ENDARROW: "endArrow",
+    STYLE_STARTARROW: "startArrow",
+    STYLE_ENDSIZE: "endSize",
+    STYLE_STARTSIZE: "startSize",
+    STYLE_SWIMLANE_LINE: "swimlaneLine",
+    STYLE_ENDFILL: "endFill",
+    STYLE_STARTFILL: "startFill",
+    STYLE_DASHED: "dashed",
+    STYLE_DASH_PATTERN: "dashPattern",
+    STYLE_ROUNDED: "rounded",
+    STYLE_CURVED: "curved",
+    STYLE_ARCSIZE: "arcSize",
+    STYLE_SMOOTH: "smooth",
+    STYLE_SOURCE_PERIMETER_SPACING: "sourcePerimeterSpacing",
+    STYLE_TARGET_PERIMETER_SPACING: "targetPerimeterSpacing",
+    STYLE_PERIMETER_SPACING: "perimeterSpacing",
+    STYLE_SPACING: "spacing",
+    STYLE_SPACING_TOP: "spacingTop",
+    STYLE_SPACING_LEFT: "spacingLeft",
+    STYLE_SPACING_BOTTOM: "spacingBottom",
+    STYLE_SPACING_RIGHT: "spacingRight",
+    STYLE_HORIZONTAL: "horizontal",
+    STYLE_DIRECTION: "direction",
+    STYLE_ELBOW: "elbow",
+    STYLE_FONTCOLOR: "fontColor",
+    STYLE_FONTFAMILY: "fontFamily",
+    STYLE_FONTSIZE: "fontSize",
+    STYLE_FONTSTYLE: "fontStyle",
+    STYLE_AUTOSIZE: "autosize",
+    STYLE_FOLDABLE: "foldable",
+    STYLE_EDITABLE: "editable",
+    STYLE_BENDABLE: "bendable",
+    STYLE_MOVABLE: "movable",
+    STYLE_RESIZABLE: "resizable",
+    STYLE_CLONEABLE: "cloneable",
+    STYLE_DELETABLE: "deletable",
+    STYLE_SHAPE: "shape",
+    STYLE_EDGE: "edgeStyle",
+    STYLE_LOOP: "loopStyle",
+    STYLE_ROUTING_CENTER_X: "routingCenterX",
+    STYLE_ROUTING_CENTER_Y: "routingCenterY",
+    FONT_BOLD: 1,
+    FONT_ITALIC: 2,
+    FONT_UNDERLINE: 4,
+    FONT_SHADOW: 8,
+    SHAPE_RECTANGLE: "rectangle",
+    SHAPE_ELLIPSE: "ellipse",
+    SHAPE_DOUBLE_ELLIPSE: "doubleEllipse",
+    SHAPE_RHOMBUS: "rhombus",
+    SHAPE_LINE: "line",
+    SHAPE_IMAGE: "image",
+    SHAPE_ARROW: "arrow",
+    SHAPE_LABEL: "label",
+    SHAPE_CYLINDER: "cylinder",
+    SHAPE_SWIMLANE: "swimlane",
+    SHAPE_CONNECTOR: "connector",
+    SHAPE_ACTOR: "actor",
+    SHAPE_CLOUD: "cloud",
+    SHAPE_TRIANGLE: "triangle",
+    SHAPE_HEXAGON: "hexagon",
+    ARROW_CLASSIC: "classic",
+    ARROW_BLOCK: "block",
+    ARROW_OPEN: "open",
+    ARROW_OVAL: "oval",
+    ARROW_DIAMOND: "diamond",
+    ARROW_DIAMOND_THIN: "diamondThin",
+    ALIGN_LEFT: "left",
+    ALIGN_CENTER: "center",
+    ALIGN_RIGHT: "right",
+    ALIGN_TOP: "top",
+    ALIGN_MIDDLE: "middle",
+    ALIGN_BOTTOM: "bottom",
+    DIRECTION_NORTH: "north",
+    DIRECTION_SOUTH: "south",
+    DIRECTION_EAST: "east",
+    DIRECTION_WEST: "west",
+    DIRECTION_MASK_NONE: 0,
+    DIRECTION_MASK_WEST: 1,
+    DIRECTION_MASK_NORTH: 2,
+    DIRECTION_MASK_SOUTH: 4,
+    DIRECTION_MASK_EAST: 8,
+    DIRECTION_MASK_ALL: 15,
+    ELBOW_VERTICAL: "vertical",
+    ELBOW_HORIZONTAL: "horizontal",
+    EDGESTYLE_ELBOW: "elbowEdgeStyle",
+    EDGESTYLE_ENTITY_RELATION: "entityRelationEdgeStyle",
+    EDGESTYLE_LOOP: "loopEdgeStyle",
+    EDGESTYLE_SIDETOSIDE: "sideToSideEdgeStyle",
+    EDGESTYLE_TOPTOBOTTOM: "topToBottomEdgeStyle",
+    EDGESTYLE_ORTHOGONAL: "orthogonalEdgeStyle",
+    EDGESTYLE_SEGMENT: "segmentEdgeStyle",
+    PERIMETER_ELLIPSE: "ellipsePerimeter",
+    PERIMETER_RECTANGLE: "rectanglePerimeter",
+    PERIMETER_RHOMBUS: "rhombusPerimeter",
+    PERIMETER_TRIANGLE: "trianglePerimeter"
+  };
+
+function mxEventObject(a) {
+  this.name = a;
+  this.properties = [];
+  for (var b = 1; b < arguments.length; b += 2) null != arguments[b + 1] && (this.properties[arguments[b]] = arguments[b + 1])
+}
+mxEventObject.prototype.name = null;
+mxEventObject.prototype.properties = null;
+mxEventObject.prototype.consumed = !1;
+mxEventObject.prototype.getName = function() {
+  return this.name
+};
+mxEventObject.prototype.getProperties = function() {
+  return this.properties
+};
+mxEventObject.prototype.getProperty = function(a) {
+  return this.properties[a]
+};
+mxEventObject.prototype.isConsumed = function() {
+  return this.consumed
+};
+mxEventObject.prototype.consume = function() {
+  this.consumed = !0
+};
+
+function mxMouseEvent(a, b) {
+  this.evt = a;
+  this.state = b
+}
+mxMouseEvent.prototype.consumed = !1;
+mxMouseEvent.prototype.evt = null;
+mxMouseEvent.prototype.graphX = null;
+mxMouseEvent.prototype.graphY = null;
+mxMouseEvent.prototype.state = null;
+mxMouseEvent.prototype.getEvent = function() {
+  return this.evt
+};
+mxMouseEvent.prototype.getSource = function() {
+  return mxEvent.getSource(this.evt)
+};
+mxMouseEvent.prototype.isSource = function(a) {
+  if (null != a)
+    for (var b = this.getSource(); null != b;) {
+      if (b == a.node) return !0;
+      b = b.parentNode
+    }
+  return !1
+};
+mxMouseEvent.prototype.getX = function() {
+  return mxEvent.getClientX(this.getEvent())
+};
+mxMouseEvent.prototype.getY = function() {
+  return mxEvent.getClientY(this.getEvent())
+};
+mxMouseEvent.prototype.getGraphX = function() {
+  return this.graphX
+};
+mxMouseEvent.prototype.getGraphY = function() {
+  return this.graphY
+};
+mxMouseEvent.prototype.getState = function() {
+  return this.state
+};
+mxMouseEvent.prototype.getCell = function() {
+  var a = this.getState();
+  return null != a ? a.cell : null
+};
+mxMouseEvent.prototype.isPopupTrigger = function() {
+  return mxEvent.isPopupTrigger(this.getEvent())
+};
+mxMouseEvent.prototype.isConsumed = function() {
+  return this.consumed
+};
+mxMouseEvent.prototype.consume = function(a) {
+  (null != a ? a : 1) && this.evt.preventDefault && this.evt.preventDefault();
+  this.evt.returnValue = !1;
+  this.consumed = !0
+};
+
+function mxEventSource(a) {
+  this.setEventSource(a)
+}
+mxEventSource.prototype.eventListeners = null;
+mxEventSource.prototype.eventsEnabled = !0;
+mxEventSource.prototype.eventSource = null;
+mxEventSource.prototype.isEventsEnabled = function() {
+  return this.eventsEnabled
+};
+mxEventSource.prototype.setEventsEnabled = function(a) {
+  this.eventsEnabled = a
+};
+mxEventSource.prototype.getEventSource = function() {
+  return this.eventSource
+};
+mxEventSource.prototype.setEventSource = function(a) {
+  this.eventSource = a
+};
+mxEventSource.prototype.addListener = function(a, b) {
+  null == this.eventListeners && (this.eventListeners = []);
+  this.eventListeners.push(a);
+  this.eventListeners.push(b)
+};
+mxEventSource.prototype.removeListener = function(a) {
+  if (null != this.eventListeners)
+    for (var b = 0; b < this.eventListeners.length;) this.eventListeners[b + 1] == a ? this.eventListeners.splice(b, 2) : b += 2
+};
+mxEventSource.prototype.fireEvent = function(a, b) {
+  if (null != this.eventListeners && this.isEventsEnabled()) {
+    null == a && (a = new mxEventObject);
+    null == b && (b = this.getEventSource());
+    null == b && (b = this);
+    for (var c = [b, a], d = 0; d < this.eventListeners.length; d += 2) {
+      var e = this.eventListeners[d];
+      (null == e || e == a.getName()) && this.eventListeners[d + 1].apply(this, c)
+    }
+  }
+};
+var mxEvent = {
+  objects: [],
+  addListener: function() {
+    var a = function(a, c, d) {
+      null == a.mxListenerList && (a.mxListenerList = [], mxEvent.objects.push(a));
+      a.mxListenerList.push({
+        name: c,
+        f: d
+      })
+    };
+    return window.addEventListener ? function(b, c, d) {
+      b.addEventListener(c, d, !1);
+      a(b, c, d)
+    } : function(b, c, d) {
+      b.attachEvent("on" + c, d);
+      a(b, c, d)
+    }
+  }(),
+  removeListener: function() {
+    var a = function(a, c, d) {
+      if (null != a.mxListenerList) {
+        c = a.mxListenerList.length;
+        for (var e = 0; e < c; e++)
+          if (a.mxListenerList[e].f == d) {
+            a.mxListenerList.splice(e, 1);
+            break
+          }
+        0 ==
+          a.mxListenerList.length && (a.mxListenerList = null)
+      }
+    };
+    return window.removeEventListener ? function(b, c, d) {
+      b.removeEventListener(c, d, !1);
+      a(b, c, d)
+    } : function(b, c, d) {
+      b.detachEvent("on" + c, d);
+      a(b, c, d)
+    }
+  }(),
+  removeAllListeners: function(a) {
+    var b = a.mxListenerList;
+    if (null != b)
+      for (; 0 < b.length;) {
+        var c = b[0];
+        mxEvent.removeListener(a, c.name, c.f)
+      }
+  },
+  addGestureListeners: function(a, b, c, d) {
+    null != b && mxEvent.addListener(a, "mousedown", b);
+    null != c && mxEvent.addListener(a, "mousemove", c);
+    null != d && mxEvent.addListener(a, "mouseup", d);
+    mxClient.IS_TOUCH && (null != b && mxEvent.addListener(a, "touchstart", b), null != c && mxEvent.addListener(a, "touchmove", c), null != d && mxEvent.addListener(a, "touchend", d))
+  },
+  removeGestureListeners: function(a, b, c, d) {
+    null != b && mxEvent.removeListener(a, "mousedown", b);
+    null != c && mxEvent.removeListener(a, "mousemove", c);
+    null != d && mxEvent.removeListener(a, "mouseup", d);
+    mxClient.IS_TOUCH && (null != b && mxEvent.removeListener(a, "touchstart", b), null != c && mxEvent.removeListener(a, "touchmove", c), null != d && mxEvent.removeListener(a, "touchend",
+      d))
+  },
+  redirectMouseEvents: function(a, b, c, d, e, f, g) {
+    var h = function(a) {
+      return "function" == typeof c ? c(a) : c
+    };
+    mxEvent.addGestureListeners(a, function(a) {
+      null != d ? d(a) : mxEvent.isConsumed(a) || b.fireMouseEvent(mxEvent.MOUSE_DOWN, new mxMouseEvent(a, h(a)))
+    }, function(a) {
+      null != e ? e(a) : mxEvent.isConsumed(a) || b.fireMouseEvent(mxEvent.MOUSE_MOVE, new mxMouseEvent(a, h(a)))
+    }, function(a) {
+      null != f ? f(a) : mxEvent.isConsumed(a) || b.fireMouseEvent(mxEvent.MOUSE_UP, new mxMouseEvent(a, h(a)))
+    });
+    mxEvent.addListener(a, "dblclick", function(a) {
+      if (null !=
+        g) g(a);
+      else if (!mxEvent.isConsumed(a)) {
+        var c = h(a);
+        b.dblClick(a, null != c ? c.cell : null)
+      }
+    })
+  },
+  release: function(a) {
+    if (null != a && (mxEvent.removeAllListeners(a), a = a.childNodes, null != a))
+      for (var b = a.length, c = 0; c < b; c += 1) mxEvent.release(a[c])
+  },
+  addMouseWheelListener: function(a) {
+    if (null != a) {
+      var b = function(b) {
+        null == b && (b = window.event);
+        var d = 0,
+          d = mxClient.IS_NS && !mxClient.IS_SF && !mxClient.IS_GC ? -b.detail / 2 : b.wheelDelta / 120;
+        0 != d && a(b, 0 < d)
+      };
+      mxClient.IS_NS ? mxEvent.addListener(window, mxClient.IS_SF || mxClient.IS_GC ? "mousewheel" :
+        "DOMMouseScroll", b) : mxEvent.addListener(document, "mousewheel", b)
+    }
+  },
+  disableContextMenu: function() {
+    return mxClient.IS_IE && ("undefined" === typeof document.documentMode || 9 > document.documentMode) ? function(a) {
+      mxEvent.addListener(a, "contextmenu", function() {
+        return !1
+      })
+    } : function(a) {
+      a.setAttribute("oncontextmenu", "return false;")
+    }
+  }(),
+  getSource: function(a) {
+    return null != a.srcElement ? a.srcElement : a.target
+  },
+  isConsumed: function(a) {
+    return null != a.isConsumed && a.isConsumed
+  },
+  isLeftMouseButton: function(a) {
+    return a.button ==
+      (mxClient.IS_IE && ("undefined" === typeof document.documentMode || 9 > document.documentMode) ? 1 : 0)
+  },
+  isRightMouseButton: function(a) {
+    return 2 == a.button
+  },
+  isPopupTrigger: function(a) {
+    return mxEvent.isRightMouseButton(a) || mxEvent.isShiftDown(a) && !mxEvent.isControlDown(a)
+  },
+  isShiftDown: function(a) {
+    return null != a ? a.shiftKey : !1
+  },
+  isAltDown: function(a) {
+    return null != a ? a.altKey : !1
+  },
+  isControlDown: function(a) {
+    return null != a ? a.ctrlKey : !1
+  },
+  isMetaDown: function(a) {
+    return null != a ? a.metaKey : !1
+  },
+  getMainEvent: function(a) {
+    ("touchstart" ==
+      a.type || "touchmove" == a.type) && null != a.touches && null != a.touches[0] ? a = a.touches[0] : "touchend" == a.type && (null != a.changedTouches && null != a.changedTouches[0]) && (a =
+      a.changedTouches[0]);
+    return a
+  },
+  getClientX: function(a) {
+    return mxEvent.getMainEvent(a).clientX
+  },
+  getClientY: function(a) {
+    return mxEvent.getMainEvent(a).clientY
+  },
+  consume: function(a, b, c) {
+    c = null != c ? c : !0;
+    if (null != b ? b : 1) a.preventDefault ? (c && a.stopPropagation(), a.preventDefault()) : c && (a.cancelBubble = !0);
+    a.isConsumed = !0;
+    a.returnValue = !1
+  },
+  LABEL_HANDLE: -1,
+  ROTATION_HANDLE: -2,
+  MOUSE_DOWN: "mouseDown",
+  MOUSE_MOVE: "mouseMove",
+  MOUSE_UP: "mouseUp",
+  ACTIVATE: "activate",
+  RESIZE_START: "resizeStart",
+  RESIZE: "resize",
+  RESIZE_END: "resizeEnd",
+  MOVE_START: "moveStart",
+  MOVE: "move",
+  MOVE_END: "moveEnd",
+  PAN_START: "panStart",
+  PAN: "pan",
+  PAN_END: "panEnd",
+  MINIMIZE: "minimize",
+  NORMALIZE: "normalize",
+  MAXIMIZE: "maximize",
+  HIDE: "hide",
+  SHOW: "show",
+  CLOSE: "close",
+  DESTROY: "destroy",
+  REFRESH: "refresh",
+  SIZE: "size",
+  SELECT: "select",
+  FIRED: "fired",
+  GET: "get",
+  RECEIVE: "receive",
+  CONNECT: "connect",
+  DISCONNECT: "disconnect",
+  SUSPEND: "suspend",
+  RESUME: "resume",
+  MARK: "mark",
+  SESSION: "session",
+  ROOT: "root",
+  POST: "post",
+  OPEN: "open",
+  SAVE: "save",
+  BEFORE_ADD_VERTEX: "beforeAddVertex",
+  ADD_VERTEX: "addVertex",
+  AFTER_ADD_VERTEX: "afterAddVertex",
+  DONE: "done",
+  EXECUTE: "execute",
+  EXECUTED: "executed",
+  BEGIN_UPDATE: "beginUpdate",
+  START_EDIT: "startEdit",
+  END_UPDATE: "endUpdate",
+  END_EDIT: "endEdit",
+  BEFORE_UNDO: "beforeUndo",
+  UNDO: "undo",
+  REDO: "redo",
+  CHANGE: "change",
+  NOTIFY: "notify",
+  LAYOUT_CELLS: "layoutCells",
+  CLICK: "click",
+  SCALE: "scale",
+  TRANSLATE: "translate",
+  SCALE_AND_TRANSLATE: "scaleAndTranslate",
+  UP: "up",
+  DOWN: "down",
+  ADD: "add",
+  REMOVE: "remove",
+  CLEAR: "clear",
+  ADD_CELLS: "addCells",
+  CELLS_ADDED: "cellsAdded",
+  MOVE_CELLS: "moveCells",
+  CELLS_MOVED: "cellsMoved",
+  RESIZE_CELLS: "resizeCells",
+  CELLS_RESIZED: "cellsResized",
+  TOGGLE_CELLS: "toggleCells",
+  CELLS_TOGGLED: "cellsToggled",
+  ORDER_CELLS: "orderCells",
+  CELLS_ORDERED: "cellsOrdered",
+  REMOVE_CELLS: "removeCells",
+  CELLS_REMOVED: "cellsRemoved",
+  GROUP_CELLS: "groupCells",
+  UNGROUP_CELLS: "ungroupCells",
+  REMOVE_CELLS_FROM_PARENT: "removeCellsFromParent",
+  FOLD_CELLS: "foldCells",
+  CELLS_FOLDED: "cellsFolded",
+  ALIGN_CELLS: "alignCells",
+  LABEL_CHANGED: "labelChanged",
+  CONNECT_CELL: "connectCell",
+  CELL_CONNECTED: "cellConnected",
+  SPLIT_EDGE: "splitEdge",
+  FLIP_EDGE: "flipEdge",
+  START_EDITING: "startEditing",
+  ADD_OVERLAY: "addOverlay",
+  REMOVE_OVERLAY: "removeOverlay",
+  UPDATE_CELL_SIZE: "updateCellSize",
+  ESCAPE: "escape",
+  CLICK: "click",
+  DOUBLE_CLICK: "doubleClick",
+  START: "start",
+  RESET: "reset"
+};
+
+function mxXmlRequest(a, b, c, d, e, f) {
+  this.url = a;
+  this.params = b;
+  this.method = c || "POST";
+  this.async = null != d ? d : !0;
+  this.username = e;
+  this.password = f
+}
+mxXmlRequest.prototype.url = null;
+mxXmlRequest.prototype.params = null;
+mxXmlRequest.prototype.method = null;
+mxXmlRequest.prototype.async = null;
+mxXmlRequest.prototype.binary = !1;
+mxXmlRequest.prototype.username = null;
+mxXmlRequest.prototype.password = null;
+mxXmlRequest.prototype.request = null;
+mxXmlRequest.prototype.isBinary = function() {
+  return this.binary
+};
+mxXmlRequest.prototype.setBinary = function(a) {
+  this.binary = a
+};
+mxXmlRequest.prototype.getText = function() {
+  return this.request.responseText
+};
+mxXmlRequest.prototype.isReady = function() {
+  return 4 == this.request.readyState
+};
+mxXmlRequest.prototype.getDocumentElement = function() {
+  var a = this.getXml();
+  return null != a ? a.documentElement : null
+};
+mxXmlRequest.prototype.getXml = function() {
+  var a = this.request.responseXML;
+  if (9 <= document.documentMode || null == a || null == a.documentElement) a = mxUtils.parseXml(this.request.responseText);
+  return a
+};
+mxXmlRequest.prototype.getText = function() {
+  return this.request.responseText
+};
+mxXmlRequest.prototype.getStatus = function() {
+  return this.request.status
+};
+mxXmlRequest.prototype.create = function() {
+  if (window.XMLHttpRequest) return function() {
+    var a = new XMLHttpRequest;
+    this.isBinary() && a.overrideMimeType && a.overrideMimeType("text/plain; charset\x3dx-user-defined");
+    return a
+  };
+  if ("undefined" != typeof ActiveXObject) return function() {
+    return new ActiveXObject("Microsoft.XMLHTTP")
+  }
+}();
+mxXmlRequest.prototype.send = function(a, b) {
+  this.request = this.create();
+  null != this.request && (null != a && (this.request.onreadystatechange = mxUtils.bind(this, function() {
+    this.isReady() && (a(this), this.onreadystatechaange = null)
+  })), this.request.open(this.method, this.url, this.async, this.username, this.password), this.setRequestHeaders(this.request, this.params), this.request.send(this.params))
+};
+mxXmlRequest.prototype.setRequestHeaders = function(a, b) {
+  null != b && a.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
+};
+mxXmlRequest.prototype.simulate = function(a, b) {
+  a = a || document;
+  var c = null;
+  a == document && (c = window.onbeforeunload, window.onbeforeunload = null);
+  var d = a.createElement("form");
+  d.setAttribute("method", this.method);
+  d.setAttribute("action", this.url);
+  null != b && d.setAttribute("target", b);
+  d.style.display = "none";
+  d.style.visibility = "hidden";
+  for (var e = 0 < this.params.indexOf("\x26") ? this.params.split("\x26") : this.params.split(), f = 0; f < e.length; f++) {
+    var g = e[f].indexOf("\x3d");
+    if (0 < g) {
+      var h = e[f].substring(0, g),
+        k = e[f].substring(g +
+          1),
+        g = a.createElement("textarea");
+      g.setAttribute("name", h);
+      k = k.replace(/\n/g, "\x26#xa;");
+      h = a.createTextNode(k);
+      g.appendChild(h);
+      d.appendChild(g)
+    }
+  }
+  a.body.appendChild(d);
+  d.submit();
+  a.body.removeChild(d);
+  null != c && (window.onbeforeunload = c)
+};
+var mxClipboard = {
+  STEPSIZE: 10,
+  insertCount: 1,
+  cells: null,
+  isEmpty: function() {
+    return null == mxClipboard.cells
+  },
+  cut: function(a, b) {
+    b = mxClipboard.copy(a, b);
+    mxClipboard.insertCount = 0;
+    mxClipboard.removeCells(a, b);
+    return b
+  },
+  removeCells: function(a, b) {
+    a.removeCells(b)
+  },
+  copy: function(a, b) {
+    b = b || a.getSelectionCells();
+    var c = a.getExportableCells(b);
+    mxClipboard.insertCount = 1;
+    mxClipboard.cells = a.cloneCells(c);
+    return c
+  },
+  paste: function(a) {
+    if (null != mxClipboard.cells) {
+      var b = a.getImportableCells(mxClipboard.cells),
+        c = mxClipboard.insertCount *
+        mxClipboard.STEPSIZE,
+        d = a.getDefaultParent(),
+        b = a.importCells(b, c, c, d);
+      mxClipboard.insertCount++;
+      a.setSelectionCells(b)
+    }
+  }
+};
+
+function mxWindow(a, b, c, d, e, f, g, h, k, l) {
+  null != b && (g = null != g ? g : !0, this.content = b, this.init(c, d, e, f, l), this.installMaximizeHandler(), this.installMinimizeHandler(), this.installCloseHandler(), this.setMinimizable(g),
+    this.setTitle(a), (null == h || h) && this.installMoveHandler(), null != k && null != k.parentNode ? k.parentNode.replaceChild(this.div, k) : document.body.appendChild(this.div))
+}
+mxWindow.prototype = new mxEventSource;
+mxWindow.prototype.constructor = mxWindow;
+mxWindow.prototype.closeImage = mxClient.imageBasePath + "/close.gif";
+mxWindow.prototype.minimizeImage = mxClient.imageBasePath + "/minimize.gif";
+mxWindow.prototype.normalizeImage = mxClient.imageBasePath + "/normalize.gif";
+mxWindow.prototype.maximizeImage = mxClient.imageBasePath + "/maximize.gif";
+mxWindow.prototype.resizeImage = mxClient.imageBasePath + "/resize.gif";
+mxWindow.prototype.visible = !1;
+mxWindow.prototype.content = !1;
+mxWindow.prototype.minimumSize = new mxRectangle(0, 0, 50, 40);
+mxWindow.prototype.title = !1;
+mxWindow.prototype.content = !1;
+mxWindow.prototype.destroyOnClose = !0;
+mxWindow.prototype.init = function(a, b, c, d, e) {
+  e = null != e ? e : "mxWindow";
+  this.div = document.createElement("div");
+  this.div.className = e;
+  this.div.style.left = a + "px";
+  this.div.style.top = b + "px";
+  this.table = document.createElement("table");
+  this.table.className = e;
+  null != c && (mxClient.IS_IE || (this.div.style.width = c + "px"), this.table.style.width = c + "px");
+  null != d && (mxClient.IS_IE || (this.div.style.height = d + "px"), this.table.style.height = d + "px");
+  a = document.createElement("tbody");
+  b = document.createElement("tr");
+  this.title = document.createElement("td");
+  this.title.className = e + "Title";
+  b.appendChild(this.title);
+  a.appendChild(b);
+  b = document.createElement("tr");
+  this.td = document.createElement("td");
+  this.td.className = e + "Pane";
+  this.contentWrapper = document.createElement("div");
+  this.contentWrapper.className = e + "Pane";
+  this.contentWrapper.style.width = "100%";
+  this.contentWrapper.appendChild(this.content);
+  if (mxClient.IS_IE || "DIV" != this.content.nodeName.toUpperCase()) this.contentWrapper.style.height = "100%";
+  this.td.appendChild(this.contentWrapper);
+  b.appendChild(this.td);
+  a.appendChild(b);
+  this.table.appendChild(a);
+  this.div.appendChild(this.table);
+  e = mxUtils.bind(this, function(a) {
+    this.activate()
+  });
+  mxEvent.addListener(this.title, "mousedown", e);
+  mxEvent.addListener(this.table, "mousedown", e);
+  mxClient.IS_TOUCH && (mxEvent.addListener(this.title, "touchstart", e), mxEvent.addListener(this.table, "touchstart", e));
+  this.hide()
+};
+mxWindow.prototype.setTitle = function(a) {
+  for (var b = this.title.firstChild; null != b;) {
+    var c = b.nextSibling;
+    b.nodeType == mxConstants.NODETYPE_TEXT && b.parentNode.removeChild(b);
+    b = c
+  }
+  mxUtils.write(this.title, a || "")
+};
+mxWindow.prototype.setScrollable = function(a) {
+  0 > navigator.userAgent.indexOf("Presto/2.5") && (this.contentWrapper.style.overflow = a ? "auto" : "hidden")
+};
+mxWindow.prototype.activate = function() {
+  if (mxWindow.activeWindow != this) {
+    var a = mxUtils.getCurrentStyle(this.getElement()),
+      a = null != a ? a.zIndex : 3;
+    if (mxWindow.activeWindow) {
+      var b = mxWindow.activeWindow.getElement();
+      null != b && null != b.style && (b.style.zIndex = a)
+    }
+    b = mxWindow.activeWindow;
+    this.getElement().style.zIndex = parseInt(a) + 1;
+    mxWindow.activeWindow = this;
+    this.fireEvent(new mxEventObject(mxEvent.ACTIVATE, "previousWindow", b))
+  }
+};
+mxWindow.prototype.getElement = function() {
+  return this.div
+};
+mxWindow.prototype.fit = function() {
+  mxUtils.fit(this.div)
+};
+mxWindow.prototype.isResizable = function() {
+  return null != this.resize ? "none" != this.resize.style.display : !1
+};
+mxWindow.prototype.setResizable = function(a) {
+  a ? null == this.resize ? (this.resize = document.createElement("img"), this.resize.style.position = "absolute", this.resize.style.bottom = "2px", this.resize.style.right = "2px", this.resize.setAttribute(
+      "src", mxClient.imageBasePath + "/resize.gif"), this.resize.style.cursor = "nw-resize", mxEvent.addGestureListeners(this.resize, mxUtils.bind(this, function(a) {
+      this.activate();
+      var c = mxEvent.getClientX(a),
+        d = mxEvent.getClientY(a),
+        e = this.div.offsetWidth,
+        f = this.div.offsetHeight,
+        g = mxUtils.bind(this,
+          function(a) {
+            var b = mxEvent.getClientX(a) - c,
+              g = mxEvent.getClientY(a) - d;
+            this.setSize(e + b, f + g);
+            this.fireEvent(new mxEventObject(mxEvent.RESIZE, "event", a));
+            mxEvent.consume(a)
+          }),
+        h = mxUtils.bind(this, function(a) {
+          mxEvent.removeGestureListeners(document, null, g, h);
+          this.fireEvent(new mxEventObject(mxEvent.RESIZE_END, "event", a));
+          mxEvent.consume(a)
+        });
+      mxEvent.addGestureListeners(document, null, g, h);
+      this.fireEvent(new mxEventObject(mxEvent.RESIZE_START, "event", a));
+      mxEvent.consume(a)
+    }), null, null), this.div.appendChild(this.resize)) :
+    this.resize.style.display = "inline" : null != this.resize && (this.resize.style.display = "none")
+};
+mxWindow.prototype.setSize = function(a, b) {
+  a = Math.max(this.minimumSize.width, a);
+  b = Math.max(this.minimumSize.height, b);
+  mxClient.IS_IE || (this.div.style.width = a + "px", this.div.style.height = b + "px");
+  this.table.style.width = a + "px";
+  this.table.style.height = b + "px";
+  mxClient.IS_IE || (this.contentWrapper.style.height = this.div.offsetHeight - this.title.offsetHeight - 2 + "px")
+};
+mxWindow.prototype.setMinimizable = function(a) {
+  this.minimize.style.display = a ? "" : "none"
+};
+mxWindow.prototype.getMinimumSize = function() {
+  return new mxRectangle(0, 0, 0, this.title.offsetHeight)
+};
+mxWindow.prototype.installMinimizeHandler = function() {
+  this.minimize = document.createElement("img");
+  this.minimize.setAttribute("src", this.minimizeImage);
+  this.minimize.setAttribute("align", "right");
+  this.minimize.setAttribute("title", "Minimize");
+  this.minimize.style.cursor = "pointer";
+  this.minimize.style.marginRight = "1px";
+  this.minimize.style.display = "none";
+  this.title.appendChild(this.minimize);
+  var a = !1,
+    b = null,
+    c = null,
+    d = mxUtils.bind(this, function(d) {
+      this.activate();
+      if (a) a = !1, this.minimize.setAttribute("src",
+        this.minimizeImage), this.minimize.setAttribute("title", "Minimize"), this.contentWrapper.style.display = "", this.maximize.style.display = b, mxClient.IS_IE || (this.div.style.height =
+        c), this.table.style.height = c, null != this.resize && (this.resize.style.visibility = ""), this.fireEvent(new mxEventObject(mxEvent.NORMALIZE, "event", d));
+      else {
+        a = !0;
+        this.minimize.setAttribute("src", this.normalizeImage);
+        this.minimize.setAttribute("title", "Normalize");
+        this.contentWrapper.style.display = "none";
+        b = this.maximize.style.display;
+        this.maximize.style.display = "none";
+        c = this.table.style.height;
+        var f = this.getMinimumSize();
+        0 < f.height && (mxClient.IS_IE || (this.div.style.height = f.height + "px"), this.table.style.height = f.height + "px");
+        0 < f.width && (mxClient.IS_IE || (this.div.style.width = f.width + "px"), this.table.style.width = f.width + "px");
+        null != this.resize && (this.resize.style.visibility = "hidden");
+        this.fireEvent(new mxEventObject(mxEvent.MINIMIZE, "event", d))
+      }
+      mxEvent.consume(d)
+    });
+  mxEvent.addListener(this.minimize, "mousedown", d);
+  mxClient.IS_TOUCH &&
+    mxEvent.addListener(this.minimize, "touchstart", d)
+};
+mxWindow.prototype.setMaximizable = function(a) {
+  this.maximize.style.display = a ? "" : "none"
+};
+mxWindow.prototype.installMaximizeHandler = function() {
+  this.maximize = document.createElement("img");
+  this.maximize.setAttribute("src", this.maximizeImage);
+  this.maximize.setAttribute("align", "right");
+  this.maximize.setAttribute("title", "Maximize");
+  this.maximize.style.cursor = "default";
+  this.maximize.style.marginLeft = "1px";
+  this.maximize.style.cursor = "pointer";
+  this.maximize.style.display = "none";
+  this.title.appendChild(this.maximize);
+  var a = !1,
+    b = null,
+    c = null,
+    d = null,
+    e = null,
+    f = mxUtils.bind(this, function(f) {
+      this.activate();
+      if ("none" != this.maximize.style.display) {
+        if (a) {
+          a = !1;
+          this.maximize.setAttribute("src", this.maximizeImage);
+          this.maximize.setAttribute("title", "Maximize");
+          this.contentWrapper.style.display = "";
+          this.minimize.style.visibility = "";
+          this.div.style.left = b + "px";
+          this.div.style.top = c + "px";
+          if (!mxClient.IS_IE && (this.div.style.height = d, this.div.style.width = e, h = mxUtils.getCurrentStyle(this.contentWrapper), "auto" == h.overflow || null != this.resize)) this.contentWrapper
+            .style.height = this.div.offsetHeight - this.title.offsetHeight -
+            2 + "px";
+          this.table.style.height = d;
+          this.table.style.width = e;
+          null != this.resize && (this.resize.style.visibility = "");
+          this.fireEvent(new mxEventObject(mxEvent.NORMALIZE, "event", f))
+        } else {
+          a = !0;
+          this.maximize.setAttribute("src", this.normalizeImage);
+          this.maximize.setAttribute("title", "Normalize");
+          this.contentWrapper.style.display = "";
+          this.minimize.style.visibility = "hidden";
+          b = parseInt(this.div.style.left);
+          c = parseInt(this.div.style.top);
+          d = this.table.style.height;
+          e = this.table.style.width;
+          this.div.style.left = "0px";
+          this.div.style.top = "0px";
+          mxClient.IS_IE || (this.div.style.height = document.body.clientHeight - 2 + "px", this.div.style.width = document.body.clientWidth - 2 + "px");
+          this.table.style.width = document.body.clientWidth - 2 + "px";
+          this.table.style.height = document.body.clientHeight - 2 + "px";
+          null != this.resize && (this.resize.style.visibility = "hidden");
+          if (!mxClient.IS_IE) {
+            var h = mxUtils.getCurrentStyle(this.contentWrapper);
+            if ("auto" == h.overflow || null != this.resize) this.contentWrapper.style.height = this.div.offsetHeight - this.title.offsetHeight -
+              2 + "px"
+          }
+          this.fireEvent(new mxEventObject(mxEvent.MAXIMIZE, "event", f))
+        }
+        mxEvent.consume(f)
+      }
+    });
+  mxEvent.addGestureListeners(this.maximize, f);
+  mxEvent.addListener(this.title, "dblclick", f)
+};
+mxWindow.prototype.installMoveHandler = function() {
+  this.title.style.cursor = "move";
+  mxEvent.addGestureListeners(this.title, mxUtils.bind(this, function(a) {
+    var b = mxEvent.getClientX(a),
+      c = mxEvent.getClientY(a),
+      d = this.getX(),
+      e = this.getY(),
+      f = mxUtils.bind(this, function(a) {
+        var f = mxEvent.getClientX(a) - b,
+          g = mxEvent.getClientY(a) - c;
+        this.setLocation(d + f, e + g);
+        this.fireEvent(new mxEventObject(mxEvent.MOVE, "event", a));
+        mxEvent.consume(a)
+      }),
+      g = mxUtils.bind(this, function(a) {
+        mxEvent.removeGestureListeners(document, null, f,
+          g);
+        this.fireEvent(new mxEventObject(mxEvent.MOVE_END, "event", a));
+        mxEvent.consume(a)
+      });
+    mxEvent.addGestureListeners(document, null, f, g);
+    this.fireEvent(new mxEventObject(mxEvent.MOVE_START, "event", a));
+    mxEvent.consume(a)
+  }))
+};
+mxWindow.prototype.setLocation = function(a, b) {
+  this.div.style.left = a + "px";
+  this.div.style.top = b + "px"
+};
+mxWindow.prototype.getX = function() {
+  return parseInt(this.div.style.left)
+};
+mxWindow.prototype.getY = function() {
+  return parseInt(this.div.style.top)
+};
+mxWindow.prototype.installCloseHandler = function() {
+  this.closeImg = document.createElement("img");
+  this.closeImg.setAttribute("src", this.closeImage);
+  this.closeImg.setAttribute("align", "right");
+  this.closeImg.setAttribute("title", "Close");
+  this.closeImg.style.marginLeft = "2px";
+  this.closeImg.style.cursor = "pointer";
+  this.closeImg.style.display = "none";
+  this.title.insertBefore(this.closeImg, this.title.firstChild);
+  mxEvent.addGestureListeners(this.closeImg, mxUtils.bind(this, function(a) {
+    this.fireEvent(new mxEventObject(mxEvent.CLOSE,
+      "event", a));
+    this.destroyOnClose ? this.destroy() : this.setVisible(!1);
+    mxEvent.consume(a)
+  }))
+};
+mxWindow.prototype.setImage = function(a) {
+  this.image = document.createElement("img");
+  this.image.setAttribute("src", a);
+  this.image.setAttribute("align", "left");
+  this.image.style.marginRight = "4px";
+  this.image.style.marginLeft = "0px";
+  this.image.style.marginTop = "-2px";
+  this.title.insertBefore(this.image, this.title.firstChild)
+};
+mxWindow.prototype.setClosable = function(a) {
+  this.closeImg.style.display = a ? "" : "none"
+};
+mxWindow.prototype.isVisible = function() {
+  return null != this.div ? "hidden" != this.div.style.visibility : !1
+};
+mxWindow.prototype.setVisible = function(a) {
+  null != this.div && this.isVisible() != a && (a ? this.show() : this.hide())
+};
+mxWindow.prototype.show = function() {
+  this.div.style.visibility = "";
+  this.activate();
+  var a = mxUtils.getCurrentStyle(this.contentWrapper);
+  if (!mxClient.IS_IE && ("auto" == a.overflow || null != this.resize)) this.contentWrapper.style.height = this.div.offsetHeight - this.title.offsetHeight - 2 + "px";
+  this.fireEvent(new mxEventObject(mxEvent.SHOW))
+};
+mxWindow.prototype.hide = function() {
+  this.div.style.visibility = "hidden";
+  this.fireEvent(new mxEventObject(mxEvent.HIDE))
+};
+mxWindow.prototype.destroy = function() {
+  this.fireEvent(new mxEventObject(mxEvent.DESTROY));
+  null != this.div && (mxEvent.release(this.div), this.div.parentNode.removeChild(this.div), this.div = null);
+  this.contentWrapper = this.content = this.title = null
+};
+
+function mxForm(a) {
+  this.table = document.createElement("table");
+  this.table.className = a;
+  this.body = document.createElement("tbody");
+  this.table.appendChild(this.body)
+}
+mxForm.prototype.table = null;
+mxForm.prototype.body = !1;
+mxForm.prototype.getTable = function() {
+  return this.table
+};
+mxForm.prototype.addButtons = function(a, b) {
+  var c = document.createElement("tr"),
+    d = document.createElement("td");
+  c.appendChild(d);
+  var d = document.createElement("td"),
+    e = document.createElement("button");
+  mxUtils.write(e, mxResources.get("ok") || "OK");
+  d.appendChild(e);
+  mxEvent.addListener(e, "click", function() {
+    a()
+  });
+  e = document.createElement("button");
+  mxUtils.write(e, mxResources.get("cancel") || "Cancel");
+  d.appendChild(e);
+  mxEvent.addListener(e, "click", function() {
+    b()
+  });
+  c.appendChild(d);
+  this.body.appendChild(c)
+};
+mxForm.prototype.addText = function(a, b) {
+  var c = document.createElement("input");
+  c.setAttribute("type", "text");
+  c.value = b;
+  return this.addField(a, c)
+};
+mxForm.prototype.addCheckbox = function(a, b) {
+  var c = document.createElement("input");
+  c.setAttribute("type", "checkbox");
+  this.addField(a, c);
+  b && (c.checked = !0);
+  return c
+};
+mxForm.prototype.addTextarea = function(a, b, c) {
+  var d = document.createElement("textarea");
+  mxClient.IS_NS && c--;
+  d.setAttribute("rows", c || 2);
+  d.value = b;
+  return this.addField(a, d)
+};
+mxForm.prototype.addCombo = function(a, b, c) {
+  var d = document.createElement("select");
+  null != c && d.setAttribute("size", c);
+  b && d.setAttribute("multiple", "true");
+  return this.addField(a, d)
+};
+mxForm.prototype.addOption = function(a, b, c, d) {
+  var e = document.createElement("option");
+  mxUtils.writeln(e, b);
+  e.setAttribute("value", c);
+  d && e.setAttribute("selected", d);
+  a.appendChild(e)
+};
+mxForm.prototype.addField = function(a, b) {
+  var c = document.createElement("tr"),
+    d = document.createElement("td");
+  mxUtils.write(d, a);
+  c.appendChild(d);
+  d = document.createElement("td");
+  d.appendChild(b);
+  c.appendChild(d);
+  this.body.appendChild(c);
+  return b
+};
+
+function mxImage(a, b, c) {
+  this.src = a;
+  this.width = b;
+  this.height = c
+}
+mxImage.prototype.src = null;
+mxImage.prototype.width = null;
+mxImage.prototype.height = null;
+
+function mxDivResizer(a, b) {
+  if ("div" == a.nodeName.toLowerCase()) {
+    null == b && (b = window);
+    this.div = a;
+    var c = mxUtils.getCurrentStyle(a);
+    null != c && (this.resizeWidth = "auto" == c.width, this.resizeHeight = "auto" == c.height);
+    mxEvent.addListener(b, "resize", mxUtils.bind(this, function(a) {
+      this.handlingResize || (this.handlingResize = !0, this.resize(), this.handlingResize = !1)
+    }));
+    this.resize()
+  }
+}
+mxDivResizer.prototype.resizeWidth = !0;
+mxDivResizer.prototype.resizeHeight = !0;
+mxDivResizer.prototype.handlingResize = !1;
+mxDivResizer.prototype.resize = function() {
+  var a = this.getDocumentWidth(),
+    b = this.getDocumentHeight(),
+    c = parseInt(this.div.style.left),
+    d = parseInt(this.div.style.right),
+    e = parseInt(this.div.style.top),
+    f = parseInt(this.div.style.bottom);
+  this.resizeWidth && (!isNaN(c) && !isNaN(d) && 0 <= c && 0 <= d && 0 < a - d - c) && (this.div.style.width = a - d - c + "px");
+  this.resizeHeight && (!isNaN(e) && !isNaN(f) && 0 <= e && 0 <= f && 0 < b - e - f) && (this.div.style.height = b - e - f + "px")
+};
+mxDivResizer.prototype.getDocumentWidth = function() {
+  return document.body.clientWidth
+};
+mxDivResizer.prototype.getDocumentHeight = function() {
+  return document.body.clientHeight
+};
+
+function mxDragSource(a, b) {
+  this.element = a;
+  this.dropHandler = b;
+  mxEvent.addGestureListeners(a, mxUtils.bind(this, this.mouseDown))
+}
+mxDragSource.prototype.element = null;
+mxDragSource.prototype.dropHandler = null;
+mxDragSource.prototype.dragOffset = null;
+mxDragSource.prototype.dragElement = null;
+mxDragSource.prototype.previewElement = null;
+mxDragSource.prototype.enabled = !0;
+mxDragSource.prototype.currentGraph = null;
+mxDragSource.prototype.currentDropTarget = null;
+mxDragSource.prototype.currentPoint = null;
+mxDragSource.prototype.currentGuide = null;
+mxDragSource.prototype.currentHighlight = null;
+mxDragSource.prototype.autoscroll = !0;
+mxDragSource.prototype.guidesEnabled = !0;
+mxDragSource.prototype.gridEnabled = !0;
+mxDragSource.prototype.highlightDropTargets = !0;
+mxDragSource.prototype.dragElementZIndex = 100;
+mxDragSource.prototype.dragElementOpacity = 70;
+mxDragSource.prototype.isEnabled = function() {
+  return this.enabled
+};
+mxDragSource.prototype.setEnabled = function(a) {
+  this.enabled = a
+};
+mxDragSource.prototype.isGuidesEnabled = function() {
+  return this.guidesEnabled
+};
+mxDragSource.prototype.setGuidesEnabled = function(a) {
+  this.guidesEnabled = a
+};
+mxDragSource.prototype.isGridEnabled = function() {
+  return this.gridEnabled
+};
+mxDragSource.prototype.setGridEnabled = function(a) {
+  this.gridEnabled = a
+};
+mxDragSource.prototype.getGraphForEvent = function(a) {
+  return null
+};
+mxDragSource.prototype.getDropTarget = function(a, b, c) {
+  return a.getCellAt(b, c)
+};
+mxDragSource.prototype.createDragElement = function(a) {
+  return this.element.cloneNode(!0)
+};
+mxDragSource.prototype.createPreviewElement = function(a) {
+  return null
+};
+mxDragSource.prototype.mouseDown = function(a) {
+  this.enabled && (!mxEvent.isConsumed(a) && null == this.mouseMoveHandler) && (this.startDrag(a), this.mouseMoveHandler = mxUtils.bind(this, this.mouseMove), this.mouseUpHandler = mxUtils.bind(
+    this, this.mouseUp), mxEvent.addGestureListeners(document, null, this.mouseMoveHandler, this.mouseUpHandler), mxEvent.consume(a, !0, !1))
+};
+mxDragSource.prototype.startDrag = function(a) {
+  this.dragElement = this.createDragElement(a);
+  this.dragElement.style.position = "absolute";
+  this.dragElement.style.zIndex = this.dragElementZIndex;
+  mxUtils.setOpacity(this.dragElement, this.dragElementOpacity)
+};
+mxDragSource.prototype.stopDrag = function(a) {
+  null != this.dragElement && (null != this.dragElement.parentNode && this.dragElement.parentNode.removeChild(this.dragElement), this.dragElement = null)
+};
+mxDragSource.prototype.graphContainsEvent = function(a, b) {
+  var c = mxEvent.getClientX(b),
+    d = mxEvent.getClientY(b),
+    e = mxUtils.getOffset(a.container),
+    f = mxUtils.getScrollOrigin();
+  return c >= e.x - f.x && d >= e.y - f.y && c <= e.x - f.x + a.container.offsetWidth && d <= e.y - f.y + a.container.offsetHeight
+};
+mxDragSource.prototype.mouseMove = function(a) {
+  var b = this.getGraphForEvent(a);
+  null != b && !this.graphContainsEvent(b, a) && (b = null);
+  b != this.currentGraph && (null != this.currentGraph && this.dragExit(this.currentGraph), this.currentGraph = b, null != this.currentGraph && this.dragEnter(this.currentGraph));
+  null != this.currentGraph && this.dragOver(this.currentGraph, a);
+  if (null != this.dragElement && (null == this.previewElement || "visible" != this.previewElement.style.visibility)) {
+    var b = mxEvent.getClientX(a),
+      c = mxEvent.getClientY(a);
+    null == this.dragElement.parentNode && document.body.appendChild(this.dragElement);
+    this.dragElement.style.visibility = "visible";
+    null != this.dragOffset && (b += this.dragOffset.x, c += this.dragOffset.y);
+    b += document.body.scrollLeft || document.documentElement.scrollLeft;
+    c += document.body.scrollTop || document.documentElement.scrollTop;
+    this.dragElement.style.left = b + "px";
+    this.dragElement.style.top = c + "px"
+  } else null != this.dragElement && (this.dragElement.style.visibility = "hidden");
+  mxEvent.consume(a)
+};
+mxDragSource.prototype.mouseUp = function(a) {
+  if (null != this.currentGraph) {
+    if (null != this.currentPoint && (null == this.previewElement || "hidden" != this.previewElement.style.visibility)) {
+      var b = this.currentGraph.view.scale,
+        c = this.currentGraph.view.translate;
+      this.drop(this.currentGraph, a, this.currentDropTarget, this.currentPoint.x / b - c.x, this.currentPoint.y / b - c.y)
+    }
+    this.dragExit(this.currentGraph)
+  }
+  this.stopDrag(a);
+  mxEvent.removeGestureListeners(document, null, this.mouseMoveHandler, this.mouseUpHandler);
+  this.currentGraph =
+    this.mouseUpHandler = this.mouseMoveHandler = null;
+  mxEvent.consume(a)
+};
+mxDragSource.prototype.dragEnter = function(a) {
+  a.isMouseDown = !0;
+  this.previewElement = this.createPreviewElement(a);
+  this.isGuidesEnabled() && null != this.previewElement && (this.currentGuide = new mxGuide(a, a.graphHandler.getGuideStates()));
+  this.highlightDropTargets && (this.currentHighlight = new mxCellHighlight(a, mxConstants.DROP_TARGET_COLOR))
+};
+mxDragSource.prototype.dragExit = function(a) {
+  this.currentPoint = this.currentDropTarget = null;
+  a.isMouseDown = !1;
+  null != this.previewElement && (null != this.previewElement.parentNode && this.previewElement.parentNode.removeChild(this.previewElement), this.previewElement = null);
+  null != this.currentGuide && (this.currentGuide.destroy(), this.currentGuide = null);
+  null != this.currentHighlight && (this.currentHighlight.destroy(), this.currentHighlight = null)
+};
+mxDragSource.prototype.dragOver = function(a, b) {
+  var c = mxUtils.getOffset(a.container),
+    d = mxUtils.getScrollOrigin(a.container),
+    e = mxEvent.getClientX(b) - c.x + d.x,
+    c = mxEvent.getClientY(b) - c.y + d.y;
+  a.autoScroll && (null == this.autoscroll || this.autoscroll) && a.scrollPointToVisible(e, c, a.autoExtend);
+  null != this.currentHighlight && a.isDropEnabled() && (this.currentDropTarget = this.getDropTarget(a, e, c), d = a.getView().getState(this.currentDropTarget), this.currentHighlight.highlight(d));
+  if (null != this.previewElement) {
+    null == this.previewElement.parentNode &&
+      (a.container.appendChild(this.previewElement), this.previewElement.style.zIndex = "3", this.previewElement.style.position = "absolute");
+    var d = this.isGridEnabled() && a.isGridEnabledEvent(b),
+      f = !0;
+    if (null != this.currentGuide && this.currentGuide.isEnabledForEvent(b)) var f = parseInt(this.previewElement.style.width),
+      g = parseInt(this.previewElement.style.height),
+      f = new mxRectangle(0, 0, f, g),
+      c = new mxPoint(e, c),
+      c = this.currentGuide.move(f, c, d),
+      f = !1,
+      e = c.x,
+      c = c.y;
+    else if (d) var d = a.view.scale,
+      g = a.view.translate,
+      h = a.gridSize /
+      2,
+      e = (a.snap(e / d - g.x - h) + g.x) * d,
+      c = (a.snap(c / d - g.y - h) + g.y) * d;
+    null != this.currentGuide && f && this.currentGuide.hide();
+    null != this.previewOffset && (e += this.previewOffset.x, c += this.previewOffset.y);
+    this.previewElement.style.left = Math.round(e) + "px";
+    this.previewElement.style.top = Math.round(c) + "px";
+    this.previewElement.style.visibility = "visible"
+  }
+  this.currentPoint = new mxPoint(e, c)
+};
+mxDragSource.prototype.drop = function(a, b, c, d, e) {
+  this.dropHandler(a, b, c, d, e);
+  a.container.focus()
+};
+
+function mxToolbar(a) {
+  this.container = a
+}
+mxToolbar.prototype = new mxEventSource;
+mxToolbar.prototype.constructor = mxToolbar;
+mxToolbar.prototype.container = null;
+mxToolbar.prototype.enabled = !0;
+mxToolbar.prototype.noReset = !1;
+mxToolbar.prototype.updateDefaultMode = !0;
+mxToolbar.prototype.addItem = function(a, b, c, d, e, f) {
+  var g = document.createElement(null != b ? "img" : "button"),
+    h = e || (null != f ? "mxToolbarMode" : "mxToolbarItem");
+  g.className = h;
+  g.setAttribute("src", b);
+  null != a && (null != b ? g.setAttribute("title", a) : mxUtils.write(g, a));
+  this.container.appendChild(g);
+  null != c && (mxEvent.addListener(g, "click", c), mxClient.IS_TOUCH && mxEvent.addListener(g, "touchend", c));
+  a = mxUtils.bind(this, function(a) {
+    null != d ? g.setAttribute("src", b) : g.style.backgroundColor = ""
+  });
+  mxEvent.addGestureListeners(g,
+    mxUtils.bind(this, function(a) {
+      null != d ? g.setAttribute("src", d) : g.style.backgroundColor = "gray";
+      if (null != f) {
+        null == this.menu && (this.menu = new mxPopupMenu, this.menu.init());
+        var b = this.currentImg;
+        this.menu.isMenuShowing() && this.menu.hideMenu();
+        b != g && (this.currentImg = g, this.menu.factoryMethod = f, b = new mxPoint(g.offsetLeft, g.offsetTop + g.offsetHeight), this.menu.popup(b.x, b.y, null, a), this.menu.isMenuShowing() &&
+          (g.className = h + "Selected", this.menu.hideMenu = function() {
+            mxPopupMenu.prototype.hideMenu.apply(this);
+            g.className = h;
+            this.currentImg = null
+          }))
+      }
+    }), null, a);
+  mxEvent.addListener(g, "mouseout", a);
+  return g
+};
+mxToolbar.prototype.addCombo = function(a) {
+  var b = document.createElement("div");
+  b.style.display = "inline";
+  b.className = "mxToolbarComboContainer";
+  var c = document.createElement("select");
+  c.className = a || "mxToolbarCombo";
+  b.appendChild(c);
+  this.container.appendChild(b);
+  return c
+};
+mxToolbar.prototype.addActionCombo = function(a, b) {
+  var c = document.createElement("select");
+  c.className = b || "mxToolbarCombo";
+  this.addOption(c, a, null);
+  mxEvent.addListener(c, "change", function(a) {
+    var b = c.options[c.selectedIndex];
+    c.selectedIndex = 0;
+    null != b.funct && b.funct(a)
+  });
+  this.container.appendChild(c);
+  return c
+};
+mxToolbar.prototype.addOption = function(a, b, c) {
+  var d = document.createElement("option");
+  mxUtils.writeln(d, b);
+  "function" == typeof c ? d.funct = c : d.setAttribute("value", c);
+  a.appendChild(d);
+  return d
+};
+mxToolbar.prototype.addSwitchMode = function(a, b, c, d, e) {
+  var f = document.createElement("img");
+  f.initialClassName = e || "mxToolbarMode";
+  f.className = f.initialClassName;
+  f.setAttribute("src", b);
+  f.altIcon = d;
+  null != a && f.setAttribute("title", a);
+  mxEvent.addListener(f, "click", mxUtils.bind(this, function(a) {
+    a = this.selectedMode.altIcon;
+    null != a ? (this.selectedMode.altIcon = this.selectedMode.getAttribute("src"), this.selectedMode.setAttribute("src", a)) : this.selectedMode.className = this.selectedMode.initialClassName;
+    this.updateDefaultMode &&
+      (this.defaultMode = f);
+    this.selectedMode = f;
+    a = f.altIcon;
+    null != a ? (f.altIcon = f.getAttribute("src"), f.setAttribute("src", a)) : f.className = f.initialClassName + "Selected";
+    this.fireEvent(new mxEventObject(mxEvent.SELECT));
+    c()
+  }));
+  this.container.appendChild(f);
+  null == this.defaultMode && (this.defaultMode = f, this.selectMode(f), c());
+  return f
+};
+mxToolbar.prototype.addMode = function(a, b, c, d, e, f) {
+  f = null != f ? f : !0;
+  var g = document.createElement(null != b ? "img" : "button");
+  g.initialClassName = e || "mxToolbarMode";
+  g.className = g.initialClassName;
+  g.setAttribute("src", b);
+  g.altIcon = d;
+  null != a && g.setAttribute("title", a);
+  this.enabled && f && (mxEvent.addListener(g, "click", mxUtils.bind(this, function(a) {
+      this.selectMode(g, c);
+      this.noReset = !1
+    })), mxEvent.addListener(g, "dblclick", mxUtils.bind(this, function(a) {
+      this.selectMode(g, c);
+      this.noReset = !0
+    })), null == this.defaultMode &&
+    (this.defaultMode = g, this.defaultFunction = c, this.selectMode(g, c)));
+  this.container.appendChild(g);
+  return g
+};
+mxToolbar.prototype.selectMode = function(a, b) {
+  if (this.selectedMode != a) {
+    if (null != this.selectedMode) {
+      var c = this.selectedMode.altIcon;
+      null != c ? (this.selectedMode.altIcon = this.selectedMode.getAttribute("src"), this.selectedMode.setAttribute("src", c)) : this.selectedMode.className = this.selectedMode.initialClassName
+    }
+    this.selectedMode = a;
+    c = this.selectedMode.altIcon;
+    null != c ? (this.selectedMode.altIcon = this.selectedMode.getAttribute("src"), this.selectedMode.setAttribute("src", c)) : this.selectedMode.className = this.selectedMode.initialClassName +
+      "Selected";
+    this.fireEvent(new mxEventObject(mxEvent.SELECT, "function", b))
+  }
+};
+mxToolbar.prototype.resetMode = function(a) {
+  (a || !this.noReset) && this.selectedMode != this.defaultMode && this.selectMode(this.defaultMode, this.defaultFunction)
+};
+mxToolbar.prototype.addSeparator = function(a) {
+  return this.addItem(null, a, null)
+};
+mxToolbar.prototype.addBreak = function() {
+  mxUtils.br(this.container)
+};
+mxToolbar.prototype.addLine = function() {
+  var a = document.createElement("hr");
+  a.style.marginRight = "6px";
+  a.setAttribute("size", "1");
+  this.container.appendChild(a)
+};
+mxToolbar.prototype.destroy = function() {
+  mxEvent.release(this.container);
+  this.selectedMode = this.defaultFunction = this.defaultMode = this.container = null;
+  null != this.menu && this.menu.destroy()
+};
+
+function mxSession(a, b, c, d) {
+  this.model = a;
+  this.urlInit = b;
+  this.urlPoll = c;
+  this.urlNotify = d;
+  null != a && (this.codec = new mxCodec, this.codec.lookup = function(b) {
+    return a.getCell(b)
+  });
+  a.addListener(mxEvent.NOTIFY, mxUtils.bind(this, function(a, b) {
+    var c = b.getProperty("edit");
+    (null != c && this.debug || this.connected && !this.suspended) && this.notify("\x3cedit\x3e" + this.encodeChanges(c.changes, c.undone) + "\x3c/edit\x3e")
+  }))
+}
+mxSession.prototype = new mxEventSource;
+mxSession.prototype.constructor = mxSession;
+mxSession.prototype.model = null;
+mxSession.prototype.urlInit = null;
+mxSession.prototype.urlPoll = null;
+mxSession.prototype.urlNotify = null;
+mxSession.prototype.codec = null;
+mxSession.prototype.linefeed = "\x26#xa;";
+mxSession.prototype.escapePostData = !0;
+mxSession.prototype.significantRemoteChanges = !0;
+mxSession.prototype.sent = 0;
+mxSession.prototype.received = 0;
+mxSession.prototype.debug = !1;
+mxSession.prototype.connected = !1;
+mxSession.prototype.suspended = !1;
+mxSession.prototype.polling = !1;
+mxSession.prototype.start = function() {
+  this.debug ? (this.connected = !0, this.fireEvent(new mxEventObject(mxEvent.CONNECT))) : this.connected || this.get(this.urlInit, mxUtils.bind(this, function(a) {
+    this.connected = !0;
+    this.fireEvent(new mxEventObject(mxEvent.CONNECT));
+    this.poll()
+  }))
+};
+mxSession.prototype.suspend = function() {
+  this.connected && !this.suspended && (this.suspended = !0, this.fireEvent(new mxEventObject(mxEvent.SUSPEND)))
+};
+mxSession.prototype.resume = function(a, b, c) {
+  this.connected && this.suspended && (this.suspended = !1, this.fireEvent(new mxEventObject(mxEvent.RESUME)), this.polling || this.poll())
+};
+mxSession.prototype.stop = function(a) {
+  this.connected && (this.connected = !1);
+  this.fireEvent(new mxEventObject(mxEvent.DISCONNECT, "reason", a))
+};
+mxSession.prototype.poll = function() {
+  this.connected && !this.suspended && null != this.urlPoll ? (this.polling = !0, this.get(this.urlPoll, mxUtils.bind(this, function() {
+    this.poll()
+  }))) : this.polling = !1
+};
+mxSession.prototype.notify = function(a, b, c) {
+  null != a && 0 < a.length && (null != this.urlNotify && (this.debug ? (mxLog.show(), mxLog.debug("mxSession.notify: " + this.urlNotify + " xml\x3d" + a)) : (a = "\x3cmessage\x3e\x3cdelta\x3e" + a +
+    "\x3c/delta\x3e\x3c/message\x3e", this.escapePostData && (a = encodeURIComponent(a)), mxUtils.post(this.urlNotify, "xml\x3d" + a, b, c))), this.sent += a.length, this.fireEvent(new mxEventObject(
+    mxEvent.NOTIFY, "url", this.urlNotify, "xml", a)))
+};
+mxSession.prototype.get = function(a, b, c) {
+  if ("undefined" != typeof mxUtils) {
+    var d = mxUtils.bind(this, function(a) {
+      null != c ? c(a) : this.stop(a)
+    });
+    mxUtils.get(a, mxUtils.bind(this, function(c) {
+        if ("undefined" != typeof mxUtils)
+          if (c.isReady() && 404 != c.getStatus()) {
+            if (this.received += c.getText().length, this.fireEvent(new mxEventObject(mxEvent.GET, "url", a, "request", c)), this.isValidResponse(c)) {
+              if (0 < c.getText().length) {
+                var f = c.getDocumentElement();
+                null == f ? d("Invalid response: " + c.getText()) : this.receive(f)
+              }
+              null != b && b(c)
+            }
+          } else d("Response not ready")
+      }),
+      function(a) {
+        d("Transmission error")
+      })
+  }
+};
+mxSession.prototype.isValidResponse = function(a) {
+  return 0 > a.getText().indexOf("\x3c?php")
+};
+mxSession.prototype.encodeChanges = function(a, b) {
+  for (var c = "", d = b ? -1 : 1, e = b ? a.length - 1 : 0; 0 <= e && e < a.length; e += d) var f = this.codec.encode(a[e]),
+    c = c + mxUtils.getXml(f, this.linefeed);
+  return c
+};
+mxSession.prototype.receive = function(a) {
+  if (null != a && a.nodeType == mxConstants.NODETYPE_ELEMENT) {
+    var b = a.getAttribute("namespace");
+    null != b && (this.model.prefix = b + "-");
+    for (b = a.firstChild; null != b;) {
+      var c = b.nodeName.toLowerCase();
+      "state" == c ? this.processState(b) : "delta" == c && this.processDelta(b);
+      b = b.nextSibling
+    }
+    this.fireEvent(new mxEventObject(mxEvent.RECEIVE, "node", a))
+  }
+};
+mxSession.prototype.processState = function(a) {
+  (new mxCodec(a.ownerDocument)).decode(a.firstChild, this.model)
+};
+mxSession.prototype.processDelta = function(a) {
+  for (a = a.firstChild; null != a;) "edit" == a.nodeName && this.processEdit(a), a = a.nextSibling
+};
+mxSession.prototype.processEdit = function(a) {
+  a = this.decodeChanges(a);
+  if (0 < a.length) {
+    var b = this.createUndoableEdit(a);
+    this.model.fireEvent(new mxEventObject(mxEvent.CHANGE, "edit", b, "changes", a));
+    this.model.fireEvent(new mxEventObject(mxEvent.UNDO, "edit", b));
+    this.fireEvent(new mxEventObject(mxEvent.FIRED, "edit", b))
+  }
+};
+mxSession.prototype.createUndoableEdit = function(a) {
+  var b = new mxUndoableEdit(this.model, this.significantRemoteChanges);
+  b.changes = a;
+  b.notify = function() {
+    b.source.fireEvent(new mxEventObject(mxEvent.CHANGE, "edit", b, "changes", b.changes));
+    b.source.fireEvent(new mxEventObject(mxEvent.NOTIFY, "edit", b, "changes", b.changes))
+  };
+  return b
+};
+mxSession.prototype.decodeChanges = function(a) {
+  this.codec.document = a.ownerDocument;
+  var b = [];
+  for (a = a.firstChild; null != a;) {
+    var c = this.decodeChange(a);
+    null != c && b.push(c);
+    a = a.nextSibling
+  }
+  return b
+};
+mxSession.prototype.decodeChange = function(a) {
+  var b = null;
+  a.nodeType == mxConstants.NODETYPE_ELEMENT && (b = "mxRootChange" == a.nodeName ? (new mxCodec(a.ownerDocument)).decode(a) : this.codec.decode(a), null != b && (b.model = this.model, b.execute(),
+    "mxChildChange" == a.nodeName && null == b.parent && this.cellRemoved(b.child)));
+  return b
+};
+mxSession.prototype.cellRemoved = function(a, b) {
+  this.codec.putObject(a.getId(), a);
+  for (var c = this.model.getChildCount(a), d = 0; d < c; d++) this.cellRemoved(this.model.getChildAt(a, d))
+};
+
+function mxUndoableEdit(a, b) {
+  this.source = a;
+  this.changes = [];
+  this.significant = null != b ? b : !0
+}
+mxUndoableEdit.prototype.source = null;
+mxUndoableEdit.prototype.changes = null;
+mxUndoableEdit.prototype.significant = null;
+mxUndoableEdit.prototype.undone = !1;
+mxUndoableEdit.prototype.redone = !1;
+mxUndoableEdit.prototype.isEmpty = function() {
+  return 0 == this.changes.length
+};
+mxUndoableEdit.prototype.isSignificant = function() {
+  return this.significant
+};
+mxUndoableEdit.prototype.add = function(a) {
+  this.changes.push(a)
+};
+mxUndoableEdit.prototype.notify = function() {};
+mxUndoableEdit.prototype.die = function() {};
+mxUndoableEdit.prototype.undo = function() {
+  if (!this.undone) {
+    this.source.fireEvent(new mxEventObject(mxEvent.START_EDIT));
+    for (var a = this.changes.length - 1; 0 <= a; a--) {
+      var b = this.changes[a];
+      null != b.execute ? b.execute() : null != b.undo && b.undo();
+      this.source.fireEvent(new mxEventObject(mxEvent.EXECUTED, "change", b))
+    }
+    this.undone = !0;
+    this.redone = !1;
+    this.source.fireEvent(new mxEventObject(mxEvent.END_EDIT))
+  }
+  this.notify()
+};
+mxUndoableEdit.prototype.redo = function() {
+  if (!this.redone) {
+    this.source.fireEvent(new mxEventObject(mxEvent.START_EDIT));
+    for (var a = this.changes.length, b = 0; b < a; b++) {
+      var c = this.changes[b];
+      null != c.execute ? c.execute() : null != c.redo && c.redo();
+      this.source.fireEvent(new mxEventObject(mxEvent.EXECUTED, "change", c))
+    }
+    this.undone = !1;
+    this.redone = !0;
+    this.source.fireEvent(new mxEventObject(mxEvent.END_EDIT))
+  }
+  this.notify()
+};
+
+function mxUndoManager(a) {
+  this.size = null != a ? a : 100;
+  this.clear()
+}
+mxUndoManager.prototype = new mxEventSource;
+mxUndoManager.prototype.constructor = mxUndoManager;
+mxUndoManager.prototype.size = null;
+mxUndoManager.prototype.history = null;
+mxUndoManager.prototype.indexOfNextAdd = 0;
+mxUndoManager.prototype.isEmpty = function() {
+  return 0 == this.history.length
+};
+mxUndoManager.prototype.clear = function() {
+  this.history = [];
+  this.indexOfNextAdd = 0;
+  this.fireEvent(new mxEventObject(mxEvent.CLEAR))
+};
+mxUndoManager.prototype.canUndo = function() {
+  return 0 < this.indexOfNextAdd
+};
+mxUndoManager.prototype.undo = function() {
+  for (; 0 < this.indexOfNextAdd;) {
+    var a = this.history[--this.indexOfNextAdd];
+    a.undo();
+    if (a.isSignificant()) {
+      this.fireEvent(new mxEventObject(mxEvent.UNDO, "edit", a));
+      break
+    }
+  }
+};
+mxUndoManager.prototype.canRedo = function() {
+  return this.indexOfNextAdd < this.history.length
+};
+mxUndoManager.prototype.redo = function() {
+  for (var a = this.history.length; this.indexOfNextAdd < a;) {
+    var b = this.history[this.indexOfNextAdd++];
+    b.redo();
+    if (b.isSignificant()) {
+      this.fireEvent(new mxEventObject(mxEvent.REDO, "edit", b));
+      break
+    }
+  }
+};
+mxUndoManager.prototype.undoableEditHappened = function(a) {
+  this.trim();
+  0 < this.size && this.size == this.history.length && this.history.shift();
+  this.history.push(a);
+  this.indexOfNextAdd = this.history.length;
+  this.fireEvent(new mxEventObject(mxEvent.ADD, "edit", a))
+};
+mxUndoManager.prototype.trim = function() {
+  if (this.history.length > this.indexOfNextAdd)
+    for (var a = this.history.splice(this.indexOfNextAdd, this.history.length - this.indexOfNextAdd), b = 0; b < a.length; b++) a[b].die()
+};
+var mxUrlConverter = function(a) {
+  var b = !0,
+    c = null,
+    d = null;
+  return {
+    isEnabled: function() {
+      return b
+    },
+    setEnabled: function(a) {
+      b = a
+    },
+    getBaseUrl: function() {
+      return c
+    },
+    setBaseUrl: function(a) {
+      c = a
+    },
+    getBaseDomain: function() {
+      return c
+    },
+    setBaseDomain: function(a) {
+      c = a
+    },
+    isRelativeUrl: function(a) {
+      return "http://" != a.substring(0, 7) && "https://" != a.substring(0, 8) && "data:image" != a.substring(0, 10)
+    },
+    convert: function(a) {
+      if (b && this.isRelativeUrl(a)) {
+        if (null == c) {
+          d = location.protocol + "//" + location.host;
+          c = d + location.pathname;
+          var f = c.lastIndexOf("/");
+          0 < f && (c = c.substring(0, f + 1))
+        }
+        a = "/" == a.charAt(0) ? d + a : c + a
+      }
+      return a
+    }
+  }
+};
+
+function mxPanningManager(a) {
+  this.thread = null;
+  this.active = !1;
+  this.dy = this.dx = this.t0y = this.t0x = this.tdy = this.tdx = 0;
+  this.scrollbars = !1;
+  this.scrollTop = this.scrollLeft = 0;
+  this.mouseListener = {
+    mouseDown: function(a, b) {},
+    mouseMove: function(a, b) {},
+    mouseUp: mxUtils.bind(this, function(a, b) {
+      this.active && this.stop()
+    })
+  };
+  a.addMouseListener(this.mouseListener);
+  mxEvent.addListener(document, "mouseup", mxUtils.bind(this, function() {
+    this.active && this.stop()
+  }));
+  var b = mxUtils.bind(this, function() {
+    this.scrollbars = mxUtils.hasScrollbars(a.container);
+    this.scrollLeft = a.container.scrollLeft;
+    this.scrollTop = a.container.scrollTop;
+    return window.setInterval(mxUtils.bind(this, function() {
+      this.tdx -= this.dx;
+      this.tdy -= this.dy;
+      if (this.scrollbars) {
+        var b = -a.container.scrollLeft - Math.ceil(this.dx),
+          d = -a.container.scrollTop - Math.ceil(this.dy);
+        a.panGraph(b, d);
+        a.panDx = this.scrollLeft - a.container.scrollLeft;
+        a.panDy = this.scrollTop - a.container.scrollTop;
+        a.fireEvent(new mxEventObject(mxEvent.PAN))
+      } else a.panGraph(this.getDx(), this.getDy())
+    }), this.delay)
+  });
+  this.isActive =
+    function() {
+      return active
+    };
+  this.getDx = function() {
+    return Math.round(this.tdx)
+  };
+  this.getDy = function() {
+    return Math.round(this.tdy)
+  };
+  this.start = function() {
+    this.t0x = a.view.translate.x;
+    this.t0y = a.view.translate.y;
+    this.active = !0
+  };
+  this.panTo = function(c, d, e, f) {
+    this.active || this.start();
+    this.scrollLeft = a.container.scrollLeft;
+    this.scrollTop = a.container.scrollTop;
+    f = null != f ? f : 0;
+    var g = a.container;
+    this.dx = c + (null != e ? e : 0) - g.scrollLeft - g.clientWidth;
+    0 > this.dx && Math.abs(this.dx) < this.border ? this.dx = this.border + this.dx :
+      this.dx = this.handleMouseOut ? Math.max(this.dx, 0) : 0;
+    0 == this.dx && (this.dx = c - g.scrollLeft, this.dx = 0 < this.dx && this.dx < this.border ? this.dx - this.border : this.handleMouseOut ? Math.min(0, this.dx) : 0);
+    this.dy = d + f - g.scrollTop - g.clientHeight;
+    0 > this.dy && Math.abs(this.dy) < this.border ? this.dy = this.border + this.dy : this.dy = this.handleMouseOut ? Math.max(this.dy, 0) : 0;
+    0 == this.dy && (this.dy = d - g.scrollTop, this.dy = 0 < this.dy && this.dy < this.border ? this.dy - this.border : this.handleMouseOut ? Math.min(0, this.dy) : 0);
+    0 != this.dx || 0 != this.dy ?
+      (this.dx *= this.damper, this.dy *= this.damper, null == this.thread && (this.thread = b())) : null != this.thread && (window.clearInterval(this.thread), this.thread = null)
+  };
+  this.stop = function() {
+    if (this.active)
+      if (this.active = !1, null != this.thread && (window.clearInterval(this.thread), this.thread = null), this.tdy = this.tdx = 0, this.scrollbars) a.panDx = 0, a.panDy = 0, a.fireEvent(new mxEventObject(
+        mxEvent.PAN));
+      else {
+        var b = a.panDx,
+          d = a.panDy;
+        if (0 != b || 0 != d) a.panGraph(0, 0), a.view.setTranslate(this.t0x + b / a.view.scale, this.t0y + d / a.view.scale)
+      }
+  };
+  this.destroy = function() {
+    a.removeMouseListener(this.mouseListener)
+  }
+}
+mxPanningManager.prototype.damper = 1 / 6;
+mxPanningManager.prototype.delay = 10;
+mxPanningManager.prototype.handleMouseOut = !0;
+mxPanningManager.prototype.border = 0;
+
+function mxPopupMenu(a) {
+  this.factoryMethod = a;
+  null != a && this.init()
+}
+mxPopupMenu.prototype = new mxEventSource;
+mxPopupMenu.prototype.constructor = mxPopupMenu;
+mxPopupMenu.prototype.submenuImage = mxClient.imageBasePath + "/submenu.gif";
+mxPopupMenu.prototype.zIndex = 10006;
+mxPopupMenu.prototype.factoryMethod = null;
+mxPopupMenu.prototype.useLeftButtonForPopup = !1;
+mxPopupMenu.prototype.enabled = !0;
+mxPopupMenu.prototype.itemCount = 0;
+mxPopupMenu.prototype.autoExpand = !1;
+mxPopupMenu.prototype.smartSeparators = !1;
+mxPopupMenu.prototype.labels = !0;
+mxPopupMenu.prototype.init = function() {
+  this.table = document.createElement("table");
+  this.table.className = "mxPopupMenu";
+  this.tbody = document.createElement("tbody");
+  this.table.appendChild(this.tbody);
+  this.div = document.createElement("div");
+  this.div.className = "mxPopupMenu";
+  this.div.style.display = "inline";
+  this.div.style.zIndex = this.zIndex;
+  this.div.appendChild(this.table);
+  mxEvent.disableContextMenu(this.div)
+};
+mxPopupMenu.prototype.isEnabled = function() {
+  return this.enabled
+};
+mxPopupMenu.prototype.setEnabled = function(a) {
+  this.enabled = a
+};
+mxPopupMenu.prototype.isPopupTrigger = function(a) {
+  return a.isPopupTrigger() || this.useLeftButtonForPopup && mxEvent.isLeftMouseButton(a.getEvent())
+};
+mxPopupMenu.prototype.addItem = function(a, b, c, d, e, f) {
+  d = d || this;
+  this.itemCount++;
+  d.willAddSeparator && (d.containsItems && this.addSeparator(d, !0), d.willAddSeparator = !1);
+  d.containsItems = !0;
+  var g = document.createElement("tr");
+  g.className = "mxPopupMenuItem";
+  var h = document.createElement("td");
+  h.className = "mxPopupMenuIcon";
+  null != b ? (e = document.createElement("img"), e.src = b, h.appendChild(e)) : null != e && (b = document.createElement("div"), b.className = e, h.appendChild(b));
+  g.appendChild(h);
+  this.labels && (h = document.createElement("td"),
+    h.className = "mxPopupMenuItem" + (null != f && !f ? " disabled" : ""), mxUtils.write(h, a), h.align = "left", g.appendChild(h), a = document.createElement("td"), a.className =
+    "mxPopupMenuItem" + (null != f && !f ? " disabled" : ""), a.style.paddingRight = "6px", a.style.textAlign = "right", g.appendChild(a), null == d.div && this.createSubmenu(d));
+  d.tbody.appendChild(g);
+  if (null == f || f) mxEvent.addGestureListeners(g, mxUtils.bind(this, function(a) {
+    this.eventReceiver = g;
+    d.activeRow != g && d.activeRow != d && (null != d.activeRow && null != d.activeRow.div.parentNode &&
+      this.hideSubmenu(d), null != g.div && (this.showSubmenu(d, g), d.activeRow = g));
+    mxEvent.consume(a)
+  }), mxUtils.bind(this, function(a) {
+    d.activeRow != g && d.activeRow != d && (null != d.activeRow && null != d.activeRow.div.parentNode && this.hideSubmenu(d), this.autoExpand && null != g.div && (this.showSubmenu(d, g), d.activeRow =
+      g));
+    g.className = "mxPopupMenuItemHover"
+  }), mxUtils.bind(this, function(a) {
+    this.eventReceiver == g && (d.activeRow != g && this.hideMenu(), null != c && c(a));
+    this.eventReceiver = null;
+    mxEvent.consume(a)
+  })), mxEvent.addListener(g,
+    "mouseout", mxUtils.bind(this, function(a) {
+      g.className = "mxPopupMenuItem"
+    }));
+  return g
+};
+mxPopupMenu.prototype.createSubmenu = function(a) {
+  a.table = document.createElement("table");
+  a.table.className = "mxPopupMenu";
+  a.tbody = document.createElement("tbody");
+  a.table.appendChild(a.tbody);
+  a.div = document.createElement("div");
+  a.div.className = "mxPopupMenu";
+  a.div.style.position = "absolute";
+  a.div.style.display = "inline";
+  a.div.style.zIndex = this.zIndex;
+  a.div.appendChild(a.table);
+  var b = document.createElement("img");
+  b.setAttribute("src", this.submenuImage);
+  td = a.firstChild.nextSibling.nextSibling;
+  td.appendChild(b)
+};
+mxPopupMenu.prototype.showSubmenu = function(a, b) {
+  if (null != b.div) {
+    b.div.style.left = a.div.offsetLeft + b.offsetLeft + b.offsetWidth - 1 + "px";
+    b.div.style.top = a.div.offsetTop + b.offsetTop + "px";
+    document.body.appendChild(b.div);
+    var c = parseInt(b.div.offsetLeft),
+      d = parseInt(b.div.offsetWidth),
+      e = document.body,
+      f = document.documentElement;
+    if (c + d > (e.scrollLeft || f.scrollLeft) + (e.clientWidth || f.clientWidth)) b.div.style.left = a.div.offsetLeft - d + (mxClient.IS_IE ? 6 : -6) + "px";
+    mxUtils.fit(b.div)
+  }
+};
+mxPopupMenu.prototype.addSeparator = function(a, b) {
+  a = a || this;
+  if (this.smartSeparators && !b) a.willAddSeparator = !0;
+  else if (null != a.tbody) {
+    a.willAddSeparator = !1;
+    var c = document.createElement("tr"),
+      d = document.createElement("td");
+    d.className = "mxPopupMenuIcon";
+    d.style.padding = "0 0 0 0px";
+    c.appendChild(d);
+    d = document.createElement("td");
+    d.style.padding = "0 0 0 0px";
+    d.setAttribute("colSpan", "2");
+    var e = document.createElement("hr");
+    e.setAttribute("size", "1");
+    d.appendChild(e);
+    c.appendChild(d);
+    a.tbody.appendChild(c)
+  }
+};
+mxPopupMenu.prototype.popup = function(a, b, c, d) {
+  if (null != this.div && null != this.tbody && null != this.factoryMethod) {
+    this.div.style.left = a + "px";
+    for (this.div.style.top = b + "px"; null != this.tbody.firstChild;) mxEvent.release(this.tbody.firstChild), this.tbody.removeChild(this.tbody.firstChild);
+    this.itemCount = 0;
+    this.factoryMethod(this, c, d);
+    0 < this.itemCount && (this.showMenu(), this.fireEvent(new mxEventObject(mxEvent.SHOW)))
+  }
+};
+mxPopupMenu.prototype.isMenuShowing = function() {
+  return null != this.div && this.div.parentNode == document.body
+};
+mxPopupMenu.prototype.showMenu = function() {
+  9 <= document.documentMode && (this.div.style.filter = "none");
+  document.body.appendChild(this.div);
+  mxUtils.fit(this.div)
+};
+mxPopupMenu.prototype.hideMenu = function() {
+  null != this.div && (null != this.div.parentNode && this.div.parentNode.removeChild(this.div), this.hideSubmenu(this), this.containsItems = !1)
+};
+mxPopupMenu.prototype.hideSubmenu = function(a) {
+  null != a.activeRow && (this.hideSubmenu(a.activeRow), null != a.activeRow.div.parentNode && a.activeRow.div.parentNode.removeChild(a.activeRow.div), a.activeRow = null)
+};
+mxPopupMenu.prototype.destroy = function() {
+  null != this.div && (mxEvent.release(this.div), null != this.div.parentNode && this.div.parentNode.removeChild(this.div), this.div = null)
+};
+
+function mxAutoSaveManager(a) {
+  this.changeHandler = mxUtils.bind(this, function(a, c) {
+    this.isEnabled() && this.graphModelChanged(c.getProperty("edit").changes)
+  });
+  this.setGraph(a)
+}
+mxAutoSaveManager.prototype = new mxEventSource;
+mxAutoSaveManager.prototype.constructor = mxAutoSaveManager;
+mxAutoSaveManager.prototype.graph = null;
+mxAutoSaveManager.prototype.autoSaveDelay = 10;
+mxAutoSaveManager.prototype.autoSaveThrottle = 2;
+mxAutoSaveManager.prototype.autoSaveThreshold = 5;
+mxAutoSaveManager.prototype.ignoredChanges = 0;
+mxAutoSaveManager.prototype.lastSnapshot = 0;
+mxAutoSaveManager.prototype.enabled = !0;
+mxAutoSaveManager.prototype.changeHandler = null;
+mxAutoSaveManager.prototype.isEnabled = function() {
+  return this.enabled
+};
+mxAutoSaveManager.prototype.setEnabled = function(a) {
+  this.enabled = a
+};
+mxAutoSaveManager.prototype.setGraph = function(a) {
+  null != this.graph && this.graph.getModel().removeListener(this.changeHandler);
+  this.graph = a;
+  null != this.graph && this.graph.getModel().addListener(mxEvent.CHANGE, this.changeHandler)
+};
+mxAutoSaveManager.prototype.save = function() {};
+mxAutoSaveManager.prototype.graphModelChanged = function(a) {
+  a = ((new Date).getTime() - this.lastSnapshot) / 1E3;
+  a > this.autoSaveDelay || this.ignoredChanges >= this.autoSaveThreshold && a > this.autoSaveThrottle ? (this.save(), this.reset()) : this.ignoredChanges++
+};
+mxAutoSaveManager.prototype.reset = function() {
+  this.lastSnapshot = (new Date).getTime();
+  this.ignoredChanges = 0
+};
+mxAutoSaveManager.prototype.destroy = function() {
+  this.setGraph(null)
+};
+
+function mxAnimation(a) {
+  this.delay = null != a ? a : 20
+}
+mxAnimation.prototype = new mxEventSource;
+mxAnimation.prototype.constructor = mxAnimation;
+mxAnimation.prototype.delay = null;
+mxAnimation.prototype.thread = null;
+mxAnimation.prototype.startAnimation = function() {
+  null == this.thread && (this.thread = window.setInterval(mxUtils.bind(this, this.updateAnimation), this.delay))
+};
+mxAnimation.prototype.updateAnimation = function() {
+  this.fireEvent(new mxEventObject(mxEvent.EXECUTE))
+};
+mxAnimation.prototype.stopAnimation = function() {
+  null != this.thread && (window.clearInterval(this.thread), this.thread = null, this.fireEvent(new mxEventObject(mxEvent.DONE)))
+};
+
+function mxMorphing(a, b, c, d) {
+  mxAnimation.call(this, d);
+  this.graph = a;
+  this.steps = null != b ? b : 6;
+  this.ease = null != c ? c : 1.5
+}
+mxMorphing.prototype = new mxAnimation;
+mxMorphing.prototype.constructor = mxMorphing;
+mxMorphing.prototype.graph = null;
+mxMorphing.prototype.steps = null;
+mxMorphing.prototype.step = 0;
+mxMorphing.prototype.ease = null;
+mxMorphing.prototype.cells = null;
+mxMorphing.prototype.updateAnimation = function() {
+  var a = new mxCellStatePreview(this.graph);
+  if (null != this.cells)
+    for (var b = 0; b < this.cells.length; b++) this.animateCell(cells[b], a, !1);
+  else this.animateCell(this.graph.getModel().getRoot(), a, !0);
+  this.show(a);
+  (a.isEmpty() || this.step++ >= this.steps) && this.stopAnimation()
+};
+mxMorphing.prototype.show = function(a) {
+  a.show()
+};
+mxMorphing.prototype.animateCell = function(a, b, c) {
+  var d = this.graph.getView().getState(a),
+    e = null;
+  if (null != d && (e = this.getDelta(d), this.graph.getModel().isVertex(a) && (0 != e.x || 0 != e.y))) {
+    var f = this.graph.view.getTranslate(),
+      g = this.graph.view.getScale();
+    e.x += f.x * g;
+    e.y += f.y * g;
+    b.moveState(d, -e.x / this.ease, -e.y / this.ease)
+  }
+  if (c && !this.stopRecursion(d, e)) {
+    d = this.graph.getModel().getChildCount(a);
+    for (e = 0; e < d; e++) this.animateCell(this.graph.getModel().getChildAt(a, e), b, c)
+  }
+};
+mxMorphing.prototype.stopRecursion = function(a, b) {
+  return null != b && (0 != b.x || 0 != b.y)
+};
+mxMorphing.prototype.getDelta = function(a) {
+  var b = this.getOriginForCell(a.cell),
+    c = this.graph.getView().getTranslate(),
+    d = this.graph.getView().getScale();
+  a = new mxPoint(a.x / d - c.x, a.y / d - c.y);
+  return new mxPoint((b.x - a.x) * d, (b.y - a.y) * d)
+};
+mxMorphing.prototype.getOriginForCell = function(a) {
+  var b = null;
+  null != a && (b = this.getOriginForCell(this.graph.getModel().getParent(a)), a = this.graph.getCellGeometry(a), null != a && (b.x += a.x, b.y += a.y));
+  null == b && (b = this.graph.view.getTranslate(), b = new mxPoint(-b.x, -b.y));
+  return b
+};
+
+function mxImageBundle(a) {
+  this.images = [];
+  this.alt = null != a ? a : !1
+}
+mxImageBundle.prototype.images = null;
+mxImageBundle.prototype.images = null;
+mxImageBundle.prototype.putImage = function(a, b, c) {
+  this.images[a] = {
+    value: b,
+    fallback: c
+  }
+};
+mxImageBundle.prototype.getImage = function(a) {
+  var b = null;
+  null != a && (a = this.images[a], null != a && (b = this.alt ? a.fallback : a.value));
+  return b
+};
+
+function mxImageExport() {}
+mxImageExport.prototype.includeOverlays = !1;
+mxImageExport.prototype.drawState = function(a, b) {
+  null != a && (this.visitStatesRecursive(a, b, this.drawCellState), this.includeOverlays && this.visitStatesRecursive(a, b, this.drawOverlays))
+};
+mxImageExport.prototype.visitStatesRecursive = function(a, b, c) {
+  if (null != a) {
+    c(a, b);
+    for (var d = a.view.graph, e = d.model.getChildCount(a.cell), f = 0; f < e; f++) {
+      var g = d.view.getState(d.model.getChildAt(a.cell, f));
+      this.visitStatesRecursive(g, b, c)
+    }
+  }
+};
+mxImageExport.prototype.drawCellState = function(a, b) {
+  a.shape instanceof mxShape && (b.save(), a.shape.paint(b), b.restore());
+  null != a.text && (b.save(), a.text.paint(b), b.restore())
+};
+mxImageExport.prototype.drawOverlays = function(a, b) {
+  null != a.overlays && a.overlays.visit(function(a, d) {
+    d instanceof mxShape && d.paint(b)
+  })
+};
+
+function mxAbstractCanvas2D() {
+  this.converter = this.createUrlConverter();
+  this.reset()
+}
+mxAbstractCanvas2D.prototype.state = null;
+mxAbstractCanvas2D.prototype.states = null;
+mxAbstractCanvas2D.prototype.path = null;
+mxAbstractCanvas2D.prototype.rotateHtml = !0;
+mxAbstractCanvas2D.prototype.lastX = 0;
+mxAbstractCanvas2D.prototype.lastY = 0;
+mxAbstractCanvas2D.prototype.moveOp = "M";
+mxAbstractCanvas2D.prototype.lineOp = "L";
+mxAbstractCanvas2D.prototype.quadOp = "Q";
+mxAbstractCanvas2D.prototype.curveOp = "C";
+mxAbstractCanvas2D.prototype.closeOp = "Z";
+mxAbstractCanvas2D.prototype.pointerEvents = !1;
+mxAbstractCanvas2D.prototype.createUrlConverter = function() {
+  return new mxUrlConverter
+};
+mxAbstractCanvas2D.prototype.reset = function() {
+  this.state = this.createState();
+  this.states = []
+};
+mxAbstractCanvas2D.prototype.createState = function() {
+  return {
+    dx: 0,
+    dy: 0,
+    scale: 1,
+    alpha: 1,
+    fillColor: null,
+    fillAlpha: 1,
+    gradientColor: null,
+    gradientAlpha: 1,
+    gradientDirection: null,
+    strokeColor: null,
+    strokeWidth: 1,
+    dashed: !1,
+    dashPattern: "3 3",
+    lineCap: "flat",
+    lineJoin: "miter",
+    miterLimit: 10,
+    fontColor: "#000000",
+    fontBackgroundColor: null,
+    fontBorderColor: null,
+    fontSize: mxConstants.DEFAULT_FONTSIZE,
+    fontFamily: mxConstants.DEFAULT_FONTFAMILY,
+    fontStyle: 0,
+    shadow: !1,
+    shadowColor: mxConstants.SHADOWCOLOR,
+    shadowAlpha: mxConstants.SHADOW_OPACITY,
+    shadowDx: mxConstants.SHADOW_OFFSET_X,
+    shadowDy: mxConstants.SHADOW_OFFSET_Y,
+    rotation: 0,
+    rotationCx: 0,
+    rotationCy: 0
+  }
+};
+mxAbstractCanvas2D.prototype.format = function(a) {
+  return Math.round(parseFloat(a))
+};
+mxAbstractCanvas2D.prototype.addOp = function() {
+  if (null != this.path && (this.path.push(arguments[0]), 2 < arguments.length))
+    for (var a = this.state, b = 2; b < arguments.length; b += 2) this.lastX = arguments[b - 1], this.lastY = arguments[b], this.path.push(this.format((this.lastX + a.dx) * a.scale)), this.path.push(
+      this.format((this.lastY + a.dy) * a.scale))
+};
+mxAbstractCanvas2D.prototype.rotatePoint = function(a, b, c, d, e) {
+  c *= Math.PI / 180;
+  return mxUtils.getRotatedPoint(new mxPoint(a, b), Math.cos(c), Math.sin(c), new mxPoint(d, e))
+};
+mxAbstractCanvas2D.prototype.save = function() {
+  this.states.push(this.state);
+  this.state = mxUtils.clone(this.state)
+};
+mxAbstractCanvas2D.prototype.restore = function() {
+  this.state = this.states.pop()
+};
+mxAbstractCanvas2D.prototype.scale = function(a) {
+  this.state.scale *= a;
+  this.state.strokeWidth *= a
+};
+mxAbstractCanvas2D.prototype.translate = function(a, b) {
+  this.state.dx += a;
+  this.state.dy += b
+};
+mxAbstractCanvas2D.prototype.setAlpha = function(a) {
+  this.state.alpha = a
+};
+mxAbstractCanvas2D.prototype.setFillColor = function(a) {
+  a == mxConstants.NONE && (a = null);
+  this.state.fillColor = a;
+  this.state.gradientColor = null
+};
+mxAbstractCanvas2D.prototype.setGradient = function(a, b, c, d, e, f, g, h, k) {
+  c = this.state;
+  c.fillColor = a;
+  c.fillAlpha = null != h ? h : 1;
+  c.gradientColor = b;
+  c.gradientAlpha = null != k ? k : 1;
+  c.gradientDirection = g
+};
+mxAbstractCanvas2D.prototype.setStrokeColor = function(a) {
+  a == mxConstants.NONE && (a = null);
+  this.state.strokeColor = a
+};
+mxAbstractCanvas2D.prototype.setStrokeWidth = function(a) {
+  this.state.strokeWidth = a
+};
+mxAbstractCanvas2D.prototype.setDashed = function(a) {
+  this.state.dashed = a
+};
+mxAbstractCanvas2D.prototype.setDashPattern = function(a) {
+  this.state.dashPattern = a
+};
+mxAbstractCanvas2D.prototype.setLineCap = function(a) {
+  this.state.lineCap = a
+};
+mxAbstractCanvas2D.prototype.setLineJoin = function(a) {
+  this.state.lineJoin = a
+};
+mxAbstractCanvas2D.prototype.setMiterLimit = function(a) {
+  this.state.miterLimit = a
+};
+mxAbstractCanvas2D.prototype.setFontColor = function(a) {
+  a == mxConstants.NONE && (a = null);
+  this.state.fontColor = a
+};
+mxAbstractCanvas2D.prototype.setFontBackgroundColor = function(a) {
+  a == mxConstants.NONE && (a = null);
+  this.state.fontBackgroundColor = a
+};
+mxAbstractCanvas2D.prototype.setFontBorderColor = function(a) {
+  a == mxConstants.NONE && (a = null);
+  this.state.fontBorderColor = a
+};
+mxAbstractCanvas2D.prototype.setFontSize = function(a) {
+  this.state.fontSize = a
+};
+mxAbstractCanvas2D.prototype.setFontFamily = function(a) {
+  this.state.fontFamily = a
+};
+mxAbstractCanvas2D.prototype.setFontStyle = function(a) {
+  null == a && (a = 0);
+  this.state.fontStyle = a
+};
+mxAbstractCanvas2D.prototype.setShadow = function(a) {
+  this.state.shadow = a
+};
+mxAbstractCanvas2D.prototype.setShadowColor = function(a) {
+  a == mxConstants.NONE && (a = null);
+  this.state.shadowColor = a
+};
+mxAbstractCanvas2D.prototype.setShadowAlpha = function(a) {
+  this.state.shadowAlpha = a
+};
+mxAbstractCanvas2D.prototype.setShadowOffset = function(a, b) {
+  this.state.shadowDx = a;
+  this.state.shadowDy = b
+};
+mxAbstractCanvas2D.prototype.begin = function() {
+  this.lastY = this.lastX = 0;
+  this.path = []
+};
+mxAbstractCanvas2D.prototype.moveTo = function(a, b) {
+  this.addOp(this.moveOp, a, b)
+};
+mxAbstractCanvas2D.prototype.lineTo = function(a, b) {
+  this.addOp(this.lineOp, a, b)
+};
+mxAbstractCanvas2D.prototype.quadTo = function(a, b, c, d) {
+  this.addOp(this.quadOp, a, b, c, d)
+};
+mxAbstractCanvas2D.prototype.curveTo = function(a, b, c, d, e, f) {
+  this.addOp(this.curveOp, a, b, c, d, e, f)
+};
+mxAbstractCanvas2D.prototype.arcTo = function(a, b, c, d, e, f, g) {
+  a = mxUtils.arcToCurves(this.lastX, this.lastY, a, b, c, d, e, f, g);
+  for (b = 0; b < a.length; b += 6) this.curveTo(a[b], a[b + 1], a[b + 2], a[b + 3], a[b + 4], a[b + 5])
+};
+mxAbstractCanvas2D.prototype.close = function(a, b, c, d, e, f) {
+  this.addOp(this.closeOp)
+};
+mxAbstractCanvas2D.prototype.end = function() {};
+
+function mxXmlCanvas2D(a) {
+  mxAbstractCanvas2D.call(this);
+  this.root = a;
+  this.writeDefaults()
+}
+mxUtils.extend(mxXmlCanvas2D, mxAbstractCanvas2D);
+mxXmlCanvas2D.prototype.textEnabled = !0;
+mxXmlCanvas2D.prototype.compressed = !0;
+mxXmlCanvas2D.prototype.writeDefaults = function() {
+  var a;
+  a = this.createElement("fontfamily");
+  a.setAttribute("family", mxConstants.DEFAULT_FONTFAMILY);
+  this.root.appendChild(a);
+  a = this.createElement("fontsize");
+  a.setAttribute("size", mxConstants.DEFAULT_FONTSIZE);
+  this.root.appendChild(a);
+  a = this.createElement("shadowcolor");
+  a.setAttribute("color", mxConstants.SHADOWCOLOR);
+  this.root.appendChild(a);
+  a = this.createElement("shadowalpha");
+  a.setAttribute("alpha", mxConstants.SHADOW_OPACITY);
+  this.root.appendChild(a);
+  a = this.createElement("shadowoffset");
+  a.setAttribute("dx", mxConstants.SHADOW_OFFSET_X);
+  a.setAttribute("dy", mxConstants.SHADOW_OFFSET_Y);
+  this.root.appendChild(a)
+};
+mxXmlCanvas2D.prototype.format = function(a) {
+  return parseFloat(parseFloat(a).toFixed(2))
+};
+mxXmlCanvas2D.prototype.createElement = function(a) {
+  return this.root.ownerDocument.createElement(a)
+};
+mxXmlCanvas2D.prototype.save = function() {
+  this.compressed && mxAbstractCanvas2D.prototype.save.apply(this, arguments);
+  this.root.appendChild(this.createElement("save"))
+};
+mxXmlCanvas2D.prototype.restore = function() {
+  this.compressed && mxAbstractCanvas2D.prototype.restore.apply(this, arguments);
+  this.root.appendChild(this.createElement("restore"))
+};
+mxXmlCanvas2D.prototype.scale = function(a) {
+  if (this.compressed) {
+    if (this.state.scale == a) return;
+    mxAbstractCanvas2D.prototype.setAlpha.apply(this, arguments)
+  }
+  var b = this.createElement("scale");
+  b.setAttribute("scale", a);
+  this.root.appendChild(b)
+};
+mxXmlCanvas2D.prototype.translate = function(a, b) {
+  var c = this.createElement("translate");
+  c.setAttribute("dx", this.format(a));
+  c.setAttribute("dy", this.format(b));
+  this.root.appendChild(c)
+};
+mxXmlCanvas2D.prototype.rotate = function(a, b, c, d, e) {
+  var f = this.createElement("rotate");
+  if (0 != a || b || c) f.setAttribute("theta", this.format(a)), f.setAttribute("flipH", b ? "1" : "0"), f.setAttribute("flipV", c ? "1" : "0"), f.setAttribute("cx", this.format(d)), f.setAttribute(
+    "cy", this.format(e)), this.root.appendChild(f)
+};
+mxXmlCanvas2D.prototype.setAlpha = function(a) {
+  if (this.compressed) {
+    if (this.state.alpha == a) return;
+    mxAbstractCanvas2D.prototype.setAlpha.apply(this, arguments)
+  }
+  var b = this.createElement("alpha");
+  b.setAttribute("alpha", this.format(a));
+  this.root.appendChild(b)
+};
+mxXmlCanvas2D.prototype.setFillColor = function(a) {
+  a == mxConstants.NONE && (a = null);
+  if (this.compressed) {
+    if (this.state.fillColor == a) return;
+    mxAbstractCanvas2D.prototype.setFillColor.apply(this, arguments)
+  }
+  var b = this.createElement("fillcolor");
+  b.setAttribute("color", null != a ? a : mxConstants.NONE);
+  this.root.appendChild(b)
+};
+mxXmlCanvas2D.prototype.setGradient = function(a, b, c, d, e, f, g, h, k) {
+  if (null != a && null != b) {
+    mxAbstractCanvas2D.prototype.setGradient.apply(this, arguments);
+    var l = this.createElement("gradient");
+    l.setAttribute("c1", a);
+    l.setAttribute("c2", b);
+    l.setAttribute("x", this.format(c));
+    l.setAttribute("y", this.format(d));
+    l.setAttribute("w", this.format(e));
+    l.setAttribute("h", this.format(f));
+    null != g && l.setAttribute("direction", g);
+    null != h && l.setAttribute("alpha1", h);
+    null != k && l.setAttribute("alpha2", k);
+    this.root.appendChild(l)
+  }
+};
+mxXmlCanvas2D.prototype.setStrokeColor = function(a) {
+  a == mxConstants.NONE && (a = null);
+  if (this.compressed) {
+    if (this.state.strokeColor == a) return;
+    mxAbstractCanvas2D.prototype.setStrokeColor.apply(this, arguments)
+  }
+  var b = this.createElement("strokecolor");
+  b.setAttribute("color", null != a ? a : mxConstants.NONE);
+  this.root.appendChild(b)
+};
+mxXmlCanvas2D.prototype.setStrokeWidth = function(a) {
+  if (this.compressed) {
+    if (this.state.strokeWidth == a) return;
+    mxAbstractCanvas2D.prototype.setStrokeWidth.apply(this, arguments)
+  }
+  var b = this.createElement("strokewidth");
+  b.setAttribute("width", this.format(a));
+  this.root.appendChild(b)
+};
+mxXmlCanvas2D.prototype.setDashed = function(a) {
+  if (this.compressed) {
+    if (this.state.dashed == a) return;
+    mxAbstractCanvas2D.prototype.setDashed.apply(this, arguments)
+  }
+  var b = this.createElement("dashed");
+  b.setAttribute("dashed", a ? "1" : "0");
+  this.root.appendChild(b)
+};
+mxXmlCanvas2D.prototype.setDashPattern = function(a) {
+  if (this.compressed) {
+    if (this.state.dashPattern == a) return;
+    mxAbstractCanvas2D.prototype.setDashPattern.apply(this, arguments)
+  }
+  var b = this.createElement("dashpattern");
+  b.setAttribute("pattern", a);
+  this.root.appendChild(b)
+};
+mxXmlCanvas2D.prototype.setLineCap = function(a) {
+  if (this.compressed) {
+    if (this.state.lineCap == a) return;
+    mxAbstractCanvas2D.prototype.setLineCap.apply(this, arguments)
+  }
+  var b = this.createElement("linecap");
+  b.setAttribute("cap", a);
+  this.root.appendChild(b)
+};
+mxXmlCanvas2D.prototype.setLineJoin = function(a) {
+  if (this.compressed) {
+    if (this.state.lineJoin == a) return;
+    mxAbstractCanvas2D.prototype.setLineJoin.apply(this, arguments)
+  }
+  var b = this.createElement("linejoin");
+  b.setAttribute("join", a);
+  this.root.appendChild(b)
+};
+mxXmlCanvas2D.prototype.setMiterLimit = function(a) {
+  if (this.compressed) {
+    if (this.state.miterLimit == a) return;
+    mxAbstractCanvas2D.prototype.setMiterLimit.apply(this, arguments)
+  }
+  var b = this.createElement("miterlimit");
+  b.setAttribute("limit", a);
+  this.root.appendChild(b)
+};
+mxXmlCanvas2D.prototype.setFontColor = function(a) {
+  if (this.textEnabled) {
+    a == mxConstants.NONE && (a = null);
+    if (this.compressed) {
+      if (this.state.fontColor == a) return;
+      mxAbstractCanvas2D.prototype.setFontColor.apply(this, arguments)
+    }
+    var b = this.createElement("fontcolor");
+    b.setAttribute("color", null != a ? a : mxConstants.NONE);
+    this.root.appendChild(b)
+  }
+};
+mxXmlCanvas2D.prototype.setFontBackgroundColor = function(a) {
+  if (this.textEnabled) {
+    a == mxConstants.NONE && (a = null);
+    if (this.compressed) {
+      if (this.state.fontBackgroundColor == a) return;
+      mxAbstractCanvas2D.prototype.setFontBackgroundColor.apply(this, arguments)
+    }
+    var b = this.createElement("fontbackgroundcolor");
+    b.setAttribute("color", null != a ? a : mxConstants.NONE);
+    this.root.appendChild(b)
+  }
+};
+mxXmlCanvas2D.prototype.setFontBorderColor = function(a) {
+  if (this.textEnabled) {
+    a == mxConstants.NONE && (a = null);
+    if (this.compressed) {
+      if (this.state.fontBorderColor == a) return;
+      mxAbstractCanvas2D.prototype.setFontBorderColor.apply(this, arguments)
+    }
+    var b = this.createElement("fontbordercolor");
+    b.setAttribute("color", null != a ? a : mxConstants.NONE);
+    this.root.appendChild(b)
+  }
+};
+mxXmlCanvas2D.prototype.setFontSize = function(a) {
+  if (this.textEnabled) {
+    if (this.compressed) {
+      if (this.state.fontSize == a) return;
+      mxAbstractCanvas2D.prototype.setFontSize.apply(this, arguments)
+    }
+    var b = this.createElement("fontsize");
+    b.setAttribute("size", a);
+    this.root.appendChild(b)
+  }
+};
+mxXmlCanvas2D.prototype.setFontFamily = function(a) {
+  if (this.textEnabled) {
+    if (this.compressed) {
+      if (this.state.fontFamily == a) return;
+      mxAbstractCanvas2D.prototype.setFontFamily.apply(this, arguments)
+    }
+    var b = this.createElement("fontfamily");
+    b.setAttribute("family", a);
+    this.root.appendChild(b)
+  }
+};
+mxXmlCanvas2D.prototype.setFontStyle = function(a) {
+  if (this.textEnabled) {
+    null == a && (a = 0);
+    if (this.compressed) {
+      if (this.state.fontStyle == a) return;
+      mxAbstractCanvas2D.prototype.setFontStyle.apply(this, arguments)
+    }
+    var b = this.createElement("fontstyle");
+    b.setAttribute("style", a);
+    this.root.appendChild(b)
+  }
+};
+mxXmlCanvas2D.prototype.setShadow = function(a) {
+  if (this.compressed) {
+    if (this.state.shadow == a) return;
+    mxAbstractCanvas2D.prototype.setShadow.apply(this, arguments)
+  }
+  var b = this.createElement("shadow");
+  b.setAttribute("enabled", a ? "1" : "0");
+  this.root.appendChild(b)
+};
+mxXmlCanvas2D.prototype.setShadowColor = function(a) {
+  if (this.compressed) {
+    a == mxConstants.NONE && (a = null);
+    if (this.state.shadowColor == a) return;
+    mxAbstractCanvas2D.prototype.setShadowColor.apply(this, arguments)
+  }
+  var b = this.createElement("shadowcolor");
+  b.setAttribute("color", null != a ? a : mxConstants.NONE);
+  this.root.appendChild(b)
+};
+mxXmlCanvas2D.prototype.setShadowAlpha = function(a) {
+  if (this.compressed) {
+    if (this.state.shadowAlpha == a) return;
+    mxAbstractCanvas2D.prototype.setShadowAlpha.apply(this, arguments)
+  }
+  var b = this.createElement("shadowalpha");
+  b.setAttribute("alpha", a);
+  this.root.appendChild(b)
+};
+mxXmlCanvas2D.prototype.setShadowOffset = function(a, b) {
+  if (this.compressed) {
+    if (this.state.shadowDx == a && this.state.shadowDy == b) return;
+    mxAbstractCanvas2D.prototype.setShadowOffset.apply(this, arguments)
+  }
+  var c = this.createElement("shadowoffset");
+  c.setAttribute("dx", a);
+  c.setAttribute("dy", b);
+  this.root.appendChild(c)
+};
+mxXmlCanvas2D.prototype.rect = function(a, b, c, d) {
+  var e = this.createElement("rect");
+  e.setAttribute("x", this.format(a));
+  e.setAttribute("y", this.format(b));
+  e.setAttribute("w", this.format(c));
+  e.setAttribute("h", this.format(d));
+  this.root.appendChild(e)
+};
+mxXmlCanvas2D.prototype.roundrect = function(a, b, c, d, e, f) {
+  var g = this.createElement("roundrect");
+  g.setAttribute("x", this.format(a));
+  g.setAttribute("y", this.format(b));
+  g.setAttribute("w", this.format(c));
+  g.setAttribute("h", this.format(d));
+  g.setAttribute("dx", this.format(e));
+  g.setAttribute("dy", this.format(f));
+  this.root.appendChild(g)
+};
+mxXmlCanvas2D.prototype.ellipse = function(a, b, c, d) {
+  var e = this.createElement("ellipse");
+  e.setAttribute("x", this.format(a));
+  e.setAttribute("y", this.format(b));
+  e.setAttribute("w", this.format(c));
+  e.setAttribute("h", this.format(d));
+  this.root.appendChild(e)
+};
+mxXmlCanvas2D.prototype.image = function(a, b, c, d, e, f, g, h) {
+  e = this.converter.convert(e);
+  var k = this.createElement("image");
+  k.setAttribute("x", this.format(a));
+  k.setAttribute("y", this.format(b));
+  k.setAttribute("w", this.format(c));
+  k.setAttribute("h", this.format(d));
+  k.setAttribute("src", e);
+  k.setAttribute("aspect", f ? "1" : "0");
+  k.setAttribute("flipH", g ? "1" : "0");
+  k.setAttribute("flipV", h ? "1" : "0");
+  this.root.appendChild(k)
+};
+mxXmlCanvas2D.prototype.begin = function() {
+  this.root.appendChild(this.createElement("begin"));
+  this.lastY = this.lastX = 0
+};
+mxXmlCanvas2D.prototype.moveTo = function(a, b) {
+  var c = this.createElement("move");
+  c.setAttribute("x", this.format(a));
+  c.setAttribute("y", this.format(b));
+  this.root.appendChild(c);
+  this.lastX = a;
+  this.lastY = b
+};
+mxXmlCanvas2D.prototype.lineTo = function(a, b) {
+  var c = this.createElement("line");
+  c.setAttribute("x", this.format(a));
+  c.setAttribute("y", this.format(b));
+  this.root.appendChild(c);
+  this.lastX = a;
+  this.lastY = b
+};
+mxXmlCanvas2D.prototype.quadTo = function(a, b, c, d) {
+  var e = this.createElement("quad");
+  e.setAttribute("x1", this.format(a));
+  e.setAttribute("y1", this.format(b));
+  e.setAttribute("x2", this.format(c));
+  e.setAttribute("y2", this.format(d));
+  this.root.appendChild(e);
+  this.lastX = c;
+  this.lastY = d
+};
+mxXmlCanvas2D.prototype.curveTo = function(a, b, c, d, e, f) {
+  var g = this.createElement("curve");
+  g.setAttribute("x1", this.format(a));
+  g.setAttribute("y1", this.format(b));
+  g.setAttribute("x2", this.format(c));
+  g.setAttribute("y2", this.format(d));
+  g.setAttribute("x3", this.format(e));
+  g.setAttribute("y3", this.format(f));
+  this.root.appendChild(g);
+  this.lastX = e;
+  this.lastY = f
+};
+mxXmlCanvas2D.prototype.close = function() {
+  this.root.appendChild(this.createElement("close"))
+};
+mxXmlCanvas2D.prototype.text = function(a, b, c, d, e, f, g, h, k, l, m, n) {
+  if (this.textEnabled && null != e) {
+    mxUtils.isNode(e) && (e = mxUtils.getOuterHtml(e));
+    var p = this.createElement("text");
+    p.setAttribute("x", this.format(a));
+    p.setAttribute("y", this.format(b));
+    p.setAttribute("w", this.format(c));
+    p.setAttribute("h", this.format(d));
+    p.setAttribute("str", e);
+    null != f && p.setAttribute("align", f);
+    null != g && p.setAttribute("valign", g);
+    p.setAttribute("wrap", h ? "1" : "0");
+    null == k && (k = "");
+    p.setAttribute("format", k);
+    null != l && p.setAttribute("fill",
+      l ? "1" : "0");
+    null != m && p.setAttribute("clip", m ? "1" : "0");
+    null != n && p.setAttribute("rotation", n);
+    this.root.appendChild(p)
+  }
+};
+mxXmlCanvas2D.prototype.stroke = function() {
+  this.root.appendChild(this.createElement("stroke"))
+};
+mxXmlCanvas2D.prototype.fill = function() {
+  this.root.appendChild(this.createElement("fill"))
+};
+mxXmlCanvas2D.prototype.fillAndStroke = function() {
+  this.root.appendChild(this.createElement("fillstroke"))
+};
+
+function mxSvgCanvas2D(a, b) {
+  mxAbstractCanvas2D.call(this);
+  this.root = a;
+  this.gradients = [];
+  this.defs = null;
+  this.styleEnabled = null != b ? b : !1;
+  var c = null;
+  if (a.ownerDocument != document)
+    for (c = a; null != c && "svg" != c.nodeName;) c = c.parentNode;
+  null != c && (0 < c.getElementsByTagName("defs").length && (this.defs = c.getElementsByTagName("defs")[0]), null == this.defs && (this.defs = this.createElement("defs"), null != c.firstChild ? c.insertBefore(
+    this.defs, c.firstChild) : c.appendChild(this.defs)), this.styleEnabled && this.defs.appendChild(this.createStyle()))
+}
+mxUtils.extend(mxSvgCanvas2D, mxAbstractCanvas2D);
+mxSvgCanvas2D.prototype.node = null;
+mxSvgCanvas2D.prototype.matchHtmlAlignment = !0;
+mxSvgCanvas2D.prototype.textEnabled = !0;
+mxSvgCanvas2D.prototype.foEnabled = !0;
+mxSvgCanvas2D.prototype.strokeTolerance = 0;
+mxSvgCanvas2D.prototype.refCount = 0;
+mxSvgCanvas2D.prototype.blockImagePointerEvents = !1;
+mxSvgCanvas2D.prototype.reset = function() {
+  mxAbstractCanvas2D.prototype.reset.apply(this, arguments);
+  this.gradients = []
+};
+mxSvgCanvas2D.prototype.createStyle = function(a) {
+  a = this.createElement("style");
+  a.setAttribute("type", "text/css");
+  mxUtils.write(a, "svg{font-family:" + mxConstants.DEFAULT_FONTFAMILY + ";font-size:" + mxConstants.DEFAULT_FONTSIZE + ";fill:none;stroke-miterlimit:10}");
+  return a
+};
+mxSvgCanvas2D.prototype.createElement = function(a, b) {
+  if (null != this.root.ownerDocument.createElementNS) return this.root.ownerDocument.createElementNS(b || mxConstants.NS_SVG, a);
+  var c = this.root.ownerDocument.createElement(a);
+  null != b && c.setAttribute("xmlns", b);
+  return c
+};
+mxSvgCanvas2D.prototype.createGradientId = function(a, b, c, d, e) {
+  "#" == a.charAt(0) && (a = a.substring(1));
+  "#" == b.charAt(0) && (b = b.substring(1));
+  a = a.toLowerCase() + "-" + c;
+  b = b.toLowerCase() + "-" + d;
+  c = null;
+  null == e || e == mxConstants.DIRECTION_SOUTH ? c = "s" : e == mxConstants.DIRECTION_EAST ? c = "e" : (d = a, a = b, b = d, e == mxConstants.DIRECTION_NORTH ? c = "s" : e == mxConstants.DIRECTION_WEST &&
+    (c = "e"));
+  return "mx-gradient-" + a + "-" + b + "-" + c
+};
+mxSvgCanvas2D.prototype.getSvgGradient = function(a, b, c, d, e) {
+  var f = this.createGradientId(a, b, c, d, e),
+    g = this.gradients[f];
+  if (null == g) {
+    var h = this.root.ownerSVGElement,
+      k = 0,
+      l = f + "-" + k;
+    if (null != h)
+      for (g = h.ownerDocument.getElementById(l); null != g && g.ownerSVGElement != h;) l = f + "-" + k++, g = h.ownerDocument.getElementById(l);
+    else l = "id" + ++this.refCount;
+    null == g && (g = this.createSvgGradient(a, b, c, d, e), g.setAttribute("id", l), null != this.defs ? this.defs.appendChild(g) : h.appendChild(g));
+    this.gradients[f] = g
+  }
+  return g.getAttribute("id")
+};
+mxSvgCanvas2D.prototype.createSvgGradient = function(a, b, c, d, e) {
+  var f = this.createElement("linearGradient");
+  f.setAttribute("x1", "0%");
+  f.setAttribute("y1", "0%");
+  f.setAttribute("x2", "0%");
+  f.setAttribute("y2", "0%");
+  null == e || e == mxConstants.DIRECTION_SOUTH ? f.setAttribute("y2", "100%") : e == mxConstants.DIRECTION_EAST ? f.setAttribute("x2", "100%") : e == mxConstants.DIRECTION_NORTH ? f.setAttribute(
+    "y1", "100%") : e == mxConstants.DIRECTION_WEST && f.setAttribute("x1", "100%");
+  c = 1 > c ? ";stop-opacity:" + c : "";
+  e = this.createElement("stop");
+  e.setAttribute("offset", "0%");
+  e.setAttribute("style", "stop-color:" + a + c);
+  f.appendChild(e);
+  c = 1 > d ? ";stop-opacity:" + d : "";
+  e = this.createElement("stop");
+  e.setAttribute("offset", "100%");
+  e.setAttribute("style", "stop-color:" + b + c);
+  f.appendChild(e);
+  return f
+};
+mxSvgCanvas2D.prototype.addNode = function(a, b) {
+  var c = this.node,
+    d = this.state;
+  if (null != c) {
+    if ("path" == c.nodeName)
+      if (null != this.path && 0 < this.path.length) c.setAttribute("d", this.path.join(" "));
+      else return;
+    a && null != d.fillColor ? this.updateFill() : this.styleEnabled || ("ellipse" == c.nodeName && mxClient.IS_NS && !mxClient.IS_GC && !mxClient.IS_SF ? c.setAttribute("fill", "transparent") : c.setAttribute(
+      "fill", "none"), a = !1);
+    b && null != d.strokeColor ? this.updateStroke() : this.styleEnabled || c.setAttribute("stroke", "none");
+    null !=
+      d.transform && 0 < d.transform.length && c.setAttribute("transform", d.transform);
+    d.shadow && this.root.appendChild(this.createShadow(c));
+    0 < this.strokeTolerance && !a && this.root.appendChild(this.createTolerance(c));
+    this.pointerEvents && ("path" != c.nodeName || this.path[this.path.length - 1] == this.closeOp) && c.setAttribute("pointer-events", "all");
+    this.root.appendChild(c)
+  }
+};
+mxSvgCanvas2D.prototype.updateFill = function() {
+  var a = this.state;
+  1 > a.alpha && this.node.setAttribute("fill-opacity", a.alpha);
+  null != a.fillColor && (null != a.gradientColor ? (a = this.getSvgGradient(a.fillColor, a.gradientColor, a.fillAlpha, a.gradientAlpha, a.gradientDirection), this.node.setAttribute("fill", "url(#" +
+    a + ")")) : this.node.setAttribute("fill", a.fillColor.toLowerCase()))
+};
+mxSvgCanvas2D.prototype.updateStroke = function() {
+  var a = this.state;
+  this.node.setAttribute("stroke", a.strokeColor.toLowerCase());
+  1 > a.alpha && this.node.setAttribute("stroke-opacity", a.alpha);
+  var b = Math.max(1, this.format(a.strokeWidth * a.scale));
+  1 != b && this.node.setAttribute("stroke-width", b);
+  "path" == this.node.nodeName && this.updateStrokeAttributes();
+  a.dashed && this.node.setAttribute("stroke-dasharray", this.createDashPattern(b))
+};
+mxSvgCanvas2D.prototype.updateStrokeAttributes = function() {
+  var a = this.state;
+  null != a.lineJoin && "miter" != a.lineJoin && this.node.setAttribute("stroke-linejoin", a.lineJoin);
+  if (null != a.lineCap) {
+    var b = a.lineCap;
+    "flat" == b && (b = "butt");
+    "butt" != b && this.node.setAttribute("stroke-linecap", b)
+  }
+  null != a.miterLimit && (!this.styleEnabled || 10 != a.miterLimit) && this.node.setAttribute("stroke-miterlimit", a.miterLimit)
+};
+mxSvgCanvas2D.prototype.createDashPattern = function(a) {
+  var b = this.state.dashPattern.split(" "),
+    c = [];
+  if (0 < b.length)
+    for (var d = 0; d < b.length; d++) c[d] = Number(b[d]) * a;
+  return c.join(" ")
+};
+mxSvgCanvas2D.prototype.createTolerance = function(a) {
+  a = a.cloneNode(!0);
+  var b = parseFloat(a.getAttribute("stroke-width") || 1) + this.strokeTolerance;
+  a.setAttribute("pointer-events", "stroke");
+  a.setAttribute("visibility", "hidden");
+  a.removeAttribute("stroke-dasharray");
+  a.setAttribute("stroke-width", b);
+  a.setAttribute("fill", "none");
+  a.setAttribute("stroke", mxClient.IS_OP ? "none" : "white");
+  return a
+};
+mxSvgCanvas2D.prototype.createShadow = function(a) {
+  a = a.cloneNode(!0);
+  var b = this.state;
+  "none" != a.getAttribute("fill") && a.setAttribute("fill", b.shadowColor);
+  "none" != a.getAttribute("stroke") && a.setAttribute("stroke", b.shadowColor);
+  a.setAttribute("transform", "translate(" + this.format(b.shadowDx * b.scale) + "," + this.format(b.shadowDy * b.scale) + ")" + (b.transform || ""));
+  a.setAttribute("opacity", b.shadowAlpha);
+  return a
+};
+mxSvgCanvas2D.prototype.rotate = function(a, b, c, d, e) {
+  if (0 != a || b || c) {
+    var f = this.state;
+    d += f.dx;
+    e += f.dy;
+    d *= f.scale;
+    e *= f.scale;
+    f.transform = f.transform || "";
+    if (b && c) a += 180;
+    else if (b ^ c) {
+      var g = b ? d : 0,
+        h = b ? -1 : 1,
+        k = c ? e : 0,
+        l = c ? -1 : 1;
+      f.transform += "translate(" + this.format(g) + "," + this.format(k) + ")scale(" + this.format(h) + "," + this.format(l) + ")translate(" + this.format(-g) + "," + this.format(-k) + ")"
+    }
+    if (b ? !c : c) a *= -1;
+    0 != a && (f.transform += "rotate(" + this.format(a) + "," + this.format(d) + "," + this.format(e) + ")");
+    f.rotation += a;
+    f.rotationCx =
+      d;
+    f.rotationCy = e
+  }
+};
+mxSvgCanvas2D.prototype.begin = function() {
+  mxAbstractCanvas2D.prototype.begin.apply(this, arguments);
+  this.node = this.createElement("path")
+};
+mxSvgCanvas2D.prototype.rect = function(a, b, c, d) {
+  var e = this.state,
+    f = this.createElement("rect");
+  f.setAttribute("x", this.format((a + e.dx) * e.scale));
+  f.setAttribute("y", this.format((b + e.dy) * e.scale));
+  f.setAttribute("width", this.format(c * e.scale));
+  f.setAttribute("height", this.format(d * e.scale));
+  this.node = f
+};
+mxSvgCanvas2D.prototype.roundrect = function(a, b, c, d, e, f) {
+  this.rect(a, b, c, d);
+  0 < e && this.node.setAttribute("rx", this.format(e * this.state.scale));
+  0 < f && this.node.setAttribute("ry", this.format(f * this.state.scale))
+};
+mxSvgCanvas2D.prototype.ellipse = function(a, b, c, d) {
+  var e = this.state,
+    f = this.createElement("ellipse");
+  f.setAttribute("cx", Math.round((a + c / 2 + e.dx) * e.scale));
+  f.setAttribute("cy", Math.round((b + d / 2 + e.dy) * e.scale));
+  f.setAttribute("rx", c / 2 * e.scale);
+  f.setAttribute("ry", d / 2 * e.scale);
+  this.node = f
+};
+mxSvgCanvas2D.prototype.image = function(a, b, c, d, e, f, g, h) {
+  e = this.converter.convert(e);
+  f = null != f ? f : !0;
+  g = null != g ? g : !1;
+  h = null != h ? h : !1;
+  var k = this.state;
+  a += k.dx;
+  b += k.dy;
+  var l = this.createElement("image");
+  l.setAttribute("x", this.format(a * k.scale));
+  l.setAttribute("y", this.format(b * k.scale));
+  l.setAttribute("width", this.format(c * k.scale));
+  l.setAttribute("height", this.format(d * k.scale));
+  null == l.setAttributeNS ? l.setAttribute("xlink:href", e) : l.setAttributeNS(mxConstants.NS_XLINK, "href", e);
+  f || l.setAttribute("preserveAspectRatio",
+    "none");
+  1 > k.alpha && l.setAttribute("opacity", k.alpha);
+  e = this.state.transform || "";
+  if (g || h) {
+    var m = f = 1,
+      n = 0,
+      p = 0;
+    g && (f = -1, n = -c - 2 * a);
+    h && (m = -1, p = -d - 2 * b);
+    e += "scale(" + f + "," + m + ")translate(" + n + "," + p + ")"
+  }
+  0 < e.length && l.setAttribute("transform", e);
+  this.root.appendChild(l);
+  this.blockImagePointerEvents && (l.setAttribute("style", "pointer-events:none"), l = this.createElement("rect"), l.setAttribute("visibility", "hidden"), l.setAttribute("pointer-events", "fill"),
+    l.setAttribute("x", this.format(a * k.scale)), l.setAttribute("y",
+      this.format(b * k.scale)), l.setAttribute("width", this.format(c * k.scale)), l.setAttribute("height", this.format(d * k.scale)), this.root.appendChild(l))
+};
+mxSvgCanvas2D.prototype.createDiv = function(a, b, c, d, e) {
+  c = this.state;
+  d = "display:inline-block;font-size:" + Math.round(c.fontSize) + "px;font-family:" + c.fontFamily + ";color:" + c.fontColor + ";line-height:" + Math.round(c.fontSize * mxConstants.LINE_HEIGHT) +
+    "px;" + d;
+  (c.fontStyle & mxConstants.FONT_BOLD) == mxConstants.FONT_BOLD && (d += "font-weight:bold;");
+  (c.fontStyle & mxConstants.FONT_ITALIC) == mxConstants.FONT_ITALIC && (d += "font-style:italic;");
+  (c.fontStyle & mxConstants.FONT_UNDERLINE) == mxConstants.FONT_UNDERLINE && (d += "font-decoration:underline;");
+  b == mxConstants.ALIGN_CENTER ? d += "text-align:center;" : b == mxConstants.ALIGN_RIGHT && (d += "text-align:right;");
+  b = "";
+  null != c.fontBackgroundColor && (b += "background-color:" + c.fontBackgroundColor + ";");
+  null != c.fontBorderColor && (b += "border:1px solid " + c.fontBorderColor + ";");
+  mxUtils.isNode(a) || (c = document.createElement("textarea"), c.innerHTML = a.replace(/&lt;/g, "\x26amp;lt;").replace(/&gt;/g, "\x26amp;gt;").replace(/</g, "\x26lt;").replace(/>/g, "\x26gt;"), a =
+    c.value, e ? d += b : 0 < b.length && (a = '\x3cdiv xmlns\x3d"http://www.w3.org/1999/xhtml" style\x3d"display:inline-block;' +
+      b + '"\x3e' + a + "\x3c/div\x3e"));
+  if (!mxClient.IS_IE && document.createElementNS) return e = document.createElementNS("http://www.w3.org/1999/xhtml", "div"), e.setAttribute("style", d), mxUtils.isNode(a) ? this.root.ownerDocument !=
+    document ? e.appendChild(a.cloneNode(!0)) : e.appendChild(a) : e.innerHTML = a, e;
+  mxUtils.isNode(a) && this.root.ownerDocument != document && (a = a.outerHTML);
+  a = a.replace(/<br>/g, "\x3cbr /\x3e").replace(/<hr>/g, "\x3chr /\x3e");
+  return mxUtils.parseXml('\x3cdiv xmlns\x3d"http://www.w3.org/1999/xhtml" style\x3d"' +
+    d + '"\x3e' + a + "\x3c/div\x3e").documentElement
+};
+mxSvgCanvas2D.prototype.text = function(a, b, c, d, e, f, g, h, k, l, m, n) {
+  if (this.textEnabled && null != e) {
+    n = null != n ? n : 0;
+    var p = this.state;
+    a += p.dx;
+    b += p.dy;
+    if (this.foEnabled && "html" == k) {
+      var q = "vertical-align:top;";
+      m ? (q += "overflow:hidden;", 0 < d && (q += "max-height:" + Math.round(d) + "px;"), 0 < c && (q += "width:" + Math.round(c) + "px;")) : l && (q += "width:" + Math.round(c) + "px;", 0 < d &&
+        (q += "max-height:" + Math.round(d) + "px;"));
+      h ? (!m && 0 < c && (q += "width:" + Math.round(c) + "px;"), q += "white-space:normal;") : q += "white-space:nowrap;";
+      h = this.createElement("g");
+      1 > p.alpha && h.setAttribute("opacity", p.alpha);
+      k = this.createElement("foreignObject");
+      k.setAttribute("pointer-events", "all");
+      q = this.createDiv(e, f, g, q, l);
+      if (null != q) {
+        h.appendChild(k);
+        this.root.appendChild(h);
+        var s = 0;
+        if (mxClient.IS_IE && !mxClient.IS_SVG) {
+          var r = document.createElement("div");
+          r.style.cssText = q.getAttribute("style");
+          r.style.display = mxClient.IS_QUIRKS ? "inline" : "inline-block";
+          r.style.visibility = "hidden";
+          r.innerHTML = mxUtils.isNode(e) ? e.outerHTML : e;
+          document.body.appendChild(r);
+          s = r.offsetWidth;
+          d = mxClient.IS_QUIRKS && 0 < d && m ? Math.min(d, r.offsetHeight + 2) : r.offsetHeight;
+          r.parentNode.removeChild(r);
+          k.appendChild(q)
+        } else this.root.ownerDocument != document ? (q.style.visibility = "hidden", document.body.appendChild(q), s = q.offsetWidth, d = q.offsetHeight, k.appendChild(q), q.style.visibility = "") :
+          (k.appendChild(q), s = q.offsetWidth, d = q.offsetHeight);
+        c = l ? Math.max(c, s) : s;
+        1 > p.alpha && h.setAttribute("opacity", p.alpha);
+        l = e = 0;
+        f == mxConstants.ALIGN_CENTER ? e -= c / 2 : f == mxConstants.ALIGN_RIGHT && (e -= c);
+        a += e;
+        g == mxConstants.ALIGN_MIDDLE ?
+          l -= d / 2 : g == mxConstants.ALIGN_BOTTOM && (l -= d);
+        b += l;
+        f = 1 != p.scale ? "scale(" + p.scale + ")" : "";
+        0 != p.rotation && this.rotateHtml ? (f += "rotate(" + p.rotation + "," + c / 2 + "," + d / 2 + ")", b = this.rotatePoint((a + c / 2) * p.scale, (b + d / 2) * p.scale, p.rotation, p.rotationCx,
+          p.rotationCy), a = b.x - c * p.scale / 2, b = b.y - d * p.scale / 2) : (a *= p.scale, b *= p.scale);
+        0 != n && (f += "rotate(" + n + "," + -e + "," + -l + ")");
+        h.setAttribute("transform", "translate(" + Math.round(a) + "," + Math.round(b) + ")" + f);
+        k.setAttribute("width", Math.round(Math.max(1, c)));
+        k.setAttribute("height",
+          Math.round(Math.max(1, d)))
+      }
+    } else this.plainText(a, b, c, d, e, f, g, h, l, m, n)
+  }
+};
+mxSvgCanvas2D.prototype.createClip = function(a, b, c, d) {
+  a = Math.round(a);
+  b = Math.round(b);
+  c = Math.round(c);
+  d = Math.round(d);
+  for (var e = "mx-clip-" + a + "-" + b + "-" + c + "-" + d, f = 0, g = e + "-" + f; null != document.getElementById(g);) g = e + "-" + ++f;
+  clip = this.createElement("clipPath");
+  clip.setAttribute("id", g);
+  e = this.createElement("rect");
+  e.setAttribute("x", a);
+  e.setAttribute("y", b);
+  e.setAttribute("width", c);
+  e.setAttribute("height", d);
+  clip.appendChild(e);
+  return clip
+};
+mxSvgCanvas2D.prototype.plainText = function(a, b, c, d, e, f, g, h, k, l, m) {
+  m = null != m ? m : 0;
+  h = this.state;
+  var n = Math.round(h.fontSize),
+    p = this.createElement("g"),
+    q = h.transform || "";
+  0 != m && (q += "rotate(" + m + "," + this.format(a * h.scale) + "," + this.format(b * h.scale) + ")");
+  if (l && 0 < c && 0 < d) {
+    var s = a;
+    m = b;
+    f == mxConstants.ALIGN_CENTER ? s -= c / 2 : f == mxConstants.ALIGN_RIGHT && (s -= c);
+    g == mxConstants.ALIGN_MIDDLE ? m -= d / 2 : g == mxConstants.ALIGN_BOTTOM && (m -= d);
+    m = this.createClip(s * h.scale - 2, m * h.scale - 2, c * h.scale + 4, d * h.scale + 4);
+    null != this.defs ? this.defs.appendChild(m) :
+      this.root.appendChild(m);
+    p.setAttribute("clip-path", "url(#" + m.getAttribute("id") + ")")
+  }
+  this.updateFont(p, f);
+  m = f == mxConstants.ALIGN_RIGHT ? "end" : f == mxConstants.ALIGN_CENTER ? "middle" : "start";
+  "start" != m && p.setAttribute("text-anchor", m);
+  (!this.styleEnabled || n != mxConstants.DEFAULT_FONTSIZE) && p.setAttribute("font-size", Math.round(n * h.scale) + "px");
+  0 < q.length && p.setAttribute("transform", q);
+  1 > h.alpha && p.setAttribute("opacity", h.alpha);
+  var q = e.split("\n"),
+    s = Math.round(n * mxConstants.LINE_HEIGHT),
+    r = n + (q.length -
+      1) * s;
+  m = b + n - 1;
+  g == mxConstants.ALIGN_MIDDLE ? (d = (this.matchHtmlAlignment && l && 0 < d ? Math.min(r, d) : r) / 2, m -= d + 1) : g == mxConstants.ALIGN_BOTTOM && (d = this.matchHtmlAlignment && l && 0 < d ?
+    Math.min(r, d) : r, m -= d + 2);
+  for (d = 0; d < q.length; d++) 0 < q[d].length && 0 < mxUtils.trim(q[d]).length && (l = this.createElement("text"), l.setAttribute("x", this.format(a * h.scale)), l.setAttribute("y", this.format(
+    m * h.scale)), mxUtils.write(l, q[d]), p.appendChild(l)), m += s;
+  this.root.appendChild(p);
+  this.addTextBackground(p, e, a, b, c, r, f, g, k)
+};
+mxSvgCanvas2D.prototype.updateFont = function(a) {
+  var b = this.state;
+  a.setAttribute("fill", b.fontColor);
+  (!this.styleEnabled || b.fontFamily != mxConstants.DEFAULT_FONTFAMILY) && a.setAttribute("font-family", b.fontFamily);
+  (b.fontStyle & mxConstants.FONT_BOLD) == mxConstants.FONT_BOLD && a.setAttribute("font-weight", "bold");
+  (b.fontStyle & mxConstants.FONT_ITALIC) == mxConstants.FONT_ITALIC && a.setAttribute("font-style", "italic");
+  (b.fontStyle & mxConstants.FONT_UNDERLINE) == mxConstants.FONT_UNDERLINE && a.setAttribute("text-decoration",
+    "underline")
+};
+mxSvgCanvas2D.prototype.addTextBackground = function(a, b, c, d, e, f, g, h, k) {
+  var l = this.state;
+  if (null != l.fontBackgroundColor || null != l.fontBorderColor) {
+    var m = null;
+    k ? (g == mxConstants.ALIGN_CENTER ? c -= e / 2 : g == mxConstants.ALIGN_RIGHT && (c -= e), h == mxConstants.ALIGN_MIDDLE ? d -= f / 2 : h == mxConstants.ALIGN_BOTTOM && (d -= f), m = new mxRectangle(
+      (c + 1) * l.scale, d * l.scale, (e - 2) * l.scale, (f + 2) * l.scale)) : null != a.getBBox && this.root.ownerDocument == document ? (m = a.getBBox(), b = mxClient.IS_IE && mxClient.IS_SVG,
+      m = new mxRectangle(m.x, m.y + (b ? 0 :
+        1), m.width, m.height + (b ? 1 : 0))) : (m = document.createElement("div"), m.style.lineHeight = Math.round(l.fontSize * mxConstants.LINE_HEIGHT) + "px", m.style.fontSize = Math.round(l.fontSize) +
+      "px", m.style.fontFamily = l.fontFamily, m.style.whiteSpace = "nowrap", m.style.position = "absolute", m.style.visibility = "hidden", m.style.display = mxClient.IS_QUIRKS ? "inline" :
+      "inline-block", m.style.zoom = "1", (l.fontStyle & mxConstants.FONT_BOLD) == mxConstants.FONT_BOLD && (m.style.fontWeight = "bold"), (l.fontStyle & mxConstants.FONT_ITALIC) == mxConstants.FONT_ITALIC &&
+      (m.style.fontStyle = "italic"), b = mxUtils.htmlEntities(b, !1), m.innerHTML = b.replace(/\n/g, "\x3cbr/\x3e"), document.body.appendChild(m), e = m.offsetWidth, f = m.offsetHeight, m.parentNode
+      .removeChild(m), g == mxConstants.ALIGN_CENTER ? c -= e / 2 : g == mxConstants.ALIGN_RIGHT && (c -= e), h == mxConstants.ALIGN_MIDDLE ? d -= f / 2 : h == mxConstants.ALIGN_BOTTOM && (d -= f),
+      m = new mxRectangle((c + 1) * l.scale, (d + 2) * l.scale, e * l.scale, (f + 1) * l.scale));
+    null != m && (b = this.createElement("rect"), b.setAttribute("fill", l.fontBackgroundColor || "none"), b.setAttribute("stroke",
+      l.fontBorderColor || "none"), b.setAttribute("x", Math.floor(m.x - 1)), b.setAttribute("y", Math.floor(m.y - 1)), b.setAttribute("width", Math.ceil(m.width + 2)), b.setAttribute("height",
+      Math.ceil(m.height)), l = null != l.fontBorderColor ? Math.max(1, this.format(l.scale)) : 0, b.setAttribute("stroke-width", l), this.root.ownerDocument == document && 1 == mxUtils.mod(l,
+      2) && b.setAttribute("transform", "translate(0.5, 0.5)"), a.insertBefore(b, a.firstChild))
+  }
+};
+mxSvgCanvas2D.prototype.stroke = function() {
+  this.addNode(!1, !0)
+};
+mxSvgCanvas2D.prototype.fill = function() {
+  this.addNode(!0, !1)
+};
+mxSvgCanvas2D.prototype.fillAndStroke = function() {
+  this.addNode(!0, !0)
+};
+var mxVmlCanvas2D = function(a) {
+  mxAbstractCanvas2D.call(this);
+  this.root = a
+};
+mxUtils.extend(mxVmlCanvas2D, mxAbstractCanvas2D);
+mxVmlCanvas2D.prototype.node = null;
+mxVmlCanvas2D.prototype.textEnabled = !0;
+mxVmlCanvas2D.prototype.moveOp = "m";
+mxVmlCanvas2D.prototype.lineOp = "l";
+mxVmlCanvas2D.prototype.curveOp = "c";
+mxVmlCanvas2D.prototype.closeOp = "x";
+mxVmlCanvas2D.prototype.rotatedHtmlBackground = "";
+mxVmlCanvas2D.prototype.vmlScale = 1;
+mxVmlCanvas2D.prototype.addNode = function(a, b) {
+  var c = this.node,
+    d = this.state;
+  if (null != c) {
+    if ("shape" == c.nodeName)
+      if (null != this.path && 0 < this.path.length) c.path = this.path.join(" ") + " e", c.style.width = this.root.style.width, c.style.height = this.root.style.height, c.coordsize = parseInt(c.style
+        .width) + " " + parseInt(c.style.height);
+      else return;
+    c.strokeweight = this.format(Math.max(1, d.strokeWidth * d.scale / this.vmlScale)) + "px";
+    d.shadow && this.root.appendChild(this.createShadow(c, a && null != d.fillColor, b && null != d.strokeColor));
+    b && null != d.strokeColor ? (c.stroked = "true", c.strokecolor = d.strokeColor) : c.stroked = "false";
+    c.appendChild(this.createStroke());
+    a && null != d.fillColor ? c.appendChild(this.createFill()) : this.pointerEvents && ("shape" != c.nodeName || this.path[this.path.length - 1] == this.closeOp) ? c.appendChild(this.createTransparentFill()) :
+      c.filled = "false";
+    this.root.appendChild(c)
+  }
+};
+mxVmlCanvas2D.prototype.createTransparentFill = function() {
+  var a = document.createElement(mxClient.VML_PREFIX + ":fill");
+  a.src = mxClient.imageBasePath + "/transparent.gif";
+  a.type = "tile";
+  return a
+};
+mxVmlCanvas2D.prototype.createFill = function() {
+  var a = this.state,
+    b = document.createElement(mxClient.VML_PREFIX + ":fill");
+  b.color = a.fillColor;
+  if (null != a.gradientColor) {
+    b.type = "gradient";
+    b.method = "none";
+    b.color2 = a.gradientColor;
+    var c = 180 - a.rotation,
+      c = a.gradientDirection == mxConstants.DIRECTION_WEST ? c - (90 + ("x" == this.root.style.flip ? 180 : 0)) : a.gradientDirection == mxConstants.DIRECTION_EAST ? c + (90 + ("x" == this.root.style
+        .flip ? 180 : 0)) : a.gradientDirection == mxConstants.DIRECTION_NORTH ? c - (180 + ("y" == this.root.style.flip ?
+        -180 : 0)) : c + ("y" == this.root.style.flip ? -180 : 0);
+    if ("x" == this.root.style.flip || "y" == this.root.style.flip) c *= -1;
+    b.angle = mxUtils.mod(c, 360);
+    b.opacity = 100 * a.alpha * a.fillAlpha + "%";
+    b.setAttribute(mxClient.OFFICE_PREFIX + ":opacity2", 100 * a.alpha * a.gradientAlpha + "%")
+  } else 1 > a.alpha && (b.opacity = 100 * a.alpha + "%");
+  return b
+};
+mxVmlCanvas2D.prototype.createStroke = function() {
+  var a = this.state,
+    b = document.createElement(mxClient.VML_PREFIX + ":stroke");
+  b.endcap = a.lineCap || "flat";
+  b.joinstyle = a.lineJoin || "miter";
+  b.miterlimit = a.miterLimit || "10";
+  1 > a.alpha && (b.opacity = 100 * a.alpha + "%");
+  a.dashed && (b.dashstyle = this.getVmlDashStyle());
+  return b
+};
+mxVmlCanvas2D.prototype.getVmlDashStyle = function() {
+  var a = "dash";
+  if (null != this.state.dashPattern) {
+    var b = this.state.dashPattern.split(" ");
+    0 < b.length && 1 == b[0] && (a = "0 2")
+  }
+  return a
+};
+mxVmlCanvas2D.prototype.createShadow = function(a, b, c) {
+  var d = this.state,
+    e = -d.rotation * (Math.PI / 180),
+    f = Math.cos(e),
+    e = Math.sin(e),
+    g = d.shadowDx * d.scale,
+    h = d.shadowDy * d.scale;
+  "x" == this.root.style.flip ? g *= -1 : "y" == this.root.style.flip && (h *= -1);
+  var k = a.cloneNode(!0);
+  k.style.marginLeft = Math.round(g * f - h * e) + "px";
+  k.style.marginTop = Math.round(g * e + h * f) + "px";
+  8 == document.documentMode && (k.strokeweight = a.strokeweight, "shape" == a.nodeName && (k.path = this.path.join(" ") + " e", k.style.width = this.root.style.width, k.style.height =
+    this.root.style.height, k.coordsize = parseInt(a.style.width) + " " + parseInt(a.style.height)));
+  c ? (k.strokecolor = d.shadowColor, k.appendChild(this.createShadowStroke())) : k.stroked = "false";
+  b ? k.appendChild(this.createShadowFill()) : k.filled = "false";
+  return k
+};
+mxVmlCanvas2D.prototype.createShadowFill = function() {
+  var a = document.createElement(mxClient.VML_PREFIX + ":fill");
+  a.color = this.state.shadowColor;
+  a.opacity = 100 * this.state.alpha * this.state.shadowAlpha + "%";
+  return a
+};
+mxVmlCanvas2D.prototype.createShadowStroke = function() {
+  var a = this.createStroke();
+  a.opacity = 100 * this.state.alpha * this.state.shadowAlpha + "%";
+  return a
+};
+mxVmlCanvas2D.prototype.rotate = function(a, b, c, d, e) {
+  b && c ? a += 180 : b ? this.root.style.flip = "x" : c && (this.root.style.flip = "y");
+  if (b ? !c : c) a *= -1;
+  this.root.style.rotation = a;
+  this.state.rotation += a;
+  this.state.rotationCx = d;
+  this.state.rotationCy = e
+};
+mxVmlCanvas2D.prototype.begin = function() {
+  mxAbstractCanvas2D.prototype.begin.apply(this, arguments);
+  this.node = document.createElement(mxClient.VML_PREFIX + ":shape");
+  this.node.style.position = "absolute"
+};
+mxVmlCanvas2D.prototype.quadTo = function(a, b, c, d) {
+  var e = this.state,
+    f = (this.lastX + e.dx) * e.scale,
+    g = (this.lastY + e.dy) * e.scale;
+  a = (a + e.dx) * e.scale;
+  b = (b + e.dy) * e.scale;
+  c = (c + e.dx) * e.scale;
+  d = (d + e.dy) * e.scale;
+  var g = g + 2 / 3 * (b - g),
+    h = c + 2 / 3 * (a - c);
+  b = d + 2 / 3 * (b - d);
+  this.path.push("c " + this.format(f + 2 / 3 * (a - f)) + " " + this.format(g) + " " + this.format(h) + " " + this.format(b) + " " + this.format(c) + " " + this.format(d));
+  this.lastX = c / e.scale - e.dx;
+  this.lastY = d / e.scale - e.dy
+};
+mxVmlCanvas2D.prototype.createRect = function(a, b, c, d, e) {
+  var f = this.state;
+  a = document.createElement(a);
+  a.style.position = "absolute";
+  a.style.left = this.format((b + f.dx) * f.scale) + "px";
+  a.style.top = this.format((c + f.dy) * f.scale) + "px";
+  a.style.width = this.format(d * f.scale) + "px";
+  a.style.height = this.format(e * f.scale) + "px";
+  return a
+};
+mxVmlCanvas2D.prototype.rect = function(a, b, c, d) {
+  this.node = this.createRect(mxClient.VML_PREFIX + ":rect", a, b, c, d)
+};
+mxVmlCanvas2D.prototype.roundrect = function(a, b, c, d, e, f) {
+  this.node = this.createRect(mxClient.VML_PREFIX + ":roundrect", a, b, c, d);
+  this.node.setAttribute("arcsize", Math.max(100 * e / c, 100 * f / d) + "%")
+};
+mxVmlCanvas2D.prototype.ellipse = function(a, b, c, d) {
+  this.node = this.createRect(mxClient.VML_PREFIX + ":oval", a, b, c, d)
+};
+mxVmlCanvas2D.prototype.image = function(a, b, c, d, e, f, g, h) {
+  var k = null;
+  f ? (k = this.createRect(mxClient.VML_PREFIX + ":rect", a, b, c, d), k.stroked = "false", a = document.createElement(mxClient.VML_PREFIX + ":fill"), a.aspect = f ? "atmost" : "ignore", a.rotate =
+    "true", a.type = "frame", a.src = e, k.appendChild(a)) : (k = this.createRect(mxClient.VML_PREFIX + ":image", a, b, c, d), k.src = e);
+  g && h ? k.style.rotation = "180" : g ? k.style.flip = "x" : h && (k.style.flip = "y");
+  1 > this.state.alpha && (k.style.filter += "alpha(opacity\x3d" + 100 * this.state.alpha + ")");
+  this.root.appendChild(k)
+};
+mxVmlCanvas2D.prototype.createDiv = function(a, b, c, d) {
+  c = document.createElement("div");
+  var e = this.state,
+    f = "";
+  null != e.fontBackgroundColor && (f += "background-color:" + e.fontBackgroundColor + ";");
+  null != e.fontBorderColor && (f += "border:1px solid " + e.fontBorderColor + ";");
+  mxUtils.isNode(a) ? c.appendChild(a) : 0 < f.length && !d ? (d = document.createElement("div"), d.style.cssText = f, d.style.display = mxClient.IS_QUIRKS ? "inline" : "inline-block", d.style.zoom =
+    "1", d.innerHTML = a, c.appendChild(d)) : (c.style.cssText = f, c.innerHTML = a);
+  a = c.style;
+  a.fontSize = Math.round(e.fontSize / this.vmlScale) + "px";
+  a.fontFamily = e.fontFamily;
+  a.color = e.fontColor;
+  a.verticalAlign = "top";
+  a.textAlign = b || "left";
+  a.lineHeight = Math.round(e.fontSize * mxConstants.LINE_HEIGHT / this.vmlScale) + "px";
+  (e.fontStyle & mxConstants.FONT_BOLD) == mxConstants.FONT_BOLD && (a.fontWeight = "bold");
+  (e.fontStyle & mxConstants.FONT_ITALIC) == mxConstants.FONT_ITALIC && (a.fontStyle = "italic");
+  (e.fontStyle & mxConstants.FONT_UNDERLINE) == mxConstants.FONT_UNDERLINE && (a.fontDecoration = "underline");
+  return c
+};
+mxVmlCanvas2D.prototype.text = function(a, b, c, d, e, f, g, h, k, l, m, n) {
+  if (this.textEnabled && null != e) {
+    var p = this.state;
+    if ("html" == k) {
+      null != p.rotation && (b = this.rotatePoint(a, b, p.rotation, p.rotationCx, p.rotationCy), a = b.x, b = b.y);
+      8 == document.documentMode ? (a += p.dx, b += p.dy) : (a *= p.scale, b *= p.scale);
+      k = 8 == document.documentMode ? document.createElement(mxClient.VML_PREFIX + ":group") : document.createElement("div");
+      k.style.position = "absolute";
+      k.style.display = "inline";
+      k.style.left = this.format(a) + "px";
+      k.style.top = this.format(b) +
+        "px";
+      k.style.zoom = p.scale;
+      var q = document.createElement("div");
+      q.style.position = "relative";
+      q.style.display = "inline";
+      var s = mxUtils.getAlignmentAsPoint(f, g),
+        r = s.x,
+        s = s.y;
+      e = this.createDiv(e, f, g, l);
+      f = document.createElement("div");
+      h ? (!m && 0 < c && (e.style.width = Math.round(c) + "px"), e.style.whiteSpace = "normal") : e.style.whiteSpace = "nowrap";
+      h = p.rotation + (n || 0);
+      this.rotateHtml && 0 != h ? (f.style.display = "inline", f.style.zoom = "1", f.appendChild(e), 8 == document.documentMode && "DIV" != this.root.nodeName ? (q.appendChild(f), k.appendChild(q)) :
+        k.appendChild(f)) : 8 == document.documentMode ? (q.appendChild(e), k.appendChild(q)) : (e.style.display = "inline", k.appendChild(e));
+      "DIV" != this.root.nodeName ? (n = document.createElement(mxClient.VML_PREFIX + ":rect"), n.stroked = "false", n.filled = "false", n.appendChild(k), this.root.appendChild(n)) : this.root.appendChild(
+        k);
+      m ? (e.style.overflow = "hidden", 0 < c && (e.style.width = Math.round(c) + "px"), 0 < d && 8 == document.documentMode && (e.style.maxHeight = Math.round(d) + "px")) : l && (e.style.width = c +
+        "px", 0 < d && (e.style.maxHeight = Math.round(d) +
+          "px"));
+      if (this.rotateHtml && 0 != h) {
+        c = h * (Math.PI / 180);
+        h = parseFloat(parseFloat(Math.cos(c)).toFixed(8));
+        n = parseFloat(parseFloat(Math.sin(-c)).toFixed(8));
+        c %= 2 * Math.PI;
+        0 > c && (c += 2 * Math.PI);
+        c %= Math.PI;
+        c > Math.PI / 2 && (c = Math.PI - c);
+        g = Math.cos(c);
+        var t = Math.sin(c);
+        8 == document.documentMode && (e.style.display = "inline-block", f.style.display = "inline-block", q.style.display = "inline-block");
+        e.style.visibility = "hidden";
+        document.body.appendChild(e);
+        c = e.offsetWidth;
+        q = e.offsetHeight;
+        if (mxClient.IS_QUIRKS && (m || l) && q > d) q =
+          d, e.style.height = q + "px";
+        d = q;
+        m = (d - d * g + c * -t) / 2 - n * c * (r + 0.5) + h * d * (s + 0.5);
+        l = (c - c * g + d * -t) / 2 + h * c * (r + 0.5) + n * d * (s + 0.5);
+        "group" == k.nodeName && "DIV" == this.root.nodeName ? (r = document.createElement("div"), r.style.display = "inline-block", r.style.position = "absolute", r.style.left = this.format(a + (l -
+          c / 2) * p.scale) + "px", r.style.top = this.format(b + (m - d / 2) * p.scale) + "px", k.parentNode.appendChild(r), r.appendChild(k)) : (p = 8 == document.documentMode ? 1 : p.scale, k.style
+          .left = this.format(a + (l - c / 2) * p) + "px", k.style.top = this.format(b + (m -
+            d / 2) * p) + "px");
+        f.style.filter = "progid:DXImageTransform.Microsoft.Matrix(M11\x3d" + h + ", M12\x3d" + n + ", M21\x3d" + -n + ", M22\x3d" + h + ", sizingMethod\x3d'auto expand')";
+        f.style.backgroundColor = this.rotatedHtmlBackground;
+        1 > this.state.alpha && (f.style.filter += "alpha(opacity\x3d" + 100 * this.state.alpha + ")");
+        e.style.visibility = "";
+        f.appendChild(e)
+      } else 8 != document.documentMode ? (e.style.verticalAlign = "top", 1 > this.state.alpha && (k.style.filter = "alpha(opacity\x3d" + 100 * this.state.alpha + ")"), p = e.parentNode, e.style.visibility =
+        "hidden", document.body.appendChild(e), c = e.offsetWidth, q = e.offsetHeight, mxClient.IS_QUIRKS && (m && q > d) && (q = d, e.style.height = q + "px"), d = q, e.style.visibility = "", p.appendChild(
+          e), k.style.left = this.format(a + c * r * this.state.scale) + "px", k.style.top = this.format(b + d * s * this.state.scale) + "px") : (1 > this.state.alpha && (e.style.filter =
+        "alpha(opacity\x3d" + 100 * this.state.alpha + ")"), q.style.left = 100 * r + "%", q.style.top = 100 * s + "%")
+    } else this.plainText(a, b, c, d, mxUtils.htmlEntities(e, !1), f, g, h, k, l, m, n)
+  }
+};
+mxVmlCanvas2D.prototype.plainText = function(a, b, c, d, e, f, g, h, k, l, m, n) {
+  d = this.state;
+  a = (a + d.dx) * d.scale;
+  b = (b + d.dy) * d.scale;
+  c = document.createElement(mxClient.VML_PREFIX + ":shape");
+  c.style.width = "1px";
+  c.style.height = "1px";
+  c.stroked = "false";
+  l = document.createElement(mxClient.VML_PREFIX + ":fill");
+  l.color = d.fontColor;
+  l.opacity = 100 * d.alpha + "%";
+  c.appendChild(l);
+  l = document.createElement(mxClient.VML_PREFIX + ":path");
+  l.textpathok = "true";
+  l.v = "m " + this.format(0) + " " + this.format(0) + " l " + this.format(1) + " " + this.format(0);
+  c.appendChild(l);
+  l = document.createElement(mxClient.VML_PREFIX + ":textpath");
+  l.style.cssText = "v-text-align:" + f;
+  l.style.align = f;
+  l.style.fontFamily = d.fontFamily;
+  l.string = e;
+  l.on = "true";
+  f = Math.round(d.fontSize * d.scale / this.vmlScale);
+  l.style.fontSize = f + "px";
+  (d.fontStyle & mxConstants.FONT_BOLD) == mxConstants.FONT_BOLD && (l.style.fontWeight = "bold");
+  (d.fontStyle & mxConstants.FONT_ITALIC) == mxConstants.FONT_ITALIC && (l.style.fontStyle = "italic");
+  (d.fontStyle & mxConstants.FONT_UNDERLINE) == mxConstants.FONT_UNDERLINE &&
+    (l.style.textDecoration = "underline");
+  e = e.split("\n");
+  d = f + (e.length - 1) * f * mxConstants.LINE_HEIGHT;
+  f = e = 0;
+  g == mxConstants.ALIGN_BOTTOM ? f = -d / 2 : g != mxConstants.ALIGN_MIDDLE && (f = d / 2);
+  null != n && (c.style.rotation = n, g = n * (Math.PI / 180), e = Math.sin(g) * f, f *= Math.cos(g));
+  c.appendChild(l);
+  c.style.left = this.format(a - e) + "px";
+  c.style.top = this.format(b + f) + "px";
+  this.root.appendChild(c)
+};
+mxVmlCanvas2D.prototype.stroke = function() {
+  this.addNode(!1, !0)
+};
+mxVmlCanvas2D.prototype.fill = function() {
+  this.addNode(!0, !1)
+};
+mxVmlCanvas2D.prototype.fillAndStroke = function() {
+  this.addNode(!0, !0)
+};
+
+function mxGuide(a, b) {
+  this.graph = a;
+  this.setStates(b)
+}
+mxGuide.prototype.graph = null;
+mxGuide.prototype.states = null;
+mxGuide.prototype.horizontal = !0;
+mxGuide.prototype.vertical = !0;
+mxGuide.prototype.guideX = null;
+mxGuide.prototype.guideY = null;
+mxGuide.prototype.setStates = function(a) {
+  this.states = a
+};
+mxGuide.prototype.isEnabledForEvent = function(a) {
+  return !0
+};
+mxGuide.prototype.getGuideTolerance = function() {
+  return this.graph.gridSize * this.graph.view.scale / 2
+};
+mxGuide.prototype.createGuideShape = function(a) {
+  a = new mxPolyline([], mxConstants.GUIDE_COLOR, mxConstants.GUIDE_STROKEWIDTH);
+  a.isDashed = !0;
+  return a
+};
+mxGuide.prototype.move = function(a, b, c) {
+  if (null != this.states && (this.horizontal || this.vertical) && null != a && null != b) {
+    var d = this.graph.getView().translate,
+      e = this.graph.getView().scale,
+      f = b.x,
+      g = b.y,
+      h = !1,
+      k = !1,
+      l = this.getGuideTolerance(),
+      m = l,
+      n = l,
+      l = a.clone();
+    l.x += b.x;
+    l.y += b.y;
+    var p = l.x,
+      q = l.x + l.width,
+      s = l.getCenterX(),
+      r = l.y,
+      t = l.y + l.height,
+      v = l.getCenterY();
+    b = function(b) {
+      b += this.graph.panDx;
+      var c = !1;
+      Math.abs(b - s) < m ? (f = b - a.getCenterX(), m = Math.abs(b - s), c = !0) : Math.abs(b - p) < m ? (f = b - a.x, m = Math.abs(b - p), c = !0) : Math.abs(b -
+        q) < m && (f = b - a.x - a.width, m = Math.abs(b - q), c = !0);
+      if (c) {
+        null == this.guideX && (this.guideX = this.createGuideShape(!0), this.guideX.dialect = this.graph.dialect != mxConstants.DIALECT_SVG ? mxConstants.DIALECT_VML : mxConstants.DIALECT_SVG,
+          this.guideX.pointerEvents = !1, this.guideX.init(this.graph.getView().getOverlayPane()));
+        var d = this.graph.container;
+        b -= this.graph.panDx;
+        this.guideX.points = [new mxPoint(b, -this.graph.panDy), new mxPoint(b, d.scrollHeight - 3 - this.graph.panDy)]
+      }
+      h = h || c
+    };
+    for (var l = function(b) {
+        b += this.graph.panDy;
+        var c = !1;
+        Math.abs(b - v) < n ? (g = b - a.getCenterY(), n = Math.abs(b - v), c = !0) : Math.abs(b - r) < n ? (g = b - a.y, n = Math.abs(b - r), c = !0) : Math.abs(b - t) < n && (g = b - a.y - a.height,
+          n = Math.abs(b - t), c = !0);
+        if (c) {
+          null == this.guideY && (this.guideY = this.createGuideShape(!1), this.guideY.dialect = this.graph.dialect != mxConstants.DIALECT_SVG ? mxConstants.DIALECT_VML : mxConstants.DIALECT_SVG,
+            this.guideY.pointerEvents = !1, this.guideY.init(this.graph.getView().getOverlayPane()));
+          var d = this.graph.container;
+          b -= this.graph.panDy;
+          this.guideY.points = [new mxPoint(-this.graph.panDx,
+            b), new mxPoint(d.scrollWidth - 3 - this.graph.panDx, b)]
+        }
+        k = k || c
+      }, w = 0; w < this.states.length; w++) {
+      var u = this.states[w];
+      null != u && (this.horizontal && (b.call(this, u.getCenterX()), b.call(this, u.x), b.call(this, u.x + u.width)), this.vertical && (l.call(this, u.getCenterY()), l.call(this, u.y), l.call(this,
+        u.y + u.height)))
+    }!h && null != this.guideX ? this.guideX.node.style.visibility = "hidden" : null != this.guideX && (this.guideX.node.style.visibility = "visible", this.guideX.redraw());
+    !k && null != this.guideY ? this.guideY.node.style.visibility =
+      "hidden" : null != this.guideY && (this.guideY.node.style.visibility = "visible", this.guideY.redraw());
+    c && (h || (c = a.x - (this.graph.snap(a.x / e - d.x) + d.x) * e, f = this.graph.snap(f / e) * e - c), k || (d = a.y - (this.graph.snap(a.y / e - d.y) + d.y) * e, g = this.graph.snap(g / e) * e -
+      d));
+    b = new mxPoint(f, g)
+  }
+  return b
+};
+mxGuide.prototype.hide = function() {
+  null != this.guideX && (this.guideX.node.style.visibility = "hidden");
+  null != this.guideY && (this.guideY.node.style.visibility = "hidden")
+};
+mxGuide.prototype.destroy = function() {
+  null != this.guideX && (this.guideX.destroy(), this.guideX = null);
+  null != this.guideY && (this.guideY.destroy(), this.guideY = null)
+};
+
+function mxStencil(a) {
+  this.desc = a;
+  this.parseDescription();
+  this.parseConstraints()
+}
+mxStencil.defaultLocalized = !1;
+mxStencil.prototype.desc = null;
+mxStencil.prototype.constraints = null;
+mxStencil.prototype.aspect = null;
+mxStencil.prototype.w0 = null;
+mxStencil.prototype.h0 = null;
+mxStencil.prototype.bgNode = null;
+mxStencil.prototype.fgNode = null;
+mxStencil.prototype.strokewidth = null;
+mxStencil.prototype.parseDescription = function() {
+  this.fgNode = this.desc.getElementsByTagName("foreground")[0];
+  this.bgNode = this.desc.getElementsByTagName("background")[0];
+  this.w0 = Number(this.desc.getAttribute("w") || 100);
+  this.h0 = Number(this.desc.getAttribute("h") || 100);
+  var a = this.desc.getAttribute("aspect");
+  this.aspect = null != a ? a : "variable";
+  a = this.desc.getAttribute("strokewidth");
+  this.strokewidth = null != a ? a : "1"
+};
+mxStencil.prototype.parseConstraints = function() {
+  var a = this.desc.getElementsByTagName("connections")[0];
+  if (null != a && (a = mxUtils.getChildNodes(a), null != a && 0 < a.length)) {
+    this.constraints = [];
+    for (var b = 0; b < a.length; b++) this.constraints.push(this.parseConstraint(a[b]))
+  }
+};
+mxStencil.prototype.parseConstraint = function(a) {
+  var b = Number(a.getAttribute("x")),
+    c = Number(a.getAttribute("y"));
+  a = "1" == a.getAttribute("perimeter");
+  return new mxConnectionConstraint(new mxPoint(b, c), a)
+};
+mxStencil.prototype.evaluateTextAttribute = function(a, b, c) {
+  b = this.evaluateAttribute(a, b, c);
+  a = a.getAttribute("localized");
+  if (mxStencil.defaultLocalized && null == a || "1" == a) b = mxResources.get(b);
+  return b
+};
+mxStencil.prototype.evaluateAttribute = function(a, b, c) {
+  b = a.getAttribute(b);
+  null == b && (a = mxUtils.getTextContent(a), null != a && (a = mxUtils.eval(a), "function" == typeof a && (b = a(c))));
+  return b
+};
+mxStencil.prototype.drawShape = function(a, b, c, d, e, f) {
+  this.drawChildren(a, b, c, d, e, f, this.bgNode, !1);
+  this.drawChildren(a, b, c, d, e, f, this.fgNode, !0)
+};
+mxStencil.prototype.drawChildren = function(a, b, c, d, e, f, g, h) {
+  if (null != g) {
+    var k = mxUtils.getValue(b.style, mxConstants.STYLE_DIRECTION, null);
+    c = this.computeAspect(b.style, c, d, e, f, k);
+    d = Math.min(c.width, c.height);
+    d = "inherit" == this.strokewidth ? Number(mxUtils.getNumber(b.style, mxConstants.STYLE_STROKEWIDTH, 1)) : Number(this.strokewidth) * d;
+    a.setStrokeWidth(d);
+    for (g = g.firstChild; null != g;) g.nodeType == mxConstants.NODETYPE_ELEMENT && this.drawNode(a, b, g, c, h), g = g.nextSibling
+  }
+};
+mxStencil.prototype.computeAspect = function(a, b, c, d, e, f) {
+  a = b;
+  b = d / this.w0;
+  var g = e / this.h0;
+  if (f = "north" == f || "south" == f) {
+    g = d / this.h0;
+    b = e / this.w0;
+    var h = (d - e) / 2;
+    a += h;
+    c -= h
+  }
+  "fixed" == this.aspect && (b = g = Math.min(b, g), f ? (a += (e - this.w0 * b) / 2, c += (d - this.h0 * g) / 2) : (a += (d - this.w0 * b) / 2, c += (e - this.h0 * g) / 2));
+  return new mxRectangle(a, c, b, g)
+};
+mxStencil.prototype.drawNode = function(a, b, c, d, e) {
+  var f = c.nodeName,
+    g = d.x,
+    h = d.y,
+    k = d.width,
+    l = d.height,
+    m = Math.min(k, l);
+  if ("save" == f) a.save();
+  else if ("restore" == f) a.restore();
+  else if ("path" == f) {
+    a.begin();
+    for (c = c.firstChild; null != c;) c.nodeType == mxConstants.NODETYPE_ELEMENT && this.drawNode(a, b, c, d, e), c = c.nextSibling
+  } else if ("close" == f) a.close();
+  else if ("move" == f) a.moveTo(g + Number(c.getAttribute("x")) * k, h + Number(c.getAttribute("y")) * l);
+  else if ("line" == f) a.lineTo(g + Number(c.getAttribute("x")) * k, h + Number(c.getAttribute("y")) *
+    l);
+  else if ("quad" == f) a.quadTo(g + Number(c.getAttribute("x1")) * k, h + Number(c.getAttribute("y1")) * l, g + Number(c.getAttribute("x2")) * k, h + Number(c.getAttribute("y2")) * l);
+  else if ("curve" == f) a.curveTo(g + Number(c.getAttribute("x1")) * k, h + Number(c.getAttribute("y1")) * l, g + Number(c.getAttribute("x2")) * k, h + Number(c.getAttribute("y2")) * l, g + Number(
+    c.getAttribute("x3")) * k, h + Number(c.getAttribute("y3")) * l);
+  else if ("arc" == f) a.arcTo(Number(c.getAttribute("rx")) * k, Number(c.getAttribute("ry")) * l, Number(c.getAttribute("x-axis-rotation")),
+    Number(c.getAttribute("large-arc-flag")), Number(c.getAttribute("sweep-flag")), g + Number(c.getAttribute("x")) * k, h + Number(c.getAttribute("y")) * l);
+  else if ("rect" == f) a.rect(g + Number(c.getAttribute("x")) * k, h + Number(c.getAttribute("y")) * l, Number(c.getAttribute("w")) * k, Number(c.getAttribute("h")) * l);
+  else if ("roundrect" == f) b = c.getAttribute("arcsize"), 0 == b && (b = 100 * mxConstants.RECTANGLE_ROUNDING_FACTOR), m = Number(c.getAttribute("w")) * k, d = Number(c.getAttribute("h")) * l, b =
+    Number(b) / 100, b = Math.min(m * b, d * b), a.roundrect(g +
+      Number(c.getAttribute("x")) * k, h + Number(c.getAttribute("y")) * l, m, d, b, b);
+  else if ("ellipse" == f) a.ellipse(g + Number(c.getAttribute("x")) * k, h + Number(c.getAttribute("y")) * l, Number(c.getAttribute("w")) * k, Number(c.getAttribute("h")) * l);
+  else if ("image" == f) b = this.evaluateAttribute(c, "src", b), a.image(g + Number(c.getAttribute("x")) * k, h + Number(c.getAttribute("y")) * l, Number(c.getAttribute("w")) * k, Number(c.getAttribute(
+    "h")) * l, b, !1, "1" == c.getAttribute("flipH"), "1" == c.getAttribute("flipV"));
+  else if ("text" == f) {
+    m = this.evaluateTextAttribute(c,
+      "str", b);
+    d = "1" == c.getAttribute("vertical") ? -90 : 0;
+    if ("0" == c.getAttribute("align-shape")) {
+      var n = b.rotation,
+        p = 1 == mxUtils.getValue(b.style, mxConstants.STYLE_FLIPH, 0);
+      b = 1 == mxUtils.getValue(b.style, mxConstants.STYLE_FLIPV, 0);
+      d = p && b ? d - n : p || b ? d + n : d - n
+    }
+    d -= c.getAttribute("rotation");
+    a.text(g + Number(c.getAttribute("x")) * k, h + Number(c.getAttribute("y")) * l, 0, 0, m, c.getAttribute("align") || "left", c.getAttribute("valign") || "top", !1, "", !1, !1, d)
+  } else if ("include-shape" == f) n = mxStencilRegistry.getStencil(c.getAttribute("name")),
+    null != n && (g += Number(c.getAttribute("x")) * k, h += Number(c.getAttribute("y")) * l, m = Number(c.getAttribute("w")) * k, d = Number(c.getAttribute("h")) * l, n.drawShape(a, b, g, h, m, d));
+  else if ("fillstroke" == f) a.fillAndStroke();
+  else if ("fill" == f) a.fill();
+  else if ("stroke" == f) a.stroke();
+  else if ("strokewidth" == f) a.setStrokeWidth(Number(c.getAttribute("width")) * m);
+  else if ("dashed" == f) a.setDashed("1" == c.getAttribute("dashed"));
+  else if ("dashpattern" == f) {
+    if (c = c.getAttribute("pattern"), null != c) {
+      c = c.split(" ");
+      k = [];
+      for (l = 0; l <
+        c.length; l++) 0 < c[l].length && k.push(Number(c[l]) * m);
+      c = k.join(" ");
+      a.setDashPattern(c)
+    }
+  } else "strokecolor" == f ? a.setStrokeColor(c.getAttribute("color")) : "linecap" == f ? a.setLineCap(c.getAttribute("cap")) : "linejoin" == f ? a.setLineJoin(c.getAttribute("join")) :
+    "miterlimit" == f ? a.setMiterLimit(Number(c.getAttribute("limit"))) : "fillcolor" == f ? a.setFillColor(c.getAttribute("color")) : "alpha" == f ? a.setAlpha(c.getAttribute("alpha")) :
+    "fontcolor" == f ? a.setFontColor(c.getAttribute("color")) : "fontstyle" == f ? a.setFontStyle(c.getAttribute("style")) :
+    "fontfamily" == f ? a.setFontFamily(c.getAttribute("family")) : "fontsize" == f && a.setFontSize(Number(c.getAttribute("size")) * m);
+  e && ("fillstroke" == f || "fill" == f || "stroke" == f) && a.setShadow(!1)
+};
+
+function mxShape(a) {
+  this.stencil = a;
+  this.strokewidth = 1;
+  this.rotation = 0;
+  this.opacity = 100;
+  this.flipV = this.flipH = !1
+}
+mxShape.prototype.dialect = null;
+mxShape.prototype.scale = 1;
+mxShape.prototype.bounds = null;
+mxShape.prototype.points = null;
+mxShape.prototype.node = null;
+mxShape.prototype.style = null;
+mxShape.prototype.style = null;
+mxShape.prototype.boundingBox = null;
+mxShape.prototype.stencil = null;
+mxShape.prototype.svgStrokeTolerance = 6;
+mxShape.prototype.pointerEvents = !0;
+mxShape.prototype.stencilPointerEvents = !1;
+mxShape.prototype.vmlScale = 1;
+mxShape.prototype.init = function(a) {
+  null == this.node && (this.node = this.create(a), null != a && a.appendChild(this.node))
+};
+mxShape.prototype.isParseVml = function() {
+  return !0
+};
+mxShape.prototype.isHtmlAllowed = function() {
+  return !1
+};
+mxShape.prototype.getSvgScreenOffset = function() {
+  return 1 == mxUtils.mod(Math.max(1, Math.round(this.strokewidth * this.scale)), 2) ? 0.5 : 0
+};
+mxShape.prototype.create = function(a) {
+  var b = null;
+  return b = null != a.ownerSVGElement ? this.createSvg(a) : 8 == document.documentMode || this.dialect == mxConstants.DIALECT_SVG || this.dialect != mxConstants.DIALECT_VML && this.isHtmlAllowed() ?
+    this.createHtml(a) : this.createVml(a)
+};
+mxShape.prototype.createSvg = function() {
+  return document.createElementNS(mxConstants.NS_SVG, "g")
+};
+mxShape.prototype.createVml = function() {
+  var a = document.createElement(mxClient.VML_PREFIX + ":group");
+  a.style.position = "absolute";
+  return a
+};
+mxShape.prototype.createHtml = function() {
+  var a = document.createElement("div");
+  a.style.position = "absolute";
+  return a
+};
+mxShape.prototype.reconfigure = function() {
+  this.redraw()
+};
+mxShape.prototype.redraw = function() {
+  this.updateBoundsFromPoints();
+  this.checkBounds() ? (this.node.style.visibility = "", "DIV" == this.node.nodeName && this.isHtmlAllowed() ? this.redrawHtmlShape() : this.redrawShape(), this.updateBoundingBox()) : (this.node.style
+    .visibility = "hidden", this.boundingBox = null)
+};
+mxShape.prototype.updateBoundsFromPoints = function() {
+  var a = this.points;
+  if (null != a && 0 < a.length && null != a[0]) {
+    this.bounds = new mxRectangle(Number(a[0].x), Number(a[0].y), 1, 1);
+    for (var b = 1; b < this.points.length; b++) null != a[b] && this.bounds.add(new mxRectangle(Number(a[b].x), Number(a[b].y), 1, 1))
+  }
+};
+mxShape.prototype.checkBounds = function() {
+  return null != this.bounds && !isNaN(this.bounds.x) && !isNaN(this.bounds.y) && !isNaN(this.bounds.width) && !isNaN(this.bounds.height) && 0 < this.bounds.width && 0 < this.bounds.height
+};
+mxShape.prototype.createVmlGroup = function() {
+  var a = document.createElement(mxClient.VML_PREFIX + ":group");
+  a.style.position = "absolute";
+  a.style.width = this.node.style.width;
+  a.style.height = this.node.style.height;
+  return a
+};
+mxShape.prototype.redrawShape = function() {
+  var a = this.createCanvas();
+  for (a.pointerEvents = this.pointerEvents; this.node.hasChildNodes();) this.node.removeChild(this.node.lastChild);
+  this.paint(a);
+  this.node != a.root && this.node.insertAdjacentHTML("beforeend", a.root.outerHTML);
+  "DIV" == this.node.nodeName && 8 == document.documentMode && (this.node.style.filter = "", (null == this.stencil || !this.stencilPointerEvents) && mxUtils.addTransparentBackgroundFilter(this.node));
+  this.destroyCanvas(a)
+};
+mxShape.prototype.createCanvas = function() {
+  var a = null,
+    b = null;
+  if (null != this.node.ownerSVGElement) a = new mxSvgCanvas2D(this.node, !1), a.strokeTolerance = this.svgStrokeTolerance, a.blockImagePointerEvents = mxClient.IS_NS && !mxClient.IS_SF && !
+    mxClient.IS_GC, b = this.getSvgScreenOffset(), 0 != b ? this.node.setAttribute("transform", "translate(" + b + "," + b + ")") : this.node.removeAttribute("transform");
+  else {
+    this.updateVmlContainer();
+    var c = Math.max(1, Math.round(this.bounds.width)),
+      d = Math.max(1, Math.round(this.bounds.height)),
+      b = 8 == document.documentMode && this.isParseVml() ? this.createVmlGroup() : this.node,
+      a = new mxVmlCanvas2D(b, !1);
+    "" != b.tagUrn && (b.coordsize = c * this.vmlScale + "," + d * this.vmlScale, a.scale(this.vmlScale), a.vmlScale = this.vmlScale);
+    b = this.scale;
+    a.translate(-Math.round(this.bounds.x / b), -Math.round(this.bounds.y / b))
+  }
+  return a
+};
+mxShape.prototype.updateVmlContainer = function() {
+  this.node.style.left = Math.round(this.bounds.x) + "px";
+  this.node.style.top = Math.round(this.bounds.y) + "px";
+  var a = Math.max(1, Math.round(this.bounds.width)),
+    b = Math.max(1, Math.round(this.bounds.height));
+  this.node.style.width = a + "px";
+  this.node.style.height = b + "px";
+  this.node.style.overflow = "visible"
+};
+mxShape.prototype.destroyCanvas = function(a) {
+  if (a instanceof mxSvgCanvas2D) {
+    for (var b in a.gradients) {
+      var c = a.gradients[b];
+      c.mxRefCount = (c.mxRefCount || 0) + 1
+    }
+    this.releaseSvgGradients(this.oldGradients);
+    this.oldGradients = a.gradients
+  }
+};
+mxShape.prototype.paint = function(a) {
+  var b = this.scale,
+    c = this.bounds.x / b,
+    d = this.bounds.y / b,
+    e = this.bounds.width / b,
+    f = this.bounds.height / b;
+  if (this.isPaintBoundsInverted()) var g = (e - f) / 2,
+    c = c + g,
+    d = d - g,
+    g = e,
+    e = f,
+    f = g;
+  this.updateTransform(a, c, d, e, f);
+  this.configureCanvas(a, c, d, e, f);
+  if (null != this.stencil) this.paintStencilShape(a, c, d, e, f);
+  else if (a.setStrokeWidth(this.strokewidth), null != this.points) {
+    c = [];
+    for (d = 0; d < this.points.length; d++) c.push(new mxPoint(this.points[d].x / b, this.points[d].y / b));
+    this.paintEdgeShape(a,
+      c)
+  } else this.paintVertexShape(a, c, d, e, f)
+};
+mxShape.prototype.configureCanvas = function(a, b, c, d, e) {
+  var f = null;
+  null != this.style && (f = this.style.dashPattern);
+  a.setAlpha(this.opacity / 100);
+  null != this.isShadow && a.setShadow(this.isShadow);
+  null != this.isDashed && a.setDashed(this.isDashed);
+  null != f && a.setDashPattern(f);
+  null != this.gradient ? (b = this.getGradientBounds(a, b, c, d, e), a.setGradient(this.fill, this.gradient, b.x, b.y, b.width, b.height, this.gradientDirection)) : a.setFillColor(this.fill);
+  a.setStrokeColor(this.stroke)
+};
+mxShape.prototype.getGradientBounds = function(a, b, c, d, e) {
+  return new mxRectangle(b, c, d, e)
+};
+mxShape.prototype.updateTransform = function(a, b, c, d, e) {
+  a.scale(this.scale);
+  a.rotate(this.getShapeRotation(), this.flipH, this.flipV, b + d / 2, c + e / 2)
+};
+mxShape.prototype.paintStencilShape = function(a, b, c, d, e) {
+  this.stencilPointerEvents && (this.dialect == mxConstants.DIALECT_SVG ? this.addTransparentBackgroundRectangle(this.node, b, c, d, e) : 8 != document.documentMode && this.setTransparentBackgroundImage(
+    this.node));
+  this.stencil.drawShape(a, this, b, c, d, e)
+};
+mxShape.prototype.paintVertexShape = function(a, b, c, d, e) {
+  this.paintBackground(a, b, c, d, e);
+  a.setShadow(!1);
+  this.paintForeground(a, b, c, d, e)
+};
+mxShape.prototype.paintBackground = function(a, b, c, d, e) {};
+mxShape.prototype.paintForeground = function(a, b, c, d, e) {};
+mxShape.prototype.paintEdgeShape = function(a, b) {};
+mxShape.prototype.getArcSize = function(a, b) {
+  var c = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, 100 * mxConstants.RECTANGLE_ROUNDING_FACTOR) / 100;
+  return Math.min(a * c, b * c)
+};
+mxShape.prototype.paintGlassEffect = function(a, b, c, d, e, f) {
+  var g = Math.ceil(this.strokewidth / 2);
+  a.setGradient("#ffffff", "#ffffff", b, c, d, 0.6 * e, "south", 0.9, 0.1);
+  a.begin();
+  f += 2 * g;
+  this.isRounded ? (a.moveTo(b - g + f, c - g), a.quadTo(b - g, c - g, b - g, c - g + f), a.lineTo(b - g, c + 0.4 * e), a.quadTo(b + 0.5 * d, c + 0.7 * e, b + d + g, c + 0.4 * e), a.lineTo(b + d +
+    g, c - g + f), a.quadTo(b + d + g, c - g, b + d + g - f, c - g)) : (a.moveTo(b - g, c - g), a.lineTo(b - g, c + 0.4 * e), a.quadTo(b + 0.5 * d, c + 0.7 * e, b + d + g, c + 0.4 * e), a.lineTo(
+    b + d + g, c - g));
+  a.close();
+  a.fill()
+};
+mxShape.prototype.apply = function(a) {
+  this.state = a;
+  this.style = a.style;
+  if (null != this.style) {
+    this.fill = mxUtils.getValue(this.style, mxConstants.STYLE_FILLCOLOR, this.fill);
+    this.gradient = mxUtils.getValue(this.style, mxConstants.STYLE_GRADIENTCOLOR, this.gradient);
+    this.gradientDirection = mxUtils.getValue(this.style, mxConstants.STYLE_GRADIENT_DIRECTION, this.gradientDirection);
+    this.opacity = mxUtils.getValue(this.style, mxConstants.STYLE_OPACITY, this.opacity);
+    this.stroke = mxUtils.getValue(this.style, mxConstants.STYLE_STROKECOLOR,
+      this.stroke);
+    this.strokewidth = mxUtils.getNumber(this.style, mxConstants.STYLE_STROKEWIDTH, this.strokewidth);
+    this.spacing = mxUtils.getValue(this.style, mxConstants.STYLE_SPACING, this.spacing);
+    this.startSize = mxUtils.getNumber(this.style, mxConstants.STYLE_STARTSIZE, this.startSize);
+    this.endSize = mxUtils.getNumber(this.style, mxConstants.STYLE_ENDSIZE, this.endSize);
+    this.startArrow = mxUtils.getValue(this.style, mxConstants.STYLE_STARTARROW, this.startArrow);
+    this.endArrow = mxUtils.getValue(this.style, mxConstants.STYLE_ENDARROW,
+      this.endArrow);
+    this.rotation = mxUtils.getValue(this.style, mxConstants.STYLE_ROTATION, this.rotation);
+    this.direction = mxUtils.getValue(this.style, mxConstants.STYLE_DIRECTION, this.direction);
+    this.flipH = 1 == mxUtils.getValue(this.style, mxConstants.STYLE_FLIPH, 0);
+    this.flipV = 1 == mxUtils.getValue(this.style, mxConstants.STYLE_FLIPV, 0);
+    null != this.stencil && (this.flipH = 1 == mxUtils.getValue(this.style, "stencilFlipH", 0) || this.flipH, this.flipV = 1 == mxUtils.getValue(this.style, "stencilFlipV", 0) || this.flipV);
+    if ("north" ==
+      this.direction || "south" == this.direction) a = this.flipH, this.flipH = this.flipV, this.flipV = a;
+    this.isShadow = 1 == mxUtils.getValue(this.style, mxConstants.STYLE_SHADOW, this.isShadow);
+    this.isDashed = 1 == mxUtils.getValue(this.style, mxConstants.STYLE_DASHED, this.isDashed);
+    this.isRounded = 1 == mxUtils.getValue(this.style, mxConstants.STYLE_ROUNDED, this.isRounded);
+    this.glass = 1 == mxUtils.getValue(this.style, mxConstants.STYLE_GLASS, this.glass);
+    "none" == this.fill && (this.fill = null);
+    "none" == this.gradient && (this.gradient = null);
+    "none" == this.stroke && (this.stroke = null)
+  }
+};
+mxShape.prototype.setCursor = function(a) {
+  null == a && (a = "");
+  this.cursor = a;
+  null != this.node && (this.node.style.cursor = a)
+};
+mxShape.prototype.getCursor = function() {
+  return this.cursor
+};
+mxShape.prototype.updateBoundingBox = function() {
+  if (null != this.bounds) {
+    var a = this.createBoundingBox();
+    if (null != a) {
+      this.augmentBoundingBox(a);
+      var b = this.getShapeRotation();
+      0 != b && (a = mxUtils.getBoundingBox(a, b));
+      a.x = Math.floor(a.x);
+      a.y = Math.floor(a.y);
+      a.width = Math.ceil(a.width);
+      a.height = Math.ceil(a.height)
+    }
+    this.boundingBox = a
+  }
+};
+mxShape.prototype.createBoundingBox = function() {
+  var a = this.bounds.clone();
+  if (this.isPaintBoundsInverted()) {
+    var b = (a.width - a.height) / 2;
+    a.x += b;
+    a.y -= b;
+    b = a.width;
+    a.width = a.height;
+    a.height = b
+  }
+  return a
+};
+mxShape.prototype.augmentBoundingBox = function(a) {
+  this.isShadow && (a.width += Math.ceil(mxConstants.SHADOW_OFFSET_X * this.scale), a.height += Math.ceil(mxConstants.SHADOW_OFFSET_Y * this.scale));
+  var b = Math.ceil(this.strokewidth * this.scale);
+  a.grow(Math.ceil(b / 2))
+};
+mxShape.prototype.isPaintBoundsInverted = function() {
+  return null == this.stencil && ("north" == this.direction || "south" == this.direction)
+};
+mxShape.prototype.getRotation = function() {
+  return null != this.rotation ? this.rotation : 0
+};
+mxShape.prototype.getTextRotation = function() {
+  var a = this.getRotation();
+  1 != mxUtils.getValue(this.style, mxConstants.STYLE_HORIZONTAL, 1) && (a += mxText.prototype.verticalTextRotation);
+  return a
+};
+mxShape.prototype.getShapeRotation = function() {
+  var a = this.getRotation();
+  null != this.direction && ("north" == this.direction ? a += 270 : "west" == this.direction ? a += 180 : "south" == this.direction && (a += 90));
+  return a
+};
+mxShape.prototype.addTransparentBackgroundRectangle = function(a, b, c, d, e) {
+  a = document.createElementNS(mxConstants.NS_SVG, "rect");
+  a.setAttribute("x", b);
+  a.setAttribute("y", c);
+  a.setAttribute("width", d);
+  a.setAttribute("height", e);
+  a.setAttribute("fill", "none");
+  a.setAttribute("stroke", "none");
+  a.setAttribute("pointer-events", "all");
+  this.node.appendChild(a)
+};
+mxShape.prototype.setTransparentBackgroundImage = function(a) {
+  a.style.backgroundImage = "url('" + mxClient.imageBasePath + "/transparent.gif')"
+};
+mxShape.prototype.releaseSvgGradients = function(a) {
+  if (null != a)
+    for (var b in a) {
+      var c = a[b];
+      c.mxRefCount = (c.mxRefCount || 0) - 1;
+      0 == c.mxRefCount && null != c.parentNode && c.parentNode.removeChild(c)
+    }
+};
+mxShape.prototype.destroy = function() {
+  null != this.node && (mxEvent.release(this.node), null != this.node.parentNode && this.node.parentNode.removeChild(this.node), this.node = null);
+  this.releaseSvgGradients(this.oldGradients);
+  this.oldGradients = null
+};
+var mxStencilRegistry = {
+    stencils: [],
+    addStencil: function(a, b) {
+      mxStencilRegistry.stencils[a] = b
+    },
+    getStencil: function(a) {
+      return mxStencilRegistry.stencils[a]
+    }
+  },
+  mxMarker = {
+    markers: [],
+    addMarker: function(a, b) {
+      mxMarker.markers[a] = b
+    },
+    createMarker: function(a, b, c, d, e, f, g, h, k, l) {
+      var m = mxMarker.markers[c];
+      return null != m ? m(a, b, c, d, e, f, g, h, k, l) : null
+    }
+  };
+(function() {
+  function a(a, b, e, f, g, h, k, l, m, n) {
+    b = 1.118 * g * m;
+    l = 1.118 * h * m;
+    g *= k + m;
+    h *= k + m;
+    var p = f.clone();
+    p.x -= b;
+    p.y -= l;
+    k = e != mxConstants.ARROW_CLASSIC ? 1 : 0.75;
+    f.x += -g * k - b;
+    f.y += -h * k - l;
+    return function() {
+      a.begin();
+      a.moveTo(p.x, p.y);
+      a.lineTo(p.x - g - h / 2, p.y - h + g / 2);
+      e == mxConstants.ARROW_CLASSIC && a.lineTo(p.x - 3 * g / 4, p.y - 3 * h / 4);
+      a.lineTo(p.x + h / 2 - g, p.y - h - g / 2);
+      a.close();
+      n ? a.fillAndStroke() : a.stroke()
+    }
+  }
+
+  function b(a, b, e, f, g, h, k, l, m, n) {
+    l = e == mxConstants.ARROW_DIAMOND ? 0.7071 : 0.9862;
+    b = g * m * l;
+    l *= h * m;
+    g *= k + m;
+    h *= k + m;
+    var p = f.clone();
+    p.x -= b;
+    p.y -= l;
+    f.x += -g - b;
+    f.y += -h - l;
+    var q = e == mxConstants.ARROW_DIAMOND ? 2 : 3.4;
+    return function() {
+      a.begin();
+      a.moveTo(p.x, p.y);
+      a.lineTo(p.x - g / 2 - h / q, p.y + g / q - h / 2);
+      a.lineTo(p.x - g, p.y - h);
+      a.lineTo(p.x - g / 2 + h / q, p.y - h / 2 - g / q);
+      a.close();
+      n ? a.fillAndStroke() : a.stroke()
+    }
+  }
+  mxMarker.addMarker("classic", a);
+  mxMarker.addMarker("block", a);
+  mxMarker.addMarker("open", function(a, b, e, f, g, h, k, l, m, n) {
+    b = 1.118 * g * m;
+    e = 1.118 * h * m;
+    g *= k + m;
+    h *= k + m;
+    var p = f.clone();
+    p.x -= b;
+    p.y -= e;
+    f.x += 2 * -b;
+    f.y += 2 * -e;
+    return function() {
+      a.begin();
+      a.moveTo(p.x - g -
+        h / 2, p.y - h + g / 2);
+      a.lineTo(p.x, p.y);
+      a.lineTo(p.x + h / 2 - g, p.y - h - g / 2);
+      a.stroke()
+    }
+  });
+  mxMarker.addMarker("oval", function(a, b, e, f, g, h, k, l, m, n) {
+    var p = k / 2,
+      q = f.clone();
+    f.x -= g * p;
+    f.y -= h * p;
+    return function() {
+      a.ellipse(q.x - p, q.y - p, k, k);
+      n ? a.fillAndStroke() : a.stroke()
+    }
+  });
+  mxMarker.addMarker("diamond", b);
+  mxMarker.addMarker("diamondThin", b)
+})();
+
+function mxActor(a, b, c, d) {
+  mxShape.call(this);
+  this.bounds = a;
+  this.fill = b;
+  this.stroke = c;
+  this.strokewidth = null != d ? d : 1
+}
+mxUtils.extend(mxActor, mxShape);
+mxActor.prototype.paintVertexShape = function(a, b, c, d, e) {
+  a.translate(b, c);
+  a.begin();
+  this.redrawPath(a, b, c, d, e);
+  a.fillAndStroke()
+};
+mxActor.prototype.redrawPath = function(a, b, c, d, e) {
+  b = d / 3;
+  a.moveTo(0, e);
+  a.curveTo(0, 3 * e / 5, 0, 2 * e / 5, d / 2, 2 * e / 5);
+  a.curveTo(d / 2 - b, 2 * e / 5, d / 2 - b, 0, d / 2, 0);
+  a.curveTo(d / 2 + b, 0, d / 2 + b, 2 * e / 5, d / 2, 2 * e / 5);
+  a.curveTo(d, 2 * e / 5, d, 3 * e / 5, d, e);
+  a.close()
+};
+
+function mxCloud(a, b, c, d) {
+  mxActor.call(this);
+  this.bounds = a;
+  this.fill = b;
+  this.stroke = c;
+  this.strokewidth = null != d ? d : 1
+}
+mxUtils.extend(mxCloud, mxActor);
+mxCloud.prototype.redrawPath = function(a, b, c, d, e) {
+  a.moveTo(0.25 * d, 0.25 * e);
+  a.curveTo(0.05 * d, 0.25 * e, 0, 0.5 * e, 0.16 * d, 0.55 * e);
+  a.curveTo(0, 0.66 * e, 0.18 * d, 0.9 * e, 0.31 * d, 0.8 * e);
+  a.curveTo(0.4 * d, e, 0.7 * d, e, 0.8 * d, 0.8 * e);
+  a.curveTo(d, 0.8 * e, d, 0.6 * e, 0.875 * d, 0.5 * e);
+  a.curveTo(d, 0.3 * e, 0.8 * d, 0.1 * e, 0.625 * d, 0.2 * e);
+  a.curveTo(0.5 * d, 0.05 * e, 0.3 * d, 0.05 * e, 0.25 * d, 0.25 * e);
+  a.close()
+};
+
+function mxRectangleShape(a, b, c, d) {
+  mxShape.call(this);
+  this.bounds = a;
+  this.fill = b;
+  this.stroke = c;
+  this.strokewidth = null != d ? d : 1
+}
+mxUtils.extend(mxRectangleShape, mxShape);
+mxRectangleShape.prototype.isHtmlAllowed = function() {
+  return !this.isRounded && !this.glass && 0 == this.rotation
+};
+mxRectangleShape.prototype.paintBackground = function(a, b, c, d, e) {
+  if (this.isRounded) {
+    var f = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, 100 * mxConstants.RECTANGLE_ROUNDING_FACTOR) / 100,
+      f = Math.min(d * f, e * f);
+    a.roundrect(b, c, d, e, f, f)
+  } else a.rect(b, c, d, e);
+  a.fillAndStroke()
+};
+mxRectangleShape.prototype.paintForeground = function(a, b, c, d, e) {
+  this.glass && this.paintGlassEffect(a, b, c, d, e, this.getArcSize(d + this.strokewidth, e + this.strokewidth))
+};
+mxRectangleShape.prototype.redrawHtmlShape = function() {
+  this.updateHtmlBounds(this.node);
+  this.updateHtmlFilters(this.node);
+  this.updateHtmlColors(this.node)
+};
+mxRectangleShape.prototype.updateHtmlBounds = function(a) {
+  var b = 9 <= document.documentMode ? 0 : Math.ceil(this.strokewidth * this.scale);
+  a.style.borderWidth = Math.max(1, b) + "px";
+  a.style.overflow = "hidden";
+  a.style.left = Math.round(this.bounds.x - b / 2) + "px";
+  a.style.top = Math.round(this.bounds.y - b / 2) + "px";
+  "CSS1Compat" == document.compatMode && (b = -b);
+  a.style.width = Math.round(Math.max(0, this.bounds.width + b)) + "px";
+  a.style.height = Math.round(Math.max(0, this.bounds.height + b)) + "px"
+};
+mxRectangleShape.prototype.updateHtmlColors = function(a) {
+  var b = this.stroke;
+  null != b && b != mxConstants.NONE ? (a.style.borderColor = b, this.isDashed ? a.style.borderStyle = "dashed" : 0 < this.strokewidth && (a.style.borderStyle = "solid"), a.style.borderWidth = Math
+    .max(1, Math.ceil(this.strokewidth * this.scale)) + "px") : a.style.borderWidth = "0px";
+  b = this.fill;
+  null != b && b != mxConstants.NONE ? (a.style.backgroundColor = b, a.style.backgroundImage = "none") : this.pointerEvents ? a.style.backgroundColor = "transparent" : 8 == document.documentMode ?
+    mxUtils.addTransparentBackgroundFilter(a) : this.setTransparentBackgroundImage(a)
+};
+mxRectangleShape.prototype.updateHtmlFilters = function(a) {
+  var b = "";
+  100 > this.opacity && (b += "alpha(opacity\x3d" + this.opacity + ")");
+  this.isShadow && (b += "progid:DXImageTransform.Microsoft.dropShadow (OffX\x3d'" + Math.round(mxConstants.SHADOW_OFFSET_X * this.scale) + "', OffY\x3d'" + Math.round(mxConstants.SHADOW_OFFSET_Y *
+    this.scale) + "', Color\x3d'" + mxConstants.SHADOWCOLOR + "')");
+  if (this.gradient) {
+    var c = this.fill,
+      d = this.gradient,
+      e = "0",
+      f = {
+        east: 0,
+        south: 1,
+        west: 2,
+        north: 3
+      },
+      g = null != this.direction ? f[this.direction] : 0;
+    null !=
+      this.gradientDirection && (g = mxUtils.mod(g + f[this.gradientDirection] - 1, 4));
+    1 == g ? (e = "1", f = c, c = d, d = f) : 2 == g ? (f = c, c = d, d = f) : 3 == g && (e = "1");
+    b += "progid:DXImageTransform.Microsoft.gradient(startColorStr\x3d'" + c + "', endColorStr\x3d'" + d + "', gradientType\x3d'" + e + "')"
+  }
+  a.style.filter = b
+};
+
+function mxEllipse(a, b, c, d) {
+  mxShape.call(this);
+  this.bounds = a;
+  this.fill = b;
+  this.stroke = c;
+  this.strokewidth = null != d ? d : 1
+}
+mxUtils.extend(mxEllipse, mxShape);
+mxEllipse.prototype.paintVertexShape = function(a, b, c, d, e) {
+  a.ellipse(b, c, d, e);
+  a.fillAndStroke()
+};
+
+function mxDoubleEllipse(a, b, c, d) {
+  mxShape.call(this);
+  this.bounds = a;
+  this.fill = b;
+  this.stroke = c;
+  this.strokewidth = null != d ? d : 1
+}
+mxUtils.extend(mxDoubleEllipse, mxShape);
+mxDoubleEllipse.prototype.vmlScale = 10;
+mxDoubleEllipse.prototype.paintBackground = function(a, b, c, d, e) {
+  a.ellipse(b, c, d, e);
+  a.fillAndStroke()
+};
+mxDoubleEllipse.prototype.paintForeground = function(a, b, c, d, e) {
+  var f = Math.min(4, Math.min(d / 5, e / 5));
+  d -= 2 * f;
+  e -= 2 * f;
+  0 < d && 0 < e && a.ellipse(b + f, c + f, d, e);
+  a.stroke()
+};
+
+function mxRhombus(a, b, c, d) {
+  mxShape.call(this);
+  this.bounds = a;
+  this.fill = b;
+  this.stroke = c;
+  this.strokewidth = null != d ? d : 1
+}
+mxUtils.extend(mxRhombus, mxShape);
+mxRhombus.prototype.paintVertexShape = function(a, b, c, d, e) {
+  var f = d / 2,
+    g = e / 2;
+  a.begin();
+  a.moveTo(b + f, c);
+  a.lineTo(b + d, c + g);
+  a.lineTo(b + f, c + e);
+  a.lineTo(b, c + g);
+  a.close();
+  a.fillAndStroke()
+};
+
+function mxPolyline(a, b, c) {
+  mxShape.call(this);
+  this.points = a;
+  this.stroke = b;
+  this.strokewidth = null != c ? c : 1
+}
+mxUtils.extend(mxPolyline, mxShape);
+mxPolyline.prototype.getRotation = function() {
+  return 0
+};
+mxPolyline.prototype.paintEdgeShape = function(a, b) {
+  this.paintLine(a, b, this.isRounded)
+};
+mxPolyline.prototype.paintLine = function(a, b, c) {
+  var d = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, mxConstants.LINE_ARCSIZE) / 2,
+    e = b[0],
+    f = b[b.length - 1];
+  a.begin();
+  a.moveTo(e.x, e.y);
+  for (var g = 1; g < b.length - 1; g++) {
+    var h = b[g],
+      k = e.x - h.x,
+      e = e.y - h.y;
+    if (c && g < b.length - 1 && (0 != k || 0 != e)) {
+      var l = Math.sqrt(k * k + e * e),
+        k = k * Math.min(d, l / 2) / l,
+        e = e * Math.min(d, l / 2) / l;
+      a.lineTo(h.x + k, h.y + e);
+      e = b[g + 1];
+      k = e.x - h.x;
+      e = e.y - h.y;
+      l = Math.max(1, Math.sqrt(k * k + e * e));
+      k = k * Math.min(d, l / 2) / l;
+      e = e * Math.min(d, l / 2) / l;
+      k = h.x + k;
+      e = h.y + e;
+      a.quadTo(h.x,
+        h.y, k, e);
+      h = new mxPoint(k, e)
+    } else a.lineTo(h.x, h.y);
+    e = h
+  }
+  a.lineTo(f.x, f.y);
+  a.stroke()
+};
+
+function mxArrow(a, b, c, d, e, f, g) {
+  mxShape.call(this);
+  this.points = a;
+  this.fill = b;
+  this.stroke = c;
+  this.strokewidth = null != d ? d : 1;
+  this.arrowWidth = null != e ? e : mxConstants.ARROW_WIDTH;
+  this.spacing = null != f ? f : mxConstants.ARROW_SPACING;
+  this.endSize = null != g ? g : mxConstants.ARROW_SIZE
+}
+mxUtils.extend(mxArrow, mxShape);
+mxArrow.prototype.paintEdgeShape = function(a, b) {
+  var c = mxConstants.ARROW_SPACING,
+    d = mxConstants.ARROW_WIDTH,
+    e = mxConstants.ARROW_SIZE,
+    f = b[0],
+    g = b[b.length - 1],
+    h = g.x - f.x,
+    k = g.y - f.y,
+    l = Math.sqrt(h * h + k * k),
+    m = l - 2 * c - e,
+    h = h / l,
+    k = k / l,
+    l = d * k / 3,
+    d = -d * h / 3,
+    e = f.x - l / 2 + c * h,
+    f = f.y - d / 2 + c * k,
+    n = e + l,
+    p = f + d,
+    q = n + m * h,
+    m = p + m * k,
+    s = q + l,
+    r = m + d,
+    t = s - 3 * l,
+    v = r - 3 * d;
+  a.begin();
+  a.moveTo(e, f);
+  a.lineTo(n, p);
+  a.lineTo(q, m);
+  a.lineTo(s, r);
+  a.lineTo(g.x - c * h, g.y - c * k);
+  a.lineTo(t, v);
+  a.lineTo(t + l, v + d);
+  a.close();
+  a.fillAndStroke()
+};
+
+function mxText(a, b, c, d, e, f, g, h, k, l, m, n, p, q, s, r, t, v, w, u) {
+  mxShape.call(this);
+  this.value = a;
+  this.bounds = b;
+  this.color = null != e ? e : "black";
+  this.align = null != c ? c : "";
+  this.valign = null != d ? d : "";
+  this.family = null != f ? f : mxConstants.DEFAULT_FONTFAMILY;
+  this.size = null != g ? g : mxConstants.DEFAULT_FONTSIZE;
+  this.fontStyle = null != h ? h : mxConstants.DEFAULT_FONTSTYLE;
+  this.spacing = parseInt(k || 2);
+  this.spacingTop = this.spacing + parseInt(l || 0);
+  this.spacingRight = this.spacing + parseInt(m || 0);
+  this.spacingBottom = this.spacing + parseInt(n || 0);
+  this.spacingLeft = this.spacing + parseInt(p || 0);
+  this.horizontal = null != q ? q : !0;
+  this.background = s;
+  this.border = r;
+  this.wrap = null != t ? t : !1;
+  this.clipped = null != v ? v : !1;
+  this.overflow = null != w ? w : "visible";
+  this.labelPadding = null != u ? u : 0;
+  this.rotation = 0
+}
+mxUtils.extend(mxText, mxShape);
+mxText.prototype.baseSpacingTop = 0;
+mxText.prototype.baseSpacingBottom = 0;
+mxText.prototype.baseSpacingLeft = 0;
+mxText.prototype.baseSpacingRight = 0;
+mxText.prototype.replaceLinefeeds = !0;
+mxText.prototype.verticalTextRotation = -90;
+mxText.prototype.ignoreClippedStringSize = !0;
+mxText.prototype.ignoreStringSize = !1;
+mxText.prototype.isParseVml = function() {
+  return !1
+};
+mxText.prototype.isHtmlAllowed = function() {
+  return 8 != document.documentMode
+};
+mxText.prototype.getSvgScreenOffset = function() {
+  return 0
+};
+mxText.prototype.checkBounds = function() {
+  return null != this.bounds && !isNaN(this.bounds.x) && !isNaN(this.bounds.y) && !isNaN(this.bounds.width) && !isNaN(this.bounds.height)
+};
+mxText.prototype.updateBoundingBox = function() {
+  var a = this.node;
+  8 == document.documentMode && null != a.firstChild && (a = a.firstChild, null != a.firstChild && (a = a.firstChild));
+  this.boundingBox = this.bounds.clone();
+  var b = this.getTextRotation();
+  if (!this.ignoreStringSize && null != a && "fill" != this.overflow && (!this.clipped || !this.ignoreClippedStringSize)) {
+    var c = null,
+      d = null;
+    if (null != a.ownerSVGElement)
+      if (null != a.firstChild && null != a.firstChild.firstChild && "foreignObject" == a.firstChild.firstChild.nodeName) a = a.firstChild.firstChild,
+        c = this.wrap ? this.bounds.width : parseInt(a.getAttribute("width")) * this.scale, d = parseInt(a.getAttribute("height")) * this.scale;
+      else {
+        b = a.getBBox();
+        if (0 == b.width && 0 == b.height) return;
+        this.boundingBox = new mxRectangle(b.x, b.y, b.width, b.height);
+        b = 0
+      } else d = this.state.view.textDiv, null != this.offsetWidth && null != this.offsetHeight ? (c = this.wrap ? this.bounds.width : this.offsetWidth * this.scale, d = this.offsetHeight * this.scale) :
+      null != d ? (this.updateFont(d), this.updateSize(d), mxUtils.isNode(this.value) ? d.innerHTML = this.value.outerHTML :
+        (c = this.replaceLinefeeds ? this.value.replace(/\n/g, "\x3cbr/\x3e") : this.value, d.innerHTML = c), c = this.wrap ? this.bounds.width : d.offsetWidth * this.scale, d = d.offsetHeight *
+        this.scale) : (c = this.wrap ? this.bounds.width : a.offsetWidth * this.scale, d = a.offsetHeight * this.scale);
+    null != c && null != d && (this.boundingBox = new mxRectangle(this.bounds.x + this.margin.x * c, this.bounds.y + this.margin.y * d, c, d))
+  } else this.boundingBox.x += this.margin.x * this.boundingBox.width, this.boundingBox.y += this.margin.y * this.boundingBox.height;
+  null !=
+    this.boundingBox && (0 != b && (b = mxUtils.getBoundingBox(this.boundingBox, b), this.boundingBox.x = b.x, this.boundingBox.y = b.y, mxClient.IS_QUIRKS || (this.boundingBox.width = b.width,
+      this.boundingBox.height = b.height)), this.boundingBox.x = Math.floor(this.boundingBox.x), this.boundingBox.y = Math.floor(this.boundingBox.y), this.boundingBox.width = Math.ceil(this.boundingBox
+      .width), this.boundingBox.height = Math.ceil(this.boundingBox.height))
+};
+mxText.prototype.getShapeRotation = function() {
+  return 0
+};
+mxText.prototype.getTextRotation = function() {
+  return null != this.state && null != this.state.shape ? this.state.shape.getTextRotation() : 0
+};
+mxText.prototype.isPaintBoundsInverted = function() {
+  return !this.horizontal && null != this.state && this.state.view.graph.model.isVertex(this.state.cell)
+};
+mxText.prototype.configureCanvas = function(a, b, c, d, e) {
+  mxShape.prototype.configureCanvas.apply(this, arguments);
+  a.setFontColor(this.color);
+  a.setFontBackgroundColor(this.background);
+  a.setFontBorderColor(this.border);
+  a.setFontFamily(this.family);
+  a.setFontSize(this.size);
+  a.setFontStyle(this.fontStyle)
+};
+mxText.prototype.updateVmlContainer = function() {
+  this.node.style.left = Math.round(this.bounds.x) + "px";
+  this.node.style.top = Math.round(this.bounds.y) + "px";
+  this.node.style.width = "1px";
+  this.node.style.height = "1px";
+  this.node.style.overflow = "visible"
+};
+mxText.prototype.paint = function(a) {
+  var b = this.scale,
+    c = this.bounds.x / b,
+    d = this.bounds.y / b,
+    e = this.bounds.width / b,
+    b = this.bounds.height / b;
+  this.updateTransform(a, c, d, e, b);
+  this.configureCanvas(a, c, d, e, b);
+  var f = mxUtils.isNode(this.value) || this.dialect == mxConstants.DIALECT_STRICTHTML,
+    g = f || a instanceof mxVmlCanvas2D ? "html" : "",
+    h = this.value;
+  !f && "html" == g && (h = mxUtils.htmlEntities(h, !1));
+  h = !mxUtils.isNode(this.value) && this.replaceLinefeeds && "html" == g ? h.replace(/\n/g, "\x3cbr/\x3e") : h;
+  a.text(c, d, e, b, h, this.align,
+    this.valign, this.wrap, g, "fill" == this.overflow, this.clipped, this.getTextRotation())
+};
+mxText.prototype.redrawHtmlShape = function() {
+  var a = this.node.style;
+  a.opacity = 1 > this.opacity ? this.opacity : "";
+  a.overflow = "";
+  a.width = "";
+  a.height = "";
+  this.updateFont(this.node);
+  this.updateSize(this.node);
+  this.updateValue();
+  this.offsetHeight = this.offsetWidth = null;
+  null != mxClient.CSS_PREFIX ? this.updateHtmlTransform() : this.updateHtmlFilter()
+};
+mxText.prototype.updateHtmlTransform = function() {
+  var a = this.getTextRotation(),
+    b = this.node.style,
+    c = this.margin.x,
+    d = this.margin.y;
+  0 != a ? (b[mxClient.CSS_PREFIX + "TransformOrigin"] = 100 * -c + "% " + 100 * -d + "%", b[mxClient.CSS_PREFIX + "Transform"] = "translate(" + 100 * c + "%," + 100 * d + "%)scale(" + this.scale +
+    ") rotate(" + a + "deg)") : (b[mxClient.CSS_PREFIX + "TransformOrigin"] = "0% 0%", b[mxClient.CSS_PREFIX + "Transform"] = "scale(" + this.scale + ")translate(" + 100 * c + "%," + 100 * d +
+    "%)");
+  b.left = Math.round(this.bounds.x) + "px";
+  b.top = Math.round(this.bounds.y) +
+    "px"
+};
+mxText.prototype.updateHtmlFilter = function() {
+  var a = this.node.style,
+    b = this.margin.x,
+    c = this.margin.y,
+    d = this.scale;
+  a.filter = "";
+  var e = 0,
+    f = 0,
+    g = null != this.state ? this.state.view.textDiv : null;
+  if (null != g) {
+    g.style.overflow = "";
+    g.style.height = "";
+    g.style.width = "";
+    this.updateFont(g);
+    this.updateSize(g);
+    if (mxUtils.isNode(this.value)) g.innerHTML = this.value.outerHTML;
+    else {
+      var h = this.value;
+      this.dialect != mxConstants.DIALECT_STRICTHTML && (h = mxUtils.htmlEntities(h, !1));
+      h = this.replaceLinefeeds ? h.replace(/\n/g, "\x3cbr/\x3e") : h;
+      g.innerHTML = h
+    }
+    e = g.offsetWidth + 2;
+    f = g.offsetHeight + 2
+  } else e = this.node.offsetWidth, f = this.node.offsetHeight + 1;
+  this.offsetWidth = e;
+  this.offsetHeight = f;
+  g = this.bounds.width / d;
+  h = this.bounds.height / d;
+  mxClient.IS_QUIRKS && (this.clipped || "fill" == this.overflow) && 0 < h ? (h = Math.min(h, f), a.height = Math.round(h + 1) + "px") : h = f;
+  "fill" != this.overflow && (mxClient.IS_QUIRKS && (this.clipped || this.wrap) && 0 < g ? (g = Math.min(g, e), a.width = Math.round(g) + "px") : g = e);
+  var h = h * d,
+    g = g * d,
+    e = this.getTextRotation() * (Math.PI / 180),
+    f = parseFloat(parseFloat(Math.cos(e)).toFixed(8)),
+    k = parseFloat(parseFloat(Math.sin(-e)).toFixed(8)),
+    e = e % (2 * Math.PI);
+  0 > e && (e += 2 * Math.PI);
+  e %= Math.PI;
+  e > Math.PI / 2 && (e = Math.PI - e);
+  var l = Math.cos(e),
+    m = Math.sin(-e),
+    b = g * -(b + 0.5),
+    c = h * -(c + 0.5),
+    n = (h - h * l + g * m) / 2 + k * b - f * c;
+  0 != e && (a.filter = "progid:DXImageTransform.Microsoft.Matrix(M11\x3d" + f + ", M12\x3d" + k + ", M21\x3d" + -k + ", M22\x3d" + f + ", sizingMethod\x3d'auto expand')");
+  a.zoom = d;
+  a.left = Math.round(this.bounds.x + ((g - g * l + h * m) / 2 - f * b - k * c) - g / 2) + "px";
+  a.top = Math.round(this.bounds.y + n - h / 2) + "px"
+};
+mxText.prototype.updateValue = function() {
+  if (mxUtils.isNode(this.value)) this.node.innerHTML = "", this.node.appendChild(this.value);
+  else {
+    var a = this.value;
+    this.dialect != mxConstants.DIALECT_STRICTHTML && (a = mxUtils.htmlEntities(a, !1));
+    var a = this.replaceLinefeeds ? a.replace(/\n/g, "\x3cbr/\x3e") : a,
+      b = null != this.background && this.background != mxConstants.NONE ? this.background : null,
+      c = null != this.border && this.border != mxConstants.NONE ? this.border : null;
+    if (null != b || null != c)
+      if ("fill" == this.overflow) null != b && (this.node.style.backgroundColor =
+        b), null != c && (this.node.style.border = "1px solid " + c);
+      else {
+        var d = "";
+        null != b && (d += "background-color:" + b + ";");
+        null != c && (d += "border:1px solid " + c + ";");
+        a = '\x3cdiv style\x3d"zoom:1;' + d + "display:inline-block;_display:inline;padding-bottom:1px;padding-right:1px;line-height:" + this.node.style.lineHeight + '"\x3e' + a + "\x3c/div\x3e";
+        this.node.style.lineHeight = ""
+      }
+    this.node.innerHTML = a
+  }
+};
+mxText.prototype.updateFont = function(a) {
+  a = a.style;
+  a.lineHeight = Math.round(this.size * mxConstants.LINE_HEIGHT) + "px";
+  a.fontSize = Math.round(this.size) + "px";
+  a.fontFamily = this.family;
+  a.verticalAlign = "top";
+  a.color = this.color;
+  a.fontWeight = (this.fontStyle & mxConstants.FONT_BOLD) == mxConstants.FONT_BOLD ? "bold" : "";
+  a.fontStyle = (this.fontStyle & mxConstants.FONT_ITALIC) == mxConstants.FONT_ITALIC ? "italic" : "";
+  a.fontDecoration = (this.fontStyle & mxConstants.FONT_UNDERLINE) == mxConstants.FONT_UNDERLINE ? "underline" : "";
+  a.textAlign =
+    this.align == mxConstants.ALIGN_CENTER ? "center" : this.align == mxConstants.ALIGN_RIGHT ? "right" : "left"
+};
+mxText.prototype.updateSize = function(a) {
+  var b = Math.round(this.bounds.width / this.scale),
+    c = Math.round(this.bounds.height / this.scale);
+  a = a.style;
+  this.clipped ? (a.overflow = "hidden", 0 < c && (a.maxHeight = c + "px"), 0 < b && (a.width = b + "px")) : "fill" == this.overflow && (a.width = b + "px", 0 < c && (a.maxHeight = c + "px"));
+  this.wrap ? (!this.clipped && 0 < b && (a.width = b + "px"), a.whiteSpace = "normal") : a.whiteSpace = "nowrap"
+};
+mxText.prototype.updateMargin = function() {
+  this.margin = mxUtils.getAlignmentAsPoint(this.align, this.valign)
+};
+mxText.prototype.getSpacing = function() {
+  var a = 0,
+    b = 0,
+    a = this.align == mxConstants.ALIGN_CENTER ? (this.spacingLeft - this.spacingRight) / 2 : this.align == mxConstants.ALIGN_RIGHT ? -this.spacingRight - this.baseSpacingRight : this.spacingLeft +
+    this.baseSpacingLeft,
+    b = this.valign == mxConstants.ALIGN_MIDDLE ? (this.spacingTop - this.spacingBottom) / 2 : this.valign == mxConstants.ALIGN_BOTTOM ? -this.spacingBottom - this.baseSpacingBottom : this.spacingTop +
+    this.baseSpacingTop;
+  return new mxPoint(a, b)
+};
+
+function mxTriangle() {
+  mxActor.call(this)
+}
+mxUtils.extend(mxTriangle, mxActor);
+mxTriangle.prototype.redrawPath = function(a, b, c, d, e) {
+  a.moveTo(0, 0);
+  a.lineTo(d, 0.5 * e);
+  a.lineTo(0, e);
+  a.close()
+};
+
+function mxHexagon() {
+  mxActor.call(this)
+}
+mxUtils.extend(mxHexagon, mxActor);
+mxHexagon.prototype.redrawPath = function(a, b, c, d, e) {
+  a.moveTo(0.25 * d, 0);
+  a.lineTo(0.75 * d, 0);
+  a.lineTo(d, 0.5 * e);
+  a.lineTo(0.75 * d, e);
+  a.lineTo(0.25 * d, e);
+  a.lineTo(0, 0.5 * e);
+  a.close()
+};
+
+function mxLine(a, b, c) {
+  mxShape.call(this);
+  this.bounds = a;
+  this.stroke = b;
+  this.strokewidth = null != c ? c : 1
+}
+mxUtils.extend(mxLine, mxShape);
+mxLine.prototype.paintVertexShape = function(a, b, c, d, e) {
+  c += e / 2;
+  a.begin();
+  a.moveTo(b, c);
+  a.lineTo(b + d, c);
+  a.stroke()
+};
+
+function mxImageShape(a, b, c, d, e) {
+  mxShape.call(this);
+  this.bounds = a;
+  this.image = b;
+  this.fill = c;
+  this.stroke = d;
+  this.strokewidth = null != e ? e : 1;
+  this.shadow = !1
+}
+mxUtils.extend(mxImageShape, mxRectangleShape);
+mxImageShape.prototype.preserveImageAspect = !0;
+mxImageShape.prototype.getSvgScreenOffset = function() {
+  return !mxClient.IS_IE ? 0.5 : 0
+};
+mxImageShape.prototype.apply = function(a) {
+  mxShape.prototype.apply.apply(this, arguments);
+  this.gradient = this.stroke = this.fill = null;
+  null != this.style && (this.fill = mxUtils.getValue(this.style, mxConstants.STYLE_IMAGE_BACKGROUND), this.stroke = mxUtils.getValue(this.style, mxConstants.STYLE_IMAGE_BORDER), this.preserveImageAspect =
+    1 == mxUtils.getNumber(this.style, mxConstants.STYLE_IMAGE_ASPECT, 1), this.flipH = this.flipH || 1 == mxUtils.getValue(this.style, "imageFlipH", 0), this.flipV = this.flipV || 1 == mxUtils.getValue(
+      this.style,
+      "imageFlipV", 0))
+};
+mxImageShape.prototype.isHtmlAllowed = function() {
+  return !this.preserveImageAspect
+};
+mxImageShape.prototype.createHtml = function() {
+  var a = document.createElement("div");
+  a.style.position = "absolute";
+  return a
+};
+mxImageShape.prototype.paintVertexShape = function(a, b, c, d, e) {
+  if (null != this.image) {
+    var f = mxUtils.getValue(this.style, mxConstants.STYLE_IMAGE_BACKGROUND, null),
+      g = mxUtils.getValue(this.style, mxConstants.STYLE_IMAGE_BORDER, null);
+    if (null != f || null != g) a.setFillColor(f), a.setStrokeColor(g), a.rect(b, c, d, e), a.fillAndStroke();
+    a.image(b, c, d, e, this.image, this.preserveImageAspect, !1, !1)
+  } else mxRectangleShape.prototype.paintBackground.apply(this, arguments)
+};
+mxImageShape.prototype.redrawHtmlShape = function() {
+  this.node.style.left = Math.round(this.bounds.x) + "px";
+  this.node.style.top = Math.round(this.bounds.y) + "px";
+  this.node.style.width = Math.max(0, Math.round(this.bounds.width)) + "px";
+  this.node.style.height = Math.max(0, Math.round(this.bounds.height)) + "px";
+  this.node.style.backgroundColor = this.fill || "";
+  this.node.style.borderColor = this.stroke || "";
+  this.node.innerHTML = "";
+  if (null != this.image) {
+    var a = document.createElement(mxClient.IS_IE6 || null == mxClient.CSS_PREFIX && 0 !=
+      this.rotation ? mxClient.VML_PREFIX + ":image" : "img");
+    a.style.position = "absolute";
+    a.src = this.image;
+    var b = 100 > this.opacity ? "alpha(opacity\x3d" + this.opacity + ")" : "";
+    this.node.style.filter = b;
+    this.flipH && this.flipV ? b += "progid:DXImageTransform.Microsoft.BasicImage(rotation\x3d2)" : this.flipH ? b += "progid:DXImageTransform.Microsoft.BasicImage(mirror\x3d1)" : this.flipV && (b +=
+      "progid:DXImageTransform.Microsoft.BasicImage(rotation\x3d2, mirror\x3d1)");
+    a.style.filter != b && (a.style.filter = b);
+    "image" == a.nodeName ? a.style.rotation =
+      this.rotation : a.style[mxClient.CSS_PREFIX + "Transform"] = "rotate(" + this.rotation + "deg)";
+    a.style.width = this.node.style.width;
+    a.style.height = this.node.style.height;
+    this.node.style.backgroundImage = "";
+    this.node.appendChild(a)
+  } else this.setTransparentBackgroundImage(this.node)
+};
+
+function mxLabel(a, b, c, d) {
+  mxRectangleShape.call(this, a, b, c, d)
+}
+mxUtils.extend(mxLabel, mxRectangleShape);
+mxLabel.prototype.imageSize = mxConstants.DEFAULT_IMAGESIZE;
+mxLabel.prototype.spacing = 2;
+mxLabel.prototype.indicatorSize = 10;
+mxLabel.prototype.indicatorSpacing = 2;
+mxLabel.prototype.init = function(a) {
+  mxShape.prototype.init.apply(this, arguments);
+  null != this.indicatorColor && null != this.indicatorShape && (this.indicator = new this.indicatorShape, this.indicator.dialect = this.dialect, this.indicator.bounds = this.bounds, this.indicator
+    .fill = this.indicatorColor, this.indicator.stroke = this.indicatorColor, this.indicator.gradient = this.indicatorGradientColor, this.indicator.direction = this.indicatorDirection, this.indicator
+    .init(this.node))
+};
+mxLabel.prototype.redraw = function() {
+  null != this.indicator && (this.indicator.fill = this.indicatorColor, this.indicator.stroke = this.indicatorColor, this.indicator.gradient = this.indicatorGradientColor, this.indicator.direction =
+    this.indicatorDirection);
+  mxShape.prototype.redraw.apply(this, arguments)
+};
+mxLabel.prototype.isHtmlAllowed = function() {
+  return mxRectangleShape.prototype.isHtmlAllowed.apply(this, arguments) && null == this.indicatorColor && null == this.indicatorShape
+};
+mxLabel.prototype.paintForeground = function(a, b, c, d, e) {
+  this.paintImage(a, b, c, d, e);
+  this.paintIndicator(a, b, c, d, e);
+  mxRectangleShape.prototype.paintForeground.apply(this, arguments)
+};
+mxLabel.prototype.paintImage = function(a, b, c, d, e) {
+  null != this.image && (b = this.getImageBounds(b, c, d, e), a.image(b.x, b.y, b.width, b.height, this.image, !1, !1, !1))
+};
+mxLabel.prototype.getImageBounds = function(a, b, c, d) {
+  var e = mxUtils.getValue(this.style, mxConstants.STYLE_IMAGE_ALIGN, mxConstants.ALIGN_LEFT),
+    f = mxUtils.getValue(this.style, mxConstants.STYLE_IMAGE_VERTICAL_ALIGN, mxConstants.ALIGN_MIDDLE),
+    g = mxUtils.getNumber(this.style, mxConstants.STYLE_IMAGE_WIDTH, mxConstants.DEFAULT_IMAGESIZE),
+    h = mxUtils.getNumber(this.style, mxConstants.STYLE_IMAGE_HEIGHT, mxConstants.DEFAULT_IMAGESIZE),
+    k = mxUtils.getNumber(this.style, mxConstants.STYLE_SPACING, this.spacing) + 5;
+  a = e == mxConstants.ALIGN_CENTER ?
+    a + (c - g) / 2 : e == mxConstants.ALIGN_RIGHT ? a + (c - g - k) : a + k;
+  b = f == mxConstants.ALIGN_TOP ? b + k : f == mxConstants.ALIGN_BOTTOM ? b + (d - h - k) : b + (d - h) / 2;
+  return new mxRectangle(a, b, g, h)
+};
+mxLabel.prototype.paintIndicator = function(a, b, c, d, e) {
+  null != this.indicator ? (this.indicator.bounds = this.getIndicatorBounds(b, c, d, e), this.indicator.paint(a)) : null != this.indicatorImage && (b = this.getIndicatorBounds(b, c, d, e), a.image(
+    b.x, b.y, b.width, b.height, this.indicatorImage, !1, !1, !1))
+};
+mxLabel.prototype.getIndicatorBounds = function(a, b, c, d) {
+  var e = mxUtils.getValue(this.style, mxConstants.STYLE_IMAGE_ALIGN, mxConstants.ALIGN_LEFT),
+    f = mxUtils.getValue(this.style, mxConstants.STYLE_IMAGE_VERTICAL_ALIGN, mxConstants.ALIGN_MIDDLE),
+    g = mxUtils.getNumber(this.style, mxConstants.STYLE_INDICATOR_WIDTH, this.indicatorSize),
+    h = mxUtils.getNumber(this.style, mxConstants.STYLE_INDICATOR_HEIGHT, this.indicatorSize),
+    k = this.spacing + 5;
+  a = e == mxConstants.ALIGN_RIGHT ? a + (c - g - k) : e == mxConstants.ALIGN_CENTER ? a + (c - g) /
+    2 : a + k;
+  b = f == mxConstants.ALIGN_BOTTOM ? b + (d - h - k) : f == mxConstants.ALIGN_TOP ? b + k : b + (d - h) / 2;
+  return new mxRectangle(a, b, g, h)
+};
+mxLabel.prototype.redrawHtmlShape = function() {
+  for (mxRectangleShape.prototype.redrawHtmlShape.apply(this, arguments); this.node.hasChildNodes();) this.node.removeChild(this.node.lastChild);
+  if (null != this.image) {
+    var a = document.createElement("img");
+    a.style.position = "relative";
+    a.setAttribute("border", "0");
+    var b = this.getImageBounds(this.bounds.x, this.bounds.y, this.bounds.width, this.bounds.height);
+    b.x -= this.bounds.x;
+    b.y -= this.bounds.y;
+    a.style.left = Math.round(b.x) + "px";
+    a.style.top = Math.round(b.y) + "px";
+    a.style.width =
+      Math.round(b.width) + "px";
+    a.style.height = Math.round(b.height) + "px";
+    a.src = this.image;
+    this.node.appendChild(a)
+  }
+};
+
+function mxCylinder(a, b, c, d) {
+  mxShape.call(this);
+  this.bounds = a;
+  this.fill = b;
+  this.stroke = c;
+  this.strokewidth = null != d ? d : 1
+}
+mxUtils.extend(mxCylinder, mxShape);
+mxCylinder.prototype.maxHeight = 40;
+mxCylinder.prototype.svgStrokeTolerance = 0;
+mxCylinder.prototype.paintVertexShape = function(a, b, c, d, e) {
+  a.translate(b, c);
+  a.begin();
+  this.redrawPath(a, b, c, d, e, !1);
+  a.fillAndStroke();
+  a.setShadow(!1);
+  a.begin();
+  this.redrawPath(a, b, c, d, e, !0);
+  a.stroke()
+};
+mxCylinder.prototype.redrawPath = function(a, b, c, d, e, f) {
+  b = Math.min(this.maxHeight, Math.round(e / 5));
+  if (f && null != this.fill || !f && null == this.fill) a.moveTo(0, b), a.curveTo(0, 2 * b, d, 2 * b, d, b), f || (a.stroke(), a.begin());
+  f || (a.moveTo(0, b), a.curveTo(0, -b / 3, d, -b / 3, d, b), a.lineTo(d, e - b), a.curveTo(d, e + b / 3, 0, e + b / 3, 0, e - b), a.close())
+};
+
+function mxConnector(a, b, c) {
+  mxPolyline.call(this, a, b, c)
+}
+mxUtils.extend(mxConnector, mxPolyline);
+mxConnector.prototype.paintEdgeShape = function(a, b) {
+  var c = this.createMarker(a, b, !0),
+    d = this.createMarker(a, b, !1);
+  null == this.style || 1 != this.style[mxConstants.STYLE_CURVED] ? this.paintLine(a, b, this.isRounded) : this.paintCurvedLine(a, b);
+  a.setFillColor(this.stroke);
+  a.setShadow(!1);
+  a.setDashed(!1);
+  null != c && c();
+  null != d && d()
+};
+mxConnector.prototype.paintCurvedLine = function(a, b) {
+  a.begin();
+  var c = b[0],
+    d = b.length;
+  a.moveTo(c.x, c.y);
+  for (c = 1; c < d - 2; c++) {
+    var e = b[c],
+      f = b[c + 1];
+    a.quadTo(e.x, e.y, (e.x + f.x) / 2, (e.y + f.y) / 2)
+  }
+  e = b[d - 2];
+  f = b[d - 1];
+  a.quadTo(e.x, e.y, f.x, f.y);
+  a.stroke()
+};
+mxConnector.prototype.createMarker = function(a, b, c) {
+  var d = b.length,
+    e = c ? b[1] : b[d - 2];
+  b = c ? b[0] : b[d - 1];
+  var d = b.x - e.x,
+    f = b.y - e.y,
+    g = Math.max(1, Math.sqrt(d * d + f * f)),
+    e = d / g,
+    d = f / g,
+    f = mxUtils.getNumber(this.style, c ? mxConstants.STYLE_STARTSIZE : mxConstants.STYLE_ENDSIZE, mxConstants.DEFAULT_MARKERSIZE),
+    g = mxUtils.getValue(this.style, c ? mxConstants.STYLE_STARTARROW : mxConstants.STYLE_ENDARROW);
+  return mxMarker.createMarker(a, this, g, b, e, d, f, c, this.strokewidth, 0 != this.style[c ? mxConstants.STYLE_STARTFILL : mxConstants.STYLE_ENDFILL])
+};
+mxConnector.prototype.augmentBoundingBox = function(a) {
+  mxShape.prototype.augmentBoundingBox.apply(this, arguments);
+  var b = 0;
+  mxUtils.getValue(this.style, mxConstants.STYLE_STARTARROW, mxConstants.NONE) != mxConstants.NONE && (b = mxUtils.getNumber(this.style, mxConstants.STYLE_STARTSIZE, mxConstants.DEFAULT_MARKERSIZE) +
+    1);
+  mxUtils.getValue(this.style, mxConstants.STYLE_ENDARROW, mxConstants.NONE) != mxConstants.NONE && (b = Math.max(b, mxUtils.getNumber(this.style, mxConstants.STYLE_ENDSIZE, mxConstants.DEFAULT_MARKERSIZE)) +
+    1);
+  a.grow(Math.ceil(b * this.scale))
+};
+
+function mxSwimlane(a, b, c, d) {
+  mxShape.call(this);
+  this.bounds = a;
+  this.fill = b;
+  this.stroke = c;
+  this.strokewidth = null != d ? d : 1
+}
+mxUtils.extend(mxSwimlane, mxShape);
+mxSwimlane.prototype.imageSize = 16;
+mxSwimlane.prototype.getGradientBounds = function(a, b, c, d, e) {
+  a = Math.min(e, mxUtils.getValue(this.style, mxConstants.STYLE_STARTSIZE, mxConstants.DEFAULT_STARTSIZE));
+  return new mxRectangle(b, c, d, a)
+};
+mxSwimlane.prototype.getRotation = function() {
+  var a = mxShape.prototype.getRotation.apply(this, arguments);
+  1 != mxUtils.getValue(this.style, mxConstants.STYLE_HORIZONTAL, 1) && (a += mxText.prototype.verticalTextRotation);
+  return a
+};
+mxSwimlane.prototype.getTextRotation = function() {
+  return this.getRotation()
+};
+mxSwimlane.prototype.isPaintBoundsInverted = function() {
+  return mxShape.prototype.isPaintBoundsInverted.apply(this, arguments) || 1 != mxUtils.getValue(this.style, mxConstants.STYLE_HORIZONTAL, 1)
+};
+mxSwimlane.prototype.getArcSize = function(a, b, c) {
+  a = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, 100 * mxConstants.RECTANGLE_ROUNDING_FACTOR) / 100;
+  return 3 * c * a
+};
+mxSwimlane.prototype.paintVertexShape = function(a, b, c, d, e) {
+  var f = Math.min(e, mxUtils.getValue(this.style, mxConstants.STYLE_STARTSIZE, mxConstants.DEFAULT_STARTSIZE)),
+    g = mxUtils.getValue(this.style, mxConstants.STYLE_SWIMLANE_FILLCOLOR, mxConstants.NONE),
+    h = 1 == mxUtils.getValue(this.style, mxConstants.STYLE_SWIMLANE_LINE, 1),
+    k = 0;
+  a.translate(b, c);
+  this.isRounded ? (k = this.getArcSize(d, e, f), this.paintRoundedSwimlane(a, b, c, d, e, f, k, g, h)) : this.paintSwimlane(a, b, c, d, e, f, g, h);
+  g = mxUtils.getValue(this.style, mxConstants.STYLE_SEPARATORCOLOR,
+    mxConstants.NONE);
+  this.paintSeparator(a, d, f, e, g);
+  null != this.image && (e = this.getImageBounds(b, f, d, e), a.image(e.x - b, e.y - c, e.width, e.height, this.image, !1, !1, !1));
+  this.glass && (a.setShadow(!1), this.paintGlassEffect(a, 0, 0, d, f, k))
+};
+mxSwimlane.prototype.paintSwimlane = function(a, b, c, d, e, f, g, h) {
+  g != mxConstants.NONE && (a.save(), a.setFillColor(g), a.rect(0, 0, d, e), a.fillAndStroke(), a.restore(), a.setShadow(!1));
+  a.begin();
+  a.moveTo(0, f);
+  a.lineTo(0, 0);
+  a.lineTo(d, 0);
+  a.lineTo(d, f);
+  h && a.close();
+  a.fillAndStroke();
+  f < e && g == mxConstants.NONE && (a.pointerEvents = !1, a.begin(), a.moveTo(0, f), a.lineTo(0, e), a.lineTo(d, e), a.lineTo(d, f), a.stroke())
+};
+mxSwimlane.prototype.paintRoundedSwimlane = function(a, b, c, d, e, f, g, h, k) {
+  h != mxConstants.NONE && (a.save(), a.setFillColor(h), a.roundrect(0, 0, d, e, g, g), a.fillAndStroke(), a.restore(), a.setShadow(!1));
+  a.begin();
+  a.moveTo(d, f);
+  a.lineTo(d, g);
+  a.quadTo(d, 0, d - Math.min(d / 2, g), 0);
+  a.lineTo(Math.min(d / 2, g), 0);
+  a.quadTo(0, 0, 0, g);
+  a.lineTo(0, f);
+  k && a.close();
+  a.fillAndStroke();
+  f < e && h == mxConstants.NONE && (a.pointerEvents = !1, a.begin(), a.moveTo(0, f), a.lineTo(0, e - g), a.quadTo(0, e, Math.min(d / 2, g), e), a.lineTo(d - Math.min(d / 2, g), e),
+    a.quadTo(d, e, d, e - g), a.lineTo(d, f), a.stroke())
+};
+mxSwimlane.prototype.paintSeparator = function(a, b, c, d, e) {
+  e != mxConstants.NONE && (a.setStrokeColor(e), a.setDashed(!0), a.begin(), a.moveTo(b, c), a.lineTo(b, d), a.stroke(), a.setDashed(!1))
+};
+mxSwimlane.prototype.getImageBounds = function(a, b, c, d) {
+  return new mxRectangle(a + c - this.imageSize, b, this.imageSize, this.imageSize)
+};
+
+function mxGraphLayout(a) {
+  this.graph = a
+}
+mxGraphLayout.prototype.graph = null;
+mxGraphLayout.prototype.useBoundingBox = !0;
+mxGraphLayout.prototype.parent = null;
+mxGraphLayout.prototype.moveCell = function(a, b, c) {};
+mxGraphLayout.prototype.execute = function(a) {};
+mxGraphLayout.prototype.getGraph = function() {
+  return this.graph
+};
+mxGraphLayout.prototype.getConstraint = function(a, b, c, d) {
+  c = this.graph.view.getState(b);
+  b = null != c ? c.style : this.graph.getCellStyle(b);
+  return null != b ? b[a] : null
+};
+mxGraphLayout.traverse = function(a, b, c, d, e) {
+  if (null != c && null != a) {
+    b = null != b ? b : !0;
+    e = e || [];
+    var f = mxCellPath.create(a);
+    if (null == e[f] && (e[f] = a, d = c(a, d), null == d || d))
+      if (d = this.graph.model.getEdgeCount(a), 0 < d)
+        for (f = 0; f < d; f++) {
+          var g = this.graph.model.getEdgeAt(a, f),
+            h = this.graph.model.getTerminal(g, !0) == a;
+          if (!b || h) h = this.graph.view.getVisibleTerminal(g, !h), this.traverse(h, b, c, g, e)
+        }
+  }
+};
+mxGraphLayout.prototype.isVertexMovable = function(a) {
+  return this.graph.isCellMovable(a)
+};
+mxGraphLayout.prototype.isVertexIgnored = function(a) {
+  return !this.graph.getModel().isVertex(a) || !this.graph.isCellVisible(a)
+};
+mxGraphLayout.prototype.isEdgeIgnored = function(a) {
+  var b = this.graph.getModel();
+  return !b.isEdge(a) || !this.graph.isCellVisible(a) || null == b.getTerminal(a, !0) || null == b.getTerminal(a, !1)
+};
+mxGraphLayout.prototype.setEdgeStyleEnabled = function(a, b) {
+  this.graph.setCellStyles(mxConstants.STYLE_NOEDGESTYLE, b ? "0" : "1", [a])
+};
+mxGraphLayout.prototype.setOrthogonalEdge = function(a, b) {
+  this.graph.setCellStyles(mxConstants.STYLE_ORTHOGONAL, b ? "1" : "0", [a])
+};
+mxGraphLayout.prototype.getParentOffset = function(a) {
+  var b = new mxPoint;
+  if (null != a && a != this.parent) {
+    var c = this.graph.getModel();
+    if (c.isAncestor(this.parent, a))
+      for (var d = c.getGeometry(a); a != this.parent;) b.x += d.x, b.y += d.y, a = c.getParent(a), d = c.getGeometry(a)
+  }
+  return b
+};
+mxGraphLayout.prototype.setEdgePoints = function(a, b) {
+  if (null != a) {
+    var c = this.graph.model,
+      d = c.getGeometry(a);
+    null == d ? (d = new mxGeometry, d.setRelative(!0)) : d = d.clone();
+    if (null != this.parent && null != b)
+      for (var e = c.getParent(a), e = this.getParentOffset(e), f = 0; f < b.length; f++) b[f].x -= e.x, b[f].y -= e.y;
+    d.points = b;
+    c.setGeometry(a, d)
+  }
+};
+mxGraphLayout.prototype.setVertexLocation = function(a, b, c) {
+  var d = this.graph.getModel(),
+    e = d.getGeometry(a),
+    f = null;
+  if (null != e) {
+    f = new mxRectangle(b, c, e.width, e.height);
+    if (this.useBoundingBox) {
+      var g = this.graph.getView().getState(a);
+      if (null != g && null != g.text && null != g.text.boundingBox) {
+        var h = this.graph.getView().scale,
+          k = g.text.boundingBox;
+        g.text.boundingBox.x < g.x && (b += (g.x - k.x) / h, f.width = k.width);
+        g.text.boundingBox.y < g.y && (c += (g.y - k.y) / h, f.height = k.height)
+      }
+    }
+    null != this.parent && (g = d.getParent(a), null != g && g !=
+      this.parent && (g = this.getParentOffset(g), b -= g.x, c -= g.y));
+    if (e.x != b || e.y != c) e = e.clone(), e.x = b, e.y = c, d.setGeometry(a, e)
+  }
+  return f
+};
+mxGraphLayout.prototype.getVertexBounds = function(a) {
+  var b = this.graph.getModel().getGeometry(a);
+  if (this.useBoundingBox) {
+    var c = this.graph.getView().getState(a);
+    if (null != c && null != c.text && null != c.text.boundingBox) var d = this.graph.getView().scale,
+      e = c.text.boundingBox,
+      f = Math.max(c.x - e.x, 0) / d,
+      g = Math.max(c.y - e.y, 0) / d,
+      h = Math.max(e.x + e.width - (c.x + c.width), 0) / d,
+      c = Math.max(e.y + e.height - (c.y + c.height), 0) / d,
+      b = new mxRectangle(b.x - f, b.y - g, b.width + f + h, b.height + g + c)
+  }
+  null != this.parent && (a = this.graph.getModel().getParent(a),
+    b = b.clone(), null != a && a != this.parent && (a = this.getParentOffset(a), b.x += a.x, b.y += a.y));
+  return new mxRectangle(b.x, b.y, b.width, b.height)
+};
+mxGraphLayout.prototype.arrangeGroups = function(a, b) {
+  this.graph.getModel().beginUpdate();
+  try {
+    for (var c = a.length - 1; 0 <= c; c--) {
+      var d = a[c],
+        e = this.graph.getChildVertices(d),
+        f = this.graph.getBoundingBoxFromGeometry(e),
+        g = this.graph.getCellGeometry(d),
+        h = 0,
+        k = 0;
+      if (this.graph.isSwimlane(d)) var l = this.graph.getStartSize(d),
+        h = l.width,
+        k = l.height;
+      null != f && null != g && (g = g.clone(), g.x = g.x + f.x - b - h, g.y = g.y + f.y - b - k, g.width = f.width + 2 * b + h, g.height = f.height + 2 * b + k, this.graph.getModel().setGeometry(d,
+        g), this.graph.moveCells(e,
+        b + h - f.x, b + k - f.y))
+    }
+  } finally {
+    this.graph.getModel().endUpdate()
+  }
+};
+
+function mxStackLayout(a, b, c, d, e, f) {
+  mxGraphLayout.call(this, a);
+  this.horizontal = null != b ? b : !0;
+  this.spacing = null != c ? c : 0;
+  this.x0 = null != d ? d : 0;
+  this.y0 = null != e ? e : 0;
+  this.border = null != f ? f : 0
+}
+mxStackLayout.prototype = new mxGraphLayout;
+mxStackLayout.prototype.constructor = mxStackLayout;
+mxStackLayout.prototype.horizontal = null;
+mxStackLayout.prototype.spacing = null;
+mxStackLayout.prototype.x0 = null;
+mxStackLayout.prototype.y0 = null;
+mxStackLayout.prototype.border = 0;
+mxStackLayout.prototype.keepFirstLocation = !1;
+mxStackLayout.prototype.fill = !1;
+mxStackLayout.prototype.resizeParent = !1;
+mxStackLayout.prototype.resizeLast = !1;
+mxStackLayout.prototype.wrap = null;
+mxStackLayout.prototype.isHorizontal = function() {
+  return this.horizontal
+};
+mxStackLayout.prototype.moveCell = function(a, b, c) {
+  var d = this.graph.getModel(),
+    e = d.getParent(a),
+    f = this.isHorizontal();
+  if (null != a && null != e) {
+    var g = 0,
+      h = 0,
+      k = d.getChildCount(e);
+    b = f ? b : c;
+    g = this.graph.getView().getState(e);
+    null != g && (b -= f ? g.x : g.y);
+    for (g = 0; g < k; g++)
+      if (c = d.getChildAt(e, g), c != a && (c = d.getGeometry(c), null != c)) {
+        c = f ? c.x + c.width / 2 : c.y + c.height / 2;
+        if (h < b && c > b) break;
+        h = c
+      }
+    f = e.getIndex(a);
+    f = Math.max(0, g - (g > f ? 1 : 0));
+    d.add(e, a, f)
+  }
+};
+mxStackLayout.prototype.getParentSize = function(a) {
+  var b = this.graph.getModel(),
+    c = b.getGeometry(a);
+  if (null != this.graph.container && (null == c && b.isLayer(a) || a == this.graph.getView().currentRoot)) c = new mxRectangle(0, 0, this.graph.container.offsetWidth - 1, this.graph.container.offsetHeight -
+    1);
+  return c
+};
+mxStackLayout.prototype.execute = function(a) {
+  if (null != a) {
+    var b = this.isHorizontal(),
+      c = this.graph.getModel(),
+      d = this.getParentSize(a),
+      e = 0;
+    null != d && (e = b ? d.height : d.width);
+    var e = e - (2 * this.spacing + 2 * this.border),
+      f = this.x0 + this.border,
+      g = this.y0 + this.border;
+    if (this.graph.isSwimlane(a)) {
+      var h = this.graph.getCellStyle(a),
+        k = mxUtils.getValue(h, mxConstants.STYLE_STARTSIZE, mxConstants.DEFAULT_STARTSIZE),
+        h = mxUtils.getValue(h, mxConstants.STYLE_HORIZONTAL, !0);
+      b == h && (e -= k);
+      b ? g += k : f += k
+    }
+    c.beginUpdate();
+    try {
+      for (var k = 0,
+          h = null, l = c.getChildCount(a), m = 0; m < l; m++) {
+        var n = c.getChildAt(a, m);
+        if (!this.isVertexIgnored(n) && this.isVertexMovable(n)) {
+          var p = c.getGeometry(n);
+          if (null != p) {
+            p = p.clone();
+            if (null != this.wrap && null != h && (b && h.x + h.width + p.width + 2 * this.spacing > this.wrap || !b && h.y + h.height + p.height + 2 * this.spacing > this.wrap)) h = null, b ? g +=
+              k + this.spacing : f += k + this.spacing, k = 0;
+            k = Math.max(k, b ? p.height : p.width);
+            null != h ? b ? p.x = h.x + h.width + this.spacing : p.y = h.y + h.height + this.spacing : this.keepFirstLocation || (b ? p.x = f : p.y = g);
+            b ? p.y = g : p.x = f;
+            this.fill && 0 < e && (b ? p.height = e : p.width = e);
+            c.setGeometry(n, p);
+            h = p
+          }
+        }
+      }
+      this.resizeParent && null != d && null != h && !this.graph.isCellCollapsed(a) ? (d = d.clone(), b ? d.width = h.x + h.width + this.spacing : d.height = h.y + h.height + this.spacing, c.setGeometry(
+        a, d)) : this.resizeLast && (null != d && null != h) && (b ? h.width = d.width - h.x - this.spacing : h.height = d.height - h.y - this.spacing)
+    } finally {
+      c.endUpdate()
+    }
+  }
+};
+
+function mxPartitionLayout(a, b, c, d) {
+  mxGraphLayout.call(this, a);
+  this.horizontal = null != b ? b : !0;
+  this.spacing = c || 0;
+  this.border = d || 0
+}
+mxPartitionLayout.prototype = new mxGraphLayout;
+mxPartitionLayout.prototype.constructor = mxPartitionLayout;
+mxPartitionLayout.prototype.horizontal = null;
+mxPartitionLayout.prototype.spacing = null;
+mxPartitionLayout.prototype.border = null;
+mxPartitionLayout.prototype.resizeVertices = !0;
+mxPartitionLayout.prototype.isHorizontal = function() {
+  return this.horizontal
+};
+mxPartitionLayout.prototype.moveCell = function(a, b, c) {
+  c = this.graph.getModel();
+  var d = c.getParent(a);
+  if (null != a && null != d) {
+    for (var e = 0, f = 0, g = c.getChildCount(d), e = 0; e < g; e++) {
+      var h = c.getChildAt(d, e),
+        h = this.getVertexBounds(h);
+      if (null != h) {
+        h = h.x + h.width / 2;
+        if (f < b && h > b) break;
+        f = h
+      }
+    }
+    b = d.getIndex(a);
+    b = Math.max(0, e - (e > b ? 1 : 0));
+    c.add(d, a, b)
+  }
+};
+mxPartitionLayout.prototype.execute = function(a) {
+  var b = this.isHorizontal(),
+    c = this.graph.getModel(),
+    d = c.getGeometry(a);
+  if (null != this.graph.container && (null == d && c.isLayer(a) || a == this.graph.getView().currentRoot)) d = new mxRectangle(0, 0, this.graph.container.offsetWidth - 1, this.graph.container.offsetHeight -
+    1);
+  if (null != d) {
+    for (var e = [], f = c.getChildCount(a), g = 0; g < f; g++) {
+      var h = c.getChildAt(a, g);
+      !this.isVertexIgnored(h) && this.isVertexMovable(h) && e.push(h)
+    }
+    f = e.length;
+    if (0 < f) {
+      var k = this.border,
+        l = this.border,
+        m = b ?
+        d.height : d.width,
+        m = m - 2 * this.border;
+      a = this.graph.isSwimlane(a) ? this.graph.getStartSize(a) : new mxRectangle;
+      m -= b ? a.height : a.width;
+      k += a.width;
+      l += a.height;
+      a = this.border + (f - 1) * this.spacing;
+      d = b ? (d.width - k - a) / f : (d.height - l - a) / f;
+      if (0 < d) {
+        c.beginUpdate();
+        try {
+          for (g = 0; g < f; g++) {
+            var h = e[g],
+              n = c.getGeometry(h);
+            null != n && (n = n.clone(), n.x = k, n.y = l, b ? (this.resizeVertices && (n.width = d, n.height = m), k += d + this.spacing) : (this.resizeVertices && (n.height = d, n.width = m), l +=
+              d + this.spacing), c.setGeometry(h, n))
+          }
+        } finally {
+          c.endUpdate()
+        }
+      }
+    }
+  }
+};
+
+function mxCompactTreeLayout(a, b, c) {
+  mxGraphLayout.call(this, a);
+  this.horizontal = null != b ? b : !0;
+  this.invert = null != c ? c : !1
+}
+mxCompactTreeLayout.prototype = new mxGraphLayout;
+mxCompactTreeLayout.prototype.constructor = mxCompactTreeLayout;
+mxCompactTreeLayout.prototype.horizontal = null;
+mxCompactTreeLayout.prototype.invert = null;
+mxCompactTreeLayout.prototype.resizeParent = !0;
+mxCompactTreeLayout.prototype.groupPadding = 10;
+mxCompactTreeLayout.prototype.parentsChanged = null;
+mxCompactTreeLayout.prototype.moveTree = !1;
+mxCompactTreeLayout.prototype.levelDistance = 10;
+mxCompactTreeLayout.prototype.nodeDistance = 20;
+mxCompactTreeLayout.prototype.resetEdges = !0;
+mxCompactTreeLayout.prototype.prefHozEdgeSep = 5;
+mxCompactTreeLayout.prototype.prefVertEdgeOff = 4;
+mxCompactTreeLayout.prototype.minEdgeJetty = 8;
+mxCompactTreeLayout.prototype.channelBuffer = 4;
+mxCompactTreeLayout.prototype.edgeRouting = !0;
+mxCompactTreeLayout.prototype.isVertexIgnored = function(a) {
+  return mxGraphLayout.prototype.isVertexIgnored.apply(this, arguments) || 0 == this.graph.getConnections(a).length
+};
+mxCompactTreeLayout.prototype.isHorizontal = function() {
+  return this.horizontal
+};
+mxCompactTreeLayout.prototype.execute = function(a, b) {
+  this.parent = a;
+  var c = this.graph.getModel();
+  if (null == b)
+    if (0 < this.graph.getEdges(a, c.getParent(a), this.invert, !this.invert, !1).length) b = a;
+    else {
+      var d = this.graph.findTreeRoots(a, !0, this.invert);
+      if (0 < d.length)
+        for (var e = 0; e < d.length; e++)
+          if (!this.isVertexIgnored(d[e]) && 0 < this.graph.getEdges(d[e], null, this.invert, !this.invert, !1).length) {
+            b = d[e];
+            break
+          }
+    }
+  if (null != b) {
+    this.parentsChanged = this.resizeParent ? {} : null;
+    c.beginUpdate();
+    try {
+      var f = this.dfs(b, a);
+      if (null !=
+        f) {
+        this.layout(f);
+        var g = this.graph.gridSize,
+          d = g;
+        if (!this.moveTree) {
+          var h = this.getVertexBounds(b);
+          null != h && (g = h.x, d = h.y)
+        }
+        h = null;
+        h = this.isHorizontal() ? this.horizontalLayout(f, g, d) : this.verticalLayout(f, null, g, d);
+        if (null != h) {
+          var k = e = 0;
+          0 > h.x && (e = Math.abs(g - h.x));
+          0 > h.y && (k = Math.abs(d - h.y));
+          (0 != e || 0 != k) && this.moveNode(f, e, k);
+          this.resizeParent && this.adjustParents();
+          this.edgeRouting && this.localEdgeProcessing(f)
+        }
+      }
+    } finally {
+      c.endUpdate()
+    }
+  }
+};
+mxCompactTreeLayout.prototype.moveNode = function(a, b, c) {
+  a.x += b;
+  a.y += c;
+  this.apply(a);
+  for (a = a.child; null != a;) this.moveNode(a, b, c), a = a.next
+};
+mxCompactTreeLayout.prototype.dfs = function(a, b, c) {
+  c = null != c ? c : [];
+  var d = mxCellPath.create(a),
+    e = null;
+  if (null != a && null == c[d] && !this.isVertexIgnored(a)) {
+    c[d] = a;
+    var e = this.createNode(a),
+      d = this.graph.getModel(),
+      f = null;
+    a = this.graph.getEdges(a, b, this.invert, !this.invert, !1, !0);
+    for (var g = this.graph.getView(), h = 0; h < a.length; h++) {
+      var k = a[h];
+      if (!this.isEdgeIgnored(k)) {
+        this.resetEdges && this.setEdgePoints(k, null);
+        this.edgeRouting && (this.setEdgeStyleEnabled(k, !1), this.setEdgePoints(k, null));
+        var l = g.getState(k),
+          k = null != l ? l.getVisibleTerminal(this.invert) : g.getVisibleTerminal(k, this.invert),
+          l = this.dfs(k, b, c);
+        null != l && null != d.getGeometry(k) && (null == f ? e.child = l : f.next = l, f = l)
+      }
+    }
+  }
+  return e
+};
+mxCompactTreeLayout.prototype.layout = function(a) {
+  if (null != a) {
+    for (var b = a.child; null != b;) this.layout(b), b = b.next;
+    null != a.child ? this.attachParent(a, this.join(a)) : this.layoutLeaf(a)
+  }
+};
+mxCompactTreeLayout.prototype.horizontalLayout = function(a, b, c, d) {
+  a.x += b + a.offsetX;
+  a.y += c + a.offsetY;
+  d = this.apply(a, d);
+  b = a.child;
+  if (null != b) {
+    d = this.horizontalLayout(b, a.x, a.y, d);
+    c = a.y + b.offsetY;
+    for (var e = b.next; null != e;) d = this.horizontalLayout(e, a.x + b.offsetX, c, d), c += e.offsetY, e = e.next
+  }
+  return d
+};
+mxCompactTreeLayout.prototype.verticalLayout = function(a, b, c, d, e) {
+  a.x += c + a.offsetY;
+  a.y += d + a.offsetX;
+  e = this.apply(a, e);
+  b = a.child;
+  if (null != b) {
+    e = this.verticalLayout(b, a, a.x, a.y, e);
+    c = a.x + b.offsetY;
+    for (d = b.next; null != d;) e = this.verticalLayout(d, a, c, a.y + b.offsetX, e), c += d.offsetY, d = d.next
+  }
+  return e
+};
+mxCompactTreeLayout.prototype.attachParent = function(a, b) {
+  var c = this.nodeDistance + this.levelDistance,
+    d = (b - a.width) / 2 - this.nodeDistance,
+    e = d + a.width + 2 * this.nodeDistance - b;
+  a.child.offsetX = c + a.height;
+  a.child.offsetY = e;
+  a.contour.upperHead = this.createLine(a.height, 0, this.createLine(c, e, a.contour.upperHead));
+  a.contour.lowerHead = this.createLine(a.height, 0, this.createLine(c, d, a.contour.lowerHead))
+};
+mxCompactTreeLayout.prototype.layoutLeaf = function(a) {
+  var b = 2 * this.nodeDistance;
+  a.contour.upperTail = this.createLine(a.height + b, 0);
+  a.contour.upperHead = a.contour.upperTail;
+  a.contour.lowerTail = this.createLine(0, -a.width - b);
+  a.contour.lowerHead = this.createLine(a.height + b, 0, a.contour.lowerTail)
+};
+mxCompactTreeLayout.prototype.join = function(a) {
+  var b = 2 * this.nodeDistance,
+    c = a.child;
+  a.contour = c.contour;
+  for (var d = c.width + b, e = d, c = c.next; null != c;) {
+    var f = this.merge(a.contour, c.contour);
+    c.offsetY = f + d;
+    c.offsetX = 0;
+    d = c.width + b;
+    e += f + d;
+    c = c.next
+  }
+  return e
+};
+mxCompactTreeLayout.prototype.merge = function(a, b) {
+  for (var c = 0, d = 0, e = 0, f = a.lowerHead, g = b.upperHead; null != g && null != f;) {
+    var h = this.offset(c, d, g.dx, g.dy, f.dx, f.dy),
+      d = d + h,
+      e = e + h;
+    c + g.dx <= f.dx ? (c += g.dx, d += g.dy, g = g.next) : (c -= f.dx, d -= f.dy, f = f.next)
+  }
+  null != g ? (c = this.bridge(a.upperTail, 0, 0, g, c, d), a.upperTail = null != c.next ? b.upperTail : c, a.lowerTail = b.lowerTail) : (c = this.bridge(b.lowerTail, c, d, f, 0, 0), null == c.next &&
+    (a.lowerTail = c));
+  a.lowerHead = b.lowerHead;
+  return e
+};
+mxCompactTreeLayout.prototype.offset = function(a, b, c, d, e, f) {
+  var g = 0;
+  if (e <= a || 0 >= a + c) return 0;
+  g = 0 < e * d - c * f ? 0 > a ? a * d / c - b : 0 < a ? a * f / e - b : -b : e < a + c ? f - (b + (e - a) * d / c) : e > a + c ? (c + a) * f / e - (b + d) : f - (b + d);
+  return 0 < g ? g : 0
+};
+mxCompactTreeLayout.prototype.bridge = function(a, b, c, d, e, f) {
+  b = e + d.dx - b;
+  e = e = 0;
+  0 == d.dx ? e = d.dy : (e = b * d.dy, e /= d.dx);
+  b = this.createLine(b, e, d.next);
+  a.next = this.createLine(0, f + d.dy - e - c, b);
+  return b
+};
+mxCompactTreeLayout.prototype.createNode = function(a) {
+  var b = {};
+  b.cell = a;
+  b.x = 0;
+  b.y = 0;
+  b.width = 0;
+  b.height = 0;
+  a = this.getVertexBounds(a);
+  null != a && (this.isHorizontal() ? (b.width = a.height, b.height = a.width) : (b.width = a.width, b.height = a.height));
+  b.offsetX = 0;
+  b.offsetY = 0;
+  b.contour = {};
+  return b
+};
+mxCompactTreeLayout.prototype.apply = function(a, b) {
+  var c = this.graph.getModel(),
+    d = a.cell,
+    e = c.getGeometry(d);
+  null != d && null != e && (this.isVertexMovable(d) && (e = this.setVertexLocation(d, a.x, a.y), this.resizeParent && (c = c.getParent(d), d = mxCellPath.create(c), null == this.parentsChanged[d] &&
+    (this.parentsChanged[d] = c))), b = null == b ? new mxRectangle(e.x, e.y, e.width, e.height) : new mxRectangle(Math.min(b.x, e.x), Math.min(b.y, e.y), Math.max(b.x + b.width, e.x + e.width),
+    Math.max(b.y + b.height, e.y + e.height)));
+  return b
+};
+mxCompactTreeLayout.prototype.createLine = function(a, b, c) {
+  var d = {};
+  d.dx = a;
+  d.dy = b;
+  d.next = c;
+  return d
+};
+mxCompactTreeLayout.prototype.adjustParents = function() {
+  var a = [],
+    b;
+  for (b in this.parentsChanged) a.push(this.parentsChanged[b]);
+  this.arrangeGroups(mxUtils.sortCells(a, !0), this.groupPadding)
+};
+mxCompactTreeLayout.prototype.localEdgeProcessing = function(a) {
+  this.processNodeOutgoing(a);
+  for (a = a.child; null != a;) this.localEdgeProcessing(a), a = a.next
+};
+mxCompactTreeLayout.prototype.processNodeOutgoing = function(a) {
+  for (var b = a.child, c = a.cell, d = 0, e = []; null != b;) {
+    d++;
+    var f = b.x;
+    this.horizontal && (f = b.y);
+    e.push(new WeightedCellSorter(b, f));
+    b = b.next
+  }
+  e.sort(WeightedCellSorter.prototype.compare);
+  var f = a.width,
+    g = (d + 1) * this.prefHozEdgeSep;
+  f > g + 2 * this.prefHozEdgeSep && (f -= 2 * this.prefHozEdgeSep);
+  a = f / d;
+  b = a / 2;
+  f > g + 2 * this.prefHozEdgeSep && (b += this.prefHozEdgeSep);
+  for (var f = this.minEdgeJetty - this.prefVertEdgeOff, g = 0, h = this.getVertexBounds(c), k = 0; k < e.length; k++) {
+    for (var l =
+        e[k].cell.cell, m = this.getVertexBounds(l), l = this.graph.getEdgesBetween(c, l, !1), n = [], p = 0, q = 0, s = 0; s < l.length; s++) this.horizontal ? (p = h.x + h.width, q = h.y + b, n.push(
+      new mxPoint(p, q)), p = h.x + h.width + f, n.push(new mxPoint(p, q)), q = m.y + m.height / 2) : (p = h.x + b, q = h.y + h.height, n.push(new mxPoint(p, q)), q = h.y + h.height + f, n.push(
+      new mxPoint(p, q)), p = m.x + m.width / 2), n.push(new mxPoint(p, q)), this.setEdgePoints(l[s], n);
+    k < d / 2 ? f += this.prefVertEdgeOff : k > d / 2 && (f -= this.prefVertEdgeOff);
+    b += a;
+    g = Math.max(g, f)
+  }
+};
+
+function WeightedCellSorter(a, b) {
+  this.cell = a;
+  this.weightedValue = b
+}
+WeightedCellSorter.prototype.weightedValue = 0;
+WeightedCellSorter.prototype.nudge = !1;
+WeightedCellSorter.prototype.visited = !1;
+WeightedCellSorter.prototype.rankIndex = null;
+WeightedCellSorter.prototype.cell = null;
+WeightedCellSorter.prototype.compare = function(a, b) {
+  return null != a && null != b ? b.weightedValue > a.weightedValue ? 1 : b.weightedValue < a.weightedValue ? -1 : b.nudge ? 1 : -1 : 0
+};
+
+function mxFastOrganicLayout(a) {
+  mxGraphLayout.call(this, a)
+}
+mxFastOrganicLayout.prototype = new mxGraphLayout;
+mxFastOrganicLayout.prototype.constructor = mxFastOrganicLayout;
+mxFastOrganicLayout.prototype.useInputOrigin = !0;
+mxFastOrganicLayout.prototype.resetEdges = !0;
+mxFastOrganicLayout.prototype.disableEdgeStyle = !0;
+mxFastOrganicLayout.prototype.forceConstant = 50;
+mxFastOrganicLayout.prototype.forceConstantSquared = 0;
+mxFastOrganicLayout.prototype.minDistanceLimit = 2;
+mxFastOrganicLayout.prototype.maxDistanceLimit = 500;
+mxFastOrganicLayout.prototype.minDistanceLimitSquared = 4;
+mxFastOrganicLayout.prototype.initialTemp = 200;
+mxFastOrganicLayout.prototype.temperature = 0;
+mxFastOrganicLayout.prototype.maxIterations = 0;
+mxFastOrganicLayout.prototype.iteration = 0;
+mxFastOrganicLayout.prototype.allowedToRun = !0;
+mxFastOrganicLayout.prototype.isVertexIgnored = function(a) {
+  return mxGraphLayout.prototype.isVertexIgnored.apply(this, arguments) || 0 == this.graph.getConnections(a).length
+};
+mxFastOrganicLayout.prototype.execute = function(a) {
+  var b = this.graph.getModel();
+  this.vertexArray = [];
+  for (var c = this.graph.getChildVertices(a), d = 0; d < c.length; d++) this.isVertexIgnored(c[d]) || this.vertexArray.push(c[d]);
+  var e = this.useInputOrigin ? this.graph.view.getBounds(this.vertexArray) : null,
+    f = this.vertexArray.length;
+  this.indices = [];
+  this.dispX = [];
+  this.dispY = [];
+  this.cellLocation = [];
+  this.isMoveable = [];
+  this.neighbours = [];
+  this.radius = [];
+  this.radiusSquared = [];
+  0.0010 > this.forceConstant && (this.forceConstant =
+    0.0010);
+  this.forceConstantSquared = this.forceConstant * this.forceConstant;
+  for (d = 0; d < this.vertexArray.length; d++) {
+    var g = this.vertexArray[d];
+    this.cellLocation[d] = [];
+    var h = mxCellPath.create(g);
+    this.indices[h] = d;
+    var k = this.getVertexBounds(g),
+      l = k.width,
+      m = k.height,
+      n = k.x,
+      p = k.y;
+    this.cellLocation[d][0] = n + l / 2;
+    this.cellLocation[d][1] = p + m / 2;
+    this.radius[d] = Math.min(l, m);
+    this.radiusSquared[d] = this.radius[d] * this.radius[d]
+  }
+  b.beginUpdate();
+  try {
+    for (d = 0; d < f; d++) {
+      this.dispX[d] = 0;
+      this.dispY[d] = 0;
+      this.isMoveable[d] = this.isVertexMovable(this.vertexArray[d]);
+      var q = this.graph.getConnections(this.vertexArray[d], a),
+        c = this.graph.getOpposites(q, this.vertexArray[d]);
+      this.neighbours[d] = [];
+      for (l = 0; l < c.length; l++) {
+        this.resetEdges && this.graph.resetEdge(q[l]);
+        this.disableEdgeStyle && this.setEdgeStyleEnabled(q[l], !1);
+        var h = mxCellPath.create(c[l]),
+          s = this.indices[h];
+        this.neighbours[d][l] = null != s ? s : d
+      }
+    }
+    this.temperature = this.initialTemp;
+    0 == this.maxIterations && (this.maxIterations = 20 * Math.sqrt(f));
+    for (this.iteration = 0; this.iteration < this.maxIterations; this.iteration++) {
+      if (!this.allowedToRun) return;
+      this.calcRepulsion();
+      this.calcAttraction();
+      this.calcPositions();
+      this.reduceTemperature()
+    }
+    a = c = null;
+    for (d = 0; d < this.vertexArray.length; d++) g = this.vertexArray[d], this.isVertexMovable(g) && (k = this.getVertexBounds(g), null != k && (this.cellLocation[d][0] -= k.width / 2, this.cellLocation[
+        d][1] -= k.height / 2, n = this.graph.snap(this.cellLocation[d][0]), p = this.graph.snap(this.cellLocation[d][1]), this.setVertexLocation(g, n, p), c = null == c ? n : Math.min(c, n), a =
+      null == a ? p : Math.min(a, p)));
+    d = -(c || 0) + 1;
+    g = -(a || 0) + 1;
+    null != e && (d += e.x,
+      g += e.y);
+    this.graph.moveCells(this.vertexArray, d, g)
+  } finally {
+    b.endUpdate()
+  }
+};
+mxFastOrganicLayout.prototype.calcPositions = function() {
+  for (var a = 0; a < this.vertexArray.length; a++)
+    if (this.isMoveable[a]) {
+      var b = Math.sqrt(this.dispX[a] * this.dispX[a] + this.dispY[a] * this.dispY[a]);
+      0.0010 > b && (b = 0.0010);
+      var c = this.dispX[a] / b * Math.min(b, this.temperature),
+        b = this.dispY[a] / b * Math.min(b, this.temperature);
+      this.dispX[a] = 0;
+      this.dispY[a] = 0;
+      this.cellLocation[a][0] += c;
+      this.cellLocation[a][1] += b
+    }
+};
+mxFastOrganicLayout.prototype.calcAttraction = function() {
+  for (var a = 0; a < this.vertexArray.length; a++)
+    for (var b = 0; b < this.neighbours[a].length; b++) {
+      var c = this.neighbours[a][b];
+      if (a != c && this.isMoveable[a] && this.isMoveable[c]) {
+        var d = this.cellLocation[a][0] - this.cellLocation[c][0],
+          e = this.cellLocation[a][1] - this.cellLocation[c][1],
+          f = d * d + e * e - this.radiusSquared[a] - this.radiusSquared[c];
+        f < this.minDistanceLimitSquared && (f = this.minDistanceLimitSquared);
+        var g = Math.sqrt(f),
+          f = f / this.forceConstant,
+          d = d / g * f,
+          e = e / g * f;
+        this.dispX[a] -= d;
+        this.dispY[a] -= e;
+        this.dispX[c] += d;
+        this.dispY[c] += e
+      }
+    }
+};
+mxFastOrganicLayout.prototype.calcRepulsion = function() {
+  for (var a = this.vertexArray.length, b = 0; b < a; b++)
+    for (var c = b; c < a; c++) {
+      if (!this.allowedToRun) return;
+      if (c != b && this.isMoveable[b] && this.isMoveable[c]) {
+        var d = this.cellLocation[b][0] - this.cellLocation[c][0],
+          e = this.cellLocation[b][1] - this.cellLocation[c][1];
+        0 == d && (d = 0.01 + Math.random());
+        0 == e && (e = 0.01 + Math.random());
+        var f = Math.sqrt(d * d + e * e),
+          g = f - this.radius[b] - this.radius[c];
+        g > this.maxDistanceLimit || (g < this.minDistanceLimit && (g = this.minDistanceLimit), g = this.forceConstantSquared /
+          g, d = d / f * g, e = e / f * g, this.dispX[b] += d, this.dispY[b] += e, this.dispX[c] -= d, this.dispY[c] -= e)
+      }
+    }
+};
+mxFastOrganicLayout.prototype.reduceTemperature = function() {
+  this.temperature = this.initialTemp * (1 - this.iteration / this.maxIterations)
+};
+
+function mxCircleLayout(a, b) {
+  mxGraphLayout.call(this, a);
+  this.radius = null != b ? b : 100
+}
+mxCircleLayout.prototype = new mxGraphLayout;
+mxCircleLayout.prototype.constructor = mxCircleLayout;
+mxCircleLayout.prototype.radius = null;
+mxCircleLayout.prototype.moveCircle = !1;
+mxCircleLayout.prototype.x0 = 0;
+mxCircleLayout.prototype.y0 = 0;
+mxCircleLayout.prototype.resetEdges = !0;
+mxCircleLayout.prototype.disableEdgeStyle = !0;
+mxCircleLayout.prototype.execute = function(a) {
+  var b = this.graph.getModel();
+  b.beginUpdate();
+  try {
+    for (var c = 0, d = null, e = null, f = [], g = b.getChildCount(a), h = 0; h < g; h++) {
+      var k = b.getChildAt(a, h);
+      if (this.isVertexIgnored(k)) this.isEdgeIgnored(k) || (this.resetEdges && this.graph.resetEdge(k), this.disableEdgeStyle && this.setEdgeStyleEnabled(k, !1));
+      else {
+        f.push(k);
+        var l = this.getVertexBounds(k),
+          d = null == d ? l.y : Math.min(d, l.y),
+          e = null == e ? l.x : Math.min(e, l.x),
+          c = Math.max(c, Math.max(l.width, l.height))
+      }
+    }
+    var m = this.getRadius(f.length,
+      c);
+    this.moveCircle && (e = this.x0, d = this.y0);
+    this.circle(f, m, e, d)
+  } finally {
+    b.endUpdate()
+  }
+};
+mxCircleLayout.prototype.getRadius = function(a, b) {
+  return Math.max(a * b / Math.PI, this.radius)
+};
+mxCircleLayout.prototype.circle = function(a, b, c, d) {
+  for (var e = a.length, f = 2 * Math.PI / e, g = 0; g < e; g++) this.isVertexMovable(a[g]) && this.setVertexLocation(a[g], c + b + b * Math.sin(g * f), d + b + b * Math.cos(g * f))
+};
+
+function mxParallelEdgeLayout(a) {
+  mxGraphLayout.call(this, a)
+}
+mxParallelEdgeLayout.prototype = new mxGraphLayout;
+mxParallelEdgeLayout.prototype.constructor = mxParallelEdgeLayout;
+mxParallelEdgeLayout.prototype.spacing = 20;
+mxParallelEdgeLayout.prototype.execute = function(a) {
+  a = this.findParallels(a);
+  this.graph.model.beginUpdate();
+  try {
+    for (var b in a) {
+      var c = a[b];
+      1 < c.length && this.layout(c)
+    }
+  } finally {
+    this.graph.model.endUpdate()
+  }
+};
+mxParallelEdgeLayout.prototype.findParallels = function(a) {
+  for (var b = this.graph.getModel(), c = [], d = b.getChildCount(a), e = 0; e < d; e++) {
+    var f = b.getChildAt(a, e);
+    if (!this.isEdgeIgnored(f)) {
+      var g = this.getEdgeId(f);
+      null != g && (null == c[g] && (c[g] = []), c[g].push(f))
+    }
+  }
+  return c
+};
+mxParallelEdgeLayout.prototype.getEdgeId = function(a) {
+  var b = this.graph.getView(),
+    c = b.getState(a),
+    d = null != c ? c.getVisibleTerminal(!0) : b.getVisibleTerminal(a, !0);
+  a = null != c ? c.getVisibleTerminal(!1) : b.getVisibleTerminal(a, !1);
+  return null != d && null != a ? (d = mxCellPath.create(d), a = mxCellPath.create(a), d > a ? a + "-" + d : d + "-" + a) : null
+};
+mxParallelEdgeLayout.prototype.layout = function(a) {
+  var b = a[0],
+    c = this.graph.getModel(),
+    d = c.getGeometry(c.getTerminal(b, !0)),
+    e = c.getGeometry(c.getTerminal(b, !1));
+  if (d == e)
+    for (var b = d.x + d.width + this.spacing, c = d.y + d.height / 2, f = 0; f < a.length; f++) this.route(a[f], b, c), b += this.spacing;
+  else if (null != d && null != e)
+    for (var b = d.x + d.width / 2, c = d.y + d.height / 2, f = e.x + e.width / 2 - b, g = e.y + e.height / 2 - c, e = Math.sqrt(f * f + g * g), d = g * this.spacing / e, e = f * this.spacing / e,
+        b = b + f / 2 + d * (a.length - 1) / 2, c = c + g / 2 - e * (a.length - 1) / 2, f = 0; f < a.length; f++) this.route(a[f],
+      b, c), b -= d, c += e
+};
+mxParallelEdgeLayout.prototype.route = function(a, b, c) {
+  this.graph.isCellMovable(a) && this.setEdgePoints(a, [new mxPoint(b, c)])
+};
+
+function mxCompositeLayout(a, b, c) {
+  mxGraphLayout.call(this, a);
+  this.layouts = b;
+  this.master = c
+}
+mxCompositeLayout.prototype = new mxGraphLayout;
+mxCompositeLayout.prototype.constructor = mxCompositeLayout;
+mxCompositeLayout.prototype.layouts = null;
+mxCompositeLayout.prototype.master = null;
+mxCompositeLayout.prototype.moveCell = function(a, b, c) {
+  null != this.master ? this.master.move.apply(this.master, arguments) : this.layouts[0].move.apply(this.layouts[0], arguments)
+};
+mxCompositeLayout.prototype.execute = function(a) {
+  var b = this.graph.getModel();
+  b.beginUpdate();
+  try {
+    for (var c = 0; c < this.layouts.length; c++) this.layouts[c].execute.apply(this.layouts[c], arguments)
+  } finally {
+    b.endUpdate()
+  }
+};
+
+function mxEdgeLabelLayout(a, b) {
+  mxGraphLayout.call(this, a)
+}
+mxEdgeLabelLayout.prototype = new mxGraphLayout;
+mxEdgeLabelLayout.prototype.constructor = mxEdgeLabelLayout;
+mxEdgeLabelLayout.prototype.execute = function(a) {
+  for (var b = this.graph.view, c = this.graph.getModel(), d = [], e = [], f = c.getChildCount(a), g = 0; g < f; g++) {
+    var h = c.getChildAt(a, g),
+      k = b.getState(h);
+    null != k && (this.isVertexIgnored(h) ? this.isEdgeIgnored(h) || d.push(k) : e.push(k))
+  }
+  this.placeLabels(e, d)
+};
+mxEdgeLabelLayout.prototype.placeLabels = function(a, b) {
+  var c = this.graph.getModel();
+  c.beginUpdate();
+  try {
+    for (var d = 0; d < b.length; d++) {
+      var e = b[d];
+      if (null != e && null != e.text && null != e.text.boundingBox)
+        for (var f = 0; f < a.length; f++) {
+          var g = a[f];
+          null != g && this.avoid(e, g)
+        }
+    }
+  } finally {
+    c.endUpdate()
+  }
+};
+mxEdgeLabelLayout.prototype.avoid = function(a, b) {
+  var c = this.graph.getModel(),
+    d = a.text.boundingBox;
+  if (mxUtils.intersects(d, b)) {
+    var e = -d.y - d.height + b.y,
+      f = -d.y + b.y + b.height,
+      e = Math.abs(e) < Math.abs(f) ? e : f,
+      f = -d.x - d.width + b.x,
+      d = -d.x + b.x + b.width,
+      d = Math.abs(f) < Math.abs(d) ? f : d;
+    Math.abs(d) < Math.abs(e) ? e = 0 : d = 0;
+    f = c.getGeometry(a.cell);
+    null != f && (f = f.clone(), null != f.offset ? (f.offset.x += d, f.offset.y += e) : f.offset = new mxPoint(d, e), c.setGeometry(a.cell, f))
+  }
+};
+
+function mxGraphAbstractHierarchyCell() {
+  this.x = [];
+  this.y = [];
+  this.temp = []
+}
+mxGraphAbstractHierarchyCell.prototype.maxRank = -1;
+mxGraphAbstractHierarchyCell.prototype.minRank = -1;
+mxGraphAbstractHierarchyCell.prototype.x = null;
+mxGraphAbstractHierarchyCell.prototype.y = null;
+mxGraphAbstractHierarchyCell.prototype.width = 0;
+mxGraphAbstractHierarchyCell.prototype.height = 0;
+mxGraphAbstractHierarchyCell.prototype.nextLayerConnectedCells = null;
+mxGraphAbstractHierarchyCell.prototype.previousLayerConnectedCells = null;
+mxGraphAbstractHierarchyCell.prototype.temp = null;
+mxGraphAbstractHierarchyCell.prototype.getNextLayerConnectedCells = function(a) {
+  return null
+};
+mxGraphAbstractHierarchyCell.prototype.getPreviousLayerConnectedCells = function(a) {
+  return null
+};
+mxGraphAbstractHierarchyCell.prototype.isEdge = function() {
+  return !1
+};
+mxGraphAbstractHierarchyCell.prototype.isVertex = function() {
+  return !1
+};
+mxGraphAbstractHierarchyCell.prototype.getGeneralPurposeVariable = function(a) {
+  return null
+};
+mxGraphAbstractHierarchyCell.prototype.setGeneralPurposeVariable = function(a, b) {
+  return null
+};
+mxGraphAbstractHierarchyCell.prototype.setX = function(a, b) {
+  this.isVertex() ? this.x[0] = b : this.isEdge() && (this.x[a - this.minRank - 1] = b)
+};
+mxGraphAbstractHierarchyCell.prototype.getX = function(a) {
+  return this.isVertex() ? this.x[0] : this.isEdge() ? this.x[a - this.minRank - 1] : 0
+};
+mxGraphAbstractHierarchyCell.prototype.setY = function(a, b) {
+  this.isVertex() ? this.y[0] = b : this.isEdge() && (this.y[a - this.minRank - 1] = b)
+};
+
+function mxGraphHierarchyNode(a) {
+  mxGraphAbstractHierarchyCell.apply(this, arguments);
+  this.cell = a
+}
+mxGraphHierarchyNode.prototype = new mxGraphAbstractHierarchyCell;
+mxGraphHierarchyNode.prototype.constructor = mxGraphHierarchyNode;
+mxGraphHierarchyNode.prototype.cell = null;
+mxGraphHierarchyNode.prototype.connectsAsTarget = [];
+mxGraphHierarchyNode.prototype.connectsAsSource = [];
+mxGraphHierarchyNode.prototype.hashCode = !1;
+mxGraphHierarchyNode.prototype.getRankValue = function(a) {
+  return this.maxRank
+};
+mxGraphHierarchyNode.prototype.getNextLayerConnectedCells = function(a) {
+  if (null == this.nextLayerConnectedCells) {
+    this.nextLayerConnectedCells = [];
+    this.nextLayerConnectedCells[0] = [];
+    for (var b = 0; b < this.connectsAsTarget.length; b++) {
+      var c = this.connectsAsTarget[b]; - 1 == c.maxRank || c.maxRank == a + 1 ? this.nextLayerConnectedCells[0].push(c.source) : this.nextLayerConnectedCells[0].push(c)
+    }
+  }
+  return this.nextLayerConnectedCells[0]
+};
+mxGraphHierarchyNode.prototype.getPreviousLayerConnectedCells = function(a) {
+  if (null == this.previousLayerConnectedCells) {
+    this.previousLayerConnectedCells = [];
+    this.previousLayerConnectedCells[0] = [];
+    for (var b = 0; b < this.connectsAsSource.length; b++) {
+      var c = this.connectsAsSource[b]; - 1 == c.minRank || c.minRank == a - 1 ? this.previousLayerConnectedCells[0].push(c.target) : this.previousLayerConnectedCells[0].push(c)
+    }
+  }
+  return this.previousLayerConnectedCells[0]
+};
+mxGraphHierarchyNode.prototype.isVertex = function() {
+  return !0
+};
+mxGraphHierarchyNode.prototype.getGeneralPurposeVariable = function(a) {
+  return this.temp[0]
+};
+mxGraphHierarchyNode.prototype.setGeneralPurposeVariable = function(a, b) {
+  this.temp[0] = b
+};
+mxGraphHierarchyNode.prototype.isAncestor = function(a) {
+  if (null != a && null != this.hashCode && null != a.hashCode && this.hashCode.length < a.hashCode.length) {
+    if (this.hashCode == a.hashCode) return !0;
+    if (null == this.hashCode || null == this.hashCode) return !1;
+    for (var b = 0; b < this.hashCode.length; b++)
+      if (this.hashCode[b] != a.hashCode[b]) return !1;
+    return !0
+  }
+  return !1
+};
+mxGraphHierarchyNode.prototype.getCoreCell = function() {
+  return this.cell
+};
+
+function mxGraphHierarchyEdge(a) {
+  mxGraphAbstractHierarchyCell.apply(this, arguments);
+  this.edges = a
+}
+mxGraphHierarchyEdge.prototype = new mxGraphAbstractHierarchyCell;
+mxGraphHierarchyEdge.prototype.constructor = mxGraphHierarchyEdge;
+mxGraphHierarchyEdge.prototype.edges = null;
+mxGraphHierarchyEdge.prototype.source = null;
+mxGraphHierarchyEdge.prototype.target = null;
+mxGraphHierarchyEdge.prototype.isReversed = !1;
+mxGraphHierarchyEdge.prototype.invert = function(a) {
+  a = this.source;
+  this.source = this.target;
+  this.target = a;
+  this.isReversed = !this.isReversed
+};
+mxGraphHierarchyEdge.prototype.getNextLayerConnectedCells = function(a) {
+  if (null == this.nextLayerConnectedCells) {
+    this.nextLayerConnectedCells = [];
+    for (var b = 0; b < this.temp.length; b++) this.nextLayerConnectedCells[b] = [], b == this.temp.length - 1 ? this.nextLayerConnectedCells[b].push(this.source) : this.nextLayerConnectedCells[b].push(
+      this)
+  }
+  return this.nextLayerConnectedCells[a - this.minRank - 1]
+};
+mxGraphHierarchyEdge.prototype.getPreviousLayerConnectedCells = function(a) {
+  if (null == this.previousLayerConnectedCells) {
+    this.previousLayerConnectedCells = [];
+    for (var b = 0; b < this.temp.length; b++) this.previousLayerConnectedCells[b] = [], 0 == b ? this.previousLayerConnectedCells[b].push(this.target) : this.previousLayerConnectedCells[b].push(
+      this)
+  }
+  return this.previousLayerConnectedCells[a - this.minRank - 1]
+};
+mxGraphHierarchyEdge.prototype.isEdge = function() {
+  return !0
+};
+mxGraphHierarchyEdge.prototype.getGeneralPurposeVariable = function(a) {
+  return this.temp[a - this.minRank - 1]
+};
+mxGraphHierarchyEdge.prototype.setGeneralPurposeVariable = function(a, b) {
+  this.temp[a - this.minRank - 1] = b
+};
+mxGraphHierarchyEdge.prototype.getCoreCell = function() {
+  return null != this.edges && 0 < this.edges.length ? this.edges[0] : null
+};
+
+function mxGraphHierarchyModel(a, b, c, d, e) {
+  a.getGraph();
+  this.tightenToSource = e;
+  this.roots = c;
+  this.parent = d;
+  this.vertexMapper = {};
+  this.edgeMapper = {};
+  this.maxRank = 0;
+  c = [];
+  null == b && (b = this.graph.getChildVertices(d));
+  this.maxRank = this.SOURCESCANSTARTRANK;
+  this.createInternalCells(a, b, c);
+  for (d = 0; d < b.length; d++) {
+    e = c[d].connectsAsSource;
+    for (var f = 0; f < e.length; f++) {
+      var g = e[f],
+        h = g.edges;
+      if (null != h && 0 < h.length) {
+        var h = h[0],
+          k = a.getVisibleTerminal(h, !1),
+          k = mxCellPath.create(k),
+          k = this.vertexMapper[k];
+        c[d] == k && (k = a.getVisibleTerminal(h, !0), k = mxCellPath.create(k), k = this.vertexMapper[k]);
+        null != k && c[d] != k && (g.target = k, 0 == k.connectsAsTarget.length && (k.connectsAsTarget = []), 0 > mxUtils.indexOf(k.connectsAsTarget, g) && k.connectsAsTarget.push(g))
+      }
+    }
+    c[d].temp[0] = 1
+  }
+}
+mxGraphHierarchyModel.prototype.maxRank = null;
+mxGraphHierarchyModel.prototype.vertexMapper = null;
+mxGraphHierarchyModel.prototype.edgeMapper = null;
+mxGraphHierarchyModel.prototype.ranks = null;
+mxGraphHierarchyModel.prototype.roots = null;
+mxGraphHierarchyModel.prototype.parent = null;
+mxGraphHierarchyModel.prototype.dfsCount = 0;
+mxGraphHierarchyModel.prototype.SOURCESCANSTARTRANK = 1E8;
+mxGraphHierarchyModel.prototype.tightenToSource = !1;
+mxGraphHierarchyModel.prototype.createInternalCells = function(a, b, c) {
+  for (var d = a.getGraph(), e = 0; e < b.length; e++) {
+    c[e] = new mxGraphHierarchyNode(b[e]);
+    var f = mxCellPath.create(b[e]);
+    this.vertexMapper[f] = c[e];
+    f = a.getEdges(b[e]);
+    c[e].connectsAsSource = [];
+    for (var g = 0; g < f.length; g++) {
+      var h = a.getVisibleTerminal(f[g], !1);
+      if (h != b[e] && h != b[e] && a.graph.model.isVertex(h) && !a.isVertexIgnored(h)) {
+        var k = a.getEdgesBetween(b[e], h, !1),
+          l = a.getEdgesBetween(b[e], h, !0),
+          h = mxCellPath.create(k[0]);
+        if (null != k && 0 < k.length && null ==
+          this.edgeMapper[h] && 2 * l.length >= k.length) {
+          for (var l = new mxGraphHierarchyEdge(k), m = 0; m < k.length; m++) {
+            var n = k[m],
+              h = mxCellPath.create(n);
+            this.edgeMapper[h] = l;
+            d.resetEdge(n);
+            a.disableEdgeStyle && (a.setEdgeStyleEnabled(n, !1), a.setOrthogonalEdge(n, !0))
+          }
+          l.source = c[e];
+          0 > mxUtils.indexOf(c[e].connectsAsSource, l) && c[e].connectsAsSource.push(l)
+        }
+      }
+    }
+    c[e].temp[0] = 0
+  }
+};
+mxGraphHierarchyModel.prototype.initialRank = function() {
+  var a = [];
+  if (null != this.roots)
+    for (var b = 0; b < this.roots.length; b++) {
+      var c = mxCellPath.create(this.roots[b]),
+        c = this.vertexMapper[c];
+      null != c && a.push(c)
+    }
+  for (var d in this.vertexMapper) c = this.vertexMapper[d], c.temp[0] = -1;
+  for (var e = a.slice(); 0 < a.length;) {
+    var c = a[0],
+      f, g;
+    f = c.connectsAsTarget;
+    g = c.connectsAsSource;
+    for (var h = !0, k = this.SOURCESCANSTARTRANK, b = 0; b < f.length; b++) {
+      var l = f[b];
+      if (5270620 == l.temp[0]) l = l.source, k = Math.min(k, l.temp[0] - 1);
+      else {
+        h = !1;
+        break
+      }
+    }
+    if (h) {
+      c.temp[0] =
+        k;
+      this.maxRank = Math.min(this.maxRank, k);
+      if (null != g)
+        for (b = 0; b < g.length; b++) l = g[b], l.temp[0] = 5270620, l = l.target, -1 == l.temp[0] && (a.push(l), l.temp[0] = -2);
+      a.shift()
+    } else if (b = a.shift(), a.push(c), b == c && 1 == a.length) break
+  }
+  for (d in this.vertexMapper) c = this.vertexMapper[d], c.temp[0] -= this.maxRank;
+  for (b = 0; b < e.length; b++) {
+    c = e[b];
+    a = 0;
+    f = c.connectsAsSource;
+    for (d = 0; d < f.length; d++) l = f[d], l = l.target, c.temp[0] = Math.max(a, l.temp[0] + 1), a = c.temp[0]
+  }
+  this.maxRank = this.SOURCESCANSTARTRANK - this.maxRank
+};
+mxGraphHierarchyModel.prototype.fixRanks = function() {
+  var a = [];
+  this.ranks = [];
+  for (var b = 0; b < this.maxRank + 1; b++) a[b] = [], this.ranks[b] = a[b];
+  var c = null;
+  if (null != this.roots)
+    for (var d = this.roots, c = [], b = 0; b < d.length; b++) {
+      var e = mxCellPath.create(d[b]);
+      c[b] = this.vertexMapper[e]
+    }
+  this.visit(function(b, c, d, e, l) {
+    0 == l && (0 > c.maxRank && 0 > c.minRank) && (a[c.temp[0]].push(c), c.maxRank = c.temp[0], c.minRank = c.temp[0], c.temp[0] = a[c.maxRank].length - 1);
+    if (null != b && null != d && 1 < b.maxRank - c.maxRank) {
+      d.maxRank = b.maxRank;
+      d.minRank =
+        c.maxRank;
+      d.temp = [];
+      d.x = [];
+      d.y = [];
+      for (b = d.minRank + 1; b < d.maxRank; b++) a[b].push(d), d.setGeneralPurposeVariable(b, a[b].length - 1)
+    }
+  }, c, !1, null)
+};
+mxGraphHierarchyModel.prototype.visit = function(a, b, c, d) {
+  if (null != b) {
+    for (var e = 0; e < b.length; e++) {
+      var f = b[e];
+      null != f && (null == d && (d = {}), c ? (f.hashCode = [], f.hashCode[0] = this.dfsCount, f.hashCode[1] = e, this.extendedDfs(null, f, null, a, d, f.hashCode, e, 0)) : this.dfs(null, f, null,
+        a, d, 0))
+    }
+    this.dfsCount++
+  }
+};
+mxGraphHierarchyModel.prototype.dfs = function(a, b, c, d, e, f) {
+  if (null != b) {
+    var g = mxCellPath.create(b.cell);
+    if (null == e[g]) {
+      e[g] = b;
+      d(a, b, c, f, 0);
+      a = b.connectsAsSource.slice();
+      for (c = 0; c < a.length; c++) g = a[c], this.dfs(b, g.target, g, d, e, f + 1)
+    } else d(a, b, c, f, 1)
+  }
+};
+mxGraphHierarchyModel.prototype.extendedDfs = function(a, b, c, d, e, f, g, h) {
+  if (null != b) {
+    if (null != a && (null == b.hashCode || b.hashCode[0] != a.hashCode[0])) f = a.hashCode.length + 1, b.hashCode = a.hashCode.slice(), b.hashCode[f - 1] = g;
+    g = mxCellPath.create(b.cell);
+    if (null == e[g]) {
+      e[g] = b;
+      d(a, b, c, h, 0);
+      a = b.connectsAsSource.slice();
+      for (c = 0; c < a.length; c++) g = a[c], this.extendedDfs(b, g.target, g, d, e, b.hashCode, c, h + 1)
+    } else d(a, b, c, h, 1)
+  }
+};
+
+function mxHierarchicalLayoutStage() {}
+mxHierarchicalLayoutStage.prototype.execute = function(a) {};
+
+function mxMedianHybridCrossingReduction(a) {
+  this.layout = a
+}
+mxMedianHybridCrossingReduction.prototype = new mxHierarchicalLayoutStage;
+mxMedianHybridCrossingReduction.prototype.constructor = mxMedianHybridCrossingReduction;
+mxMedianHybridCrossingReduction.prototype.layout = null;
+mxMedianHybridCrossingReduction.prototype.maxIterations = 24;
+mxMedianHybridCrossingReduction.prototype.nestedBestRanks = null;
+mxMedianHybridCrossingReduction.prototype.currentBestCrossings = 0;
+mxMedianHybridCrossingReduction.prototype.iterationsWithoutImprovement = 0;
+mxMedianHybridCrossingReduction.prototype.maxNoImprovementIterations = 2;
+mxMedianHybridCrossingReduction.prototype.execute = function(a) {
+  a = this.layout.getModel();
+  this.nestedBestRanks = [];
+  for (var b = 0; b < a.ranks.length; b++) this.nestedBestRanks[b] = a.ranks[b].slice();
+  for (var c = 0, d = this.calculateCrossings(a), b = 0; b < this.maxIterations && c < this.maxNoImprovementIterations; b++) {
+    this.weightedMedian(b, a);
+    this.transpose(b, a);
+    var e = this.calculateCrossings(a);
+    if (e < d) {
+      d = e;
+      for (e = c = 0; e < this.nestedBestRanks.length; e++)
+        for (var f = a.ranks[e], g = 0; g < f.length; g++) {
+          var h = f[g];
+          this.nestedBestRanks[e][h.getGeneralPurposeVariable(e)] =
+            h
+        }
+    } else {
+      c++;
+      for (e = 0; e < this.nestedBestRanks.length; e++) {
+        f = a.ranks[e];
+        for (g = 0; g < f.length; g++) h = f[g], h.setGeneralPurposeVariable(e, g)
+      }
+    }
+    if (0 == d) break
+  }
+  c = [];
+  d = [];
+  for (b = 0; b < a.maxRank + 1; b++) d[b] = [], c[b] = d[b];
+  for (b = 0; b < this.nestedBestRanks.length; b++)
+    for (e = 0; e < this.nestedBestRanks[b].length; e++) d[b].push(this.nestedBestRanks[b][e]);
+  a.ranks = c
+};
+mxMedianHybridCrossingReduction.prototype.calculateCrossings = function(a) {
+  for (var b = a.ranks.length, c = 0, d = 1; d < b; d++) c += this.calculateRankCrossing(d, a);
+  return c
+};
+mxMedianHybridCrossingReduction.prototype.calculateRankCrossing = function(a, b) {
+  for (var c = 0, d = b.ranks[a], e = d.length, f = b.ranks[a - 1].length, g = [], h = 0; h < e; h++) g[h] = [];
+  for (h = 0; h < d.length; h++)
+    for (var k = d[h], l = k.getGeneralPurposeVariable(a), m = k.getPreviousLayerConnectedCells(a), k = 0; k < m.length; k++) {
+      var n = m[k].getGeneralPurposeVariable(a - 1);
+      g[l][n] = 201207
+    }
+  for (h = 0; h < e; h++)
+    for (k = 0; k < f; k++)
+      if (201207 == g[h][k]) {
+        for (d = h + 1; d < e; d++)
+          for (l = 0; l < k; l++) 201207 == g[d][l] && c++;
+        for (d = 0; d < h; d++)
+          for (l = k + 1; l < f; l++) 201207 == g[d][l] &&
+            c++
+      }
+  return c / 2
+};
+mxMedianHybridCrossingReduction.prototype.transpose = function(a, b) {
+  for (var c = !0, d = 0; c && 10 > d++;)
+    for (var e = 1 == a % 2 && 1 == d % 2, c = !1, f = 0; f < b.ranks.length; f++) {
+      for (var g = b.ranks[f], h = [], k = 0; k < g.length; k++) {
+        var l = g[k],
+          m = l.getGeneralPurposeVariable(f);
+        0 > m && (m = k);
+        h[m] = l
+      }
+      for (var n = m = l = null, p = null, q = null, s = null, r = null, t = null, v = null, w = null, k = 0; k < g.length - 1; k++) {
+        if (0 == k) {
+          for (var v = h[k], l = v.getNextLayerConnectedCells(f), m = v.getPreviousLayerConnectedCells(f), q = [], s = [], u = 0; u < l.length; u++) q[u] = l[u].getGeneralPurposeVariable(f + 1);
+          for (u = 0; u < m.length; u++) s[u] = m[u].getGeneralPurposeVariable(f - 1)
+        } else l = n, m = p, q = r, s = t, v = w;
+        w = h[k + 1];
+        n = w.getNextLayerConnectedCells(f);
+        p = w.getPreviousLayerConnectedCells(f);
+        r = [];
+        t = [];
+        for (u = 0; u < n.length; u++) r[u] = n[u].getGeneralPurposeVariable(f + 1);
+        for (u = 0; u < p.length; u++) t[u] = p[u].getGeneralPurposeVariable(f - 1);
+        for (var y = 0, z = 0, u = 0; u < q.length; u++)
+          for (var x = 0; x < r.length; x++) q[u] > r[x] && y++, q[u] < r[x] && z++;
+        for (u = 0; u < s.length; u++)
+          for (x = 0; x < t.length; x++) s[u] > t[x] && y++, s[u] < t[x] && z++;
+        if (z < y || z == y && e) n = v.getGeneralPurposeVariable(f),
+          v.setGeneralPurposeVariable(f, w.getGeneralPurposeVariable(f)), w.setGeneralPurposeVariable(f, n), n = l, p = m, r = q, t = s, w = v, e || (c = !0)
+      }
+    }
+};
+mxMedianHybridCrossingReduction.prototype.weightedMedian = function(a, b) {
+  var c = 0 == a % 2;
+  if (c)
+    for (var d = b.maxRank - 1; 0 <= d; d--) this.medianRank(d, c);
+  else
+    for (d = 1; d < b.maxRank; d++) this.medianRank(d, c)
+};
+mxMedianHybridCrossingReduction.prototype.medianRank = function(a, b) {
+  for (var c = this.nestedBestRanks[a].length, d = [], e = [], f = 0; f < c; f++) {
+    var g = this.nestedBestRanks[a][f],
+      h = new MedianCellSorter;
+    h.cell = g;
+    var k;
+    k = b ? g.getNextLayerConnectedCells(a) : g.getPreviousLayerConnectedCells(a);
+    var l;
+    l = b ? a + 1 : a - 1;
+    null != k && 0 != k.length ? (h.medianValue = this.medianValue(k, l), d.push(h)) : e[g.getGeneralPurposeVariable(a)] = !0
+  }
+  d.sort(MedianCellSorter.prototype.compare);
+  for (f = 0; f < c; f++) null == e[f] && (g = d.shift().cell, g.setGeneralPurposeVariable(a,
+    f))
+};
+mxMedianHybridCrossingReduction.prototype.medianValue = function(a, b) {
+  for (var c = [], d = 0, e = 0; e < a.length; e++) {
+    var f = a[e];
+    c[d++] = f.getGeneralPurposeVariable(b)
+  }
+  c.sort(function(a, b) {
+    return a - b
+  });
+  if (1 == d % 2) return c[Math.floor(d / 2)];
+  if (2 == d) return (c[0] + c[1]) / 2;
+  e = d / 2;
+  f = c[e - 1] - c[0];
+  d = c[d - 1] - c[e];
+  return (c[e - 1] * d + c[e] * f) / (f + d)
+};
+
+function MedianCellSorter() {}
+MedianCellSorter.prototype.medianValue = 0;
+MedianCellSorter.prototype.cell = !1;
+MedianCellSorter.prototype.compare = function(a, b) {
+  return null != a && null != b ? b.medianValue > a.medianValue ? -1 : b.medianValue < a.medianValue ? 1 : 0 : 0
+};
+
+function mxMinimumCycleRemover(a) {
+  this.layout = a
+}
+mxMinimumCycleRemover.prototype = new mxHierarchicalLayoutStage;
+mxMinimumCycleRemover.prototype.constructor = mxMinimumCycleRemover;
+mxMinimumCycleRemover.prototype.layout = null;
+mxMinimumCycleRemover.prototype.execute = function(a) {
+  var b = this.layout.getModel(),
+    c = {},
+    d = mxUtils.clone(b.vertexMapper, null, !0),
+    e = null;
+  if (null != b.roots) {
+    var f = b.roots,
+      e = [];
+    for (a = 0; a < f.length; a++) {
+      var g = mxCellPath.create(f[a]);
+      e[a] = b.vertexMapper[g]
+    }
+  }
+  b.visit(function(a, b, e, f, g) {
+    b.isAncestor(a) && (e.invert(), mxUtils.remove(e, a.connectsAsSource), a.connectsAsTarget.push(e), mxUtils.remove(e, b.connectsAsTarget), b.connectsAsSource.push(e));
+    a = mxCellPath.create(b.cell);
+    c[a] = b;
+    delete d[a]
+  }, e, !0, null);
+  e = null;
+  0 <
+    d.lenth && (e = mxUtils.clone(d, null, !0));
+  a = mxUtils.clone(c, null, !0);
+  b.visit(function(a, b, e, f, g) {
+    b.isAncestor(a) && (e.invert(), mxUtils.remove(e, a.connectsAsSource), b.connectsAsSource.push(e), a.connectsAsTarget.push(e), mxUtils.remove(e, b.connectsAsTarget));
+    a = mxCellPath.create(b.cell);
+    c[a] = b;
+    delete d[a]
+  }, d, !0, a);
+  f = this.layout.getGraph();
+  if (null != e && 0 < e.length) {
+    b = b.roots;
+    for (a = 0; a < e.length; a++) g = e[a].cell, 0 == f.getIncomingEdges(g).length && b.push(g)
+  }
+};
+
+function mxCoordinateAssignment(a, b, c, d, e, f) {
+  this.layout = a;
+  this.intraCellSpacing = b;
+  this.interRankCellSpacing = c;
+  this.orientation = d;
+  this.initialX = e;
+  this.parallelEdgeSpacing = f
+}
+var mxHierarchicalEdgeStyle = {
+  ORTHOGONAL: 1,
+  POLYLINE: 2,
+  STRAIGHT: 3,
+  CURVE: 4
+};
+mxCoordinateAssignment.prototype = new mxHierarchicalLayoutStage;
+mxCoordinateAssignment.prototype.constructor = mxCoordinateAssignment;
+mxCoordinateAssignment.prototype.layout = null;
+mxCoordinateAssignment.prototype.intraCellSpacing = 30;
+mxCoordinateAssignment.prototype.interRankCellSpacing = 100;
+mxCoordinateAssignment.prototype.parallelEdgeSpacing = 10;
+mxCoordinateAssignment.prototype.maxIterations = 8;
+mxCoordinateAssignment.prototype.prefHozEdgeSep = 5;
+mxCoordinateAssignment.prototype.prefVertEdgeOff = 2;
+mxCoordinateAssignment.prototype.minEdgeJetty = 12;
+mxCoordinateAssignment.prototype.channelBuffer = 4;
+mxCoordinateAssignment.prototype.jettyPositions = null;
+mxCoordinateAssignment.prototype.orientation = mxConstants.DIRECTION_NORTH;
+mxCoordinateAssignment.prototype.initialX = null;
+mxCoordinateAssignment.prototype.limitX = null;
+mxCoordinateAssignment.prototype.currentXDelta = null;
+mxCoordinateAssignment.prototype.widestRank = null;
+mxCoordinateAssignment.prototype.rankTopY = null;
+mxCoordinateAssignment.prototype.rankBottomY = null;
+mxCoordinateAssignment.prototype.widestRankValue = null;
+mxCoordinateAssignment.prototype.rankWidths = null;
+mxCoordinateAssignment.prototype.rankY = null;
+mxCoordinateAssignment.prototype.fineTuning = !0;
+mxCoordinateAssignment.prototype.edgeStyle = mxHierarchicalEdgeStyle.POLYLINE;
+mxCoordinateAssignment.prototype.nextLayerConnectedCache = null;
+mxCoordinateAssignment.prototype.previousLayerConnectedCache = null;
+mxCoordinateAssignment.prototype.groupPadding = 10;
+mxCoordinateAssignment.prototype.printStatus = function() {
+  var a = this.layout.getModel();
+  mxLog.show();
+  mxLog.writeln("\x3d\x3d\x3d\x3d\x3d\x3dCoord assignment debug\x3d\x3d\x3d\x3d\x3d\x3d\x3d");
+  for (var b = 0; b < a.ranks.length; b++) {
+    mxLog.write("Rank ", b, " : ");
+    for (var c = a.ranks[b], d = 0; d < c.length; d++) mxLog.write(c[d].getGeneralPurposeVariable(b), "  ");
+    mxLog.writeln()
+  }
+  mxLog.writeln("\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d")
+};
+mxCoordinateAssignment.prototype.execute = function(a) {
+  this.jettyPositions = [];
+  a = this.layout.getModel();
+  this.currentXDelta = 0;
+  this.initialCoords(this.layout.getGraph(), a);
+  this.fineTuning && this.minNode(a);
+  var b = 1E8;
+  if (this.fineTuning)
+    for (var c = 0; c < this.maxIterations; c++) {
+      0 != c && (this.medianPos(c, a), this.minNode(a));
+      if (this.currentXDelta < b) {
+        for (var d = 0; d < a.ranks.length; d++)
+          for (var e = a.ranks[d], f = 0; f < e.length; f++) {
+            var g = e[f];
+            g.setX(d, g.getGeneralPurposeVariable(d))
+          }
+        b = this.currentXDelta
+      } else
+        for (d = 0; d < a.ranks.length; d++) {
+          e =
+            a.ranks[d];
+          for (f = 0; f < e.length; f++) g = e[f], g.setGeneralPurposeVariable(d, g.getX(d))
+        }
+      this.minPath(this.layout.getGraph(), a);
+      this.currentXDelta = 0
+    }
+  this.setCellLocations(this.layout.getGraph(), a)
+};
+mxCoordinateAssignment.prototype.minNode = function(a) {
+  for (var b = [], c = [], d = [], e = 0; e <= a.maxRank; e++) {
+    d[e] = a.ranks[e];
+    for (var f = 0; f < d[e].length; f++) {
+      var g = d[e][f],
+        h = new WeightedCellSorter(g, e);
+      h.rankIndex = f;
+      h.visited = !0;
+      b.push(h);
+      g = mxCellPath.create(g.getCoreCell());
+      c[g] = h
+    }
+  }
+  a = 10 * b.length;
+  for (f = 0; 0 < b.length && f <= a;) {
+    var h = b.shift(),
+      e = h.cell,
+      k = h.weightedValue,
+      l = parseInt(h.rankIndex),
+      g = e.getNextLayerConnectedCells(k),
+      m = e.getPreviousLayerConnectedCells(k),
+      n = g.length,
+      p = m.length,
+      q = this.medianXValue(g, k + 1),
+      s =
+      this.medianXValue(m, k - 1),
+      r = n + p,
+      t = e.getGeneralPurposeVariable(k),
+      v = t;
+    0 < r && (v = (q * n + s * p) / r);
+    n = !1;
+    v < t - 1 ? 0 == l ? (e.setGeneralPurposeVariable(k, v), n = !0) : (l = d[k][l - 1], t = l.getGeneralPurposeVariable(k), t = t + l.width / 2 + this.intraCellSpacing + e.width / 2, t < v ? (e.setGeneralPurposeVariable(
+      k, v), n = !0) : t < e.getGeneralPurposeVariable(k) - 1 && (e.setGeneralPurposeVariable(k, t), n = !0)) : v > t + 1 && (l == d[k].length - 1 ? (e.setGeneralPurposeVariable(k, v), n = !0) :
+      (l = d[k][l + 1], t = l.getGeneralPurposeVariable(k), t = t - l.width / 2 - this.intraCellSpacing -
+        e.width / 2, t > v ? (e.setGeneralPurposeVariable(k, v), n = !0) : t > e.getGeneralPurposeVariable(k) + 1 && (e.setGeneralPurposeVariable(k, t), n = !0)));
+    if (n) {
+      for (e = 0; e < g.length; e++) k = g[e], k = mxCellPath.create(k.getCoreCell()), k = c[k], null != k && !1 == k.visited && (k.visited = !0, b.push(k));
+      for (e = 0; e < m.length; e++) k = m[e], k = mxCellPath.create(k.getCoreCell()), k = c[k], null != k && !1 == k.visited && (k.visited = !0, b.push(k))
+    }
+    h.visited = !1;
+    f++
+  }
+};
+mxCoordinateAssignment.prototype.medianPos = function(a, b) {
+  if (0 == a % 2)
+    for (var c = b.maxRank; 0 < c; c--) this.rankMedianPosition(c - 1, b, c);
+  else
+    for (c = 0; c < b.maxRank - 1; c++) this.rankMedianPosition(c + 1, b, c)
+};
+mxCoordinateAssignment.prototype.rankMedianPosition = function(a, b, c) {
+  b = b.ranks[a];
+  for (var d = [], e = [], f = 0; f < b.length; f++) {
+    var g = b[f];
+    d[f] = new WeightedCellSorter;
+    d[f].cell = g;
+    d[f].rankIndex = f;
+    var h = mxCellPath.create(g.getCoreCell());
+    e[h] = d[f];
+    var k = null,
+      k = c < a ? g.getPreviousLayerConnectedCells(a) : g.getNextLayerConnectedCells(a);
+    d[f].weightedValue = this.calculatedWeightedValue(g, k)
+  }
+  d.sort(WeightedCellSorter.prototype.compare);
+  for (f = 0; f < d.length; f++) {
+    h = 0;
+    g = d[f].cell;
+    h = 0;
+    k = c < a ? g.getPreviousLayerConnectedCells(a).slice() :
+      g.getNextLayerConnectedCells(a).slice();
+    null != k && (h = k.length, h = 0 < h ? this.medianXValue(k, c) : g.getGeneralPurposeVariable(a));
+    for (var l = 0, k = -1E8, m = d[f].rankIndex - 1; 0 <= m;) {
+      var n = mxCellPath.create(b[m].getCoreCell()),
+        n = e[n];
+      if (null != n) {
+        var p = n.cell;
+        n.visited ? (k = p.getGeneralPurposeVariable(a) + p.width / 2 + this.intraCellSpacing + l + g.width / 2, m = -1) : (l += p.width + this.intraCellSpacing, m--)
+      }
+    }
+    l = 0;
+    p = 1E8;
+    for (m = d[f].rankIndex + 1; m < d.length;)
+      if (n = mxCellPath.create(b[m].getCoreCell()), n = e[n], null != n) {
+        var q = n.cell;
+        n.visited ?
+          (p = q.getGeneralPurposeVariable(a) - q.width / 2 - this.intraCellSpacing - l - g.width / 2, m = d.length) : (l += q.width + this.intraCellSpacing, m++)
+      }
+    h >= k && h <= p ? g.setGeneralPurposeVariable(a, h) : h < k ? (g.setGeneralPurposeVariable(a, k), this.currentXDelta += k - h) : h > p && (g.setGeneralPurposeVariable(a, p), this.currentXDelta +=
+      h - p);
+    d[f].visited = !0
+  }
+};
+mxCoordinateAssignment.prototype.calculatedWeightedValue = function(a, b) {
+  for (var c = 0, d = 0; d < b.length; d++) {
+    var e = b[d];
+    a.isVertex() && e.isVertex() ? c++ : c = a.isEdge() && e.isEdge() ? c + 8 : c + 2
+  }
+  return c
+};
+mxCoordinateAssignment.prototype.medianXValue = function(a, b) {
+  if (0 == a.length) return 0;
+  for (var c = [], d = 0; d < a.length; d++) c[d] = a[d].getGeneralPurposeVariable(b);
+  c.sort(function(a, b) {
+    return a - b
+  });
+  if (1 == a.length % 2) return c[Math.floor(a.length / 2)];
+  d = a.length / 2;
+  return (c[d - 1] + c[d]) / 2
+};
+mxCoordinateAssignment.prototype.initialCoords = function(a, b) {
+  this.calculateWidestRank(a, b);
+  for (var c = this.widestRank; 0 <= c; c--) c < b.maxRank && this.rankCoordinates(c, a, b);
+  for (c = this.widestRank + 1; c <= b.maxRank; c++) 0 < c && this.rankCoordinates(c, a, b)
+};
+mxCoordinateAssignment.prototype.rankCoordinates = function(a, b, c) {
+  b = c.ranks[a];
+  c = 0;
+  for (var d = this.initialX + (this.widestRankValue - this.rankWidths[a]) / 2, e = !1, f = 0; f < b.length; f++) {
+    var g = b[f];
+    if (g.isVertex()) {
+      var h = this.layout.getVertexBounds(g.cell);
+      null != h ? this.orientation == mxConstants.DIRECTION_NORTH || this.orientation == mxConstants.DIRECTION_SOUTH ? (g.width = h.width, g.height = h.height) : (g.width = h.height, g.height = h.width) :
+        e = !0;
+      c = Math.max(c, g.height)
+    } else g.isEdge() && (h = 1, null != g.edges ? h = g.edges.length : mxLog.warn("edge.edges is null"),
+      g.width = (h - 1) * this.parallelEdgeSpacing);
+    d += g.width / 2;
+    g.setX(a, d);
+    g.setGeneralPurposeVariable(a, d);
+    d += g.width / 2;
+    d += this.intraCellSpacing
+  }!0 == e && mxLog.warn("At least one cell has no bounds")
+};
+mxCoordinateAssignment.prototype.calculateWidestRank = function(a, b) {
+  var c = -this.interRankCellSpacing,
+    d = 0;
+  this.rankWidths = [];
+  this.rankY = [];
+  for (var e = b.maxRank; 0 <= e; e--) {
+    for (var f = 0, g = b.ranks[e], h = this.initialX, k = !1, l = 0; l < g.length; l++) {
+      var m = g[l];
+      if (m.isVertex()) {
+        var n = this.layout.getVertexBounds(m.cell);
+        null != n ? this.orientation == mxConstants.DIRECTION_NORTH || this.orientation == mxConstants.DIRECTION_SOUTH ? (m.width = n.width, m.height = n.height) : (m.width = n.height, m.height = n
+          .width) : k = !0;
+        f = Math.max(f, m.height)
+      } else m.isEdge() &&
+        (n = 1, null != m.edges ? n = m.edges.length : mxLog.warn("edge.edges is null"), m.width = (n - 1) * this.parallelEdgeSpacing);
+      h += m.width / 2;
+      m.setX(e, h);
+      m.setGeneralPurposeVariable(e, h);
+      h += m.width / 2;
+      h += this.intraCellSpacing;
+      h > this.widestRankValue && (this.widestRankValue = h, this.widestRank = e);
+      this.rankWidths[e] = h
+    }!0 == k && mxLog.warn("At least one cell has no bounds");
+    this.rankY[e] = c;
+    h = f / 2 + d / 2 + this.interRankCellSpacing;
+    d = f;
+    c = this.orientation == mxConstants.DIRECTION_NORTH || this.orientation == mxConstants.DIRECTION_WEST ? c + h : c -
+      h;
+    for (l = 0; l < g.length; l++) g[l].setY(e, c)
+  }
+};
+mxCoordinateAssignment.prototype.minPath = function(a, b) {
+  var c = b.edgeMapper,
+    d;
+  for (d in c) {
+    var e = c[d];
+    if (!(1 > e.maxRank - e.minRank - 1)) {
+      for (var f = e.getGeneralPurposeVariable(e.minRank + 1), g = !0, h = 0, k = e.minRank + 2; k < e.maxRank; k++) {
+        var l = e.getGeneralPurposeVariable(k);
+        f != l ? (g = !1, f = l) : h++
+      }
+      if (!g) {
+        for (var g = f = 0, l = [], m = [], n = e.getGeneralPurposeVariable(e.minRank + 1), k = e.minRank + 1; k < e.maxRank - 1; k++) {
+          var p = e.getX(k + 1);
+          n == p ? (l[k - e.minRank - 1] = n, f++) : this.repositionValid(b, e, k + 1, n) ? (l[k - e.minRank - 1] = n, f++) : n = l[k - e.minRank -
+            1] = p
+        }
+        n = e.getX(k);
+        for (k = e.maxRank - 1; k > e.minRank + 1; k--) p = e.getX(k - 1), n == p ? (m[k - e.minRank - 2] = n, g++) : this.repositionValid(b, e, k - 1, n) ? (m[k - e.minRank - 2] = n, g++) : (m[k -
+          e.minRank - 2] = e.getX(k - 1), n = p);
+        if (g > h || f > h)
+          if (g >= f)
+            for (k = e.maxRank - 2; k > e.minRank; k--) e.setX(k, m[k - e.minRank - 1]);
+          else if (f > g)
+          for (k = e.minRank + 2; k < e.maxRank; k++) e.setX(k, l[k - e.minRank - 2])
+      }
+    }
+  }
+};
+mxCoordinateAssignment.prototype.repositionValid = function(a, b, c, d) {
+  a = a.ranks[c];
+  for (var e = -1, f = 0; f < a.length; f++)
+    if (b == a[f]) {
+      e = f;
+      break
+    }
+  if (0 > e) return !1;
+  f = b.getGeneralPurposeVariable(c);
+  if (d < f) {
+    if (0 == e) return !0;
+    a = a[e - 1];
+    c = a.getGeneralPurposeVariable(c);
+    c = c + a.width / 2 + this.intraCellSpacing + b.width / 2;
+    if (!(c <= d)) return !1
+  } else if (d > f) {
+    if (e == a.length - 1) return !0;
+    a = a[e + 1];
+    c = a.getGeneralPurposeVariable(c);
+    c = c - a.width / 2 - this.intraCellSpacing - b.width / 2;
+    if (!(c >= d)) return !1
+  }
+  return !0
+};
+mxCoordinateAssignment.prototype.setCellLocations = function(a, b) {
+  this.rankTopY = [];
+  this.rankBottomY = [];
+  for (var c = 0; c < b.ranks.length; c++) this.rankTopY[c] = Number.MAX_VALUE, this.rankBottomY[c] = 0;
+  c = null;
+  this.layout.resizeParent && (c = {});
+  var d = b.edgeMapper,
+    e = b.vertexMapper,
+    f;
+  for (f in e) {
+    var g = e[f];
+    this.setVertexLocation(g);
+    if (this.layout.resizeParent) {
+      var g = a.model.getParent(g.cell),
+        h = mxCellPath.create(g);
+      null == c[h] && (c[h] = g)
+    }
+  }
+  this.layout.resizeParent && null != c && this.adjustParents(c);
+  (this.edgeStyle == mxHierarchicalEdgeStyle.ORTHOGONAL ||
+    this.edgeStyle == mxHierarchicalEdgeStyle.POLYLINE || this.edgeStyle == mxHierarchicalEdgeStyle.CURVE) && this.localEdgeProcessing(b);
+  for (f in d) this.setEdgePosition(d[f])
+};
+mxCoordinateAssignment.prototype.adjustParents = function(a) {
+  var b = [],
+    c;
+  for (c in a) b.push(a[c]);
+  this.layout.arrangeGroups(mxUtils.sortCells(b, !0), this.groupPadding)
+};
+mxCoordinateAssignment.prototype.localEdgeProcessing = function(a) {
+  for (var b = 0; b < a.ranks.length; b++)
+    for (var c = a.ranks[b], d = 0; d < c.length; d++) {
+      var e = c[d];
+      if (e.isVertex())
+        for (var f = e.getPreviousLayerConnectedCells(b), g = b - 1, h = 0; 2 > h; h++) {
+          if (-1 < g && g < a.ranks.length && null != f && 0 < f.length) {
+            for (var k = [], l = 0; l < f.length; l++) {
+              var m = new WeightedCellSorter(f[l], f[l].getX(g));
+              k.push(m)
+            }
+            k.sort(WeightedCellSorter.prototype.compare);
+            for (var m = e.x[0] - e.width / 2, n = m + e.width, p = f = 0, g = [], l = 0; l < k.length; l++) {
+              var q = k[l].cell,
+                s;
+              if (q.isVertex()) {
+                s = 0 == h ? e.connectsAsSource : e.connectsAsTarget;
+                for (var r = 0; r < s.length; r++)
+                  if (s[r].source == q || s[r].target == q) f += s[r].edges.length, p++, g.push(s[r])
+              } else f += q.edges.length, p++, g.push(q)
+            }
+            e.width > (f + 1) * this.prefHozEdgeSep + 2 * this.prefHozEdgeSep && (m += this.prefHozEdgeSep, n -= this.prefHozEdgeSep);
+            k = (n - m) / f;
+            m += k / 2;
+            n = this.minEdgeJetty - this.prefVertEdgeOff;
+            for (l = p = 0; l < g.length; l++) {
+              q = g[l].edges.length;
+              r = mxCellPath.create(g[l].edges[0]);
+              s = this.jettyPositions[r];
+              null == s && (s = [], this.jettyPositions[r] =
+                s);
+              l < f / 2 ? n += this.prefVertEdgeOff : l > f / 2 && (n -= this.prefVertEdgeOff);
+              for (r = 0; r < q; r++) s[4 * r + 2 * h] = m, m += k, s[4 * r + 2 * h + 1] = n;
+              p = Math.max(p, n)
+            }
+          }
+          f = e.getNextLayerConnectedCells(b);
+          g = b + 1
+        }
+    }
+};
+mxCoordinateAssignment.prototype.setEdgePosition = function(a) {
+  var b = 0;
+  if (101207 != a.temp[0]) {
+    var c = a.maxRank,
+      d = a.minRank;
+    c == d && (c = a.source.maxRank, d = a.target.minRank);
+    for (var e = 0, f = mxCellPath.create(a.edges[0]), f = this.jettyPositions[f], g = a.isReversed ? a.target.cell : a.source.cell, h = this.layout.graph, k = 0; k < a.edges.length; k++) {
+      var l = a.edges[k],
+        m = this.layout.getVisibleTerminal(l, !0),
+        n = h.model.getTerminal(l, !0),
+        p = [],
+        q = a.isReversed;
+      m != g && (q = !q);
+      if (null != f) {
+        var s = q ? 2 : 0,
+          r = q ? this.rankTopY[d] : this.rankBottomY[c],
+          t = f[4 * e + 1 + s];
+        q && (t = -t);
+        r += t;
+        s = f[4 * e + s];
+        n = h.model.getTerminal(l, !0);
+        this.layout.isPort(n) && h.model.getParent(n) == m && (s = h.view.getState(n), s = null != s ? s.x : m.geometry.x + a.source.width * n.geometry.x);
+        this.orientation == mxConstants.DIRECTION_NORTH || this.orientation == mxConstants.DIRECTION_SOUTH ? (p.push(new mxPoint(s, r)), this.edgeStyle == mxHierarchicalEdgeStyle.CURVE && p.push(
+          new mxPoint(s, r + t))) : (p.push(new mxPoint(r, s)), this.edgeStyle == mxHierarchicalEdgeStyle.CURVE && p.push(new mxPoint(r + t, s)))
+      }
+      s = a.x.length -
+        1;
+      r = t = -1;
+      m = a.maxRank - 1;
+      q && (s = 0, t = a.x.length, r = 1, m = a.minRank + 1);
+      for (; a.maxRank != a.minRank && s != t; s += r) {
+        var n = a.x[s] + b,
+          v = (this.rankTopY[m] + this.rankBottomY[m + 1]) / 2,
+          w = (this.rankTopY[m - 1] + this.rankBottomY[m]) / 2;
+        if (q) var u = v,
+          v = w,
+          w = u;
+        this.orientation == mxConstants.DIRECTION_NORTH || this.orientation == mxConstants.DIRECTION_SOUTH ? (p.push(new mxPoint(n, v)), p.push(new mxPoint(n, w))) : (p.push(new mxPoint(v, n)), p.push(
+          new mxPoint(w, n)));
+        this.limitX = Math.max(this.limitX, n);
+        m += r
+      }
+      null != f && (s = q ? 2 : 0, r = q ? this.rankBottomY[c] :
+        this.rankTopY[d], t = f[4 * e + 3 - s], q && (t = -t), r -= t, s = f[4 * e + 2 - s], q = h.model.getTerminal(l, !1), m = this.layout.getVisibleTerminal(l, !1), this.layout.isPort(q) && h.model
+        .getParent(q) == m && (s = h.view.getState(q), s = null != s ? s.x : m.geometry.x + a.target.width * q.geometry.x), this.orientation == mxConstants.DIRECTION_NORTH || this.orientation ==
+        mxConstants.DIRECTION_SOUTH ? (this.edgeStyle == mxHierarchicalEdgeStyle.CURVE && p.push(new mxPoint(s, r - t)), p.push(new mxPoint(s, r))) : (this.edgeStyle == mxHierarchicalEdgeStyle.CURVE &&
+          p.push(new mxPoint(r -
+            t, s)), p.push(new mxPoint(r, s))));
+      a.isReversed && this.processReversedEdge(a, l);
+      this.layout.setEdgePoints(l, p);
+      b = 0 == b ? this.parallelEdgeSpacing : 0 < b ? -b : -b + this.parallelEdgeSpacing;
+      e++
+    }
+    a.temp[0] = 101207
+  }
+};
+mxCoordinateAssignment.prototype.setVertexLocation = function(a) {
+  var b = a.cell,
+    c = a.x[0] - a.width / 2,
+    d = a.y[0] - a.height / 2;
+  this.rankTopY[a.minRank] = Math.min(this.rankTopY[a.minRank], d);
+  this.rankBottomY[a.minRank] = Math.max(this.rankBottomY[a.minRank], d + a.height);
+  this.orientation == mxConstants.DIRECTION_NORTH || this.orientation == mxConstants.DIRECTION_SOUTH ? this.layout.setVertexLocation(b, c, d) : this.layout.setVertexLocation(b, d, c);
+  this.limitX = Math.max(this.limitX, c + a.width)
+};
+mxCoordinateAssignment.prototype.processReversedEdge = function(a, b) {};
+
+function WeightedCellSorter(a, b) {
+  this.cell = a;
+  this.weightedValue = b
+}
+WeightedCellSorter.prototype.weightedValue = 0;
+WeightedCellSorter.prototype.nudge = !1;
+WeightedCellSorter.prototype.visited = !1;
+WeightedCellSorter.prototype.rankIndex = null;
+WeightedCellSorter.prototype.cell = null;
+WeightedCellSorter.prototype.compare = function(a, b) {
+  return null != a && null != b ? b.weightedValue > a.weightedValue ? -1 : b.weightedValue < a.weightedValue ? 1 : b.nudge ? -1 : 1 : 0
+};
+
+function mxHierarchicalLayout(a, b, c) {
+  mxGraphLayout.call(this, a);
+  this.orientation = null != b ? b : mxConstants.DIRECTION_NORTH;
+  this.deterministic = null != c ? c : !0
+}
+mxHierarchicalLayout.prototype = new mxGraphLayout;
+mxHierarchicalLayout.prototype.constructor = mxHierarchicalLayout;
+mxHierarchicalLayout.prototype.roots = null;
+mxHierarchicalLayout.prototype.resizeParent = !1;
+mxHierarchicalLayout.prototype.moveParent = !1;
+mxHierarchicalLayout.prototype.parentBorder = 0;
+mxHierarchicalLayout.prototype.intraCellSpacing = 30;
+mxHierarchicalLayout.prototype.interRankCellSpacing = 100;
+mxHierarchicalLayout.prototype.interHierarchySpacing = 60;
+mxHierarchicalLayout.prototype.parallelEdgeSpacing = 10;
+mxHierarchicalLayout.prototype.orientation = mxConstants.DIRECTION_NORTH;
+mxHierarchicalLayout.prototype.fineTuning = !0;
+mxHierarchicalLayout.prototype.tightenToSource = !0;
+mxHierarchicalLayout.prototype.disableEdgeStyle = !0;
+mxHierarchicalLayout.prototype.traverseAncestors = !0;
+mxHierarchicalLayout.prototype.model = null;
+mxHierarchicalLayout.prototype.edgesCache = null;
+mxHierarchicalLayout.prototype.getModel = function() {
+  return this.model
+};
+mxHierarchicalLayout.prototype.execute = function(a, b) {
+  this.parent = a;
+  var c = this.graph.model;
+  this.edgesCache = {};
+  if (!(null == b && null == a)) {
+    if (null != b && null != a) {
+      for (var d = [], e = 0; e < b.length; e++) c.isAncestor(a, b[e]) && d.push(b[e]);
+      this.roots = d
+    } else this.roots = b;
+    c.beginUpdate();
+    try {
+      this.run(a), this.resizeParent && !this.graph.isCellCollapsed(a) && this.graph.updateGroupBounds([a], this.parentBorder, this.moveParent)
+    } finally {
+      c.endUpdate()
+    }
+  }
+};
+mxHierarchicalLayout.prototype.findRoots = function(a, b) {
+  var c = [];
+  if (null != a && null != b) {
+    var d = this.graph.model,
+      e = null,
+      f = -1E5,
+      g;
+    for (g in b) {
+      var h = b[g];
+      if (d.isVertex(h) && this.graph.isCellVisible(h)) {
+        for (var k = this.getEdges(h), l = 0, m = 0, n = 0; n < k.length; n++) this.getVisibleTerminal(k[n], !0) == h ? l++ : m++;
+        0 == m && 0 < l && c.push(h);
+        k = l - m;
+        k > f && (f = k, e = h)
+      }
+    }
+    0 == c.length && null != e && c.push(e)
+  }
+  return c
+};
+mxHierarchicalLayout.prototype.getEdges = function(a) {
+  var b = mxCellPath.create(a);
+  if (null != this.edgesCache[b]) return this.edgesCache[b];
+  for (var c = this.graph.model, d = [], e = this.graph.isCellCollapsed(a), f = c.getChildCount(a), g = 0; g < f; g++) {
+    var h = c.getChildAt(a, g);
+    if (this.isPort(h)) d = d.concat(c.getEdges(h, !0, !0));
+    else if (e || !this.graph.isCellVisible(h)) d = d.concat(c.getEdges(h, !0, !0))
+  }
+  d = d.concat(c.getEdges(a, !0, !0));
+  c = [];
+  for (g = 0; g < d.length; g++) e = this.getVisibleTerminal(d[g], !0), f = this.getVisibleTerminal(d[g], !1), (e == f || e != f && (f == a && (null == this.parent || this.graph.isValidAncestor(e,
+    this.parent, this.traverseAncestors)) || e == a && (null == this.parent || this.graph.isValidAncestor(f, this.parent, this.traverseAncestors)))) && c.push(d[g]);
+  return this.edgesCache[b] = c
+};
+mxHierarchicalLayout.prototype.getVisibleTerminal = function(a, b) {
+  var c = this.graph.view.getState(a),
+    c = null != c ? c.getVisibleTerminal(b) : this.graph.view.getVisibleTerminal(a, b);
+  this.isPort(c) && (c = this.graph.model.getParent(c));
+  return c
+};
+mxHierarchicalLayout.prototype.run = function(a) {
+  var b = [],
+    c = [];
+  if (null == this.roots && null != a) {
+    var d = {};
+    this.filterDescendants(a, d);
+    this.roots = [];
+    var e = !0,
+      f;
+    for (f in d)
+      if (null != d[f]) {
+        e = !1;
+        break
+      }
+    for (; !e;) {
+      for (var g = this.findRoots(a, d), e = 0; e < g.length; e++) {
+        var h = [];
+        b.push(h);
+        this.traverse(g[e], !0, null, c, h, b, d)
+      }
+      for (e = 0; e < g.length; e++) this.roots.push(g[e]);
+      e = !0;
+      for (f in d)
+        if (null != d[f]) {
+          e = !1;
+          break
+        }
+    }
+  } else
+    for (e = 0; e < roots.length; e++) h = [], b.push(h), traverse(roots.get(e), !0, null, c, h, b, null);
+  for (e = c = 0; e < b.length; e++) {
+    h =
+      b[e];
+    d = [];
+    for (f in h) d.push(h[f]);
+    this.model = new mxGraphHierarchyModel(this, d, this.roots, a, this.tightenToSource);
+    this.cycleStage(a);
+    this.layeringStage();
+    this.crossingStage(a);
+    c = this.placementStage(c, a)
+  }
+};
+mxHierarchicalLayout.prototype.filterDescendants = function(a, b) {
+  var c = this.graph.model;
+  c.isVertex(a) && (a != this.parent && this.graph.isCellVisible(a)) && (b[mxCellPath.create(a)] = a);
+  if (this.traverseAncestors || a == this.parent && this.graph.isCellVisible(a))
+    for (var d = c.getChildCount(a), e = 0; e < d; e++) {
+      var f = c.getChildAt(a, e);
+      this.isPort(f) || this.filterDescendants(f, b)
+    }
+};
+mxHierarchicalLayout.prototype.isPort = function(a) {
+  return a.geometry.relative ? !0 : !1
+};
+mxHierarchicalLayout.prototype.getEdgesBetween = function(a, b, c) {
+  c = null != c ? c : !1;
+  for (var d = this.getEdges(a), e = [], f = 0; f < d.length; f++) {
+    var g = this.getVisibleTerminal(d[f], !0),
+      h = this.getVisibleTerminal(d[f], !1);
+    (g == a && h == b || !c && g == b && h == a) && e.push(d[f])
+  }
+  return e
+};
+mxHierarchicalLayout.prototype.traverse = function(a, b, c, d, e, f, g) {
+  if (null != a && null != d) {
+    var h = mxCellPath.create(a);
+    if (null == d[h] && (null == g || null != g[h])) {
+      null == e[h] && (e[h] = a);
+      null == d[h] && (d[h] = a);
+      delete g[h];
+      var k = this.getEdges(a);
+      for (c = 0; c < k.length; c++)
+        if (h = this.getVisibleTerminal(k[c], !0) == a, !b || h) h = this.getVisibleTerminal(k[c], !h), e = this.traverse(h, b, k[c], d, e, f, g)
+    } else if (null == e[h])
+      for (c = 0; c < f.length; c++)
+        if (a = f[c], null != a[h]) {
+          for (k in e) a[k] = e[k];
+          f.pop();
+          return a
+        }
+  }
+  return e
+};
+mxHierarchicalLayout.prototype.cycleStage = function(a) {
+  (new mxMinimumCycleRemover(this)).execute(a)
+};
+mxHierarchicalLayout.prototype.layeringStage = function() {
+  this.model.initialRank();
+  this.model.fixRanks()
+};
+mxHierarchicalLayout.prototype.crossingStage = function(a) {
+  (new mxMedianHybridCrossingReduction(this)).execute(a)
+};
+mxHierarchicalLayout.prototype.placementStage = function(a, b) {
+  var c = new mxCoordinateAssignment(this, this.intraCellSpacing, this.interRankCellSpacing, this.orientation, a, this.parallelEdgeSpacing);
+  c.fineTuning = this.fineTuning;
+  c.execute(b);
+  return c.limitX + this.interHierarchySpacing
+};
+
+function mxGraphModel(a) {
+  this.currentEdit = this.createUndoableEdit();
+  null != a ? this.setRoot(a) : this.clear()
+}
+mxGraphModel.prototype = new mxEventSource;
+mxGraphModel.prototype.constructor = mxGraphModel;
+mxGraphModel.prototype.root = null;
+mxGraphModel.prototype.cells = null;
+mxGraphModel.prototype.maintainEdgeParent = !0;
+mxGraphModel.prototype.createIds = !0;
+mxGraphModel.prototype.prefix = "";
+mxGraphModel.prototype.postfix = "";
+mxGraphModel.prototype.nextId = 0;
+mxGraphModel.prototype.currentEdit = null;
+mxGraphModel.prototype.updateLevel = 0;
+mxGraphModel.prototype.endingUpdate = !1;
+mxGraphModel.prototype.clear = function() {
+  this.setRoot(this.createRoot())
+};
+mxGraphModel.prototype.isCreateIds = function() {
+  return this.createIds
+};
+mxGraphModel.prototype.setCreateIds = function(a) {
+  this.createIds = a
+};
+mxGraphModel.prototype.createRoot = function() {
+  var a = new mxCell;
+  a.insert(new mxCell);
+  return a
+};
+mxGraphModel.prototype.getCell = function(a) {
+  return null != this.cells ? this.cells[a] : null
+};
+mxGraphModel.prototype.filterCells = function(a, b) {
+  var c = null;
+  if (null != a)
+    for (var c = [], d = 0; d < a.length; d++) b(a[d]) && c.push(a[d]);
+  return c
+};
+mxGraphModel.prototype.getDescendants = function(a) {
+  return this.filterDescendants(null, a)
+};
+mxGraphModel.prototype.filterDescendants = function(a, b) {
+  var c = [];
+  b = b || this.getRoot();
+  (null == a || a(b)) && c.push(b);
+  for (var d = this.getChildCount(b), e = 0; e < d; e++) var f = this.getChildAt(b, e),
+    c = c.concat(this.filterDescendants(a, f));
+  return c
+};
+mxGraphModel.prototype.getRoot = function(a) {
+  var b = a || this.root;
+  if (null != a)
+    for (; null != a;) b = a, a = this.getParent(a);
+  return b
+};
+mxGraphModel.prototype.setRoot = function(a) {
+  this.execute(new mxRootChange(this, a));
+  return a
+};
+mxGraphModel.prototype.rootChanged = function(a) {
+  var b = this.root;
+  this.root = a;
+  this.nextId = 0;
+  this.cells = null;
+  this.cellAdded(a);
+  return b
+};
+mxGraphModel.prototype.isRoot = function(a) {
+  return null != a && this.root == a
+};
+mxGraphModel.prototype.isLayer = function(a) {
+  return this.isRoot(this.getParent(a))
+};
+mxGraphModel.prototype.isAncestor = function(a, b) {
+  for (; null != b && b != a;) b = this.getParent(b);
+  return b == a
+};
+mxGraphModel.prototype.contains = function(a) {
+  return this.isAncestor(this.root, a)
+};
+mxGraphModel.prototype.getParent = function(a) {
+  return null != a ? a.getParent() : null
+};
+mxGraphModel.prototype.add = function(a, b, c) {
+  if (b != a && null != a && null != b) {
+    null == c && (c = this.getChildCount(a));
+    var d = a != this.getParent(b);
+    this.execute(new mxChildChange(this, a, b, c));
+    this.maintainEdgeParent && d && this.updateEdgeParents(b)
+  }
+  return b
+};
+mxGraphModel.prototype.cellAdded = function(a) {
+  if (null != a) {
+    null == a.getId() && this.createIds && a.setId(this.createId(a));
+    if (null != a.getId()) {
+      var b = this.getCell(a.getId());
+      if (b != a) {
+        for (; null != b;) a.setId(this.createId(a)), b = this.getCell(a.getId());
+        null == this.cells && (this.cells = {});
+        this.cells[a.getId()] = a
+      }
+    }
+    mxUtils.isNumeric(a.getId()) && (this.nextId = Math.max(this.nextId, a.getId()));
+    for (var b = this.getChildCount(a), c = 0; c < b; c++) this.cellAdded(this.getChildAt(a, c))
+  }
+};
+mxGraphModel.prototype.createId = function(a) {
+  a = this.nextId;
+  this.nextId++;
+  return this.prefix + a + this.postfix
+};
+mxGraphModel.prototype.updateEdgeParents = function(a, b) {
+  b = b || this.getRoot(a);
+  for (var c = this.getChildCount(a), d = 0; d < c; d++) {
+    var e = this.getChildAt(a, d);
+    this.updateEdgeParents(e, b)
+  }
+  e = this.getEdgeCount(a);
+  c = [];
+  for (d = 0; d < e; d++) c.push(this.getEdgeAt(a, d));
+  for (d = 0; d < c.length; d++) e = c[d], this.isAncestor(b, e) && this.updateEdgeParent(e, b)
+};
+mxGraphModel.prototype.updateEdgeParent = function(a, b) {
+  for (var c = this.getTerminal(a, !0), d = this.getTerminal(a, !1), e = null; null != c && !this.isEdge(c) && null != c.geometry && c.geometry.relative;) c = this.getParent(c);
+  for (; null != d && !this.isEdge(d) && null != d.geometry && d.geometry.relative;) d = this.getParent(d);
+  if (this.isAncestor(b, c) && this.isAncestor(b, d) && (e = c == d ? this.getParent(c) : this.getNearestCommonAncestor(c, d), null != e && (this.getParent(e) != this.root || this.isAncestor(e, a)) &&
+      this.getParent(a) != e)) {
+    c = this.getGeometry(a);
+    if (null != c) {
+      var f = this.getOrigin(this.getParent(a)),
+        g = this.getOrigin(e),
+        d = g.x - f.x,
+        f = g.y - f.y,
+        c = c.clone();
+      c.translate(-d, -f);
+      this.setGeometry(a, c)
+    }
+    this.add(e, a, this.getChildCount(e))
+  }
+};
+mxGraphModel.prototype.getOrigin = function(a) {
+  var b = null;
+  null != a ? (b = this.getOrigin(this.getParent(a)), this.isEdge(a) || (a = this.getGeometry(a), null != a && (b.x += a.x, b.y += a.y))) : b = new mxPoint;
+  return b
+};
+mxGraphModel.prototype.getNearestCommonAncestor = function(a, b) {
+  if (null != a && null != b) {
+    var c = mxCellPath.create(b);
+    if (null != c && 0 < c.length) {
+      var d = a,
+        e = mxCellPath.create(d);
+      if (c.length < e.length) var d = b,
+        f = e,
+        e = c,
+        c = f;
+      for (; null != d;) {
+        f = this.getParent(d);
+        if (0 == c.indexOf(e + mxCellPath.PATH_SEPARATOR) && null != f) return d;
+        e = mxCellPath.getParentPath(e);
+        d = f
+      }
+    }
+  }
+  return null
+};
+mxGraphModel.prototype.remove = function(a) {
+  a == this.root ? this.setRoot(null) : null != this.getParent(a) && this.execute(new mxChildChange(this, null, a));
+  return a
+};
+mxGraphModel.prototype.cellRemoved = function(a) {
+  if (null != a && null != this.cells) {
+    for (var b = this.getChildCount(a) - 1; 0 <= b; b--) this.cellRemoved(this.getChildAt(a, b));
+    null != this.cells && null != a.getId() && delete this.cells[a.getId()]
+  }
+};
+mxGraphModel.prototype.parentForCellChanged = function(a, b, c) {
+  var d = this.getParent(a);
+  null != b ? (b != d || d.getIndex(a) != c) && b.insert(a, c) : null != d && (c = d.getIndex(a), d.remove(c));
+  !this.contains(d) && null != b ? this.cellAdded(a) : null == b && this.cellRemoved(a);
+  return d
+};
+mxGraphModel.prototype.getChildCount = function(a) {
+  return null != a ? a.getChildCount() : 0
+};
+mxGraphModel.prototype.getChildAt = function(a, b) {
+  return null != a ? a.getChildAt(b) : null
+};
+mxGraphModel.prototype.getChildren = function(a) {
+  return null != a ? a.children : null
+};
+mxGraphModel.prototype.getChildVertices = function(a) {
+  return this.getChildCells(a, !0, !1)
+};
+mxGraphModel.prototype.getChildEdges = function(a) {
+  return this.getChildCells(a, !1, !0)
+};
+mxGraphModel.prototype.getChildCells = function(a, b, c) {
+  b = null != b ? b : !1;
+  c = null != c ? c : !1;
+  for (var d = this.getChildCount(a), e = [], f = 0; f < d; f++) {
+    var g = this.getChildAt(a, f);
+    (!c && !b || c && this.isEdge(g) || b && this.isVertex(g)) && e.push(g)
+  }
+  return e
+};
+mxGraphModel.prototype.getTerminal = function(a, b) {
+  return null != a ? a.getTerminal(b) : null
+};
+mxGraphModel.prototype.setTerminal = function(a, b, c) {
+  var d = b != this.getTerminal(a, c);
+  this.execute(new mxTerminalChange(this, a, b, c));
+  this.maintainEdgeParent && d && this.updateEdgeParent(a, this.getRoot());
+  return b
+};
+mxGraphModel.prototype.setTerminals = function(a, b, c) {
+  this.beginUpdate();
+  try {
+    this.setTerminal(a, b, !0), this.setTerminal(a, c, !1)
+  } finally {
+    this.endUpdate()
+  }
+};
+mxGraphModel.prototype.terminalForCellChanged = function(a, b, c) {
+  var d = this.getTerminal(a, c);
+  null != b ? b.insertEdge(a, c) : null != d && d.removeEdge(a, c);
+  return d
+};
+mxGraphModel.prototype.getEdgeCount = function(a) {
+  return null != a ? a.getEdgeCount() : 0
+};
+mxGraphModel.prototype.getEdgeAt = function(a, b) {
+  return null != a ? a.getEdgeAt(b) : null
+};
+mxGraphModel.prototype.getDirectedEdgeCount = function(a, b, c) {
+  for (var d = 0, e = this.getEdgeCount(a), f = 0; f < e; f++) {
+    var g = this.getEdgeAt(a, f);
+    g != c && this.getTerminal(g, b) == a && d++
+  }
+  return d
+};
+mxGraphModel.prototype.getConnections = function(a) {
+  return this.getEdges(a, !0, !0, !1)
+};
+mxGraphModel.prototype.getIncomingEdges = function(a) {
+  return this.getEdges(a, !0, !1, !1)
+};
+mxGraphModel.prototype.getOutgoingEdges = function(a) {
+  return this.getEdges(a, !1, !0, !1)
+};
+mxGraphModel.prototype.getEdges = function(a, b, c, d) {
+  b = null != b ? b : !0;
+  c = null != c ? c : !0;
+  d = null != d ? d : !0;
+  for (var e = this.getEdgeCount(a), f = [], g = 0; g < e; g++) {
+    var h = this.getEdgeAt(a, g),
+      k = this.getTerminal(h, !0),
+      l = this.getTerminal(h, !1);
+    (d && k == l || k != l && (b && l == a || c && k == a)) && f.push(h)
+  }
+  return f
+};
+mxGraphModel.prototype.getEdgesBetween = function(a, b, c) {
+  c = null != c ? c : !1;
+  var d = this.getEdgeCount(a),
+    e = this.getEdgeCount(b),
+    f = a,
+    g = d;
+  e < d && (g = e, f = b);
+  d = [];
+  for (e = 0; e < g; e++) {
+    var h = this.getEdgeAt(f, e),
+      k = this.getTerminal(h, !0),
+      l = this.getTerminal(h, !1),
+      m = l == a && k == b;
+    (k == a && l == b || !c && m) && d.push(h)
+  }
+  return d
+};
+mxGraphModel.prototype.getOpposites = function(a, b, c, d) {
+  c = null != c ? c : !0;
+  d = null != d ? d : !0;
+  var e = [];
+  if (null != a)
+    for (var f = 0; f < a.length; f++) {
+      var g = this.getTerminal(a[f], !0),
+        h = this.getTerminal(a[f], !1);
+      g == b && null != h && h != b && d ? e.push(h) : h == b && (null != g && g != b && c) && e.push(g)
+    }
+  return e
+};
+mxGraphModel.prototype.getTopmostCells = function(a) {
+  for (var b = [], c = 0; c < a.length; c++) {
+    for (var d = a[c], e = !0, f = this.getParent(d); null != f;) {
+      if (0 <= mxUtils.indexOf(a, f)) {
+        e = !1;
+        break
+      }
+      f = this.getParent(f)
+    }
+    e && b.push(d)
+  }
+  return b
+};
+mxGraphModel.prototype.isVertex = function(a) {
+  return null != a ? a.isVertex() : !1
+};
+mxGraphModel.prototype.isEdge = function(a) {
+  return null != a ? a.isEdge() : !1
+};
+mxGraphModel.prototype.isConnectable = function(a) {
+  return null != a ? a.isConnectable() : !1
+};
+mxGraphModel.prototype.getValue = function(a) {
+  return null != a ? a.getValue() : null
+};
+mxGraphModel.prototype.setValue = function(a, b) {
+  this.execute(new mxValueChange(this, a, b));
+  return b
+};
+mxGraphModel.prototype.valueForCellChanged = function(a, b) {
+  return a.valueChanged(b)
+};
+mxGraphModel.prototype.getGeometry = function(a, b) {
+  return null != a ? a.getGeometry() : null
+};
+mxGraphModel.prototype.setGeometry = function(a, b) {
+  b != this.getGeometry(a) && this.execute(new mxGeometryChange(this, a, b));
+  return b
+};
+mxGraphModel.prototype.geometryForCellChanged = function(a, b) {
+  var c = this.getGeometry(a);
+  a.setGeometry(b);
+  return c
+};
+mxGraphModel.prototype.getStyle = function(a) {
+  return null != a ? a.getStyle() : null
+};
+mxGraphModel.prototype.setStyle = function(a, b) {
+  b != this.getStyle(a) && this.execute(new mxStyleChange(this, a, b));
+  return b
+};
+mxGraphModel.prototype.styleForCellChanged = function(a, b) {
+  var c = this.getStyle(a);
+  a.setStyle(b);
+  return c
+};
+mxGraphModel.prototype.isCollapsed = function(a) {
+  return null != a ? a.isCollapsed() : !1
+};
+mxGraphModel.prototype.setCollapsed = function(a, b) {
+  b != this.isCollapsed(a) && this.execute(new mxCollapseChange(this, a, b));
+  return b
+};
+mxGraphModel.prototype.collapsedStateForCellChanged = function(a, b) {
+  var c = this.isCollapsed(a);
+  a.setCollapsed(b);
+  return c
+};
+mxGraphModel.prototype.isVisible = function(a) {
+  return null != a ? a.isVisible() : !1
+};
+mxGraphModel.prototype.setVisible = function(a, b) {
+  b != this.isVisible(a) && this.execute(new mxVisibleChange(this, a, b));
+  return b
+};
+mxGraphModel.prototype.visibleStateForCellChanged = function(a, b) {
+  var c = this.isVisible(a);
+  a.setVisible(b);
+  return c
+};
+mxGraphModel.prototype.execute = function(a) {
+  a.execute();
+  this.beginUpdate();
+  this.currentEdit.add(a);
+  this.fireEvent(new mxEventObject(mxEvent.EXECUTE, "change", a));
+  this.fireEvent(new mxEventObject(mxEvent.EXECUTED, "change", a));
+  this.endUpdate()
+};
+mxGraphModel.prototype.beginUpdate = function() {
+  this.updateLevel++;
+  this.fireEvent(new mxEventObject(mxEvent.BEGIN_UPDATE));
+  1 == this.updateLevel && this.fireEvent(new mxEventObject(mxEvent.START_EDIT))
+};
+mxGraphModel.prototype.endUpdate = function() {
+  this.updateLevel--;
+  0 == this.updateLevel && this.fireEvent(new mxEventObject(mxEvent.END_EDIT));
+  if (!this.endingUpdate) {
+    this.endingUpdate = 0 == this.updateLevel;
+    this.fireEvent(new mxEventObject(mxEvent.END_UPDATE, "edit", this.currentEdit));
+    try {
+      if (this.endingUpdate && !this.currentEdit.isEmpty()) {
+        this.fireEvent(new mxEventObject(mxEvent.BEFORE_UNDO, "edit", this.currentEdit));
+        var a = this.currentEdit;
+        this.currentEdit = this.createUndoableEdit();
+        a.notify();
+        this.fireEvent(new mxEventObject(mxEvent.UNDO,
+          "edit", a))
+      }
+    } finally {
+      this.endingUpdate = !1
+    }
+  }
+};
+mxGraphModel.prototype.createUndoableEdit = function() {
+  var a = new mxUndoableEdit(this, !0);
+  a.notify = function() {
+    a.source.fireEvent(new mxEventObject(mxEvent.CHANGE, "edit", a, "changes", a.changes));
+    a.source.fireEvent(new mxEventObject(mxEvent.NOTIFY, "edit", a, "changes", a.changes))
+  };
+  return a
+};
+mxGraphModel.prototype.mergeChildren = function(a, b, c) {
+  c = null != c ? c : !0;
+  this.beginUpdate();
+  try {
+    var d = {};
+    this.mergeChildrenImpl(a, b, c, d);
+    for (var e in d) {
+      var f = d[e],
+        g = this.getTerminal(f, !0);
+      null != g && (g = d[mxCellPath.create(g)], this.setTerminal(f, g, !0));
+      g = this.getTerminal(f, !1);
+      null != g && (g = d[mxCellPath.create(g)], this.setTerminal(f, g, !1))
+    }
+  } finally {
+    this.endUpdate()
+  }
+};
+mxGraphModel.prototype.mergeChildrenImpl = function(a, b, c, d) {
+  this.beginUpdate();
+  try {
+    for (var e = a.getChildCount(), f = 0; f < e; f++) {
+      var g = a.getChildAt(f);
+      if ("function" == typeof g.getId) {
+        var h = g.getId(),
+          k = null != h && (!this.isEdge(g) || !c) ? this.getCell(h) : null;
+        if (null == k) {
+          var l = g.clone();
+          l.setId(h);
+          l.setTerminal(g.getTerminal(!0), !0);
+          l.setTerminal(g.getTerminal(!1), !1);
+          k = b.insert(l);
+          this.cellAdded(k)
+        }
+        d[mxCellPath.create(g)] = k;
+        this.mergeChildrenImpl(g, k, c, d)
+      }
+    }
+  } finally {
+    this.endUpdate()
+  }
+};
+mxGraphModel.prototype.getParents = function(a) {
+  var b = [];
+  if (null != a)
+    for (var c = {}, d = 0; d < a.length; d++) {
+      var e = this.getParent(a[d]);
+      if (null != e) {
+        var f = mxCellPath.create(e);
+        null == c[f] && (c[f] = e, b.push(e))
+      }
+    }
+  return b
+};
+mxGraphModel.prototype.cloneCell = function(a) {
+  return null != a ? this.cloneCells([a], !0)[0] : null
+};
+mxGraphModel.prototype.cloneCells = function(a, b) {
+  for (var c = {}, d = [], e = 0; e < a.length; e++) null != a[e] ? d.push(this.cloneCellImpl(a[e], c, b)) : d.push(null);
+  for (e = 0; e < d.length; e++) null != d[e] && this.restoreClone(d[e], a[e], c);
+  return d
+};
+mxGraphModel.prototype.cloneCellImpl = function(a, b, c) {
+  var d = this.cellCloned(a);
+  b[mxObjectIdentity.get(a)] = d;
+  if (c) {
+    c = this.getChildCount(a);
+    for (var e = 0; e < c; e++) {
+      var f = this.cloneCellImpl(this.getChildAt(a, e), b, !0);
+      d.insert(f)
+    }
+  }
+  return d
+};
+mxGraphModel.prototype.cellCloned = function(a) {
+  return a.clone()
+};
+mxGraphModel.prototype.restoreClone = function(a, b, c) {
+  var d = this.getTerminal(b, !0);
+  null != d && (d = c[mxObjectIdentity.get(d)], null != d && d.insertEdge(a, !0));
+  d = this.getTerminal(b, !1);
+  null != d && (d = c[mxObjectIdentity.get(d)], null != d && d.insertEdge(a, !1));
+  for (var d = this.getChildCount(a), e = 0; e < d; e++) this.restoreClone(this.getChildAt(a, e), this.getChildAt(b, e), c)
+};
+
+function mxRootChange(a, b) {
+  this.model = a;
+  this.previous = this.root = b
+}
+mxRootChange.prototype.execute = function() {
+  this.root = this.previous;
+  this.previous = this.model.rootChanged(this.previous)
+};
+
+function mxChildChange(a, b, c, d) {
+  this.model = a;
+  this.previous = this.parent = b;
+  this.child = c;
+  this.previousIndex = this.index = d
+}
+mxChildChange.prototype.execute = function() {
+  var a = this.model.getParent(this.child),
+    b = null != a ? a.getIndex(this.child) : 0;
+  null == this.previous && this.connect(this.child, !1);
+  a = this.model.parentForCellChanged(this.child, this.previous, this.previousIndex);
+  null != this.previous && this.connect(this.child, !0);
+  this.parent = this.previous;
+  this.previous = a;
+  this.index = this.previousIndex;
+  this.previousIndex = b
+};
+mxChildChange.prototype.connect = function(a, b) {
+  b = null != b ? b : !0;
+  var c = a.getTerminal(!0),
+    d = a.getTerminal(!1);
+  null != c && (b ? this.model.terminalForCellChanged(a, c, !0) : this.model.terminalForCellChanged(a, null, !0));
+  null != d && (b ? this.model.terminalForCellChanged(a, d, !1) : this.model.terminalForCellChanged(a, null, !1));
+  a.setTerminal(c, !0);
+  a.setTerminal(d, !1);
+  c = this.model.getChildCount(a);
+  for (d = 0; d < c; d++) this.connect(this.model.getChildAt(a, d), b)
+};
+
+function mxTerminalChange(a, b, c, d) {
+  this.model = a;
+  this.cell = b;
+  this.previous = this.terminal = c;
+  this.source = d
+}
+mxTerminalChange.prototype.execute = function() {
+  this.terminal = this.previous;
+  this.previous = this.model.terminalForCellChanged(this.cell, this.previous, this.source)
+};
+
+function mxValueChange(a, b, c) {
+  this.model = a;
+  this.cell = b;
+  this.previous = this.value = c
+}
+mxValueChange.prototype.execute = function() {
+  this.value = this.previous;
+  this.previous = this.model.valueForCellChanged(this.cell, this.previous)
+};
+
+function mxStyleChange(a, b, c) {
+  this.model = a;
+  this.cell = b;
+  this.previous = this.style = c
+}
+mxStyleChange.prototype.execute = function() {
+  this.style = this.previous;
+  this.previous = this.model.styleForCellChanged(this.cell, this.previous)
+};
+
+function mxGeometryChange(a, b, c) {
+  this.model = a;
+  this.cell = b;
+  this.previous = this.geometry = c
+}
+mxGeometryChange.prototype.execute = function() {
+  this.geometry = this.previous;
+  this.previous = this.model.geometryForCellChanged(this.cell, this.previous)
+};
+
+function mxCollapseChange(a, b, c) {
+  this.model = a;
+  this.cell = b;
+  this.previous = this.collapsed = c
+}
+mxCollapseChange.prototype.execute = function() {
+  this.collapsed = this.previous;
+  this.previous = this.model.collapsedStateForCellChanged(this.cell, this.previous)
+};
+
+function mxVisibleChange(a, b, c) {
+  this.model = a;
+  this.cell = b;
+  this.previous = this.visible = c
+}
+mxVisibleChange.prototype.execute = function() {
+  this.visible = this.previous;
+  this.previous = this.model.visibleStateForCellChanged(this.cell, this.previous)
+};
+
+function mxCellAttributeChange(a, b, c) {
+  this.cell = a;
+  this.attribute = b;
+  this.previous = this.value = c
+}
+mxCellAttributeChange.prototype.execute = function() {
+  var a = this.cell.getAttribute(this.attribute);
+  null == this.previous ? this.cell.value.removeAttribute(this.attribute) : this.cell.setAttribute(this.attribute, this.previous);
+  this.previous = a
+};
+
+function mxCell(a, b, c) {
+  this.value = a;
+  this.setGeometry(b);
+  this.setStyle(c);
+  if (null != this.onInit) this.onInit()
+}
+mxCell.prototype.id = null;
+mxCell.prototype.value = null;
+mxCell.prototype.geometry = null;
+mxCell.prototype.style = null;
+mxCell.prototype.vertex = !1;
+mxCell.prototype.edge = !1;
+mxCell.prototype.connectable = !0;
+mxCell.prototype.visible = !0;
+mxCell.prototype.collapsed = !1;
+mxCell.prototype.parent = null;
+mxCell.prototype.source = null;
+mxCell.prototype.target = null;
+mxCell.prototype.children = null;
+mxCell.prototype.edges = null;
+mxCell.prototype.mxTransient = "id value parent source target children edges".split(" ");
+mxCell.prototype.getId = function() {
+  return this.id
+};
+mxCell.prototype.setId = function(a) {
+  this.id = a
+};
+mxCell.prototype.getValue = function() {
+  return this.value
+};
+mxCell.prototype.setValue = function(a) {
+  this.value = a
+};
+mxCell.prototype.valueChanged = function(a) {
+  var b = this.getValue();
+  this.setValue(a);
+  return b
+};
+mxCell.prototype.getGeometry = function() {
+  return this.geometry
+};
+mxCell.prototype.setGeometry = function(a) {
+  this.geometry = a
+};
+mxCell.prototype.getStyle = function() {
+  return this.style
+};
+mxCell.prototype.setStyle = function(a) {
+  this.style = a
+};
+mxCell.prototype.isVertex = function() {
+  return this.vertex
+};
+mxCell.prototype.setVertex = function(a) {
+  this.vertex = a
+};
+mxCell.prototype.isEdge = function() {
+  return this.edge
+};
+mxCell.prototype.setEdge = function(a) {
+  this.edge = a
+};
+mxCell.prototype.isConnectable = function() {
+  return this.connectable
+};
+mxCell.prototype.setConnectable = function(a) {
+  this.connectable = a
+};
+mxCell.prototype.isVisible = function() {
+  return this.visible
+};
+mxCell.prototype.setVisible = function(a) {
+  this.visible = a
+};
+mxCell.prototype.isCollapsed = function() {
+  return this.collapsed
+};
+mxCell.prototype.setCollapsed = function(a) {
+  this.collapsed = a
+};
+mxCell.prototype.getParent = function() {
+  return this.parent
+};
+mxCell.prototype.setParent = function(a) {
+  this.parent = a
+};
+mxCell.prototype.getTerminal = function(a) {
+  return a ? this.source : this.target
+};
+mxCell.prototype.setTerminal = function(a, b) {
+  b ? this.source = a : this.target = a;
+  return a
+};
+mxCell.prototype.getChildCount = function() {
+  return null == this.children ? 0 : this.children.length
+};
+mxCell.prototype.getIndex = function(a) {
+  return mxUtils.indexOf(this.children, a)
+};
+mxCell.prototype.getChildAt = function(a) {
+  return null == this.children ? null : this.children[a]
+};
+mxCell.prototype.insert = function(a, b) {
+  null != a && (null == b && (b = this.getChildCount(), a.getParent() == this && b--), a.removeFromParent(), a.setParent(this), null == this.children ? (this.children = [], this.children.push(a)) :
+    this.children.splice(b, 0, a));
+  return a
+};
+mxCell.prototype.remove = function(a) {
+  var b = null;
+  null != this.children && 0 <= a && (b = this.getChildAt(a), null != b && (this.children.splice(a, 1), b.setParent(null)));
+  return b
+};
+mxCell.prototype.removeFromParent = function() {
+  if (null != this.parent) {
+    var a = this.parent.getIndex(this);
+    this.parent.remove(a)
+  }
+};
+mxCell.prototype.getEdgeCount = function() {
+  return null == this.edges ? 0 : this.edges.length
+};
+mxCell.prototype.getEdgeIndex = function(a) {
+  return mxUtils.indexOf(this.edges, a)
+};
+mxCell.prototype.getEdgeAt = function(a) {
+  return null == this.edges ? null : this.edges[a]
+};
+mxCell.prototype.insertEdge = function(a, b) {
+  if (null != a && (a.removeFromTerminal(b), a.setTerminal(this, b), null == this.edges || a.getTerminal(!b) != this || 0 > mxUtils.indexOf(this.edges, a))) null == this.edges && (this.edges = []),
+    this.edges.push(a);
+  return a
+};
+mxCell.prototype.removeEdge = function(a, b) {
+  if (null != a) {
+    if (a.getTerminal(!b) != this && null != this.edges) {
+      var c = this.getEdgeIndex(a);
+      0 <= c && this.edges.splice(c, 1)
+    }
+    a.setTerminal(null, b)
+  }
+  return a
+};
+mxCell.prototype.removeFromTerminal = function(a) {
+  var b = this.getTerminal(a);
+  null != b && b.removeEdge(this, a)
+};
+mxCell.prototype.getAttribute = function(a, b) {
+  var c = this.getValue();
+  return (null != c && c.nodeType == mxConstants.NODETYPE_ELEMENT ? c.getAttribute(a) : null) || b
+};
+mxCell.prototype.setAttribute = function(a, b) {
+  var c = this.getValue();
+  null != c && c.nodeType == mxConstants.NODETYPE_ELEMENT && c.setAttribute(a, b)
+};
+mxCell.prototype.clone = function() {
+  var a = mxUtils.clone(this, this.mxTransient);
+  a.setValue(this.cloneValue());
+  return a
+};
+mxCell.prototype.cloneValue = function() {
+  var a = this.getValue();
+  null != a && ("function" == typeof a.clone ? a = a.clone() : isNaN(a.nodeType) || (a = a.cloneNode(!0)));
+  return a
+};
+
+function mxGeometry(a, b, c, d) {
+  mxRectangle.call(this, a, b, c, d)
+}
+mxGeometry.prototype = new mxRectangle;
+mxGeometry.prototype.constructor = mxGeometry;
+mxGeometry.prototype.TRANSLATE_CONTROL_POINTS = !0;
+mxGeometry.prototype.alternateBounds = null;
+mxGeometry.prototype.sourcePoint = null;
+mxGeometry.prototype.targetPoint = null;
+mxGeometry.prototype.points = null;
+mxGeometry.prototype.offset = null;
+mxGeometry.prototype.relative = !1;
+mxGeometry.prototype.swap = function() {
+  if (null != this.alternateBounds) {
+    var a = new mxRectangle(this.x, this.y, this.width, this.height);
+    this.x = this.alternateBounds.x;
+    this.y = this.alternateBounds.y;
+    this.width = this.alternateBounds.width;
+    this.height = this.alternateBounds.height;
+    this.alternateBounds = a
+  }
+};
+mxGeometry.prototype.getTerminalPoint = function(a) {
+  return a ? this.sourcePoint : this.targetPoint
+};
+mxGeometry.prototype.setTerminalPoint = function(a, b) {
+  b ? this.sourcePoint = a : this.targetPoint = a;
+  return a
+};
+mxGeometry.prototype.translate = function(a, b) {
+  this.clone();
+  this.relative || (this.x += a, this.y += b);
+  null != this.sourcePoint && (this.sourcePoint.x += a, this.sourcePoint.y += b);
+  null != this.targetPoint && (this.targetPoint.x += a, this.targetPoint.y += b);
+  if (this.TRANSLATE_CONTROL_POINTS && null != this.points)
+    for (var c = this.points.length, d = 0; d < c; d++) {
+      var e = this.points[d];
+      null != e && (e.x += a, e.y += b)
+    }
+};
+var mxCellPath = {
+    PATH_SEPARATOR: ".",
+    create: function(a) {
+      var b = "";
+      if (null != a)
+        for (var c = a.getParent(); null != c;) b = c.getIndex(a) + mxCellPath.PATH_SEPARATOR + b, a = c, c = a.getParent();
+      a = b.length;
+      1 < a && (b = b.substring(0, a - 1));
+      return b
+    },
+    getParentPath: function(a) {
+      if (null != a) {
+        var b = a.lastIndexOf(mxCellPath.PATH_SEPARATOR);
+        if (0 <= b) return a.substring(0, b);
+        if (0 < a.length) return ""
+      }
+      return null
+    },
+    resolve: function(a, b) {
+      var c = a;
+      if (null != b)
+        for (var d = b.split(mxCellPath.PATH_SEPARATOR), e = 0; e < d.length; e++) c = c.getChildAt(parseInt(d[e]));
+      return c
+    },
+    compare: function(a, b) {
+      for (var c = Math.min(a.length, b.length), d = 0, e = 0; e < c; e++)
+        if (a[e] != b[e]) {
+          0 == a[e].length || 0 == b[e].length ? d = a[e] == b[e] ? 0 : a[e] > b[e] ? 1 : -1 : (c = parseInt(a[e]), e = parseInt(b[e]), d = c == e ? 0 : c > e ? 1 : -1);
+          break
+        }
+      0 == d && (c = a.length, e = b.length, c != e && (d = c > e ? 1 : -1));
+      return d
+    }
+  },
+  mxPerimeter = {
+    RectanglePerimeter: function(a, b, c, d) {
+      b = a.getCenterX();
+      var e = a.getCenterY(),
+        f = Math.atan2(c.y - e, c.x - b),
+        g = new mxPoint(0, 0),
+        h = Math.PI,
+        k = Math.PI / 2 - f,
+        l = Math.atan2(a.height, a.width);
+      f < -h + l || f > h - l ? (g.x = a.x, g.y = e - a.width *
+        Math.tan(f) / 2) : f < -l ? (g.y = a.y, g.x = b - a.height * Math.tan(k) / 2) : f < l ? (g.x = a.x + a.width, g.y = e + a.width * Math.tan(f) / 2) : (g.y = a.y + a.height, g.x = b + a.height *
+        Math.tan(k) / 2);
+      d && (c.x >= a.x && c.x <= a.x + a.width ? g.x = c.x : c.y >= a.y && c.y <= a.y + a.height && (g.y = c.y), c.x < a.x ? g.x = a.x : c.x > a.x + a.width && (g.x = a.x + a.width), c.y < a.y ? g.y =
+        a.y : c.y > a.y + a.height && (g.y = a.y + a.height));
+      return g
+    },
+    EllipsePerimeter: function(a, b, c, d) {
+      var e = a.x,
+        f = a.y,
+        g = a.width / 2,
+        h = a.height / 2,
+        k = e + g,
+        l = f + h;
+      b = c.x;
+      c = c.y;
+      var m = parseInt(b - k),
+        n = parseInt(c - l);
+      if (0 == m && 0 != n) return new mxPoint(k,
+        l + h * n / Math.abs(n));
+      if (0 == m && 0 == n) return new mxPoint(b, c);
+      if (d) {
+        if (c >= f && c <= f + a.height) return a = c - l, a = Math.sqrt(g * g * (1 - a * a / (h * h))) || 0, b <= e && (a = -a), new mxPoint(k + a, c);
+        if (b >= e && b <= e + a.width) return a = b - k, a = Math.sqrt(h * h * (1 - a * a / (g * g))) || 0, c <= f && (a = -a), new mxPoint(b, l + a)
+      }
+      e = n / m;
+      l -= e * k;
+      f = g * g * e * e + h * h;
+      a = -2 * k * f;
+      h = Math.sqrt(a * a - 4 * f * (g * g * e * e * k * k + h * h * k * k - g * g * h * h));
+      g = (-a + h) / (2 * f);
+      h = (-a - h) / (2 * f);
+      k = e * g + l;
+      l = e * h + l;
+      e = Math.sqrt(Math.pow(g - b, 2) + Math.pow(k - c, 2));
+      b = Math.sqrt(Math.pow(h - b, 2) + Math.pow(l - c, 2));
+      f = c = 0;
+      e < b ? (c =
+        g, f = k) : (c = h, f = l);
+      return new mxPoint(c, f)
+    },
+    RhombusPerimeter: function(a, b, c, d) {
+      b = a.x;
+      var e = a.y,
+        f = a.width;
+      a = a.height;
+      var g = b + f / 2,
+        h = e + a / 2,
+        k = c.x;
+      c = c.y;
+      if (g == k) return h > c ? new mxPoint(g, e) : new mxPoint(g, e + a);
+      if (h == c) return g > k ? new mxPoint(b, h) : new mxPoint(b + f, h);
+      var l = g,
+        m = h;
+      d && (k >= b && k <= b + f ? l = k : c >= e && c <= e + a && (m = c));
+      return k < g ? c < h ? mxUtils.intersection(k, c, l, m, g, e, b, h) : mxUtils.intersection(k, c, l, m, g, e + a, b, h) : c < h ? mxUtils.intersection(k, c, l, m, g, e, b + f, h) : mxUtils.intersection(
+        k, c, l, m, g, e + a, b + f, h)
+    },
+    TrianglePerimeter: function(a,
+      b, c, d) {
+      b = null != b ? b.style[mxConstants.STYLE_DIRECTION] : null;
+      var e = b == mxConstants.DIRECTION_NORTH || b == mxConstants.DIRECTION_SOUTH,
+        f = a.x,
+        g = a.y,
+        h = a.width;
+      a = a.height;
+      var k = f + h / 2,
+        l = g + a / 2,
+        m = new mxPoint(f, g),
+        n = new mxPoint(f + h, l),
+        p = new mxPoint(f, g + a);
+      b == mxConstants.DIRECTION_NORTH ? (m = p, n = new mxPoint(k, g), p = new mxPoint(f + h, g + a)) : b == mxConstants.DIRECTION_SOUTH ? (n = new mxPoint(k, g + a), p = new mxPoint(f + h, g)) :
+        b == mxConstants.DIRECTION_WEST && (m = new mxPoint(f + h, g), n = new mxPoint(f, l), p = new mxPoint(f + h, g + a));
+      var q = c.x -
+        k,
+        s = c.y - l,
+        q = e ? Math.atan2(q, s) : Math.atan2(s, q),
+        r = e ? Math.atan2(h, a) : Math.atan2(a, h),
+        s = !1,
+        s = b == mxConstants.DIRECTION_NORTH || b == mxConstants.DIRECTION_WEST ? q > -r && q < r : q < -Math.PI + r || q > Math.PI - r,
+        r = null;
+      s ? r = d && (e && c.x >= m.x && c.x <= p.x || !e && c.y >= m.y && c.y <= p.y) ? e ? new mxPoint(c.x, m.y) : new mxPoint(m.x, c.y) : b == mxConstants.DIRECTION_NORTH ? new mxPoint(f + h / 2 +
+        a * Math.tan(q) / 2, g + a) : b == mxConstants.DIRECTION_SOUTH ? new mxPoint(f + h / 2 - a * Math.tan(q) / 2, g) : b == mxConstants.DIRECTION_WEST ? new mxPoint(f + h, g + a / 2 + h *
+        Math.tan(q) / 2) : new mxPoint(f,
+        g + a / 2 - h * Math.tan(q) / 2) : (d && (d = new mxPoint(k, l), c.y >= g && c.y <= g + a ? (d.x = e ? k : b == mxConstants.DIRECTION_WEST ? f + h : f, d.y = c.y) : c.x >= f && c.x <= f +
+        h && (d.x = c.x, d.y = !e ? l : b == mxConstants.DIRECTION_NORTH ? g + a : g), k = d.x, l = d.y), r = e && c.x <= f + h / 2 || !e && c.y <= g + a / 2 ? mxUtils.intersection(c.x, c.y, k,
+        l, m.x, m.y, n.x, n.y) : mxUtils.intersection(c.x, c.y, k, l, n.x, n.y, p.x, p.y));
+      null == r && (r = new mxPoint(k, l));
+      return r
+    }
+  };
+
+function mxPrintPreview(a, b, c, d, e, f, g, h, k) {
+  this.graph = a;
+  this.scale = null != b ? b : 1 / a.pageScale;
+  this.border = null != d ? d : 0;
+  this.pageFormat = null != c ? c : a.pageFormat;
+  this.title = null != h ? h : "Printer-friendly version";
+  this.x0 = null != e ? e : 0;
+  this.y0 = null != f ? f : 0;
+  this.borderColor = g;
+  this.pageSelector = null != k ? k : !0
+}
+mxPrintPreview.prototype.graph = null;
+mxPrintPreview.prototype.pageFormat = null;
+mxPrintPreview.prototype.scale = null;
+mxPrintPreview.prototype.border = 0;
+mxPrintPreview.prototype.x0 = 0;
+mxPrintPreview.prototype.y0 = 0;
+mxPrintPreview.prototype.autoOrigin = !0;
+mxPrintPreview.prototype.printOverlays = !1;
+mxPrintPreview.prototype.borderColor = null;
+mxPrintPreview.prototype.title = null;
+mxPrintPreview.prototype.pageSelector = null;
+mxPrintPreview.prototype.wnd = null;
+mxPrintPreview.prototype.pageCount = 0;
+mxPrintPreview.prototype.getWindow = function() {
+  return this.wnd
+};
+mxPrintPreview.prototype.getDoctype = function() {
+  var a = "";
+  8 == document.documentMode && (a = '\x3cmeta http-equiv\x3d"X-UA-Compatible" content\x3d"IE\x3d8"\x3e');
+  return a
+};
+mxPrintPreview.prototype.open = function(a) {
+  var b = this.graph.cellRenderer.initializeOverlay,
+    c = null;
+  try {
+    this.printOverlays && (this.graph.cellRenderer.initializeOverlay = function(a, b) {
+      b.init(a.view.getDrawPane())
+    });
+    if (null == this.wnd) {
+      this.wnd = window.open();
+      var d = this.wnd.document,
+        e = this.getDoctype();
+      null != e && 0 < e.length && d.writeln(e);
+      d.writeln("\x3chtml\x3e");
+      d.writeln("\x3chead\x3e");
+      this.writeHead(d, a);
+      d.writeln("\x3c/head\x3e");
+      d.writeln('\x3cbody class\x3d"mxPage"\x3e');
+      mxClient.link("stylesheet", mxClient.basePath +
+        "/css/common.css", d);
+      mxClient.IS_VML && (d.namespaces.add("v", "urn:schemas-microsoft-com:vml"), d.namespaces.add("o", "urn:schemas-microsoft-com:office:office"), d.createStyleSheet().cssText =
+        "v\\:*{behavior:url(#default#VML)}o\\:*{behavior:url(#default#VML)}", mxClient.link("stylesheet", mxClient.basePath + "/css/explorer.css", d));
+      var f = this.graph.getGraphBounds().clone(),
+        g = this.graph.getView().getScale(),
+        h = g / this.scale,
+        k = this.graph.getView().getTranslate();
+      this.autoOrigin || (this.x0 = -k.x * this.scale, this.y0 = -k.y * this.scale, f.width += f.x, f.height += f.y, f.x = 0, this.border = f.y = 0);
+      f.width /= h;
+      f.height /= h;
+      var l = this.pageFormat.width - 2 * this.border,
+        m = this.pageFormat.height - 2 * this.border,
+        n = Math.max(1, Math.ceil((f.width + this.x0) / l)),
+        p = Math.max(1, Math.ceil((f.height + this.y0) / m));
+      this.pageCount = n * p;
+      var q = mxUtils.bind(this, function() {
+        if (this.pageSelector && (1 < p || 1 < n)) {
+          var a = this.createPageSelector(p, n);
+          d.body.appendChild(a);
+          if (mxClient.IS_IE) {
+            a.style.position = "absolute";
+            var b = function() {
+              a.style.top = d.body.scrollTop +
+                10 + "px"
+            };
+            mxEvent.addListener(this.wnd, "scroll", function(a) {
+              b()
+            });
+            mxEvent.addListener(this.wnd, "resize", function(a) {
+              b()
+            })
+          }
+        }
+      });
+      a = function(a, b) {
+        null != this.borderColor && (a.style.borderColor = this.borderColor, a.style.borderStyle = "solid", a.style.borderWidth = "1px");
+        a.style.background = "white";
+        b && (a.style.pageBreakAfter = "always");
+        mxClient.IS_IE ? (d.writeln(a.outerHTML), a.parentNode.removeChild(a)) : (a.parentNode.removeChild(a), d.body.appendChild(a));
+        if (b) {
+          var c = d.createElement("hr");
+          c.className = "mxPageBreak";
+          d.body.appendChild(c)
+        }
+      };
+      var s = this.getCoverPages(this.pageFormat.width, this.pageFormat.height);
+      if (null != s)
+        for (var r = 0; r < s.length; r++) a(s[r], !0);
+      for (var t = this.getAppendices(this.pageFormat.width, this.pageFormat.height), r = 0; r < p; r++)
+        for (var v = r * m / this.scale - this.y0 / this.scale + (f.y - k.y * g) / g, s = 0; s < n; s++) {
+          if (null == this.wnd) return null;
+          var w = s * l / this.scale - this.x0 / this.scale + (f.x - k.x * g) / g,
+            u = r * n + s + 1,
+            c = this.renderPage(this.pageFormat.width, this.pageFormat.height, mxUtils.bind(this, function(a) {
+              this.addGraphFragment(-w, -v, this.scale, u, a)
+            }));
+          c.setAttribute("id", "mxPage-" + u);
+          a(c, null != t || r < p - 1 || s < n - 1)
+        }
+      if (null != t)
+        for (r = 0; r < t.length; r++) a(t[r], r < t.length);
+      d.writeln("\x3c/body\x3e");
+      d.writeln("\x3c/html\x3e");
+      d.close();
+      q();
+      mxEvent.release(d.body)
+    }
+    this.wnd.focus()
+  } catch (y) {
+    null != c && null != c.parentNode && c.parentNode.removeChild(c)
+  } finally {
+    this.graph.cellRenderer.initializeOverlay = b
+  }
+  return this.wnd
+};
+mxPrintPreview.prototype.writeHead = function(a, b) {
+  null != this.title && a.writeln("\x3ctitle\x3e" + this.title + "\x3c/title\x3e");
+  a.writeln('\x3cstyle type\x3d"text/css"\x3e');
+  a.writeln("@media print {");
+  a.writeln("  table.mxPageSelector { display: none; }");
+  a.writeln("  hr.mxPageBreak { display: none; }");
+  a.writeln("}");
+  a.writeln("@media screen {");
+  a.writeln("  table.mxPageSelector { position: fixed; right: 10px; top: 10px;font-family: Arial; font-size:10pt; border: solid 1px darkgray;background: white; border-collapse:collapse; }");
+  a.writeln("  table.mxPageSelector td { border: solid 1px gray; padding:4px; }");
+  a.writeln("  body.mxPage { background: gray; }");
+  a.writeln("}");
+  null != b && a.writeln(b);
+  a.writeln("\x3c/style\x3e")
+};
+mxPrintPreview.prototype.createPageSelector = function(a, b) {
+  var c = this.wnd.document,
+    d = c.createElement("table");
+  d.className = "mxPageSelector";
+  d.setAttribute("border", "0");
+  for (var e = c.createElement("tbody"), f = 0; f < a; f++) {
+    for (var g = c.createElement("tr"), h = 0; h < b; h++) {
+      var k = f * b + h + 1,
+        l = c.createElement("td");
+      if (!mxClient.IS_NS || mxClient.IS_SF || mxClient.IS_GC) {
+        var m = c.createElement("a");
+        m.setAttribute("href", "#mxPage-" + k);
+        mxUtils.write(m, k, c);
+        l.appendChild(m)
+      } else mxUtils.write(l, k, c);
+      g.appendChild(l)
+    }
+    e.appendChild(g)
+  }
+  d.appendChild(e);
+  return d
+};
+mxPrintPreview.prototype.renderPage = function(a, b, c) {
+  var d = document.createElement("div");
+  try {
+    d.style.width = a + "px";
+    d.style.height = b + "px";
+    d.style.overflow = "hidden";
+    d.style.pageBreakInside = "avoid";
+    d.style.position = "relative";
+    var e = document.createElement("div");
+    e.style.top = this.border + "px";
+    e.style.left = this.border + "px";
+    e.style.width = a - 2 * this.border + "px";
+    e.style.height = b - 2 * this.border + "px";
+    e.style.overflow = "hidden";
+    this.graph.dialect == mxConstants.DIALECT_VML && (e.style.position = "absolute");
+    d.appendChild(e);
+    document.body.appendChild(d);
+    c(e)
+  } catch (f) {
+    throw d.parentNode.removeChild(d), f;
+  }
+  return d
+};
+mxPrintPreview.prototype.addGraphFragment = function(a, b, c, d, e) {
+  d = this.graph.getView();
+  var f = this.graph.container;
+  this.graph.container = e;
+  var g = d.getCanvas(),
+    h = d.getBackgroundPane(),
+    k = d.getDrawPane(),
+    l = d.getOverlayPane();
+  this.graph.dialect == mxConstants.DIALECT_SVG ? d.createSvg() : this.graph.dialect == mxConstants.DIALECT_VML ? d.createVml() : d.createHtml();
+  var m = d.isEventsEnabled();
+  d.setEventsEnabled(!1);
+  var n = this.graph.isEnabled();
+  this.graph.setEnabled(!1);
+  var p = d.getTranslate();
+  d.translate = new mxPoint(a,
+    b);
+  a = null;
+  try {
+    var q = [this.graph.getModel().getRoot()];
+    a = new mxTemporaryCellStates(d, c, q)
+  } finally {
+    if (mxClient.IS_IE) d.overlayPane.innerHTML = "";
+    else
+      for (c = e.firstChild; null != c;) q = c.nextSibling, b = c.nodeName.toLowerCase(), "svg" == b ? (c.setAttribute("width", parseInt(e.style.width)), c.setAttribute("height", parseInt(e.style.height))) :
+        "default" != c.style.cursor && "table" != b && c.parentNode.removeChild(c), c = q;
+    d.overlayPane.parentNode.removeChild(d.overlayPane);
+    this.graph.setEnabled(n);
+    this.graph.container = f;
+    d.canvas =
+      g;
+    d.backgroundPane = h;
+    d.drawPane = k;
+    d.overlayPane = l;
+    d.translate = p;
+    a.destroy();
+    d.setEventsEnabled(m)
+  }
+};
+mxPrintPreview.prototype.getCoverPages = function() {
+  return null
+};
+mxPrintPreview.prototype.getAppendices = function() {
+  return null
+};
+mxPrintPreview.prototype.print = function() {
+  var a = this.open();
+  null != a && a.print()
+};
+mxPrintPreview.prototype.close = function() {
+  null != this.wnd && (this.wnd.close(), this.wnd = null)
+};
+
+function mxStylesheet() {
+  this.styles = {};
+  this.putDefaultVertexStyle(this.createDefaultVertexStyle());
+  this.putDefaultEdgeStyle(this.createDefaultEdgeStyle())
+}
+mxStylesheet.prototype.createDefaultVertexStyle = function() {
+  var a = {};
+  a[mxConstants.STYLE_SHAPE] = mxConstants.SHAPE_RECTANGLE;
+  a[mxConstants.STYLE_PERIMETER] = mxPerimeter.RectanglePerimeter;
+  a[mxConstants.STYLE_VERTICAL_ALIGN] = mxConstants.ALIGN_MIDDLE;
+  a[mxConstants.STYLE_ALIGN] = mxConstants.ALIGN_CENTER;
+  a[mxConstants.STYLE_FILLCOLOR] = "#C3D9FF";
+  a[mxConstants.STYLE_STROKECOLOR] = "#6482B9";
+  a[mxConstants.STYLE_FONTCOLOR] = "#774400";
+  return a
+};
+mxStylesheet.prototype.createDefaultEdgeStyle = function() {
+  var a = {};
+  a[mxConstants.STYLE_SHAPE] = mxConstants.SHAPE_CONNECTOR;
+  a[mxConstants.STYLE_ENDARROW] = mxConstants.ARROW_CLASSIC;
+  a[mxConstants.STYLE_VERTICAL_ALIGN] = mxConstants.ALIGN_MIDDLE;
+  a[mxConstants.STYLE_ALIGN] = mxConstants.ALIGN_CENTER;
+  a[mxConstants.STYLE_STROKECOLOR] = "#6482B9";
+  a[mxConstants.STYLE_FONTCOLOR] = "#446299";
+  return a
+};
+mxStylesheet.prototype.putDefaultVertexStyle = function(a) {
+  this.putCellStyle("defaultVertex", a)
+};
+mxStylesheet.prototype.putDefaultEdgeStyle = function(a) {
+  this.putCellStyle("defaultEdge", a)
+};
+mxStylesheet.prototype.getDefaultVertexStyle = function() {
+  return this.styles.defaultVertex
+};
+mxStylesheet.prototype.getDefaultEdgeStyle = function() {
+  return this.styles.defaultEdge
+};
+mxStylesheet.prototype.putCellStyle = function(a, b) {
+  this.styles[a] = b
+};
+mxStylesheet.prototype.getCellStyle = function(a, b) {
+  var c = b;
+  if (null != a && 0 < a.length)
+    for (var d = a.split(";"), c = null != c && ";" != a.charAt(0) ? mxUtils.clone(c) : {}, e = 0; e < d.length; e++) {
+      var f = d[e],
+        g = f.indexOf("\x3d");
+      if (0 <= g) {
+        var h = f.substring(0, g),
+          f = f.substring(g + 1);
+        f == mxConstants.NONE ? delete c[h] : mxUtils.isNumeric(f) ? c[h] = parseFloat(f) : c[h] = f
+      } else if (f = this.styles[f], null != f)
+        for (h in f) c[h] = f[h]
+    }
+  return c
+};
+
+function mxCellState(a, b, c) {
+  this.view = a;
+  this.cell = b;
+  this.style = c;
+  this.origin = new mxPoint;
+  this.absoluteOffset = new mxPoint
+}
+mxCellState.prototype = new mxRectangle;
+mxCellState.prototype.constructor = mxCellState;
+mxCellState.prototype.view = null;
+mxCellState.prototype.cell = null;
+mxCellState.prototype.style = null;
+mxCellState.prototype.invalid = !0;
+mxCellState.prototype.invalidOrder = !1;
+mxCellState.prototype.orderChanged = !1;
+mxCellState.prototype.origin = null;
+mxCellState.prototype.absolutePoints = null;
+mxCellState.prototype.absoluteOffset = null;
+mxCellState.prototype.visibleSourceState = null;
+mxCellState.prototype.visibleTargetState = null;
+mxCellState.prototype.terminalDistance = 0;
+mxCellState.prototype.length = 0;
+mxCellState.prototype.segments = null;
+mxCellState.prototype.shape = null;
+mxCellState.prototype.text = null;
+mxCellState.prototype.getPerimeterBounds = function(a, b) {
+  a = a || 0;
+  b = null != b ? b : new mxRectangle(this.x, this.y, this.width, this.height);
+  if (null != this.shape && null != this.shape.stencil) {
+    var c = this.shape.stencil.computeAspect(this.style, b.x, b.y, b.width, b.height);
+    b.x = c.x;
+    b.y = c.y;
+    b.width = this.shape.stencil.w0 * c.width;
+    b.height = this.shape.stencil.h0 * c.height
+  }
+  0 != a && b.grow(a);
+  return b
+};
+mxCellState.prototype.setAbsoluteTerminalPoint = function(a, b) {
+  b ? (null == this.absolutePoints && (this.absolutePoints = []), 0 == this.absolutePoints.length ? this.absolutePoints.push(a) : this.absolutePoints[0] = a) : null == this.absolutePoints ? (this.absolutePoints = [],
+    this.absolutePoints.push(null), this.absolutePoints.push(a)) : 1 == this.absolutePoints.length ? this.absolutePoints.push(a) : this.absolutePoints[this.absolutePoints.length - 1] = a
+};
+mxCellState.prototype.setCursor = function(a) {
+  null != this.shape && this.shape.setCursor(a);
+  null != this.text && this.text.setCursor(a)
+};
+mxCellState.prototype.getVisibleTerminal = function(a) {
+  a = this.getVisibleTerminalState(a);
+  return null != a ? a.cell : null
+};
+mxCellState.prototype.getVisibleTerminalState = function(a) {
+  return a ? this.visibleSourceState : this.visibleTargetState
+};
+mxCellState.prototype.setVisibleTerminalState = function(a, b) {
+  b ? this.visibleSourceState = a : this.visibleTargetState = a
+};
+mxCellState.prototype.destroy = function() {
+  this.view.graph.cellRenderer.destroy(this)
+};
+mxCellState.prototype.clone = function() {
+  var a = new mxCellState(this.view, this.cell, this.style);
+  if (null != this.absolutePoints) {
+    a.absolutePoints = [];
+    for (var b = 0; b < this.absolutePoints.length; b++) a.absolutePoints[b] = this.absolutePoints[b].clone()
+  }
+  null != this.origin && (a.origin = this.origin.clone());
+  null != this.absoluteOffset && (a.absoluteOffset = this.absoluteOffset.clone());
+  null != this.boundingBox && (a.boundingBox = this.boundingBox.clone());
+  a.terminalDistance = this.terminalDistance;
+  a.segments = this.segments;
+  a.length =
+    this.length;
+  a.x = this.x;
+  a.y = this.y;
+  a.width = this.width;
+  a.height = this.height;
+  return a
+};
+
+function mxGraphSelectionModel(a) {
+  this.graph = a;
+  this.cells = []
+}
+mxGraphSelectionModel.prototype = new mxEventSource;
+mxGraphSelectionModel.prototype.constructor = mxGraphSelectionModel;
+mxGraphSelectionModel.prototype.doneResource = "none" != mxClient.language ? "done" : "";
+mxGraphSelectionModel.prototype.updatingSelectionResource = "none" != mxClient.language ? "updatingSelection" : "";
+mxGraphSelectionModel.prototype.graph = null;
+mxGraphSelectionModel.prototype.singleSelection = !1;
+mxGraphSelectionModel.prototype.isSingleSelection = function() {
+  return this.singleSelection
+};
+mxGraphSelectionModel.prototype.setSingleSelection = function(a) {
+  this.singleSelection = a
+};
+mxGraphSelectionModel.prototype.isSelected = function(a) {
+  return null != a ? 0 <= mxUtils.indexOf(this.cells, a) : !1
+};
+mxGraphSelectionModel.prototype.isEmpty = function() {
+  return 0 == this.cells.length
+};
+mxGraphSelectionModel.prototype.clear = function() {
+  this.changeSelection(null, this.cells)
+};
+mxGraphSelectionModel.prototype.setCell = function(a) {
+  null != a && this.setCells([a])
+};
+mxGraphSelectionModel.prototype.setCells = function(a) {
+  if (null != a) {
+    this.singleSelection && (a = [this.getFirstSelectableCell(a)]);
+    for (var b = [], c = 0; c < a.length; c++) this.graph.isCellSelectable(a[c]) && b.push(a[c]);
+    this.changeSelection(b, this.cells)
+  }
+};
+mxGraphSelectionModel.prototype.getFirstSelectableCell = function(a) {
+  if (null != a)
+    for (var b = 0; b < a.length; b++)
+      if (this.graph.isCellSelectable(a[b])) return a[b];
+  return null
+};
+mxGraphSelectionModel.prototype.addCell = function(a) {
+  null != a && this.addCells([a])
+};
+mxGraphSelectionModel.prototype.addCells = function(a) {
+  if (null != a) {
+    var b = null;
+    this.singleSelection && (b = this.cells, a = [this.getFirstSelectableCell(a)]);
+    for (var c = [], d = 0; d < a.length; d++) !this.isSelected(a[d]) && this.graph.isCellSelectable(a[d]) && c.push(a[d]);
+    this.changeSelection(c, b)
+  }
+};
+mxGraphSelectionModel.prototype.removeCell = function(a) {
+  null != a && this.removeCells([a])
+};
+mxGraphSelectionModel.prototype.removeCells = function(a) {
+  if (null != a) {
+    for (var b = [], c = 0; c < a.length; c++) this.isSelected(a[c]) && b.push(a[c]);
+    this.changeSelection(null, b)
+  }
+};
+mxGraphSelectionModel.prototype.changeSelection = function(a, b) {
+  if (null != a && 0 < a.length && null != a[0] || null != b && 0 < b.length && null != b[0]) {
+    var c = new mxSelectionChange(this, a, b);
+    c.execute();
+    var d = new mxUndoableEdit(this, !1);
+    d.add(c);
+    this.fireEvent(new mxEventObject(mxEvent.UNDO, "edit", d))
+  }
+};
+mxGraphSelectionModel.prototype.cellAdded = function(a) {
+  null != a && !this.isSelected(a) && this.cells.push(a)
+};
+mxGraphSelectionModel.prototype.cellRemoved = function(a) {
+  null != a && (a = mxUtils.indexOf(this.cells, a), 0 <= a && this.cells.splice(a, 1))
+};
+
+function mxSelectionChange(a, b, c) {
+  this.selectionModel = a;
+  this.added = null != b ? b.slice() : null;
+  this.removed = null != c ? c.slice() : null
+}
+mxSelectionChange.prototype.execute = function() {
+  var a = mxLog.enter("mxSelectionChange.execute");
+  window.status = mxResources.get(this.selectionModel.updatingSelectionResource) || this.selectionModel.updatingSelectionResource;
+  if (null != this.removed)
+    for (var b = 0; b < this.removed.length; b++) this.selectionModel.cellRemoved(this.removed[b]);
+  if (null != this.added)
+    for (b = 0; b < this.added.length; b++) this.selectionModel.cellAdded(this.added[b]);
+  b = this.added;
+  this.added = this.removed;
+  this.removed = b;
+  window.status = mxResources.get(this.selectionModel.doneResource) ||
+    this.selectionModel.doneResource;
+  mxLog.leave("mxSelectionChange.execute", a);
+  this.selectionModel.fireEvent(new mxEventObject(mxEvent.CHANGE, "added", this.added, "removed", this.removed))
+};
+
+function mxCellEditor(a) {
+  this.graph = a
+}
+mxCellEditor.prototype.graph = null;
+mxCellEditor.prototype.textarea = null;
+mxCellEditor.prototype.editingCell = null;
+mxCellEditor.prototype.trigger = null;
+mxCellEditor.prototype.modified = !1;
+mxCellEditor.prototype.autoSize = !0;
+mxCellEditor.prototype.emptyLabelText = "";
+mxCellEditor.prototype.textNode = "";
+mxCellEditor.prototype.init = function() {
+  this.textarea = document.createElement("textarea");
+  this.textarea.className = "mxCellEditor";
+  this.textarea.style.position = "absolute";
+  this.textarea.style.overflow = "visible";
+  this.textarea.setAttribute("cols", "20");
+  this.textarea.setAttribute("rows", "4");
+  mxClient.IS_NS && (this.textarea.style.resize = "none");
+  mxEvent.addListener(this.textarea, "blur", mxUtils.bind(this, function(a) {
+    this.focusLost()
+  }));
+  mxEvent.addListener(this.textarea, "keydown", mxUtils.bind(this, function(a) {
+    mxEvent.isConsumed(a) ||
+      (113 == a.keyCode || this.graph.isEnterStopsCellEditing() && 13 == a.keyCode && !mxEvent.isControlDown(a) && !mxEvent.isShiftDown(a) ? (this.graph.stopEditing(!1), mxEvent.consume(a)) :
+        27 == a.keyCode ? (this.graph.stopEditing(!0), mxEvent.consume(a)) : (this.clearOnChange && (this.clearOnChange = !1, this.textarea.value = ""), this.setModified(!0)))
+  }));
+  mxEvent.addListener(this.textarea, "keypress", mxUtils.bind(this, function(a) {
+    this.autoSize && !mxEvent.isConsumed(a) && setTimeout(mxUtils.bind(this, function() {
+      this.resize()
+    }), 0)
+  }))
+};
+mxCellEditor.prototype.resize = function() {
+  if (null != this.textDiv) {
+    var a = this.graph.getView().getState(this.editingCell),
+      b = this.graph.isLabelClipped(a.cell),
+      c = this.graph.isWrapping(a.cell);
+    if (this.graph.getModel().isEdge(a.cell)) this.bounds.x = a.absoluteOffset.x, this.bounds.y = a.absoluteOffset.y, this.bounds.width = 0, this.bounds.height = 0;
+    else if (null != this.bounds) {
+      this.bounds.x = a.x;
+      this.bounds.y = a.y;
+      this.bounds.width = a.width;
+      this.bounds.height = a.height;
+      var d = mxUtils.getValue(a.style, mxConstants.STYLE_LABEL_POSITION,
+        mxConstants.ALIGN_CENTER);
+      d == mxConstants.ALIGN_LEFT ? this.bounds.x -= a.width : d == mxConstants.ALIGN_RIGHT && (this.bounds.x += a.width);
+      d = mxUtils.getValue(a.style, mxConstants.STYLE_VERTICAL_LABEL_POSITION, mxConstants.ALIGN_MIDDLE);
+      d == mxConstants.ALIGN_TOP ? this.bounds.y -= a.height : d == mxConstants.ALIGN_BOTTOM && (this.bounds.y += a.height)
+    }
+    d = this.textarea.value;
+    if ("\n" == d.charAt(d.length - 1) || "" == d) d += "\x26nbsp;";
+    d = mxUtils.htmlEntities(d, !1);
+    c ? (this.textDiv.style.whiteSpace = "normal", this.textDiv.style.width = this.bounds.width +
+      "px") : d = d.replace(/ /g, "\x26nbsp;");
+    d = d.replace(/\n/g, "\x3cbr/\x3e");
+    this.textDiv.innerHTML = d;
+    var d = this.textDiv.offsetWidth + 30,
+      e = this.textDiv.offsetHeight + 16,
+      d = Math.max(d, 40),
+      e = Math.max(e, 20);
+    b && (d = Math.min(this.bounds.width - 4, d), e = Math.min(this.bounds.height, e));
+    var f = null != a.text ? a.text.margin : null;
+    null == f && (f = mxUtils.getValue(a.style, mxConstants.STYLE_ALIGN, mxConstants.ALIGN_CENTER), a = mxUtils.getValue(a.style, mxConstants.STYLE_VERTICAL_ALIGN, mxConstants.ALIGN_MIDDLE), f =
+      mxUtils.getAlignmentAsPoint(f,
+        a));
+    if (null != f) {
+      if (b || !c) this.textarea.style.left = Math.max(0, Math.round(this.bounds.x - f.x * this.bounds.width + f.x * d) - 3) + "px";
+      this.textarea.style.top = Math.max(0, Math.round(this.bounds.y - f.y * this.bounds.height + f.y * e) + 4) + "px"
+    }
+    if (b || !c) this.textarea.style.width = d + "px";
+    this.textarea.style.height = e + "px"
+  }
+};
+mxCellEditor.prototype.isModified = function() {
+  return this.modified
+};
+mxCellEditor.prototype.setModified = function(a) {
+  this.modified = a
+};
+mxCellEditor.prototype.focusLost = function() {
+  this.stopEditing(!this.graph.isInvokesStopCellEditing())
+};
+mxCellEditor.prototype.startEditing = function(a, b) {
+  null == this.textarea && this.init();
+  this.stopEditing(!0);
+  var c = this.graph.getView().getState(a);
+  if (null != c) {
+    this.editingCell = a;
+    this.trigger = b;
+    this.textNode = null;
+    null != c.text && this.isHideLabel(c) && (this.textNode = c.text.node, this.textNode.style.visibility = "hidden");
+    var d = this.graph.getView().scale,
+      d = mxUtils.getValue(c.style, mxConstants.STYLE_FONTSIZE, mxConstants.DEFAULT_FONTSIZE) * d,
+      e = mxUtils.getValue(c.style, mxConstants.STYLE_FONTFAMILY, mxConstants.DEFAULT_FONTFAMILY),
+      f = mxUtils.getValue(c.style, mxConstants.STYLE_FONTCOLOR, "black"),
+      g = mxUtils.getValue(c.style, mxConstants.STYLE_ALIGN, mxConstants.ALIGN_LEFT),
+      h = (mxUtils.getValue(c.style, mxConstants.STYLE_FONTSTYLE, 0) & mxConstants.FONT_BOLD) == mxConstants.FONT_BOLD,
+      k = (mxUtils.getValue(c.style, mxConstants.STYLE_FONTSTYLE, 0) & mxConstants.FONT_ITALIC) == mxConstants.FONT_ITALIC,
+      l = (mxUtils.getValue(c.style, mxConstants.STYLE_FONTSTYLE, 0) & mxConstants.FONT_UNDERLINE) == mxConstants.FONT_UNDERLINE;
+    this.textarea.style.fontSize = Math.round(d) +
+      "px";
+    this.textarea.style.lineHeight = Math.round(d * mxConstants.LINE_HEIGHT) + "px";
+    this.textarea.style.fontFamily = e;
+    this.textarea.style.textAlign = g;
+    this.textarea.style.color = f;
+    this.textarea.style.fontWeight = h ? "bold" : "normal";
+    this.textarea.style.fontStyle = k ? "italic" : "";
+    this.textarea.style.textDecoration = l ? "underline" : "";
+    this.textarea.style.overflow = "auto";
+    this.textarea.style.outline = "none";
+    this.bounds = d = this.getEditorBounds(c);
+    this.textarea.style.left = d.x + "px";
+    this.textarea.style.top = d.y + "px";
+    this.textarea.style.width =
+      d.width + "px";
+    this.textarea.style.height = d.height + "px";
+    this.textarea.style.zIndex = 5;
+    c = this.getInitialValue(c, b);
+    null == c || 0 == c.length ? (c = this.getEmptyLabelText(), this.clearOnChange = !0) : this.clearOnChange = !1;
+    this.setModified(!1);
+    this.textarea.value = c;
+    this.graph.container.appendChild(this.textarea);
+    "none" != this.textarea.style.display && (this.autoSize && (this.textDiv = this.createTextDiv(), document.body.appendChild(this.textDiv), this.resize()), this.textarea.focus(), this.textarea.select())
+  }
+};
+mxCellEditor.prototype.createTextDiv = function() {
+  var a = document.createElement("div"),
+    b = a.style;
+  b.position = "absolute";
+  b.whiteSpace = "nowrap";
+  b.visibility = "hidden";
+  b.display = mxClient.IS_QUIRKS ? "inline" : "inline-block";
+  b.zoom = "1";
+  b.verticalAlign = "top";
+  b.lineHeight = this.textarea.style.lineHeight;
+  b.fontSize = this.textarea.style.fontSize;
+  b.fontFamily = this.textarea.style.fontFamily;
+  b.fontWeight = this.textarea.style.fontWeight;
+  b.textAlign = this.textarea.style.textAlign;
+  b.fontStyle = this.textarea.style.fontStyle;
+  b.textDecoration = this.textarea.style.textDecoration;
+  return a
+};
+mxCellEditor.prototype.stopEditing = function(a) {
+  null != this.editingCell && (null != this.textNode && (this.textNode.style.visibility = "visible", this.textNode = null), !a && this.isModified() && this.graph.labelChanged(this.editingCell, this
+      .getCurrentValue(), this.trigger), null != this.textDiv && (document.body.removeChild(this.textDiv), this.textDiv = null), this.bounds = this.trigger = this.editingCell = null, this.textarea
+    .blur(), this.textarea.parentNode.removeChild(this.textarea))
+};
+mxCellEditor.prototype.getInitialValue = function(a, b) {
+  return this.graph.getEditingValue(a.cell, b)
+};
+mxCellEditor.prototype.getCurrentValue = function() {
+  return this.textarea.value.replace(/\r/g, "")
+};
+mxCellEditor.prototype.isHideLabel = function(a) {
+  return !0
+};
+mxCellEditor.prototype.getMinimumSize = function(a) {
+  var b = this.graph.getView().scale;
+  return new mxRectangle(0, 0, null == a.text ? 30 : a.text.size * b + 20, "left" == this.textarea.style.textAlign ? 120 : 40)
+};
+mxCellEditor.prototype.getEditorBounds = function(a) {
+  var b = this.graph.getModel().isEdge(a.cell),
+    c = this.graph.getView().scale,
+    d = this.getMinimumSize(a),
+    e = d.width,
+    d = d.height,
+    f = parseInt(a.style[mxConstants.STYLE_SPACING] || 2) * c,
+    g = parseInt(a.style[mxConstants.STYLE_SPACING_TOP] || 0) * c + f,
+    h = parseInt(a.style[mxConstants.STYLE_SPACING_RIGHT] || 0) * c + f,
+    k = parseInt(a.style[mxConstants.STYLE_SPACING_BOTTOM] || 0) * c + f,
+    c = parseInt(a.style[mxConstants.STYLE_SPACING_LEFT] || 0) * c + f,
+    h = new mxRectangle(a.x, a.y, Math.max(e, a.width -
+      c - h), Math.max(d, a.height - g - k));
+  b ? (h.x = a.absoluteOffset.x, h.y = a.absoluteOffset.y, null != a.text && null != a.text.boundingBox && (0 < a.text.boundingBox.x && (h.x = a.text.boundingBox.x), 0 < a.text.boundingBox.y && (h.y =
+    a.text.boundingBox.y))) : null != a.text && null != a.text.boundingBox && (h.x = Math.min(h.x, a.text.boundingBox.x), h.y = Math.min(h.y, a.text.boundingBox.y));
+  h.x += c;
+  h.y += g;
+  null != a.text && null != a.text.boundingBox && (b ? (h.width = Math.max(e, a.text.boundingBox.width), h.height = Math.max(d, a.text.boundingBox.height)) : (h.width =
+    Math.max(h.width, a.text.boundingBox.width), h.height = Math.max(h.height, a.text.boundingBox.height)));
+  this.graph.getModel().isVertex(a.cell) && (b = mxUtils.getValue(a.style, mxConstants.STYLE_LABEL_POSITION, mxConstants.ALIGN_CENTER), b == mxConstants.ALIGN_LEFT ? h.x -= a.width : b ==
+    mxConstants.ALIGN_RIGHT && (h.x += a.width), b = mxUtils.getValue(a.style, mxConstants.STYLE_VERTICAL_LABEL_POSITION, mxConstants.ALIGN_MIDDLE), b == mxConstants.ALIGN_TOP ? h.y -= a.height :
+    b == mxConstants.ALIGN_BOTTOM && (h.y += a.height));
+  return h
+};
+mxCellEditor.prototype.getEmptyLabelText = function(a) {
+  return this.emptyLabelText
+};
+mxCellEditor.prototype.getEditingCell = function() {
+  return this.editingCell
+};
+mxCellEditor.prototype.destroy = function() {
+  null != this.textarea && (mxEvent.release(this.textarea), null != this.textarea.parentNode && this.textarea.parentNode.removeChild(this.textarea), this.textarea = null)
+};
+
+function mxCellRenderer() {}
+mxCellRenderer.prototype.defaultEdgeShape = mxConnector;
+mxCellRenderer.prototype.defaultVertexShape = mxRectangleShape;
+mxCellRenderer.prototype.defaultTextShape = mxText;
+mxCellRenderer.prototype.legacyControlPosition = !0;
+mxCellRenderer.prototype.defaultShapes = {};
+mxCellRenderer.registerShape = function(a, b) {
+  mxCellRenderer.prototype.defaultShapes[a] = b
+};
+mxCellRenderer.registerShape(mxConstants.SHAPE_RECTANGLE, mxRectangleShape);
+mxCellRenderer.registerShape(mxConstants.SHAPE_ELLIPSE, mxEllipse);
+mxCellRenderer.registerShape(mxConstants.SHAPE_RHOMBUS, mxRhombus);
+mxCellRenderer.registerShape(mxConstants.SHAPE_CYLINDER, mxCylinder);
+mxCellRenderer.registerShape(mxConstants.SHAPE_CONNECTOR, mxConnector);
+mxCellRenderer.registerShape(mxConstants.SHAPE_ACTOR, mxActor);
+mxCellRenderer.registerShape(mxConstants.SHAPE_TRIANGLE, mxTriangle);
+mxCellRenderer.registerShape(mxConstants.SHAPE_HEXAGON, mxHexagon);
+mxCellRenderer.registerShape(mxConstants.SHAPE_CLOUD, mxCloud);
+mxCellRenderer.registerShape(mxConstants.SHAPE_LINE, mxLine);
+mxCellRenderer.registerShape(mxConstants.SHAPE_ARROW, mxArrow);
+mxCellRenderer.registerShape(mxConstants.SHAPE_DOUBLE_ELLIPSE, mxDoubleEllipse);
+mxCellRenderer.registerShape(mxConstants.SHAPE_SWIMLANE, mxSwimlane);
+mxCellRenderer.registerShape(mxConstants.SHAPE_IMAGE, mxImageShape);
+mxCellRenderer.registerShape(mxConstants.SHAPE_LABEL, mxLabel);
+mxCellRenderer.prototype.initialize = function(a, b) {
+  var c = a.view.graph.getModel();
+  if (null != a.view.graph.container && null == a.shape && a.cell != a.view.currentRoot && (c.isVertex(a.cell) || c.isEdge(a.cell)))
+    if (this.createShape(a), null != a.shape && (null == b || b)) this.initializeShape(a), a.view.graph.ordered || c.isEdge(a.cell) ? a.invalidOrder = !0 : a.view.graph.keepEdgesInForeground &&
+      null != this.firstEdge && (this.firstEdge.parentNode == a.shape.node.parentNode ? this.insertState(a, this.firstEdge) : this.firstEdge = null), a.shape.scale =
+      a.view.scale, this.createCellOverlays(a), this.installListeners(a)
+};
+mxCellRenderer.prototype.initializeShape = function(a) {
+  a.shape.init(a.view.getDrawPane())
+};
+mxCellRenderer.prototype.getPreviousStateInContainer = function(a, b) {
+  for (var c = null, d = a.view.graph, e = d.getModel(), f = a.cell, g = e.getParent(f); null != g && null == c;) c = this.findPreviousStateInContainer(d, g, f, b), f = g, g = e.getParent(f);
+  return c
+};
+mxCellRenderer.prototype.findPreviousStateInContainer = function(a, b, c, d) {
+  var e = null,
+    f = a.getModel();
+  for (c = null != c ? b.getIndex(c) - 1 : f.getChildCount(b) - 1; 0 <= c && null == e; c--) e = this.findPreviousStateInContainer(a, f.getChildAt(b, c), null, d);
+  if (null == e && (e = a.view.getState(b), null != e && (null == e.shape || null == e.shape.node || e.shape.node.parentNode != d))) e = null;
+  return e
+};
+mxCellRenderer.prototype.order = function(a) {
+  var b = a.shape.node.parentNode,
+    c = this.getPreviousStateInContainer(a, b),
+    d = b.firstChild;
+  null != c && (d = c.shape.node, null != c.text && (null != c.text.node && c.text.node.parentNode == b) && (d = c.text.node), d = d.nextSibling);
+  this.insertState(a, d)
+};
+mxCellRenderer.prototype.orderEdge = function(a) {
+  var b = a.view,
+    c = b.graph.getModel();
+  if (b.graph.keepEdgesInForeground) {
+    if (null == this.firstEdge || null == this.firstEdge.parentNode || this.firstEdge.parentNode != a.shape.node.parentNode) this.firstEdge = a.shape.node
+  } else if (b.graph.keepEdgesInBackground) {
+    var d = a.shape.node,
+      e = d.parentNode,
+      c = c.getParent(a.cell),
+      b = b.getState(c),
+      e = null != b && null != b.shape && null != b.shape.node ? b.shape.node.nextSibling : e.firstChild;
+    null != e && e != d && this.insertState(a, e)
+  }
+};
+mxCellRenderer.prototype.insertState = function(a, b) {
+  a.shape.node.parentNode.insertBefore(a.shape.node, b);
+  null != a.text && (null != a.text.node && a.text.node.parentNode == a.shape.node.parentNode) && a.shape.node.parentNode.insertBefore(a.text.node, a.shape.node.nextSibling)
+};
+mxCellRenderer.prototype.createShape = function(a) {
+  if (null != a.style) {
+    var b = mxStencilRegistry.getStencil(a.style[mxConstants.STYLE_SHAPE]);
+    null != b ? a.shape = new mxShape(b) : (b = this.getShapeConstructor(a), a.shape = new b);
+    a.shape.points = a.absolutePoints;
+    a.shape.bounds = new mxRectangle(a.x, a.y, a.width, a.height);
+    a.shape.dialect = a.view.graph.dialect;
+    this.configureShape(a)
+  }
+};
+mxCellRenderer.prototype.getShape = function(a) {
+  return null != a ? mxCellRenderer.prototype.defaultShapes[a] : null
+};
+mxCellRenderer.prototype.getShapeConstructor = function(a) {
+  var b = this.getShape(a.style[mxConstants.STYLE_SHAPE]);
+  null == b && (b = a.view.graph.getModel().isEdge(a.cell) ? this.defaultEdgeShape : this.defaultVertexShape);
+  return b
+};
+mxCellRenderer.prototype.configureShape = function(a) {
+  a.shape.apply(a);
+  a.shape.image = a.view.graph.getImage(a);
+  a.shape.indicatorShape = this.getShape(a.view.graph.getIndicatorShape(a));
+  a.shape.indicatorColor = a.view.graph.getIndicatorColor(a);
+  a.shape.indicatorGradientColor = a.view.graph.getIndicatorGradientColor(a);
+  a.shape.indicatorDirection = a.style[mxConstants.STYLE_INDICATOR_DIRECTION];
+  a.shape.indicatorImage = a.view.graph.getIndicatorImage(a);
+  this.postConfigureShape(a)
+};
+mxCellRenderer.prototype.postConfigureShape = function(a) {
+  null != a.shape && (this.resolveColor(a, "indicatorColor", mxConstants.STYLE_FILLCOLOR), this.resolveColor(a, "indicatorGradientColor", mxConstants.STYLE_GRADIENTCOLOR), this.resolveColor(a,
+    "fill", mxConstants.STYLE_FILLCOLOR), this.resolveColor(a, "stroke", mxConstants.STYLE_STROKECOLOR), this.resolveColor(a, "gradient", mxConstants.STYLE_GRADIENTCOLOR))
+};
+mxCellRenderer.prototype.resolveColor = function(a, b, c) {
+  var d = a.shape[b],
+    e = a.view.graph,
+    f = null;
+  "inherit" == d ? f = e.model.getParent(a.cell) : "swimlane" == d ? (f = null != e.model.getTerminal(a.cell, !1) ? e.model.getTerminal(a.cell, !1) : a.cell, f = e.getSwimlane(f), c = e.swimlaneIndicatorColorAttribute) :
+    "indicated" == d && (a.shape[b] = a.shape.indicatorColor);
+  null != f && (d = e.getView().getState(f), a.shape[b] = null, null != d && (a.shape[b] = null != d.shape && "indicatorColor" != b ? d.shape[b] : d.style[c]))
+};
+mxCellRenderer.prototype.getLabelValue = function(a) {
+  return a.view.graph.getLabel(a.cell)
+};
+mxCellRenderer.prototype.createLabel = function(a, b) {
+  var c = a.view.graph;
+  c.getModel().isEdge(a.cell);
+  if (0 < a.style[mxConstants.STYLE_FONTSIZE] || null == a.style[mxConstants.STYLE_FONTSIZE]) {
+    var d = c.isHtmlLabel(a.cell) || null != b && mxUtils.isNode(b);
+    a.text = new this.defaultTextShape(b, new mxRectangle, a.style[mxConstants.STYLE_ALIGN] || mxConstants.ALIGN_CENTER, c.getVerticalAlign(a), a.style[mxConstants.STYLE_FONTCOLOR], a.style[
+        mxConstants.STYLE_FONTFAMILY], a.style[mxConstants.STYLE_FONTSIZE], a.style[mxConstants.STYLE_FONTSTYLE],
+      a.style[mxConstants.STYLE_SPACING], a.style[mxConstants.STYLE_SPACING_TOP], a.style[mxConstants.STYLE_SPACING_RIGHT], a.style[mxConstants.STYLE_SPACING_BOTTOM], a.style[mxConstants.STYLE_SPACING_LEFT],
+      a.style[mxConstants.STYLE_HORIZONTAL], a.style[mxConstants.STYLE_LABEL_BACKGROUNDCOLOR], a.style[mxConstants.STYLE_LABEL_BORDERCOLOR], c.isWrapping(a.cell) && c.isHtmlLabel(a.cell), c.isLabelClipped(
+        a.cell), a.style[mxConstants.STYLE_OVERFLOW], a.style[mxConstants.STYLE_LABEL_PADDING]);
+    a.text.opacity = mxUtils.getValue(a.style,
+      mxConstants.STYLE_TEXT_OPACITY, 100);
+    a.text.dialect = d ? mxConstants.DIALECT_STRICTHTML : a.view.graph.dialect;
+    a.text.state = a;
+    this.initializeLabel(a);
+    var e = !1,
+      f = function(b) {
+        var d = a;
+        if (mxClient.IS_TOUCH || e) d = mxEvent.getClientX(b), b = mxEvent.getClientY(b), b = mxUtils.convertPoint(c.container, d, b), d = c.view.getState(c.getCellAt(b.x, b.y));
+        return d
+      };
+    mxEvent.addGestureListeners(a.text.node, mxUtils.bind(this, function(b) {
+      this.isLabelEvent(a, b) && (c.fireMouseEvent(mxEvent.MOUSE_DOWN, new mxMouseEvent(b, a)), e = c.dialect !=
+        mxConstants.DIALECT_SVG && "IMG" == mxEvent.getSource(b).nodeName)
+    }), mxUtils.bind(this, function(b) {
+      this.isLabelEvent(a, b) && c.fireMouseEvent(mxEvent.MOUSE_MOVE, new mxMouseEvent(b, f(b)))
+    }), mxUtils.bind(this, function(b) {
+      this.isLabelEvent(a, b) && (c.fireMouseEvent(mxEvent.MOUSE_UP, new mxMouseEvent(b, f(b))), e = !1)
+    }));
+    mxEvent.addListener(a.text.node, "dblclick", mxUtils.bind(this, function(b) {
+      this.isLabelEvent(a, b) && (c.dblClick(b, a.cell), mxEvent.consume(b))
+    }))
+  }
+};
+mxCellRenderer.prototype.initializeLabel = function(a) {
+  var b = a.view.graph;
+  a.text.dialect != mxConstants.DIALECT_SVG && (mxClient.IS_SVG && mxClient.NO_FO ? a.text.init(b.container) : mxUtils.isVml(a.view.getDrawPane()) && (null != a.shape.label ? a.text.init(a.shape.label) :
+    a.text.init(a.shape.node)));
+  null == a.text.node && (a.text.init(a.view.getDrawPane()), null != a.shape && null != a.text && a.shape.node.parentNode.insertBefore(a.text.node, a.shape.node.nextSibling))
+};
+mxCellRenderer.prototype.createCellOverlays = function(a) {
+  var b = a.view.graph.getCellOverlays(a.cell),
+    c = null;
+  if (null != b)
+    for (var c = new mxDictionary, d = 0; d < b.length; d++) {
+      var e = null != a.overlays ? a.overlays.remove(b[d]) : null;
+      null == e && (e = new mxImageShape(new mxRectangle, b[d].image.src), e.dialect = a.view.graph.dialect, e.preserveImageAspect = !1, e.overlay = b[d], this.initializeOverlay(a, e), this.installCellOverlayListeners(
+        a, b[d], e), null != b[d].cursor && (e.node.style.cursor = b[d].cursor));
+      c.put(b[d], e)
+    }
+  null != a.overlays &&
+    a.overlays.visit(function(a, b) {
+      b.destroy()
+    });
+  a.overlays = c
+};
+mxCellRenderer.prototype.initializeOverlay = function(a, b) {
+  b.init(a.view.getOverlayPane())
+};
+mxCellRenderer.prototype.installCellOverlayListeners = function(a, b, c) {
+  var d = a.view.graph;
+  mxEvent.addListener(c.node, "click", function(c) {
+    d.isEditing() && d.stopEditing(!d.isInvokesStopCellEditing());
+    b.fireEvent(new mxEventObject(mxEvent.CLICK, "event", c, "cell", a.cell))
+  });
+  mxEvent.addGestureListeners(c.node, function(a) {
+    mxEvent.consume(a)
+  }, function(b) {
+    d.fireMouseEvent(mxEvent.MOUSE_MOVE, new mxMouseEvent(b, a))
+  });
+  mxClient.IS_TOUCH && mxEvent.addListener(c.node, "touchend", function(c) {
+    b.fireEvent(new mxEventObject(mxEvent.CLICK,
+      "event", c, "cell", a.cell))
+  })
+};
+mxCellRenderer.prototype.createControl = function(a) {
+  var b = a.view.graph,
+    c = b.getFoldingImage(a);
+  if (b.foldingEnabled && null != c) {
+    if (null == a.control) {
+      var d = new mxRectangle(0, 0, c.width, c.height);
+      a.control = new mxImageShape(d, c.src);
+      a.control.preserveImageAspect = !1;
+      a.control.dialect = b.dialect;
+      this.initControl(a, a.control, !0, function(c) {
+        if (b.isEnabled()) {
+          var d = !b.isCellCollapsed(a.cell);
+          b.foldCells(d, !1, [a.cell]);
+          mxEvent.consume(c)
+        }
+      })
+    }
+  } else null != a.control && (a.control.destroy(), a.control = null)
+};
+mxCellRenderer.prototype.initControl = function(a, b, c, d) {
+  var e = a.view.graph;
+  e.isHtmlLabel(a.cell) && mxClient.NO_FO && e.dialect == mxConstants.DIALECT_SVG ? (b.dialect = mxConstants.DIALECT_PREFERHTML, b.init(e.container), b.node.style.zIndex = 1) : b.init(a.view.getOverlayPane());
+  b = b.innerNode || b.node;
+  d && (e.isEnabled() && (b.style.cursor = "pointer"), mxEvent.addListener(b, "click", d));
+  c && mxEvent.addGestureListeners(b, function(b) {
+    e.fireMouseEvent(mxEvent.MOUSE_DOWN, new mxMouseEvent(b, a));
+    mxEvent.consume(b)
+  }, function(b) {
+    e.fireMouseEvent(mxEvent.MOUSE_MOVE,
+      new mxMouseEvent(b, a))
+  });
+  return b
+};
+mxCellRenderer.prototype.isShapeEvent = function(a, b) {
+  return !0
+};
+mxCellRenderer.prototype.isLabelEvent = function(a, b) {
+  return !0
+};
+mxCellRenderer.prototype.installListeners = function(a) {
+  var b = a.view.graph,
+    c = function(c) {
+      var d = a;
+      if (b.dialect != mxConstants.DIALECT_SVG && "IMG" == mxEvent.getSource(c).nodeName || mxClient.IS_TOUCH) d = mxEvent.getClientX(c), c = mxEvent.getClientY(c), c = mxUtils.convertPoint(b.container,
+        d, c), d = b.view.getState(b.getCellAt(c.x, c.y));
+      return d
+    },
+    d = !1;
+  mxEvent.addListener(a.shape.node, "gesturestart", mxUtils.bind(this, function(a) {
+    b.lastTouchTime = 0;
+    d = !0;
+    mxEvent.consume(a)
+  }));
+  mxEvent.addGestureListeners(a.shape.node, mxUtils.bind(this,
+    function(c) {
+      this.isShapeEvent(a, c) && !d ? b.fireMouseEvent(mxEvent.MOUSE_DOWN, new mxMouseEvent(c, null != a.shape && mxEvent.getSource(c) == a.shape.content ? null : a)) : d && mxEvent.consume(c)
+    }), mxUtils.bind(this, function(e) {
+    this.isShapeEvent(a, e) && !d ? b.fireMouseEvent(mxEvent.MOUSE_MOVE, new mxMouseEvent(e, null != a.shape && mxEvent.getSource(e) == a.shape.content ? null : c(e))) : d && mxEvent.consume(
+      e)
+  }), mxUtils.bind(this, function(e) {
+    this.isShapeEvent(a, e) && !d ? b.fireMouseEvent(mxEvent.MOUSE_UP, new mxMouseEvent(e, null != a.shape &&
+      mxEvent.getSource(e) == a.shape.content ? null : c(e))) : d && mxEvent.consume(e)
+  }));
+  var e = mxClient.IS_TOUCH ? "gestureend" : "dblclick";
+  mxEvent.addListener(a.shape.node, e, mxUtils.bind(this, function(c) {
+    d = !1;
+    "gestureend" == e ? (b.lastTouchTime = 0, b.gestureEnabled && (b.handleGesture(a, c), mxEvent.consume(c))) : this.isShapeEvent(a, c) && (b.dblClick(c, null != a.shape && mxEvent.getSource(
+      c) == a.shape.content ? null : a.cell), mxEvent.consume(c))
+  }))
+};
+mxCellRenderer.prototype.redrawLabel = function(a, b) {
+  var c = this.getLabelValue(a);
+  if (null == a.text && null != c && (mxUtils.isNode(c) || 0 < c.length)) this.createLabel(a, c);
+  else if (null != a.text && (null == c || 0 == c.length)) a.text.destroy(), a.text = null;
+  if (null != a.text) {
+    var d = a.view.graph,
+      e = d.isWrapping(a.cell),
+      d = d.isLabelClipped(a.cell),
+      f = this.getLabelBounds(a);
+    if (b || a.text.value != c || a.text.isWrapping != e || a.text.isClipping != d || a.text.scale != a.view.scale || !a.text.bounds.equals(f)) a.text.value = c, a.text.bounds = f, a.text.scale =
+      this.getTextScale(a), a.text.isWrapping = e, a.text.isClipping = d, a.text.redraw()
+  }
+};
+mxCellRenderer.prototype.getTextScale = function(a) {
+  return a.view.scale
+};
+mxCellRenderer.prototype.getLabelBounds = function(a) {
+  var b = a.view.graph,
+    c = a.view.scale,
+    d = b.getModel().isEdge(a.cell),
+    e = new mxRectangle(a.absoluteOffset.x, a.absoluteOffset.y);
+  a.text.updateMargin();
+  d ? (d = a.text.getSpacing(), e.x += d.x * c, e.y += d.y * c, b = b.getCellGeometry(a.cell), null != b && (e.width = Math.max(0, a.text.margin.x * b.width * c - a.text.spacingLeft * c - a.text.spacingRight *
+    c), e.height = Math.max(0, a.text.margin.y * b.height * c - a.text.spacingTop * c - a.text.spacingBottom * c))) : (a.text.isPaintBoundsInverted() && (d = e.x,
+      e.x = e.y, e.y = d), e.x += a.x, e.y += a.y, e.width = Math.max(1, a.width), e.height = Math.max(1, a.height), b.isSwimlane(a.cell) && (b = b.getStartSize(a.cell), 0 < b.width ? (d = Math.min(
+      e.width, b.width * c), a.shape.flipH && (e.x += e.width - d), e.width = d) : 0 < b.height && (d = Math.min(e.height, b.height * c), a.shape.flipV && (e.y += e.height - d), e.height = d)),
+    this.rotateLabelBounds(a, e));
+  return e
+};
+mxCellRenderer.prototype.rotateLabelBounds = function(a, b) {
+  if (a.text.isPaintBoundsInverted()) {
+    var c = (a.width - a.height) / 2;
+    b.x += c;
+    b.y -= c;
+    c = b.width;
+    b.width = b.height;
+    b.height = c
+  }
+  b.x -= a.text.margin.x * b.width;
+  b.y -= a.text.margin.y * b.height;
+  if ("fill" != a.style[mxConstants.STYLE_OVERFLOW]) {
+    var c = a.view.scale,
+      d = a.text.getSpacing();
+    b.x += d.x * c;
+    b.y += d.y * c;
+    b.width = Math.max(0, b.width - a.text.spacingLeft * c - a.text.spacingRight * c);
+    b.height = Math.max(0, b.height - a.text.spacingTop * c - a.text.spacingBottom * c)
+  }
+  var e = a.text.getTextRotation();
+  if (0 != e && (null != a && a.view.graph.model.isVertex(a.cell)) && (c = a.getCenterX(), d = a.getCenterY(), b.x != c || b.y != d)) e *= Math.PI / 180, pt = mxUtils.getRotatedPoint(new mxPoint(b.x,
+    b.y), Math.cos(e), Math.sin(e), new mxPoint(c, d)), b.x = pt.x, b.y = pt.y
+};
+mxCellRenderer.prototype.redrawCellOverlays = function(a, b) {
+  this.createCellOverlays(a);
+  if (null != a.overlays) {
+    var c = mxUtils.mod(mxUtils.getValue(a.style, mxConstants.STYLE_ROTATION, 0), 90),
+      d = mxUtils.toRadians(c),
+      e = Math.cos(d),
+      f = Math.sin(d);
+    a.overlays.visit(function(d, h) {
+      var k = h.overlay.getBounds(a);
+      if (!a.view.graph.getModel().isEdge(a.cell) && null != a.shape && 0 != c) {
+        var l = k.getCenterX(),
+          m = k.getCenterY(),
+          m = mxUtils.getRotatedPoint(new mxPoint(l, m), e, f, new mxPoint(a.getCenterX(), a.getCenterY())),
+          l = m.x,
+          m = m.y;
+        k.x =
+          Math.round(l - k.width / 2);
+        k.y = Math.round(m - k.height / 2)
+      }
+      if (b || null == h.bounds || h.scale != a.view.scale || !h.bounds.equals(k)) h.bounds = k, h.scale = a.view.scale, h.redraw()
+    })
+  }
+};
+mxCellRenderer.prototype.redrawControl = function(a, b) {
+  if (null != a.control) {
+    var c = this.getControlBounds(a),
+      d = this.legacyControlPosition ? mxUtils.getValue(a.style, mxConstants.STYLE_ROTATION, 0) : a.shape.getTextRotation(),
+      e = a.view.scale;
+    if (b || a.control.scale != e || !a.control.bounds.equals(c) || a.control.rotation != d) a.control.rotation = d, a.control.bounds = c, a.control.scale = e, a.control.redraw()
+  }
+};
+mxCellRenderer.prototype.getControlBounds = function(a) {
+  if (null != a.control) {
+    var b = a.control.scale,
+      c = a.control.bounds.width / b,
+      b = a.control.bounds.height / b,
+      d = a.view.scale,
+      e = a.getCenterX(),
+      f = a.getCenterY();
+    if (!a.view.graph.getModel().isEdge(a.cell) && (e = a.x + c * d, f = a.y + b * d, null != a.shape)) {
+      var g = a.shape.getShapeRotation();
+      if (this.legacyControlPosition) g = mxUtils.getValue(a.style, mxConstants.STYLE_ROTATION, 0);
+      else if (a.shape.isPaintBoundsInverted()) var h = (a.width - a.height) / 2,
+        e = e + h,
+        f = f - h;
+      0 != g && (h = mxUtils.toRadians(g),
+        g = Math.cos(h), h = Math.sin(h), f = mxUtils.getRotatedPoint(new mxPoint(e, f), g, h, new mxPoint(a.getCenterX(), a.getCenterY())), e = f.x, f = f.y)
+    }
+    return a.view.graph.getModel().isEdge(a.cell), new mxRectangle(Math.round(e - c / 2 * d), Math.round(f - b / 2 * d), Math.round(c * d), Math.round(b * d))
+  }
+  return null
+};
+mxCellRenderer.prototype.redraw = function(a, b, c) {
+  if (null != a.shape) {
+    var d = !1;
+    a.view.graph.getModel().isEdge(a.cell);
+    reconfigure = null != b ? b : !1;
+    this.createControl(a);
+    if (a.orderChanged || a.invalidOrder) a.view.graph.ordered ? this.order(a) : this.orderEdge(a);
+    if (a.orderChanged || !mxUtils.equalEntries(a.shape.style, a.style)) this.configureShape(a), b = !0;
+    delete a.invalidOrder;
+    delete a.orderChanged;
+    if (b || null == a.shape.bounds || a.shape.scale != a.view.scale || !a.shape.bounds.equals(a) || !mxUtils.equalPoints(a.shape.points,
+        a.absolutePoints)) d = !0, a.shape.points = null != a.absolutePoints ? a.absolutePoints.slice() : null, a.shape.bounds = new mxRectangle(a.x, a.y, a.width, a.height), a.shape.scale = a.view
+      .scale, null == c || c ? a.shape.redraw() : a.shape.updateBoundingBox();
+    if (null == c || c) this.redrawLabel(a, d), this.redrawCellOverlays(a, d), this.redrawControl(a, d)
+  }
+};
+mxCellRenderer.prototype.destroy = function(a) {
+  null != a.shape && (null != a.text && (a.text.destroy(), a.text = null), null != a.overlays && (a.overlays.visit(function(a, c) {
+    c.destroy()
+  }), a.overlays = null), null != a.control && (a.control.destroy(), a.control = null), a.shape.destroy(), a.shape = null)
+};
+var mxEdgeStyle = {
+    EntityRelation: function(a, b, c, d, e) {
+      var f = a.view,
+        g = f.graph;
+      d = mxUtils.getValue(a.style, mxConstants.STYLE_SEGMENT, mxConstants.ENTITY_SEGMENT) * f.scale;
+      var h = a.absolutePoints,
+        k = h[0],
+        l = h[h.length - 1],
+        h = !1;
+      if (null != k) b = new mxCellState, b.x = k.x, b.y = k.y;
+      else if (null != b) {
+        var m = mxUtils.getPortConstraints(b, a, !0, mxConstants.DIRECTION_MASK_NONE);
+        m != mxConstants.DIRECTION_MASK_NONE ? h = m == mxConstants.DIRECTION_MASK_WEST : (k = g.getCellGeometry(b.cell), k.relative ? h = 0.5 >= k.x : null != c && (h = c.x + c.width < b.x))
+      } else return;
+      k = !0;
+      null != l ? (c = new mxCellState, c.x = l.x, c.y = l.y) : null != c && (m = mxUtils.getPortConstraints(c, a, !1, mxConstants.DIRECTION_MASK_NONE), m != mxConstants.DIRECTION_MASK_NONE ? k = m ==
+        mxConstants.DIRECTION_MASK_WEST : (a = g.getCellGeometry(c.cell), a.relative ? k = 0.5 >= a.x : null != b && (k = b.x + b.width < c.x)));
+      null != b && null != c && (a = h ? b.x : b.x + b.width, b = f.getRoutingCenterY(b), g = k ? c.x : c.x + c.width, c = f.getRoutingCenterY(c), f = new mxPoint(a + (h ? -d : d), b), l = new mxPoint(
+        g + (k ? -d : d), c), h == k ? (d = h ? Math.min(a, g) - d : Math.max(a, g) + d, e.push(new mxPoint(d,
+        b)), e.push(new mxPoint(d, c))) : (f.x < l.x == h ? (d = b + (c - b) / 2, e.push(f), e.push(new mxPoint(f.x, d)), e.push(new mxPoint(l.x, d))) : e.push(f), e.push(l)))
+    },
+    Loop: function(a, b, c, d, e) {
+      if (null != b) {
+        c = a.view;
+        var f = c.graph;
+        d = null != d && 0 < d.length ? d[0] : null;
+        null != d && (d = c.transformControlPoint(a, d), mxUtils.contains(b, d.x, d.y) && (d = null));
+        var g = 0,
+          h = 0,
+          k = 0,
+          l = 0,
+          f = mxUtils.getValue(a.style, mxConstants.STYLE_SEGMENT, f.gridSize) * c.scale;
+        a = mxUtils.getValue(a.style, mxConstants.STYLE_DIRECTION, mxConstants.DIRECTION_WEST);
+        a == mxConstants.DIRECTION_NORTH ||
+          a == mxConstants.DIRECTION_SOUTH ? (g = c.getRoutingCenterX(b), h = f) : (k = c.getRoutingCenterY(b), l = f);
+        null == d || d.x < b.x || d.x > b.x + b.width ? null != d ? (g = d.x, l = Math.max(Math.abs(k - d.y), l)) : a == mxConstants.DIRECTION_NORTH ? k = b.y - 2 * h : a == mxConstants.DIRECTION_SOUTH ?
+          k = b.y + b.height + 2 * h : g = a == mxConstants.DIRECTION_EAST ? b.x - 2 * l : b.x + b.width + 2 * l : null != d && (g = c.getRoutingCenterX(b), h = Math.max(Math.abs(g - d.x), l), k =
+            d.y, l = 0);
+        e.push(new mxPoint(g - h, k - l));
+        e.push(new mxPoint(g + h, k + l))
+      }
+    },
+    ElbowConnector: function(a, b, c, d, e) {
+      var f = null !=
+        d && 0 < d.length ? d[0] : null,
+        g = !1,
+        h = !1;
+      if (null != b && null != c)
+        if (null != f) var k = Math.min(b.x, c.x),
+          l = Math.max(b.x + b.width, c.x + c.width),
+          h = Math.min(b.y, c.y),
+          m = Math.max(b.y + b.height, c.y + c.height),
+          f = a.view.transformControlPoint(a, f),
+          g = f.y < h || f.y > m,
+          h = f.x < k || f.x > l;
+        else k = Math.max(b.x, c.x), l = Math.min(b.x + b.width, c.x + c.width), g = k == l, g || (h = Math.max(b.y, c.y), m = Math.min(b.y + b.height, c.y + c.height), h = h == m);
+        !h && (g || a.style[mxConstants.STYLE_ELBOW] == mxConstants.ELBOW_VERTICAL) ? mxEdgeStyle.TopToBottom(a, b, c, d, e) : mxEdgeStyle.SideToSide(a,
+        b, c, d, e)
+    },
+    SideToSide: function(a, b, c, d, e) {
+      var f = a.view;
+      d = null != d && 0 < d.length ? d[0] : null;
+      var g = a.absolutePoints,
+        h = g[0],
+        g = g[g.length - 1];
+      null != d && (d = f.transformControlPoint(a, d));
+      null != h && (b = new mxCellState, b.x = h.x, b.y = h.y);
+      null != g && (c = new mxCellState, c.x = g.x, c.y = g.y);
+      null != b && null != c && (a = Math.max(b.x, c.x), h = Math.min(b.x + b.width, c.x + c.width), a = null != d ? d.x : h + (a - h) / 2, h = f.getRoutingCenterY(b), f = f.getRoutingCenterY(c),
+        null != d && (d.y >= b.y && d.y <= b.y + b.height && (h = d.y), d.y >= c.y && d.y <= c.y + c.height && (f = d.y)), !mxUtils.contains(c,
+          a, h) && !mxUtils.contains(b, a, h) && e.push(new mxPoint(a, h)), !mxUtils.contains(c, a, f) && !mxUtils.contains(b, a, f) && e.push(new mxPoint(a, f)), 1 == e.length && (null != d ? !
+          mxUtils.contains(c, a, d.y) && !mxUtils.contains(b, a, d.y) && e.push(new mxPoint(a, d.y)) : (f = Math.max(b.y, c.y), b = Math.min(b.y + b.height, c.y + c.height), e.push(new mxPoint(a,
+            f + (b - f) / 2)))))
+    },
+    TopToBottom: function(a, b, c, d, e) {
+      var f = a.view;
+      d = null != d && 0 < d.length ? d[0] : null;
+      var g = a.absolutePoints,
+        h = g[0],
+        g = g[g.length - 1];
+      null != d && (d = f.transformControlPoint(a, d));
+      null !=
+        h && (b = new mxCellState, b.x = h.x, b.y = h.y);
+      null != g && (c = new mxCellState, c.x = g.x, c.y = g.y);
+      null != b && null != c && (h = Math.max(b.y, c.y), g = Math.min(b.y + b.height, c.y + c.height), a = f.getRoutingCenterX(b), null != d && (d.x >= b.x && d.x <= b.x + b.width) && (a = d.x), h =
+        null != d ? d.y : g + (h - g) / 2, !mxUtils.contains(c, a, h) && !mxUtils.contains(b, a, h) && e.push(new mxPoint(a, h)), a = null != d && d.x >= c.x && d.x <= c.x + c.width ? d.x : f.getRoutingCenterX(
+          c), !mxUtils.contains(c, a, h) && !mxUtils.contains(b, a, h) && e.push(new mxPoint(a, h)), 1 == e.length && (null != d && 1 ==
+          e.length ? !mxUtils.contains(c, d.x, h) && !mxUtils.contains(b, d.x, h) && e.push(new mxPoint(d.x, h)) : (f = Math.max(b.x, c.x), b = Math.min(b.x + b.width, c.x + c.width), e.push(new mxPoint(
+            f + (b - f) / 2, h)))))
+    },
+    SegmentConnector: function(a, b, c, d, e) {
+      var f = a.absolutePoints,
+        g = !0,
+        h = null,
+        k = f[0];
+      null == k && null != b ? k = new mxPoint(a.view.getRoutingCenterX(b), a.view.getRoutingCenterY(b)) : null != k && (k = k.clone());
+      var l = f.length - 1;
+      if (null != d && 0 < d.length) {
+        for (var h = a.view.transformControlPoint(a, d[0]), m = b, n = f[0], p = !1, q = !1, p = h, s = d.length, r =
+            0; 2 > r; r++) {
+          var t = null != n && n.x == p.x,
+            v = null != n && n.y == p.y,
+            w = null != m && p.y >= m.y && p.y <= m.y + m.height,
+            m = null != m && p.x >= m.x && p.x <= m.x + m.width,
+            p = v || null == n && w,
+            q = t || null == n && m;
+          if (null != n && !v && !t && (w || m)) {
+            g = w ? !1 : !0;
+            break
+          }
+          if (q || p) {
+            g = p;
+            1 == r && (g = 0 == d.length % 2 ? p : q);
+            break
+          }
+          m = c;
+          n = f[l];
+          p = a.view.transformControlPoint(a, d[s - 1])
+        }
+        g && (null != f[0] && f[0].y != h.y || null == f[0] && null != b && (h.y < b.y || h.y > b.y + b.height)) ? e.push(new mxPoint(k.x, h.y)) : !g && (null != f[0] && f[0].x != h.x || null == f[
+          0] && null != b && (h.x < b.x || h.x > b.x + b.width)) && e.push(new mxPoint(h.x,
+          k.y));
+        g ? k.y = h.y : k.x = h.x;
+        for (r = 0; r < d.length; r++) g = !g, h = a.view.transformControlPoint(a, d[r]), g ? k.y = h.y : k.x = h.x, e.push(k.clone())
+      } else h = k, g = !0;
+      k = f[l];
+      null == k && null != c && (k = new mxPoint(a.view.getRoutingCenterX(c), a.view.getRoutingCenterY(c)));
+      g && (null != f[l] && f[l].y != h.y || null == f[l] && null != c && (h.y < c.y || h.y > c.y + c.height)) ? e.push(new mxPoint(k.x, h.y)) : !g && (null != f[l] && f[l].x != h.x || null == f[l] &&
+        null != c && (h.x < c.x || h.x > c.x + c.width)) && e.push(new mxPoint(h.x, k.y));
+      if (null == f[0] && null != b)
+        for (; 1 < e.length && mxUtils.contains(b,
+            e[1].x, e[1].y);) e = e.splice(1, 1);
+      if (null == f[l] && null != c)
+        for (; 1 < e.length && mxUtils.contains(c, e[e.length - 1].x, e[e.length - 1].y);) e = e.splice(e.length - 1, 1)
+    },
+    orthBuffer: 10,
+    dirVectors: [
+      [-1, 0],
+      [0, -1],
+      [1, 0],
+      [0, 1],
+      [-1, 0],
+      [0, -1],
+      [1, 0]
+    ],
+    wayPoints1: [
+      [0, 0],
+      [0, 0],
+      [0, 0],
+      [0, 0],
+      [0, 0],
+      [0, 0],
+      [0, 0],
+      [0, 0],
+      [0, 0],
+      [0, 0],
+      [0, 0],
+      [0, 0]
+    ],
+    routePatterns: [
+      [
+        [513, 2308, 2081, 2562],
+        [513, 1090, 514, 2184, 2114, 2561],
+        [513, 1090, 514, 2564, 2184, 2562],
+        [513, 2308, 2561, 1090, 514, 2568, 2308]
+      ],
+      [
+        [514, 1057, 513, 2308, 2081, 2562],
+        [514, 2184, 2114, 2561],
+        [514, 2184,
+          2562, 1057, 513, 2564, 2184
+        ],
+        [514, 1057, 513, 2568, 2308, 2561]
+      ],
+      [
+        [1090, 514, 1057, 513, 2308, 2081, 2562],
+        [2114, 2561],
+        [1090, 2562, 1057, 513, 2564, 2184],
+        [1090, 514, 1057, 513, 2308, 2561, 2568]
+      ],
+      [
+        [2081, 2562],
+        [1057, 513, 1090, 514, 2184, 2114, 2561],
+        [1057, 513, 1090, 514, 2184, 2562, 2564],
+        [1057, 2561, 1090, 514, 2568, 2308]
+      ]
+    ],
+    inlineRoutePatterns: [
+      [null, [2114, 2568], null, null],
+      [null, [514, 2081, 2114, 2568], null, null],
+      [null, [2114, 2561], null, null],
+      [
+        [2081, 2562],
+        [1057, 2114, 2568],
+        [2184, 2562], null
+      ]
+    ],
+    vertexSeperations: [],
+    limits: [
+      [0, 0, 0, 0, 0, 0, 0, 0, 0],
+      [0, 0, 0, 0, 0, 0, 0, 0, 0]
+    ],
+    LEFT_MASK: 32,
+    TOP_MASK: 64,
+    RIGHT_MASK: 128,
+    BOTTOM_MASK: 256,
+    LEFT: 1,
+    TOP: 2,
+    RIGHT: 4,
+    BOTTOM: 8,
+    SIDE_MASK: 480,
+    CENTER_MASK: 512,
+    SOURCE_MASK: 1024,
+    TARGET_MASK: 2048,
+    VERTEX_MASK: 3072,
+    OrthConnector: function(a, b, c, d, e) {
+      var f = a.view.graph,
+        g = null == b ? !1 : f.getModel().isEdge(b.cell),
+        f = null == c ? !1 : f.getModel().isEdge(c.cell);
+      if (null != d && 0 < d.length || g || f) mxEdgeStyle.SegmentConnector(a, b, c, d, e);
+      else {
+        d = a.absolutePoints;
+        var h = d[0],
+          k = d[d.length - 1];
+        d = null != b ? b.x : h.x;
+        var g = null != b ? b.y : h.y,
+          l = null != b ? b.width :
+          1,
+          m = null != b ? b.height : 1,
+          n = null != c ? c.x : k.x,
+          p = null != c ? c.y : k.y,
+          q = null != c ? c.width : 1,
+          s = null != c ? c.height : 1,
+          f = a.view.scale * mxEdgeStyle.orthBuffer,
+          r = [mxConstants.DIRECTION_MASK_ALL, mxConstants.DIRECTION_MASK_ALL];
+        null != b && (r[0] = mxUtils.getPortConstraints(b, a, !0, mxConstants.DIRECTION_MASK_ALL));
+        null != c && (r[1] = mxUtils.getPortConstraints(c, a, !1, mxConstants.DIRECTION_MASK_ALL));
+        a = [0, 0];
+        d = [
+          [d, g, l, m],
+          [n, p, q, s]
+        ];
+        for (l = 0; 2 > l; l++) mxEdgeStyle.limits[l][1] = d[l][0] - f, mxEdgeStyle.limits[l][2] = d[l][1] - f, mxEdgeStyle.limits[l][4] =
+          d[l][0] + d[l][2] + f, mxEdgeStyle.limits[l][8] = d[l][1] + d[l][3] + f;
+        l = d[0][0] + d[0][2] / 2 - (d[1][0] + d[1][2] / 2);
+        m = d[0][1] + d[0][3] / 2 - (d[1][1] + d[1][3] / 2);
+        g = 0;
+        0 > l ? g = 0 > m ? 2 : 1 : 0 >= m && (g = 3, 0 == l && (g = 2));
+        m = null;
+        null != b && (m = h);
+        b = [
+          [0.5, 0.5],
+          [0.5, 0.5]
+        ];
+        for (l = 0; 2 > l; l++) null != m && (b[l][0] = (m.x - d[l][0]) / d[l][2], 0.01 > b[l][0] ? a[l] = mxConstants.DIRECTION_MASK_WEST : 0.99 < b[l][0] && (a[l] = mxConstants.DIRECTION_MASK_EAST),
+            b[l][1] = (m.y - d[l][1]) / d[l][3], 0.01 > b[l][1] ? a[l] = mxConstants.DIRECTION_MASK_NORTH : 0.99 < b[l][1] && (a[l] = mxConstants.DIRECTION_MASK_SOUTH)),
+          m = null, null != c && (m = k);
+        l = d[0][1] - (d[1][1] + d[1][3]);
+        m = d[0][0] - (d[1][0] + d[1][2]);
+        n = d[1][1] - (d[0][1] + d[0][3]);
+        p = d[1][0] - (d[0][0] + d[0][2]);
+        mxEdgeStyle.vertexSeperations[1] = Math.max(m - 2 * f, 0);
+        mxEdgeStyle.vertexSeperations[2] = Math.max(l - 2 * f, 0);
+        mxEdgeStyle.vertexSeperations[4] = Math.max(n - 2 * f, 0);
+        mxEdgeStyle.vertexSeperations[3] = Math.max(p - 2 * f, 0);
+        c = [];
+        h = [];
+        k = [];
+        h[0] = m >= p ? mxConstants.DIRECTION_MASK_WEST : mxConstants.DIRECTION_MASK_EAST;
+        k[0] = l >= n ? mxConstants.DIRECTION_MASK_NORTH : mxConstants.DIRECTION_MASK_SOUTH;
+        h[1] = mxUtils.reversePortConstraints(h[0]);
+        k[1] = mxUtils.reversePortConstraints(k[0]);
+        m = m >= p ? m : p;
+        n = l >= n ? l : n;
+        p = [
+          [0, 0],
+          [0, 0]
+        ];
+        q = !1;
+        for (l = 0; 2 > l; l++) 0 == a[l] && (0 == (h[l] & r[l]) && (h[l] = mxUtils.reversePortConstraints(h[l])), 0 == (k[l] & r[l]) && (k[l] = mxUtils.reversePortConstraints(k[l])), p[l][0] = k[l],
+          p[l][1] = h[l]);
+        n > 2 * f && m > 2 * f && (0 < (h[0] & r[0]) && 0 < (k[1] & r[1]) ? (p[0][0] = h[0], p[0][1] = k[0], p[1][0] = k[1], p[1][1] = h[1], q = !0) : 0 < (k[0] & r[0]) && 0 < (h[1] & r[1]) && (p[0]
+          [0] = k[0], p[0][1] = h[0], p[1][0] = h[1], p[1][1] = k[1], q = !0));
+        n > 2 * f && !q &&
+          (p[0][0] = k[0], p[0][1] = h[0], p[1][0] = k[1], p[1][1] = h[1], q = !0);
+        m > 2 * f && !q && (p[0][0] = h[0], p[0][1] = k[0], p[1][0] = h[1], p[1][1] = k[1]);
+        for (l = 0; 2 > l; l++)
+          if (0 == a[l] && (0 == (p[l][0] & r[l]) && (p[l][0] = p[l][1]), c[l] = p[l][0] & r[l], c[l] |= (p[l][1] & r[l]) << 8, c[l] |= (p[1 - l][l] & r[l]) << 16, c[l] |= (p[1 - l][1 - l] & r[l]) <<
+              24, 0 == (c[l] & 15) && (c[l] <<= 8), 0 == (c[l] & 3840) && (c[l] = c[l] & 15 | c[l] >> 8), 0 == (c[l] & 983040) && (c[l] = c[l] & 65535 | (c[l] & 251658240) >> 8), a[l] = c[l] & 15,
+              r[l] == mxConstants.DIRECTION_MASK_WEST || r[l] == mxConstants.DIRECTION_MASK_NORTH || r[l] ==
+              mxConstants.DIRECTION_MASK_EAST || r[l] == mxConstants.DIRECTION_MASK_SOUTH)) a[l] = r[l];
+        l = a[0] == mxConstants.DIRECTION_MASK_EAST ? 3 : a[0];
+        r = a[1] == mxConstants.DIRECTION_MASK_EAST ? 3 : a[1];
+        l -= g;
+        r -= g;
+        1 > l && (l += 4);
+        1 > r && (r += 4);
+        r = mxEdgeStyle.routePatterns[l - 1][r - 1];
+        mxEdgeStyle.wayPoints1[0][0] = d[0][0];
+        mxEdgeStyle.wayPoints1[0][1] = d[0][1];
+        switch (a[0]) {
+          case mxConstants.DIRECTION_MASK_WEST:
+            mxEdgeStyle.wayPoints1[0][0] -= f;
+            mxEdgeStyle.wayPoints1[0][1] += b[0][1] * d[0][3];
+            break;
+          case mxConstants.DIRECTION_MASK_SOUTH:
+            mxEdgeStyle.wayPoints1[0][0] +=
+              b[0][0] * d[0][2];
+            mxEdgeStyle.wayPoints1[0][1] += d[0][3] + f;
+            break;
+          case mxConstants.DIRECTION_MASK_EAST:
+            mxEdgeStyle.wayPoints1[0][0] += d[0][2] + f;
+            mxEdgeStyle.wayPoints1[0][1] += b[0][1] * d[0][3];
+            break;
+          case mxConstants.DIRECTION_MASK_NORTH:
+            mxEdgeStyle.wayPoints1[0][0] += b[0][0] * d[0][2], mxEdgeStyle.wayPoints1[0][1] -= f
+        }
+        f = 0;
+        h = c = 0 < (a[0] & (mxConstants.DIRECTION_MASK_EAST | mxConstants.DIRECTION_MASK_WEST)) ? 0 : 1;
+        for (l = k = 0; l < r.length; l++) {
+          k = r[l] & 15;
+          s = k == mxConstants.DIRECTION_MASK_EAST ? 3 : k;
+          s += g;
+          4 < s && (s -= 4);
+          m = mxEdgeStyle.dirVectors[s -
+            1];
+          k = 0 < s % 2 ? 0 : 1;
+          k != c && (f++, mxEdgeStyle.wayPoints1[f][0] = mxEdgeStyle.wayPoints1[f - 1][0], mxEdgeStyle.wayPoints1[f][1] = mxEdgeStyle.wayPoints1[f - 1][1]);
+          var t = 0 < (r[l] & mxEdgeStyle.TARGET_MASK),
+            q = 0 < (r[l] & mxEdgeStyle.SOURCE_MASK),
+            n = (r[l] & mxEdgeStyle.SIDE_MASK) >> 5,
+            n = n << g;
+          15 < n && (n >>= 4);
+          p = 0 < (r[l] & mxEdgeStyle.CENTER_MASK);
+          (q || t) && 9 > n ? (s = 0, q = q ? 0 : 1, s = p && 0 == k ? d[q][0] + b[q][0] * d[q][2] : p ? d[q][1] + b[q][1] * d[q][3] : mxEdgeStyle.limits[q][n], 0 == k ? (n = (s - mxEdgeStyle.wayPoints1[
+            f][0]) * m[0], 0 < n && (mxEdgeStyle.wayPoints1[f][0] +=
+            m[0] * n)) : (n = (s - mxEdgeStyle.wayPoints1[f][1]) * m[1], 0 < n && (mxEdgeStyle.wayPoints1[f][1] += m[1] * n))) : p && (mxEdgeStyle.wayPoints1[f][0] += m[0] * Math.abs(mxEdgeStyle.vertexSeperations[
+            s] / 2), mxEdgeStyle.wayPoints1[f][1] += m[1] * Math.abs(mxEdgeStyle.vertexSeperations[s] / 2));
+          0 < f && mxEdgeStyle.wayPoints1[f][k] == mxEdgeStyle.wayPoints1[f - 1][k] ? f-- : c = k
+        }
+        for (l = 0; l <= f && !(l == f && ((0 < (a[1] & (mxConstants.DIRECTION_MASK_EAST | mxConstants.DIRECTION_MASK_WEST)) ? 0 : 1) == h ? 0 : 1) != (f + 1) % 2); l++) e.push(new mxPoint(
+          mxEdgeStyle.wayPoints1[l][0],
+          mxEdgeStyle.wayPoints1[l][1]))
+      }
+    },
+    getRoutePattern: function(a, b, c, d) {
+      var e = a[0] == mxConstants.DIRECTION_MASK_EAST ? 3 : a[0];
+      a = a[1] == mxConstants.DIRECTION_MASK_EAST ? 3 : a[1];
+      e -= b;
+      a -= b;
+      1 > e && (e += 4);
+      1 > a && (a += 4);
+      b = routePatterns[e - 1][a - 1];
+      if (0 == c || 0 == d) null != inlineRoutePatterns[e - 1][a - 1] && (b = inlineRoutePatterns[e - 1][a - 1]);
+      return b
+    }
+  },
+  mxStyleRegistry = {
+    values: [],
+    putValue: function(a, b) {
+      mxStyleRegistry.values[a] = b
+    },
+    getValue: function(a) {
+      return mxStyleRegistry.values[a]
+    },
+    getName: function(a) {
+      for (var b in mxStyleRegistry.values)
+        if (mxStyleRegistry.values[b] ==
+          a) return b;
+      return null
+    }
+  };
+mxStyleRegistry.putValue(mxConstants.EDGESTYLE_ELBOW, mxEdgeStyle.ElbowConnector);
+mxStyleRegistry.putValue(mxConstants.EDGESTYLE_ENTITY_RELATION, mxEdgeStyle.EntityRelation);
+mxStyleRegistry.putValue(mxConstants.EDGESTYLE_LOOP, mxEdgeStyle.Loop);
+mxStyleRegistry.putValue(mxConstants.EDGESTYLE_SIDETOSIDE, mxEdgeStyle.SideToSide);
+mxStyleRegistry.putValue(mxConstants.EDGESTYLE_TOPTOBOTTOM, mxEdgeStyle.TopToBottom);
+mxStyleRegistry.putValue(mxConstants.EDGESTYLE_ORTHOGONAL, mxEdgeStyle.OrthConnector);
+mxStyleRegistry.putValue(mxConstants.EDGESTYLE_SEGMENT, mxEdgeStyle.SegmentConnector);
+mxStyleRegistry.putValue(mxConstants.PERIMETER_ELLIPSE, mxPerimeter.EllipsePerimeter);
+mxStyleRegistry.putValue(mxConstants.PERIMETER_RECTANGLE, mxPerimeter.RectanglePerimeter);
+mxStyleRegistry.putValue(mxConstants.PERIMETER_RHOMBUS, mxPerimeter.RhombusPerimeter);
+mxStyleRegistry.putValue(mxConstants.PERIMETER_TRIANGLE, mxPerimeter.TrianglePerimeter);
+
+function mxGraphView(a) {
+  this.graph = a;
+  this.translate = new mxPoint;
+  this.graphBounds = new mxRectangle;
+  this.states = new mxDictionary
+}
+mxGraphView.prototype = new mxEventSource;
+mxGraphView.prototype.constructor = mxGraphView;
+mxGraphView.prototype.EMPTY_POINT = new mxPoint;
+mxGraphView.prototype.doneResource = "none" != mxClient.language ? "done" : "";
+mxGraphView.prototype.updatingDocumentResource = "none" != mxClient.language ? "updatingDocument" : "";
+mxGraphView.prototype.allowEval = !1;
+mxGraphView.prototype.captureDocumentGesture = !0;
+mxGraphView.prototype.optimizeVmlReflows = !0;
+mxGraphView.prototype.rendering = !0;
+mxGraphView.prototype.graph = null;
+mxGraphView.prototype.currentRoot = null;
+mxGraphView.prototype.graphBounds = null;
+mxGraphView.prototype.scale = 1;
+mxGraphView.prototype.translate = null;
+mxGraphView.prototype.updateStyle = !1;
+mxGraphView.prototype.getGraphBounds = function() {
+  return this.graphBounds
+};
+mxGraphView.prototype.setGraphBounds = function(a) {
+  this.graphBounds = a
+};
+mxGraphView.prototype.getBounds = function(a) {
+  var b = null;
+  if (null != a && 0 < a.length)
+    for (var c = this.graph.getModel(), d = 0; d < a.length; d++)
+      if (c.isVertex(a[d]) || c.isEdge(a[d])) {
+        var e = this.getState(a[d]);
+        null != e && (null == b ? b = new mxRectangle(e.x, e.y, e.width, e.height) : b.add(e))
+      }
+  return b
+};
+mxGraphView.prototype.setCurrentRoot = function(a) {
+  if (this.currentRoot != a) {
+    var b = new mxCurrentRootChange(this, a);
+    b.execute();
+    var c = new mxUndoableEdit(this, !1);
+    c.add(b);
+    this.fireEvent(new mxEventObject(mxEvent.UNDO, "edit", c));
+    this.graph.sizeDidChange()
+  }
+  return a
+};
+mxGraphView.prototype.scaleAndTranslate = function(a, b, c) {
+  var d = this.scale,
+    e = new mxPoint(this.translate.x, this.translate.y);
+  if (this.scale != a || this.translate.x != b || this.translate.y != c) this.scale = a, this.translate.x = b, this.translate.y = c, this.isEventsEnabled() && (this.revalidate(), this.graph.sizeDidChange());
+  this.fireEvent(new mxEventObject(mxEvent.SCALE_AND_TRANSLATE, "scale", a, "previousScale", d, "translate", this.translate, "previousTranslate", e))
+};
+mxGraphView.prototype.getScale = function() {
+  return this.scale
+};
+mxGraphView.prototype.setScale = function(a) {
+  var b = this.scale;
+  this.scale != a && (this.scale = a, this.isEventsEnabled() && (this.revalidate(), this.graph.sizeDidChange()));
+  this.fireEvent(new mxEventObject(mxEvent.SCALE, "scale", a, "previousScale", b))
+};
+mxGraphView.prototype.getTranslate = function() {
+  return this.translate
+};
+mxGraphView.prototype.setTranslate = function(a, b) {
+  var c = new mxPoint(this.translate.x, this.translate.y);
+  if (this.translate.x != a || this.translate.y != b) this.translate.x = a, this.translate.y = b, this.isEventsEnabled() && (this.revalidate(), this.graph.sizeDidChange());
+  this.fireEvent(new mxEventObject(mxEvent.TRANSLATE, "translate", this.translate, "previousTranslate", c))
+};
+mxGraphView.prototype.refresh = function() {
+  null != this.currentRoot && this.clear();
+  this.revalidate()
+};
+mxGraphView.prototype.revalidate = function() {
+  this.invalidate();
+  this.validate()
+};
+mxGraphView.prototype.clear = function(a, b, c) {
+  var d = this.graph.getModel();
+  a = a || d.getRoot();
+  b = null != b ? b : !1;
+  c = null != c ? c : !0;
+  this.removeState(a);
+  if (c && (b || a != this.currentRoot)) {
+    c = d.getChildCount(a);
+    for (var e = 0; e < c; e++) this.clear(d.getChildAt(a, e), b)
+  } else this.invalidate(a)
+};
+mxGraphView.prototype.invalidate = function(a, b, c, d) {
+  var e = this.graph.getModel();
+  a = a || e.getRoot();
+  b = null != b ? b : !0;
+  c = null != c ? c : !0;
+  d = null != d ? d : !1;
+  var f = this.getState(a);
+  null != f && (f.invalid = !0, d && (f.orderChanged = !0));
+  if (b)
+    for (var g = e.getChildCount(a), f = 0; f < g; f++) {
+      var h = e.getChildAt(a, f);
+      this.invalidate(h, b, c, d)
+    }
+  if (c) {
+    d = e.getEdgeCount(a);
+    for (f = 0; f < d; f++) this.invalidate(e.getEdgeAt(a, f), b, c)
+  }
+};
+mxGraphView.prototype.validate = function(a) {
+  var b = mxLog.enter("mxGraphView.validate");
+  window.status = mxResources.get(this.updatingDocumentResource) || this.updatingDocumentResource;
+  var c = null;
+  if (this.optimizeVmlReflows && null != this.canvas && null == this.textDiv && (8 == document.documentMode || mxClient.IS_QUIRKS)) {
+    c = this.canvas.style.display;
+    this.canvas.style.display = "none";
+    var d = document.createElement("div");
+    d.style.position = "absolute";
+    d.style.whiteSpace = "nowrap";
+    d.style.visibility = "hidden";
+    d.style.display = mxClient.IS_QUIRKS ?
+      "inline" : "inline-block";
+    d.style.zoom = "1";
+    document.body.appendChild(d);
+    this.textDiv = d
+  }
+  a = a || (null != this.currentRoot ? this.currentRoot : this.graph.getModel().getRoot());
+  this.validateBounds(null, a);
+  a = this.validatePoints(null, a);
+  null == a && (a = new mxRectangle);
+  this.setGraphBounds(a);
+  this.validateBackground();
+  null != c && (this.canvas.style.display = c, document.body.removeChild(this.textDiv), this.textDiv = null);
+  window.status = mxResources.get(this.doneResource) || this.doneResource;
+  mxLog.leave("mxGraphView.validate", b)
+};
+mxGraphView.prototype.createBackgroundPageShape = function(a) {
+  return new mxRectangleShape(a, "white", "black")
+};
+mxGraphView.prototype.validateBackground = function() {
+  var a = this.graph.getBackgroundImage();
+  if (null != a) {
+    if (null == this.backgroundImage || this.backgroundImage.image != a.src) {
+      null != this.backgroundImage && this.backgroundImage.destroy();
+      var b = new mxRectangle(0, 0, 1, 1);
+      this.backgroundImage = new mxImageShape(b, a.src);
+      this.backgroundImage.dialect = this.graph.dialect;
+      this.backgroundImage.init(this.backgroundPane);
+      this.backgroundImage.redraw()
+    }
+    this.redrawBackgroundImage(this.backgroundImage, a)
+  } else null != this.backgroundImage &&
+    (this.backgroundImage.destroy(), this.backgroundImage = null);
+  this.graph.pageVisible ? (b = this.getBackgroundPageBounds(), null == this.backgroundPageShape ? (this.backgroundPageShape = this.createBackgroundPageShape(b), this.backgroundPageShape.scale =
+    this.scale, this.backgroundPageShape.isShadow = !0, this.backgroundPageShape.dialect = this.graph.dialect, this.backgroundPageShape.init(this.backgroundPane), this.backgroundPageShape.redraw(),
+    mxEvent.addListener(this.backgroundPageShape.node, "dblclick", mxUtils.bind(this,
+      function(a) {
+        this.graph.dblClick(a)
+      })), mxEvent.addGestureListeners(this.backgroundPageShape.node, mxUtils.bind(this, function(a) {
+      this.graph.fireMouseEvent(mxEvent.MOUSE_DOWN, new mxMouseEvent(a))
+    }), mxUtils.bind(this, function(a) {
+      null != this.graph.tooltipHandler && this.graph.tooltipHandler.isHideOnHover() && this.graph.tooltipHandler.hide();
+      this.graph.isMouseDown && !mxEvent.isConsumed(a) && this.graph.fireMouseEvent(mxEvent.MOUSE_MOVE, new mxMouseEvent(a))
+    }), mxUtils.bind(this, function(a) {
+      this.graph.fireMouseEvent(mxEvent.MOUSE_UP,
+        new mxMouseEvent(a))
+    }))) : (this.backgroundPageShape.scale = this.scale, this.backgroundPageShape.bounds = b, this.backgroundPageShape.redraw())) : null != this.backgroundPageShape && (this.backgroundPageShape.destroy(),
+    this.backgroundPageShape = null)
+};
+mxGraphView.prototype.getBackgroundPageBounds = function() {
+  var a = this.graph.pageFormat,
+    b = this.scale * this.graph.pageScale;
+  return new mxRectangle(this.scale * this.translate.x, this.scale * this.translate.y, a.width * b, a.height * b)
+};
+mxGraphView.prototype.redrawBackgroundImage = function(a, b) {
+  a.scale = this.scale;
+  a.bounds.x = this.scale * this.translate.x;
+  a.bounds.y = this.scale * this.translate.y;
+  a.bounds.width = this.scale * b.width;
+  a.bounds.height = this.scale * b.height;
+  a.redraw()
+};
+mxGraphView.prototype.validateBounds = function(a, b) {
+  var c = this.graph.getModel(),
+    d = this.getState(b, !0);
+  if (null != d && d.invalid) {
+    if (this.graph.isCellVisible(b)) {
+      if (b != this.currentRoot && null != a) {
+        d.absoluteOffset.x = 0;
+        d.absoluteOffset.y = 0;
+        d.origin.x = a.origin.x;
+        d.origin.y = a.origin.y;
+        var e = this.graph.getCellGeometry(b);
+        if (null != e) {
+          if (!c.isEdge(b)) {
+            var f = e.offset || this.EMPTY_POINT;
+            e.relative ? (d.origin.x += e.x * a.width / this.scale + f.x, d.origin.y += e.y * a.height / this.scale + f.y) : (d.absoluteOffset.x = this.scale * f.x, d.absoluteOffset.y =
+              this.scale * f.y, d.origin.x += e.x, d.origin.y += e.y)
+          }
+          d.x = this.scale * (this.translate.x + d.origin.x);
+          d.y = this.scale * (this.translate.y + d.origin.y);
+          d.width = this.scale * e.width;
+          d.height = this.scale * e.height;
+          if (c.isVertex(b)) {
+            if (e.relative && (f = mxUtils.toRadians(a.style[mxConstants.STYLE_ROTATION] || "0"), 0 != f)) {
+              var e = Math.cos(f),
+                f = Math.sin(f),
+                g = new mxPoint(d.getCenterX(), d.getCenterY()),
+                h = new mxPoint(a.getCenterX(), a.getCenterY()),
+                e = mxUtils.getRotatedPoint(g, e, f, h);
+              d.x = e.x - d.width / 2;
+              d.y = e.y - d.height / 2
+            }
+            this.updateVertexLabelOffset(d)
+          }
+        }
+      }
+    } else this.removeState(b);
+    f = this.graph.getChildOffsetForCell(b);
+    null != f && (d.origin.x += f.x, d.origin.y += f.y)
+  }
+  if (null != d && (!this.graph.isCellCollapsed(b) || b == this.currentRoot)) {
+    e = c.getChildCount(b);
+    for (f = 0; f < e; f++) g = c.getChildAt(b, f), this.validateBounds(d, g)
+  }
+};
+mxGraphView.prototype.updateVertexLabelOffset = function(a) {
+  var b = mxUtils.getValue(a.style, mxConstants.STYLE_LABEL_POSITION, mxConstants.ALIGN_CENTER);
+  b == mxConstants.ALIGN_LEFT ? a.absoluteOffset.x -= a.width : b == mxConstants.ALIGN_RIGHT && (a.absoluteOffset.x += a.width);
+  b = mxUtils.getValue(a.style, mxConstants.STYLE_VERTICAL_LABEL_POSITION, mxConstants.ALIGN_MIDDLE);
+  b == mxConstants.ALIGN_TOP ? a.absoluteOffset.y -= a.height : b == mxConstants.ALIGN_BOTTOM && (a.absoluteOffset.y += a.height)
+};
+mxGraphView.prototype.validatePoints = function(a, b) {
+  var c = this.graph.getModel(),
+    d = this.getState(b),
+    e = null;
+  if (null != d) {
+    if (d.invalid) {
+      var f = this.graph.getCellGeometry(b);
+      if (null != f && c.isEdge(b)) {
+        var g = this.getState(this.getVisibleTerminal(b, !0));
+        d.setVisibleTerminalState(g, !0);
+        if (null != g && c.isEdge(g.cell) && !c.isAncestor(g.cell, b)) {
+          var h = this.getState(c.getParent(g.cell));
+          this.validatePoints(h, g.cell)
+        }
+        var k = this.getState(this.getVisibleTerminal(b, !1));
+        d.setVisibleTerminalState(k, !1);
+        null != k && (c.isEdge(k.cell) &&
+          !c.isAncestor(k.cell, b)) && (h = this.getState(c.getParent(k.cell)), this.validatePoints(h, k.cell));
+        this.updateFixedTerminalPoints(d, g, k);
+        this.updatePoints(d, f.points, g, k);
+        this.updateFloatingTerminalPoints(d, g, k);
+        this.updateEdgeBounds(d);
+        this.updateEdgeLabelOffset(d)
+      } else null != f && (f.relative && null != a && c.isEdge(a.cell)) && (f = this.getPoint(a, f), null != f && (d.x = f.x, d.y = f.y, f.x = f.x / this.scale - this.translate.x, f.y = f.y / this.scale -
+        this.translate.y, d.origin = f, this.childMoved(a, d)));
+      d.invalid = !1;
+      b != this.currentRoot &&
+        this.graph.cellRenderer.redraw(d, !1, this.isRendering())
+    }
+    if (c.isEdge(b) || c.isVertex(b)) null != d.shape && null != d.shape.boundingBox && (e = d.shape.boundingBox.clone()), null != d.text && !this.graph.isLabelClipped(d.cell) && null != d.text.boundingBox &&
+      (null != e ? e.add(d.text.boundingBox) : e = d.text.boundingBox.clone())
+  }
+  if (null != d && (!this.graph.isCellCollapsed(b) || b == this.currentRoot)) {
+    f = c.getChildCount(b);
+    for (g = 0; g < f; g++) h = c.getChildAt(b, g), h = this.validatePoints(d, h), null != h && (null == e ? e = h : e.add(h))
+  }
+  return e
+};
+mxGraphView.prototype.childMoved = function(a, b) {
+  var c = b.cell;
+  if (!this.graph.isCellCollapsed(c) || c == this.currentRoot)
+    for (var d = this.graph.getModel(), e = d.getChildCount(c), f = 0; f < e; f++) this.validateBounds(b, d.getChildAt(c, f))
+};
+mxGraphView.prototype.updateFixedTerminalPoints = function(a, b, c) {
+  this.updateFixedTerminalPoint(a, b, !0, this.graph.getConnectionConstraint(a, b, !0));
+  this.updateFixedTerminalPoint(a, c, !1, this.graph.getConnectionConstraint(a, c, !1))
+};
+mxGraphView.prototype.updateFixedTerminalPoint = function(a, b, c, d) {
+  var e = null;
+  null != d && (e = this.graph.getConnectionPoint(b, d));
+  if (null == e && null == b) {
+    b = this.scale;
+    d = this.translate;
+    var f = a.origin,
+      e = this.graph.getCellGeometry(a.cell).getTerminalPoint(c);
+    null != e && (e = new mxPoint(b * (d.x + e.x + f.x), b * (d.y + e.y + f.y)))
+  }
+  a.setAbsoluteTerminalPoint(e, c)
+};
+mxGraphView.prototype.updatePoints = function(a, b, c, d) {
+  if (null != a) {
+    var e = [];
+    e.push(a.absolutePoints[0]);
+    var f = this.getEdgeStyle(a, b, c, d);
+    if (null != f) c = this.getTerminalPort(a, c, !0), d = this.getTerminalPort(a, d, !1), f(a, c, d, b, e);
+    else if (null != b)
+      for (f = 0; f < b.length; f++) null != b[f] && (d = mxUtils.clone(b[f]), e.push(this.transformControlPoint(a, d)));
+    b = a.absolutePoints;
+    e.push(b[b.length - 1]);
+    a.absolutePoints = e
+  }
+};
+mxGraphView.prototype.transformControlPoint = function(a, b) {
+  var c = a.origin;
+  return new mxPoint(this.scale * (b.x + this.translate.x + c.x), this.scale * (b.y + this.translate.y + c.y))
+};
+mxGraphView.prototype.getEdgeStyle = function(a, b, c, d) {
+  a = null != c && c == d ? mxUtils.getValue(a.style, mxConstants.STYLE_LOOP, this.graph.defaultLoopStyle) : !mxUtils.getValue(a.style, mxConstants.STYLE_NOEDGESTYLE, !1) ? a.style[mxConstants.STYLE_EDGE] :
+    null;
+  "string" == typeof a && (b = mxStyleRegistry.getValue(a), null == b && this.isAllowEval() && (b = mxUtils.eval(a)), a = b);
+  return "function" == typeof a ? a : null
+};
+mxGraphView.prototype.updateFloatingTerminalPoints = function(a, b, c) {
+  var d = a.absolutePoints,
+    e = d[0];
+  null == d[d.length - 1] && null != c && this.updateFloatingTerminalPoint(a, c, b, !1);
+  null == e && null != b && this.updateFloatingTerminalPoint(a, b, c, !0)
+};
+mxGraphView.prototype.updateFloatingTerminalPoint = function(a, b, c, d) {
+  b = this.getTerminalPort(a, b, d);
+  var e = this.getNextPoint(a, c, d),
+    f = this.graph.isOrthogonal(a);
+  c = mxUtils.toRadians(Number(b.style[mxConstants.STYLE_ROTATION] || "0"));
+  var g = new mxPoint(b.getCenterX(), b.getCenterY());
+  if (0 != c) var h = Math.cos(-c),
+    k = Math.sin(-c),
+    e = mxUtils.getRotatedPoint(e, h, k, g);
+  h = parseFloat(a.style[mxConstants.STYLE_PERIMETER_SPACING] || 0);
+  h += parseFloat(a.style[d ? mxConstants.STYLE_SOURCE_PERIMETER_SPACING : mxConstants.STYLE_TARGET_PERIMETER_SPACING] ||
+    0);
+  b = this.getPerimeterPoint(b, e, 0 == c && f, h);
+  0 != c && (h = Math.cos(c), k = Math.sin(c), b = mxUtils.getRotatedPoint(b, h, k, g));
+  a.setAbsoluteTerminalPoint(b, d)
+};
+mxGraphView.prototype.getTerminalPort = function(a, b, c) {
+  a = mxUtils.getValue(a.style, c ? mxConstants.STYLE_SOURCE_PORT : mxConstants.STYLE_TARGET_PORT);
+  null != a && (a = this.getState(this.graph.getModel().getCell(a)), null != a && (b = a));
+  return b
+};
+mxGraphView.prototype.getPerimeterPoint = function(a, b, c, d) {
+  var e = null;
+  if (null != a) {
+    var f = this.getPerimeterFunction(a);
+    if (null != f && null != b && (d = this.getPerimeterBounds(a, d), 0 < d.width || 0 < d.height)) e = f(d, a, b, c);
+    null == e && (e = this.getPoint(a))
+  }
+  return e
+};
+mxGraphView.prototype.getRoutingCenterX = function(a) {
+  var b = null != a.style ? parseFloat(a.style[mxConstants.STYLE_ROUTING_CENTER_X]) || 0 : 0;
+  return a.getCenterX() + b * a.width
+};
+mxGraphView.prototype.getRoutingCenterY = function(a) {
+  var b = null != a.style ? parseFloat(a.style[mxConstants.STYLE_ROUTING_CENTER_Y]) || 0 : 0;
+  return a.getCenterY() + b * a.height
+};
+mxGraphView.prototype.getPerimeterBounds = function(a, b) {
+  b = null != b ? b : 0;
+  null != a && (b += parseFloat(a.style[mxConstants.STYLE_PERIMETER_SPACING] || 0));
+  return a.getPerimeterBounds(b * this.scale)
+};
+mxGraphView.prototype.getPerimeterFunction = function(a) {
+  a = a.style[mxConstants.STYLE_PERIMETER];
+  if ("string" == typeof a) {
+    var b = mxStyleRegistry.getValue(a);
+    null == b && this.isAllowEval() && (b = mxUtils.eval(a));
+    a = b
+  }
+  return "function" == typeof a ? a : null
+};
+mxGraphView.prototype.getNextPoint = function(a, b, c) {
+  a = a.absolutePoints;
+  var d = null;
+  if (null != a && (c || 2 < a.length || null == b)) d = a.length, d = a[c ? Math.min(1, d - 1) : Math.max(0, d - 2)];
+  null == d && null != b && (d = new mxPoint(b.getCenterX(), b.getCenterY()));
+  return d
+};
+mxGraphView.prototype.getVisibleTerminal = function(a, b) {
+  for (var c = this.graph.getModel(), d = c.getTerminal(a, b), e = d; null != d && d != this.currentRoot;) {
+    if (!this.graph.isCellVisible(e) || this.graph.isCellCollapsed(d)) e = d;
+    d = c.getParent(d)
+  }
+  c.getParent(e) == c.getRoot() && (e = null);
+  return e
+};
+mxGraphView.prototype.updateEdgeBounds = function(a) {
+  var b = a.absolutePoints;
+  a.length = 0;
+  if (null != b && 0 < b.length) {
+    var c = b[0],
+      d = b[b.length - 1];
+    if (null == c || null == d) a.cell != this.currentRoot && this.clear(a.cell, !0);
+    else {
+      if (c.x != d.x || c.y != d.y) {
+        var e = d.x - c.x,
+          f = d.y - c.y;
+        a.terminalDistance = Math.sqrt(e * e + f * f)
+      } else a.terminalDistance = 0;
+      var d = 0,
+        g = [],
+        f = c;
+      if (null != f) {
+        for (var c = f.x, h = f.y, k = c, l = h, m = 1; m < b.length; m++) {
+          var n = b[m];
+          null != n && (e = f.x - n.x, f = f.y - n.y, e = Math.sqrt(e * e + f * f), g.push(e), d += e, f = n, c = Math.min(f.x, c), h = Math.min(f.y,
+            h), k = Math.max(f.x, k), l = Math.max(f.y, l))
+        }
+        a.length = d;
+        a.segments = g;
+        a.x = c;
+        a.y = h;
+        a.width = Math.max(1, k - c);
+        a.height = Math.max(1, l - h)
+      }
+    }
+  }
+};
+mxGraphView.prototype.getPoint = function(a, b) {
+  var c = a.getCenterX(),
+    d = a.getCenterY();
+  if (null != a.segments && (null == b || b.relative)) {
+    for (var e = a.absolutePoints.length, f = ((null != b ? b.x / 2 : 0) + 0.5) * a.length, g = a.segments[0], h = 0, k = 1; f > h + g && k < e - 1;) h += g, g = a.segments[k++];
+    e = 0 == g ? 0 : (f - h) / g;
+    f = a.absolutePoints[k - 1];
+    k = a.absolutePoints[k];
+    if (null != f && null != k) {
+      h = c = d = 0;
+      if (null != b) {
+        var d = b.y,
+          l = b.offset;
+        null != l && (c = l.x, h = l.y)
+      }
+      l = k.x - f.x;
+      k = k.y - f.y;
+      c = f.x + l * e + ((0 == g ? 0 : k / g) * d + c) * this.scale;
+      d = f.y + k * e - ((0 == g ? 0 : l / g) * d - h) * this.scale
+    }
+  } else null !=
+    b && (l = b.offset, null != l && (c += l.x, d += l.y));
+  return new mxPoint(c, d)
+};
+mxGraphView.prototype.getRelativePoint = function(a, b, c) {
+  var d = this.graph.getModel().getGeometry(a.cell);
+  if (null != d) {
+    var e = a.absolutePoints.length;
+    if (d.relative && 1 < e) {
+      for (var d = a.length, f = a.segments, g = a.absolutePoints[0], h = a.absolutePoints[1], k = mxUtils.ptSegDistSq(g.x, g.y, h.x, h.y, b, c), l = 0, m = 0, n = 0, p = 2; p < e; p++) m += f[p -
+        2], h = a.absolutePoints[p], g = mxUtils.ptSegDistSq(g.x, g.y, h.x, h.y, b, c), g <= k && (k = g, l = p - 1, n = m), g = h;
+      e = f[l];
+      g = a.absolutePoints[l];
+      h = a.absolutePoints[l + 1];
+      k = h.x;
+      f = h.y;
+      a = g.x - k;
+      l = g.y - f;
+      k = b - k;
+      f = c - f;
+      k = a - k;
+      f = l - f;
+      f = k * a + f * l;
+      a = Math.sqrt(0 >= f ? 0 : f * f / (a * a + l * l));
+      a > e && (a = e);
+      e = Math.sqrt(mxUtils.ptSegDistSq(g.x, g.y, h.x, h.y, b, c)); - 1 == mxUtils.relativeCcw(g.x, g.y, h.x, h.y, b, c) && (e = -e);
+      return new mxPoint(-2 * ((d / 2 - n - a) / d), e / this.scale)
+    }
+  }
+  return new mxPoint
+};
+mxGraphView.prototype.updateEdgeLabelOffset = function(a) {
+  var b = a.absolutePoints;
+  a.absoluteOffset.x = a.getCenterX();
+  a.absoluteOffset.y = a.getCenterY();
+  if (null != b && 0 < b.length && null != a.segments) {
+    var c = this.graph.getCellGeometry(a.cell);
+    if (c.relative) {
+      var d = this.getPoint(a, c);
+      null != d && (a.absoluteOffset = d)
+    } else {
+      var d = b[0],
+        e = b[b.length - 1];
+      if (null != d && null != e) {
+        var b = e.x - d.x,
+          f = e.y - d.y,
+          g = e = 0,
+          c = c.offset;
+        null != c && (e = c.x, g = c.y);
+        c = d.y + f / 2 + g * this.scale;
+        a.absoluteOffset.x = d.x + b / 2 + e * this.scale;
+        a.absoluteOffset.y = c
+      }
+    }
+  }
+};
+mxGraphView.prototype.getState = function(a, b) {
+  b = b || !1;
+  var c = null;
+  null != a && (c = this.states.get(a), this.graph.isCellVisible(a) && (null == c && b && this.graph.isCellVisible(a) ? (c = this.createState(a), this.states.put(a, c)) : b && (null != c && this.updateStyle) &&
+    (c.style = this.graph.getCellStyle(a))));
+  return c
+};
+mxGraphView.prototype.isRendering = function() {
+  return this.rendering
+};
+mxGraphView.prototype.setRendering = function(a) {
+  this.rendering = a
+};
+mxGraphView.prototype.isAllowEval = function() {
+  return this.allowEval
+};
+mxGraphView.prototype.setAllowEval = function(a) {
+  this.allowEval = a
+};
+mxGraphView.prototype.getStates = function() {
+  return this.states
+};
+mxGraphView.prototype.setStates = function(a) {
+  this.states = a
+};
+mxGraphView.prototype.getCellStates = function(a) {
+  if (null == a) return this.states;
+  for (var b = [], c = 0; c < a.length; c++) {
+    var d = this.getState(a[c]);
+    null != d && b.push(d)
+  }
+  return b
+};
+mxGraphView.prototype.removeState = function(a) {
+  var b = null;
+  null != a && (b = this.states.remove(a), null != b && (this.graph.cellRenderer.destroy(b), b.destroy()));
+  return b
+};
+mxGraphView.prototype.createState = function(a) {
+  var b = this.graph.getCellStyle(a);
+  a = new mxCellState(this, a, b);
+  this.graph.cellRenderer.initialize(a, this.isRendering());
+  return a
+};
+mxGraphView.prototype.getCanvas = function() {
+  return this.canvas
+};
+mxGraphView.prototype.getBackgroundPane = function() {
+  return this.backgroundPane
+};
+mxGraphView.prototype.getDrawPane = function() {
+  return this.drawPane
+};
+mxGraphView.prototype.getOverlayPane = function() {
+  return this.overlayPane
+};
+mxGraphView.prototype.isContainerEvent = function(a) {
+  a = mxEvent.getSource(a);
+  return a == this.graph.container || a.parentNode == this.backgroundPane || null != a.parentNode && a.parentNode.parentNode == this.backgroundPane || a == this.canvas.parentNode || a == this.canvas ||
+    a == this.backgroundPane || a == this.drawPane || a == this.overlayPane
+};
+mxGraphView.prototype.isScrollEvent = function(a) {
+  var b = mxUtils.getOffset(this.graph.container);
+  a = new mxPoint(a.clientX - b.x, a.clientY - b.y);
+  var b = this.graph.container.offsetWidth,
+    c = this.graph.container.clientWidth;
+  if (b > c && a.x > c + 2 && a.x <= b) return !0;
+  b = this.graph.container.offsetHeight;
+  c = this.graph.container.clientHeight;
+  return b > c && a.y > c + 2 && a.y <= b ? !0 : !1
+};
+mxGraphView.prototype.init = function() {
+  this.installListeners();
+  var a = this.graph;
+  a.dialect == mxConstants.DIALECT_SVG ? this.createSvg() : a.dialect == mxConstants.DIALECT_VML ? this.createVml() : this.createHtml()
+};
+mxGraphView.prototype.installListeners = function() {
+  var a = this.graph,
+    b = a.container;
+  if (null != b) {
+    mxEvent.addGestureListeners(b, mxUtils.bind(this, function(b) {
+      mxClient.IS_TOUCH && a.isEditing() && a.stopEditing(!a.isInvokesStopCellEditing());
+      this.isContainerEvent(b) && (!mxClient.IS_IE && !mxClient.IS_GC && !mxClient.IS_OP && !mxClient.IS_SF || !this.isScrollEvent(b)) && a.fireMouseEvent(mxEvent.MOUSE_DOWN, new mxMouseEvent(
+        b))
+    }), mxUtils.bind(this, function(b) {
+      this.isContainerEvent(b) && a.fireMouseEvent(mxEvent.MOUSE_MOVE,
+        new mxMouseEvent(b))
+    }), mxUtils.bind(this, function(b) {
+      this.isContainerEvent(b) && a.fireMouseEvent(mxEvent.MOUSE_UP, new mxMouseEvent(b))
+    }));
+    mxEvent.addListener(b, "dblclick", mxUtils.bind(this, function(b) {
+      a.dblClick(b)
+    }));
+    var c = function(c) {
+      var e = null;
+      mxClient.IS_TOUCH && (e = mxEvent.getClientX(c), c = mxEvent.getClientY(c), c = mxUtils.convertPoint(b, e, c), e = a.view.getState(a.getCellAt(c.x, c.y)));
+      return e
+    };
+    a.addMouseListener({
+      mouseDown: function(b, c) {
+        a.panningHandler.hideMenu()
+      },
+      mouseMove: function() {},
+      mouseUp: function() {}
+    });
+    this.moveHandler = mxUtils.bind(this, function(b) {
+      null != a.tooltipHandler && a.tooltipHandler.isHideOnHover() && a.tooltipHandler.hide();
+      this.captureDocumentGesture && (a.isMouseDown && !mxEvent.isConsumed(b)) && a.fireMouseEvent(mxEvent.MOUSE_MOVE, new mxMouseEvent(b, c(b)))
+    });
+    this.endHandler = mxUtils.bind(this, function(b) {
+      this.captureDocumentGesture && a.fireMouseEvent(mxEvent.MOUSE_UP, new mxMouseEvent(b))
+    });
+    mxEvent.addGestureListeners(document, null, this.moveHandler, this.endHandler)
+  }
+};
+mxGraphView.prototype.createHtml = function() {
+  var a = this.graph.container;
+  null != a && (this.canvas = this.createHtmlPane("100%", "100%"), this.backgroundPane = this.createHtmlPane("1px", "1px"), this.drawPane = this.createHtmlPane("1px", "1px"), this.overlayPane =
+    this.createHtmlPane("1px", "1px"), this.canvas.appendChild(this.backgroundPane), this.canvas.appendChild(this.drawPane), this.canvas.appendChild(this.overlayPane), a.appendChild(this.canvas),
+    mxClient.IS_QUIRKS && (a = mxUtils.bind(this, function(a) {
+      a = this.getGraphBounds();
+      this.updateHtmlCanvasSize(a.x + a.width + this.graph.border, a.y + a.height + this.graph.border)
+    }), mxEvent.addListener(window, "resize", a)))
+};
+mxGraphView.prototype.updateHtmlCanvasSize = function(a, b) {
+  if (null != this.graph.container) {
+    var c = this.graph.container.offsetHeight;
+    this.canvas.style.width = this.graph.container.offsetWidth < a ? a + "px" : "100%";
+    this.canvas.style.height = c < b ? b + "px" : "100%"
+  }
+};
+mxGraphView.prototype.createHtmlPane = function(a, b) {
+  var c = document.createElement("DIV");
+  null != a && null != b ? (c.style.position = "absolute", c.style.left = "0px", c.style.top = "0px", c.style.width = a, c.style.height = b) : c.style.position = "relative";
+  return c
+};
+mxGraphView.prototype.createVml = function() {
+  var a = this.graph.container;
+  if (null != a) {
+    var b = a.offsetWidth,
+      c = a.offsetHeight;
+    this.canvas = this.createVmlPane(b, c);
+    this.backgroundPane = this.createVmlPane(b, c);
+    this.drawPane = this.createVmlPane(b, c);
+    this.overlayPane = this.createVmlPane(b, c);
+    this.canvas.appendChild(this.backgroundPane);
+    this.canvas.appendChild(this.drawPane);
+    this.canvas.appendChild(this.overlayPane);
+    a.appendChild(this.canvas)
+  }
+};
+mxGraphView.prototype.createVmlPane = function(a, b) {
+  var c = document.createElement(mxClient.VML_PREFIX + ":group");
+  c.style.position = "absolute";
+  c.style.left = "0px";
+  c.style.top = "0px";
+  c.style.width = a + "px";
+  c.style.height = b + "px";
+  c.setAttribute("coordsize", a + "," + b);
+  c.setAttribute("coordorigin", "0,0");
+  return c
+};
+mxGraphView.prototype.createSvg = function() {
+  var a = this.graph.container;
+  this.canvas = document.createElementNS(mxConstants.NS_SVG, "g");
+  this.backgroundPane = document.createElementNS(mxConstants.NS_SVG, "g");
+  this.canvas.appendChild(this.backgroundPane);
+  this.drawPane = document.createElementNS(mxConstants.NS_SVG, "g");
+  this.canvas.appendChild(this.drawPane);
+  this.overlayPane = document.createElementNS(mxConstants.NS_SVG, "g");
+  this.canvas.appendChild(this.overlayPane);
+  var b = document.createElementNS(mxConstants.NS_SVG,
+    "svg");
+  b.style.width = "100%";
+  b.style.height = "100%";
+  b.style.display = "block";
+  b.appendChild(this.canvas);
+  null != a && (a.appendChild(b), "static" == mxUtils.getCurrentStyle(a).position && (a.style.position = "relative"))
+};
+mxGraphView.prototype.destroy = function() {
+  var a = null != this.canvas ? this.canvas.ownerSVGElement : null;
+  null == a && (a = this.canvas);
+  null != a && null != a.parentNode && (this.clear(this.currentRoot, !0), mxEvent.removeGestureListeners(document, null, this.moveHandler, this.endHandler), mxEvent.release(this.graph.container), a
+    .parentNode.removeChild(a), this.overlayPane = this.drawPane = this.backgroundPane = this.canvas = this.endHandler = this.moveHandler = null)
+};
+
+function mxCurrentRootChange(a, b) {
+  this.view = a;
+  this.previous = this.root = b;
+  this.isUp = null == b;
+  if (!this.isUp)
+    for (var c = this.view.currentRoot, d = this.view.graph.getModel(); null != c;) {
+      if (c == b) {
+        this.isUp = !0;
+        break
+      }
+      c = d.getParent(c)
+    }
+}
+mxCurrentRootChange.prototype.execute = function() {
+  var a = this.view.currentRoot;
+  this.view.currentRoot = this.previous;
+  this.previous = a;
+  a = this.view.graph.getTranslateForRoot(this.view.currentRoot);
+  null != a && (this.view.translate = new mxPoint(-a.x, -a.y));
+  this.view.fireEvent(new mxEventObject(this.isUp ? mxEvent.UP : mxEvent.DOWN, "root", this.view.currentRoot, "previous", this.previous));
+  this.isUp ? (this.view.clear(this.view.currentRoot, !0), this.view.validate()) : this.view.refresh();
+  this.isUp = !this.isUp
+};
+
+function mxGraph(a, b, c, d) {
+  this.mouseListeners = null;
+  this.renderHint = c;
+  this.dialect = mxClient.IS_SVG ? mxConstants.DIALECT_SVG : c == mxConstants.RENDERING_HINT_EXACT && mxClient.IS_VML ? mxConstants.DIALECT_VML : c == mxConstants.RENDERING_HINT_FASTEST ? mxConstants
+    .DIALECT_STRICTHTML : c == mxConstants.RENDERING_HINT_FASTER ? mxConstants.DIALECT_PREFERHTML : mxConstants.DIALECT_MIXEDHTML;
+  this.model = null != b ? b : new mxGraphModel;
+  this.multiplicities = [];
+  this.imageBundles = [];
+  this.cellRenderer = this.createCellRenderer();
+  this.setSelectionModel(this.createSelectionModel());
+  this.setStylesheet(null != d ? d : this.createStylesheet());
+  this.view = this.createGraphView();
+  this.graphModelChangeListener = mxUtils.bind(this, function(a, b) {
+    this.graphModelChanged(b.getProperty("edit").changes)
+  });
+  this.model.addListener(mxEvent.CHANGE, this.graphModelChangeListener);
+  this.createHandlers();
+  null != a && this.init(a);
+  this.view.revalidate()
+}
+mxLoadResources && mxResources.add(mxClient.basePath + "/resources/graph");
+mxGraph.prototype = new mxEventSource;
+mxGraph.prototype.constructor = mxGraph;
+mxGraph.prototype.EMPTY_ARRAY = [];
+mxGraph.prototype.mouseListeners = null;
+mxGraph.prototype.isMouseDown = !1;
+mxGraph.prototype.model = null;
+mxGraph.prototype.view = null;
+mxGraph.prototype.stylesheet = null;
+mxGraph.prototype.selectionModel = null;
+mxGraph.prototype.cellEditor = null;
+mxGraph.prototype.cellRenderer = null;
+mxGraph.prototype.multiplicities = null;
+mxGraph.prototype.renderHint = null;
+mxGraph.prototype.dialect = null;
+mxGraph.prototype.gridSize = 10;
+mxGraph.prototype.gridEnabled = !0;
+mxGraph.prototype.portsEnabled = !0;
+mxGraph.prototype.doubleTapEnabled = !0;
+mxGraph.prototype.doubleTapTimeout = 700;
+mxGraph.prototype.doubleTapTolerance = 25;
+mxGraph.prototype.lastTouchY = 0;
+mxGraph.prototype.lastTouchY = 0;
+mxGraph.prototype.lastTouchTime = 0;
+mxGraph.prototype.gestureEnabled = !0;
+mxGraph.prototype.tolerance = 4;
+mxGraph.prototype.defaultOverlap = 0.5;
+mxGraph.prototype.defaultParent = null;
+mxGraph.prototype.alternateEdgeStyle = null;
+mxGraph.prototype.backgroundImage = null;
+mxGraph.prototype.pageVisible = !1;
+mxGraph.prototype.pageBreaksVisible = !1;
+mxGraph.prototype.pageBreakColor = "gray";
+mxGraph.prototype.pageBreakDashed = !0;
+mxGraph.prototype.minPageBreakDist = 20;
+mxGraph.prototype.preferPageSize = !1;
+mxGraph.prototype.pageFormat = mxConstants.PAGE_FORMAT_A4_PORTRAIT;
+mxGraph.prototype.pageScale = 1.5;
+mxGraph.prototype.enabled = !0;
+mxGraph.prototype.escapeEnabled = !0;
+mxGraph.prototype.invokesStopCellEditing = !0;
+mxGraph.prototype.enterStopsCellEditing = !1;
+mxGraph.prototype.useScrollbarsForPanning = !0;
+mxGraph.prototype.exportEnabled = !0;
+mxGraph.prototype.importEnabled = !0;
+mxGraph.prototype.cellsLocked = !1;
+mxGraph.prototype.cellsCloneable = !0;
+mxGraph.prototype.foldingEnabled = !0;
+mxGraph.prototype.cellsEditable = !0;
+mxGraph.prototype.cellsDeletable = !0;
+mxGraph.prototype.cellsMovable = !0;
+mxGraph.prototype.edgeLabelsMovable = !0;
+mxGraph.prototype.vertexLabelsMovable = !1;
+mxGraph.prototype.dropEnabled = !1;
+mxGraph.prototype.splitEnabled = !0;
+mxGraph.prototype.cellsResizable = !0;
+mxGraph.prototype.cellsBendable = !0;
+mxGraph.prototype.cellsSelectable = !0;
+mxGraph.prototype.cellsDisconnectable = !0;
+mxGraph.prototype.autoSizeCells = !1;
+mxGraph.prototype.autoScroll = !0;
+mxGraph.prototype.timerAutoScroll = !1;
+mxGraph.prototype.allowAutoPanning = !1;
+mxGraph.prototype.ignoreScrollbars = !1;
+mxGraph.prototype.autoExtend = !0;
+mxGraph.prototype.maximumGraphBounds = null;
+mxGraph.prototype.minimumGraphSize = null;
+mxGraph.prototype.minimumContainerSize = null;
+mxGraph.prototype.maximumContainerSize = null;
+mxGraph.prototype.resizeContainer = !1;
+mxGraph.prototype.border = 0;
+mxGraph.prototype.ordered = !0;
+mxGraph.prototype.keepEdgesInForeground = !1;
+mxGraph.prototype.keepEdgesInBackground = !0;
+mxGraph.prototype.allowNegativeCoordinates = !0;
+mxGraph.prototype.constrainChildren = !0;
+mxGraph.prototype.extendParents = !0;
+mxGraph.prototype.extendParentsOnAdd = !0;
+mxGraph.prototype.collapseToPreferredSize = !0;
+mxGraph.prototype.zoomFactor = 1.2;
+mxGraph.prototype.keepSelectionVisibleOnZoom = !1;
+mxGraph.prototype.centerZoom = !0;
+mxGraph.prototype.resetViewOnRootChange = !0;
+mxGraph.prototype.resetEdgesOnResize = !1;
+mxGraph.prototype.resetEdgesOnMove = !1;
+mxGraph.prototype.resetEdgesOnConnect = !0;
+mxGraph.prototype.allowLoops = !1;
+mxGraph.prototype.defaultLoopStyle = mxEdgeStyle.Loop;
+mxGraph.prototype.multigraph = !0;
+mxGraph.prototype.connectableEdges = !1;
+mxGraph.prototype.allowDanglingEdges = !0;
+mxGraph.prototype.cloneInvalidEdges = !1;
+mxGraph.prototype.disconnectOnMove = !0;
+mxGraph.prototype.labelsVisible = !0;
+mxGraph.prototype.htmlLabels = !1;
+mxGraph.prototype.swimlaneSelectionEnabled = !0;
+mxGraph.prototype.swimlaneNesting = !0;
+mxGraph.prototype.swimlaneIndicatorColorAttribute = mxConstants.STYLE_FILLCOLOR;
+mxGraph.prototype.imageBundles = null;
+mxGraph.prototype.minFitScale = 0.1;
+mxGraph.prototype.maxFitScale = 8;
+mxGraph.prototype.panDx = 0;
+mxGraph.prototype.panDy = 0;
+mxGraph.prototype.collapsedImage = new mxImage(mxClient.imageBasePath + "/collapsed.gif", 9, 9);
+mxGraph.prototype.expandedImage = new mxImage(mxClient.imageBasePath + "/expanded.gif", 9, 9);
+// mxGraph.prototype.warningImage = new mxImage(mxClient.imageBasePath + "/warning" + (mxClient.IS_MAC ? ".png" : ".gif"), 16, 16);
+mxGraph.prototype.warningImage = new mxImage("/assets/plugins/mxgraph/images/warning.gif", 16, 16);
+
+
+mxGraph.prototype.alreadyConnectedResource = "none" != mxClient.language ? "alreadyConnected" : "";
+mxGraph.prototype.containsValidationErrorsResource = "none" != mxClient.language ? "containsValidationErrors" : "";
+mxGraph.prototype.collapseExpandResource = "none" != mxClient.language ? "collapse-expand" : "";
+mxGraph.prototype.init = function(a) {
+  this.container = a;
+  this.cellEditor = this.createCellEditor();
+  this.view.init();
+  this.sizeDidChange();
+  mxClient.IS_IE && (mxEvent.addListener(window, "unload", mxUtils.bind(this, function() {
+    this.destroy()
+  })), mxEvent.addListener(a, "selectstart", mxUtils.bind(this, function() {
+    return this.isEditing()
+  })));
+  8 == document.documentMode && a.insertAdjacentHTML("beforeend", '\x3cv:group style\x3d"DISPLAY: none;"\x3e\x3c/v:group\x3e')
+};
+mxGraph.prototype.createHandlers = function(a) {
+  this.tooltipHandler = new mxTooltipHandler(this);
+  this.tooltipHandler.setEnabled(!1);
+  this.panningHandler = new mxPanningHandler(this);
+  this.panningHandler.panningEnabled = !1;
+  this.selectionCellsHandler = new mxSelectionCellsHandler(this);
+  this.connectionHandler = new mxConnectionHandler(this);
+  this.connectionHandler.setEnabled(!1);
+  this.graphHandler = new mxGraphHandler(this)
+};
+mxGraph.prototype.createSelectionModel = function() {
+  return new mxGraphSelectionModel(this)
+};
+mxGraph.prototype.createStylesheet = function() {
+  return new mxStylesheet
+};
+mxGraph.prototype.createGraphView = function() {
+  return new mxGraphView(this)
+};
+mxGraph.prototype.createCellRenderer = function() {
+  return new mxCellRenderer
+};
+mxGraph.prototype.createCellEditor = function() {
+  return new mxCellEditor(this)
+};
+mxGraph.prototype.getModel = function() {
+  return this.model
+};
+mxGraph.prototype.getView = function() {
+  return this.view
+};
+mxGraph.prototype.getStylesheet = function() {
+  return this.stylesheet
+};
+mxGraph.prototype.setStylesheet = function(a) {
+  this.stylesheet = a
+};
+mxGraph.prototype.getSelectionModel = function() {
+  return this.selectionModel
+};
+mxGraph.prototype.setSelectionModel = function(a) {
+  this.selectionModel = a
+};
+mxGraph.prototype.getSelectionCellsForChanges = function(a) {
+  for (var b = [], c = 0; c < a.length; c++) {
+    var d = a[c];
+    if (d.constructor != mxRootChange) {
+      var e = null;
+      d instanceof mxChildChange && null == d.previous ? e = d.child : null != d.cell && d.cell instanceof mxCell && (e = d.cell);
+      null != e && 0 > mxUtils.indexOf(b, e) && b.push(e)
+    }
+  }
+  return this.getModel().getTopmostCells(b)
+};
+mxGraph.prototype.graphModelChanged = function(a) {
+  for (var b = 0; b < a.length; b++) this.processChange(a[b]);
+  this.removeSelectionCells(this.getRemovedCellsForChanges(a));
+  this.view.validate();
+  this.sizeDidChange()
+};
+mxGraph.prototype.getRemovedCellsForChanges = function(a) {
+  for (var b = [], c = 0; c < a.length; c++) {
+    var d = a[c];
+    if (d instanceof mxRootChange) break;
+    else d instanceof mxChildChange ? null != d.previous && null == d.parent && (b = b.concat(this.model.getDescendants(d.child))) : d instanceof mxVisibleChange && (b = b.concat(this.model.getDescendants(
+      d.cell)))
+  }
+  return b
+};
+mxGraph.prototype.processChange = function(a) {
+  if (a instanceof mxRootChange) this.clearSelection(), this.removeStateForCell(a.previous), this.resetViewOnRootChange && (this.view.scale = 1, this.view.translate.x = 0, this.view.translate.y = 0),
+    this.fireEvent(new mxEventObject(mxEvent.ROOT));
+  else if (a instanceof mxChildChange) {
+    var b = this.model.getParent(a.child);
+    null != b ? this.view.invalidate(a.child, !0, !1, null != a.previous) : (this.removeStateForCell(a.child), this.view.currentRoot == a.child && this.home());
+    b != a.previous &&
+      (null != b && this.view.invalidate(b, !1, !1), null != a.previous && this.view.invalidate(a.previous, !1, !1))
+  } else a instanceof mxTerminalChange || a instanceof mxGeometryChange ? this.view.invalidate(a.cell) : a instanceof mxValueChange ? this.view.invalidate(a.cell, !1, !1) : a instanceof mxStyleChange ?
+    (this.view.invalidate(a.cell, !0, !0, !1), this.view.removeState(a.cell)) : null != a.cell && a.cell instanceof mxCell && this.removeStateForCell(a.cell)
+};
+mxGraph.prototype.removeStateForCell = function(a) {
+  for (var b = this.model.getChildCount(a), c = 0; c < b; c++) this.removeStateForCell(this.model.getChildAt(a, c));
+  this.view.removeState(a)
+};
+mxGraph.prototype.addCellOverlay = function(a, b) {
+  null == a.overlays && (a.overlays = []);
+  a.overlays.push(b);
+  var c = this.view.getState(a);
+  null != c && this.cellRenderer.redraw(c);
+  this.fireEvent(new mxEventObject(mxEvent.ADD_OVERLAY, "cell", a, "overlay", b));
+  return b
+};
+mxGraph.prototype.getCellOverlays = function(a) {
+  return a.overlays
+};
+mxGraph.prototype.removeCellOverlay = function(a, b) {
+  if (null == b) this.removeCellOverlays(a);
+  else {
+    var c = mxUtils.indexOf(a.overlays, b);
+    0 <= c ? (a.overlays.splice(c, 1), 0 == a.overlays.length && (a.overlays = null), c = this.view.getState(a), null != c && this.cellRenderer.redraw(c), this.fireEvent(new mxEventObject(mxEvent.REMOVE_OVERLAY,
+      "cell", a, "overlay", b))) : b = null
+  }
+  return b
+};
+mxGraph.prototype.removeCellOverlays = function(a) {
+  var b = a.overlays;
+  if (null != b) {
+    a.overlays = null;
+    var c = this.view.getState(a);
+    null != c && this.cellRenderer.redraw(c);
+    for (c = 0; c < b.length; c++) this.fireEvent(new mxEventObject(mxEvent.REMOVE_OVERLAY, "cell", a, "overlay", b[c]))
+  }
+  return b
+};
+mxGraph.prototype.clearCellOverlays = function(a) {
+  a = null != a ? a : this.model.getRoot();
+  this.removeCellOverlays(a);
+  for (var b = this.model.getChildCount(a), c = 0; c < b; c++) {
+    var d = this.model.getChildAt(a, c);
+    this.clearCellOverlays(d)
+  }
+};
+mxGraph.prototype.setCellWarning = function(a, b, c, d) {
+  if (null != b && 0 < b.length) return c = null != c ? c : this.warningImage, b = new mxCellOverlay(c, "\x3cfont color\x3dred\x3e" + b + "\x3c/font\x3e"), d && b.addListener(mxEvent.CLICK, mxUtils
+    .bind(this, function(b, c) {
+      this.isEnabled() && this.setSelectionCell(a)
+    })), this.addCellOverlay(a, b);
+  this.removeCellOverlays(a);
+  return null
+};
+mxGraph.prototype.startEditing = function(a) {
+  this.startEditingAtCell(null, a)
+};
+mxGraph.prototype.startEditingAtCell = function(a, b) {
+  null == a && (a = this.getSelectionCell(), null != a && !this.isCellEditable(a) && (a = null));
+  null != a && (this.fireEvent(new mxEventObject(mxEvent.START_EDITING, "cell", a, "event", b)), this.cellEditor.startEditing(a, b))
+};
+mxGraph.prototype.getEditingValue = function(a, b) {
+  return this.convertValueToString(a)
+};
+mxGraph.prototype.stopEditing = function(a) {
+  this.cellEditor.stopEditing(a)
+};
+mxGraph.prototype.labelChanged = function(a, b, c) {
+  this.model.beginUpdate();
+  try {
+    this.cellLabelChanged(a, b, this.isAutoSizeCell(a)), this.fireEvent(new mxEventObject(mxEvent.LABEL_CHANGED, "cell", a, "value", b, "event", c))
+  } finally {
+    this.model.endUpdate()
+  }
+  return a
+};
+mxGraph.prototype.cellLabelChanged = function(a, b, c) {
+  this.model.beginUpdate();
+  try {
+    this.model.setValue(a, b), c && this.cellSizeUpdated(a, !1)
+  } finally {
+    this.model.endUpdate()
+  }
+};
+mxGraph.prototype.escape = function(a) {
+  this.stopEditing(!0);
+  this.connectionHandler.reset();
+  this.graphHandler.reset();
+  a = this.getSelectionCells();
+  for (var b = 0; b < a.length; b++) {
+    var c = this.view.getState(a[b]);
+    null != c && null != c.handler && c.handler.reset()
+  }
+};
+mxGraph.prototype.click = function(a) {
+  var b = a.getEvent(),
+    c = a.getCell(),
+    d = new mxEventObject(mxEvent.CLICK, "event", b, "cell", c);
+  a.isConsumed() && d.consume();
+  this.fireEvent(d);
+  this.isEnabled() && (!mxEvent.isConsumed(b) && !d.isConsumed()) && (null != c ? this.selectCellForEvent(c, b) : (c = null, this.isSwimlaneSelectionEnabled() && (c = this.getSwimlaneAt(a.getGraphX(),
+    a.getGraphY())), null != c ? this.selectCellForEvent(c, b) : this.isToggleEvent(b) || this.clearSelection()))
+};
+mxGraph.prototype.dblClick = function(a, b) {
+  var c = new mxEventObject(mxEvent.DOUBLE_CLICK, "event", a, "cell", b);
+  this.fireEvent(c);
+  this.isEnabled() && (!mxEvent.isConsumed(a) && !c.isConsumed() && null != b && this.isCellEditable(b)) && this.startEditingAtCell(b, a)
+};
+mxGraph.prototype.scrollPointToVisible = function(a, b, c, d) {
+  if (!this.timerAutoScroll && (this.ignoreScrollbars || mxUtils.hasScrollbars(this.container))) {
+    var e = this.container;
+    d = null != d ? d : 20;
+    if (a >= e.scrollLeft && b >= e.scrollTop && a <= e.scrollLeft + e.clientWidth && b <= e.scrollTop + e.clientHeight) {
+      var f = e.scrollLeft + e.clientWidth - a;
+      if (f < d) {
+        if (a = e.scrollLeft, e.scrollLeft += d - f, c && a == e.scrollLeft) {
+          if (this.dialect == mxConstants.DIALECT_SVG) {
+            a = this.view.getDrawPane().ownerSVGElement;
+            var g = this.container.scrollWidth + d - f
+          } else g =
+            Math.max(e.clientWidth, e.scrollWidth) + d - f, a = this.view.getCanvas();
+          a.style.width = g + "px";
+          e.scrollLeft += d - f
+        }
+      } else f = a - e.scrollLeft, f < d && (e.scrollLeft -= d - f);
+      f = e.scrollTop + e.clientHeight - b;
+      f < d ? (a = e.scrollTop, e.scrollTop += d - f, a == e.scrollTop && c && (this.dialect == mxConstants.DIALECT_SVG ? (a = this.view.getDrawPane().ownerSVGElement, b = this.container.scrollHeight +
+        d - f) : (b = Math.max(e.clientHeight, e.scrollHeight) + d - f, a = this.view.getCanvas()), a.style.height = b + "px", e.scrollTop += d - f)) : (f = b - e.scrollTop, f < d && (e.scrollTop -=
+        d - f))
+    }
+  } else this.allowAutoPanning && !this.panningHandler.active && (null == this.panningManager && (this.panningManager = this.createPanningManager()), this.panningManager.panTo(a + this.panDx, b +
+    this.panDy))
+};
+mxGraph.prototype.createPanningManager = function() {
+  return new mxPanningManager(this)
+};
+mxGraph.prototype.getBorderSizes = function() {
+  function a(a) {
+    var b = 0,
+      b = "thin" == a ? 2 : "medium" == a ? 4 : "thick" == a ? 6 : parseInt(a);
+    isNaN(b) && (b = 0);
+    return b
+  }
+  var b = mxUtils.getCurrentStyle(this.container),
+    c = new mxRectangle;
+  c.x = a(b.borderLeftWidth) + parseInt(b.paddingLeft || 0);
+  c.y = a(b.borderTopWidth) + parseInt(b.paddingTop || 0);
+  c.width = a(b.borderRightWidth) + parseInt(b.paddingRight || 0);
+  c.height = a(b.borderBottomWidth) + parseInt(b.paddingBottom || 0);
+  return c
+};
+mxGraph.prototype.getPreferredPageSize = function(a, b, c) {
+  a = this.view.scale;
+  var d = this.view.translate,
+    e = this.pageFormat,
+    f = a * this.pageScale,
+    e = new mxRectangle(0, 0, e.width * f, e.height * f);
+  b = this.pageBreaksVisible ? Math.ceil(b / e.width) : 1;
+  c = this.pageBreaksVisible ? Math.ceil(c / e.height) : 1;
+  return new mxRectangle(0, 0, b * e.width + 2 + d.x / a, c * e.height + 2 + d.y / a)
+};
+mxGraph.prototype.sizeDidChange = function() {
+  var a = this.getGraphBounds();
+  if (null != this.container) {
+    var b = this.getBorder(),
+      c = Math.max(0, a.x + a.width + 1 + b),
+      b = Math.max(0, a.y + a.height + 1 + b);
+    null != this.minimumContainerSize && (c = Math.max(c, this.minimumContainerSize.width), b = Math.max(b, this.minimumContainerSize.height));
+    this.resizeContainer && this.doResizeContainer(c, b);
+    if (this.preferPageSize || !mxClient.IS_IE && this.pageVisible) {
+      var d = this.getPreferredPageSize(a, c, b);
+      null != d && (c = d.width, b = d.height)
+    }
+    null != this.minimumGraphSize &&
+      (c = Math.max(c, this.minimumGraphSize.width * this.view.scale), b = Math.max(b, this.minimumGraphSize.height * this.view.scale));
+    c = Math.ceil(c - 1);
+    b = Math.ceil(b - 1);
+    this.dialect == mxConstants.DIALECT_SVG ? (d = this.view.getDrawPane().ownerSVGElement, d.style.minWidth = Math.max(1, c) + "px", d.style.minHeight = Math.max(1, b) + "px", d.style.width =
+      "100%", d.style.height = "100%") : mxClient.IS_QUIRKS ? this.view.updateHtmlCanvasSize(Math.max(1, c), Math.max(1, b)) : (this.view.canvas.style.minWidth = Math.max(1, c) + "px", this.view.canvas
+      .style.minHeight =
+      Math.max(1, b) + "px");
+    this.updatePageBreaks(this.pageBreaksVisible, c - 1, b - 1)
+  }
+  this.fireEvent(new mxEventObject(mxEvent.SIZE, "bounds", a))
+};
+mxGraph.prototype.doResizeContainer = function(a, b) {
+  if (mxClient.IS_IE)
+    if (mxClient.IS_QUIRKS) {
+      var c = this.getBorderSizes();
+      a += Math.max(2, c.x + c.width + 1);
+      b += Math.max(2, c.y + c.height + 1)
+    } else 9 <= document.documentMode ? (a += 3, b += 5) : (a += 1, b += 1);
+  else b += 1;
+  null != this.maximumContainerSize && (a = Math.min(this.maximumContainerSize.width, a), b = Math.min(this.maximumContainerSize.height, b));
+  this.container.style.width = Math.ceil(a) + "px";
+  this.container.style.height = Math.ceil(b) + "px"
+};
+mxGraph.prototype.updatePageBreaks = function(a, b, c) {
+  var d = this.view.scale,
+    e = this.view.translate,
+    f = this.pageFormat,
+    g = d * this.pageScale,
+    e = new mxRectangle(d * e.x, d * e.y, f.width * g, f.height * g);
+  a = a && Math.min(e.width, e.height) > this.minPageBreakDist;
+  e.x = mxUtils.mod(e.x, e.width);
+  e.y = mxUtils.mod(e.y, e.height);
+  f = a ? Math.ceil((b - e.x) / e.width) : 0;
+  a = a ? Math.ceil((c - e.y) / e.height) : 0;
+  null == this.horizontalPageBreaks && 0 < f && (this.horizontalPageBreaks = []);
+  if (null != this.horizontalPageBreaks) {
+    for (g = 0; g <= f; g++) {
+      var h = [new mxPoint(e.x +
+        g * e.width, 1), new mxPoint(e.x + g * e.width, c)];
+      null != this.horizontalPageBreaks[g] ? (this.horizontalPageBreaks[g].scale = 1, this.horizontalPageBreaks[g].points = h, this.horizontalPageBreaks[g].redraw()) : (h = new mxPolyline(h, this.pageBreakColor,
+        this.scale), h.dialect = this.dialect, h.isDashed = this.pageBreakDashed, h.scale = d, h.init(this.view.backgroundPane), h.redraw(), this.horizontalPageBreaks[g] = h)
+    }
+    for (g = f; g < this.horizontalPageBreaks.length; g++) this.horizontalPageBreaks[g].destroy();
+    this.horizontalPageBreaks.splice(f,
+      this.horizontalPageBreaks.length - f)
+  }
+  null == this.verticalPageBreaks && 0 < a && (this.verticalPageBreaks = []);
+  if (null != this.verticalPageBreaks) {
+    for (g = 0; g <= a; g++) h = [new mxPoint(1, e.y + g * e.height), new mxPoint(b, e.y + g * e.height)], null != this.verticalPageBreaks[g] ? (this.verticalPageBreaks[g].scale = 1, this.verticalPageBreaks[
+      g].points = h, this.verticalPageBreaks[g].redraw()) : (h = new mxPolyline(h, this.pageBreakColor, d), h.dialect = this.dialect, h.isDashed = this.pageBreakDashed, h.scale = d, h.init(this.view
+        .backgroundPane), h.redraw(),
+      this.verticalPageBreaks[g] = h);
+    for (g = a; g < this.verticalPageBreaks.length; g++) this.verticalPageBreaks[g].destroy();
+    this.verticalPageBreaks.splice(a, this.verticalPageBreaks.length - a)
+  }
+};
+mxGraph.prototype.getCellStyle = function(a) {
+  var b = this.model.getStyle(a),
+    c = null,
+    c = this.model.isEdge(a) ? this.stylesheet.getDefaultEdgeStyle() : this.stylesheet.getDefaultVertexStyle();
+  null != b && (c = this.postProcessCellStyle(this.stylesheet.getCellStyle(b, c)));
+  null == c && (c = mxGraph.prototype.EMPTY_ARRAY);
+  return c
+};
+mxGraph.prototype.postProcessCellStyle = function(a) {
+  if (null != a) {
+    var b = a[mxConstants.STYLE_IMAGE],
+      c = this.getImageFromBundles(b);
+    null != c ? a[mxConstants.STYLE_IMAGE] = c : c = b;
+    null != c && "data:image/" == c.substring(0, 11) && (b = c.indexOf(","), 0 < b && (c = c.substring(0, b) + ";base64," + c.substring(b + 1)), a[mxConstants.STYLE_IMAGE] = c)
+  }
+  return a
+};
+mxGraph.prototype.setCellStyle = function(a, b) {
+  b = b || this.getSelectionCells();
+  if (null != b) {
+    this.model.beginUpdate();
+    try {
+      for (var c = 0; c < b.length; c++) this.model.setStyle(b[c], a)
+    } finally {
+      this.model.endUpdate()
+    }
+  }
+};
+mxGraph.prototype.toggleCellStyle = function(a, b, c) {
+  c = c || this.getSelectionCell();
+  this.toggleCellStyles(a, b, [c])
+};
+mxGraph.prototype.toggleCellStyles = function(a, b, c) {
+  b = null != b ? b : !1;
+  c = c || this.getSelectionCells();
+  if (null != c && 0 < c.length) {
+    var d = this.view.getState(c[0]),
+      d = null != d ? d.style : this.getCellStyle(c[0]);
+    null != d && (b = mxUtils.getValue(d, a, b) ? 0 : 1, this.setCellStyles(a, b, c))
+  }
+};
+mxGraph.prototype.setCellStyles = function(a, b, c) {
+  c = c || this.getSelectionCells();
+  mxUtils.setCellStyles(this.model, c, a, b)
+};
+mxGraph.prototype.toggleCellStyleFlags = function(a, b, c) {
+  this.setCellStyleFlags(a, b, null, c)
+};
+mxGraph.prototype.setCellStyleFlags = function(a, b, c, d) {
+  d = d || this.getSelectionCells();
+  if (null != d && 0 < d.length) {
+    if (null == c) {
+      var e = this.view.getState(d[0]),
+        e = null != e ? e.style : this.getCellStyle(d[0]);
+      null != e && (c = (parseInt(e[a] || 0) & b) != b)
+    }
+    mxUtils.setCellStyleFlags(this.model, d, a, b, c)
+  }
+};
+mxGraph.prototype.alignCells = function(a, b, c) {
+  null == b && (b = this.getSelectionCells());
+  if (null != b && 1 < b.length) {
+    if (null == c)
+      for (var d = 0; d < b.length; d++) {
+        var e = this.getCellGeometry(b[d]);
+        if (null != e && !this.model.isEdge(b[d]))
+          if (null == c)
+            if (a == mxConstants.ALIGN_CENTER) {
+              c = e.x + e.width / 2;
+              break
+            } else if (a == mxConstants.ALIGN_RIGHT) c = e.x + e.width;
+        else if (a == mxConstants.ALIGN_TOP) c = e.y;
+        else if (a == mxConstants.ALIGN_MIDDLE) {
+          c = e.y + e.height / 2;
+          break
+        } else c = a == mxConstants.ALIGN_BOTTOM ? e.y + e.height : e.x;
+        else c = a == mxConstants.ALIGN_RIGHT ?
+          Math.max(c, e.x + e.width) : a == mxConstants.ALIGN_TOP ? Math.min(c, e.y) : a == mxConstants.ALIGN_BOTTOM ? Math.max(c, e.y + e.height) : Math.min(c, e.x)
+      }
+    if (null != c) {
+      this.model.beginUpdate();
+      try {
+        for (d = 0; d < b.length; d++) e = this.getCellGeometry(b[d]), null != e && !this.model.isEdge(b[d]) && (e = e.clone(), a == mxConstants.ALIGN_CENTER ? e.x = c - e.width / 2 : a ==
+          mxConstants.ALIGN_RIGHT ? e.x = c - e.width : a == mxConstants.ALIGN_TOP ? e.y = c : a == mxConstants.ALIGN_MIDDLE ? e.y = c - e.height / 2 : a == mxConstants.ALIGN_BOTTOM ? e.y = c - e
+          .height : e.x = c, this.model.setGeometry(b[d],
+            e));
+        this.fireEvent(new mxEventObject(mxEvent.ALIGN_CELLS, "align", a, "cells", b))
+      } finally {
+        this.model.endUpdate()
+      }
+    }
+  }
+  return b
+};
+mxGraph.prototype.flipEdge = function(a) {
+  if (null != a && null != this.alternateEdgeStyle) {
+    this.model.beginUpdate();
+    try {
+      var b = this.model.getStyle(a);
+      null == b || 0 == b.length ? this.model.setStyle(a, this.alternateEdgeStyle) : this.model.setStyle(a, null);
+      this.resetEdge(a);
+      this.fireEvent(new mxEventObject(mxEvent.FLIP_EDGE, "edge", a))
+    } finally {
+      this.model.endUpdate()
+    }
+  }
+  return a
+};
+mxGraph.prototype.addImageBundle = function(a) {
+  this.imageBundles.push(a)
+};
+mxGraph.prototype.removeImageBundle = function(a) {
+  for (var b = [], c = 0; c < this.imageBundles.length; c++) this.imageBundles[c] != a && b.push(this.imageBundles[c]);
+  this.imageBundles = b
+};
+mxGraph.prototype.getImageFromBundles = function(a) {
+  if (null != a)
+    for (var b = 0; b < this.imageBundles.length; b++) {
+      var c = this.imageBundles[b].getImage(a);
+      if (null != c) return c
+    }
+  return null
+};
+mxGraph.prototype.orderCells = function(a, b) {
+  null == b && (b = mxUtils.sortCells(this.getSelectionCells(), !0));
+  this.model.beginUpdate();
+  try {
+    this.cellsOrdered(b, a), this.fireEvent(new mxEventObject(mxEvent.ORDER_CELLS, "back", a, "cells", b))
+  } finally {
+    this.model.endUpdate()
+  }
+  return b
+};
+mxGraph.prototype.cellsOrdered = function(a, b) {
+  if (null != a) {
+    this.model.beginUpdate();
+    try {
+      for (var c = 0; c < a.length; c++) {
+        var d = this.model.getParent(a[c]);
+        b ? this.model.add(d, a[c], c) : this.model.add(d, a[c], this.model.getChildCount(d) - 1)
+      }
+      this.fireEvent(new mxEventObject(mxEvent.CELLS_ORDERED, "back", b, "cells", a))
+    } finally {
+      this.model.endUpdate()
+    }
+  }
+};
+mxGraph.prototype.groupCells = function(a, b, c) {
+  null == c && (c = mxUtils.sortCells(this.getSelectionCells(), !0));
+  c = this.getCellsForGroup(c);
+  null == a && (a = this.createGroupCell(c));
+  var d = this.getBoundsForGroup(a, c, b);
+  if (0 < c.length && null != d) {
+    var e = this.model.getParent(a);
+    null == e && (e = this.model.getParent(c[0]));
+    this.model.beginUpdate();
+    try {
+      null == this.getCellGeometry(a) && this.model.setGeometry(a, new mxGeometry);
+      var f = this.model.getChildCount(e);
+      this.cellsAdded([a], e, f, null, null, !1);
+      f = this.model.getChildCount(a);
+      this.cellsAdded(c, a, f, null, null, !1, !1);
+      this.cellsMoved(c, -d.x, -d.y, !1, !0);
+      this.cellsResized([a], [d]);
+      this.fireEvent(new mxEventObject(mxEvent.GROUP_CELLS, "group", a, "border", b, "cells", c))
+    } finally {
+      this.model.endUpdate()
+    }
+  }
+  return a
+};
+mxGraph.prototype.getCellsForGroup = function(a) {
+  var b = [];
+  if (null != a && 0 < a.length) {
+    var c = this.model.getParent(a[0]);
+    b.push(a[0]);
+    for (var d = 1; d < a.length; d++) this.model.getParent(a[d]) == c && b.push(a[d])
+  }
+  return b
+};
+mxGraph.prototype.getBoundsForGroup = function(a, b, c) {
+  b = this.getBoundingBoxFromGeometry(b);
+  null != b && (this.isSwimlane(a) && (a = this.getStartSize(a), b.x -= a.width, b.y -= a.height, b.width += a.width, b.height += a.height), b.x -= c, b.y -= c, b.width += 2 * c, b.height += 2 * c);
+  return b
+};
+mxGraph.prototype.createGroupCell = function(a) {
+  a = new mxCell("");
+  a.setVertex(!0);
+  a.setConnectable(!1);
+  return a
+};
+mxGraph.prototype.ungroupCells = function(a) {
+  var b = [];
+  if (null == a) {
+    a = this.getSelectionCells();
+    for (var c = [], d = 0; d < a.length; d++) 0 < this.model.getChildCount(a[d]) && c.push(a[d]);
+    a = c
+  }
+  if (null != a && 0 < a.length) {
+    this.model.beginUpdate();
+    try {
+      for (d = 0; d < a.length; d++) {
+        var e = this.model.getChildren(a[d]);
+        if (null != e && 0 < e.length) {
+          var e = e.slice(),
+            f = this.model.getParent(a[d]),
+            g = this.model.getChildCount(f);
+          this.cellsAdded(e, f, g, null, null, !0);
+          b = b.concat(e)
+        }
+      }
+      this.cellsRemoved(this.addAllEdges(a));
+      this.fireEvent(new mxEventObject(mxEvent.UNGROUP_CELLS,
+        "cells", a))
+    } finally {
+      this.model.endUpdate()
+    }
+  }
+  return b
+};
+mxGraph.prototype.removeCellsFromParent = function(a) {
+  null == a && (a = this.getSelectionCells());
+  this.model.beginUpdate();
+  try {
+    var b = this.getDefaultParent(),
+      c = this.model.getChildCount(b);
+    this.cellsAdded(a, b, c, null, null, !0);
+    this.fireEvent(new mxEventObject(mxEvent.REMOVE_CELLS_FROM_PARENT, "cells", a))
+  } finally {
+    this.model.endUpdate()
+  }
+  return a
+};
+mxGraph.prototype.updateGroupBounds = function(a, b, c) {
+  null == a && (a = this.getSelectionCells());
+  b = null != b ? b : 0;
+  c = null != c ? c : !1;
+  this.model.beginUpdate();
+  try {
+    for (var d = 0; d < a.length; d++) {
+      var e = this.getCellGeometry(a[d]);
+      if (null != e) {
+        var f = this.getChildCells(a[d]);
+        if (null != f && 0 < f.length) {
+          var g = this.getBoundingBoxFromGeometry(f);
+          if (0 < g.width && 0 < g.height) {
+            var h = this.isSwimlane(a[d]) ? this.getStartSize(a[d]) : new mxRectangle,
+              e = e.clone();
+            c && (e.x += g.x - h.width - b, e.y += g.y - h.height - b);
+            e.width = g.width + h.width + 2 * b;
+            e.height =
+              g.height + h.height + 2 * b;
+            this.model.setGeometry(a[d], e);
+            this.moveCells(f, -g.x + h.width + b, -g.y + h.height + b)
+          }
+        }
+      }
+    }
+  } finally {
+    this.model.endUpdate()
+  }
+  return a
+};
+mxGraph.prototype.cloneCells = function(a, b) {
+  b = null != b ? b : !0;
+  var c = null;
+  if (null != a) {
+    for (var d = {}, c = [], e = 0; e < a.length; e++) {
+      var f = mxCellPath.create(a[e]);
+      d[f] = a[e];
+      c.push(a[e])
+    }
+    if (0 < c.length)
+      for (var f = this.view.scale, g = this.view.translate, c = this.model.cloneCells(a, !0), e = 0; e < a.length; e++)
+        if (!b && this.model.isEdge(c[e]) && null != this.getEdgeValidationError(c[e], this.model.getTerminal(c[e], !0), this.model.getTerminal(c[e], !1))) c[e] = null;
+        else {
+          var h = this.model.getGeometry(c[e]);
+          if (null != h) {
+            var k = this.view.getState(a[e]),
+              l = this.view.getState(this.model.getParent(a[e]));
+            if (null != k && null != l) {
+              var m = l.origin.x,
+                l = l.origin.y;
+              if (this.model.isEdge(c[e])) {
+                for (var k = k.absolutePoints, n = this.model.getTerminal(a[e], !0), p = mxCellPath.create(n); null != n && null == d[p];) n = this.model.getParent(n), p = mxCellPath.create(n);
+                null == n && h.setTerminalPoint(new mxPoint(k[0].x / f - g.x, k[0].y / f - g.y), !0);
+                n = this.model.getTerminal(a[e], !1);
+                for (p = mxCellPath.create(n); null != n && null == d[p];) n = this.model.getParent(n), p = mxCellPath.create(n);
+                null == n && (n = k.length -
+                  1, h.setTerminalPoint(new mxPoint(k[n].x / f - g.x, k[n].y / f - g.y), !1));
+                h = h.points;
+                if (null != h)
+                  for (k = 0; k < h.length; k++) h[k].x += m, h[k].y += l
+              } else h.x += m, h.y += l
+            }
+          }
+        } else c = []
+  }
+  return c
+};
+mxGraph.prototype.insertVertex = function(a, b, c, d, e, f, g, h, k) {
+  b = this.createVertex(a, b, c, d, e, f, g, h, k);
+  return this.addCell(b, a)
+};
+mxGraph.prototype.createVertex = function(a, b, c, d, e, f, g, h, k) {
+  a = new mxGeometry(d, e, f, g);
+  a.relative = null != k ? k : !1;
+  c = new mxCell(c, a, h);
+  c.setId(b);
+  c.setVertex(!0);
+  c.setConnectable(!0);
+  return c
+};
+mxGraph.prototype.insertEdge = function(a, b, c, d, e, f) {
+  b = this.createEdge(a, b, c, d, e, f);
+  return this.addEdge(b, a, d, e)
+};
+mxGraph.prototype.createEdge = function(a, b, c, d, e, f) {
+  a = new mxCell(c, new mxGeometry, f);
+  a.setId(b);
+  a.setEdge(!0);
+  a.geometry.relative = !0;
+  return a
+};
+mxGraph.prototype.addEdge = function(a, b, c, d, e) {
+  return this.addCell(a, b, e, c, d)
+};
+mxGraph.prototype.addCell = function(a, b, c, d, e) {
+  return this.addCells([a], b, c, d, e)[0]
+};
+mxGraph.prototype.addCells = function(a, b, c, d, e) {
+  null == b && (b = this.getDefaultParent());
+  null == c && (c = this.model.getChildCount(b));
+  this.model.beginUpdate();
+  try {
+    this.cellsAdded(a, b, c, d, e, !1, !0), this.fireEvent(new mxEventObject(mxEvent.ADD_CELLS, "cells", a, "parent", b, "index", c, "source", d, "target", e))
+  } finally {
+    this.model.endUpdate()
+  }
+  return a
+};
+mxGraph.prototype.cellsAdded = function(a, b, c, d, e, f, g) {
+  if (null != a && null != b && null != c) {
+    this.model.beginUpdate();
+    try {
+      for (var h = f ? this.view.getState(b) : null, k = null != h ? h.origin : null, l = new mxPoint(0, 0), h = 0; h < a.length; h++)
+        if (null == a[h]) c--;
+        else {
+          var m = this.model.getParent(a[h]);
+          if (null != k && a[h] != b && b != m) {
+            var n = this.view.getState(m),
+              p = null != n ? n.origin : l,
+              q = this.model.getGeometry(a[h]);
+            if (null != q) {
+              var s = p.x - k.x,
+                r = p.y - k.y,
+                q = q.clone();
+              q.translate(s, r);
+              !q.relative && (this.model.isVertex(a[h]) && !this.isAllowNegativeCoordinates()) &&
+                (q.x = Math.max(0, q.x), q.y = Math.max(0, q.y));
+              this.model.setGeometry(a[h], q)
+            }
+          }
+          b == m && c + h > this.model.getChildCount(b) && c--;
+          this.model.add(b, a[h], c + h);
+          this.isExtendParentsOnAdd() && this.isExtendParent(a[h]) && this.extendParent(a[h]);
+          (null == g || g) && this.constrainChild(a[h]);
+          null != d && this.cellConnected(a[h], d, !0);
+          null != e && this.cellConnected(a[h], e, !1)
+        }
+      this.fireEvent(new mxEventObject(mxEvent.CELLS_ADDED, "cells", a, "parent", b, "index", c, "source", d, "target", e, "absolute", f))
+    } finally {
+      this.model.endUpdate()
+    }
+  }
+};
+mxGraph.prototype.removeCells = function(a, b) {
+  b = null != b ? b : !0;
+  null == a && (a = this.getDeletableCells(this.getSelectionCells()));
+  b && (a = this.getDeletableCells(this.addAllEdges(a)));
+  this.model.beginUpdate();
+  try {
+    this.cellsRemoved(a), this.fireEvent(new mxEventObject(mxEvent.REMOVE_CELLS, "cells", a, "includeEdges", b))
+  } finally {
+    this.model.endUpdate()
+  }
+  return a
+};
+mxGraph.prototype.cellsRemoved = function(a) {
+  if (null != a && 0 < a.length) {
+    var b = this.view.scale,
+      c = this.view.translate;
+    this.model.beginUpdate();
+    try {
+      for (var d = {}, e = 0; e < a.length; e++) {
+        var f = mxCellPath.create(a[e]);
+        d[f] = a[e]
+      }
+      for (e = 0; e < a.length; e++) {
+        for (var g = this.getConnections(a[e]), h = 0; h < g.length; h++)
+          if (f = mxCellPath.create(g[h]), null == d[f]) {
+            var k = this.model.getGeometry(g[h]);
+            if (null != k) {
+              var l = this.view.getState(g[h]);
+              if (null != l) {
+                var k = k.clone(),
+                  m = l.getVisibleTerminal(!0) == a[e],
+                  n = l.absolutePoints,
+                  p = m ? 0 : n.length -
+                  1;
+                k.setTerminalPoint(new mxPoint(n[p].x / b - c.x, n[p].y / b - c.y), m);
+                this.model.setTerminal(g[h], null, m);
+                this.model.setGeometry(g[h], k)
+              }
+            }
+          }
+        this.model.remove(a[e])
+      }
+      this.fireEvent(new mxEventObject(mxEvent.CELLS_REMOVED, "cells", a))
+    } finally {
+      this.model.endUpdate()
+    }
+  }
+};
+mxGraph.prototype.splitEdge = function(a, b, c, d, e) {
+  d = d || 0;
+  e = e || 0;
+  null == c && (c = this.cloneCells([a])[0]);
+  var f = this.model.getParent(a),
+    g = this.model.getTerminal(a, !0);
+  this.model.beginUpdate();
+  try {
+    this.cellsMoved(b, d, e, !1, !1), this.cellsAdded(b, f, this.model.getChildCount(f), null, null, !0), this.cellsAdded([c], f, this.model.getChildCount(f), g, b[0], !1), this.cellConnected(a, b[
+      0], !0), this.fireEvent(new mxEventObject(mxEvent.SPLIT_EDGE, "edge", a, "cells", b, "newEdge", c, "dx", d, "dy", e))
+  } finally {
+    this.model.endUpdate()
+  }
+  return c
+};
+mxGraph.prototype.toggleCells = function(a, b, c) {
+  null == b && (b = this.getSelectionCells());
+  c && (b = this.addAllEdges(b));
+  this.model.beginUpdate();
+  try {
+    this.cellsToggled(b, a), this.fireEvent(new mxEventObject(mxEvent.TOGGLE_CELLS, "show", a, "cells", b, "includeEdges", c))
+  } finally {
+    this.model.endUpdate()
+  }
+  return b
+};
+mxGraph.prototype.cellsToggled = function(a, b) {
+  if (null != a && 0 < a.length) {
+    this.model.beginUpdate();
+    try {
+      for (var c = 0; c < a.length; c++) this.model.setVisible(a[c], b)
+    } finally {
+      this.model.endUpdate()
+    }
+  }
+};
+mxGraph.prototype.foldCells = function(a, b, c, d) {
+  b = null != b ? b : !1;
+  null == c && (c = this.getFoldableCells(this.getSelectionCells(), a));
+  this.stopEditing(!1);
+  this.model.beginUpdate();
+  try {
+    this.cellsFolded(c, a, b, d), this.fireEvent(new mxEventObject(mxEvent.FOLD_CELLS, "collapse", a, "recurse", b, "cells", c))
+  } finally {
+    this.model.endUpdate()
+  }
+  return c
+};
+mxGraph.prototype.cellsFolded = function(a, b, c, d) {
+  if (null != a && 0 < a.length) {
+    this.model.beginUpdate();
+    try {
+      for (var e = 0; e < a.length; e++)
+        if ((!d || this.isCellFoldable(a[e], b)) && b != this.isCellCollapsed(a[e]))
+          if (this.model.setCollapsed(a[e], b), this.swapBounds(a[e], b), this.isExtendParent(a[e]) && this.extendParent(a[e]), c) {
+            var f = this.model.getChildren(a[e]);
+            this.foldCells(f, b, c)
+          }
+      this.fireEvent(new mxEventObject(mxEvent.CELLS_FOLDED, "cells", a, "collapse", b, "recurse", c))
+    } finally {
+      this.model.endUpdate()
+    }
+  }
+};
+mxGraph.prototype.swapBounds = function(a, b) {
+  if (null != a) {
+    var c = this.model.getGeometry(a);
+    null != c && (c = c.clone(), this.updateAlternateBounds(a, c, b), c.swap(), this.model.setGeometry(a, c))
+  }
+};
+mxGraph.prototype.updateAlternateBounds = function(a, b, c) {
+  if (null != a && null != b) {
+    c = this.view.getState(a);
+    c = null != c ? c.style : this.getCellStyle(a);
+    if (null == b.alternateBounds) {
+      var d = b;
+      this.collapseToPreferredSize && (a = this.getPreferredSizeForCell(a), null != a && (d = a, a = mxUtils.getValue(c, mxConstants.STYLE_STARTSIZE), 0 < a && (d.height = Math.max(d.height, a))));
+      b.alternateBounds = new mxRectangle(0, 0, d.width, d.height)
+    }
+    if (null != b.alternateBounds) {
+      b.alternateBounds.x = b.x;
+      b.alternateBounds.y = b.y;
+      var e = mxUtils.toRadians(c[mxConstants.STYLE_ROTATION] ||
+        "0");
+      0 != e && (a = b.alternateBounds.getCenterX() - b.getCenterX(), c = b.alternateBounds.getCenterY() - b.getCenterY(), d = Math.cos(e), e = Math.sin(e), b.alternateBounds.x += d * a - e * c - a,
+        b.alternateBounds.y += e * a + d * c - c)
+    }
+  }
+};
+mxGraph.prototype.addAllEdges = function(a) {
+  var b = a.slice();
+  return b = b.concat(this.getAllEdges(a))
+};
+mxGraph.prototype.getAllEdges = function(a) {
+  var b = [];
+  if (null != a)
+    for (var c = 0; c < a.length; c++) {
+      for (var d = this.model.getEdgeCount(a[c]), e = 0; e < d; e++) b.push(this.model.getEdgeAt(a[c], e));
+      d = this.model.getChildren(a[c]);
+      b = b.concat(this.getAllEdges(d))
+    }
+  return b
+};
+mxGraph.prototype.updateCellSize = function(a, b) {
+  b = null != b ? b : !1;
+  this.model.beginUpdate();
+  try {
+    this.cellSizeUpdated(a, b), this.fireEvent(new mxEventObject(mxEvent.UPDATE_CELL_SIZE, "cell", a, "ignoreChildren", b))
+  } finally {
+    this.model.endUpdate()
+  }
+  return a
+};
+mxGraph.prototype.cellSizeUpdated = function(a, b) {
+  if (null != a) {
+    this.model.beginUpdate();
+    try {
+      var c = this.getPreferredSizeForCell(a),
+        d = this.model.getGeometry(a);
+      if (null != c && null != d) {
+        var e = this.isCellCollapsed(a),
+          d = d.clone();
+        if (this.isSwimlane(a)) {
+          var f = this.view.getState(a),
+            g = null != f ? f.style : this.getCellStyle(a),
+            h = this.model.getStyle(a);
+          null == h && (h = "");
+          mxUtils.getValue(g, mxConstants.STYLE_HORIZONTAL, !0) ? (h = mxUtils.setStyle(h, mxConstants.STYLE_STARTSIZE, c.height + 8), e && (d.height = c.height + 8), d.width = c.width) :
+            (h = mxUtils.setStyle(h, mxConstants.STYLE_STARTSIZE, c.width + 8), e && (d.width = c.width + 8), d.height = c.height);
+          this.model.setStyle(a, h)
+        } else d.width = c.width, d.height = c.height;
+        if (!b && !e) {
+          var k = this.view.getBounds(this.model.getChildren(a));
+          if (null != k) {
+            var l = this.view.translate,
+              m = this.view.scale,
+              n = (k.y + k.height) / m - d.y - l.y;
+            d.width = Math.max(d.width, (k.x + k.width) / m - d.x - l.x);
+            d.height = Math.max(d.height, n)
+          }
+        }
+        this.cellsResized([a], [d])
+      }
+    } finally {
+      this.model.endUpdate()
+    }
+  }
+};
+mxGraph.prototype.getPreferredSizeForCell = function(a) {
+  var b = null;
+  if (null != a) {
+    var c = this.view.getState(a),
+      d = null != c ? c.style : this.getCellStyle(a);
+    if (null != d && !this.model.isEdge(a)) {
+      var e = d[mxConstants.STYLE_FONTSIZE] || mxConstants.DEFAULT_FONTSIZE,
+        f = 0,
+        b = 0;
+      if ((null != this.getImage(c) || null != d[mxConstants.STYLE_IMAGE]) && d[mxConstants.STYLE_SHAPE] == mxConstants.SHAPE_LABEL) d[mxConstants.STYLE_VERTICAL_ALIGN] == mxConstants.ALIGN_MIDDLE &&
+        (f += parseFloat(d[mxConstants.STYLE_IMAGE_WIDTH]) || mxLabel.prototype.imageSize),
+        d[mxConstants.STYLE_ALIGN] != mxConstants.ALIGN_CENTER && (b += parseFloat(d[mxConstants.STYLE_IMAGE_HEIGHT]) || mxLabel.prototype.imageSize);
+      f += 2 * (d[mxConstants.STYLE_SPACING] || 0);
+      f += d[mxConstants.STYLE_SPACING_LEFT] || 0;
+      f += d[mxConstants.STYLE_SPACING_RIGHT] || 0;
+      b += 2 * (d[mxConstants.STYLE_SPACING] || 0);
+      b += d[mxConstants.STYLE_SPACING_TOP] || 0;
+      b += d[mxConstants.STYLE_SPACING_BOTTOM] || 0;
+      c = this.getFoldingImage(c);
+      null != c && (f += c.width + 8);
+      c = this.getLabel(a);
+      null != c && 0 < c.length ? (this.isHtmlLabel(a) || (c = c.replace(/\n/g,
+        "\x3cbr\x3e")), e = mxUtils.getSizeForString(c, e, d[mxConstants.STYLE_FONTFAMILY]), a = e.width + f, b = e.height + b, mxUtils.getValue(d, mxConstants.STYLE_HORIZONTAL, !0) || (d = b,
+        b = a, a = d), this.gridEnabled && (a = this.snap(a + this.gridSize / 2), b = this.snap(b + this.gridSize / 2)), b = new mxRectangle(0, 0, a, b)) : (d = 4 * this.gridSize, b = new mxRectangle(
+        0, 0, d, d))
+    }
+  }
+  return b
+};
+mxGraph.prototype.handleGesture = function(a, b) {
+  if (0.2 < Math.abs(1 - b.scale)) {
+    var c = this.view.scale,
+      d = this.view.translate,
+      e = a.width * b.scale,
+      f = a.height * b.scale,
+      g = a.y - (f - a.height) / 2,
+      c = new mxRectangle(this.snap((a.x - (e - a.width) / 2) / c) - d.x, this.snap(g / c) - d.y, this.snap(e / c), this.snap(f / c));
+    this.resizeCell(a.cell, c)
+  }
+};
+mxGraph.prototype.resizeCell = function(a, b) {
+  return this.resizeCells([a], [b])[0]
+};
+mxGraph.prototype.resizeCells = function(a, b) {
+  this.model.beginUpdate();
+  try {
+    this.cellsResized(a, b), this.fireEvent(new mxEventObject(mxEvent.RESIZE_CELLS, "cells", a, "bounds", b))
+  } finally {
+    this.model.endUpdate()
+  }
+  return a
+};
+mxGraph.prototype.cellsResized = function(a, b) {
+  if (null != a && null != b && a.length == b.length) {
+    this.model.beginUpdate();
+    try {
+      for (var c = 0; c < a.length; c++) {
+        var d = b[c],
+          e = this.model.getGeometry(a[c]);
+        if (null != e && (e.x != d.x || e.y != d.y || e.width != d.width || e.height != d.height)) {
+          e = e.clone();
+          if (e.relative) {
+            var f = e.offset;
+            null != f && (f.x += d.x - e.x, f.y += d.y - e.y)
+          } else e.x = d.x, e.y = d.y;
+          e.width = d.width;
+          e.height = d.height;
+          !e.relative && (this.model.isVertex(a[c]) && !this.isAllowNegativeCoordinates()) && (e.x = Math.max(0, e.x), e.y = Math.max(0,
+            e.y));
+          this.model.setGeometry(a[c], e);
+          this.isExtendParent(a[c]) && this.extendParent(a[c])
+        }
+      }
+      this.resetEdgesOnResize && this.resetEdges(a);
+      this.fireEvent(new mxEventObject(mxEvent.CELLS_RESIZED, "cells", a, "bounds", b))
+    } finally {
+      this.model.endUpdate()
+    }
+  }
+};
+mxGraph.prototype.extendParent = function(a) {
+  if (null != a) {
+    var b = this.model.getParent(a),
+      c = this.model.getGeometry(b);
+    if (null != b && (null != c && !this.isCellCollapsed(b)) && (a = this.model.getGeometry(a), null != a && (c.width < a.x + a.width || c.height < a.y + a.height))) c = c.clone(), c.width = Math.max(
+      c.width, a.x + a.width), c.height = Math.max(c.height, a.y + a.height), this.cellsResized([b], [c])
+  }
+};
+mxGraph.prototype.importCells = function(a, b, c, d, e) {
+  return this.moveCells(a, b, c, !0, d, e)
+};
+mxGraph.prototype.moveCells = function(a, b, c, d, e, f) {
+  b = null != b ? b : 0;
+  c = null != c ? c : 0;
+  d = null != d ? d : !1;
+  if (null != a && (0 != b || 0 != c || d || null != e)) {
+    this.model.beginUpdate();
+    try {
+      d && (a = this.cloneCells(a, this.isCloneInvalidEdges()), null == e && (e = this.getDefaultParent()));
+      var g = this.isAllowNegativeCoordinates();
+      null != e && this.setAllowNegativeCoordinates(!0);
+      this.cellsMoved(a, b, c, !d && this.isDisconnectOnMove() && this.isAllowDanglingEdges(), null == e);
+      this.setAllowNegativeCoordinates(g);
+      if (null != e) {
+        var h = this.model.getChildCount(e);
+        this.cellsAdded(a, e, h, null, null, !0)
+      }
+      this.fireEvent(new mxEventObject(mxEvent.MOVE_CELLS, "cells", a, "dx", b, "dy", c, "clone", d, "target", e, "event", f))
+    } finally {
+      this.model.endUpdate()
+    }
+  }
+  return a
+};
+mxGraph.prototype.cellsMoved = function(a, b, c, d, e) {
+  if (null != a && (0 != b || 0 != c)) {
+    this.model.beginUpdate();
+    try {
+      d && this.disconnectGraph(a);
+      for (var f = 0; f < a.length; f++) this.translateCell(a[f], b, c), e && this.constrainChild(a[f]);
+      this.resetEdgesOnMove && this.resetEdges(a);
+      this.fireEvent(new mxEventObject(mxEvent.CELLS_MOVED, "cells", a, "dx", c, "dy", c, "disconnect", d))
+    } finally {
+      this.model.endUpdate()
+    }
+  }
+};
+mxGraph.prototype.translateCell = function(a, b, c) {
+  var d = this.model.getGeometry(a);
+  null != d && (d = d.clone(), d.translate(b, c), !d.relative && (this.model.isVertex(a) && !this.isAllowNegativeCoordinates()) && (d.x = Math.max(0, d.x), d.y = Math.max(0, d.y)), d.relative && !
+    this.model.isEdge(a) && (null == d.offset ? d.offset = new mxPoint(b, c) : (d.offset.x += b, d.offset.y += c)), this.model.setGeometry(a, d))
+};
+mxGraph.prototype.getCellContainmentArea = function(a) {
+  if (null != a && !this.model.isEdge(a)) {
+    var b = this.model.getParent(a);
+    if (b == this.getDefaultParent() || b == this.getCurrentRoot()) return this.getMaximumGraphBounds();
+    if (null != b && b != this.getDefaultParent()) {
+      var c = this.model.getGeometry(b);
+      if (null != c) {
+        var d = a = 0,
+          e = c.width,
+          c = c.height;
+        this.isSwimlane(b) && (b = this.getStartSize(b), a = b.width, e -= b.width, d = b.height, c -= b.height);
+        return new mxRectangle(a, d, e, c)
+      }
+    }
+  }
+  return null
+};
+mxGraph.prototype.getMaximumGraphBounds = function() {
+  return this.maximumGraphBounds
+};
+mxGraph.prototype.constrainChild = function(a) {
+  if (null != a) {
+    var b = this.model.getGeometry(a),
+      c = this.isConstrainChild(a) ? this.getCellContainmentArea(a) : this.getMaximumGraphBounds();
+    if (null != b && null != c && !b.relative && (b.x < c.x || b.y < c.y || c.width < b.x + b.width || c.height < b.y + b.height)) a = this.getOverlap(a), 0 < c.width && (b.x = Math.min(b.x, c.x +
+      c.width - (1 - a) * b.width)), 0 < c.height && (b.y = Math.min(b.y, c.y + c.height - (1 - a) * b.height)), b.x = Math.max(b.x, c.x - b.width * a), b.y = Math.max(b.y, c.y - b.height * a)
+  }
+};
+mxGraph.prototype.resetEdges = function(a) {
+  if (null != a) {
+    for (var b = {}, c = 0; c < a.length; c++) {
+      var d = mxCellPath.create(a[c]);
+      b[d] = a[c]
+    }
+    this.model.beginUpdate();
+    try {
+      for (c = 0; c < a.length; c++) {
+        var e = this.model.getEdges(a[c]);
+        if (null != e)
+          for (d = 0; d < e.length; d++) {
+            var f = this.view.getState(e[d]),
+              g = null != f ? f.getVisibleTerminal(!0) : this.view.getVisibleTerminal(e[d], !0),
+              h = null != f ? f.getVisibleTerminal(!1) : this.view.getVisibleTerminal(e[d], !1),
+              k = mxCellPath.create(g),
+              l = mxCellPath.create(h);
+            (null == b[k] || null == b[l]) && this.resetEdge(e[d])
+          }
+        this.resetEdges(this.model.getChildren(a[c]))
+      }
+    } finally {
+      this.model.endUpdate()
+    }
+  }
+};
+mxGraph.prototype.resetEdge = function(a) {
+  var b = this.model.getGeometry(a);
+  null != b && (null != b.points && 0 < b.points.length) && (b = b.clone(), b.points = [], this.model.setGeometry(a, b));
+  return a
+};
+mxGraph.prototype.getAllConnectionConstraints = function(a, b) {
+  return null != a && null != a.shape && null != a.shape.stencil ? a.shape.stencil.constraints : null
+};
+mxGraph.prototype.getConnectionConstraint = function(a, b, c) {
+  b = null;
+  var d = a.style[c ? mxConstants.STYLE_EXIT_X : mxConstants.STYLE_ENTRY_X];
+  if (null != d) {
+    var e = a.style[c ? mxConstants.STYLE_EXIT_Y : mxConstants.STYLE_ENTRY_Y];
+    null != e && (b = new mxPoint(parseFloat(d), parseFloat(e)))
+  }
+  d = !1;
+  null != b && (d = mxUtils.getValue(a.style, c ? mxConstants.STYLE_EXIT_PERIMETER : mxConstants.STYLE_ENTRY_PERIMETER, !0));
+  return new mxConnectionConstraint(b, d)
+};
+mxGraph.prototype.setConnectionConstraint = function(a, b, c, d) {
+  if (null != d) {
+    this.model.beginUpdate();
+    try {
+      null == d || null == d.point ? (this.setCellStyles(c ? mxConstants.STYLE_EXIT_X : mxConstants.STYLE_ENTRY_X, null, [a]), this.setCellStyles(c ? mxConstants.STYLE_EXIT_Y : mxConstants.STYLE_ENTRY_Y,
+        null, [a]), this.setCellStyles(c ? mxConstants.STYLE_EXIT_PERIMETER : mxConstants.STYLE_ENTRY_PERIMETER, null, [a])) : null != d.point && (this.setCellStyles(c ? mxConstants.STYLE_EXIT_X :
+        mxConstants.STYLE_ENTRY_X, d.point.x, [a]), this.setCellStyles(c ?
+        mxConstants.STYLE_EXIT_Y : mxConstants.STYLE_ENTRY_Y, d.point.y, [a]), d.perimeter ? this.setCellStyles(c ? mxConstants.STYLE_EXIT_PERIMETER : mxConstants.STYLE_ENTRY_PERIMETER, null, [
+        a
+      ]) : this.setCellStyles(c ? mxConstants.STYLE_EXIT_PERIMETER : mxConstants.STYLE_ENTRY_PERIMETER, "0", [a]))
+    } finally {
+      this.model.endUpdate()
+    }
+  }
+};
+mxGraph.prototype.getConnectionPoint = function(a, b) {
+  var c = null;
+  if (null != a) {
+    var d = this.view.getPerimeterBounds(a),
+      e = new mxPoint(d.getCenterX(), d.getCenterY()),
+      f = a.style[mxConstants.STYLE_DIRECTION],
+      g = 0;
+    if (null != f && ("north" == f ? g += 270 : "west" == f ? g += 180 : "south" == f && (g += 90), "north" == f || "south" == f)) {
+      d.x += d.width / 2 - d.height / 2;
+      d.y += d.height / 2 - d.width / 2;
+      var h = d.width;
+      d.width = d.height;
+      d.height = h
+    }
+    if (null != b.point) {
+      var k = c = 1,
+        l = 0,
+        m = 0;
+      if (this.getModel().isVertex(a.cell)) {
+        var n = a.style[mxConstants.STYLE_FLIPH],
+          p =
+          a.style[mxConstants.STYLE_FLIPV];
+        null != a.shape.stencil && (n = 1 == mxUtils.getValue(a.style, "stencilFlipH", 0) || n, p = 1 == mxUtils.getValue(a.style, "stencilFlipV", 0) || p);
+        if ("north" == f || "south" == f) h = n, n = p, p = h;
+        n && (c = -1, l = -d.width);
+        p && (k = -1, m = -d.height)
+      }
+      c = new mxPoint(d.x + b.point.x * d.width * c - l, d.y + b.point.y * d.height * k - m)
+    }
+    f = a.style[mxConstants.STYLE_ROTATION] || 0;
+    b.perimeter ? (0 != g && null != c && (h = d = 0, 90 == g ? h = 1 : 180 == g ? d = -1 : 270 == f && (h = -1), c = mxUtils.getRotatedPoint(c, d, h, e)), null != c && b.perimeter && (c = this.view
+      .getPerimeterPoint(a,
+        c, !1))) : f += g;
+    0 != f && null != c && (g = mxUtils.toRadians(f), d = Math.cos(g), h = Math.sin(g), c = mxUtils.getRotatedPoint(c, d, h, e))
+  }
+  return c
+};
+mxGraph.prototype.connectCell = function(a, b, c, d) {
+  this.model.beginUpdate();
+  try {
+    var e = this.model.getTerminal(a, c);
+    this.cellConnected(a, b, c, d);
+    this.fireEvent(new mxEventObject(mxEvent.CONNECT_CELL, "edge", a, "terminal", b, "source", c, "previous", e))
+  } finally {
+    this.model.endUpdate()
+  }
+  return a
+};
+mxGraph.prototype.cellConnected = function(a, b, c, d) {
+  if (null != a) {
+    this.model.beginUpdate();
+    try {
+      var e = this.model.getTerminal(a, c);
+      this.setConnectionConstraint(a, b, c, d);
+      this.isPortsEnabled() && (d = null, this.isPort(b) && (d = b.getId(), b = this.getTerminalForPort(b, c)), this.setCellStyles(c ? mxConstants.STYLE_SOURCE_PORT : mxConstants.STYLE_TARGET_PORT,
+        d, [a]));
+      this.model.setTerminal(a, b, c);
+      this.resetEdgesOnConnect && this.resetEdge(a);
+      this.fireEvent(new mxEventObject(mxEvent.CELL_CONNECTED, "edge", a, "terminal", b, "source",
+        c, "previous", e))
+    } finally {
+      this.model.endUpdate()
+    }
+  }
+};
+mxGraph.prototype.disconnectGraph = function(a) {
+  if (null != a) {
+    this.model.beginUpdate();
+    try {
+      for (var b = this.view.scale, c = this.view.translate, d = {}, e = 0; e < a.length; e++) {
+        var f = mxCellPath.create(a[e]);
+        d[f] = a[e]
+      }
+      for (e = 0; e < a.length; e++)
+        if (this.model.isEdge(a[e])) {
+          var g = this.model.getGeometry(a[e]);
+          if (null != g) {
+            var h = this.view.getState(a[e]),
+              k = this.view.getState(this.model.getParent(a[e]));
+            if (null != h && null != k) {
+              var g = g.clone(),
+                l = -k.origin.x,
+                m = -k.origin.y,
+                n = h.absolutePoints,
+                p = this.model.getTerminal(a[e], !0);
+              if (null !=
+                p && this.isCellDisconnectable(a[e], p, !0)) {
+                for (var q = mxCellPath.create(p); null != p && null == d[q];) p = this.model.getParent(p), q = mxCellPath.create(p);
+                null == p && (g.setTerminalPoint(new mxPoint(n[0].x / b - c.x + l, n[0].y / b - c.y + m), !0), this.model.setTerminal(a[e], null, !0))
+              }
+              var s = this.model.getTerminal(a[e], !1);
+              if (null != s && this.isCellDisconnectable(a[e], s, !1)) {
+                for (var r = mxCellPath.create(s); null != s && null == d[r];) s = this.model.getParent(s), r = mxCellPath.create(s);
+                if (null == s) {
+                  var t = n.length - 1;
+                  g.setTerminalPoint(new mxPoint(n[t].x /
+                    b - c.x + l, n[t].y / b - c.y + m), !1);
+                  this.model.setTerminal(a[e], null, !1)
+                }
+              }
+              this.model.setGeometry(a[e], g)
+            }
+          }
+        }
+    } finally {
+      this.model.endUpdate()
+    }
+  }
+};
+mxGraph.prototype.getCurrentRoot = function() {
+  return this.view.currentRoot
+};
+mxGraph.prototype.getTranslateForRoot = function(a) {
+  return null
+};
+mxGraph.prototype.isPort = function(a) {
+  return !1
+};
+mxGraph.prototype.getTerminalForPort = function(a, b) {
+  return this.model.getParent(a)
+};
+mxGraph.prototype.getChildOffsetForCell = function(a) {
+  return null
+};
+mxGraph.prototype.enterGroup = function(a) {
+  a = a || this.getSelectionCell();
+  null != a && this.isValidRoot(a) && (this.view.setCurrentRoot(a), this.clearSelection())
+};
+mxGraph.prototype.exitGroup = function() {
+  var a = this.model.getRoot(),
+    b = this.getCurrentRoot();
+  if (null != b) {
+    for (var c = this.model.getParent(b); c != a && !this.isValidRoot(c) && this.model.getParent(c) != a;) c = this.model.getParent(c);
+    c == a || this.model.getParent(c) == a ? this.view.setCurrentRoot(null) : this.view.setCurrentRoot(c);
+    null != this.view.getState(b) && this.setSelectionCell(b)
+  }
+};
+mxGraph.prototype.home = function() {
+  var a = this.getCurrentRoot();
+  null != a && (this.view.setCurrentRoot(null), null != this.view.getState(a) && this.setSelectionCell(a))
+};
+mxGraph.prototype.isValidRoot = function(a) {
+  return null != a
+};
+mxGraph.prototype.getGraphBounds = function() {
+  return this.view.getGraphBounds()
+};
+mxGraph.prototype.getCellBounds = function(a, b, c) {
+  var d = [a];
+  b && (d = d.concat(this.model.getEdges(a)));
+  d = this.view.getBounds(d);
+  if (c) {
+    c = this.model.getChildCount(a);
+    for (var e = 0; e < c; e++) {
+      var f = this.getCellBounds(this.model.getChildAt(a, e), b, !0);
+      null != d ? d.add(f) : d = f
+    }
+  }
+  return d
+};
+mxGraph.prototype.getBoundingBoxFromGeometry = function(a, b) {
+  b = null != b ? b : !1;
+  var c = null;
+  if (null != a)
+    for (var d = 0; d < a.length; d++)
+      if (b || this.model.isVertex(a[d])) {
+        var e = this.getCellGeometry(a[d]);
+        if (null != e) {
+          var f = e.points;
+          if (null != f && 0 < f.length) {
+            for (var g = new mxRectangle(f[0].x, f[0].y, 0, 0), h = function(a) {
+                null != a && g.add(new mxRectangle(a.x, a.y, 0, 0))
+              }, k = 1; k < f.length; k++) h(f[k]);
+            h(e.getTerminalPoint(!0));
+            h(e.getTerminalPoint(!1))
+          }
+          null == c ? c = new mxRectangle(e.x, e.y, e.width, e.height) : c.add(e)
+        }
+      }
+  return c
+};
+mxGraph.prototype.refresh = function(a) {
+  this.view.clear(a, null == a);
+  this.view.validate();
+  this.sizeDidChange();
+  this.fireEvent(new mxEventObject(mxEvent.REFRESH))
+};
+mxGraph.prototype.snap = function(a) {
+  this.gridEnabled && (a = Math.round(a / this.gridSize) * this.gridSize);
+  return a
+};
+mxGraph.prototype.panGraph = function(a, b) {
+  if (this.useScrollbarsForPanning && mxUtils.hasScrollbars(this.container)) this.container.scrollLeft = -a, this.container.scrollTop = -b;
+  else {
+    var c = this.view.getCanvas();
+    if (this.dialect == mxConstants.DIALECT_SVG)
+      if (0 == a && 0 == b) {
+        if (mxClient.IS_IE ? c.setAttribute("transform", "translate(" + a + "," + b + ")") : c.removeAttribute("transform"), null != this.shiftPreview1) {
+          for (var d = this.shiftPreview1.firstChild; null != d;) {
+            var e = d.nextSibling;
+            this.container.appendChild(d);
+            d = e
+          }
+          this.shiftPreview1.parentNode.removeChild(this.shiftPreview1);
+          this.shiftPreview1 = null;
+          this.container.appendChild(c.parentNode);
+          for (d = this.shiftPreview2.firstChild; null != d;) e = d.nextSibling, this.container.appendChild(d), d = e;
+          this.shiftPreview2.parentNode.removeChild(this.shiftPreview2);
+          this.shiftPreview2 = null
+        }
+      } else {
+        c.setAttribute("transform", "translate(" + a + "," + b + ")");
+        if (null == this.shiftPreview1) {
+          this.shiftPreview1 = document.createElement("div");
+          this.shiftPreview1.style.position = "absolute";
+          this.shiftPreview1.style.overflow = "visible";
+          this.shiftPreview2 = document.createElement("div");
+          this.shiftPreview2.style.position = "absolute";
+          this.shiftPreview2.style.overflow = "visible";
+          for (var f = this.shiftPreview1, d = this.container.firstChild; null != d;) e = d.nextSibling, d != c.parentNode ? f.appendChild(d) : f = this.shiftPreview2, d = e;
+          this.container.insertBefore(this.shiftPreview1, c.parentNode);
+          this.container.appendChild(this.shiftPreview2)
+        }
+        this.shiftPreview1.style.left = a + "px";
+        this.shiftPreview1.style.top = b + "px";
+        this.shiftPreview2.style.left = a + "px";
+        this.shiftPreview2.style.top = b + "px"
+      } else c.style.left =
+      a + "px", c.style.top = b + "px";
+    this.panDx = a;
+    this.panDy = b;
+    this.fireEvent(new mxEventObject(mxEvent.PAN))
+  }
+};
+mxGraph.prototype.zoomIn = function() {
+  this.zoom(this.zoomFactor)
+};
+mxGraph.prototype.zoomOut = function() {
+  this.zoom(1 / this.zoomFactor)
+};
+mxGraph.prototype.zoomActual = function() {
+  1 == this.view.scale ? this.view.setTranslate(0, 0) : (this.view.translate.x = 0, this.view.translate.y = 0, this.view.setScale(1))
+};
+mxGraph.prototype.zoomTo = function(a, b) {
+  this.zoom(a / this.view.scale, b)
+};
+mxGraph.prototype.zoom = function(a, b) {
+  b = null != b ? b : this.centerZoom;
+  var c = this.view.scale * a,
+    d = this.view.getState(this.getSelectionCell());
+  if (this.keepSelectionVisibleOnZoom && null != d) d = new mxRectangle(d.x * a, d.y * a, d.width * a, d.height * a), this.view.scale = c, this.scrollRectToVisible(d) || (this.view.revalidate(),
+    this.view.setScale(c));
+  else if (b && !mxUtils.hasScrollbars(this.container)) {
+    var d = this.container.offsetWidth,
+      e = this.container.offsetHeight;
+    if (1 < a) var f = (a - 1) / (2 * c),
+      d = d * -f,
+      e = e * -f;
+    else f = (1 / a - 1) / (2 * this.view.scale),
+      d *= f, e *= f;
+    this.view.scaleAndTranslate(c, this.view.translate.x + d, this.view.translate.y + e)
+  } else this.view.setScale(c), mxUtils.hasScrollbars(this.container) && (e = d = 0, b && (d = this.container.offsetWidth * (a - 1) / 2, e = this.container.offsetHeight * (a - 1) / 2), this.container
+    .scrollLeft = Math.round(this.container.scrollLeft * a + d), this.container.scrollTop = Math.round(this.container.scrollTop * a + e))
+};
+mxGraph.prototype.zoomToRect = function(a) {
+  var b = this.container.clientWidth / a.width / (this.container.clientHeight / a.height);
+  a.x = Math.max(0, a.x);
+  a.y = Math.max(0, a.y);
+  var c = Math.min(this.container.scrollWidth, a.x + a.width),
+    d = Math.min(this.container.scrollHeight, a.y + a.height);
+  a.width = c - a.x;
+  a.height = d - a.y;
+  1 > b ? (b = a.height / b, c = (b - a.height) / 2, a.height = b, b = Math.min(a.y, c), a.y -= b, d = Math.min(this.container.scrollHeight, a.y + a.height), a.height = d - a.y) : (b *= a.width, c =
+    (b - a.width) / 2, a.width = b, b = Math.min(a.x, c), a.x -= b,
+    c = Math.min(this.container.scrollWidth, a.x + a.width), a.width = c - a.x);
+  b = this.container.clientWidth / a.width;
+  c = this.view.scale * b;
+  mxUtils.hasScrollbars(this.container) ? (this.view.setScale(c), this.container.scrollLeft = Math.round(a.x * b), this.container.scrollTop = Math.round(a.y * b)) : this.view.scaleAndTranslate(c,
+    this.view.translate.x - a.x / this.view.scale, this.view.translate.y - a.y / this.view.scale)
+};
+mxGraph.prototype.fit = function(a, b) {
+  if (null != this.container) {
+    a = null != a ? a : 0;
+    b = null != b ? b : !1;
+    var c = this.container.clientWidth,
+      d = this.container.clientHeight,
+      e = this.view.getGraphBounds();
+    b && (null != e.x && null != e.y) && (e.width += e.x, e.height += e.y, e.x = 0, e.y = 0);
+    var f = this.view.scale,
+      g = e.width / f,
+      h = e.height / f;
+    null != this.backgroundImage && (g = Math.max(g, this.backgroundImage.width - e.x / f), h = Math.max(h, this.backgroundImage.height - e.y / f));
+    var k = b ? a : 2 * a,
+      c = Math.floor(100 * Math.min(c / (g + k), d / (h + k))) / 100;
+    null != this.minFitScale &&
+      (c = Math.max(c, this.minFitScale));
+    null != this.maxFitScale && (c = Math.min(c, this.maxFitScale));
+    b ? this.view.scale != c && this.view.setScale(c) : mxUtils.hasScrollbars(this.container) ? (this.view.setScale(c), null != e.x && (this.container.scrollLeft = Math.round(e.x / f) * c - a -
+        Math.max(0, (this.container.clientWidth - g * c) / 2)), null != e.y && (this.container.scrollTop = Math.round(e.y / f) * c - a - Math.max(0, (this.container.clientHeight - h * c) / 2))) :
+      this.view.scaleAndTranslate(c, null != e.x ? Math.floor(this.view.translate.x - e.x / f + a + 1) : a, null !=
+        e.y ? Math.floor(this.view.translate.y - e.y / f + a + 1) : a)
+  }
+  return this.view.scale
+};
+mxGraph.prototype.scrollCellToVisible = function(a, b) {
+  var c = -this.view.translate.x,
+    d = -this.view.translate.y,
+    e = this.view.getState(a);
+  null != e && (c = new mxRectangle(c + e.x, d + e.y, e.width, e.height), b && null != this.container && (d = this.container.clientWidth, e = this.container.clientHeight, c.x = c.getCenterX() - d /
+    2, c.width = d, c.y = c.getCenterY() - e / 2, c.height = e), this.scrollRectToVisible(c) && this.view.setTranslate(this.view.translate.x, this.view.translate.y))
+};
+mxGraph.prototype.scrollRectToVisible = function(a) {
+  var b = !1;
+  if (null != a) {
+    var c = this.container.offsetWidth,
+      d = this.container.offsetHeight,
+      e = Math.min(c, a.width),
+      f = Math.min(d, a.height);
+    if (mxUtils.hasScrollbars(this.container)) {
+      c = this.container;
+      a.x += this.view.translate.x;
+      a.y += this.view.translate.y;
+      var g = c.scrollLeft - a.x,
+        d = Math.max(g - c.scrollLeft, 0);
+      0 < g ? c.scrollLeft -= g + 2 : (g = a.x + e - c.scrollLeft - c.clientWidth, 0 < g && (c.scrollLeft += g + 2));
+      e = c.scrollTop - a.y;
+      g = Math.max(0, e - c.scrollTop);
+      0 < e ? c.scrollTop -= e + 2 : (e = a.y +
+        f - c.scrollTop - c.clientHeight, 0 < e && (c.scrollTop += e + 2));
+      !this.useScrollbarsForPanning && (0 != d || 0 != g) && this.view.setTranslate(d, g)
+    } else {
+      var g = -this.view.translate.x,
+        h = -this.view.translate.y,
+        k = this.view.scale;
+      a.x + e > g + c && (this.view.translate.x -= (a.x + e - c - g) / k, b = !0);
+      a.y + f > h + d && (this.view.translate.y -= (a.y + f - d - h) / k, b = !0);
+      a.x < g && (this.view.translate.x += (g - a.x) / k, b = !0);
+      a.y < h && (this.view.translate.y += (h - a.y) / k, b = !0);
+      b && (this.view.refresh(), null != this.selectionCellsHandler && this.selectionCellsHandler.refresh())
+    }
+  }
+  return b
+};
+mxGraph.prototype.getCellGeometry = function(a) {
+  return this.model.getGeometry(a)
+};
+mxGraph.prototype.isCellVisible = function(a) {
+  return this.model.isVisible(a)
+};
+mxGraph.prototype.isCellCollapsed = function(a) {
+  return this.model.isCollapsed(a)
+};
+mxGraph.prototype.isCellConnectable = function(a) {
+  return this.model.isConnectable(a)
+};
+mxGraph.prototype.isOrthogonal = function(a) {
+  var b = a.style[mxConstants.STYLE_ORTHOGONAL];
+  if (null != b) return b;
+  a = this.view.getEdgeStyle(a);
+  return a == mxEdgeStyle.SegmentConnector || a == mxEdgeStyle.ElbowConnector || a == mxEdgeStyle.SideToSide || a == mxEdgeStyle.TopToBottom || a == mxEdgeStyle.EntityRelation || a == mxEdgeStyle.OrthConnector
+};
+mxGraph.prototype.isLoop = function(a) {
+  var b = a.getVisibleTerminalState(!0);
+  a = a.getVisibleTerminalState(!1);
+  return null != b && b == a
+};
+mxGraph.prototype.isCloneEvent = function(a) {
+  return mxEvent.isControlDown(a)
+};
+mxGraph.prototype.isToggleEvent = function(a) {
+  return mxClient.IS_MAC ? mxEvent.isMetaDown(a) : mxEvent.isControlDown(a)
+};
+mxGraph.prototype.isGridEnabledEvent = function(a) {
+  return null != a && !mxEvent.isAltDown(a)
+};
+mxGraph.prototype.isConstrainedEvent = function(a) {
+  return mxEvent.isShiftDown(a)
+};
+mxGraph.prototype.isForceMarqueeEvent = function(a) {
+  return mxEvent.isAltDown(a)
+};
+mxGraph.prototype.validationAlert = function(a) {
+  mxUtils.alert(a)
+};
+mxGraph.prototype.isEdgeValid = function(a, b, c) {
+  return null == this.getEdgeValidationError(a, b, c)
+};
+mxGraph.prototype.getEdgeValidationError = function(a, b, c) {
+  if (null != a && !this.isAllowDanglingEdges() && (null == b || null == c)) return "";
+  if (null != a && null == this.model.getTerminal(a, !0) && null == this.model.getTerminal(a, !1)) return null;
+  if (!this.allowLoops && b == c && null != b || !this.isValidConnection(b, c)) return "";
+  if (null != b && null != c) {
+    var d = "";
+    if (!this.multigraph) {
+      var e = this.model.getEdgesBetween(b, c, !0);
+      if (1 < e.length || 1 == e.length && e[0] != a) d += (mxResources.get(this.alreadyConnectedResource) || this.alreadyConnectedResource) +
+        "\n"
+    }
+    var e = this.model.getDirectedEdgeCount(b, !0, a),
+      f = this.model.getDirectedEdgeCount(c, !1, a);
+    if (null != this.multiplicities)
+      for (var g = 0; g < this.multiplicities.length; g++) {
+        var h = this.multiplicities[g].check(this, a, b, c, e, f);
+        null != h && (d += h)
+      }
+    h = this.validateEdge(a, b, c);
+    null != h && (d += h);
+    return 0 < d.length ? d : null
+  }
+  return this.allowDanglingEdges ? null : ""
+};
+mxGraph.prototype.validateEdge = function(a, b, c) {
+  return null
+};
+mxGraph.prototype.validateGraph = function(a, b) {
+  a = null != a ? a : this.model.getRoot();
+  b = null != b ? b : {};
+  for (var c = !0, d = this.model.getChildCount(a), e = 0; e < d; e++) {
+    var f = this.model.getChildAt(a, e),
+      g = b;
+    this.isValidRoot(f) && (g = {});
+    g = this.validateGraph(f, g);
+    null != g ? this.setCellWarning(f, g.replace(/\n/g, "\x3cbr\x3e")) : this.setCellWarning(f, null);
+    c = c && null == g
+  }
+  d = "";
+  this.isCellCollapsed(a) && !c && (d += (mxResources.get(this.containsValidationErrorsResource) || this.containsValidationErrorsResource) + "\n");
+  d = this.model.isEdge(a) ?
+    d + (this.getEdgeValidationError(a, this.model.getTerminal(a, !0), this.model.getTerminal(a, !1)) || "") : d + (this.getCellValidationError(a) || "");
+  e = this.validateCell(a, b);
+  null != e && (d += e);
+  null == this.model.getParent(a) && this.view.validate();
+  return 0 < d.length || !c ? d : null
+};
+mxGraph.prototype.getCellValidationError = function(a) {
+  var b = this.model.getDirectedEdgeCount(a, !0),
+    c = this.model.getDirectedEdgeCount(a, !1);
+  a = this.model.getValue(a);
+  var d = "";
+  if (null != this.multiplicities)
+    for (var e = 0; e < this.multiplicities.length; e++) {
+      var f = this.multiplicities[e];
+      if (f.source && mxUtils.isNode(a, f.type, f.attr, f.value) && (0 == f.max && 0 < b || 1 == f.min && 0 == b || 1 == f.max && 1 < b)) d += f.countError + "\n";
+      else if (!f.source && mxUtils.isNode(a, f.type, f.attr, f.value) && (0 == f.max && 0 < c || 1 == f.min && 0 == c || 1 == f.max && 1 <
+          c)) d += f.countError + "\n"
+    }
+  return 0 < d.length ? d : null
+};
+mxGraph.prototype.validateCell = function(a, b) {
+  return null
+};
+mxGraph.prototype.getBackgroundImage = function() {
+  return this.backgroundImage
+};
+mxGraph.prototype.setBackgroundImage = function(a) {
+  this.backgroundImage = a
+};
+mxGraph.prototype.getFoldingImage = function(a) {
+  if (null != a && this.foldingEnabled && !this.getModel().isEdge(a.cell)) {
+    var b = this.isCellCollapsed(a.cell);
+    if (this.isCellFoldable(a.cell, !b)) return b ? this.collapsedImage : this.expandedImage
+  }
+  return null
+};
+mxGraph.prototype.convertValueToString = function(a) {
+  a = this.model.getValue(a);
+  if (null != a) {
+    if (mxUtils.isNode(a)) return a.nodeName;
+    if ("function" == typeof a.toString) return a.toString()
+  }
+  return ""
+};
+mxGraph.prototype.getLabel = function(a) {
+  var b = "";
+  if (this.labelsVisible && null != a) {
+    var c = this.view.getState(a),
+      c = null != c ? c.style : this.getCellStyle(a);
+    mxUtils.getValue(c, mxConstants.STYLE_NOLABEL, !1) || (b = this.convertValueToString(a))
+  }
+  return b
+};
+mxGraph.prototype.isHtmlLabel = function(a) {
+  return this.isHtmlLabels()
+};
+mxGraph.prototype.isHtmlLabels = function() {
+  return this.htmlLabels
+};
+mxGraph.prototype.setHtmlLabels = function(a) {
+  this.htmlLabels = a
+};
+mxGraph.prototype.isWrapping = function(a) {
+  var b = this.view.getState(a);
+  a = null != b ? b.style : this.getCellStyle(a);
+  return null != a ? "wrap" == a[mxConstants.STYLE_WHITE_SPACE] : !1
+};
+mxGraph.prototype.isLabelClipped = function(a) {
+  var b = this.view.getState(a);
+  a = null != b ? b.style : this.getCellStyle(a);
+  return null != a ? "hidden" == a[mxConstants.STYLE_OVERFLOW] : !1
+};
+mxGraph.prototype.getTooltip = function(a, b, c, d) {
+  var e = null;
+  if (null != a) {
+    if (null != a.control && (b == a.control.node || b.parentNode == a.control.node)) e = this.collapseExpandResource, e = mxResources.get(e) || e;
+    null == e && null != a.overlays && a.overlays.visit(function(a, c) {
+      if (null == e && (b == c.node || b.parentNode == c.node)) e = c.overlay.toString()
+    });
+    null == e && (c = this.selectionCellsHandler.getHandler(a.cell), null != c && "function" == typeof c.getTooltipForNode && (e = c.getTooltipForNode(b)));
+    null == e && (e = this.getTooltipForCell(a.cell))
+  }
+  return e
+};
+mxGraph.prototype.getTooltipForCell = function(a) {
+  var b = null;
+  return b = null != a && null != a.getTooltip ? a.getTooltip() : this.convertValueToString(a)
+};
+mxGraph.prototype.getCursorForCell = function(a) {
+  return null
+};
+mxGraph.prototype.getStartSize = function(a) {
+  var b = new mxRectangle,
+    c = this.view.getState(a);
+  a = null != c ? c.style : this.getCellStyle(a);
+  null != a && (c = parseInt(mxUtils.getValue(a, mxConstants.STYLE_STARTSIZE, mxConstants.DEFAULT_STARTSIZE)), mxUtils.getValue(a, mxConstants.STYLE_HORIZONTAL, !0) ? b.height = c : b.width = c);
+  return b
+};
+mxGraph.prototype.getImage = function(a) {
+  return null != a && null != a.style ? a.style[mxConstants.STYLE_IMAGE] : null
+};
+mxGraph.prototype.getVerticalAlign = function(a) {
+  return null != a && null != a.style ? a.style[mxConstants.STYLE_VERTICAL_ALIGN] || mxConstants.ALIGN_MIDDLE : null
+};
+mxGraph.prototype.getIndicatorColor = function(a) {
+  return null != a && null != a.style ? a.style[mxConstants.STYLE_INDICATOR_COLOR] : null
+};
+mxGraph.prototype.getIndicatorGradientColor = function(a) {
+  return null != a && null != a.style ? a.style[mxConstants.STYLE_INDICATOR_GRADIENTCOLOR] : null
+};
+mxGraph.prototype.getIndicatorShape = function(a) {
+  return null != a && null != a.style ? a.style[mxConstants.STYLE_INDICATOR_SHAPE] : null
+};
+mxGraph.prototype.getIndicatorImage = function(a) {
+  return null != a && null != a.style ? a.style[mxConstants.STYLE_INDICATOR_IMAGE] : null
+};
+mxGraph.prototype.getBorder = function() {
+  return this.border
+};
+mxGraph.prototype.setBorder = function(a) {
+  this.border = a
+};
+mxGraph.prototype.isSwimlane = function(a) {
+  if (null != a && this.model.getParent(a) != this.model.getRoot()) {
+    var b = this.view.getState(a),
+      b = null != b ? b.style : this.getCellStyle(a);
+    if (null != b && !this.model.isEdge(a)) return b[mxConstants.STYLE_SHAPE] == mxConstants.SHAPE_SWIMLANE
+  }
+  return !1
+};
+mxGraph.prototype.isResizeContainer = function() {
+  return this.resizeContainer
+};
+mxGraph.prototype.setResizeContainer = function(a) {
+  this.resizeContainer = a
+};
+mxGraph.prototype.isEnabled = function() {
+  return this.enabled
+};
+mxGraph.prototype.setEnabled = function(a) {
+  this.enabled = a
+};
+mxGraph.prototype.isEscapeEnabled = function() {
+  return this.escapeEnabled
+};
+mxGraph.prototype.setEscapeEnabled = function(a) {
+  this.escapeEnabled = a
+};
+mxGraph.prototype.isInvokesStopCellEditing = function() {
+  return this.invokesStopCellEditing
+};
+mxGraph.prototype.setInvokesStopCellEditing = function(a) {
+  this.invokesStopCellEditing = a
+};
+mxGraph.prototype.isEnterStopsCellEditing = function() {
+  return this.enterStopsCellEditing
+};
+mxGraph.prototype.setEnterStopsCellEditing = function(a) {
+  this.enterStopsCellEditing = a
+};
+mxGraph.prototype.isCellLocked = function(a) {
+  var b = this.model.getGeometry(a);
+  return this.isCellsLocked() || null != b && this.model.isVertex(a) && b.relative
+};
+mxGraph.prototype.isCellsLocked = function() {
+  return this.cellsLocked
+};
+mxGraph.prototype.setCellsLocked = function(a) {
+  this.cellsLocked = a
+};
+mxGraph.prototype.getCloneableCells = function(a) {
+  return this.model.filterCells(a, mxUtils.bind(this, function(a) {
+    return this.isCellCloneable(a)
+  }))
+};
+mxGraph.prototype.isCellCloneable = function(a) {
+  var b = this.view.getState(a);
+  a = null != b ? b.style : this.getCellStyle(a);
+  return this.isCellsCloneable() && 0 != a[mxConstants.STYLE_CLONEABLE]
+};
+mxGraph.prototype.isCellsCloneable = function() {
+  return this.cellsCloneable
+};
+mxGraph.prototype.setCellsCloneable = function(a) {
+  this.cellsCloneable = a
+};
+mxGraph.prototype.getExportableCells = function(a) {
+  return this.model.filterCells(a, mxUtils.bind(this, function(a) {
+    return this.canExportCell(a)
+  }))
+};
+mxGraph.prototype.canExportCell = function(a) {
+  return this.exportEnabled
+};
+mxGraph.prototype.getImportableCells = function(a) {
+  return this.model.filterCells(a, mxUtils.bind(this, function(a) {
+    return this.canImportCell(a)
+  }))
+};
+mxGraph.prototype.canImportCell = function(a) {
+  return this.importEnabled
+};
+mxGraph.prototype.isCellSelectable = function(a) {
+  return this.isCellsSelectable()
+};
+mxGraph.prototype.isCellsSelectable = function() {
+  return this.cellsSelectable
+};
+mxGraph.prototype.setCellsSelectable = function(a) {
+  this.cellsSelectable = a
+};
+mxGraph.prototype.getDeletableCells = function(a) {
+  return this.model.filterCells(a, mxUtils.bind(this, function(a) {
+    return this.isCellDeletable(a)
+  }))
+};
+mxGraph.prototype.isCellDeletable = function(a) {
+  var b = this.view.getState(a);
+  a = null != b ? b.style : this.getCellStyle(a);
+  return this.isCellsDeletable() && 0 != a[mxConstants.STYLE_DELETABLE]
+};
+mxGraph.prototype.isCellsDeletable = function() {
+  return this.cellsDeletable
+};
+mxGraph.prototype.setCellsDeletable = function(a) {
+  this.cellsDeletable = a
+};
+mxGraph.prototype.isLabelMovable = function(a) {
+  return !this.isCellLocked(a) && (this.model.isEdge(a) && this.edgeLabelsMovable || this.model.isVertex(a) && this.vertexLabelsMovable)
+};
+mxGraph.prototype.getMovableCells = function(a) {
+  return this.model.filterCells(a, mxUtils.bind(this, function(a) {
+    return this.isCellMovable(a)
+  }))
+};
+mxGraph.prototype.isCellMovable = function(a) {
+  var b = this.view.getState(a),
+    b = null != b ? b.style : this.getCellStyle(a);
+  return this.isCellsMovable() && !this.isCellLocked(a) && 0 != b[mxConstants.STYLE_MOVABLE]
+};
+mxGraph.prototype.isCellsMovable = function() {
+  return this.cellsMovable
+};
+mxGraph.prototype.setCellsMovable = function(a) {
+  this.cellsMovable = a
+};
+mxGraph.prototype.isGridEnabled = function() {
+  return this.gridEnabled
+};
+mxGraph.prototype.setGridEnabled = function(a) {
+  this.gridEnabled = a
+};
+mxGraph.prototype.isPortsEnabled = function() {
+  return this.portsEnabled
+};
+mxGraph.prototype.setPortsEnabled = function(a) {
+  this.portsEnabled = a
+};
+mxGraph.prototype.getGridSize = function() {
+  return this.gridSize
+};
+mxGraph.prototype.setGridSize = function(a) {
+  this.gridSize = a
+};
+mxGraph.prototype.getTolerance = function() {
+  return this.tolerance
+};
+mxGraph.prototype.setTolerance = function(a) {
+  this.tolerance = a
+};
+mxGraph.prototype.isVertexLabelsMovable = function() {
+  return this.vertexLabelsMovable
+};
+mxGraph.prototype.setVertexLabelsMovable = function(a) {
+  this.vertexLabelsMovable = a
+};
+mxGraph.prototype.isEdgeLabelsMovable = function() {
+  return this.edgeLabelsMovable
+};
+mxGraph.prototype.setEdgeLabelsMovable = function(a) {
+  this.edgeLabelsMovable = a
+};
+mxGraph.prototype.isSwimlaneNesting = function() {
+  return this.swimlaneNesting
+};
+mxGraph.prototype.setSwimlaneNesting = function(a) {
+  this.swimlaneNesting = a
+};
+mxGraph.prototype.isSwimlaneSelectionEnabled = function() {
+  return this.swimlaneSelectionEnabled
+};
+mxGraph.prototype.setSwimlaneSelectionEnabled = function(a) {
+  this.swimlaneSelectionEnabled = a
+};
+mxGraph.prototype.isMultigraph = function() {
+  return this.multigraph
+};
+mxGraph.prototype.setMultigraph = function(a) {
+  this.multigraph = a
+};
+mxGraph.prototype.isAllowLoops = function() {
+  return this.allowLoops
+};
+mxGraph.prototype.setAllowDanglingEdges = function(a) {
+  this.allowDanglingEdges = a
+};
+mxGraph.prototype.isAllowDanglingEdges = function() {
+  return this.allowDanglingEdges
+};
+mxGraph.prototype.setConnectableEdges = function(a) {
+  this.connectableEdges = a
+};
+mxGraph.prototype.isConnectableEdges = function() {
+  return this.connectableEdges
+};
+mxGraph.prototype.setCloneInvalidEdges = function(a) {
+  this.cloneInvalidEdges = a
+};
+mxGraph.prototype.isCloneInvalidEdges = function() {
+  return this.cloneInvalidEdges
+};
+mxGraph.prototype.setAllowLoops = function(a) {
+  this.allowLoops = a
+};
+mxGraph.prototype.isDisconnectOnMove = function() {
+  return this.disconnectOnMove
+};
+mxGraph.prototype.setDisconnectOnMove = function(a) {
+  this.disconnectOnMove = a
+};
+mxGraph.prototype.isDropEnabled = function() {
+  return this.dropEnabled
+};
+mxGraph.prototype.setDropEnabled = function(a) {
+  this.dropEnabled = a
+};
+mxGraph.prototype.isSplitEnabled = function() {
+  return this.splitEnabled
+};
+mxGraph.prototype.setSplitEnabled = function(a) {
+  this.splitEnabled = a
+};
+mxGraph.prototype.isCellResizable = function(a) {
+  var b = this.view.getState(a),
+    b = null != b ? b.style : this.getCellStyle(a);
+  return this.isCellsResizable() && !this.isCellLocked(a) && 0 != b[mxConstants.STYLE_RESIZABLE]
+};
+mxGraph.prototype.isCellsResizable = function() {
+  return this.cellsResizable
+};
+mxGraph.prototype.setCellsResizable = function(a) {
+  this.cellsResizable = a
+};
+mxGraph.prototype.isTerminalPointMovable = function(a, b) {
+  return !0
+};
+mxGraph.prototype.isCellBendable = function(a) {
+  var b = this.view.getState(a),
+    b = null != b ? b.style : this.getCellStyle(a);
+  return this.isCellsBendable() && !this.isCellLocked(a) && 0 != b[mxConstants.STYLE_BENDABLE]
+};
+mxGraph.prototype.isCellsBendable = function() {
+  return this.cellsBendable
+};
+mxGraph.prototype.setCellsBendable = function(a) {
+  this.cellsBendable = a
+};
+mxGraph.prototype.isCellEditable = function(a) {
+  var b = this.view.getState(a),
+    b = null != b ? b.style : this.getCellStyle(a);
+  return this.isCellsEditable() && !this.isCellLocked(a) && 0 != b[mxConstants.STYLE_EDITABLE]
+};
+mxGraph.prototype.isCellsEditable = function() {
+  return this.cellsEditable
+};
+mxGraph.prototype.setCellsEditable = function(a) {
+  this.cellsEditable = a
+};
+mxGraph.prototype.isCellDisconnectable = function(a, b, c) {
+  return this.isCellsDisconnectable() && !this.isCellLocked(a)
+};
+mxGraph.prototype.isCellsDisconnectable = function() {
+  return this.cellsDisconnectable
+};
+mxGraph.prototype.setCellsDisconnectable = function(a) {
+  this.cellsDisconnectable = a
+};
+mxGraph.prototype.isValidSource = function(a) {
+  return null == a && this.allowDanglingEdges || null != a && (!this.model.isEdge(a) || this.connectableEdges) && this.isCellConnectable(a)
+};
+mxGraph.prototype.isValidTarget = function(a) {
+  return this.isValidSource(a)
+};
+mxGraph.prototype.isValidConnection = function(a, b) {
+  return this.isValidSource(a) && this.isValidTarget(b)
+};
+mxGraph.prototype.setConnectable = function(a) {
+  this.connectionHandler.setEnabled(a)
+};
+mxGraph.prototype.isConnectable = function(a) {
+  return this.connectionHandler.isEnabled()
+};
+mxGraph.prototype.setTooltips = function(a) {
+  this.tooltipHandler.setEnabled(a)
+};
+mxGraph.prototype.setPanning = function(a) {
+  this.panningHandler.panningEnabled = a
+};
+mxGraph.prototype.isEditing = function(a) {
+  if (null != this.cellEditor) {
+    var b = this.cellEditor.getEditingCell();
+    return null == a ? null != b : a == b
+  }
+  return !1
+};
+mxGraph.prototype.isAutoSizeCell = function(a) {
+  var b = this.view.getState(a);
+  a = null != b ? b.style : this.getCellStyle(a);
+  return this.isAutoSizeCells() || 1 == a[mxConstants.STYLE_AUTOSIZE]
+};
+mxGraph.prototype.isAutoSizeCells = function() {
+  return this.autoSizeCells
+};
+mxGraph.prototype.setAutoSizeCells = function(a) {
+  this.autoSizeCells = a
+};
+mxGraph.prototype.isExtendParent = function(a) {
+  return !this.getModel().isEdge(a) && this.isExtendParents()
+};
+mxGraph.prototype.isExtendParents = function() {
+  return this.extendParents
+};
+mxGraph.prototype.setExtendParents = function(a) {
+  this.extendParents = a
+};
+mxGraph.prototype.isExtendParentsOnAdd = function() {
+  return this.extendParentsOnAdd
+};
+mxGraph.prototype.setExtendParentsOnAdd = function(a) {
+  this.extendParentsOnAdd = a
+};
+mxGraph.prototype.isConstrainChild = function(a) {
+  return this.isConstrainChildren() && !this.getModel().isEdge(this.getModel().getParent(a))
+};
+mxGraph.prototype.isConstrainChildren = function() {
+  return this.constrainChildren
+};
+mxGraph.prototype.setConstrainChildren = function(a) {
+  this.constrainChildren = a
+};
+mxGraph.prototype.isAllowNegativeCoordinates = function() {
+  return this.allowNegativeCoordinates
+};
+mxGraph.prototype.setAllowNegativeCoordinates = function(a) {
+  this.allowNegativeCoordinates = a
+};
+mxGraph.prototype.getOverlap = function(a) {
+  return this.isAllowOverlapParent(a) ? this.defaultOverlap : 0
+};
+mxGraph.prototype.isAllowOverlapParent = function(a) {
+  return !1
+};
+mxGraph.prototype.getFoldableCells = function(a, b) {
+  return this.model.filterCells(a, mxUtils.bind(this, function(a) {
+    return this.isCellFoldable(a, b)
+  }))
+};
+mxGraph.prototype.isCellFoldable = function(a, b) {
+  var c = this.view.getState(a),
+    c = null != c ? c.style : this.getCellStyle(a);
+  return 0 < this.model.getChildCount(a) && 0 != c[mxConstants.STYLE_FOLDABLE]
+};
+mxGraph.prototype.isValidDropTarget = function(a, b, c) {
+  return null != a && (this.isSplitEnabled() && this.isSplitTarget(a, b, c) || !this.model.isEdge(a) && (this.isSwimlane(a) || 0 < this.model.getChildCount(a) && !this.isCellCollapsed(a)))
+};
+mxGraph.prototype.isSplitTarget = function(a, b, c) {
+  return this.model.isEdge(a) && null != b && 1 == b.length && this.isCellConnectable(b[0]) && null == this.getEdgeValidationError(a, this.model.getTerminal(a, !0), b[0]) ? (c = this.model.getTerminal(
+    a, !0), a = this.model.getTerminal(a, !1), !this.model.isAncestor(b[0], c) && !this.model.isAncestor(b[0], a)) : !1
+};
+mxGraph.prototype.getDropTarget = function(a, b, c) {
+  if (!this.isSwimlaneNesting())
+    for (var d = 0; d < a.length; d++)
+      if (this.isSwimlane(a[d])) return null;
+  d = mxUtils.convertPoint(this.container, mxEvent.getClientX(b), mxEvent.getClientY(b));
+  d.x -= this.panDx;
+  d.y -= this.panDy;
+  d = this.getSwimlaneAt(d.x, d.y);
+  if (null == c) c = d;
+  else if (null != d) {
+    for (var e = this.model.getParent(d); null != e && this.isSwimlane(e) && e != c;) e = this.model.getParent(e);
+    e == c && (c = d)
+  }
+  for (; null != c && !this.isValidDropTarget(c, a, b) && !this.model.isLayer(c);) c = this.model.getParent(c);
+  return !this.model.isLayer(c) && 0 > mxUtils.indexOf(a, c) ? c : null
+};
+mxGraph.prototype.getDefaultParent = function() {
+  var a = this.defaultParent;
+  null == a && (a = this.getCurrentRoot(), null == a && (a = this.model.getRoot(), a = this.model.getChildAt(a, 0)));
+  return a
+};
+mxGraph.prototype.setDefaultParent = function(a) {
+  this.defaultParent = a
+};
+mxGraph.prototype.getSwimlane = function(a) {
+  for (; null != a && !this.isSwimlane(a);) a = this.model.getParent(a);
+  return a
+};
+mxGraph.prototype.getSwimlaneAt = function(a, b, c) {
+  c = c || this.getDefaultParent();
+  if (null != c)
+    for (var d = this.model.getChildCount(c), e = 0; e < d; e++) {
+      var f = this.model.getChildAt(c, e),
+        g = this.getSwimlaneAt(a, b, f);
+      if (null != g) return g;
+      if (this.isSwimlane(f) && (g = this.view.getState(f), this.intersects(g, a, b))) return f
+    }
+  return null
+};
+mxGraph.prototype.getCellAt = function(a, b, c, d, e) {
+  d = null != d ? d : !0;
+  e = null != e ? e : !0;
+  c = null != c ? c : this.getDefaultParent();
+  if (null != c)
+    for (var f = this.model.getChildCount(c) - 1; 0 <= f; f--) {
+      var g = this.model.getChildAt(c, f),
+        h = this.getCellAt(a, b, g, d, e);
+      if (null != h) return h;
+      if (this.isCellVisible(g) && (e && this.model.isEdge(g) || d && this.model.isVertex(g)))
+        if (h = this.view.getState(g), this.intersects(h, a, b)) return g
+    }
+  return null
+};
+mxGraph.prototype.intersects = function(a, b, c) {
+  if (null != a) {
+    var d = a.absolutePoints;
+    if (null != d) {
+      a = this.tolerance * this.tolerance;
+      for (var e = d[0], f = 1; f < d.length; f++) {
+        var g = d[f];
+        if (mxUtils.ptSegDistSq(e.x, e.y, g.x, g.y, b, c) <= a) return !0;
+        e = g
+      }
+    } else if (e = mxUtils.toRadians(mxUtils.getValue(a.style, mxConstants.STYLE_ROTATION) || 0), 0 != e && (d = Math.cos(-e), e = Math.sin(-e), f = new mxPoint(a.getCenterX(), a.getCenterY()), e =
+        mxUtils.getRotatedPoint(new mxPoint(b, c), d, e, f), b = e.x, c = e.y), mxUtils.contains(a, b, c)) return !0
+  }
+  return !1
+};
+mxGraph.prototype.hitsSwimlaneContent = function(a, b, c) {
+  var d = this.getView().getState(a);
+  a = this.getStartSize(a);
+  if (null != d) {
+    var e = this.getView().getScale();
+    b -= d.x;
+    c -= d.y;
+    if (0 < a.width && 0 < b && b > a.width * e || 0 < a.height && 0 < c && c > a.height * e) return !0
+  }
+  return !1
+};
+mxGraph.prototype.getChildVertices = function(a) {
+  return this.getChildCells(a, !0, !1)
+};
+mxGraph.prototype.getChildEdges = function(a) {
+  return this.getChildCells(a, !1, !0)
+};
+mxGraph.prototype.getChildCells = function(a, b, c) {
+  a = null != a ? a : this.getDefaultParent();
+  a = this.model.getChildCells(a, null != b ? b : !1, null != c ? c : !1);
+  b = [];
+  for (c = 0; c < a.length; c++) this.isCellVisible(a[c]) && b.push(a[c]);
+  return b
+};
+mxGraph.prototype.getConnections = function(a, b) {
+  return this.getEdges(a, b, !0, !0, !1)
+};
+mxGraph.prototype.getIncomingEdges = function(a, b) {
+  return this.getEdges(a, b, !0, !1, !1)
+};
+mxGraph.prototype.getOutgoingEdges = function(a, b) {
+  return this.getEdges(a, b, !1, !0, !1)
+};
+mxGraph.prototype.getEdges = function(a, b, c, d, e, f) {
+  c = null != c ? c : !0;
+  d = null != d ? d : !0;
+  e = null != e ? e : !0;
+  f = null != f ? f : !1;
+  for (var g = [], h = this.isCellCollapsed(a), k = this.model.getChildCount(a), l = 0; l < k; l++) {
+    var m = this.model.getChildAt(a, l);
+    if (h || !this.isCellVisible(m)) g = g.concat(this.model.getEdges(m, c, d))
+  }
+  g = g.concat(this.model.getEdges(a, c, d));
+  h = [];
+  for (l = 0; l < g.length; l++) m = this.view.getState(g[l]), k = null != m ? m.getVisibleTerminal(!0) : this.view.getVisibleTerminal(g[l], !0), m = null != m ? m.getVisibleTerminal(!1) : this.view
+    .getVisibleTerminal(g[l], !1), (e && k == m || k != m && (c && m == a && (null == b || this.isValidAncestor(k, b, f)) || d && k == a && (null == b || this.isValidAncestor(m, b, f)))) && h.push(
+      g[l]);
+  return h
+};
+mxGraph.prototype.isValidAncestor = function(a, b, c) {
+  return c ? this.model.isAncestor(b, a) : this.model.getParent(a) == b
+};
+mxGraph.prototype.getOpposites = function(a, b, c, d) {
+  c = null != c ? c : !0;
+  d = null != d ? d : !0;
+  var e = [],
+    f = {};
+  if (null != a)
+    for (var g = 0; g < a.length; g++) {
+      var h = this.view.getState(a[g]),
+        k = null != h ? h.getVisibleTerminal(!0) : this.view.getVisibleTerminal(a[g], !0),
+        h = null != h ? h.getVisibleTerminal(!1) : this.view.getVisibleTerminal(a[g], !1);
+      if (k == b && null != h && h != b && d) {
+        var l = mxCellPath.create(h);
+        null == f[l] && (f[l] = h, e.push(h))
+      } else h == b && (null != k && k != b && c) && (l = mxCellPath.create(k), null == f[l] && (f[l] = k, e.push(k)))
+    }
+  return e
+};
+mxGraph.prototype.getEdgesBetween = function(a, b, c) {
+  c = null != c ? c : !1;
+  for (var d = this.getEdges(a), e = [], f = 0; f < d.length; f++) {
+    var g = this.view.getState(d[f]),
+      h = null != g ? g.getVisibleTerminal(!0) : this.view.getVisibleTerminal(d[f], !0),
+      g = null != g ? g.getVisibleTerminal(!1) : this.view.getVisibleTerminal(d[f], !1);
+    (h == a && g == b || !c && h == b && g == a) && e.push(d[f])
+  }
+  return e
+};
+mxGraph.prototype.getPointForEvent = function(a, b) {
+  var c = mxUtils.convertPoint(this.container, mxEvent.getClientX(a), mxEvent.getClientY(a)),
+    d = this.view.scale,
+    e = this.view.translate,
+    f = !1 != b ? this.gridSize / 2 : 0;
+  c.x = this.snap(c.x / d - e.x - f);
+  c.y = this.snap(c.y / d - e.y - f);
+  return c
+};
+mxGraph.prototype.getCells = function(a, b, c, d, e, f) {
+  f = null != f ? f : [];
+  if (0 < c || 0 < d) {
+    var g = a + c,
+      h = b + d;
+    e = e || this.getDefaultParent();
+    if (null != e)
+      for (var k = this.model.getChildCount(e), l = 0; l < k; l++) {
+        var m = this.model.getChildAt(e, l),
+          n = this.view.getState(m);
+        if (this.isCellVisible(m) && null != n) {
+          var p = n,
+            n = mxUtils.getValue(n.style, mxConstants.STYLE_ROTATION) || 0;
+          0 != n && (p = mxUtils.getBoundingBox(p, n));
+          p.x >= a && p.y + p.height <= h && p.y >= b && p.x + p.width <= g ? f.push(m) : this.getCells(a, b, c, d, m, f)
+        }
+      }
+  }
+  return f
+};
+mxGraph.prototype.getCellsBeyond = function(a, b, c, d, e) {
+  var f = [];
+  if (d || e)
+    if (null == c && (c = this.getDefaultParent()), null != c)
+      for (var g = this.model.getChildCount(c), h = 0; h < g; h++) {
+        var k = this.model.getChildAt(c, h),
+          l = this.view.getState(k);
+        this.isCellVisible(k) && null != l && (!d || l.x >= a) && (!e || l.y >= b) && f.push(k)
+      }
+  return f
+};
+mxGraph.prototype.findTreeRoots = function(a, b, c) {
+  b = null != b ? b : !1;
+  c = null != c ? c : !1;
+  var d = [];
+  if (null != a) {
+    for (var e = this.getModel(), f = e.getChildCount(a), g = null, h = 0, k = 0; k < f; k++) {
+      var l = e.getChildAt(a, k);
+      if (this.model.isVertex(l) && this.isCellVisible(l)) {
+        for (var m = this.getConnections(l, b ? a : null), n = 0, p = 0, q = 0; q < m.length; q++) this.view.getVisibleTerminal(m[q], !0) == l ? n++ : p++;
+        (c && 0 == n && 0 < p || !c && 0 == p && 0 < n) && d.push(l);
+        m = c ? p - n : n - p;
+        m > h && (h = m, g = l)
+      }
+    }
+    0 == d.length && null != g && d.push(g)
+  }
+  return d
+};
+mxGraph.prototype.traverse = function(a, b, c, d, e) {
+  if (null != c && null != a) {
+    b = null != b ? b : !0;
+    e = e || [];
+    var f = mxCellPath.create(a);
+    if (null == e[f] && (e[f] = a, d = c(a, d), null == d || d))
+      if (d = this.model.getEdgeCount(a), 0 < d)
+        for (f = 0; f < d; f++) {
+          var g = this.model.getEdgeAt(a, f),
+            h = this.model.getTerminal(g, !0) == a;
+          if (!b || h) h = this.model.getTerminal(g, !h), this.traverse(h, b, c, g, e)
+        }
+  }
+};
+mxGraph.prototype.isCellSelected = function(a) {
+  return this.getSelectionModel().isSelected(a)
+};
+mxGraph.prototype.isSelectionEmpty = function() {
+  return this.getSelectionModel().isEmpty()
+};
+mxGraph.prototype.clearSelection = function() {
+  return this.getSelectionModel().clear()
+};
+mxGraph.prototype.getSelectionCount = function() {
+  return this.getSelectionModel().cells.length
+};
+mxGraph.prototype.getSelectionCell = function() {
+  return this.getSelectionModel().cells[0]
+};
+mxGraph.prototype.getSelectionCells = function() {
+  return this.getSelectionModel().cells.slice()
+};
+mxGraph.prototype.setSelectionCell = function(a) {
+  this.getSelectionModel().setCell(a)
+};
+mxGraph.prototype.setSelectionCells = function(a) {
+  this.getSelectionModel().setCells(a)
+};
+mxGraph.prototype.addSelectionCell = function(a) {
+  this.getSelectionModel().addCell(a)
+};
+mxGraph.prototype.addSelectionCells = function(a) {
+  this.getSelectionModel().addCells(a)
+};
+mxGraph.prototype.removeSelectionCell = function(a) {
+  this.getSelectionModel().removeCell(a)
+};
+mxGraph.prototype.removeSelectionCells = function(a) {
+  this.getSelectionModel().removeCells(a)
+};
+mxGraph.prototype.selectRegion = function(a, b) {
+  var c = this.getCells(a.x, a.y, a.width, a.height);
+  this.selectCellsForEvent(c, b);
+  return c
+};
+mxGraph.prototype.selectNextCell = function() {
+  this.selectCell(!0)
+};
+mxGraph.prototype.selectPreviousCell = function() {
+  this.selectCell()
+};
+mxGraph.prototype.selectParentCell = function() {
+  this.selectCell(!1, !0)
+};
+mxGraph.prototype.selectChildCell = function() {
+  this.selectCell(!1, !1, !0)
+};
+mxGraph.prototype.selectCell = function(a, b, c) {
+  var d = this.selectionModel,
+    e = 0 < d.cells.length ? d.cells[0] : null;
+  1 < d.cells.length && d.clear();
+  var d = null != e ? this.model.getParent(e) : this.getDefaultParent(),
+    f = this.model.getChildCount(d);
+  null == e && 0 < f ? (a = this.model.getChildAt(d, 0), this.setSelectionCell(a)) : (null == e || b) && null != this.view.getState(d) && null != this.model.getGeometry(d) ? this.getCurrentRoot() !=
+    d && this.setSelectionCell(d) : null != e && c ? 0 < this.model.getChildCount(e) && (a = this.model.getChildAt(e, 0), this.setSelectionCell(a)) :
+    0 < f && (b = d.getIndex(e), a ? (b++, a = this.model.getChildAt(d, b % f)) : (b--, a = this.model.getChildAt(d, 0 > b ? f - 1 : b)), this.setSelectionCell(a))
+};
+mxGraph.prototype.selectAll = function(a) {
+  a = a || this.getDefaultParent();
+  a = this.model.getChildren(a);
+  null != a && this.setSelectionCells(a)
+};
+mxGraph.prototype.selectVertices = function(a) {
+  this.selectCells(!0, !1, a)
+};
+mxGraph.prototype.selectEdges = function(a) {
+  this.selectCells(!1, !0, a)
+};
+mxGraph.prototype.selectCells = function(a, b, c) {
+  c = c || this.getDefaultParent();
+  var d = mxUtils.bind(this, function(c) {
+    return null != this.view.getState(c) && 0 == this.model.getChildCount(c) && (this.model.isVertex(c) && a || this.model.isEdge(c) && b)
+  });
+  c = this.model.filterDescendants(d, c);
+  this.setSelectionCells(c)
+};
+mxGraph.prototype.selectCellForEvent = function(a, b) {
+  var c = this.isCellSelected(a);
+  this.isToggleEvent(b) ? c ? this.removeSelectionCell(a) : this.addSelectionCell(a) : (!c || 1 != this.getSelectionCount()) && this.setSelectionCell(a)
+};
+mxGraph.prototype.selectCellsForEvent = function(a, b) {
+  this.isToggleEvent(b) ? this.addSelectionCells(a) : this.setSelectionCells(a)
+};
+mxGraph.prototype.createHandler = function(a) {
+  var b = null;
+  null != a && (this.model.isEdge(a.cell) ? (b = this.view.getEdgeStyle(a), b = this.isLoop(a) || b == mxEdgeStyle.ElbowConnector || b == mxEdgeStyle.SideToSide || b == mxEdgeStyle.TopToBottom ?
+    new mxElbowEdgeHandler(a) : b == mxEdgeStyle.SegmentConnector || b == mxEdgeStyle.OrthConnector ? new mxEdgeSegmentHandler(a) : new mxEdgeHandler(a)) : b = new mxVertexHandler(a));
+  return b
+};
+mxGraph.prototype.addMouseListener = function(a) {
+  null == this.mouseListeners && (this.mouseListeners = []);
+  this.mouseListeners.push(a)
+};
+mxGraph.prototype.removeMouseListener = function(a) {
+  if (null != this.mouseListeners)
+    for (var b = 0; b < this.mouseListeners.length; b++)
+      if (this.mouseListeners[b] == a) {
+        this.mouseListeners.splice(b, 1);
+        break
+      }
+};
+mxGraph.prototype.updateMouseEvent = function(a) {
+  if (null == a.graphX || null == a.graphY) {
+    var b = mxUtils.convertPoint(this.container, a.getX(), a.getY());
+    a.graphX = b.x - this.panDx;
+    a.graphY = b.y - this.panDy
+  }
+};
+mxGraph.prototype.fireMouseEvent = function(a, b, c) {
+  null == c && (c = this);
+  this.updateMouseEvent(b);
+  a == mxEvent.MOUSE_DOWN && (this.isMouseDown = !0);
+  if (mxClient.IS_TOUCH && this.doubleTapEnabled && a == mxEvent.MOUSE_DOWN) {
+    var d = (new Date).getTime();
+    d - this.lastTouchTime < this.doubleTapTimeout && Math.abs(this.lastTouchX - b.getX()) < this.doubleTapTolerance && Math.abs(this.lastTouchY - b.getY()) < this.doubleTapTolerance ? (this.lastTouchTime =
+      0, this.dblClick(b.getEvent(), b.getCell()), b.getEvent().cancelBubble = !0) : (this.lastTouchX =
+      b.getX(), this.lastTouchY = b.getY(), this.lastTouchTime = d)
+  }
+  d = 2 != b.getEvent().detail;
+  if (mxClient.IS_IE && "CSS1Compat" == document.compatMode) {
+    if (null != this.lastMouseX && Math.abs(this.lastMouseX - b.getX()) > this.doubleTapTolerance || null != this.lastMouseY && Math.abs(this.lastMouseY - b.getY()) > this.doubleTapTolerance) d = !
+      0;
+    a == mxEvent.MOUSE_UP && (this.lastMouseX = b.getX(), this.lastMouseY = b.getY())
+  }
+  if ((a != mxEvent.MOUSE_UP || this.isMouseDown) && d) {
+    if (a == mxEvent.MOUSE_UP && (this.isMouseDown = !1), !this.isEditing() && (mxClient.IS_OP ||
+        mxClient.IS_SF || mxClient.IS_GC || mxClient.IS_IE && mxClient.IS_SVG || b.getEvent().target != this.container)) {
+      a == mxEvent.MOUSE_MOVE && (this.isMouseDown && this.autoScroll) && this.scrollPointToVisible(b.getGraphX(), b.getGraphY(), this.autoExtend);
+      if (null != this.mouseListeners) {
+        c = [c, b];
+        b.getEvent().returnValue = !0;
+        for (d = 0; d < this.mouseListeners.length; d++) {
+          var e = this.mouseListeners[d];
+          a == mxEvent.MOUSE_DOWN ? e.mouseDown.apply(e, c) : a == mxEvent.MOUSE_MOVE ? e.mouseMove.apply(e, c) : a == mxEvent.MOUSE_UP && e.mouseUp.apply(e, c)
+        }
+      }
+      a ==
+        mxEvent.MOUSE_UP && this.click(b)
+    }
+  } else a == mxEvent.MOUSE_UP && (this.isMouseDown = !1)
+};
+mxGraph.prototype.destroy = function() {
+  this.destroyed || (this.destroyed = !0, null != this.tooltipHandler && this.tooltipHandler.destroy(), null != this.selectionCellsHandler && this.selectionCellsHandler.destroy(), null != this.panningHandler &&
+    this.panningHandler.destroy(), null != this.connectionHandler && this.connectionHandler.destroy(), null != this.graphHandler && this.graphHandler.destroy(), null != this.cellEditor && this.cellEditor
+    .destroy(), null != this.view && this.view.destroy(), null != this.model && null != this.graphModelChangeListener &&
+    (this.model.removeListener(this.graphModelChangeListener), this.graphModelChangeListener = null), this.container = null)
+};
+
+function mxCellOverlay(a, b, c, d, e, f) {
+  this.image = a;
+  this.tooltip = b;
+  this.align = null != c ? c : this.align;
+  this.verticalAlign = null != d ? d : this.verticalAlign;
+  this.offset = null != e ? e : new mxPoint;
+  this.cursor = null != f ? f : "help"
+}
+mxCellOverlay.prototype = new mxEventSource;
+mxCellOverlay.prototype.constructor = mxCellOverlay;
+mxCellOverlay.prototype.image = null;
+mxCellOverlay.prototype.tooltip = null;
+mxCellOverlay.prototype.align = mxConstants.ALIGN_RIGHT;
+mxCellOverlay.prototype.verticalAlign = mxConstants.ALIGN_BOTTOM;
+mxCellOverlay.prototype.offset = null;
+mxCellOverlay.prototype.cursor = null;
+mxCellOverlay.prototype.defaultOverlap = 0.5;
+mxCellOverlay.prototype.getBounds = function(a) {
+  var b = a.view.graph.getModel().isEdge(a.cell),
+    c = a.view.scale,
+    d = null,
+    e = this.image.width,
+    f = this.image.height;
+  b ? (b = a.absolutePoints, 1 == b.length % 2 ? d = b[Math.floor(b.length / 2)] : (d = b.length / 2, a = b[d - 1], b = b[d], d = new mxPoint(a.x + (b.x - a.x) / 2, a.y + (b.y - a.y) / 2))) : (d =
+    new mxPoint, d.x = this.align == mxConstants.ALIGN_LEFT ? a.x : this.align == mxConstants.ALIGN_CENTER ? a.x + a.width / 2 : a.x + a.width, d.y = this.verticalAlign == mxConstants.ALIGN_TOP ?
+    a.y : this.verticalAlign == mxConstants.ALIGN_MIDDLE ?
+    a.y + a.height / 2 : a.y + a.height);
+  return new mxRectangle(Math.round(d.x - (e * this.defaultOverlap - this.offset.x) * c), Math.round(d.y - (f * this.defaultOverlap - this.offset.y) * c), e * c, f * c)
+};
+mxCellOverlay.prototype.toString = function() {
+  return this.tooltip
+};
+
+function mxOutline(a, b) {
+  this.source = a;
+  null != b && this.init(b)
+}
+mxOutline.prototype.source = null;
+mxOutline.prototype.outline = null;
+mxOutline.prototype.graphRenderHint = mxConstants.RENDERING_HINT_FASTER;
+mxOutline.prototype.enabled = !0;
+mxOutline.prototype.showViewport = !0;
+mxOutline.prototype.border = 10;
+mxOutline.prototype.sizerSize = 8;
+mxOutline.prototype.updateOnPan = !1;
+mxOutline.prototype.sizerImage = null;
+mxOutline.prototype.suspended = !1;
+mxOutline.prototype.init = function(a) {
+  this.outline = new mxGraph(a, this.source.getModel(), this.graphRenderHint, this.source.getStylesheet());
+  this.outline.foldingEnabled = !1;
+  this.outline.autoScroll = !1;
+  var b = this.outline.graphModelChanged;
+  this.outline.graphModelChanged = mxUtils.bind(this, function(a) {
+    !this.suspended && null != this.outline && b.apply(this.outline, arguments)
+  });
+  mxClient.IS_SVG && (a = this.outline.getView().getCanvas().parentNode, a.setAttribute("shape-rendering", "optimizeSpeed"), a.setAttribute("image-rendering",
+    "optimizeSpeed"));
+  this.outline.labelsVisible = !1;
+  this.outline.setEnabled(!1);
+  this.updateHandler = mxUtils.bind(this, function(a, b) {
+    !this.suspended && !this.active && this.update()
+  });
+  this.source.getModel().addListener(mxEvent.CHANGE, this.updateHandler);
+  this.outline.addMouseListener(this);
+  a = this.source.getView();
+  a.addListener(mxEvent.SCALE, this.updateHandler);
+  a.addListener(mxEvent.TRANSLATE, this.updateHandler);
+  a.addListener(mxEvent.SCALE_AND_TRANSLATE, this.updateHandler);
+  a.addListener(mxEvent.DOWN, this.updateHandler);
+  a.addListener(mxEvent.UP, this.updateHandler);
+  mxEvent.addListener(this.source.container, "scroll", this.updateHandler);
+  this.panHandler = mxUtils.bind(this, function(a) {
+    this.updateOnPan && this.updateHandler.apply(this, arguments)
+  });
+  this.source.addListener(mxEvent.PAN, this.panHandler);
+  this.refreshHandler = mxUtils.bind(this, function(a) {
+    this.outline.setStylesheet(this.source.getStylesheet());
+    this.outline.refresh()
+  });
+  this.source.addListener(mxEvent.REFRESH, this.refreshHandler);
+  this.bounds = new mxRectangle(0, 0, 0,
+    0);
+  this.selectionBorder = new mxRectangleShape(this.bounds, null, mxConstants.OUTLINE_COLOR, mxConstants.OUTLINE_STROKEWIDTH);
+  this.selectionBorder.dialect = this.outline.dialect != mxConstants.DIALECT_SVG ? mxConstants.DIALECT_VML : mxConstants.DIALECT_SVG;
+  this.selectionBorder.init(this.outline.getView().getOverlayPane());
+  mxEvent.redirectMouseEvents(this.selectionBorder.node, this.outline);
+  this.selectionBorder.node.style.background = "";
+  this.sizer = this.createSizer();
+  this.sizer.init(this.outline.getView().getOverlayPane());
+  this.enabled && (this.sizer.node.style.cursor = "pointer");
+  mxEvent.addListener(this.sizer.node, mxClient.IS_TOUCH ? "touchstart" : "mousedown", mxUtils.bind(this, function(a) {
+    this.outline.fireMouseEvent(mxEvent.MOUSE_DOWN, new mxMouseEvent(a))
+  }));
+  this.selectionBorder.node.style.display = this.showViewport ? "" : "none";
+  this.sizer.node.style.display = this.selectionBorder.node.style.display;
+  this.selectionBorder.node.style.cursor = "move";
+  this.update(!1)
+};
+mxOutline.prototype.isEnabled = function() {
+  return this.enabled
+};
+mxOutline.prototype.setEnabled = function(a) {
+  this.enabled = a
+};
+mxOutline.prototype.setZoomEnabled = function(a) {
+  this.sizer.node.style.visibility = a ? "visible" : "hidden"
+};
+mxOutline.prototype.refresh = function() {
+  this.update(!0)
+};
+mxOutline.prototype.createSizer = function() {
+  var a = null != this.sizerImage ? new mxImageShape(new mxRectangle(0, 0, this.sizerImage.width, this.sizerImage.height), this.sizerImage.src) : new mxRectangleShape(new mxRectangle(0, 0, this.sizerSize,
+    this.sizerSize), mxConstants.OUTLINE_HANDLE_FILLCOLOR, mxConstants.OUTLINE_HANDLE_STROKECOLOR);
+  a.dialect = this.outline.dialect;
+  return a
+};
+mxOutline.prototype.getSourceContainerSize = function() {
+  return new mxRectangle(0, 0, this.source.container.scrollWidth, this.source.container.scrollHeight)
+};
+mxOutline.prototype.getOutlineOffset = function(a) {
+  return null
+};
+mxOutline.prototype.update = function(a) {
+  if (null != this.source) {
+    var b = this.source.view.scale,
+      c = this.source.getGraphBounds(),
+      c = new mxRectangle(c.x / b + this.source.panDx, c.y / b + this.source.panDy, c.width / b, c.height / b),
+      d = new mxRectangle(0, 0, this.source.container.clientWidth / b, this.source.container.clientHeight / b),
+      e = c.clone();
+    e.add(d);
+    var f = this.getSourceContainerSize(),
+      d = Math.max(f.width / b, e.width),
+      b = Math.max(f.height / b, e.height),
+      e = Math.max(0, this.outline.container.clientWidth - this.border),
+      f = Math.max(0, this.outline.container.clientHeight -
+        this.border),
+      e = Math.min(e / d, f / b);
+    if (0 < e) {
+      this.outline.getView().scale != e && (this.outline.getView().scale = e, a = !0);
+      d = this.outline.getView();
+      d.currentRoot != this.source.getView().currentRoot && d.setCurrentRoot(this.source.getView().currentRoot);
+      var b = this.source.view.translate,
+        f = b.x + this.source.panDx,
+        g = b.y + this.source.panDy,
+        e = this.getOutlineOffset(e);
+      null != e && (f += e.x, g += e.y);
+      0 > c.x && (f -= c.x);
+      0 > c.y && (g -= c.y);
+      if (d.translate.x != f || d.translate.y != g) d.translate.x = f, d.translate.y = g, a = !0;
+      var c = d.translate,
+        e = this.source.getView().scale,
+        f = e / d.scale,
+        g = 1 / d.scale,
+        h = this.source.container;
+      this.bounds = new mxRectangle((c.x - b.x - this.source.panDx) / g, (c.y - b.y - this.source.panDy) / g, h.clientWidth / f, h.clientHeight / f);
+      this.bounds.x += this.source.container.scrollLeft * d.scale / e;
+      this.bounds.y += this.source.container.scrollTop * d.scale / e;
+      c = this.selectionBorder.bounds;
+      if (c.x != this.bounds.x || c.y != this.bounds.y || c.width != this.bounds.width || c.height != this.bounds.height) this.selectionBorder.bounds = this.bounds, this.selectionBorder.redraw();
+      c = this.sizer.bounds;
+      d = new mxRectangle(this.bounds.x + this.bounds.width - c.width / 2, this.bounds.y + this.bounds.height - c.height / 2, c.width, c.height);
+      if (c.x != d.x || c.y != d.y || c.width != d.width || c.height != d.height) this.sizer.bounds = d, "hidden" != this.sizer.node.style.visibility && this.sizer.redraw();
+      a && this.outline.view.revalidate()
+    }
+  }
+};
+mxOutline.prototype.mouseDown = function(a, b) {
+  this.enabled && this.showViewport && (this.zoom = b.isSource(this.sizer), this.startX = b.getX(), this.startY = b.getY(), this.active = !0, this.source.useScrollbarsForPanning && mxUtils.hasScrollbars(
+    this.source.container) ? (this.dx0 = this.source.container.scrollLeft, this.dy0 = this.source.container.scrollTop) : this.dy0 = this.dx0 = 0);
+  b.consume()
+};
+mxOutline.prototype.mouseMove = function(a, b) {
+  if (this.active) {
+    this.selectionBorder.node.style.display = this.showViewport ? "" : "none";
+    this.sizer.node.style.display = this.selectionBorder.node.style.display;
+    var c = b.getX() - this.startX,
+      d = b.getY() - this.startY,
+      e = null;
+    if (this.zoom) e = this.source.container, d = c / (e.clientWidth / e.clientHeight), e = new mxRectangle(this.bounds.x, this.bounds.y, Math.max(1, this.bounds.width + c), Math.max(1, this.bounds
+      .height + d)), this.selectionBorder.bounds = e, this.selectionBorder.redraw();
+    else {
+      var f =
+        this.outline.getView().scale,
+        e = new mxRectangle(this.bounds.x + c, this.bounds.y + d, this.bounds.width, this.bounds.height);
+      this.selectionBorder.bounds = e;
+      this.selectionBorder.redraw();
+      c = c / f * this.source.getView().scale;
+      d = d / f * this.source.getView().scale;
+      this.source.panGraph(-c - this.dx0, -d - this.dy0)
+    }
+    c = this.sizer.bounds;
+    this.sizer.bounds = new mxRectangle(e.x + e.width - c.width / 2, e.y + e.height - c.height / 2, c.width, c.height);
+    "hidden" != this.sizer.node.style.visibility && this.sizer.redraw();
+    b.consume()
+  }
+};
+mxOutline.prototype.mouseUp = function(a, b) {
+  if (this.active) {
+    var c = b.getX() - this.startX,
+      d = b.getY() - this.startY;
+    if (0 < Math.abs(c) || 0 < Math.abs(d)) {
+      if (this.zoom) {
+        var d = this.selectionBorder.bounds.width,
+          e = this.source.getView().scale;
+        this.source.zoomTo(e - c * e / d, !1)
+      } else if (!this.source.useScrollbarsForPanning || !mxUtils.hasScrollbars(this.source.container)) this.source.panGraph(0, 0), c /= this.outline.getView().scale, d /= this.outline.getView().scale,
+        e = this.source.getView().translate, this.source.getView().setTranslate(e.x -
+          c, e.y - d);
+      this.update();
+      b.consume()
+    }
+    this.index = null;
+    this.active = !1
+  }
+};
+mxOutline.prototype.destroy = function() {
+  null != this.source && (this.source.removeListener(this.panHandler), this.source.removeListener(this.refreshHandler), this.source.getModel().removeListener(this.updateHandler), this.source.getView()
+    .removeListener(this.updateHandler), mxEvent.addListener(this.source.container, "scroll", this.updateHandler), this.source = null);
+  null != this.outline && (this.outline.removeMouseListener(this), this.outline.destroy(), this.outline = null);
+  null != this.selectionBorder && (this.selectionBorder.destroy(),
+    this.selectionBorder = null);
+  null != this.sizer && (this.sizer.destroy(), this.sizer = null)
+};
+
+function mxMultiplicity(a, b, c, d, e, f, g, h, k, l) {
+  this.source = a;
+  this.type = b;
+  this.attr = c;
+  this.value = d;
+  this.min = null != e ? e : 0;
+  this.max = null != f ? f : "n";
+  this.validNeighbors = g;
+  this.countError = mxResources.get(h) || h;
+  this.typeError = mxResources.get(k) || k;
+  this.validNeighborsAllowed = null != l ? l : !0
+}
+mxMultiplicity.prototype.type = null;
+mxMultiplicity.prototype.attr = null;
+mxMultiplicity.prototype.value = null;
+mxMultiplicity.prototype.source = null;
+mxMultiplicity.prototype.min = null;
+mxMultiplicity.prototype.max = null;
+mxMultiplicity.prototype.validNeighbors = null;
+mxMultiplicity.prototype.validNeighborsAllowed = !0;
+mxMultiplicity.prototype.countError = null;
+mxMultiplicity.prototype.typeError = null;
+mxMultiplicity.prototype.check = function(a, b, c, d, e, f) {
+  var g = "";
+  if (this.source && this.checkTerminal(a, c, b) || !this.source && this.checkTerminal(a, d, b)) {
+    if (null != this.countError && (this.source && (0 == this.max || e >= this.max) || !this.source && (0 == this.max || f >= this.max))) g += this.countError + "\n";
+    null != this.validNeighbors && (null != this.typeError && 0 < this.validNeighbors.length) && (this.checkNeighbors(a, b, c, d) || (g += this.typeError + "\n"))
+  }
+  return 0 < g.length ? g : null
+};
+mxMultiplicity.prototype.checkNeighbors = function(a, b, c, d) {
+  b = a.model.getValue(c);
+  d = a.model.getValue(d);
+  c = !this.validNeighborsAllowed;
+  for (var e = this.validNeighbors, f = 0; f < e.length; f++)
+    if (this.source && this.checkType(a, d, e[f])) {
+      c = this.validNeighborsAllowed;
+      break
+    } else if (!this.source && this.checkType(a, b, e[f])) {
+    c = this.validNeighborsAllowed;
+    break
+  }
+  return c
+};
+mxMultiplicity.prototype.checkTerminal = function(a, b, c) {
+  b = a.model.getValue(b);
+  return this.checkType(a, b, this.type, this.attr, this.value)
+};
+mxMultiplicity.prototype.checkType = function(a, b, c, d, e) {
+  return null != b ? isNaN(b.nodeType) ? b == c : mxUtils.isNode(b, c, d, e) : !1
+};
+
+function mxLayoutManager(a) {
+  this.undoHandler = mxUtils.bind(this, function(a, c) {
+    this.isEnabled() && this.beforeUndo(c.getProperty("edit"))
+  });
+  this.moveHandler = mxUtils.bind(this, function(a, c) {
+    this.isEnabled() && this.cellsMoved(c.getProperty("cells"), c.getProperty("event"))
+  });
+  this.setGraph(a)
+}
+mxLayoutManager.prototype = new mxEventSource;
+mxLayoutManager.prototype.constructor = mxLayoutManager;
+mxLayoutManager.prototype.graph = null;
+mxLayoutManager.prototype.bubbling = !0;
+mxLayoutManager.prototype.enabled = !0;
+mxLayoutManager.prototype.updateHandler = null;
+mxLayoutManager.prototype.moveHandler = null;
+mxLayoutManager.prototype.isEnabled = function() {
+  return this.enabled
+};
+mxLayoutManager.prototype.setEnabled = function(a) {
+  this.enabled = a
+};
+mxLayoutManager.prototype.isBubbling = function() {
+  return this.bubbling
+};
+mxLayoutManager.prototype.setBubbling = function(a) {
+  this.bubbling = a
+};
+mxLayoutManager.prototype.getGraph = function() {
+  return this.graph
+};
+mxLayoutManager.prototype.setGraph = function(a) {
+  if (null != this.graph) {
+    var b = this.graph.getModel();
+    b.removeListener(this.undoHandler);
+    this.graph.removeListener(this.moveHandler)
+  }
+  this.graph = a;
+  null != this.graph && (b = this.graph.getModel(), b.addListener(mxEvent.BEFORE_UNDO, this.undoHandler), this.graph.addListener(mxEvent.MOVE_CELLS, this.moveHandler))
+};
+mxLayoutManager.prototype.getLayout = function(a) {
+  return null
+};
+mxLayoutManager.prototype.beforeUndo = function(a) {
+  a = this.getCellsForChanges(a.changes);
+  var b = this.getGraph().getModel();
+  if (this.isBubbling())
+    for (var c = b.getParents(a); 0 < c.length;) a = a.concat(c), c = b.getParents(c);
+  this.layoutCells(mxUtils.sortCells(a, !1))
+};
+mxLayoutManager.prototype.cellsMoved = function(a, b) {
+  if (null != a && null != b)
+    for (var c = mxUtils.convertPoint(this.getGraph().container, mxEvent.getClientX(b), mxEvent.getClientY(b)), d = this.getGraph().getModel(), e = 0; e < a.length; e++) {
+      var f = this.getLayout(d.getParent(a[e]));
+      null != f && f.moveCell(a[e], c.x, c.y)
+    }
+};
+mxLayoutManager.prototype.getCellsForChanges = function(a) {
+  for (var b = [], c = {}, d = 0; d < a.length; d++) {
+    var e = a[d];
+    if (e instanceof mxRootChange) return [];
+    for (var e = this.getCellsForChange(e), f = 0; f < e.length; f++)
+      if (null != e[f]) {
+        var g = mxCellPath.create(e[f]);
+        null == c[g] && (c[g] = e[f], b.push(e[f]))
+      }
+  }
+  return b
+};
+mxLayoutManager.prototype.getCellsForChange = function(a) {
+  var b = this.getGraph().getModel();
+  return a instanceof mxChildChange ? [a.child, a.previous, b.getParent(a.child)] : a instanceof mxTerminalChange || a instanceof mxGeometryChange ? [a.cell, b.getParent(a.cell)] : []
+};
+mxLayoutManager.prototype.layoutCells = function(a) {
+  if (0 < a.length) {
+    var b = this.getGraph().getModel();
+    b.beginUpdate();
+    try {
+      for (var c = null, d = 0; d < a.length; d++) a[d] != b.getRoot() && a[d] != c && (c = a[d], this.executeLayout(this.getLayout(c), c));
+      this.fireEvent(new mxEventObject(mxEvent.LAYOUT_CELLS, "cells", a))
+    } finally {
+      b.endUpdate()
+    }
+  }
+};
+mxLayoutManager.prototype.executeLayout = function(a, b) {
+  null != a && null != b && a.execute(b)
+};
+mxLayoutManager.prototype.destroy = function() {
+  this.setGraph(null)
+};
+
+function mxSpaceManager(a, b, c, d) {
+  this.resizeHandler = mxUtils.bind(this, function(a, b) {
+    this.isEnabled() && this.cellsResized(b.getProperty("cells"))
+  });
+  this.foldHandler = mxUtils.bind(this, function(a, b) {
+    this.isEnabled() && this.cellsResized(b.getProperty("cells"))
+  });
+  this.shiftRightwards = null != b ? b : !0;
+  this.shiftDownwards = null != c ? c : !0;
+  this.extendParents = null != d ? d : !0;
+  this.setGraph(a)
+}
+mxSpaceManager.prototype = new mxEventSource;
+mxSpaceManager.prototype.constructor = mxSpaceManager;
+mxSpaceManager.prototype.graph = null;
+mxSpaceManager.prototype.enabled = !0;
+mxSpaceManager.prototype.shiftRightwards = !0;
+mxSpaceManager.prototype.shiftDownwards = !0;
+mxSpaceManager.prototype.extendParents = !0;
+mxSpaceManager.prototype.resizeHandler = null;
+mxSpaceManager.prototype.foldHandler = null;
+mxSpaceManager.prototype.isCellIgnored = function(a) {
+  return !this.getGraph().getModel().isVertex(a)
+};
+mxSpaceManager.prototype.isCellShiftable = function(a) {
+  return this.getGraph().getModel().isVertex(a) && this.getGraph().isCellMovable(a)
+};
+mxSpaceManager.prototype.isEnabled = function() {
+  return this.enabled
+};
+mxSpaceManager.prototype.setEnabled = function(a) {
+  this.enabled = a
+};
+mxSpaceManager.prototype.isShiftRightwards = function() {
+  return this.shiftRightwards
+};
+mxSpaceManager.prototype.setShiftRightwards = function(a) {
+  this.shiftRightwards = a
+};
+mxSpaceManager.prototype.isShiftDownwards = function() {
+  return this.shiftDownwards
+};
+mxSpaceManager.prototype.setShiftDownwards = function(a) {
+  this.shiftDownwards = a
+};
+mxSpaceManager.prototype.isExtendParents = function() {
+  return this.extendParents
+};
+mxSpaceManager.prototype.setExtendParents = function(a) {
+  this.extendParents = a
+};
+mxSpaceManager.prototype.getGraph = function() {
+  return this.graph
+};
+mxSpaceManager.prototype.setGraph = function(a) {
+  null != this.graph && (this.graph.removeListener(this.resizeHandler), this.graph.removeListener(this.foldHandler));
+  this.graph = a;
+  null != this.graph && (this.graph.addListener(mxEvent.RESIZE_CELLS, this.resizeHandler), this.graph.addListener(mxEvent.FOLD_CELLS, this.foldHandler))
+};
+mxSpaceManager.prototype.cellsResized = function(a) {
+  if (null != a) {
+    var b = this.graph.getModel();
+    b.beginUpdate();
+    try {
+      for (var c = 0; c < a.length; c++)
+        if (!this.isCellIgnored(a[c])) {
+          this.cellResized(a[c]);
+          break
+        }
+    } finally {
+      b.endUpdate()
+    }
+  }
+};
+mxSpaceManager.prototype.cellResized = function(a) {
+  var b = this.getGraph(),
+    c = b.getView(),
+    d = b.getModel(),
+    e = c.getState(a),
+    f = c.getState(d.getParent(a));
+  if (null != e && null != f) {
+    var g = this.getCellsToShift(e),
+      h = d.getGeometry(a);
+    if (null != g && null != h) {
+      var k = c.translate,
+        l = c.scale,
+        c = e.x - f.origin.x - k.x * l,
+        f = e.y - f.origin.y - k.y * l,
+        k = e.x + e.width,
+        m = e.y + e.height,
+        n = e.width - h.width * l + c - h.x * l,
+        p = e.height - h.height * l + f - h.y * l,
+        q = 1 - h.width * l / e.width,
+        e = 1 - h.height * l / e.height;
+      d.beginUpdate();
+      try {
+        for (h = 0; h < g.length; h++) g[h] != a && this.isCellShiftable(g[h]) &&
+          this.shiftCell(g[h], n, p, c, f, k, m, q, e, this.isExtendParents() && b.isExtendParent(g[h]))
+      } finally {
+        d.endUpdate()
+      }
+    }
+  }
+};
+mxSpaceManager.prototype.shiftCell = function(a, b, c, d, e, f, g, h, k, l) {
+  d = this.getGraph();
+  var m = d.getView().getState(a);
+  if (null != m) {
+    var n = d.getModel(),
+      p = n.getGeometry(a);
+    if (null != p) {
+      n.beginUpdate();
+      try {
+        if (this.isShiftRightwards())
+          if (m.x >= f) p = p.clone(), p.translate(-b, 0);
+          else {
+            var q = Math.max(0, m.x - x0),
+              p = p.clone();
+            p.translate(-h * q, 0)
+          }
+        if (this.isShiftDownwards())
+          if (m.y >= g) p = p.clone(), p.translate(0, -c);
+          else {
+            var s = Math.max(0, m.y - e),
+              p = p.clone();
+            p.translate(0, -k * s)
+          }
+        p != n.getGeometry(a) && (n.setGeometry(a, p), l && d.extendParent(a))
+      } finally {
+        n.endUpdate()
+      }
+    }
+  }
+};
+mxSpaceManager.prototype.getCellsToShift = function(a) {
+  var b = this.getGraph(),
+    c = b.getModel().getParent(a.cell),
+    d = this.isShiftDownwards(),
+    e = this.isShiftRightwards();
+  return b.getCellsBeyond(a.x + (d ? 0 : a.width), a.y + (d && e ? 0 : a.height), c, e, d)
+};
+mxSpaceManager.prototype.destroy = function() {
+  this.setGraph(null)
+};
+
+function mxSwimlaneManager(a, b, c, d) {
+  this.horizontal = null != b ? b : !0;
+  this.addEnabled = null != c ? c : !0;
+  this.resizeEnabled = null != d ? d : !0;
+  this.addHandler = mxUtils.bind(this, function(a, b) {
+    this.isEnabled() && this.isAddEnabled() && this.cellsAdded(b.getProperty("cells"))
+  });
+  this.resizeHandler = mxUtils.bind(this, function(a, b) {
+    this.isEnabled() && this.isResizeEnabled() && this.cellsResized(b.getProperty("cells"))
+  });
+  this.setGraph(a)
+}
+mxSwimlaneManager.prototype = new mxEventSource;
+mxSwimlaneManager.prototype.constructor = mxSwimlaneManager;
+mxSwimlaneManager.prototype.graph = null;
+mxSwimlaneManager.prototype.enabled = !0;
+mxSwimlaneManager.prototype.horizontal = !0;
+mxSwimlaneManager.prototype.addEnabled = !0;
+mxSwimlaneManager.prototype.resizeEnabled = !0;
+mxSwimlaneManager.prototype.addHandler = null;
+mxSwimlaneManager.prototype.resizeHandler = null;
+mxSwimlaneManager.prototype.isEnabled = function() {
+  return this.enabled
+};
+mxSwimlaneManager.prototype.setEnabled = function(a) {
+  this.enabled = a
+};
+mxSwimlaneManager.prototype.isHorizontal = function() {
+  return this.horizontal
+};
+mxSwimlaneManager.prototype.setHorizontal = function(a) {
+  this.horizontal = a
+};
+mxSwimlaneManager.prototype.isAddEnabled = function() {
+  return this.addEnabled
+};
+mxSwimlaneManager.prototype.setAddEnabled = function(a) {
+  this.addEnabled = a
+};
+mxSwimlaneManager.prototype.isResizeEnabled = function() {
+  return this.resizeEnabled
+};
+mxSwimlaneManager.prototype.setResizeEnabled = function(a) {
+  this.resizeEnabled = a
+};
+mxSwimlaneManager.prototype.getGraph = function() {
+  return this.graph
+};
+mxSwimlaneManager.prototype.setGraph = function(a) {
+  null != this.graph && (this.graph.removeListener(this.addHandler), this.graph.removeListener(this.resizeHandler));
+  this.graph = a;
+  null != this.graph && (this.graph.addListener(mxEvent.ADD_CELLS, this.addHandler), this.graph.addListener(mxEvent.CELLS_RESIZED, this.resizeHandler))
+};
+mxSwimlaneManager.prototype.isSwimlaneIgnored = function(a) {
+  return !this.getGraph().isSwimlane(a)
+};
+mxSwimlaneManager.prototype.isCellHorizontal = function(a) {
+  if (this.graph.isSwimlane(a)) {
+    var b = this.graph.view.getState(a);
+    a = null != b ? b.style : this.graph.getCellStyle(a);
+    return 1 == mxUtils.getValue(a, mxConstants.STYLE_HORIZONTAL, 1)
+  }
+  return !this.isHorizontal()
+};
+mxSwimlaneManager.prototype.cellsAdded = function(a) {
+  if (null != a) {
+    var b = this.getGraph().getModel();
+    b.beginUpdate();
+    try {
+      for (var c = 0; c < a.length; c++) this.isSwimlaneIgnored(a[c]) || this.swimlaneAdded(a[c])
+    } finally {
+      b.endUpdate()
+    }
+  }
+};
+mxSwimlaneManager.prototype.swimlaneAdded = function(a) {
+  for (var b = this.getGraph().getModel(), c = b.getParent(a), d = b.getChildCount(c), e = null, f = 0; f < d; f++) {
+    var g = b.getChildAt(c, f);
+    if (g != a && !this.isSwimlaneIgnored(g) && (e = b.getGeometry(g), null != e)) break
+  }
+  null != e && this.resizeSwimlane(a, e.width, e.height)
+};
+mxSwimlaneManager.prototype.cellsResized = function(a) {
+  if (null != a) {
+    var b = this.getGraph().getModel();
+    b.beginUpdate();
+    try {
+      for (var c = 0; c < a.length; c++)
+        if (!this.isSwimlaneIgnored(a[c])) {
+          var d = b.getGeometry(a[c]);
+          if (null != d) {
+            for (var e = new mxRectangle(0, 0, d.width, d.height), f = a[c], g = f; null != g;) {
+              var f = g,
+                g = b.getParent(g),
+                h = this.graph.isSwimlane(g) ? this.graph.getStartSize(g) : new mxRectangle;
+              e.width += h.width;
+              e.height += h.height
+            }
+            this.resizeSwimlane(f, e.width, e.height)
+          }
+        }
+    } finally {
+      b.endUpdate()
+    }
+  }
+};
+mxSwimlaneManager.prototype.resizeSwimlane = function(a, b, c) {
+  var d = this.getGraph().getModel();
+  d.beginUpdate();
+  try {
+    if (!this.isSwimlaneIgnored(a)) {
+      var e = d.getGeometry(a);
+      if (null != e) {
+        var f = this.isCellHorizontal(a);
+        if (f && e.height != c || !f && e.width != b) e = e.clone(), f ? e.height = c : e.width = b, d.setGeometry(a, e)
+      }
+    }
+    var g = this.graph.isSwimlane(a) ? this.graph.getStartSize(a) : new mxRectangle;
+    b -= g.width;
+    c -= g.height;
+    for (var h = d.getChildCount(a), e = 0; e < h; e++) {
+      var k = d.getChildAt(a, e);
+      this.resizeSwimlane(k, b, c)
+    }
+  } finally {
+    d.endUpdate()
+  }
+};
+mxSwimlaneManager.prototype.destroy = function() {
+  this.setGraph(null)
+};
+
+function mxTemporaryCellStates(a, b, c) {
+  this.view = a;
+  b = null != b ? b : 1;
+  this.oldBounds = a.getGraphBounds();
+  this.oldStates = a.getStates();
+  this.oldScale = a.getScale();
+  a.setStates(new mxDictionary);
+  a.setScale(b);
+  if (null != c) {
+    b = a.createState(new mxCell);
+    for (var d = 0; d < c.length; d++) a.validateBounds(b, c[d]);
+    for (var e = null, d = 0; d < c.length; d++) {
+      var f = a.validatePoints(b, c[d]);
+      null == e ? e = f : e.add(f)
+    }
+    null == e && (e = new mxRectangle);
+    a.setGraphBounds(e)
+  }
+}
+mxTemporaryCellStates.prototype.view = null;
+mxTemporaryCellStates.prototype.oldStates = null;
+mxTemporaryCellStates.prototype.oldBounds = null;
+mxTemporaryCellStates.prototype.oldScale = null;
+mxTemporaryCellStates.prototype.destroy = function() {
+  this.view.setScale(this.oldScale);
+  this.view.setStates(this.oldStates);
+  this.view.setGraphBounds(this.oldBounds)
+};
+
+function mxCellStatePreview(a) {
+  this.graph = a;
+  this.deltas = {}
+}
+mxCellStatePreview.prototype.graph = null;
+mxCellStatePreview.prototype.deltas = null;
+mxCellStatePreview.prototype.count = 0;
+mxCellStatePreview.prototype.isEmpty = function() {
+  return 0 == this.count
+};
+mxCellStatePreview.prototype.moveState = function(a, b, c, d, e) {
+  d = null != d ? d : !0;
+  e = null != e ? e : !0;
+  var f = mxCellPath.create(a.cell),
+    g = this.deltas[f];
+  null == g ? (g = new mxPoint(b, c), this.deltas[f] = g, this.count++) : d ? (g.X += b, g.Y += c) : (g.X = b, g.Y = c);
+  e && this.addEdges(a);
+  return g
+};
+mxCellStatePreview.prototype.show = function(a) {
+  var b = this.graph.getModel(),
+    c = b.getRoot(),
+    d;
+  for (d in this.deltas) {
+    var e = mxCellPath.resolve(c, d),
+      f = this.graph.view.getState(e),
+      g = this.deltas[d],
+      e = this.graph.view.getState(b.getParent(e));
+    this.translateState(e, f, g.x, g.y)
+  }
+  for (d in this.deltas) e = mxCellPath.resolve(c, d), f = this.graph.view.getState(e), g = this.deltas[d], e = this.graph.view.getState(b.getParent(e)), this.revalidateState(e, f, g.x, g.y, a)
+};
+mxCellStatePreview.prototype.translateState = function(a, b, c, d) {
+  if (null != b) {
+    var e = this.graph.getModel();
+    if (e.isVertex(b.cell)) {
+      b.invalid = !0;
+      this.graph.view.validateBounds(a, b.cell);
+      a = e.getGeometry(b.cell);
+      var f = mxCellPath.create(b.cell);
+      if ((0 != c || 0 != d) && null != a && (!a.relative || null != this.deltas[f])) b.x += c, b.y += d
+    }
+    a = e.getChildCount(b.cell);
+    for (f = 0; f < a; f++) this.translateState(b, this.graph.view.getState(e.getChildAt(b.cell, f)), c, d)
+  }
+};
+mxCellStatePreview.prototype.revalidateState = function(a, b, c, d, e) {
+  if (null != b) {
+    b.invalid = !0;
+    this.graph.view.validatePoints(a, b.cell);
+    var f = mxCellPath.create(b.cell),
+      g = this.graph.getModel(),
+      h = this.graph.getCellGeometry(b.cell);
+    if ((0 != c || 0 != d) && null != h && h.relative && g.isVertex(b.cell) && (null == a || g.isVertex(a.cell) || null != this.deltas[f])) b.x += c, b.y += d, this.graph.cellRenderer.redraw(b);
+    null != e && e(b);
+    a = g.getChildCount(b.cell);
+    for (f = 0; f < a; f++) this.revalidateState(b, this.graph.view.getState(g.getChildAt(b.cell,
+      f)), c, d, e)
+  }
+};
+mxCellStatePreview.prototype.addEdges = function(a) {
+  for (var b = this.graph.getModel(), c = b.getEdgeCount(a.cell), d = 0; d < c; d++) {
+    var e = this.graph.view.getState(b.getEdgeAt(a.cell, d));
+    null != e && this.moveState(e, 0, 0)
+  }
+};
+
+function mxConnectionConstraint(a, b) {
+  this.point = a;
+  this.perimeter = null != b ? b : !0
+}
+mxConnectionConstraint.prototype.point = null;
+mxConnectionConstraint.prototype.perimeter = null;
+
+function mxGraphHandler(a) {
+  this.graph = a;
+  this.graph.addMouseListener(this);
+  this.panHandler = mxUtils.bind(this, function() {
+    this.updatePreviewShape()
+  });
+  this.graph.addListener(mxEvent.PAN, this.panHandler)
+}
+mxGraphHandler.prototype.graph = null;
+mxGraphHandler.prototype.maxCells = mxClient.IS_IE ? 20 : 50;
+mxGraphHandler.prototype.enabled = !0;
+mxGraphHandler.prototype.highlightEnabled = !0;
+mxGraphHandler.prototype.cloneEnabled = !0;
+mxGraphHandler.prototype.moveEnabled = !0;
+mxGraphHandler.prototype.guidesEnabled = !1;
+mxGraphHandler.prototype.guide = null;
+mxGraphHandler.prototype.currentDx = null;
+mxGraphHandler.prototype.currentDy = null;
+mxGraphHandler.prototype.updateCursor = !0;
+mxGraphHandler.prototype.selectEnabled = !0;
+mxGraphHandler.prototype.removeCellsFromParent = !0;
+mxGraphHandler.prototype.connectOnDrop = !1;
+mxGraphHandler.prototype.scrollOnMove = !0;
+mxGraphHandler.prototype.minimumSize = 6;
+mxGraphHandler.prototype.previewColor = "black";
+mxGraphHandler.prototype.htmlPreview = !1;
+mxGraphHandler.prototype.shape = null;
+mxGraphHandler.prototype.scaleGrid = !1;
+mxGraphHandler.prototype.rotationEnabled = !0;
+mxGraphHandler.prototype.isEnabled = function() {
+  return this.enabled
+};
+mxGraphHandler.prototype.setEnabled = function(a) {
+  this.enabled = a
+};
+mxGraphHandler.prototype.isCloneEnabled = function() {
+  return this.cloneEnabled
+};
+mxGraphHandler.prototype.setCloneEnabled = function(a) {
+  this.cloneEnabled = a
+};
+mxGraphHandler.prototype.isMoveEnabled = function() {
+  return this.moveEnabled
+};
+mxGraphHandler.prototype.setMoveEnabled = function(a) {
+  this.moveEnabled = a
+};
+mxGraphHandler.prototype.isSelectEnabled = function() {
+  return this.selectEnabled
+};
+mxGraphHandler.prototype.setSelectEnabled = function(a) {
+  this.selectEnabled = a
+};
+mxGraphHandler.prototype.isRemoveCellsFromParent = function() {
+  return this.removeCellsFromParent
+};
+mxGraphHandler.prototype.setRemoveCellsFromParent = function(a) {
+  this.removeCellsFromParent = a
+};
+mxGraphHandler.prototype.getInitialCellForEvent = function(a) {
+  return a.getCell()
+};
+mxGraphHandler.prototype.isDelayedSelection = function(a) {
+  return this.graph.isCellSelected(a)
+};
+mxGraphHandler.prototype.mouseDown = function(a, b) {
+  if (!b.isConsumed() && this.isEnabled() && this.graph.isEnabled() && !this.graph.isForceMarqueeEvent(b.getEvent()) && null != b.getState()) {
+    var c = this.getInitialCellForEvent(b);
+    this.cell = null;
+    this.delayedSelection = this.isDelayedSelection(c);
+    this.isSelectEnabled() && !this.delayedSelection && this.graph.selectCellForEvent(c, b.getEvent());
+    if (this.isMoveEnabled()) {
+      var d = this.graph.model,
+        e = d.getGeometry(c);
+      this.graph.isCellMovable(c) && (!d.isEdge(c) || 1 < this.graph.getSelectionCount() ||
+        null != e.points && 0 < e.points.length || null == d.getTerminal(c, !0) || null == d.getTerminal(c, !1) || this.graph.allowDanglingEdges || this.graph.isCloneEvent(b.getEvent()) && this.graph
+        .isCellsCloneable()) && this.start(c, b.getX(), b.getY());
+      this.cellWasClicked = !0;
+      !mxClient.IS_SF && !mxClient.IS_GC || "SELECT" != b.getSource().nodeName ? b.consume() : mxClient.IS_SF && "SELECT" == b.getSource().nodeName && (this.cellWasClicked = !1, this.first = null)
+    }
+  }
+};
+mxGraphHandler.prototype.getGuideStates = function() {
+  var a = this.graph.getDefaultParent(),
+    b = this.graph.getModel(),
+    c = mxUtils.bind(this, function(a) {
+      return null != this.graph.view.getState(a) && b.isVertex(a) && null != b.getGeometry(a) && !b.getGeometry(a).relative
+    });
+  return this.graph.view.getCellStates(b.filterDescendants(c, a))
+};
+mxGraphHandler.prototype.getCells = function(a) {
+  return !this.delayedSelection && this.graph.isCellMovable(a) ? [a] : this.graph.getMovableCells(this.graph.getSelectionCells())
+};
+mxGraphHandler.prototype.getPreviewBounds = function(a) {
+  a = this.getBoundingBox(a);
+  null != a && (a.grow(-1, -1), a.width < this.minimumSize && (a.x -= (this.minimumSize - a.width) / 2, a.width = this.minimumSize), a.height < this.minimumSize && (a.y -= (this.minimumSize - a.height) /
+    2, a.height = this.minimumSize));
+  return a
+};
+mxGraphHandler.prototype.getBoundingBox = function(a) {
+  var b = null;
+  if (null != a && 0 < a.length)
+    for (var c = this.graph.getModel(), d = 0; d < a.length; d++)
+      if (c.isVertex(a[d]) || c.isEdge(a[d])) {
+        var e = this.graph.view.getState(a[d]);
+        if (null != e) {
+          var f = e;
+          c.isVertex(a[d]) && (null != e.shape && null != e.shape.boundingBox) && (f = e.shape.boundingBox);
+          null == b ? b = new mxRectangle(f.x, f.y, f.width, f.height) : b.add(f)
+        }
+      }
+  return b
+};
+mxGraphHandler.prototype.createPreviewShape = function(a) {
+  a = new mxRectangleShape(a, null, this.previewColor);
+  a.isDashed = !0;
+  this.htmlPreview ? (a.dialect = mxConstants.DIALECT_STRICTHTML, a.init(this.graph.container)) : (a.dialect = this.graph.dialect != mxConstants.DIALECT_SVG ? mxConstants.DIALECT_VML : mxConstants.DIALECT_SVG,
+    a.init(this.graph.getView().getOverlayPane()), a.pointerEvents = !1);
+  return a
+};
+mxGraphHandler.prototype.start = function(a, b, c) {
+  this.cell = a;
+  this.first = mxUtils.convertPoint(this.graph.container, b, c);
+  this.cells = this.getCells(this.cell);
+  this.bounds = this.graph.getView().getBounds(this.cells);
+  this.pBounds = this.getPreviewBounds(this.cells);
+  this.guidesEnabled && (this.guide = new mxGuide(this.graph, this.getGuideStates()))
+};
+mxGraphHandler.prototype.useGuidesForEvent = function(a) {
+  return null != this.guide ? this.guide.isEnabledForEvent(a.getEvent()) : !0
+};
+mxGraphHandler.prototype.snap = function(a) {
+  var b = this.scaleGrid ? this.graph.view.scale : 1;
+  a.x = this.graph.snap(a.x / b) * b;
+  a.y = this.graph.snap(a.y / b) * b;
+  return a
+};
+mxGraphHandler.prototype.mouseMove = function(a, b) {
+  var c = this.graph;
+  if (!b.isConsumed() && c.isMouseDown && null != this.cell && null != this.first && null != this.bounds) {
+    var d = mxUtils.convertPoint(c.container, b.getX(), b.getY()),
+      e = d.x - this.first.x,
+      f = d.y - this.first.y,
+      d = c.tolerance;
+    if (null != this.shape || Math.abs(e) > d || Math.abs(f) > d) {
+      null == this.highlight && (this.highlight = new mxCellHighlight(this.graph, mxConstants.DROP_TARGET_COLOR, 3));
+      null == this.shape && (this.shape = this.createPreviewShape(this.bounds));
+      var g = c.isGridEnabledEvent(b.getEvent()),
+        d = !0;
+      if (null != this.guide && this.useGuidesForEvent(b)) f = this.guide.move(this.bounds, new mxPoint(e, f), g), d = !1, e = f.x, f = f.y;
+      else if (g) var h = c.getView().translate,
+        k = c.getView().scale,
+        g = this.bounds.x - (c.snap(this.bounds.x / k - h.x) + h.x) * k,
+        h = this.bounds.y - (c.snap(this.bounds.y / k - h.y) + h.y) * k,
+        f = this.snap(new mxPoint(e, f)),
+        e = f.x - g,
+        f = f.y - h;
+      null != this.guide && d && this.guide.hide();
+      c.isConstrainedEvent(b.getEvent()) && (Math.abs(e) > Math.abs(f) ? f = 0 : e = 0);
+      this.currentDx = e;
+      this.currentDy = f;
+      this.updatePreviewShape();
+      d = null;
+      f = b.getCell();
+      c.isDropEnabled() && this.highlightEnabled && (d = c.getDropTarget(this.cells, b.getEvent(), f));
+      g = d;
+      for (h = c.getModel(); null != g && g != this.cells[0];) g = h.getParent(g);
+      var k = c.isCloneEvent(b.getEvent()) && c.isCellsCloneable() && this.isCloneEnabled(),
+        e = c.getView().getState(d),
+        l = !1;
+      null != e && null == g && (h.getParent(this.cell) != d || k) ? (this.target != d && (this.target = d, this.setHighlightColor(mxConstants.DROP_TARGET_COLOR)), l = !0) : (this.target = null,
+        this.connectOnDrop && (null != f && 1 == this.cells.length && c.getModel().isVertex(f) &&
+          c.isCellConnectable(f)) && (e = c.getView().getState(f), null != e && (c = null == c.getEdgeValidationError(null, this.cell, f) ? mxConstants.VALID_COLOR : mxConstants.INVALID_CONNECT_TARGET_COLOR,
+          this.setHighlightColor(c), l = !0)));
+      null != e && l ? this.highlight.highlight(e) : this.highlight.hide()
+    }
+    b.consume();
+    mxEvent.consume(b.getEvent())
+  } else if ((this.isMoveEnabled() || this.isCloneEnabled()) && this.updateCursor && !b.isConsumed() && null != b.getState() && !c.isMouseDown) e = c.getCursorForCell(b.getCell()), null == e && (c.isEnabled() &&
+      c.isCellMovable(b.getCell())) &&
+    (e = c.getModel().isEdge(b.getCell()) ? mxConstants.CURSOR_MOVABLE_EDGE : mxConstants.CURSOR_MOVABLE_VERTEX), b.getState().setCursor(e), b.consume()
+};
+mxGraphHandler.prototype.updatePreviewShape = function() {
+  null != this.shape && (this.shape.bounds = new mxRectangle(Math.round(this.pBounds.x + this.currentDx - this.graph.panDx), Math.round(this.pBounds.y + this.currentDy - this.graph.panDy), this.pBounds
+    .width, this.pBounds.height), this.shape.redraw())
+};
+mxGraphHandler.prototype.setHighlightColor = function(a) {
+  null != this.highlight && this.highlight.setHighlightColor(a)
+};
+mxGraphHandler.prototype.mouseUp = function(a, b) {
+  if (!b.isConsumed()) {
+    var c = this.graph;
+    if (null != this.cell && null != this.first && null != this.shape && null != this.currentDx && null != this.currentDy) {
+      var d = c.getView().scale,
+        e = c.isCloneEvent(b.getEvent()) && c.isCellsCloneable() && this.isCloneEnabled(),
+        f = this.currentDx / d,
+        d = this.currentDy / d,
+        g = b.getCell();
+      this.connectOnDrop && null == this.target && null != g && c.getModel().isVertex(g) && c.isCellConnectable(g) && c.isEdgeValid(null, this.cell, g) ? c.connectionHandler.connect(this.cell,
+        g, b.getEvent()) : (g = this.target, c.isSplitEnabled() && c.isSplitTarget(g, this.cells, b.getEvent()) ? c.splitEdge(g, this.cells, null, f, d) : this.moveCells(this.cells, f, d, e, this
+        .target, b.getEvent()))
+    } else this.isSelectEnabled() && (this.delayedSelection && null != this.cell) && this.selectDelayed(b)
+  }
+  this.cellWasClicked && b.consume();
+  this.reset()
+};
+mxGraphHandler.prototype.selectDelayed = function(a) {
+  this.graph.selectCellForEvent(this.cell, a.getEvent())
+};
+mxGraphHandler.prototype.reset = function() {
+  this.destroyShapes();
+  this.delayedSelection = this.cellWasClicked = !1;
+  this.target = this.cell = this.first = this.guides = this.currentDy = this.currentDx = null
+};
+mxGraphHandler.prototype.shouldRemoveCellsFromParent = function(a, b, c) {
+  if (this.graph.getModel().isVertex(a)) {
+    a = this.graph.getView().getState(a);
+    c = mxUtils.convertPoint(this.graph.container, mxEvent.getClientX(c), mxEvent.getClientY(c));
+    var d = mxUtils.toRadians(mxUtils.getValue(a.style, mxConstants.STYLE_ROTATION) || 0);
+    if (0 != d) {
+      b = Math.cos(-d);
+      var d = Math.sin(-d),
+        e = new mxPoint(a.getCenterX(), a.getCenterY());
+      c = mxUtils.getRotatedPoint(c, b, d, e)
+    }
+    return null != a && !mxUtils.contains(a, c.x, c.y)
+  }
+  return !1
+};
+mxGraphHandler.prototype.moveCells = function(a, b, c, d, e, f) {
+  d && (a = this.graph.getCloneableCells(a));
+  null == e && (this.isRemoveCellsFromParent() && this.shouldRemoveCellsFromParent(this.graph.getModel().getParent(this.cell), a, f)) && (e = this.graph.getDefaultParent());
+  a = this.graph.moveCells(a, b - this.graph.panDx / this.graph.view.scale, c - this.graph.panDy / this.graph.view.scale, d, e, f);
+  this.isSelectEnabled() && this.scrollOnMove && this.graph.scrollCellToVisible(a[0]);
+  d && this.graph.setSelectionCells(a)
+};
+mxGraphHandler.prototype.destroyShapes = function() {
+  null != this.shape && (this.shape.destroy(), this.shape = null);
+  null != this.guide && (this.guide.destroy(), this.guide = null);
+  null != this.highlight && (this.highlight.destroy(), this.highlight = null)
+};
+mxGraphHandler.prototype.destroy = function() {
+  this.graph.removeMouseListener(this);
+  this.graph.removeListener(this.panHandler);
+  this.destroyShapes()
+};
+
+function mxPanningHandler(a, b) {
+  null != a && (this.graph = a, this.factoryMethod = b, this.graph.addMouseListener(this), this.init())
+}
+mxPanningHandler.prototype = new mxPopupMenu;
+mxPanningHandler.prototype.constructor = mxPanningHandler;
+mxPanningHandler.prototype.graph = null;
+mxPanningHandler.prototype.triggerX = null;
+mxPanningHandler.prototype.triggerY = null;
+mxPanningHandler.prototype.usePopupTrigger = !0;
+mxPanningHandler.prototype.useLeftButtonForPanning = !1;
+mxPanningHandler.prototype.selectOnPopup = !0;
+mxPanningHandler.prototype.clearSelectionOnBackground = !0;
+mxPanningHandler.prototype.ignoreCell = !1;
+mxPanningHandler.prototype.previewEnabled = !0;
+mxPanningHandler.prototype.useGrid = !1;
+mxPanningHandler.prototype.panningEnabled = !0;
+mxPanningHandler.prototype.isPanningEnabled = function() {
+  return this.panningEnabled
+};
+mxPanningHandler.prototype.setPanningEnabled = function(a) {
+  this.panningEnabled = a
+};
+mxPanningHandler.prototype.init = function() {
+  mxPopupMenu.prototype.init.apply(this);
+  mxEvent.addListener(this.div, mxClient.IS_TOUCH ? "touchmove" : "mousemove", mxUtils.bind(this, function(a) {
+    this.graph.tooltipHandler.hide()
+  }))
+};
+mxPanningHandler.prototype.isPanningTrigger = function(a) {
+  var b = a.getEvent();
+  return this.useLeftButtonForPanning && (this.ignoreCell || null == a.getState()) && mxEvent.isLeftMouseButton(b) || mxEvent.isControlDown(b) && mxEvent.isShiftDown(b) || this.usePopupTrigger &&
+    mxEvent.isPopupTrigger(b)
+};
+mxPanningHandler.prototype.mouseDown = function(a, b) {
+  if (!b.isConsumed() && this.isEnabled()) {
+    this.hideMenu();
+    this.dx0 = -this.graph.container.scrollLeft;
+    this.dy0 = -this.graph.container.scrollTop;
+    var c = mxUtils.convertPoint(this.graph.container, b.getX(), b.getY());
+    this.triggerX = c.x;
+    this.triggerY = c.y;
+    this.popupTrigger = this.isPopupTrigger(b);
+    this.panningTrigger = this.isPanningEnabled() && this.isPanningTrigger(b);
+    this.startX = b.getX();
+    this.startY = b.getY();
+    this.panningTrigger && this.consumePanningTrigger(b)
+  }
+};
+mxPanningHandler.prototype.consumePanningTrigger = function(a) {
+  a.consume()
+};
+mxPanningHandler.prototype.mouseMove = function(a, b) {
+  var c = b.getX() - this.startX,
+    d = b.getY() - this.startY;
+  if (this.active) this.previewEnabled && (this.useGrid && (c = this.graph.snap(c), d = this.graph.snap(d)), this.graph.panGraph(c + this.dx0, d + this.dy0)), this.fireEvent(new mxEventObject(
+    mxEvent.PAN, "event", b)), b.consume();
+  else if (this.panningTrigger) {
+    var e = this.active;
+    this.active = Math.abs(c) > this.graph.tolerance || Math.abs(d) > this.graph.tolerance;
+    !e && this.active && this.fireEvent(new mxEventObject(mxEvent.PAN_START,
+      "event", b))
+  }
+};
+mxPanningHandler.prototype.mouseUp = function(a, b) {
+  var c = Math.abs(b.getX() - this.startX),
+    d = Math.abs(b.getY() - this.startY);
+  if (this.active) {
+    if (!this.graph.useScrollbarsForPanning || !mxUtils.hasScrollbars(this.graph.container)) {
+      c = b.getX() - this.startX;
+      d = b.getY() - this.startY;
+      this.useGrid && (c = this.graph.snap(c), d = this.graph.snap(d));
+      var e = this.graph.getView().scale,
+        f = this.graph.getView().translate;
+      this.graph.panGraph(0, 0);
+      this.panGraph(f.x + c / e, f.y + d / e)
+    }
+    this.active = !1;
+    this.fireEvent(new mxEventObject(mxEvent.PAN_END, "event",
+      b));
+    b.consume()
+  } else this.popupTrigger && (c < this.graph.tolerance && d < this.graph.tolerance) && (c = this.getCellForPopupEvent(b), this.graph.isEnabled() && this.selectOnPopup && null != c && !this.graph.isCellSelected(
+    c) ? this.graph.setSelectionCell(c) : this.clearSelectionOnBackground && null == c && this.graph.clearSelection(), this.graph.tooltipHandler.hide(), d = mxUtils.getScrollOrigin(), d = new mxPoint(
+    b.getX() + d.x, b.getY() + d.y), this.popup(d.x + 1, d.y + 1, c, b.getEvent()), b.consume());
+  this.popupTrigger = this.panningTrigger = !1
+};
+mxPanningHandler.prototype.getCellForPopupEvent = function(a) {
+  return a.getCell()
+};
+mxPanningHandler.prototype.panGraph = function(a, b) {
+  this.graph.getView().setTranslate(a, b)
+};
+mxPanningHandler.prototype.destroy = function() {
+  this.graph.removeMouseListener(this);
+  mxPopupMenu.prototype.destroy.apply(this)
+};
+
+function mxCellMarker(a, b, c, d) {
+  mxEventSource.call(this);
+  null != a && (this.graph = a, this.validColor = null != b ? b : mxConstants.DEFAULT_VALID_COLOR, this.invalidColor = null != b ? c : mxConstants.DEFAULT_INVALID_COLOR, this.hotspot = null != d ? d :
+    mxConstants.DEFAULT_HOTSPOT, this.highlight = new mxCellHighlight(a))
+}
+mxUtils.extend(mxCellMarker, mxEventSource);
+mxCellMarker.prototype.graph = null;
+mxCellMarker.prototype.enabled = !0;
+mxCellMarker.prototype.hotspot = mxConstants.DEFAULT_HOTSPOT;
+mxCellMarker.prototype.hotspotEnabled = !1;
+mxCellMarker.prototype.validColor = null;
+mxCellMarker.prototype.invalidColor = null;
+mxCellMarker.prototype.currentColor = null;
+mxCellMarker.prototype.validState = null;
+mxCellMarker.prototype.markedState = null;
+mxCellMarker.prototype.setEnabled = function(a) {
+  this.enabled = a
+};
+mxCellMarker.prototype.isEnabled = function() {
+  return this.enabled
+};
+mxCellMarker.prototype.setHotspot = function(a) {
+  this.hotspot = a
+};
+mxCellMarker.prototype.getHotspot = function() {
+  return this.hotspot
+};
+mxCellMarker.prototype.setHotspotEnabled = function(a) {
+  this.hotspotEnabled = a
+};
+mxCellMarker.prototype.isHotspotEnabled = function() {
+  return this.hotspotEnabled
+};
+mxCellMarker.prototype.hasValidState = function() {
+  return null != this.validState
+};
+mxCellMarker.prototype.getValidState = function() {
+  return this.validState
+};
+mxCellMarker.prototype.getMarkedState = function() {
+  return this.markedState
+};
+mxCellMarker.prototype.reset = function() {
+  this.validState = null;
+  null != this.markedState && (this.markedState = null, this.unmark())
+};
+mxCellMarker.prototype.process = function(a) {
+  var b = null;
+  if (this.isEnabled()) {
+    var b = this.getState(a),
+      c = null != b ? this.isValidState(b) : !1;
+    a = this.getMarkerColor(a.getEvent(), b, c);
+    this.validState = c ? b : null;
+    if (b != this.markedState || a != this.currentColor) this.currentColor = a, null != b && null != this.currentColor ? (this.markedState = b, this.mark()) : null != this.markedState && (this.markedState =
+      null, this.unmark())
+  }
+  return b
+};
+mxCellMarker.prototype.markCell = function(a, b) {
+  var c = this.graph.getView().getState(a);
+  null != c && (this.currentColor = null != b ? b : this.validColor, this.markedState = c, this.mark())
+};
+mxCellMarker.prototype.mark = function() {
+  this.highlight.setHighlightColor(this.currentColor);
+  this.highlight.highlight(this.markedState);
+  this.fireEvent(new mxEventObject(mxEvent.MARK, "state", this.markedState))
+};
+mxCellMarker.prototype.unmark = function() {
+  this.mark()
+};
+mxCellMarker.prototype.isValidState = function(a) {
+  return !0
+};
+mxCellMarker.prototype.getMarkerColor = function(a, b, c) {
+  return c ? this.validColor : this.invalidColor
+};
+mxCellMarker.prototype.getState = function(a) {
+  var b = this.graph.getView();
+  cell = this.getCell(a);
+  b = this.getStateToMark(b.getState(cell));
+  return null != b && this.intersects(b, a) ? b : null
+};
+mxCellMarker.prototype.getCell = function(a) {
+  return a.getCell()
+};
+mxCellMarker.prototype.getStateToMark = function(a) {
+  return a
+};
+mxCellMarker.prototype.intersects = function(a, b) {
+  return this.hotspotEnabled ? mxUtils.intersectsHotspot(a, b.getGraphX(), b.getGraphY(), this.hotspot, mxConstants.MIN_HOTSPOT_SIZE, mxConstants.MAX_HOTSPOT_SIZE) : !0
+};
+mxCellMarker.prototype.destroy = function() {
+  this.graph.getView().removeListener(this.resetHandler);
+  this.graph.getModel().removeListener(this.resetHandler);
+  this.highlight.destroy()
+};
+
+function mxSelectionCellsHandler(a) {
+  mxEventSource.call(this);
+  this.graph = a;
+  this.handlers = new mxDictionary;
+  this.graph.addMouseListener(this);
+  this.refreshHandler = mxUtils.bind(this, function(a, c) {
+    this.isEnabled() && this.refresh()
+  });
+  this.graph.getSelectionModel().addListener(mxEvent.CHANGE, this.refreshHandler);
+  this.graph.getModel().addListener(mxEvent.CHANGE, this.refreshHandler);
+  this.graph.getView().addListener(mxEvent.SCALE, this.refreshHandler);
+  this.graph.getView().addListener(mxEvent.TRANSLATE, this.refreshHandler);
+  this.graph.getView().addListener(mxEvent.SCALE_AND_TRANSLATE, this.refreshHandler);
+  this.graph.getView().addListener(mxEvent.DOWN, this.refreshHandler);
+  this.graph.getView().addListener(mxEvent.UP, this.refreshHandler)
+}
+mxUtils.extend(mxSelectionCellsHandler, mxEventSource);
+mxSelectionCellsHandler.prototype.graph = null;
+mxSelectionCellsHandler.prototype.enabled = !0;
+mxSelectionCellsHandler.prototype.refreshHandler = null;
+mxSelectionCellsHandler.prototype.maxHandlers = 100;
+mxSelectionCellsHandler.prototype.handlers = null;
+mxSelectionCellsHandler.prototype.isEnabled = function() {
+  return this.enabled
+};
+mxSelectionCellsHandler.prototype.setEnabled = function(a) {
+  this.enabled = a
+};
+mxSelectionCellsHandler.prototype.getHandler = function(a) {
+  return this.handlers.get(a)
+};
+mxSelectionCellsHandler.prototype.reset = function() {
+  this.handlers.visit(function(a, b) {
+    b.reset.apply(b)
+  })
+};
+mxSelectionCellsHandler.prototype.refresh = function() {
+  var a = this.handlers;
+  this.handlers = new mxDictionary;
+  for (var b = this.graph.getSelectionCells(), c = 0; c < b.length; c++) {
+    var d = this.graph.view.getState(b[c]);
+    if (null != d) {
+      var e = a.remove(b[c]);
+      null != e && (e.state != d ? (e.destroy(), e = null) : e.redraw());
+      null == e && (e = this.graph.createHandler(d), this.fireEvent(new mxEventObject(mxEvent.ADD, "state", d)));
+      null != e && this.handlers.put(b[c], e)
+    }
+  }
+  a.visit(mxUtils.bind(this, function(a, b) {
+    this.fireEvent(new mxEventObject(mxEvent.REMOVE,
+      "state", b.state));
+    b.destroy()
+  }))
+};
+mxSelectionCellsHandler.prototype.mouseDown = function(a, b) {
+  if (this.graph.isEnabled() && this.isEnabled()) {
+    var c = [a, b];
+    this.handlers.visit(function(a, b) {
+      b.mouseDown.apply(b, c)
+    })
+  }
+};
+mxSelectionCellsHandler.prototype.mouseMove = function(a, b) {
+  if (this.graph.isEnabled() && this.isEnabled()) {
+    var c = [a, b];
+    this.handlers.visit(function(a, b) {
+      b.mouseMove.apply(b, c)
+    })
+  }
+};
+mxSelectionCellsHandler.prototype.mouseUp = function(a, b) {
+  if (this.graph.isEnabled() && this.isEnabled()) {
+    var c = [a, b];
+    this.handlers.visit(function(a, b) {
+      b.mouseUp.apply(b, c)
+    })
+  }
+};
+mxSelectionCellsHandler.prototype.destroy = function() {
+  this.graph.removeMouseListener(this);
+  null != this.refreshHandler && (this.graph.getSelectionModel().removeListener(this.refreshHandler), this.graph.getModel().removeListener(this.refreshHandler), this.graph.getView().removeListener(
+    this.refreshHandler), this.refreshHandler = null)
+};
+
+function mxConnectionHandler(a, b) {
+  mxEventSource.call(this);
+  null != a && (this.graph = a, this.factoryMethod = b, this.init())
+}
+mxUtils.extend(mxConnectionHandler, mxEventSource);
+mxConnectionHandler.prototype.graph = null;
+mxConnectionHandler.prototype.factoryMethod = !0;
+mxConnectionHandler.prototype.moveIconFront = !1;
+mxConnectionHandler.prototype.moveIconBack = !1;
+mxConnectionHandler.prototype.connectImage = null;
+mxConnectionHandler.prototype.targetConnectImage = !1;
+mxConnectionHandler.prototype.enabled = !0;
+mxConnectionHandler.prototype.select = !0;
+mxConnectionHandler.prototype.createTarget = !1;
+mxConnectionHandler.prototype.marker = null;
+mxConnectionHandler.prototype.constraintHandler = null;
+mxConnectionHandler.prototype.error = null;
+mxConnectionHandler.prototype.waypointsEnabled = !1;
+mxConnectionHandler.prototype.tapAndHoldEnabled = !0;
+mxConnectionHandler.prototype.tapAndHoldDelay = 500;
+mxConnectionHandler.prototype.tapAndHoldInProgress = !1;
+mxConnectionHandler.prototype.tapAndHoldValid = !1;
+mxConnectionHandler.prototype.tapAndHoldTolerance = 4;
+mxConnectionHandler.prototype.initialTouchX = 0;
+mxConnectionHandler.prototype.initialTouchY = 0;
+mxConnectionHandler.prototype.ignoreMouseDown = !1;
+mxConnectionHandler.prototype.first = null;
+mxConnectionHandler.prototype.connectIconOffset = new mxPoint(0, mxConstants.TOOLTIP_VERTICAL_OFFSET);
+mxConnectionHandler.prototype.edgeState = null;
+mxConnectionHandler.prototype.changeHandler = null;
+mxConnectionHandler.prototype.drillHandler = null;
+mxConnectionHandler.prototype.mouseDownCounter = 0;
+mxConnectionHandler.prototype.movePreviewAway = mxClient.IS_VML;
+mxConnectionHandler.prototype.isEnabled = function() {
+  return this.enabled
+};
+mxConnectionHandler.prototype.setEnabled = function(a) {
+  this.enabled = a
+};
+mxConnectionHandler.prototype.isCreateTarget = function() {
+  return this.createTarget
+};
+mxConnectionHandler.prototype.setCreateTarget = function(a) {
+  this.createTarget = a
+};
+mxConnectionHandler.prototype.createShape = function() {
+  var a = new mxPolyline([], mxConstants.INVALID_COLOR);
+  a.dialect = this.graph.dialect != mxConstants.DIALECT_SVG ? mxConstants.DIALECT_VML : mxConstants.DIALECT_SVG;
+  a.init(this.graph.getView().getOverlayPane());
+  a.svgStrokeTolerance = 0;
+  a.pointerEvents = !1;
+  a.isDashed = !0;
+  if (this.graph.dialect == mxConstants.DIALECT_SVG) a.node.setAttribute("pointer-events", "none");
+  else {
+    var b = mxUtils.bind(this, function(a) {
+      a = mxUtils.convertPoint(this.graph.container, mxEvent.getClientX(a),
+        mxEvent.getClientY(a));
+      return this.graph.view.getState(this.graph.getCellAt(a.x, a.y))
+    });
+    mxEvent.redirectMouseEvents(a.node, this.graph, b)
+  }
+  return a
+};
+mxConnectionHandler.prototype.init = function() {
+  this.graph.addMouseListener(this);
+  this.marker = this.createMarker();
+  this.constraintHandler = new mxConstraintHandler(this.graph);
+  this.changeHandler = mxUtils.bind(this, function(a) {
+    null != this.iconState && (this.iconState = this.graph.getView().getState(this.iconState.cell));
+    null != this.iconState ? this.redrawIcons(this.icons, this.iconState) : (this.destroyIcons(this.icons), this.previous = null);
+    this.constraintHandler.reset()
+  });
+  this.graph.getModel().addListener(mxEvent.CHANGE,
+    this.changeHandler);
+  this.graph.getView().addListener(mxEvent.SCALE, this.changeHandler);
+  this.graph.getView().addListener(mxEvent.TRANSLATE, this.changeHandler);
+  this.graph.getView().addListener(mxEvent.SCALE_AND_TRANSLATE, this.changeHandler);
+  this.drillHandler = mxUtils.bind(this, function(a) {
+    this.destroyIcons(this.icons)
+  });
+  this.graph.addListener(mxEvent.START_EDITING, this.drillHandler);
+  this.graph.getView().addListener(mxEvent.DOWN, this.drillHandler);
+  this.graph.getView().addListener(mxEvent.UP, this.drillHandler)
+};
+mxConnectionHandler.prototype.isConnectableCell = function(a) {
+  return !0
+};
+mxConnectionHandler.prototype.createMarker = function() {
+  var a = new mxCellMarker(this.graph);
+  a.hotspotEnabled = !0;
+  a.getCell = mxUtils.bind(this, function(b, c) {
+    c = mxCellMarker.prototype.getCell.apply(a, arguments);
+    this.error = null;
+    if (!this.isConnectableCell(c)) return null;
+    null != c ? this.isConnecting() ? null != this.previous && (this.error = this.validateConnection(this.previous.cell, c), null != this.error && 0 == this.error.length && (c = null, this.isCreateTarget() &&
+        (this.error = null))) : this.isValidSource(c) || (c = null) : this.isConnecting() &&
+      (!this.isCreateTarget() && !this.graph.allowDanglingEdges) && (this.error = "");
+    return c
+  });
+  a.isValidState = mxUtils.bind(this, function(b) {
+    return this.isConnecting() ? null == this.error : mxCellMarker.prototype.isValidState.apply(a, arguments)
+  });
+  a.getMarkerColor = mxUtils.bind(this, function(b, c, d) {
+    return null == this.connectImage || this.isConnecting() ? mxCellMarker.prototype.getMarkerColor.apply(a, arguments) : null
+  });
+  a.intersects = mxUtils.bind(this, function(b, c) {
+    return null != this.connectImage || this.isConnecting() ? !0 : mxCellMarker.prototype.intersects.apply(a,
+      arguments)
+  });
+  return a
+};
+mxConnectionHandler.prototype.start = function(a, b, c, d) {
+  this.previous = a;
+  this.first = new mxPoint(b, c);
+  this.edgeState = null != d ? d : this.createEdgeState(null);
+  this.marker.currentColor = this.marker.validColor;
+  this.marker.markedState = a;
+  this.marker.mark();
+  this.fireEvent(new mxEventObject(mxEvent.START, "state", this.previous))
+};
+mxConnectionHandler.prototype.isConnecting = function() {
+  return null != this.first && null != this.shape
+};
+mxConnectionHandler.prototype.isValidSource = function(a) {
+  return this.graph.isValidSource(a)
+};
+mxConnectionHandler.prototype.isValidTarget = function(a) {
+  return !0
+};
+mxConnectionHandler.prototype.validateConnection = function(a, b) {
+  return !this.isValidTarget(b) ? "" : this.graph.getEdgeValidationError(null, a, b)
+};
+mxConnectionHandler.prototype.getConnectImage = function(a) {
+  return this.connectImage
+};
+mxConnectionHandler.prototype.isMoveIconToFrontForState = function(a) {
+  return null != a.text && a.text.node.parentNode == this.graph.container ? !0 : this.moveIconFront
+};
+mxConnectionHandler.prototype.createIcons = function(a) {
+  var b = this.getConnectImage(a);
+  if (null != b && null != a) {
+    this.iconState = a;
+    var c = [],
+      d = new mxRectangle(0, 0, b.width, b.height),
+      e = new mxImageShape(d, b.src, null, null, 0);
+    e.preserveImageAspect = !1;
+    this.isMoveIconToFrontForState(a) ? (e.dialect = mxConstants.DIALECT_STRICTHTML, e.init(this.graph.container)) : (e.dialect = this.graph.dialect == mxConstants.DIALECT_SVG ? mxConstants.DIALECT_SVG :
+      mxConstants.DIALECT_VML, e.init(this.graph.getView().getOverlayPane()), this.moveIconBack &&
+      null != e.node.previousSibling && e.node.parentNode.insertBefore(e.node, e.node.parentNode.firstChild));
+    e.node.style.cursor = mxConstants.CURSOR_CONNECT;
+    var f = mxUtils.bind(this, function() {
+        return null != this.currentState ? this.currentState : a
+      }),
+      b = mxUtils.bind(this, function(a) {
+        mxEvent.isConsumed(a) || (this.icon = e, this.graph.fireMouseEvent(mxEvent.MOUSE_DOWN, new mxMouseEvent(a, f())))
+      });
+    mxEvent.redirectMouseEvents(e.node, this.graph, f, b);
+    c.push(e);
+    this.redrawIcons(c, this.iconState);
+    return c
+  }
+  return null
+};
+mxConnectionHandler.prototype.redrawIcons = function(a, b) {
+  if (null != a && null != a[0] && null != b) {
+    var c = this.getIconPosition(a[0], b);
+    a[0].bounds.x = c.x;
+    a[0].bounds.y = c.y;
+    a[0].redraw()
+  }
+};
+mxConnectionHandler.prototype.getIconPosition = function(a, b) {
+  var c = this.graph.getView().scale,
+    d = b.getCenterX(),
+    e = b.getCenterY();
+  if (this.graph.isSwimlane(b.cell)) {
+    var f = this.graph.getStartSize(b.cell),
+      d = 0 != f.width ? b.x + f.width * c / 2 : d,
+      e = 0 != f.height ? b.y + f.height * c / 2 : e,
+      f = mxUtils.toRadians(mxUtils.getValue(b.style, mxConstants.STYLE_ROTATION) || 0);
+    if (0 != f) var c = Math.cos(f),
+      f = Math.sin(f),
+      g = new mxPoint(b.getCenterX(), b.getCenterY()),
+      e = mxUtils.getRotatedPoint(new mxPoint(d, e), c, f, g),
+      d = e.x,
+      e = e.y
+  }
+  return new mxPoint(d -
+    a.bounds.width / 2, e - a.bounds.height / 2)
+};
+mxConnectionHandler.prototype.destroyIcons = function(a) {
+  if (null != a) {
+    this.iconState = null;
+    for (var b = 0; b < a.length; b++) a[b].destroy()
+  }
+};
+mxConnectionHandler.prototype.isStartEvent = function(a) {
+  return !this.graph.isForceMarqueeEvent(a.getEvent()) && (null != this.constraintHandler.currentFocus && null != this.constraintHandler.currentConstraint || null != this.previous && null == this.error &&
+    (null == this.icons || null != this.icons && null != this.icon))
+};
+mxConnectionHandler.prototype.mouseDown = function(a, b) {
+  this.mouseDownCounter++;
+  if (this.isEnabled() && this.graph.isEnabled() && !b.isConsumed() && !this.isConnecting() && this.isStartEvent(b)) {
+    null != this.constraintHandler.currentConstraint && null != this.constraintHandler.currentFocus && null != this.constraintHandler.currentPoint ? (this.sourceConstraint = this.constraintHandler.currentConstraint,
+      this.previous = this.constraintHandler.currentFocus, this.first = this.constraintHandler.currentPoint.clone()) : this.first = new mxPoint(b.getGraphX(),
+      b.getGraphY());
+    this.edgeState = this.createEdgeState(b);
+    this.mouseDownCounter = 1;
+    this.waypointsEnabled && null == this.shape && (this.waypoints = null, this.shape = this.createShape());
+    if (null == this.previous && null != this.edgeState) {
+      var c = this.graph.getPointForEvent(b.getEvent());
+      this.edgeState.cell.geometry.setTerminalPoint(c, !0)
+    }
+    this.fireEvent(new mxEventObject(mxEvent.START, "state", this.previous));
+    b.consume()
+  } else if (mxClient.IS_TOUCH && this.tapAndHoldEnabled && !this.tapAndHoldInProgress && this.isEnabled() && this.graph.isEnabled() &&
+    !this.isConnecting()) {
+    this.tapAndHoldInProgress = !0;
+    this.initialTouchX = b.getX();
+    this.initialTouchY = b.getY();
+    var d = this.graph.view.getState(this.marker.getCell(b));
+    this.tapAndHoldThread && window.clearTimeout(this.tapAndHoldThread);
+    this.tapAndHoldThread = window.setTimeout(mxUtils.bind(this, function() {
+      this.tapAndHoldValid && this.tapAndHold(b, d);
+      this.tapAndHoldValid = this.tapAndHoldInProgress = !1
+    }), this.tapAndHoldDelay);
+    this.tapAndHoldValid = !0
+  }
+  this.selectedIcon = this.icon;
+  this.icon = null
+};
+mxConnectionHandler.prototype.tapAndHold = function(a, b) {
+  null != b && (this.marker.currentColor = this.marker.validColor, this.marker.markedState = b, this.marker.mark(), this.first = new mxPoint(a.getGraphX(), a.getGraphY()), this.edgeState = this.createEdgeState(
+    a), this.previous = b, this.fireEvent(new mxEventObject(mxEvent.START, "state", this.previous)))
+};
+mxConnectionHandler.prototype.isImmediateConnectSource = function(a) {
+  return !this.graph.isCellMovable(a.cell)
+};
+mxConnectionHandler.prototype.createEdgeState = function(a) {
+  return null
+};
+mxConnectionHandler.prototype.updateCurrentState = function(a) {
+  var b = this.marker.process(a);
+  this.constraintHandler.update(a, null == this.first);
+  this.currentState = b
+};
+mxConnectionHandler.prototype.convertWaypoint = function(a) {
+  var b = this.graph.getView().getScale(),
+    c = this.graph.getView().getTranslate();
+  a.x = a.x / b - c.x;
+  a.y = a.y / b - c.y
+};
+mxConnectionHandler.prototype.mouseMove = function(a, b) {
+  this.tapAndHoldValid && (this.tapAndHoldValid = Math.abs(this.initialTouchX - b.getX()) < this.tapAndHoldTolerance && Math.abs(this.initialTouchY - b.getY()) < this.tapAndHoldTolerance);
+  if (!b.isConsumed() && (this.ignoreMouseDown || null != this.first || !this.graph.isMouseDown)) {
+    !this.isEnabled() && null != this.currentState && (this.destroyIcons(this.icons), this.currentState = null);
+    (null != this.first || this.isEnabled() && this.graph.isEnabled()) && this.updateCurrentState(b);
+    if (null != this.first) {
+      var c = this.graph.getView().scale,
+        c = new mxPoint(this.graph.snap(b.getGraphX() / c) * c, this.graph.snap(b.getGraphY() / c) * c),
+        d = null,
+        e = c;
+      null != this.constraintHandler.currentConstraint && (null != this.constraintHandler.currentFocus && null != this.constraintHandler.currentPoint) && (d = this.constraintHandler.currentConstraint,
+        e = this.constraintHandler.currentPoint.clone());
+      var f = this.first;
+      if (null != this.selectedIcon) {
+        var g = this.selectedIcon.bounds.width,
+          h = this.selectedIcon.bounds.height;
+        null != this.currentState &&
+          this.targetConnectImage ? (g = this.getIconPosition(this.selectedIcon, this.currentState), this.selectedIcon.bounds.x = g.x, this.selectedIcon.bounds.y = g.y) : (g = new mxRectangle(b.getGraphX() +
+            this.connectIconOffset.x, b.getGraphY() + this.connectIconOffset.y, g, h), this.selectedIcon.bounds = g);
+        this.selectedIcon.redraw()
+      }
+      if (null != this.edgeState) {
+        this.edgeState.absolutePoints = [null, null != this.currentState ? null : e];
+        this.graph.view.updateFixedTerminalPoint(this.edgeState, this.previous, !0, this.sourceConstraint);
+        null != this.currentState &&
+          (null == d && (d = this.graph.getConnectionConstraint(this.edgeState, this.previous, !1)), this.edgeState.setAbsoluteTerminalPoint(null, !1), this.graph.view.updateFixedTerminalPoint(this
+            .edgeState, this.currentState, !1, d));
+        f = null;
+        if (null != this.waypoints) {
+          f = [];
+          for (e = 0; e < this.waypoints.length; e++) d = this.waypoints[e].clone(), this.convertWaypoint(d), f[e] = d
+        }
+        this.graph.view.updatePoints(this.edgeState, f, this.previous, this.currentState);
+        this.graph.view.updateFloatingTerminalPoints(this.edgeState, this.previous, this.currentState);
+        e = this.edgeState.absolutePoints[this.edgeState.absolutePoints.length - 1];
+        f = this.edgeState.absolutePoints[0]
+      } else null != this.currentState && null == this.constraintHandler.currentConstraint && (g = this.getTargetPerimeterPoint(this.currentState, b), null != g && (e = g)), null == this.sourceConstraint &&
+        null != this.previous && (g = this.getSourcePerimeterPoint(this.previous, null != this.waypoints && 0 < this.waypoints.length ? this.waypoints[0] : e, b), null != g && (f = g));
+      if (null == this.currentState && this.movePreviewAway) {
+        g = f;
+        null != this.edgeState &&
+          2 < this.edgeState.absolutePoints.length && (d = this.edgeState.absolutePoints[this.edgeState.absolutePoints.length - 2], null != d && (g = d));
+        d = e.x - g.x;
+        g = e.y - g.y;
+        h = Math.sqrt(d * d + g * g);
+        if (0 == h) return;
+        e.x -= 4 * d / h;
+        e.y -= 4 * g / h
+      }
+      if (null == this.shape && (d = Math.abs(c.x - this.first.x), g = Math.abs(c.y - this.first.y), d > this.graph.tolerance || g > this.graph.tolerance)) this.shape = this.createShape(), this.updateCurrentState(
+        b);
+      null != this.shape && (null != this.edgeState ? this.shape.points = this.edgeState.absolutePoints : (c = [f], null != this.waypoints &&
+        (c = c.concat(this.waypoints)), c.push(e), this.shape.points = c), this.drawPreview());
+      mxEvent.consume(b.getEvent());
+      b.consume()
+    } else !this.isEnabled() || !this.graph.isEnabled() ? this.constraintHandler.reset() : this.previous != this.currentState && null == this.edgeState ? (this.destroyIcons(this.icons), this.icons =
+        null, null != this.currentState && null == this.error && (this.icons = this.createIcons(this.currentState), null == this.icons && (this.currentState.setCursor(mxConstants.CURSOR_CONNECT), b
+          .consume())), this.previous = this.currentState) :
+      this.previous == this.currentState && (null != this.currentState && null == this.icons && !this.graph.isMouseDown) && b.consume();
+    null != this.constraintHandler.currentConstraint && this.marker.reset();
+    if (!this.graph.isMouseDown && null != this.currentState && null != this.icons) {
+      c = !1;
+      f = b.getSource();
+      for (e = 0; e < this.icons.length && !c; e++) c = f == this.icons[e].node || f.parentNode == this.icons[e].node;
+      c || this.updateIcons(this.currentState, this.icons, b)
+    }
+  } else this.constraintHandler.reset()
+};
+mxConnectionHandler.prototype.getTargetPerimeterPoint = function(a, b) {
+  var c = null,
+    d = a.view,
+    e = d.getPerimeterFunction(a);
+  if (null != e) {
+    var f = null != this.waypoints && 0 < this.waypoints.length ? this.waypoints[this.waypoints.length - 1] : new mxPoint(this.previous.getCenterX(), this.previous.getCenterY()),
+      d = e(d.getPerimeterBounds(a), this.edgeState, f, !1);
+    null != d && (c = d)
+  } else c = new mxPoint(a.getCenterX(), a.getCenterY());
+  return c
+};
+mxConnectionHandler.prototype.getSourcePerimeterPoint = function(a, b, c) {
+  c = null;
+  var d = a.view,
+    e = d.getPerimeterFunction(a),
+    f = new mxPoint(a.getCenterX(), a.getCenterY());
+  if (null != e) {
+    var g = mxUtils.getValue(a.style, mxConstants.STYLE_ROTATION, 0),
+      h = -g * (Math.PI / 180);
+    0 != g && (b = mxUtils.getRotatedPoint(new mxPoint(b.x, b.y), Math.cos(h), Math.sin(h), f));
+    a = e(d.getPerimeterBounds(a), a, b, !1);
+    null != a && (0 != g && (a = mxUtils.getRotatedPoint(new mxPoint(a.x, a.y), Math.cos(-h), Math.sin(-h), f)), c = a)
+  } else c = f;
+  return c
+};
+mxConnectionHandler.prototype.updateIcons = function(a, b, c) {};
+mxConnectionHandler.prototype.isStopEvent = function(a) {
+  return null != a.getState()
+};
+mxConnectionHandler.prototype.addWaypointForEvent = function(a) {
+  var b = mxUtils.convertPoint(this.graph.container, a.getX(), a.getY()),
+    c = Math.abs(b.x - this.first.x),
+    b = Math.abs(b.y - this.first.y);
+  if (null != this.waypoints || 1 < this.mouseDownCounter && (c > this.graph.tolerance || b > this.graph.tolerance)) null == this.waypoints && (this.waypoints = []), c = this.graph.view.scale, b =
+    new mxPoint(this.graph.snap(a.getGraphX() / c) * c, this.graph.snap(a.getGraphY() / c) * c), this.waypoints.push(b)
+};
+mxConnectionHandler.prototype.mouseUp = function(a, b) {
+  if (!b.isConsumed() && this.isConnecting()) {
+    if (this.waypointsEnabled && !this.isStopEvent(b)) {
+      this.addWaypointForEvent(b);
+      b.consume();
+      return
+    }
+    if (null == this.error) {
+      var c = null != this.previous ? this.previous.cell : null,
+        d = null;
+      null != this.constraintHandler.currentConstraint && null != this.constraintHandler.currentFocus && (d = this.constraintHandler.currentFocus.cell);
+      null == d && this.marker.hasValidState() && (d = this.marker.validState.cell);
+      this.connect(c, d, b.getEvent(),
+        b.getCell())
+    } else null != this.previous && (null != this.marker.validState && this.previous.cell == this.marker.validState.cell) && this.graph.selectCellForEvent(this.marker.source, evt), 0 < this.error.length &&
+      this.graph.validationAlert(this.error);
+    this.destroyIcons(this.icons);
+    b.consume()
+  }
+  null != this.first && this.reset();
+  this.tapAndHoldValid = this.tapAndHoldInProgress = !1
+};
+mxConnectionHandler.prototype.reset = function() {
+  null != this.shape && (this.shape.destroy(), this.shape = null);
+  this.destroyIcons(this.icons);
+  this.icons = null;
+  this.marker.reset();
+  this.constraintHandler.reset();
+  this.sourceConstraint = this.error = this.previous = this.edgeState = this.selectedIcon = null;
+  this.mouseDownCounter = 0;
+  this.icon = this.first = null;
+  this.fireEvent(new mxEventObject(mxEvent.RESET))
+};
+mxConnectionHandler.prototype.drawPreview = function() {
+  var a = null == this.error;
+  this.shape.strokewidth = this.getEdgeWidth(a);
+  a = this.getEdgeColor(a);
+  this.shape.stroke = a;
+  this.shape.redraw()
+};
+mxConnectionHandler.prototype.getEdgeColor = function(a) {
+  return a ? mxConstants.VALID_COLOR : mxConstants.INVALID_COLOR
+};
+mxConnectionHandler.prototype.getEdgeWidth = function(a) {
+  return a ? 3 : 1
+};
+mxConnectionHandler.prototype.connect = function(a, b, c, d) {
+  if (null != b || this.isCreateTarget() || this.graph.allowDanglingEdges) {
+    var e = this.graph.getModel(),
+      f = null;
+    e.beginUpdate();
+    try {
+      if (null != a && (null == b && this.isCreateTarget()) && (b = this.createTargetVertex(c, a), null != b)) {
+        d = this.graph.getDropTarget([b], c, d);
+        if (null == d || !this.graph.getModel().isEdge(d)) {
+          var g = this.graph.getView().getState(d);
+          if (null != g) {
+            var h = e.getGeometry(b);
+            h.x -= g.origin.x;
+            h.y -= g.origin.y
+          }
+        } else d = this.graph.getDefaultParent();
+        this.graph.addCell(b,
+          d)
+      }
+      var k = this.graph.getDefaultParent();
+      null != a && (null != b && e.getParent(a) == e.getParent(b) && e.getParent(e.getParent(a)) != e.getRoot()) && (k = e.getParent(a), null != a.geometry && a.geometry.relative && (null != b.geometry &&
+        b.geometry.relative) && (k = e.getParent(k)));
+      h = g = null;
+      null != this.edgeState && (g = this.edgeState.cell.value, h = this.edgeState.cell.style);
+      f = this.insertEdge(k, null, g, a, b, h);
+      if (null != f) {
+        this.graph.setConnectionConstraint(f, a, !0, this.sourceConstraint);
+        this.graph.setConnectionConstraint(f, b, !1, this.constraintHandler.currentConstraint);
+        null != this.edgeState && e.setGeometry(f, this.edgeState.cell.geometry);
+        var l = e.getGeometry(f);
+        null == l && (l = new mxGeometry, l.relative = !0, e.setGeometry(f, l));
+        if (null != this.waypoints && 0 < this.waypoints.length) {
+          var m = this.graph.view.scale,
+            n = this.graph.view.translate;
+          l.points = [];
+          for (a = 0; a < this.waypoints.length; a++) {
+            var p = this.waypoints[a];
+            l.points.push(new mxPoint(p.x / m - n.x, p.y / m - n.y))
+          }
+        }
+        null == b && (p = this.graph.getPointForEvent(c, !1), p.x -= this.graph.panDx / this.graph.view.scale, p.y -= this.graph.panDy / this.graph.view.scale,
+          l.setTerminalPoint(p, !1));
+        this.fireEvent(new mxEventObject(mxEvent.CONNECT, "cell", f, "event", c, "target", d))
+      }
+    } catch (q) {
+      mxLog.show(), mxLog.debug(q.message)
+    } finally {
+      e.endUpdate()
+    }
+    this.select && this.selectCells(f, b)
+  }
+};
+mxConnectionHandler.prototype.selectCells = function(a, b) {
+  this.graph.setSelectionCell(a)
+};
+mxConnectionHandler.prototype.insertEdge = function(a, b, c, d, e, f) {
+  if (null == this.factoryMethod) return this.graph.insertEdge(a, b, c, d, e, f);
+  b = this.createEdge(c, d, e, f);
+  return b = this.graph.addEdge(b, a, d, e)
+};
+mxConnectionHandler.prototype.createTargetVertex = function(a, b) {
+  for (var c = this.graph.getCellGeometry(b); null != c && c.relative;) b = this.graph.getModel().getParent(b), c = this.graph.getCellGeometry(b);
+  var d = this.graph.cloneCells([b])[0],
+    c = this.graph.getModel().getGeometry(d);
+  if (null != c) {
+    var e = this.graph.getPointForEvent(a);
+    c.x = this.graph.snap(e.x - c.width / 2) - this.graph.panDx / this.graph.view.scale;
+    c.y = this.graph.snap(e.y - c.height / 2) - this.graph.panDy / this.graph.view.scale;
+    if (null != this.first) {
+      var f = this.graph.view.getState(b);
+      if (null != f) {
+        var g = this.getAlignmentTolerance();
+        Math.abs(this.graph.snap(this.first.x) - this.graph.snap(e.x)) <= g ? c.x = f.x : Math.abs(this.graph.snap(this.first.y) - this.graph.snap(e.y)) <= g && (c.y = f.y)
+      }
+    }
+  }
+  return d
+};
+mxConnectionHandler.prototype.getAlignmentTolerance = function() {
+  return this.graph.isGridEnabled() ? this.graph.gridSize : this.graph.tolerance
+};
+mxConnectionHandler.prototype.createEdge = function(a, b, c, d) {
+  var e = null;
+  null != this.factoryMethod && (e = this.factoryMethod(b, c, d));
+  null == e && (e = new mxCell(a || ""), e.setEdge(!0), e.setStyle(d), a = new mxGeometry, a.relative = !0, e.setGeometry(a));
+  return e
+};
+mxConnectionHandler.prototype.destroy = function() {
+  this.graph.removeMouseListener(this);
+  null != this.shape && (this.shape.destroy(), this.shape = null);
+  null != this.marker && (this.marker.destroy(), this.marker = null);
+  null != this.constraintHandler && (this.constraintHandler.destroy(), this.constraintHandler = null);
+  null != this.changeHandler && (this.graph.getModel().removeListener(this.changeHandler), this.graph.getView().removeListener(this.changeHandler), this.changeHandler = null);
+  null != this.drillHandler && (this.graph.removeListener(this.drillHandler),
+    this.graph.getView().removeListener(this.drillHandler), this.drillHandler = null)
+};
+
+function mxConstraintHandler(a) {
+  this.graph = a
+}
+mxConstraintHandler.prototype.pointImage = new mxImage(mxClient.imageBasePath + "/point.gif", 5, 5);
+mxConstraintHandler.prototype.graph = null;
+mxConstraintHandler.prototype.enabled = !0;
+mxConstraintHandler.prototype.highlightColor = mxConstants.DEFAULT_VALID_COLOR;
+mxConstraintHandler.prototype.isEnabled = function() {
+  return this.enabled
+};
+mxConstraintHandler.prototype.setEnabled = function(a) {
+  this.enabled = a
+};
+mxConstraintHandler.prototype.reset = function() {
+  if (null != this.focusIcons) {
+    for (var a = 0; a < this.focusIcons.length; a++) this.focusIcons[a].destroy();
+    this.focusIcons = null
+  }
+  null != this.focusHighlight && (this.focusHighlight.destroy(), this.focusHighlight = null);
+  this.focusPoints = this.currentFocus = this.currentPoint = this.currentFocusArea = this.currentConstraint = null
+};
+mxConstraintHandler.prototype.getTolerance = function() {
+  return this.graph.getTolerance()
+};
+mxConstraintHandler.prototype.getImageForConstraint = function(a, b, c) {
+  return this.pointImage
+};
+mxConstraintHandler.prototype.isEventIgnored = function(a, b) {
+  return !1
+};
+mxConstraintHandler.prototype.update = function(a, b) {
+  if (this.isEnabled() && !this.isEventIgnored(a)) {
+    var c = this.getTolerance(),
+      d = new mxRectangle(a.getGraphX() - c, a.getGraphY() - c, 2 * c, 2 * c),
+      e = null != a.getCell() ? this.graph.isCellConnectable(a.getCell()) : !1;
+    if (null == this.currentFocusArea || !mxUtils.intersects(this.currentFocusArea, d) || null != a.getState() && null != this.currentFocus && e)
+      if (this.currentFocusArea = null, a.getState() != this.currentFocus)
+        if (this.currentFocus = null, this.constraints = null != a.getState() && e ? this.graph.getAllConnectionConstraints(a.getState(),
+            b) : null, null != this.constraints) {
+          this.currentFocus = a.getState();
+          this.currentFocusArea = new mxRectangle(a.getState().x, a.getState().y, a.getState().width, a.getState().height);
+          if (null != this.focusIcons) {
+            for (e = 0; e < this.focusIcons.length; e++) this.focusIcons[e].destroy();
+            this.focusPoints = this.focusIcons = null
+          }
+          this.focusIcons = [];
+          this.focusPoints = [];
+          for (e = 0; e < this.constraints.length; e++) {
+            var f = this.graph.getConnectionPoint(a.getState(), this.constraints[e]),
+              g = this.getImageForConstraint(a.getState(), this.constraints[e],
+                f),
+              h = g.src,
+              g = new mxRectangle(f.x - g.width / 2, f.y - g.height / 2, g.width, g.height),
+              g = new mxImageShape(g, h);
+            g.dialect = this.graph.dialect != mxConstants.DIALECT_SVG ? mxConstants.DIALECT_MIXEDHTML : mxConstants.DIALECT_SVG;
+            g.preserveImageAspect = !1;
+            g.init(this.graph.getView().getOverlayPane());
+            null != g.node.previousSibling && g.node.parentNode.insertBefore(g.node, g.node.parentNode.firstChild);
+            h = mxUtils.bind(this, function() {
+              return null != this.currentFocus ? this.currentFocus : a.getState()
+            });
+            g.redraw();
+            mxEvent.redirectMouseEvents(g.node,
+              this.graph, h);
+            this.currentFocusArea.add(g.bounds);
+            this.focusIcons.push(g);
+            this.focusPoints.push(f)
+          }
+          this.currentFocusArea.grow(c)
+        } else if (null != this.focusIcons) {
+      null != this.focusHighlight && (this.focusHighlight.destroy(), this.focusHighlight = null);
+      for (e = 0; e < this.focusIcons.length; e++) this.focusIcons[e].destroy();
+      this.focusPoints = this.focusIcons = null
+    }
+    this.currentPoint = this.currentConstraint = null;
+    if (null != this.focusIcons && null != this.constraints && (null == a.getState() || this.currentFocus == a.getState()))
+      for (e =
+        0; e < this.focusIcons.length; e++)
+        if (mxUtils.intersects(this.focusIcons[e].bounds, d)) {
+          this.currentConstraint = this.constraints[e];
+          this.currentPoint = this.focusPoints[e];
+          c = this.focusIcons[e].bounds.clone();
+          c.grow(mxClient.IS_IE ? 3 : 2);
+          mxClient.IS_IE && (c.width -= 1, c.height -= 1);
+          null == this.focusHighlight ? (c = new mxRectangleShape(c, null, this.highlightColor, 3), c.dialect = this.graph.dialect == mxConstants.DIALECT_SVG ? mxConstants.DIALECT_SVG : mxConstants
+            .DIALECT_VML, c.init(this.graph.getView().getOverlayPane()), this.focusHighlight =
+            c, h = mxUtils.bind(this, function() {
+              return null != this.currentFocus ? this.currentFocus : a.getState()
+            }), mxEvent.redirectMouseEvents(c.node, this.graph, h)) : (this.focusHighlight.bounds = c, this.focusHighlight.redraw());
+          break
+        }
+    null == this.currentConstraint && null != this.focusHighlight && (this.focusHighlight.destroy(), this.focusHighlight = null)
+  }
+};
+mxConstraintHandler.prototype.destroy = function() {
+  this.reset()
+};
+
+function mxRubberband(a) {
+  null != a && (this.graph = a, this.graph.addMouseListener(this), this.panHandler = mxUtils.bind(this, function() {
+    this.repaint()
+  }), this.graph.addListener(mxEvent.PAN, this.panHandler), mxClient.IS_IE && mxEvent.addListener(window, "unload", mxUtils.bind(this, function() {
+    this.destroy()
+  })))
+}
+mxRubberband.prototype.defaultOpacity = 20;
+mxRubberband.prototype.enabled = !0;
+mxRubberband.prototype.div = null;
+mxRubberband.prototype.sharedDiv = null;
+mxRubberband.prototype.currentX = 0;
+mxRubberband.prototype.currentY = 0;
+mxRubberband.prototype.isEnabled = function() {
+  return this.enabled
+};
+mxRubberband.prototype.setEnabled = function(a) {
+  this.enabled = a
+};
+mxRubberband.prototype.mouseDown = function(a, b) {
+  if (!b.isConsumed() && this.isEnabled() && this.graph.isEnabled() && (this.graph.isForceMarqueeEvent(b.getEvent()) || null == b.getState())) {
+    var c = mxUtils.getOffset(this.graph.container),
+      d = mxUtils.getScrollOrigin(this.graph.container);
+    d.x -= c.x;
+    d.y -= c.y;
+    this.start(b.getX() + d.x, b.getY() + d.y);
+    if (mxClient.IS_NS && !mxClient.IS_SF && !mxClient.IS_GC) {
+      var e = this.graph.container,
+        f = function(a) {
+          a = new mxMouseEvent(a);
+          var b = mxUtils.convertPoint(e, a.getX(), a.getY());
+          a.graphX = b.x;
+          a.graphY = b.y;
+          return a
+        };
+      this.dragHandler = mxUtils.bind(this, function(a) {
+        this.mouseMove(this.graph, f(a))
+      });
+      this.dropHandler = mxUtils.bind(this, function(a) {
+        this.mouseUp(this.graph, f(a))
+      });
+      mxEvent.addListener(document, "mousemove", this.dragHandler);
+      mxEvent.addListener(document, "mouseup", this.dropHandler)
+    }
+    b.consume(!1)
+  }
+};
+mxRubberband.prototype.start = function(a, b) {
+  this.first = new mxPoint(a, b)
+};
+mxRubberband.prototype.mouseMove = function(a, b) {
+  if (!b.isConsumed() && null != this.first) {
+    var c = mxUtils.getScrollOrigin(this.graph.container),
+      d = mxUtils.getOffset(this.graph.container);
+    c.x -= d.x;
+    c.y -= d.y;
+    var d = b.getX() + c.x,
+      c = b.getY() + c.y,
+      e = this.first.x - d,
+      f = this.first.y - c,
+      g = this.graph.tolerance;
+    if (null != this.div || Math.abs(e) > g || Math.abs(f) > g) null == this.div && (this.div = this.createShape()), mxUtils.clearSelection(), this.update(d, c), b.consume()
+  }
+};
+mxRubberband.prototype.createShape = function() {
+  null == this.sharedDiv && (this.sharedDiv = document.createElement("div"), this.sharedDiv.className = "mxRubberband", mxUtils.setOpacity(this.sharedDiv, this.defaultOpacity));
+  this.graph.container.appendChild(this.sharedDiv);
+  return this.sharedDiv
+};
+mxRubberband.prototype.mouseUp = function(a, b) {
+  var c = null != this.div;
+  this.reset();
+  c && (c = new mxRectangle(this.x, this.y, this.width, this.height), this.graph.selectRegion(c, b.getEvent()), b.consume())
+};
+mxRubberband.prototype.reset = function() {
+  null != this.div && this.div.parentNode.removeChild(this.div);
+  null != this.dragHandler && (mxEvent.removeListener(document, "mousemove", this.dragHandler), this.dragHandler = null);
+  null != this.dropHandler && (mxEvent.removeListener(document, "mouseup", this.dropHandler), this.dropHandler = null);
+  this.currentY = this.currentX = 0;
+  this.div = this.first = null
+};
+mxRubberband.prototype.update = function(a, b) {
+  this.currentX = a;
+  this.currentY = b;
+  this.repaint()
+};
+mxRubberband.prototype.repaint = function() {
+  if (null != this.div) {
+    var a = this.currentX - this.graph.panDx,
+      b = this.currentY - this.graph.panDy;
+    this.x = Math.min(this.first.x, a);
+    this.y = Math.min(this.first.y, b);
+    this.width = Math.max(this.first.x, a) - this.x;
+    this.height = Math.max(this.first.y, b) - this.y;
+    a = mxClient.IS_VML ? this.graph.panDy : 0;
+    this.div.style.left = this.x + (mxClient.IS_VML ? this.graph.panDx : 0) + "px";
+    this.div.style.top = this.y + a + "px";
+    this.div.style.width = Math.max(1, this.width) + "px";
+    this.div.style.height = Math.max(1,
+      this.height) + "px"
+  }
+};
+mxRubberband.prototype.destroy = function() {
+  this.destroyed || (this.destroyed = !0, this.graph.removeMouseListener(this), this.graph.removeListener(this.panHandler), this.reset(), null != this.sharedDiv && (this.sharedDiv = null))
+};
+
+function mxVertexHandler(a) {
+  null != a && (this.state = a, this.init())
+}
+mxVertexHandler.prototype.graph = null;
+mxVertexHandler.prototype.state = null;
+mxVertexHandler.prototype.singleSizer = !1;
+mxVertexHandler.prototype.index = null;
+mxVertexHandler.prototype.allowHandleBoundsCheck = !0;
+mxVertexHandler.prototype.handleImage = null;
+mxVertexHandler.prototype.tolerance = 0;
+mxVertexHandler.prototype.rotationEnabled = !1;
+mxVertexHandler.prototype.rotationRaster = !0;
+mxVertexHandler.prototype.init = function() {
+  this.graph = this.state.view.graph;
+  this.selectionBounds = this.getSelectionBounds(this.state);
+  this.bounds = new mxRectangle(this.selectionBounds.x, this.selectionBounds.y, this.selectionBounds.width, this.selectionBounds.height);
+  this.selectionBorder = this.createSelectionShape(this.bounds);
+  this.selectionBorder.dialect = this.graph.dialect != mxConstants.DIALECT_SVG ? mxConstants.DIALECT_VML : mxConstants.DIALECT_SVG;
+  this.selectionBorder.pointerEvents = !1;
+  this.selectionBorder.init(this.graph.getView().getOverlayPane());
+  this.graph.isCellMovable(this.state.cell) && (this.selectionBorder.node.style.cursor = mxConstants.CURSOR_MOVABLE_VERTEX);
+  mxEvent.redirectMouseEvents(this.selectionBorder.node, this.graph, this.state);
+  if (0 >= mxGraphHandler.prototype.maxCells || this.graph.getSelectionCount() < mxGraphHandler.prototype.maxCells) {
+    var a = this.graph.isCellResizable(this.state.cell);
+    this.sizers = [];
+    if (a || this.graph.isLabelMovable(this.state.cell) && 2 <= this.state.width && 2 <= this.state.height) {
+      var b = 0;
+      a && (this.singleSizer || (this.sizers.push(this.createSizer("nw-resize",
+        b++)), this.sizers.push(this.createSizer("n-resize", b++)), this.sizers.push(this.createSizer("ne-resize", b++)), this.sizers.push(this.createSizer("w-resize", b++)), this.sizers.push(
+        this.createSizer("e-resize", b++)), this.sizers.push(this.createSizer("sw-resize", b++)), this.sizers.push(this.createSizer("s-resize", b++))), this.sizers.push(this.createSizer(
+        "se-resize", b++)));
+      a = this.graph.model.getGeometry(this.state.cell);
+      null != a && (!a.relative && !this.graph.isSwimlane(this.state.cell) && this.graph.isLabelMovable(this.state.cell)) &&
+        (this.labelShape = this.createSizer(mxConstants.CURSOR_LABEL_HANDLE, mxEvent.LABEL_HANDLE, mxConstants.LABEL_HANDLE_SIZE, mxConstants.LABEL_HANDLE_FILLCOLOR), this.sizers.push(this.labelShape))
+    } else this.graph.isCellMovable(this.state.cell) && (!this.graph.isCellResizable(this.state.cell) && 2 > this.state.width && 2 > this.state.height) && (this.labelShape = this.createSizer(
+      mxConstants.CURSOR_MOVABLE_VERTEX, null, null, mxConstants.LABEL_HANDLE_FILLCOLOR), this.sizers.push(this.labelShape))
+  }
+  if (this.rotationEnabled && (0 >=
+      mxGraphHandler.prototype.maxCells || this.graph.getSelectionCount() < mxGraphHandler.prototype.maxCells)) this.rotationShape = this.createSizer("pointer", mxEvent.ROTATION_HANDLE, mxConstants
+    .HANDLE_SIZE + 3, mxConstants.HANDLE_FILLCOLOR), this.sizers.push(this.rotationShape);
+  this.redraw()
+};
+mxVertexHandler.prototype.getSelectionBounds = function(a) {
+  return new mxRectangle(Math.round(a.x), Math.round(a.y), Math.round(a.width), Math.round(a.height))
+};
+mxVertexHandler.prototype.createSelectionShape = function(a) {
+  a = new mxRectangleShape(a, null, this.getSelectionColor());
+  a.strokewidth = this.getSelectionStrokeWidth();
+  a.isDashed = this.isSelectionDashed();
+  return a
+};
+mxVertexHandler.prototype.getSelectionColor = function() {
+  return mxConstants.VERTEX_SELECTION_COLOR
+};
+mxVertexHandler.prototype.getSelectionStrokeWidth = function() {
+  return mxConstants.VERTEX_SELECTION_STROKEWIDTH
+};
+mxVertexHandler.prototype.isSelectionDashed = function() {
+  return mxConstants.VERTEX_SELECTION_DASHED
+};
+mxVertexHandler.prototype.createSizer = function(a, b, c, d) {
+  c = c || mxConstants.HANDLE_SIZE;
+  c = new mxRectangle(0, 0, c, c);
+  d = this.createSizerShape(c, b, d);
+  d.isHtmlAllowed() && null != this.state.text && this.state.text.node.parentNode == this.graph.container ? (d.bounds.height -= 1, d.bounds.width -= 1, d.dialect = mxConstants.DIALECT_STRICTHTML, d
+    .init(this.graph.container)) : (d.dialect = this.graph.dialect != mxConstants.DIALECT_SVG ? mxConstants.DIALECT_MIXEDHTML : mxConstants.DIALECT_SVG, d.init(this.graph.getView().getOverlayPane()));
+  mxEvent.redirectMouseEvents(d.node, this.graph, this.state);
+  this.graph.isEnabled() && (d.node.style.cursor = a);
+  this.isSizerVisible(b) || (d.node.style.visibility = "hidden");
+  return d
+};
+mxVertexHandler.prototype.isSizerVisible = function(a) {
+  return !0
+};
+mxVertexHandler.prototype.createSizerShape = function(a, b, c) {
+  return null != this.handleImage ? (a.width = this.handleImage.width, a.height = this.handleImage.height, new mxImageShape(a, this.handleImage.src)) : b == mxEvent.ROTATION_HANDLE ? new mxEllipse(
+    a, c || mxConstants.HANDLE_FILLCOLOR, mxConstants.HANDLE_STROKECOLOR) : new mxRectangleShape(a, c || mxConstants.HANDLE_FILLCOLOR, mxConstants.HANDLE_STROKECOLOR)
+};
+mxVertexHandler.prototype.moveSizerTo = function(a, b, c) {
+  null != a && (a.bounds.x = Math.round(b - a.bounds.width / 2), a.bounds.y = Math.round(c - a.bounds.height / 2), a.redraw())
+};
+mxVertexHandler.prototype.getHandleForEvent = function(a) {
+  if (a.isSource(this.rotationShape)) return mxEvent.ROTATION_HANDLE;
+  if (a.isSource(this.labelShape)) return mxEvent.LABEL_HANDLE;
+  if (null != this.sizers)
+    for (var b = this.tolerance, b = this.allowHandleBoundsCheck && (mxClient.IS_IE || 0 < b) ? new mxRectangle(a.getGraphX() - b, a.getGraphY() - b, 2 * b, 2 * b) : null, c = 0; c < this.sizers.length; c++)
+      if (a.isSource(this.sizers[c]) || null != b && mxUtils.intersects(this.sizers[c].bounds, b)) return c;
+  return null
+};
+mxVertexHandler.prototype.mouseDown = function(a, b) {
+  if (!b.isConsumed() && this.graph.isEnabled() && !this.graph.isForceMarqueeEvent(b.getEvent()) && (0 < this.tolerance || b.getState() == this.state)) {
+    var c = this.getHandleForEvent(b);
+    null != c && (this.start(b.getX(), b.getY(), c), b.consume())
+  }
+};
+mxVertexHandler.prototype.start = function(a, b, c) {
+  a = mxUtils.convertPoint(this.graph.container, a, b);
+  this.startX = a.x;
+  this.startY = a.y;
+  this.index = c;
+  this.selectionBorder.node.style.display = c == mxEvent.ROTATION_HANDLE ? "inline" : "none";
+  this.preview = this.createSelectionShape(this.bounds);
+  !(mxClient.IS_SVG && 0 != Number(this.state.style[mxConstants.STYLE_ROTATION] || "0")) && null != this.state.text && this.state.text.node.parentNode == this.graph.container ? (this.preview.dialect =
+      mxConstants.DIALECT_STRICTHTML, this.preview.init(this.graph.container)) :
+    (this.preview.dialect = this.graph.dialect != mxConstants.DIALECT_SVG ? mxConstants.DIALECT_VML : mxConstants.DIALECT_SVG, this.preview.init(this.graph.view.getOverlayPane()))
+};
+mxVertexHandler.prototype.mouseMove = function(a, b) {
+  if (!b.isConsumed() && null != this.index) {
+    var c = new mxPoint(b.getGraphX(), b.getGraphY()),
+      d = this.graph.isGridEnabledEvent(b.getEvent()),
+      e = this.graph.getView().scale;
+    if (this.index == mxEvent.LABEL_HANDLE) d && (c.x = this.graph.snap(c.x / e) * e, c.y = this.graph.snap(c.y / e) * e), this.moveSizerTo(this.sizers[this.sizers.length - 1], c.x, c.y);
+    else if (this.index == mxEvent.ROTATION_HANDLE) {
+      var f = this.state.x + this.state.width / 2 - c.x,
+        g = this.state.y + this.state.height / 2 - c.y;
+      this.currentAlpha =
+        0 != f ? 180 * Math.atan(g / f) / Math.PI + 90 : 0 > g ? 180 : 0;
+      0 < f && (this.currentAlpha -= 180);
+      this.rotationRaster && (f = c.x - this.state.getCenterX(), g = c.y - this.state.getCenterY(), f = Math.abs(Math.sqrt(f * f + g * g) - this.state.height / 2 - 20), f = Math.max(1, 5 * Math.min(
+        3, Math.max(0, Math.round(80 / Math.abs(f))))), this.currentAlpha = Math.round(this.currentAlpha / f) * f);
+      this.selectionBorder.rotation = this.currentAlpha;
+      this.selectionBorder.redraw()
+    } else {
+      var h = mxUtils.toRadians(this.state.style[mxConstants.STYLE_ROTATION] || "0"),
+        k = Math.cos(-h),
+        l = Math.sin(-h),
+        m = new mxPoint(this.state.getCenterX(), this.state.getCenterY()),
+        f = c.x - this.startX,
+        g = c.y - this.startY,
+        c = this.graph.view.translate,
+        n = l * f + k * g,
+        f = k * f - l * g;
+      this.bounds = this.union(this.selectionBounds, f, n, this.index, d, e, c);
+      k = Math.cos(h);
+      l = Math.sin(h);
+      g = new mxPoint(this.bounds.getCenterX(), this.bounds.getCenterY());
+      f = g.x - m.x;
+      g = g.y - m.y;
+      m = l * f + k * g - g;
+      this.bounds.x += k * f - l * g - f;
+      this.bounds.y += m;
+      this.drawPreview()
+    }
+    b.consume()
+  } else null != this.getHandleForEvent(b) && b.consume(!1)
+};
+mxVertexHandler.prototype.mouseUp = function(a, b) {
+  if (!b.isConsumed() && null != this.index && null != this.state) {
+    var c = new mxPoint(b.getGraphX(), b.getGraphY());
+    this.graph.getModel().beginUpdate();
+    try {
+      if (this.index == mxEvent.ROTATION_HANDLE) null != this.currentAlpha && this.rotateCell(this.state.cell, this.currentAlpha - (this.state.style[mxConstants.STYLE_ROTATION] || 0));
+      else {
+        var d = this.graph.isGridEnabledEvent(b.getEvent()),
+          e = mxUtils.toRadians(this.state.style[mxConstants.STYLE_ROTATION] || "0"),
+          f = Math.cos(-e),
+          g = Math.sin(-e),
+          h = c.x - this.startX,
+          k = c.y - this.startY,
+          c = g * h + f * k,
+          h = f * h - g * k,
+          k = c,
+          l = this.graph.view.scale;
+        this.resizeCell(this.state.cell, h / l, k / l, this.index, d)
+      }
+    } finally {
+      this.graph.getModel().endUpdate()
+    }
+    this.reset();
+    b.consume()
+  }
+};
+mxVertexHandler.prototype.rotateCell = function(a, b) {
+  var c = this.graph.getModel();
+  if (c.isVertex(a)) {
+    var d = a == this.state ? this.state : this.graph.view.getState(a);
+    null != d && this.graph.setCellStyles(mxConstants.STYLE_ROTATION, (d.style[mxConstants.STYLE_ROTATION] || 0) + b, [a]);
+    if (this.state.cell != a && (d = this.graph.getCellGeometry(a), null != d && !d.relative))
+      if (0 != b) {
+        var e = this.graph.getModel().getParent(a),
+          f = this.graph.getCellGeometry(e);
+        if (!d.relative && null != f) {
+          var g = mxUtils.toRadians(b),
+            e = Math.cos(g),
+            g = Math.sin(g),
+            h = new mxPoint(d.getCenterX(), d.getCenterY()),
+            f = new mxPoint(f.width / 2, f.height / 2),
+            e = mxUtils.getRotatedPoint(h, e, g, f),
+            d = d.clone();
+          d.x = e.x - d.width / 2;
+          d.y = e.y - d.height / 2;
+          c.setGeometry(a, d)
+        }
+      } else d = d.clone(), d.x += dx, d.y += dy, c.setGeometry(a, d);
+    d = c.getChildCount(a);
+    for (e = 0; e < d; e++) this.rotateCell(c.getChildAt(a, e), b)
+  }
+};
+mxVertexHandler.prototype.reset = function() {
+  this.index = this.currentAlpha = null;
+  null != this.preview && (this.preview.destroy(), this.preview = null);
+  null != this.selectionBorder && (this.selectionBorder.node.style.display = "inline", this.selectionBounds = this.getSelectionBounds(this.state), this.bounds = new mxRectangle(this.selectionBounds
+    .x, this.selectionBounds.y, this.selectionBounds.width, this.selectionBounds.height), this.drawPreview())
+};
+mxVertexHandler.prototype.resizeCell = function(a, b, c, d, e) {
+  var f = this.graph.model.getGeometry(a);
+  if (null != f)
+    if (d == mxEvent.LABEL_HANDLE) d = this.graph.view.scale, b = (this.labelShape.bounds.getCenterX() - this.startX) / d, c = (this.labelShape.bounds.getCenterY() - this.startY) / d, f = f.clone(),
+      null == f.offset ? f.offset = new mxPoint(b, c) : (f.offset.x += b, f.offset.y += c), this.graph.model.setGeometry(a, f);
+    else {
+      d = this.union(f, b, c, d, e, 1, new mxPoint(0, 0));
+      var g = mxUtils.toRadians(this.state.style[mxConstants.STYLE_ROTATION] || "0");
+      if (0 != g) {
+        b = d.getCenterX() - f.getCenterX();
+        c = d.getCenterY() - f.getCenterY();
+        e = Math.cos(g);
+        var h = Math.sin(g),
+          g = e * b - h * c - b;
+        b = h * b + e * c - c;
+        c = d.x - f.x;
+        var k = d.y - f.y,
+          l = e * c - h * k;
+        e = h * c + e * k;
+        d.x += g;
+        d.y += b;
+        if (!this.graph.isCellCollapsed(a) && (0 != g || 0 != b)) c = f.x - d.x + l, k = f.y - d.y + e, this.moveChildren(a, c, k)
+      }
+      this.graph.resizeCell(a, d)
+    }
+};
+mxVertexHandler.prototype.moveChildren = function(a, b, c) {
+  for (var d = this.graph.getModel(), e = d.getChildCount(a), f = 0; f < e; f++) {
+    var g = d.getChildAt(a, f);
+    if (d.isVertex(g)) {
+      var h = this.graph.getCellGeometry(g);
+      null != h && !h.relative && (h = h.clone(), h.x += b, h.y += c, d.setGeometry(g, h))
+    }
+  }
+};
+mxVertexHandler.prototype.union = function(a, b, c, d, e, f, g) {
+  if (this.singleSizer) {
+    g = a.x + a.width + b;
+    var h = a.y + a.height + c;
+    e && (g = this.graph.snap(g / f) * f, h = this.graph.snap(h / f) * f);
+    f = new mxRectangle(a.x, a.y, 0, 0);
+    f.add(new mxRectangle(g, h, 0, 0));
+    return f
+  }
+  var h = a.x - g.x * f,
+    k = h + a.width,
+    l = a.y - g.y * f;
+  a = l + a.height;
+  4 < d ? (a += c, e && (a = this.graph.snap(a / f) * f)) : 3 > d && (l += c, e && (l = this.graph.snap(l / f) * f));
+  if (0 == d || 3 == d || 5 == d) h += b, e && (h = this.graph.snap(h / f) * f);
+  else if (2 == d || 4 == d || 7 == d) k += b, e && (k = this.graph.snap(k / f) * f);
+  e = k - h;
+  a -=
+    l;
+  0 > e && (h += e, e = Math.abs(e));
+  0 > a && (l += a, a = Math.abs(a));
+  return new mxRectangle(h + g.x * f, l + g.y * f, e, a)
+};
+mxVertexHandler.prototype.redraw = function() {
+  this.selectionBounds = this.getSelectionBounds(this.state);
+  this.bounds = new mxRectangle(this.state.x, this.state.y, this.state.width, this.state.height);
+  var a = this.state;
+  if (null != this.sizers) {
+    var b = a.x + a.width,
+      c = a.y + a.height;
+    if (this.singleSizer) this.moveSizerTo(this.sizers[0], b, c);
+    else {
+      var d = a.x + a.width / 2,
+        e = a.y + a.height / 2;
+      if (1 < this.sizers.length) {
+        var f = mxUtils.toRadians(a.style[mxConstants.STYLE_ROTATION] || "0"),
+          g = Math.cos(f),
+          f = Math.sin(f),
+          h = new mxPoint(a.getCenterX(),
+            a.getCenterY()),
+          k = mxUtils.getRotatedPoint(new mxPoint(a.x, a.y), g, f, h);
+        this.moveSizerTo(this.sizers[0], k.x, k.y);
+        k.x = d;
+        k.y = a.y;
+        k = mxUtils.getRotatedPoint(k, g, f, h);
+        this.moveSizerTo(this.sizers[1], k.x, k.y);
+        k.x = b;
+        k.y = a.y;
+        k = mxUtils.getRotatedPoint(k, g, f, h);
+        this.moveSizerTo(this.sizers[2], k.x, k.y);
+        k.x = a.x;
+        k.y = e;
+        k = mxUtils.getRotatedPoint(k, g, f, h);
+        this.moveSizerTo(this.sizers[3], k.x, k.y);
+        k.x = b;
+        k.y = e;
+        k = mxUtils.getRotatedPoint(k, g, f, h);
+        this.moveSizerTo(this.sizers[4], k.x, k.y);
+        k.x = a.x;
+        k.y = c;
+        k = mxUtils.getRotatedPoint(k,
+          g, f, h);
+        this.moveSizerTo(this.sizers[5], k.x, k.y);
+        k.x = d;
+        k.y = c;
+        k = mxUtils.getRotatedPoint(k, g, f, h);
+        this.moveSizerTo(this.sizers[6], k.x, k.y);
+        k.x = b;
+        k.y = c;
+        k = mxUtils.getRotatedPoint(k, g, f, h);
+        this.moveSizerTo(this.sizers[7], k.x, k.y);
+        this.moveSizerTo(this.sizers[8], d + a.absoluteOffset.x, e + a.absoluteOffset.y)
+      } else 2 <= this.state.width && 2 <= this.state.height ? this.moveSizerTo(this.sizers[0], d + a.absoluteOffset.x, e + a.absoluteOffset.y) : this.moveSizerTo(this.sizers[0], a.x, a.y)
+    }
+  }
+  null != this.rotationShape && (f = mxUtils.toRadians(this.state.style[mxConstants.STYLE_ROTATION] ||
+      "0"), g = Math.cos(f), f = Math.sin(f), h = new mxPoint(this.state.getCenterX(), this.state.getCenterY()), k = mxUtils.getRotatedPoint(new mxPoint(a.x + a.width / 2, a.y - 16), g, f, h),
+    this.moveSizerTo(this.rotationShape, k.x, k.y));
+  this.selectionBorder.rotation = Number(this.state.style[mxConstants.STYLE_ROTATION] || "0");
+  this.drawPreview()
+};
+mxVertexHandler.prototype.drawPreview = function() {
+  null != this.preview && (this.preview.bounds = this.bounds, this.preview.node.parentNode == this.graph.container && (this.preview.bounds.width = Math.max(0, this.preview.bounds.width - 1), this.preview
+    .bounds.height = Math.max(0, this.preview.bounds.height - 1)), this.preview.rotation = Number(this.state.style[mxConstants.STYLE_ROTATION] || "0"), this.preview.redraw());
+  this.selectionBorder.bounds = this.bounds;
+  this.selectionBorder.redraw()
+};
+mxVertexHandler.prototype.destroy = function() {
+  null != this.preview && (this.preview.destroy(), this.preview = null);
+  this.selectionBorder.destroy();
+  this.labelShape = this.selectionBorder = null;
+  if (null != this.sizers)
+    for (var a = 0; a < this.sizers.length; a++) this.sizers[a].destroy(), this.sizers[a] = null
+};
+
+function mxEdgeHandler(a) {
+  null != a && (this.state = a, this.init())
+}
+mxEdgeHandler.prototype.graph = null;
+mxEdgeHandler.prototype.state = null;
+mxEdgeHandler.prototype.marker = null;
+mxEdgeHandler.prototype.constraintHandler = null;
+mxEdgeHandler.prototype.error = null;
+mxEdgeHandler.prototype.shape = null;
+mxEdgeHandler.prototype.bends = null;
+mxEdgeHandler.prototype.labelShape = null;
+mxEdgeHandler.prototype.cloneEnabled = !0;
+mxEdgeHandler.prototype.addEnabled = !1;
+mxEdgeHandler.prototype.removeEnabled = !1;
+mxEdgeHandler.prototype.preferHtml = !1;
+mxEdgeHandler.prototype.allowHandleBoundsCheck = !0;
+mxEdgeHandler.prototype.snapToTerminals = !1;
+mxEdgeHandler.prototype.handleImage = null;
+mxEdgeHandler.prototype.tolerance = 0;
+mxEdgeHandler.prototype.init = function() {
+  this.graph = this.state.view.graph;
+  this.marker = this.createMarker();
+  this.constraintHandler = new mxConstraintHandler(this.graph);
+  this.points = [];
+  this.abspoints = this.getSelectionPoints(this.state);
+  this.shape = this.createSelectionShape(this.abspoints);
+  this.shape.dialect = this.graph.dialect != mxConstants.DIALECT_SVG ? mxConstants.DIALECT_MIXEDHTML : mxConstants.DIALECT_SVG;
+  this.shape.init(this.graph.getView().getOverlayPane());
+  this.shape.svgStrokeTolerance = 0;
+  this.shape.node.style.cursor =
+    mxConstants.CURSOR_MOVABLE_EDGE;
+  mxEvent.addListener(this.shape.node, "dblclick", mxUtils.bind(this, function(a) {
+    this.graph.dblClick(a, this.state.cell)
+  }));
+  mxEvent.addGestureListeners(this.shape.node, mxUtils.bind(this, function(a) {
+    this.addEnabled && this.isAddPointEvent(a) ? this.addPoint(this.state, a) : this.graph.fireMouseEvent(mxEvent.MOUSE_DOWN, new mxMouseEvent(a, this.state))
+  }), mxUtils.bind(this, function(a) {
+    var c = this.state.cell;
+    if (null != this.index) {
+      var d = mxUtils.convertPoint(this.graph.container, mxEvent.getClientX(a),
+          mxEvent.getClientY(a)),
+        c = this.graph.getCellAt(d.x, d.y);
+      this.graph.isSwimlane(c) && this.graph.hitsSwimlaneContent(c, d.x, d.y) && (c = null)
+    }
+    this.graph.fireMouseEvent(mxEvent.MOUSE_MOVE, new mxMouseEvent(a, this.graph.getView().getState(c)))
+  }), mxUtils.bind(this, function(a) {
+    this.graph.fireMouseEvent(mxEvent.MOUSE_UP, new mxMouseEvent(a, this.state))
+  }));
+  this.preferHtml = null != this.state.text && this.state.text.node.parentNode == this.graph.container;
+  if (!this.preferHtml) {
+    var a = this.state.getVisibleTerminalState(!0);
+    null != a && (this.preferHtml = null != a.text && a.text.node.parentNode == this.graph.container);
+    this.preferHtml || (a = this.state.getVisibleTerminalState(!1), null != a && (this.preferHtml = null != a.text && a.text.node.parentNode == this.graph.container))
+  }
+  if (this.graph.getSelectionCount() < mxGraphHandler.prototype.maxCells || 0 >= mxGraphHandler.prototype.maxCells) this.bends = this.createBends();
+  this.label = new mxPoint(this.state.absoluteOffset.x, this.state.absoluteOffset.y);
+  this.labelShape = new mxRectangleShape(new mxRectangle,
+    mxConstants.LABEL_HANDLE_FILLCOLOR, mxConstants.HANDLE_STROKECOLOR);
+  this.labelShape.pointerEvents = !1;
+  this.initBend(this.labelShape);
+  this.labelShape.node.style.cursor = mxConstants.CURSOR_LABEL_HANDLE;
+  mxEvent.redirectMouseEvents(this.labelShape.node, this.graph, this.state);
+  this.redraw()
+};
+mxEdgeHandler.prototype.isAddPointEvent = function(a) {
+  return mxEvent.isShiftDown(a)
+};
+mxEdgeHandler.prototype.isRemovePointEvent = function(a) {
+  return mxEvent.isShiftDown(a)
+};
+mxEdgeHandler.prototype.getSelectionPoints = function(a) {
+  return a.absolutePoints
+};
+mxEdgeHandler.prototype.createSelectionShape = function(a) {
+  a = new mxPolyline(a, this.getSelectionColor());
+  a.strokewidth = this.getSelectionStrokeWidth();
+  a.isDashed = this.isSelectionDashed();
+  return a
+};
+mxEdgeHandler.prototype.getSelectionColor = function() {
+  return mxConstants.EDGE_SELECTION_COLOR
+};
+mxEdgeHandler.prototype.getSelectionStrokeWidth = function() {
+  return mxConstants.EDGE_SELECTION_STROKEWIDTH
+};
+mxEdgeHandler.prototype.isSelectionDashed = function() {
+  return mxConstants.EDGE_SELECTION_DASHED
+};
+mxEdgeHandler.prototype.isConnectableCell = function(a) {
+  return !0
+};
+mxEdgeHandler.prototype.createMarker = function() {
+  var a = new mxCellMarker(this.graph),
+    b = this;
+  a.getCell = function(a) {
+    var d = mxCellMarker.prototype.getCell.apply(this, arguments);
+    if (!b.isConnectableCell(d)) return null;
+    var e = b.graph.getModel();
+    if (d == b.state.cell || null != d && !b.graph.connectableEdges && e.isEdge(d)) d = null;
+    return d
+  };
+  a.isValidState = function(a) {
+    var d = b.graph.getModel(),
+      d = b.graph.view.getTerminalPort(a, b.graph.view.getState(d.getTerminal(b.state.cell, !b.isSource)), !b.isSource),
+      d = null != d ? d.cell : null;
+    b.error = b.validateConnection(b.isSource ? a.cell : d, b.isSource ? d : a.cell);
+    return null == b.error
+  };
+  return a
+};
+mxEdgeHandler.prototype.validateConnection = function(a, b) {
+  return this.graph.getEdgeValidationError(this.state.cell, a, b)
+};
+mxEdgeHandler.prototype.createBends = function() {
+  for (var a = this.state.cell, b = [], c = 0; c < this.abspoints.length; c++)
+    if (this.isHandleVisible(c)) {
+      var d = c == this.abspoints.length - 1;
+      if ((d = 0 == c || d) || this.graph.isCellBendable(a)) {
+        var e = this.createHandleShape(c);
+        this.initBend(e);
+        mxClient.IS_TOUCH && e.node.setAttribute("pointer-events", "none");
+        if (this.isHandleEnabled(c))
+          if (mxClient.IS_TOUCH) {
+            var f = mxUtils.bind(this, function(a) {
+              a = mxUtils.convertPoint(this.graph.container, mxEvent.getClientX(a), mxEvent.getClientY(a));
+              return this.graph.view.getState(this.graph.getCellAt(a.x, a.y))
+            });
+            mxEvent.redirectMouseEvents(e.node, this.graph, f)
+          } else e.node.style.cursor = mxConstants.CURSOR_BEND_HANDLE, mxEvent.redirectMouseEvents(e.node, this.graph, this.state);
+        b.push(e);
+        d || (this.points.push(new mxPoint(0, 0)), e.node.style.visibility = "hidden")
+      }
+    }
+  return b
+};
+mxEdgeHandler.prototype.isHandleEnabled = function(a) {
+  return !0
+};
+mxEdgeHandler.prototype.isHandleVisible = function(a) {
+  return !0
+};
+mxEdgeHandler.prototype.createHandleShape = function(a) {
+  if (null != this.handleImage) return new mxImageShape(new mxRectangle(0, 0, this.handleImage.width, this.handleImage.height), this.handleImage.src);
+  a = mxConstants.HANDLE_SIZE;
+  this.preferHtml && (a -= 1);
+  return new mxRectangleShape(new mxRectangle(0, 0, a, a), mxConstants.HANDLE_FILLCOLOR, mxConstants.HANDLE_STROKECOLOR)
+};
+mxEdgeHandler.prototype.initBend = function(a) {
+  this.preferHtml ? (a.dialect = mxConstants.DIALECT_STRICTHTML, a.init(this.graph.container)) : (a.dialect = this.graph.dialect != mxConstants.DIALECT_SVG ? mxConstants.DIALECT_MIXEDHTML :
+    mxConstants.DIALECT_SVG, a.init(this.graph.getView().getOverlayPane()))
+};
+mxEdgeHandler.prototype.getHandleForEvent = function(a) {
+  if (null != this.bends)
+    for (var b = this.tolerance, b = this.allowHandleBoundsCheck && (mxClient.IS_IE || 0 < b) ? new mxRectangle(a.getGraphX() - b, a.getGraphY() - b, 2 * b, 2 * b) : null, c = 0; c < this.bends.length; c++)
+      if ((a.isSource(this.bends[c]) || null != b && mxUtils.intersects(this.bends[c].bounds, b)) && "hidden" != this.bends[c].node.style.visibility) return c;
+  if (a.isSource(this.labelShape) && "hidden" != this.labelShape.node.style.visibility || a.isSource(this.state.text))
+    if (!mxClient.IS_SF &&
+      !mxClient.IS_GC || "SELECT" != a.getSource().nodeName) return mxEvent.LABEL_HANDLE;
+  return null
+};
+mxEdgeHandler.prototype.mouseDown = function(a, b) {
+  var c = null,
+    c = this.getHandleForEvent(b);
+  null != c && (!b.isConsumed() && this.graph.isEnabled() && !this.graph.isForceMarqueeEvent(b.getEvent())) && (this.removeEnabled && this.isRemovePointEvent(b.getEvent()) ? this.removePoint(this.state,
+    c) : (c != mxEvent.LABEL_HANDLE || this.graph.isLabelMovable(b.getCell())) && this.start(b.getX(), b.getY(), c), b.consume())
+};
+mxEdgeHandler.prototype.start = function(a, b, c) {
+  this.startX = a;
+  this.startY = b;
+  this.isSource = null == this.bends ? !1 : 0 == c;
+  this.isTarget = null == this.bends ? !1 : c == this.bends.length - 1;
+  this.isLabel = c == mxEvent.LABEL_HANDLE;
+  if (this.isSource || this.isTarget) {
+    if (a = this.state.cell, b = this.graph.model.getTerminal(a, this.isSource), null == b && this.graph.isTerminalPointMovable(a, this.isSource) || null != b && this.graph.isCellDisconnectable(a,
+        b, this.isSource)) this.index = c
+  } else this.index = c
+};
+mxEdgeHandler.prototype.clonePreviewState = function(a, b) {
+  return this.state.clone()
+};
+mxEdgeHandler.prototype.getSnapToTerminalTolerance = function() {
+  return this.graph.gridSize * this.graph.view.scale / 2
+};
+mxEdgeHandler.prototype.getPointForEvent = function(a) {
+  var b = new mxPoint(a.getGraphX(), a.getGraphY()),
+    c = this.getSnapToTerminalTolerance(),
+    d = this.graph.getView(),
+    e = !1,
+    f = !1;
+  if (this.snapToTerminals && 0 < c) {
+    var g = function(a) {
+        if (null != a) {
+          var d = a.x;
+          Math.abs(b.x - d) < c && (b.x = d, e = !0);
+          a = a.y;
+          Math.abs(b.y - a) < c && (b.y = a, f = !0)
+        }
+      },
+      h = function(a) {
+        null != a && g.call(this, new mxPoint(d.getRoutingCenterX(a), d.getRoutingCenterY(a)))
+      };
+    h.call(this, this.state.getVisibleTerminalState(!0));
+    h.call(this, this.state.getVisibleTerminalState(!1));
+    if (null != this.abspoints)
+      for (h = 0; h < this.abspoints; h++) h != this.index && g.call(this, this.abspoints[h])
+  }
+  this.graph.isGridEnabledEvent(a.getEvent()) && (a = d.scale, h = d.translate, e || (b.x = (this.graph.snap(b.x / a - h.x) + h.x) * a), f || (b.y = (this.graph.snap(b.y / a - h.y) + h.y) * a));
+  return b
+};
+mxEdgeHandler.prototype.getPreviewTerminalState = function(a) {
+  this.constraintHandler.update(a, this.isSource);
+  this.marker.process(a);
+  a = this.marker.getValidState();
+  var b = null;
+  null != this.constraintHandler.currentFocus && null != this.constraintHandler.currentConstraint && this.marker.reset();
+  null != a ? b = a : null != this.constraintHandler.currentConstraint && null != this.constraintHandler.currentFocus && (b = this.constraintHandler.currentFocus);
+  return b
+};
+mxEdgeHandler.prototype.getPreviewPoints = function(a) {
+  var b = this.graph.getCellGeometry(this.state.cell),
+    b = null != b.points ? b.points.slice() : null;
+  !this.isSource && !this.isTarget ? (this.convertPoint(a, !1), null == b ? b = [a] : b[this.index - 1] = a) : this.graph.resetEdgesOnConnect && (b = null);
+  return b
+};
+mxEdgeHandler.prototype.updatePreviewState = function(a, b, c) {
+  var d = this.isSource ? c : this.state.getVisibleTerminalState(!0),
+    e = this.isTarget ? c : this.state.getVisibleTerminalState(!1),
+    f = this.graph.getConnectionConstraint(a, d, !0),
+    g = this.graph.getConnectionConstraint(a, e, !1),
+    h = this.constraintHandler.currentConstraint;
+  null == h && (h = new mxConnectionConstraint);
+  this.isSource ? f = h : this.isTarget && (g = h);
+  (!this.isSource || null != d) && a.view.updateFixedTerminalPoint(a, d, !0, f);
+  (!this.isTarget || null != e) && a.view.updateFixedTerminalPoint(a,
+    e, !1, g);
+  if ((this.isSource || this.isTarget) && null == c) a.setAbsoluteTerminalPoint(b, this.isSource), null == this.marker.getMarkedState() && (this.error = this.graph.allowDanglingEdges ? null : "");
+  a.view.updatePoints(a, this.points, d, e);
+  a.view.updateFloatingTerminalPoints(a, d, e)
+};
+mxEdgeHandler.prototype.mouseMove = function(a, b) {
+  if (null != this.index && null != this.marker) {
+    var c = this.getPointForEvent(b);
+    if (this.isLabel) this.label.x = c.x, this.label.y = c.y;
+    else {
+      this.points = this.getPreviewPoints(c);
+      var d = this.isSource || this.isTarget ? this.getPreviewTerminalState(b) : null,
+        e = this.clonePreviewState(c, null != d ? d.cell : null);
+      this.updatePreviewState(e, c, d);
+      this.setPreviewColor(null == this.error ? this.marker.validColor : this.marker.invalidColor);
+      this.abspoints = e.absolutePoints;
+      this.active = !0
+    }
+    this.drawPreview();
+    mxEvent.consume(b.getEvent());
+    b.consume()
+  } else mxClient.IS_IE && null != this.getHandleForEvent(b) && b.consume(!1)
+};
+mxEdgeHandler.prototype.mouseUp = function(a, b) {
+  if (null != this.index && null != this.marker) {
+    var c = this.state.cell;
+    if (b.getX() != this.startX || b.getY() != this.startY)
+      if (null != this.error) 0 < this.error.length && this.graph.validationAlert(this.error);
+      else if (this.isLabel) this.moveLabel(this.state, this.label.x, this.label.y);
+    else if (this.isSource || this.isTarget) {
+      var d = null;
+      null != this.constraintHandler.currentConstraint && null != this.constraintHandler.currentFocus && (d = this.constraintHandler.currentFocus.cell);
+      null ==
+        d && this.marker.hasValidState() && (d = this.marker.validState.cell);
+      if (null != d) c = this.connect(c, d, this.isSource, this.graph.isCloneEvent(b.getEvent()) && this.cloneEnabled && this.graph.isCellsCloneable(), b);
+      else if (this.graph.isAllowDanglingEdges()) {
+        d = this.abspoints[this.isSource ? 0 : this.abspoints.length - 1];
+        d.x = d.x / this.graph.view.scale - this.graph.view.translate.x;
+        d.y = d.y / this.graph.view.scale - this.graph.view.translate.y;
+        var e = this.graph.getView().getState(this.graph.getModel().getParent(c));
+        null != e && (d.x -=
+          e.origin.x, d.y -= e.origin.y);
+        d.x -= this.graph.panDx / this.graph.view.scale;
+        d.y -= this.graph.panDy / this.graph.view.scale;
+        this.changeTerminalPoint(c, d, this.isSource)
+      }
+    } else this.active ? this.changePoints(c, this.points) : (this.graph.getView().invalidate(this.state.cell), this.graph.getView().revalidate(this.state.cell));
+    null != this.marker && (this.reset(), c != this.state.cell && this.graph.setSelectionCell(c));
+    b.consume()
+  }
+};
+mxEdgeHandler.prototype.reset = function() {
+  this.points = this.label = this.index = this.error = null;
+  this.isTarget = this.isSource = this.isLabel = this.active = !1;
+  this.marker.reset();
+  this.constraintHandler.reset();
+  this.setPreviewColor(mxConstants.EDGE_SELECTION_COLOR);
+  this.redraw()
+};
+mxEdgeHandler.prototype.setPreviewColor = function(a) {
+  null != this.shape && (this.shape.stroke = a)
+};
+mxEdgeHandler.prototype.convertPoint = function(a, b) {
+  var c = this.graph.getView().getScale(),
+    d = this.graph.getView().getTranslate();
+  b && (a.x = this.graph.snap(a.x), a.y = this.graph.snap(a.y));
+  a.x = Math.round(a.x / c - d.x);
+  a.y = Math.round(a.y / c - d.y);
+  c = this.graph.getView().getState(this.graph.getModel().getParent(this.state.cell));
+  null != c && (a.x -= c.origin.x, a.y -= c.origin.y);
+  return a
+};
+mxEdgeHandler.prototype.moveLabel = function(a, b, c) {
+  var d = this.graph.getModel(),
+    e = d.getGeometry(a.cell);
+  if (null != e) {
+    var e = e.clone(),
+      f = this.graph.getView().getRelativePoint(a, b, c);
+    e.x = f.x;
+    e.y = f.y;
+    var g = this.graph.getView().scale;
+    e.offset = new mxPoint(0, 0);
+    f = this.graph.view.getPoint(a, e);
+    e.offset = new mxPoint((b - f.x) / g, (c - f.y) / g);
+    d.setGeometry(a.cell, e)
+  }
+};
+mxEdgeHandler.prototype.connect = function(a, b, c, d, e) {
+  e = this.graph.getModel();
+  var f = e.getParent(a);
+  e.beginUpdate();
+  try {
+    if (d) {
+      var g = a.clone();
+      e.add(f, g, e.getChildCount(f));
+      var h = e.getTerminal(a, !c);
+      this.graph.connectCell(g, h, !c);
+      a = g
+    }
+    var k = this.constraintHandler.currentConstraint;
+    null == k && (k = new mxConnectionConstraint);
+    this.graph.connectCell(a, b, c, k)
+  } finally {
+    e.endUpdate()
+  }
+  return a
+};
+mxEdgeHandler.prototype.changeTerminalPoint = function(a, b, c) {
+  var d = this.graph.getModel(),
+    e = d.getGeometry(a);
+  if (null != e) {
+    d.beginUpdate();
+    try {
+      e = e.clone(), e.setTerminalPoint(b, c), d.setGeometry(a, e), this.graph.connectCell(a, null, c, new mxConnectionConstraint)
+    } finally {
+      d.endUpdate()
+    }
+  }
+};
+mxEdgeHandler.prototype.changePoints = function(a, b) {
+  var c = this.graph.getModel(),
+    d = c.getGeometry(a);
+  null != d && (d = d.clone(), d.points = b, c.setGeometry(a, d))
+};
+mxEdgeHandler.prototype.addPoint = function(a, b) {
+  var c = mxUtils.convertPoint(this.graph.container, mxEvent.getClientX(b), mxEvent.getClientY(b)),
+    d = this.graph.isGridEnabledEvent(b);
+  this.convertPoint(c, d);
+  this.addPointAt(a, c.x, c.y);
+  mxEvent.consume(b)
+};
+mxEdgeHandler.prototype.addPointAt = function(a, b, c) {
+  var d = this.graph.getCellGeometry(a.cell);
+  b = new mxPoint(b, c);
+  if (null != d) {
+    d = d.clone();
+    c = this.graph.view.translate;
+    var e = this.graph.view.scale;
+    c = mxUtils.findNearestSegment(a, (b.x + c.x) * e, (b.y + c.y) * e);
+    null == d.points ? d.points = [b] : d.points.splice(c, 0, b);
+    this.graph.getModel().setGeometry(a.cell, d);
+    this.destroy();
+    this.init()
+  }
+};
+mxEdgeHandler.prototype.removePoint = function(a, b) {
+  if (0 < b && b < this.abspoints.length - 1) {
+    var c = this.graph.getCellGeometry(this.state.cell);
+    null != c && null != c.points && (c = c.clone(), c.points.splice(b - 1, 1), this.graph.getModel().setGeometry(a.cell, c), this.destroy(), this.init())
+  }
+};
+mxEdgeHandler.prototype.getHandleFillColor = function(a) {
+  a = 0 == a;
+  var b = this.state.cell,
+    c = this.graph.getModel().getTerminal(b, a),
+    d = mxConstants.HANDLE_FILLCOLOR;
+  null != c && !this.graph.isCellDisconnectable(b, c, a) || null == c && !this.graph.isTerminalPointMovable(b, a) ? d = mxConstants.LOCKED_HANDLE_FILLCOLOR : null != c && this.graph.isCellDisconnectable(
+    b, c, a) && (d = mxConstants.CONNECT_HANDLE_FILLCOLOR);
+  return d
+};
+mxEdgeHandler.prototype.redraw = function() {
+  this.abspoints = this.state.absolutePoints.slice();
+  var a = this.state.cell,
+    b = mxConstants.LABEL_HANDLE_SIZE;
+  this.label = new mxPoint(this.state.absoluteOffset.x, this.state.absoluteOffset.y);
+  this.labelShape.bounds = new mxRectangle(Math.round(this.label.x - b / 2), Math.round(this.label.y - b / 2), b, b);
+  this.labelShape.redraw();
+  b = this.graph.getLabel(a);
+  null != b && 0 < b.length && this.graph.isLabelMovable(a) ? this.labelShape.node.style.visibility = "visible" : this.labelShape.node.style.visibility =
+    "hidden";
+  if (null != this.bends && 0 < this.bends.length) {
+    var c = this.abspoints.length - 1,
+      a = this.abspoints[0],
+      d = this.abspoints[0].y,
+      b = this.bends[0].bounds;
+    this.bends[0].bounds = new mxRectangle(Math.round(this.abspoints[0].x - b.width / 2), Math.round(d - b.height / 2), b.width, b.height);
+    this.bends[0].fill = this.getHandleFillColor(0);
+    this.bends[0].redraw();
+    var d = this.abspoints[c],
+      e = this.abspoints[c].x,
+      c = this.abspoints[c].y,
+      f = this.bends.length - 1,
+      b = this.bends[f].bounds;
+    this.bends[f].bounds = new mxRectangle(Math.round(e - b.width /
+      2), Math.round(c - b.height / 2), b.width, b.height);
+    this.bends[f].fill = this.getHandleFillColor(f);
+    this.bends[f].redraw();
+    this.redrawInnerBends(a, d)
+  }
+  this.drawPreview()
+};
+mxEdgeHandler.prototype.redrawInnerBends = function(a, b) {
+  var c = this.graph.getModel().getGeometry(this.state.cell).points;
+  if (null != c) {
+    null == this.points && (this.points = []);
+    for (var d = 1; d < this.bends.length - 1; d++)
+      if (null != this.bends[d])
+        if (null != this.abspoints[d]) {
+          var e = this.abspoints[d].x,
+            f = this.abspoints[d].y,
+            g = this.bends[d].bounds;
+          this.bends[d].node.style.visibility = "visible";
+          this.bends[d].bounds = new mxRectangle(Math.round(e - g.width / 2), Math.round(f - g.height / 2), g.width, g.height);
+          this.bends[d].redraw();
+          this.points[d -
+            1] = c[d - 1]
+        } else this.bends[d].destroy(), this.bends[d] = null
+  }
+};
+mxEdgeHandler.prototype.drawPreview = function() {
+  if (this.isLabel) {
+    var a = mxConstants.LABEL_HANDLE_SIZE,
+      a = new mxRectangle(Math.round(this.label.x - a / 2), Math.round(this.label.y - a / 2), a, a);
+    this.labelShape.bounds = a;
+    this.labelShape.redraw()
+  } else this.shape.points = this.abspoints, this.shape.redraw()
+};
+mxEdgeHandler.prototype.destroy = function() {
+  null != this.marker && (this.marker.destroy(), this.marker = null);
+  null != this.shape && (this.shape.destroy(), this.shape = null);
+  null != this.labelShape && (this.labelShape.destroy(), this.labelShape = null);
+  null != this.constraintHandler && (this.constraintHandler.destroy(), this.constraintHandler = null);
+  if (null != this.bends)
+    for (var a = 0; a < this.bends.length; a++) null != this.bends[a] && (this.bends[a].destroy(), this.bends[a] = null)
+};
+
+function mxElbowEdgeHandler(a) {
+  mxEdgeHandler.call(this, a)
+}
+mxUtils.extend(mxElbowEdgeHandler, mxEdgeHandler);
+mxElbowEdgeHandler.prototype = new mxEdgeHandler;
+mxElbowEdgeHandler.prototype.constructor = mxElbowEdgeHandler;
+mxElbowEdgeHandler.prototype.flipEnabled = !0;
+mxElbowEdgeHandler.prototype.doubleClickOrientationResource = "none" != mxClient.language ? "doubleClickOrientation" : "";
+mxElbowEdgeHandler.prototype.createBends = function() {
+  var a = [],
+    b = this.createHandleShape(0);
+  this.initBend(b);
+  b.node.style.cursor = mxConstants.CURSOR_BEND_HANDLE;
+  mxEvent.redirectMouseEvents(b.node, this.graph, this.state);
+  a.push(b);
+  mxClient.IS_TOUCH && b.node.setAttribute("pointer-events", "none");
+  a.push(this.createVirtualBend());
+  this.points.push(new mxPoint(0, 0));
+  b = this.createHandleShape(2);
+  this.initBend(b);
+  b.node.style.cursor = mxConstants.CURSOR_BEND_HANDLE;
+  mxEvent.redirectMouseEvents(b.node, this.graph, this.state);
+  a.push(b);
+  mxClient.IS_TOUCH && b.node.setAttribute("pointer-events", "none");
+  return a
+};
+mxElbowEdgeHandler.prototype.createVirtualBend = function() {
+  var a = this.createHandleShape();
+  this.initBend(a);
+  var b = this.getCursorForBend();
+  a.node.style.cursor = b;
+  b = mxUtils.bind(this, function(a) {
+    !mxEvent.isConsumed(a) && this.flipEnabled && (this.graph.flipEdge(this.state.cell, a), mxEvent.consume(a))
+  });
+  mxEvent.redirectMouseEvents(a.node, this.graph, this.state, null, null, null, b);
+  this.graph.isCellBendable(this.state.cell) || (a.node.style.display = "none");
+  return a
+};
+mxElbowEdgeHandler.prototype.getCursorForBend = function() {
+  return this.state.style[mxConstants.STYLE_EDGE] == mxEdgeStyle.TopToBottom || this.state.style[mxConstants.STYLE_EDGE] == mxConstants.EDGESTYLE_TOPTOBOTTOM || (this.state.style[mxConstants.STYLE_EDGE] ==
+      mxEdgeStyle.ElbowConnector || this.state.style[mxConstants.STYLE_EDGE] == mxConstants.EDGESTYLE_ELBOW) && this.state.style[mxConstants.STYLE_ELBOW] == mxConstants.ELBOW_VERTICAL ?
+    "row-resize" : "col-resize"
+};
+mxElbowEdgeHandler.prototype.getTooltipForNode = function(a) {
+  var b = null;
+  if (null != this.bends && null != this.bends[1] && (a == this.bends[1].node || a.parentNode == this.bends[1].node)) b = this.doubleClickOrientationResource, b = mxResources.get(b) || b;
+  return b
+};
+mxElbowEdgeHandler.prototype.convertPoint = function(a, b) {
+  var c = this.graph.getView().getScale(),
+    d = this.graph.getView().getTranslate(),
+    e = this.state.origin;
+  b && (a.x = this.graph.snap(a.x), a.y = this.graph.snap(a.y));
+  a.x = Math.round(a.x / c - d.x - e.x);
+  a.y = Math.round(a.y / c - d.y - e.y)
+};
+mxElbowEdgeHandler.prototype.redrawInnerBends = function(a, b) {
+  var c = this.graph.getModel().getGeometry(this.state.cell).points,
+    c = null != c ? c[0] : null,
+    c = null == c ? new mxPoint(a.x + (b.x - a.x) / 2, a.y + (b.y - a.y) / 2) : new mxPoint(this.graph.getView().scale * (c.x + this.graph.getView().translate.x + this.state.origin.x), this.graph.getView()
+      .scale * (c.y + this.graph.getView().translate.y + this.state.origin.y)),
+    d = this.bends[1].bounds,
+    e = d.width,
+    d = d.height;
+  null == this.handleImage && (d = e = mxConstants.HANDLE_SIZE);
+  var f = new mxRectangle(Math.round(c.x -
+    e / 2), Math.round(c.y - d / 2), e, d);
+  null == this.handleImage && ("hidden" != this.labelShape.node.style.visibility && mxUtils.intersects(f, this.labelShape.bounds)) && (e += 3, d += 3, f = new mxRectangle(Math.round(c.x - e / 2),
+    Math.round(c.y - d / 2), e, d));
+  this.bends[1].bounds = f;
+  this.bends[1].redraw()
+};
+
+function mxEdgeSegmentHandler(a) {
+  mxEdgeHandler.call(this, a)
+}
+mxUtils.extend(mxEdgeSegmentHandler, mxEdgeHandler);
+mxEdgeSegmentHandler.prototype = new mxElbowEdgeHandler;
+mxEdgeSegmentHandler.prototype.constructor = mxEdgeSegmentHandler;
+mxEdgeSegmentHandler.prototype.getPreviewPoints = function(a) {
+  if (this.isSource || this.isTarget) return mxElbowEdgeHandler.prototype.getPreviewPoints.apply(this, arguments);
+  this.convertPoint(a, !1);
+  var b = this.state.absolutePoints,
+    c = b[0].clone();
+  this.convertPoint(c, !1);
+  for (var d = [], e = 1; e < b.length; e++) {
+    var f = b[e].clone();
+    this.convertPoint(f, !1);
+    e == this.index && (c.x == f.x ? (c.x = a.x, f.x = a.x) : (c.y = a.y, f.y = a.y));
+    e < b.length - 1 && d.push(f);
+    c = f
+  }
+  if (1 == d.length) {
+    if (c = this.state.view, e = this.state.getVisibleTerminalState(!0),
+      f = this.state.getVisibleTerminalState(!1), null != f & null != e) {
+      var g = this.state.origin.x,
+        h = this.state.origin.y;
+      mxUtils.contains(f, d[0].x + g, d[0].y + h) ? b[1].y == b[2].y ? d[0].y = c.getRoutingCenterY(e) - h : d[0].x = c.getRoutingCenterX(e) - g : mxUtils.contains(e, d[0].x + g, d[0].y + h) && (b[
+        1].y == b[0].y ? d[0].y = c.getRoutingCenterY(f) - h : d[0].x = c.getRoutingCenterX(f) - g)
+    }
+  } else 0 == d.length && (d = [a]);
+  return d
+};
+mxEdgeSegmentHandler.prototype.createBends = function() {
+  var a = [],
+    b = this.createHandleShape(0);
+  this.initBend(b);
+  b.node.style.cursor = mxConstants.CURSOR_BEND_HANDLE;
+  mxEvent.redirectMouseEvents(b.node, this.graph, this.state);
+  a.push(b);
+  mxClient.IS_TOUCH && b.node.setAttribute("pointer-events", "none");
+  var c = this.state.absolutePoints;
+  if (this.graph.isCellBendable(this.state.cell)) {
+    null == this.points && (this.points = []);
+    for (var d = 0; d < c.length - 1; d++) b = this.createVirtualBend(), a.push(b), b.node.style.cursor = 0 == c[d].x -
+      c[d + 1].x ? "col-resize" : "row-resize", this.points.push(new mxPoint(0, 0)), mxClient.IS_TOUCH && b.node.setAttribute("pointer-events", "none")
+  }
+  b = this.createHandleShape(c.length);
+  this.initBend(b);
+  b.node.style.cursor = mxConstants.CURSOR_BEND_HANDLE;
+  mxEvent.redirectMouseEvents(b.node, this.graph, this.state);
+  a.push(b);
+  mxClient.IS_TOUCH && b.node.setAttribute("pointer-events", "none");
+  return a
+};
+mxEdgeSegmentHandler.prototype.redraw = function() {
+  this.refresh();
+  mxEdgeHandler.prototype.redraw.apply(this, arguments)
+};
+mxEdgeSegmentHandler.prototype.refresh = function() {
+  if (null != this.bends) {
+    for (var a = 0; a < this.bends.length; a++) null != this.bends[a] && (this.bends[a].destroy(), this.bends[a] = null);
+    this.bends = this.createBends()
+  }
+};
+mxEdgeSegmentHandler.prototype.redrawInnerBends = function(a, b) {
+  if (this.graph.isCellBendable(this.state.cell)) {
+    var c = mxConstants.HANDLE_SIZE,
+      d = this.state.absolutePoints;
+    if (null != d && 1 < d.length)
+      for (var e = 0; e < this.state.absolutePoints.length - 1; e++)
+        if (null != this.bends[e + 1]) {
+          a = d[e];
+          b = d[e + 1];
+          var f = new mxPoint(a.x + (b.x - a.x) / 2, a.y + (b.y - a.y) / 2);
+          this.bends[e + 1].bounds = new mxRectangle(Math.round(f.x - c / 2), Math.round(f.y - c / 2), c, c);
+          this.bends[e + 1].redraw()
+        }
+  }
+};
+mxEdgeSegmentHandler.prototype.changePoints = function(a, b) {
+  b = [];
+  var c = this.abspoints;
+  if (1 < c.length)
+    for (var d = c[0], e = c[1], f = 2; f < c.length; f++) {
+      var g = c[f];
+      if ((Math.round(d.x) != Math.round(e.x) || Math.round(e.x) != Math.round(g.x)) && (Math.round(d.y) != Math.round(e.y) || Math.round(e.y) != Math.round(g.y))) d = e, e = e.clone(), this.convertPoint(
+        e, !1), b.push(e);
+      e = g
+    }
+  mxElbowEdgeHandler.prototype.changePoints.apply(this, arguments)
+};
+
+function mxKeyHandler(a, b) {
+  null != a && (this.graph = a, this.target = b || document.documentElement, this.normalKeys = [], this.shiftKeys = [], this.controlKeys = [], this.controlShiftKeys = [], mxEvent.addListener(this.target,
+    "keydown", mxUtils.bind(this, function(a) {
+      this.keyDown(a)
+    })), mxClient.IS_IE && mxEvent.addListener(window, "unload", mxUtils.bind(this, function() {
+    this.destroy()
+  })))
+}
+mxKeyHandler.prototype.graph = null;
+mxKeyHandler.prototype.target = null;
+mxKeyHandler.prototype.normalKeys = null;
+mxKeyHandler.prototype.shiftKeys = null;
+mxKeyHandler.prototype.controlKeys = null;
+mxKeyHandler.prototype.controlShiftKeys = null;
+mxKeyHandler.prototype.enabled = !0;
+mxKeyHandler.prototype.isEnabled = function() {
+  return this.enabled
+};
+mxKeyHandler.prototype.setEnabled = function(a) {
+  this.enabled = a
+};
+mxKeyHandler.prototype.bindKey = function(a, b) {
+  this.normalKeys[a] = b
+};
+mxKeyHandler.prototype.bindShiftKey = function(a, b) {
+  this.shiftKeys[a] = b
+};
+mxKeyHandler.prototype.bindControlKey = function(a, b) {
+  this.controlKeys[a] = b
+};
+mxKeyHandler.prototype.bindControlShiftKey = function(a, b) {
+  this.controlShiftKeys[a] = b
+};
+mxKeyHandler.prototype.isControlDown = function(a) {
+  return mxEvent.isControlDown(a)
+};
+mxKeyHandler.prototype.getFunction = function(a) {
+  return null != a ? this.isControlDown(a) ? mxEvent.isShiftDown(a) ? this.controlShiftKeys[a.keyCode] : this.controlKeys[a.keyCode] : mxEvent.isShiftDown(a) ? this.shiftKeys[a.keyCode] : this.normalKeys[
+    a.keyCode] : null
+};
+mxKeyHandler.prototype.isGraphEvent = function(a) {
+  a = mxEvent.getSource(a);
+  if (a == this.target || a.parentNode == this.target || null != this.graph.cellEditor && a == this.graph.cellEditor.textarea) return !0;
+  for (; null != a;) {
+    if (a == this.graph.container) return !0;
+    a = a.parentNode
+  }
+  return !1
+};
+mxKeyHandler.prototype.keyDown = function(a) {
+  if (this.graph.isEnabled() && !mxEvent.isConsumed(a) && this.isGraphEvent(a) && this.isEnabled())
+    if (27 == a.keyCode) this.escape(a);
+    else if (!this.graph.isEditing()) {
+    var b = this.getFunction(a);
+    null != b && (b(a), mxEvent.consume(a))
+  }
+};
+mxKeyHandler.prototype.escape = function(a) {
+  this.graph.isEscapeEnabled() && this.graph.escape(a)
+};
+mxKeyHandler.prototype.destroy = function() {
+  this.target = null
+};
+
+function mxTooltipHandler(a, b) {
+  null != a && (this.graph = a, this.delay = b || 500, this.graph.addMouseListener(this))
+}
+mxTooltipHandler.prototype.zIndex = 10005;
+mxTooltipHandler.prototype.graph = null;
+mxTooltipHandler.prototype.delay = null;
+mxTooltipHandler.prototype.hideOnHover = !1;
+mxTooltipHandler.prototype.enabled = !0;
+mxTooltipHandler.prototype.isEnabled = function() {
+  return this.enabled
+};
+mxTooltipHandler.prototype.setEnabled = function(a) {
+  this.enabled = a
+};
+mxTooltipHandler.prototype.isHideOnHover = function() {
+  return this.hideOnHover
+};
+mxTooltipHandler.prototype.setHideOnHover = function(a) {
+  this.hideOnHover = a
+};
+mxTooltipHandler.prototype.init = function() {
+  null != document.body && (this.div = document.createElement("div"), this.div.className = "mxTooltip", this.div.style.visibility = "hidden", this.div.style.zIndex = this.zIndex, document.body.appendChild(
+    this.div), mxEvent.addListener(this.div, "mousedown", mxUtils.bind(this, function(a) {
+    this.hideTooltip()
+  })))
+};
+mxTooltipHandler.prototype.mouseDown = function(a, b) {
+  this.reset(b, !1);
+  this.hideTooltip()
+};
+mxTooltipHandler.prototype.mouseMove = function(a, b) {
+  if (b.getX() != this.lastX || b.getY() != this.lastY) this.reset(b, !0), (this.isHideOnHover() || b.getState() != this.state || b.getSource() != this.node && (!this.stateSource || null != b.getState() &&
+    this.stateSource == (b.isSource(b.getState().shape) || !b.isSource(b.getState().text)))) && this.hideTooltip();
+  this.lastX = b.getX();
+  this.lastY = b.getY()
+};
+mxTooltipHandler.prototype.mouseUp = function(a, b) {
+  this.reset(b, !0);
+  this.hideTooltip()
+};
+mxTooltipHandler.prototype.resetTimer = function() {
+  null != this.thread && (window.clearTimeout(this.thread), this.thread = null)
+};
+mxTooltipHandler.prototype.reset = function(a, b) {
+  this.resetTimer();
+  if (b && this.isEnabled() && null != a.getState() && (null == this.div || "hidden" == this.div.style.visibility)) {
+    var c = a.getState(),
+      d = a.getSource(),
+      e = a.getX(),
+      f = a.getY(),
+      g = a.isSource(c.shape) || a.isSource(c.text);
+    this.thread = window.setTimeout(mxUtils.bind(this, function() {
+      if (!this.graph.isEditing() && !this.graph.panningHandler.isMenuShowing()) {
+        var a = this.graph.getTooltip(c, d, e, f);
+        this.show(a, e, f);
+        this.state = c;
+        this.node = d;
+        this.stateSource = g
+      }
+    }), this.delay)
+  }
+};
+mxTooltipHandler.prototype.hide = function() {
+  this.resetTimer();
+  this.hideTooltip()
+};
+mxTooltipHandler.prototype.hideTooltip = function() {
+  null != this.div && (this.div.style.visibility = "hidden")
+};
+mxTooltipHandler.prototype.show = function(a, b, c) {
+  if (null != a && 0 < a.length) {
+    null == this.div && this.init();
+    var d = mxUtils.getScrollOrigin();
+    this.div.style.left = b + d.x + "px";
+    this.div.style.top = c + mxConstants.TOOLTIP_VERTICAL_OFFSET + d.y + "px";
+    mxUtils.isNode(a) ? (this.div.innerHTML = "", this.div.appendChild(a)) : this.div.innerHTML = a.replace(/\n/g, "\x3cbr\x3e");
+    this.div.style.visibility = "";
+    mxUtils.fit(this.div)
+  }
+};
+mxTooltipHandler.prototype.destroy = function() {
+  this.graph.removeMouseListener(this);
+  mxEvent.release(this.div);
+  null != this.div && null != this.div.parentNode && this.div.parentNode.removeChild(this.div);
+  this.div = null
+};
+
+function mxCellTracker(a, b, c) {
+  mxCellMarker.call(this, a, b);
+  this.graph.addMouseListener(this);
+  null != c && (this.getCell = c);
+  mxClient.IS_IE && mxEvent.addListener(window, "unload", mxUtils.bind(this, function() {
+    this.destroy()
+  }))
+}
+mxUtils.extend(mxCellTracker, mxCellMarker);
+mxCellTracker.prototype.mouseDown = function(a, b) {};
+mxCellTracker.prototype.mouseMove = function(a, b) {
+  this.isEnabled() && this.process(b)
+};
+mxCellTracker.prototype.mouseUp = function(a, b) {
+  this.reset()
+};
+mxCellTracker.prototype.destroy = function() {
+  this.destroyed || (this.destroyed = !0, this.graph.removeMouseListener(this), mxCellMarker.prototype.destroy.apply(this))
+};
+
+function mxCellHighlight(a, b, c, d) {
+  null != a && (this.graph = a, this.highlightColor = null != b ? b : mxConstants.DEFAULT_VALID_COLOR, this.strokeWidth = null != c ? c : mxConstants.HIGHLIGHT_STROKEWIDTH, this.dashed = null != d ?
+    d : !1, this.repaintHandler = mxUtils.bind(this, function() {
+      this.repaint()
+    }), this.graph.getView().addListener(mxEvent.SCALE, this.repaintHandler), this.graph.getView().addListener(mxEvent.TRANSLATE, this.repaintHandler), this.graph.getView().addListener(mxEvent.SCALE_AND_TRANSLATE,
+      this.repaintHandler), this.graph.getModel().addListener(mxEvent.CHANGE,
+      this.repaintHandler), this.resetHandler = mxUtils.bind(this, function() {
+      this.hide()
+    }), this.graph.getView().addListener(mxEvent.DOWN, this.resetHandler), this.graph.getView().addListener(mxEvent.UP, this.resetHandler))
+}
+mxCellHighlight.prototype.keepOnTop = !1;
+mxCellHighlight.prototype.graph = !0;
+mxCellHighlight.prototype.state = null;
+mxCellHighlight.prototype.spacing = 2;
+mxCellHighlight.prototype.resetHandler = null;
+mxCellHighlight.prototype.setHighlightColor = function(a) {
+  this.highlightColor = a;
+  null != this.shape && (this.shape.stroke = a)
+};
+mxCellHighlight.prototype.drawHighlight = function() {
+  this.shape = this.createShape();
+  this.repaint();
+  !this.keepOnTop && this.shape.node.parentNode.firstChild != this.shape.node && this.shape.node.parentNode.insertBefore(this.shape.node, this.shape.node.parentNode.firstChild)
+};
+mxCellHighlight.prototype.createShape = function() {
+  var a = null,
+    a = this.graph.model.isEdge(this.state.cell) ? new mxPolyline(this.state.absolutePoints, this.highlightColor, this.strokeWidth) : new mxRectangleShape(new mxRectangle, null, this.highlightColor,
+      this.strokeWidth);
+  a.dialect = this.graph.dialect != mxConstants.DIALECT_SVG ? mxConstants.DIALECT_VML : mxConstants.DIALECT_SVG;
+  a.init(this.graph.getView().getOverlayPane());
+  mxEvent.redirectMouseEvents(a.node, this.graph, this.state);
+  a.svgStrokeTolerance = 0;
+  a.pointerEvents = !1;
+  a.isDashed = this.dashed;
+  return a
+};
+mxCellHighlight.prototype.repaint = function() {
+  if (null != this.state && null != this.shape) {
+    var a = 0;
+    this.graph.model.isEdge(this.state.cell) ? this.shape.points = this.state.absolutePoints : (this.shape.bounds = new mxRectangle(this.state.x - this.spacing, this.state.y - this.spacing, this.state
+      .width + 2 * this.spacing, this.state.height + 2 * this.spacing), a = Number(this.state.style[mxConstants.STYLE_ROTATION] || "0"));
+    null != this.state.shape && this.shape.setCursor(this.state.shape.getCursor());
+    0 != a && (this.shape.rotation = a);
+    this.shape.redraw()
+  }
+};
+mxCellHighlight.prototype.hide = function() {
+  this.highlight(null)
+};
+mxCellHighlight.prototype.highlight = function(a) {
+  this.state != a && (null != this.shape && (this.shape.destroy(), this.shape = null), this.state = a, null != this.state && this.drawHighlight())
+};
+mxCellHighlight.prototype.destroy = function() {
+  this.graph.getView().removeListener(this.repaintHandler);
+  this.graph.getModel().removeListener(this.repaintHandler);
+  this.graph.getView().removeListener(this.resetHandler);
+  this.graph.getModel().removeListener(this.resetHandler);
+  null != this.shape && (this.shape.destroy(), this.shape = null)
+};
+
+function mxDefaultKeyHandler(a) {
+  if (null != a) {
+    this.editor = a;
+    this.handler = new mxKeyHandler(a.graph);
+    var b = this.handler.escape;
+    this.handler.escape = function(c) {
+      b.apply(this, arguments);
+      a.hideProperties();
+      a.fireEvent(new mxEventObject(mxEvent.ESCAPE, "event", c))
+    }
+  }
+}
+mxDefaultKeyHandler.prototype.editor = null;
+mxDefaultKeyHandler.prototype.handler = null;
+mxDefaultKeyHandler.prototype.bindAction = function(a, b, c) {
+  var d = mxUtils.bind(this, function() {
+    this.editor.execute(b)
+  });
+  c ? this.handler.bindControlKey(a, d) : this.handler.bindKey(a, d)
+};
+mxDefaultKeyHandler.prototype.destroy = function() {
+  this.handler.destroy();
+  this.handler = null
+};
+
+function mxDefaultPopupMenu(a) {
+  this.config = a
+}
+mxDefaultPopupMenu.prototype.imageBasePath = null;
+mxDefaultPopupMenu.prototype.config = null;
+mxDefaultPopupMenu.prototype.createMenu = function(a, b, c, d) {
+  if (null != this.config) {
+    var e = this.createConditions(a, c, d);
+    this.addItems(a, b, c, d, e, this.config.firstChild, null)
+  }
+};
+mxDefaultPopupMenu.prototype.addItems = function(a, b, c, d, e, f, g) {
+  for (var h = !1; null != f;) {
+    if ("add" == f.nodeName) {
+      var k = f.getAttribute("if");
+      if (null == k || e[k]) {
+        var k = f.getAttribute("as"),
+          k = mxResources.get(k) || k,
+          l = mxUtils.eval(mxUtils.getTextContent(f)),
+          m = f.getAttribute("action"),
+          n = f.getAttribute("icon"),
+          p = f.getAttribute("iconCls");
+        h && (b.addSeparator(g), h = !1);
+        null != n && this.imageBasePath && (n = this.imageBasePath + n);
+        k = this.addAction(b, a, k, n, l, m, c, g, p);
+        this.addItems(a, b, c, d, e, f.firstChild, k)
+      }
+    } else "separator" ==
+      f.nodeName && (h = !0);
+    f = f.nextSibling
+  }
+};
+mxDefaultPopupMenu.prototype.addAction = function(a, b, c, d, e, f, g, h, k) {
+  return a.addItem(c, d, function(a) {
+    "function" == typeof e && e.call(b, b, g, a);
+    null != f && b.execute(f, g, a)
+  }, h, k)
+};
+mxDefaultPopupMenu.prototype.createConditions = function(a, b, c) {
+  var d = a.graph.getModel(),
+    e = d.getChildCount(b),
+    f = [];
+  f.nocell = null == b;
+  f.ncells = 1 < a.graph.getSelectionCount();
+  f.notRoot = d.getRoot() != d.getParent(a.graph.getDefaultParent());
+  f.cell = null != b;
+  d = null != b && 1 == a.graph.getSelectionCount();
+  f.nonEmpty = d && 0 < e;
+  f.expandable = d && a.graph.isCellFoldable(b, !1);
+  f.collapsable = d && a.graph.isCellFoldable(b, !0);
+  f.validRoot = d && a.graph.isValidRoot(b);
+  f.emptyValidRoot = f.validRoot && 0 == e;
+  f.swimlane = d && a.graph.isSwimlane(b);
+  e = this.config.getElementsByTagName("condition");
+  for (d = 0; d < e.length; d++) {
+    var g = mxUtils.eval(mxUtils.getTextContent(e[d])),
+      h = e[d].getAttribute("name");
+    null != h && "function" == typeof g && (f[h] = g(a, b, c))
+  }
+  return f
+};
+
+function mxDefaultToolbar(a, b) {
+  this.editor = b;
+  null != a && null != b && this.init(a)
+}
+mxDefaultToolbar.prototype.editor = null;
+mxDefaultToolbar.prototype.toolbar = null;
+mxDefaultToolbar.prototype.resetHandler = null;
+mxDefaultToolbar.prototype.spacing = 4;
+mxDefaultToolbar.prototype.connectOnDrop = !1;
+mxDefaultToolbar.prototype.init = function(a) {
+  null != a && (this.toolbar = new mxToolbar(a), this.toolbar.addListener(mxEvent.SELECT, mxUtils.bind(this, function(a, c) {
+    var d = c.getProperty("function");
+    this.editor.insertFunction = null != d ? mxUtils.bind(this, function() {
+      d.apply(this, arguments);
+      this.toolbar.resetMode()
+    }) : null
+  })), this.resetHandler = mxUtils.bind(this, function() {
+    null != this.toolbar && this.toolbar.resetMode(!0)
+  }), this.editor.graph.addListener(mxEvent.DOUBLE_CLICK, this.resetHandler), this.editor.addListener(mxEvent.ESCAPE,
+    this.resetHandler))
+};
+mxDefaultToolbar.prototype.addItem = function(a, b, c, d) {
+  var e = mxUtils.bind(this, function() {
+    null != c && 0 < c.length && this.editor.execute(c)
+  });
+  return this.toolbar.addItem(a, b, e, d)
+};
+mxDefaultToolbar.prototype.addSeparator = function(a) {
+  a = a || mxClient.imageBasePath + "/separator.gif";
+  this.toolbar.addSeparator(a)
+};
+mxDefaultToolbar.prototype.addCombo = function() {
+  return this.toolbar.addCombo()
+};
+mxDefaultToolbar.prototype.addActionCombo = function(a) {
+  return this.toolbar.addActionCombo(a)
+};
+mxDefaultToolbar.prototype.addActionOption = function(a, b, c) {
+  var d = mxUtils.bind(this, function() {
+    this.editor.execute(c)
+  });
+  this.addOption(a, b, d)
+};
+mxDefaultToolbar.prototype.addOption = function(a, b, c) {
+  return this.toolbar.addOption(a, b, c)
+};
+mxDefaultToolbar.prototype.addMode = function(a, b, c, d, e) {
+  var f = mxUtils.bind(this, function() {
+    this.editor.setMode(c);
+    null != e && e(this.editor)
+  });
+  return this.toolbar.addSwitchMode(a, b, f, d)
+};
+mxDefaultToolbar.prototype.addPrototype = function(a, b, c, d, e, f) {
+  var g = function() {
+      return "function" == typeof c ? c() : null != c ? c.clone() : null
+    },
+    h = mxUtils.bind(this, function(a, b) {
+      "function" == typeof e ? e(this.editor, g(), a, b) : this.drop(g(), a, b);
+      this.toolbar.resetMode();
+      mxEvent.consume(a)
+    });
+  a = this.toolbar.addMode(a, b, h, d, null, f);
+  this.installDropHandler(a, function(a, b, c) {
+    h(b, c)
+  });
+  return a
+};
+mxDefaultToolbar.prototype.drop = function(a, b, c) {
+  var d = this.editor.graph,
+    e = d.getModel();
+  if (null == c || e.isEdge(c) || !this.connectOnDrop || !d.isCellConnectable(c)) {
+    for (; null != c && !d.isValidDropTarget(c, [a], b);) c = e.getParent(c);
+    this.insert(a, b, c)
+  } else this.connect(a, b, c)
+};
+mxDefaultToolbar.prototype.insert = function(a, b, c) {
+  var d = this.editor.graph;
+  if (d.canImportCell(a)) {
+    var e = mxEvent.getClientX(b),
+      f = mxEvent.getClientY(b),
+      e = mxUtils.convertPoint(d.container, e, f);
+    return d.isSplitEnabled() && d.isSplitTarget(c, [a], b) ? d.splitEdge(c, [a], null, e.x, e.y) : this.editor.addVertex(c, a, e.x, e.y)
+  }
+  return null
+};
+mxDefaultToolbar.prototype.connect = function(a, b, c) {
+  b = this.editor.graph;
+  var d = b.getModel();
+  if (null != c && b.isCellConnectable(a) && b.isEdgeValid(null, c, a)) {
+    var e = null;
+    d.beginUpdate();
+    try {
+      var f = d.getGeometry(c),
+        g = d.getGeometry(a).clone();
+      g.x = f.x + (f.width - g.width) / 2;
+      g.y = f.y + (f.height - g.height) / 2;
+      var h = this.spacing * b.gridSize,
+        k = 20 * d.getDirectedEdgeCount(c, !0);
+      this.editor.horizontalFlow ? g.x += (g.width + f.width) / 2 + h + k : g.y += (g.height + f.height) / 2 + h + k;
+      a.setGeometry(g);
+      var l = d.getParent(c);
+      b.addCell(a, l);
+      b.constrainChild(a);
+      e = this.editor.createEdge(c, a);
+      if (null == d.getGeometry(e)) {
+        var m = new mxGeometry;
+        m.relative = !0;
+        d.setGeometry(e, m)
+      }
+      b.addEdge(e, l, c, a)
+    } finally {
+      d.endUpdate()
+    }
+    b.setSelectionCells([a, e]);
+    b.scrollCellToVisible(a)
+  }
+};
+mxDefaultToolbar.prototype.installDropHandler = function(a, b) {
+  var c = document.createElement("img");
+  c.setAttribute("src", a.getAttribute("src"));
+  var d = mxUtils.bind(this, function(e) {
+    c.style.width = 2 * a.offsetWidth + "px";
+    c.style.height = 2 * a.offsetHeight + "px";
+    mxUtils.makeDraggable(a, this.editor.graph, b, c);
+    mxEvent.removeListener(c, "load", d)
+  });
+  mxClient.IS_IE ? d() : mxEvent.addListener(c, "load", d)
+};
+mxDefaultToolbar.prototype.destroy = function() {
+  null != this.resetHandler && (this.editor.graph.removeListener("dblclick", this.resetHandler), this.editor.removeListener("escape", this.resetHandler), this.resetHandler = null);
+  null != this.toolbar && (this.toolbar.destroy(), this.toolbar = null)
+};
+
+function mxEditor(a) {
+  this.actions = [];
+  this.addActions();
+  if (null != document.body) {
+    this.cycleAttributeValues = [];
+    this.popupHandler = new mxDefaultPopupMenu;
+    this.undoManager = new mxUndoManager;
+    this.graph = this.createGraph();
+    this.toolbar = this.createToolbar();
+    this.keyHandler = new mxDefaultKeyHandler(this);
+    this.configure(a);
+    this.graph.swimlaneIndicatorColorAttribute = this.cycleAttributeName;
+    !mxClient.IS_LOCAL && null != this.urlInit && (this.session = this.createSession());
+    if (null != this.onInit) this.onInit();
+    mxClient.IS_IE &&
+      mxEvent.addListener(window, "unload", mxUtils.bind(this, function() {
+        this.destroy()
+      }))
+  }
+}
+mxLoadResources && mxResources.add(mxClient.basePath + "/resources/editor");
+mxEditor.prototype = new mxEventSource;
+mxEditor.prototype.constructor = mxEditor;
+mxEditor.prototype.askZoomResource = "none" != mxClient.language ? "askZoom" : "";
+mxEditor.prototype.lastSavedResource = "none" != mxClient.language ? "lastSaved" : "";
+mxEditor.prototype.currentFileResource = "none" != mxClient.language ? "currentFile" : "";
+mxEditor.prototype.propertiesResource = "none" != mxClient.language ? "properties" : "";
+mxEditor.prototype.tasksResource = "none" != mxClient.language ? "tasks" : "";
+mxEditor.prototype.helpResource = "none" != mxClient.language ? "help" : "";
+mxEditor.prototype.outlineResource = "none" != mxClient.language ? "outline" : "";
+mxEditor.prototype.outline = null;
+mxEditor.prototype.graph = null;
+mxEditor.prototype.graphRenderHint = null;
+mxEditor.prototype.toolbar = null;
+mxEditor.prototype.session = null;
+mxEditor.prototype.status = null;
+mxEditor.prototype.popupHandler = null;
+mxEditor.prototype.undoManager = null;
+mxEditor.prototype.keyHandler = null;
+mxEditor.prototype.actions = null;
+mxEditor.prototype.dblClickAction = "edit";
+mxEditor.prototype.swimlaneRequired = !1;
+mxEditor.prototype.disableContextMenu = !0;
+mxEditor.prototype.insertFunction = null;
+mxEditor.prototype.forcedInserting = !1;
+mxEditor.prototype.templates = null;
+mxEditor.prototype.defaultEdge = null;
+mxEditor.prototype.defaultEdgeStyle = null;
+mxEditor.prototype.defaultGroup = null;
+mxEditor.prototype.groupBorderSize = null;
+mxEditor.prototype.filename = null;
+mxEditor.prototype.linefeed = "\x26#xa;";
+mxEditor.prototype.postParameterName = "xml";
+mxEditor.prototype.escapePostData = !0;
+mxEditor.prototype.urlPost = null;
+mxEditor.prototype.urlImage = null;
+mxEditor.prototype.urlInit = null;
+mxEditor.prototype.urlNotify = null;
+mxEditor.prototype.urlPoll = null;
+mxEditor.prototype.horizontalFlow = !1;
+mxEditor.prototype.layoutDiagram = !1;
+mxEditor.prototype.swimlaneSpacing = 0;
+mxEditor.prototype.maintainSwimlanes = !1;
+mxEditor.prototype.layoutSwimlanes = !1;
+mxEditor.prototype.cycleAttributeValues = null;
+mxEditor.prototype.cycleAttributeIndex = 0;
+mxEditor.prototype.cycleAttributeName = "fillColor";
+mxEditor.prototype.tasks = null;
+mxEditor.prototype.tasksWindowImage = null;
+mxEditor.prototype.tasksTop = 20;
+mxEditor.prototype.help = null;
+mxEditor.prototype.helpWindowImage = null;
+mxEditor.prototype.urlHelp = null;
+mxEditor.prototype.helpWidth = 300;
+mxEditor.prototype.helpHeight = 260;
+mxEditor.prototype.propertiesWidth = 240;
+mxEditor.prototype.propertiesHeight = null;
+mxEditor.prototype.movePropertiesDialog = !1;
+mxEditor.prototype.validating = !1;
+mxEditor.prototype.modified = !1;
+mxEditor.prototype.isModified = function() {
+  return this.modified
+};
+mxEditor.prototype.setModified = function(a) {
+  this.modified = a
+};
+mxEditor.prototype.addActions = function() {
+  this.addAction("save", function(a) {
+    a.save()
+  });
+  this.addAction("print", function(a) {
+    (new mxPrintPreview(a.graph, 1)).open()
+  });
+  this.addAction("show", function(a) {
+    mxUtils.show(a.graph, null, 10, 10)
+  });
+  this.addAction("exportImage", function(a) {
+    var b = a.getUrlImage();
+    if (null == b || mxClient.IS_LOCAL) a.execute("show");
+    else {
+      var c = mxUtils.getViewXml(a.graph, 1),
+        c = mxUtils.getXml(c, "\n");
+      mxUtils.submit(b, a.postParameterName + "\x3d" + encodeURIComponent(c), document, "_blank")
+    }
+  });
+  this.addAction("refresh",
+    function(a) {
+      a.graph.refresh()
+    });
+  this.addAction("cut", function(a) {
+    a.graph.isEnabled() && mxClipboard.cut(a.graph)
+  });
+  this.addAction("copy", function(a) {
+    a.graph.isEnabled() && mxClipboard.copy(a.graph)
+  });
+  this.addAction("paste", function(a) {
+    a.graph.isEnabled() && mxClipboard.paste(a.graph)
+  });
+  this.addAction("delete", function(a) {
+    a.graph.isEnabled() && a.graph.removeCells()
+  });
+  this.addAction("group", function(a) {
+    a.graph.isEnabled() && a.graph.setSelectionCell(a.groupCells())
+  });
+  this.addAction("ungroup", function(a) {
+    a.graph.isEnabled() &&
+      a.graph.setSelectionCells(a.graph.ungroupCells())
+  });
+  this.addAction("removeFromParent", function(a) {
+    a.graph.isEnabled() && a.graph.removeCellsFromParent()
+  });
+  this.addAction("undo", function(a) {
+    a.graph.isEnabled() && a.undo()
+  });
+  this.addAction("redo", function(a) {
+    a.graph.isEnabled() && a.redo()
+  });
+  this.addAction("zoomIn", function(a) {
+    a.graph.zoomIn()
+  });
+  this.addAction("zoomOut", function(a) {
+    a.graph.zoomOut()
+  });
+  this.addAction("actualSize", function(a) {
+    a.graph.zoomActual()
+  });
+  this.addAction("fit", function(a) {
+    a.graph.fit()
+  });
+  this.addAction("showProperties", function(a, b) {
+    a.showProperties(b)
+  });
+  this.addAction("selectAll", function(a) {
+    a.graph.isEnabled() && a.graph.selectAll()
+  });
+  this.addAction("selectNone", function(a) {
+    a.graph.isEnabled() && a.graph.clearSelection()
+  });
+  this.addAction("selectVertices", function(a) {
+    a.graph.isEnabled() && a.graph.selectVertices()
+  });
+  this.addAction("selectEdges", function(a) {
+    a.graph.isEnabled() && a.graph.selectEdges()
+  });
+  this.addAction("edit", function(a, b) {
+    a.graph.isEnabled() && a.graph.isCellEditable(b) && a.graph.startEditingAtCell(b)
+  });
+  this.addAction("toBack", function(a, b) {
+    a.graph.isEnabled() && a.graph.orderCells(!0)
+  });
+  this.addAction("toFront", function(a, b) {
+    a.graph.isEnabled() && a.graph.orderCells(!1)
+  });
+  this.addAction("enterGroup", function(a, b) {
+    a.graph.enterGroup(b)
+  });
+  this.addAction("exitGroup", function(a) {
+    a.graph.exitGroup()
+  });
+  this.addAction("home", function(a) {
+    a.graph.home()
+  });
+  this.addAction("selectPrevious", function(a) {
+    a.graph.isEnabled() && a.graph.selectPreviousCell()
+  });
+  this.addAction("selectNext", function(a) {
+    a.graph.isEnabled() &&
+      a.graph.selectNextCell()
+  });
+  this.addAction("selectParent", function(a) {
+    a.graph.isEnabled() && a.graph.selectParentCell()
+  });
+  this.addAction("selectChild", function(a) {
+    a.graph.isEnabled() && a.graph.selectChildCell()
+  });
+  this.addAction("collapse", function(a) {
+    a.graph.isEnabled() && a.graph.foldCells(!0)
+  });
+  this.addAction("collapseAll", function(a) {
+    if (a.graph.isEnabled()) {
+      var b = a.graph.getChildVertices();
+      a.graph.foldCells(!0, !1, b)
+    }
+  });
+  this.addAction("expand", function(a) {
+    a.graph.isEnabled() && a.graph.foldCells(!1)
+  });
+  this.addAction("expandAll", function(a) {
+    if (a.graph.isEnabled()) {
+      var b = a.graph.getChildVertices();
+      a.graph.foldCells(!1, !1, b)
+    }
+  });
+  this.addAction("bold", function(a) {
+    a.graph.isEnabled() && a.graph.toggleCellStyleFlags(mxConstants.STYLE_FONTSTYLE, mxConstants.FONT_BOLD)
+  });
+  this.addAction("italic", function(a) {
+    a.graph.isEnabled() && a.graph.toggleCellStyleFlags(mxConstants.STYLE_FONTSTYLE, mxConstants.FONT_ITALIC)
+  });
+  this.addAction("underline", function(a) {
+    a.graph.isEnabled() && a.graph.toggleCellStyleFlags(mxConstants.STYLE_FONTSTYLE,
+      mxConstants.FONT_UNDERLINE)
+  });
+  this.addAction("shadow", function(a) {
+    a.graph.isEnabled() && a.graph.toggleCellStyleFlags(mxConstants.STYLE_FONTSTYLE, mxConstants.FONT_SHADOW)
+  });
+  this.addAction("alignCellsLeft", function(a) {
+    a.graph.isEnabled() && a.graph.alignCells(mxConstants.ALIGN_LEFT)
+  });
+  this.addAction("alignCellsCenter", function(a) {
+    a.graph.isEnabled() && a.graph.alignCells(mxConstants.ALIGN_CENTER)
+  });
+  this.addAction("alignCellsRight", function(a) {
+    a.graph.isEnabled() && a.graph.alignCells(mxConstants.ALIGN_RIGHT)
+  });
+  this.addAction("alignCellsTop", function(a) {
+    a.graph.isEnabled() && a.graph.alignCells(mxConstants.ALIGN_TOP)
+  });
+  this.addAction("alignCellsMiddle", function(a) {
+    a.graph.isEnabled() && a.graph.alignCells(mxConstants.ALIGN_MIDDLE)
+  });
+  this.addAction("alignCellsBottom", function(a) {
+    a.graph.isEnabled() && a.graph.alignCells(mxConstants.ALIGN_BOTTOM)
+  });
+  this.addAction("alignFontLeft", function(a) {
+    a.graph.setCellStyles(mxConstants.STYLE_ALIGN, mxConstants.ALIGN_LEFT)
+  });
+  this.addAction("alignFontCenter", function(a) {
+    a.graph.isEnabled() &&
+      a.graph.setCellStyles(mxConstants.STYLE_ALIGN, mxConstants.ALIGN_CENTER)
+  });
+  this.addAction("alignFontRight", function(a) {
+    a.graph.isEnabled() && a.graph.setCellStyles(mxConstants.STYLE_ALIGN, mxConstants.ALIGN_RIGHT)
+  });
+  this.addAction("alignFontTop", function(a) {
+    a.graph.isEnabled() && a.graph.setCellStyles(mxConstants.STYLE_VERTICAL_ALIGN, mxConstants.ALIGN_TOP)
+  });
+  this.addAction("alignFontMiddle", function(a) {
+    a.graph.isEnabled() && a.graph.setCellStyles(mxConstants.STYLE_VERTICAL_ALIGN, mxConstants.ALIGN_MIDDLE)
+  });
+  this.addAction("alignFontBottom", function(a) {
+    a.graph.isEnabled() && a.graph.setCellStyles(mxConstants.STYLE_VERTICAL_ALIGN, mxConstants.ALIGN_BOTTOM)
+  });
+  this.addAction("zoom", function(a) {
+    var b = 100 * a.graph.getView().scale,
+      b = parseFloat(mxUtils.prompt(mxResources.get(a.askZoomResource) || a.askZoomResource, b)) / 100;
+    isNaN(b) || a.graph.getView().setScale(b)
+  });
+  this.addAction("toggleTasks", function(a) {
+    null != a.tasks ? a.tasks.setVisible(!a.tasks.isVisible()) : a.showTasks()
+  });
+  this.addAction("toggleHelp", function(a) {
+    null !=
+      a.help ? a.help.setVisible(!a.help.isVisible()) : a.showHelp()
+  });
+  this.addAction("toggleOutline", function(a) {
+    null == a.outline ? a.showOutline() : a.outline.setVisible(!a.outline.isVisible())
+  });
+  this.addAction("toggleConsole", function(a) {
+    mxLog.setVisible(!mxLog.isVisible())
+  })
+};
+mxEditor.prototype.createSession = function() {
+  var a = mxUtils.bind(this, function(a) {
+    this.fireEvent(new mxEventObject(mxEvent.SESSION, "session", a))
+  });
+  return this.connect(this.urlInit, this.urlPoll, this.urlNotify, a)
+};
+mxEditor.prototype.configure = function(a) {
+  null != a && ((new mxCodec(a.ownerDocument)).decode(a, this), this.resetHistory())
+};
+mxEditor.prototype.resetFirstTime = function() {
+  document.cookie = "mxgraph\x3dseen; expires\x3dFri, 27 Jul 2001 02:47:11 UTC; path\x3d/"
+};
+mxEditor.prototype.resetHistory = function() {
+  this.lastSnapshot = (new Date).getTime();
+  this.undoManager.clear();
+  this.ignoredChanges = 0;
+  this.setModified(!1)
+};
+mxEditor.prototype.addAction = function(a, b) {
+  this.actions[a] = b
+};
+mxEditor.prototype.execute = function(a, b, c) {
+  var d = this.actions[a];
+  if (null != d) try {
+    var e = arguments;
+    e[0] = this;
+    d.apply(this, e)
+  } catch (f) {
+    throw mxUtils.error("Cannot execute " + a + ": " + f.message, 280, !0), f;
+  } else mxUtils.error("Cannot find action " + a, 280, !0)
+};
+mxEditor.prototype.addTemplate = function(a, b) {
+  this.templates[a] = b
+};
+mxEditor.prototype.getTemplate = function(a) {
+  return this.templates[a]
+};
+mxEditor.prototype.createGraph = function() {
+  var a = new mxGraph(null, null, this.graphRenderHint);
+  a.setTooltips(!0);
+  a.setPanning(!0);
+  this.installDblClickHandler(a);
+  this.installUndoHandler(a);
+  this.installDrillHandler(a);
+  this.installChangeHandler(a);
+  this.installInsertHandler(a);
+  a.panningHandler.factoryMethod = mxUtils.bind(this, function(a, c, d) {
+    return this.createPopupMenu(a, c, d)
+  });
+  a.connectionHandler.factoryMethod = mxUtils.bind(this, function(a, c) {
+    return this.createEdge(a, c)
+  });
+  this.createSwimlaneManager(a);
+  this.createLayoutManager(a);
+  return a
+};
+mxEditor.prototype.createSwimlaneManager = function(a) {
+  a = new mxSwimlaneManager(a, !1);
+  a.isHorizontal = mxUtils.bind(this, function() {
+    return this.horizontalFlow
+  });
+  a.isEnabled = mxUtils.bind(this, function() {
+    return this.maintainSwimlanes
+  });
+  return a
+};
+mxEditor.prototype.createLayoutManager = function(a) {
+  var b = new mxLayoutManager(a),
+    c = this;
+  b.getLayout = function(b) {
+    var e = null,
+      f = c.graph.getModel();
+    if (null != f.getParent(b))
+      if (c.layoutSwimlanes && a.isSwimlane(b)) null == c.swimlaneLayout && (c.swimlaneLayout = c.createSwimlaneLayout()), e = c.swimlaneLayout;
+      else if (c.layoutDiagram && (a.isValidRoot(b) || null == f.getParent(f.getParent(b)))) null == c.diagramLayout && (c.diagramLayout = c.createDiagramLayout()), e = c.diagramLayout;
+    return e
+  };
+  return b
+};
+mxEditor.prototype.setGraphContainer = function(a) {
+  null == this.graph.container && (this.graph.init(a), this.rubberband = new mxRubberband(this.graph), this.disableContextMenu && mxEvent.disableContextMenu(a), mxClient.IS_QUIRKS && new mxDivResizer(
+    a))
+};
+mxEditor.prototype.installDblClickHandler = function(a) {
+  a.addListener(mxEvent.DOUBLE_CLICK, mxUtils.bind(this, function(b, c) {
+    var d = c.getProperty("cell");
+    null != d && (a.isEnabled() && null != this.dblClickAction) && (this.execute(this.dblClickAction, d), c.consume())
+  }))
+};
+mxEditor.prototype.installUndoHandler = function(a) {
+  var b = mxUtils.bind(this, function(a, b) {
+    var e = b.getProperty("edit");
+    this.undoManager.undoableEditHappened(e)
+  });
+  a.getModel().addListener(mxEvent.UNDO, b);
+  a.getView().addListener(mxEvent.UNDO, b);
+  b = function(b, d) {
+    var e = d.getProperty("edit").changes;
+    a.setSelectionCells(a.getSelectionCellsForChanges(e))
+  };
+  this.undoManager.addListener(mxEvent.UNDO, b);
+  this.undoManager.addListener(mxEvent.REDO, b)
+};
+mxEditor.prototype.installDrillHandler = function(a) {
+  var b = mxUtils.bind(this, function(a) {
+    this.fireEvent(new mxEventObject(mxEvent.ROOT))
+  });
+  a.getView().addListener(mxEvent.DOWN, b);
+  a.getView().addListener(mxEvent.UP, b)
+};
+mxEditor.prototype.installChangeHandler = function(a) {
+  var b = mxUtils.bind(this, function(b, d) {
+    this.setModified(!0);
+    !0 == this.validating && a.validateGraph();
+    for (var e = d.getProperty("edit").changes, f = 0; f < e.length; f++) {
+      var g = e[f];
+      if (g instanceof mxRootChange || g instanceof mxValueChange && g.cell == this.graph.model.root || g instanceof mxCellAttributeChange && g.cell == this.graph.model.root) {
+        this.fireEvent(new mxEventObject(mxEvent.ROOT));
+        break
+      }
+    }
+  });
+  a.getModel().addListener(mxEvent.CHANGE, b)
+};
+mxEditor.prototype.installInsertHandler = function(a) {
+  var b = this;
+  a.addMouseListener({
+    mouseDown: function(a, d) {
+      if (null != b.insertFunction && !d.isPopupTrigger() && (b.forcedInserting || null == d.getState())) b.graph.clearSelection(), b.insertFunction(d.getEvent(), d.getCell()), this.isActive = !
+        0, d.consume()
+    },
+    mouseMove: function(a, b) {
+      this.isActive && b.consume()
+    },
+    mouseUp: function(a, b) {
+      this.isActive && (this.isActive = !1, b.consume())
+    }
+  })
+};
+mxEditor.prototype.createDiagramLayout = function() {
+  var a = this.graph.gridSize,
+    b = new mxStackLayout(this.graph, !this.horizontalFlow, this.swimlaneSpacing, 2 * a, 2 * a);
+  b.isVertexIgnored = function(a) {
+    return !b.graph.isSwimlane(a)
+  };
+  return b
+};
+mxEditor.prototype.createSwimlaneLayout = function() {
+  return new mxCompactTreeLayout(this.graph, this.horizontalFlow)
+};
+mxEditor.prototype.createToolbar = function() {
+  return new mxDefaultToolbar(null, this)
+};
+mxEditor.prototype.setToolbarContainer = function(a) {
+  this.toolbar.init(a);
+  mxClient.IS_QUIRKS && new mxDivResizer(a)
+};
+mxEditor.prototype.setStatusContainer = function(a) {
+  null == this.status && (this.status = a, this.addListener(mxEvent.SAVE, mxUtils.bind(this, function() {
+    var a = (new Date).toLocaleString();
+    this.setStatus((mxResources.get(this.lastSavedResource) || this.lastSavedResource) + ": " + a)
+  })), this.addListener(mxEvent.OPEN, mxUtils.bind(this, function() {
+    this.setStatus((mxResources.get(this.currentFileResource) || this.currentFileResource) + ": " + this.filename)
+  })), mxClient.IS_QUIRKS && new mxDivResizer(a))
+};
+mxEditor.prototype.setStatus = function(a) {
+  null != this.status && null != a && (this.status.innerHTML = a)
+};
+mxEditor.prototype.setTitleContainer = function(a) {
+  this.addListener(mxEvent.ROOT, mxUtils.bind(this, function(b) {
+    a.innerHTML = this.getTitle()
+  }));
+  mxClient.IS_QUIRKS && new mxDivResizer(a)
+};
+mxEditor.prototype.treeLayout = function(a, b) {
+  null != a && (new mxCompactTreeLayout(this.graph, b)).execute(a)
+};
+mxEditor.prototype.getTitle = function() {
+  for (var a = "", b = this.graph, c = b.getCurrentRoot(); null != c && null != b.getModel().getParent(b.getModel().getParent(c));) b.isValidRoot(c) && (a = " \x3e " + b.convertValueToString(c) + a),
+    c = b.getModel().getParent(c);
+  return this.getRootTitle() + a
+};
+mxEditor.prototype.getRootTitle = function() {
+  var a = this.graph.getModel().getRoot();
+  return this.graph.convertValueToString(a)
+};
+mxEditor.prototype.undo = function() {
+  this.undoManager.undo()
+};
+mxEditor.prototype.redo = function() {
+  this.undoManager.redo()
+};
+mxEditor.prototype.groupCells = function() {
+  var a = null != this.groupBorderSize ? this.groupBorderSize : this.graph.gridSize;
+  return this.graph.groupCells(this.createGroup(), a)
+};
+mxEditor.prototype.createGroup = function() {
+  return this.graph.getModel().cloneCell(this.defaultGroup)
+};
+mxEditor.prototype.open = function(a) {
+  if (null != a) {
+    var b = mxUtils.load(a).getXml();
+    this.readGraphModel(b.documentElement);
+    this.filename = a;
+    this.fireEvent(new mxEventObject(mxEvent.OPEN, "filename", a))
+  }
+};
+mxEditor.prototype.readGraphModel = function(a) {
+  (new mxCodec(a.ownerDocument)).decode(a, this.graph.getModel());
+  this.resetHistory()
+};
+mxEditor.prototype.save = function(a, b) {
+  a = a || this.getUrlPost();
+  if (null != a && 0 < a.length) {
+    var c = this.writeGraphModel(b);
+    this.postDiagram(a, c);
+    this.setModified(!1)
+  }
+  this.fireEvent(new mxEventObject(mxEvent.SAVE, "url", a))
+};
+mxEditor.prototype.postDiagram = function(a, b) {
+  this.escapePostData && (b = encodeURIComponent(b));
+  mxUtils.post(a, this.postParameterName + "\x3d" + b, mxUtils.bind(this, function(c) {
+    this.fireEvent(new mxEventObject(mxEvent.POST, "request", c, "url", a, "data", b))
+  }))
+};
+mxEditor.prototype.writeGraphModel = function(a) {
+  a = null != a ? a : this.linefeed;
+  var b = (new mxCodec).encode(this.graph.getModel());
+  return mxUtils.getXml(b, a)
+};
+mxEditor.prototype.getUrlPost = function() {
+  return this.urlPost
+};
+mxEditor.prototype.getUrlImage = function() {
+  return this.urlImage
+};
+mxEditor.prototype.connect = function(a, b, c, d) {
+  var e = null;
+  mxClient.IS_LOCAL || (e = new mxSession(this.graph.getModel(), a, b, c), e.addListener(mxEvent.RECEIVE, mxUtils.bind(this, function(a, b) {
+    null != b.getProperty("node").getAttribute("namespace") && this.resetHistory()
+  })), e.addListener(mxEvent.DISCONNECT, d), e.addListener(mxEvent.CONNECT, d), e.addListener(mxEvent.NOTIFY, d), e.addListener(mxEvent.GET, d), e.start());
+  return e
+};
+mxEditor.prototype.swapStyles = function(a, b) {
+  var c = this.graph.getStylesheet().styles[b];
+  this.graph.getView().getStylesheet().putCellStyle(b, this.graph.getStylesheet().styles[a]);
+  this.graph.getStylesheet().putCellStyle(a, c);
+  this.graph.refresh()
+};
+mxEditor.prototype.showProperties = function(a) {
+  a = a || this.graph.getSelectionCell();
+  null == a && (a = this.graph.getCurrentRoot(), null == a && (a = this.graph.getModel().getRoot()));
+  if (null != a) {
+    this.graph.stopEditing(!0);
+    var b = mxUtils.getOffset(this.graph.container),
+      c = b.x + 10,
+      b = b.y;
+    if (null != this.properties && !this.movePropertiesDialog) c = this.properties.getX(), b = this.properties.getY();
+    else {
+      var d = this.graph.getCellBounds(a);
+      null != d && (c += d.x + Math.min(200, d.width), b += d.y)
+    }
+    this.hideProperties();
+    a = this.createProperties(a);
+    null != a && (this.properties = new mxWindow(mxResources.get(this.propertiesResource) || this.propertiesResource, a, c, b, this.propertiesWidth, this.propertiesHeight, !1), this.properties.setVisible(!
+      0))
+  }
+};
+mxEditor.prototype.isPropertiesVisible = function() {
+  return null != this.properties
+};
+mxEditor.prototype.createProperties = function(a) {
+  var b = this.graph.getModel(),
+    c = b.getValue(a);
+  if (mxUtils.isNode(c)) {
+    var d = new mxForm("properties");
+    d.addText("ID", a.getId()).setAttribute("readonly", "true");
+    var e = null,
+      f = null,
+      g = null,
+      h = null,
+      k = null;
+    b.isVertex(a) && (e = b.getGeometry(a), null != e && (f = d.addText("top", e.y), g = d.addText("left", e.x), h = d.addText("width", e.width), k = d.addText("height", e.height)));
+    for (var l = b.getStyle(a), m = d.addText("Style", l || ""), n = c.attributes, p = [], c = 0; c < n.length; c++) p[c] = d.addTextarea(n[c].nodeName,
+      n[c].nodeValue, "label" == n[c].nodeName ? 4 : 2);
+    c = mxUtils.bind(this, function() {
+      this.hideProperties();
+      b.beginUpdate();
+      try {
+        null != e && (e = e.clone(), e.x = parseFloat(g.value), e.y = parseFloat(f.value), e.width = parseFloat(h.value), e.height = parseFloat(k.value), b.setGeometry(a, e));
+        0 < m.value.length ? b.setStyle(a, m.value) : b.setStyle(a, null);
+        for (var c = 0; c < n.length; c++) {
+          var d = new mxCellAttributeChange(a, n[c].nodeName, p[c].value);
+          b.execute(d)
+        }
+        this.graph.isAutoSizeCell(a) && this.graph.updateCellSize(a)
+      } finally {
+        b.endUpdate()
+      }
+    });
+    l = mxUtils.bind(this, function() {
+      this.hideProperties()
+    });
+    d.addButtons(c, l);
+    return d.table
+  }
+  return null
+};
+mxEditor.prototype.hideProperties = function() {
+  null != this.properties && (this.properties.destroy(), this.properties = null)
+};
+mxEditor.prototype.showTasks = function() {
+  if (null == this.tasks) {
+    var a = document.createElement("div");
+    a.style.padding = "4px";
+    a.style.paddingLeft = "20px";
+    var b = document.body.clientWidth,
+      b = new mxWindow(mxResources.get(this.tasksResource) || this.tasksResource, a, b - 220, this.tasksTop, 200);
+    b.setClosable(!0);
+    b.destroyOnClose = !1;
+    var c = mxUtils.bind(this, function(b) {
+      mxEvent.release(a);
+      a.innerHTML = "";
+      this.createTasks(a)
+    });
+    this.graph.getModel().addListener(mxEvent.CHANGE, c);
+    this.graph.getSelectionModel().addListener(mxEvent.CHANGE,
+      c);
+    this.graph.addListener(mxEvent.ROOT, c);
+    null != this.tasksWindowImage && b.setImage(this.tasksWindowImage);
+    this.tasks = b;
+    this.createTasks(a)
+  }
+  this.tasks.setVisible(!0)
+};
+mxEditor.prototype.refreshTasks = function(a) {
+  null != this.tasks && (a = this.tasks.content, mxEvent.release(a), a.innerHTML = "", this.createTasks(a))
+};
+mxEditor.prototype.createTasks = function(a) {};
+mxEditor.prototype.showHelp = function(a) {
+  if (null == this.help) {
+    var b = document.createElement("iframe");
+    b.setAttribute("src", mxResources.get("urlHelp") || this.urlHelp);
+    b.setAttribute("height", "100%");
+    b.setAttribute("width", "100%");
+    b.setAttribute("frameBorder", "0");
+    b.style.backgroundColor = "white";
+    a = document.body.clientWidth;
+    var c = document.body.clientHeight || document.documentElement.clientHeight,
+      d = new mxWindow(mxResources.get(this.helpResource) || this.helpResource, b, (a - this.helpWidth) / 2, (c - this.helpHeight) /
+        3, this.helpWidth, this.helpHeight);
+    d.setMaximizable(!0);
+    d.setClosable(!0);
+    d.destroyOnClose = !1;
+    d.setResizable(!0);
+    null != this.helpWindowImage && d.setImage(this.helpWindowImage);
+    mxClient.IS_NS && (a = function(a) {
+      b.setAttribute("height", d.div.offsetHeight - 26 + "px")
+    }, d.addListener(mxEvent.RESIZE_END, a), d.addListener(mxEvent.MAXIMIZE, a), d.addListener(mxEvent.NORMALIZE, a), d.addListener(mxEvent.SHOW, a));
+    this.help = d
+  }
+  this.help.setVisible(!0)
+};
+mxEditor.prototype.showOutline = function() {
+  if (null == this.outline) {
+    var a = document.createElement("div");
+    a.style.overflow = "hidden";
+    a.style.width = "100%";
+    a.style.height = "100%";
+    a.style.background = "white";
+    a.style.cursor = "move";
+    var b = new mxWindow(mxResources.get(this.outlineResource) || this.outlineResource, a, 600, 480, 200, 200, !1),
+      c = new mxOutline(this.graph, a);
+    b.setClosable(!0);
+    b.setResizable(!0);
+    b.destroyOnClose = !1;
+    b.addListener(mxEvent.RESIZE_END, function() {
+      c.update()
+    });
+    this.outline = b;
+    this.outline.outline = c
+  }
+  this.outline.setVisible(!0);
+  this.outline.outline.update(!0)
+};
+mxEditor.prototype.setMode = function(a) {
+  "select" == a ? (this.graph.panningHandler.useLeftButtonForPanning = !1, this.graph.setConnectable(!1)) : "connect" == a ? (this.graph.panningHandler.useLeftButtonForPanning = !1, this.graph.setConnectable(!
+    0)) : "pan" == a && (this.graph.panningHandler.useLeftButtonForPanning = !0, this.graph.setConnectable(!1))
+};
+mxEditor.prototype.createPopupMenu = function(a, b, c) {
+  this.popupHandler.createMenu(this, a, b, c)
+};
+mxEditor.prototype.createEdge = function(a, b) {
+  var c = null;
+  if (null != this.defaultEdge) c = this.graph.getModel().cloneCell(this.defaultEdge);
+  else {
+    c = new mxCell("");
+    c.setEdge(!0);
+    var d = new mxGeometry;
+    d.relative = !0;
+    c.setGeometry(d)
+  }
+  d = this.getEdgeStyle();
+  null != d && c.setStyle(d);
+  return c
+};
+mxEditor.prototype.getEdgeStyle = function() {
+  return this.defaultEdgeStyle
+};
+mxEditor.prototype.consumeCycleAttribute = function(a) {
+  return null != this.cycleAttributeValues && 0 < this.cycleAttributeValues.length && this.graph.isSwimlane(a) ? this.cycleAttributeValues[this.cycleAttributeIndex++ % this.cycleAttributeValues.length] :
+    null
+};
+mxEditor.prototype.cycleAttribute = function(a) {
+  if (null != this.cycleAttributeName) {
+    var b = this.consumeCycleAttribute(a);
+    null != b && a.setStyle(a.getStyle() + ";" + this.cycleAttributeName + "\x3d" + b)
+  }
+};
+mxEditor.prototype.addVertex = function(a, b, c, d) {
+  for (var e = this.graph.getModel(); null != a && !this.graph.isValidDropTarget(a);) a = e.getParent(a);
+  a = null != a ? a : this.graph.getSwimlaneAt(c, d);
+  var f = this.graph.getView().scale,
+    g = e.getGeometry(b),
+    h = e.getGeometry(a);
+  if (this.graph.isSwimlane(b) && !this.graph.swimlaneNesting) a = null;
+  else {
+    if (null == a && this.swimlaneRequired) return null;
+    if (null != a && null != h) {
+      var k = this.graph.getView().getState(a);
+      if (null != k) {
+        if (c -= k.origin.x * f, d -= k.origin.y * f, this.graph.isConstrainedMoving) {
+          var h =
+            g.width,
+            l = g.height,
+            m = k.x + k.width;
+          c + h > m && (c -= c + h - m);
+          m = k.y + k.height;
+          d + l > m && (d -= d + l - m)
+        }
+      } else null != h && (c -= h.x * f, d -= h.y * f)
+    }
+  }
+  g = g.clone();
+  g.x = this.graph.snap(c / f - this.graph.getView().translate.x - this.graph.gridSize / 2);
+  g.y = this.graph.snap(d / f - this.graph.getView().translate.y - this.graph.gridSize / 2);
+  b.setGeometry(g);
+  null == a && (a = this.graph.getDefaultParent());
+  this.cycleAttribute(b);
+  this.fireEvent(new mxEventObject(mxEvent.BEFORE_ADD_VERTEX, "vertex", b, "parent", a));
+  e.beginUpdate();
+  try {
+    b = this.graph.addCell(b,
+      a), null != b && (this.graph.constrainChild(b), this.fireEvent(new mxEventObject(mxEvent.ADD_VERTEX, "vertex", b)))
+  } finally {
+    e.endUpdate()
+  }
+  null != b && (this.graph.setSelectionCell(b), this.graph.scrollCellToVisible(b), this.fireEvent(new mxEventObject(mxEvent.AFTER_ADD_VERTEX, "vertex", b)));
+  return b
+};
+mxEditor.prototype.destroy = function() {
+  this.destroyed || (this.destroyed = !0, null != this.tasks && this.tasks.destroy(), null != this.outline && this.outline.destroy(), null != this.properties && this.properties.destroy(), null !=
+    this.keyHandler && this.keyHandler.destroy(), null != this.rubberband && this.rubberband.destroy(), null != this.toolbar && this.toolbar.destroy(), null != this.graph && this.graph.destroy(),
+    this.templates = this.status = null)
+};
+var mxCodecRegistry = {
+  codecs: [],
+  aliases: [],
+  register: function(a) {
+    if (null != a) {
+      var b = a.getName();
+      mxCodecRegistry.codecs[b] = a;
+      var c = mxUtils.getFunctionName(a.template.constructor);
+      c != b && mxCodecRegistry.addAlias(c, b)
+    }
+    return a
+  },
+  addAlias: function(a, b) {
+    mxCodecRegistry.aliases[a] = b
+  },
+  getCodec: function(a) {
+    var b = null;
+    if (null != a) {
+      var b = mxUtils.getFunctionName(a),
+        c = mxCodecRegistry.aliases[b];
+      null != c && (b = c);
+      b = mxCodecRegistry.codecs[b];
+      if (null == b) try {
+        b = new mxObjectCodec(new a), mxCodecRegistry.register(b)
+      } catch (d) {}
+    }
+    return b
+  }
+};
+
+function mxCodec(a) {
+  this.document = a || mxUtils.createXmlDocument();
+  this.objects = []
+}
+mxCodec.prototype.document = null;
+mxCodec.prototype.objects = null;
+mxCodec.prototype.encodeDefaults = !1;
+mxCodec.prototype.putObject = function(a, b) {
+  return this.objects[a] = b
+};
+mxCodec.prototype.getObject = function(a) {
+  var b = null;
+  null != a && (b = this.objects[a], null == b && (b = this.lookup(a), null == b && (a = this.getElementById(a), null != a && (b = this.decode(a)))));
+  return b
+};
+mxCodec.prototype.lookup = function(a) {
+  return null
+};
+mxCodec.prototype.getElementById = function(a, b) {
+  return mxUtils.findNodeByAttribute(this.document.documentElement, null != b ? b : "id", a)
+};
+mxCodec.prototype.getId = function(a) {
+  var b = null;
+  null != a && (b = this.reference(a), null == b && a instanceof mxCell && (b = a.getId(), null == b && (b = mxCellPath.create(a), 0 == b.length && (b = "root"))));
+  return b
+};
+mxCodec.prototype.reference = function(a) {
+  return null
+};
+mxCodec.prototype.encode = function(a) {
+  var b = null;
+  if (null != a && null != a.constructor) {
+    var c = mxCodecRegistry.getCodec(a.constructor);
+    null != c ? b = c.encode(this, a) : mxUtils.isNode(a) ? b = mxClient.IS_IE ? a.cloneNode(!0) : this.document.importNode(a, !0) : mxLog.warn("mxCodec.encode: No codec for " + mxUtils.getFunctionName(
+      a.constructor))
+  }
+  return b
+};
+mxCodec.prototype.decode = function(a, b) {
+  var c = null;
+  if (null != a && a.nodeType == mxConstants.NODETYPE_ELEMENT) {
+    var d = null;
+    try {
+      d = eval(a.nodeName)
+    } catch (e) {}
+    try {
+      var f = mxCodecRegistry.getCodec(d);
+      null != f ? c = f.decode(this, a, b) : (c = a.cloneNode(!0), c.removeAttribute("as"))
+    } catch (g) {
+      mxLog.debug("Cannot decode " + a.nodeName + ": " + g.message)
+    }
+  }
+  return c
+};
+mxCodec.prototype.encodeCell = function(a, b, c) {
+  b.appendChild(this.encode(a));
+  if (null == c || c) {
+    c = a.getChildCount();
+    for (var d = 0; d < c; d++) this.encodeCell(a.getChildAt(d), b)
+  }
+};
+mxCodec.prototype.isCellCodec = function(a) {
+  return null != a && "function" == typeof a.isCellCodec ? a.isCellCodec() : !1
+};
+mxCodec.prototype.decodeCell = function(a, b) {
+  b = null != b ? b : !0;
+  var c = null;
+  if (null != a && a.nodeType == mxConstants.NODETYPE_ELEMENT) {
+    c = mxCodecRegistry.getCodec(a.nodeName);
+    if (!this.isCellCodec(c))
+      for (var d = a.firstChild; null != d && !this.isCellCodec(c);) c = mxCodecRegistry.getCodec(d.nodeName), d = d.nextSibling;
+    this.isCellCodec(c) || (c = mxCodecRegistry.getCodec(mxCell));
+    c = c.decode(this, a);
+    b && this.insertIntoGraph(c)
+  }
+  return c
+};
+mxCodec.prototype.insertIntoGraph = function(a) {
+  var b = a.parent,
+    c = a.getTerminal(!0),
+    d = a.getTerminal(!1);
+  a.setTerminal(null, !1);
+  a.setTerminal(null, !0);
+  a.parent = null;
+  null != b && b.insert(a);
+  null != c && c.insertEdge(a, !0);
+  null != d && d.insertEdge(a, !1)
+};
+mxCodec.prototype.setAttribute = function(a, b, c) {
+  null != b && null != c && a.setAttribute(b, c)
+};
+
+function mxObjectCodec(a, b, c, d) {
+  this.template = a;
+  this.exclude = null != b ? b : [];
+  this.idrefs = null != c ? c : [];
+  this.mapping = null != d ? d : [];
+  this.reverse = {};
+  for (var e in this.mapping) this.reverse[this.mapping[e]] = e
+}
+mxObjectCodec.prototype.template = null;
+mxObjectCodec.prototype.exclude = null;
+mxObjectCodec.prototype.idrefs = null;
+mxObjectCodec.prototype.mapping = null;
+mxObjectCodec.prototype.reverse = null;
+mxObjectCodec.prototype.getName = function() {
+  return mxUtils.getFunctionName(this.template.constructor)
+};
+mxObjectCodec.prototype.cloneTemplate = function() {
+  return new this.template.constructor
+};
+mxObjectCodec.prototype.getFieldName = function(a) {
+  if (null != a) {
+    var b = this.reverse[a];
+    null != b && (a = b)
+  }
+  return a
+};
+mxObjectCodec.prototype.getAttributeName = function(a) {
+  if (null != a) {
+    var b = this.mapping[a];
+    null != b && (a = b)
+  }
+  return a
+};
+mxObjectCodec.prototype.isExcluded = function(a, b, c, d) {
+  return b == mxObjectIdentity.FIELD_NAME || 0 <= mxUtils.indexOf(this.exclude, b)
+};
+mxObjectCodec.prototype.isReference = function(a, b, c, d) {
+  return 0 <= mxUtils.indexOf(this.idrefs, b)
+};
+mxObjectCodec.prototype.encode = function(a, b) {
+  var c = a.document.createElement(this.getName());
+  b = this.beforeEncode(a, b, c);
+  this.encodeObject(a, b, c);
+  return this.afterEncode(a, b, c)
+};
+mxObjectCodec.prototype.encodeObject = function(a, b, c) {
+  a.setAttribute(c, "id", a.getId(b));
+  for (var d in b) {
+    var e = d,
+      f = b[e];
+    null != f && !this.isExcluded(b, e, f, !0) && (mxUtils.isNumeric(e) && (e = null), this.encodeValue(a, b, e, f, c))
+  }
+};
+mxObjectCodec.prototype.encodeValue = function(a, b, c, d, e) {
+  if (null != d) {
+    if (this.isReference(b, c, d, !0)) {
+      var f = a.getId(d);
+      if (null == f) {
+        mxLog.warn("mxObjectCodec.encode: No ID for " + this.getName() + "." + c + "\x3d" + d);
+        return
+      }
+      d = f
+    }
+    f = this.template[c];
+    if (null == c || a.encodeDefaults || f != d) c = this.getAttributeName(c), this.writeAttribute(a, b, c, d, e)
+  }
+};
+mxObjectCodec.prototype.writeAttribute = function(a, b, c, d, e) {
+  "object" != typeof d ? this.writePrimitiveAttribute(a, b, c, d, e) : this.writeComplexAttribute(a, b, c, d, e)
+};
+mxObjectCodec.prototype.writePrimitiveAttribute = function(a, b, c, d, e) {
+  d = this.convertValueToXml(d);
+  null == c ? (b = a.document.createElement("add"), "function" == typeof d ? b.appendChild(a.document.createTextNode(d)) : a.setAttribute(b, "value", d), e.appendChild(b)) : "function" != typeof d &&
+    a.setAttribute(e, c, d)
+};
+mxObjectCodec.prototype.writeComplexAttribute = function(a, b, c, d, e) {
+  a = a.encode(d);
+  null != a ? (null != c && a.setAttribute("as", c), e.appendChild(a)) : mxLog.warn("mxObjectCodec.encode: No node for " + this.getName() + "." + c + ": " + d)
+};
+mxObjectCodec.prototype.convertValueToXml = function(a) {
+  if ("undefined" == typeof a.length && (!0 == a || !1 == a)) a = !0 == a ? "1" : "0";
+  return a
+};
+mxObjectCodec.prototype.convertValueFromXml = function(a) {
+  mxUtils.isNumeric(a) && (a = parseFloat(a));
+  //
+  // Marco (marco.murdocca@xenialab.it) + Andrea Bianco (andrea.bianco@xcally.com)
+  // 2016-02-24
+  //
+  // mxUtils.isNumeric(a) && (a = ((Number(a) === a) && (a % 1 !== 0)) ? parseFloat(a) : a);
+  return a
+};
+mxObjectCodec.prototype.beforeEncode = function(a, b, c) {
+  return b
+};
+mxObjectCodec.prototype.afterEncode = function(a, b, c) {
+  return c
+};
+mxObjectCodec.prototype.decode = function(a, b, c) {
+  var d = b.getAttribute("id"),
+    e = a.objects[d];
+  null == e && (e = c || this.cloneTemplate(), null != d && a.putObject(d, e));
+  b = this.beforeDecode(a, b, e);
+  this.decodeNode(a, b, e);
+  return this.afterDecode(a, b, e)
+};
+mxObjectCodec.prototype.decodeNode = function(a, b, c) {
+  null != b && (this.decodeAttributes(a, b, c), this.decodeChildren(a, b, c))
+};
+mxObjectCodec.prototype.decodeAttributes = function(a, b, c) {
+  b = b.attributes;
+  if (null != b)
+    for (var d = 0; d < b.length; d++) this.decodeAttribute(a, b[d], c)
+};
+mxObjectCodec.prototype.decodeAttribute = function(a, b, c) {
+  var d = b.nodeName;
+  if ("as" != d && "id" != d) {
+    b = this.convertValueFromXml(b.nodeValue);
+    var e = this.getFieldName(d);
+    if (this.isReference(c, e, b, !1)) {
+      a = a.getObject(b);
+      if (null == a) {
+        mxLog.warn("mxObjectCodec.decode: No object for " + this.getName() + "." + d + "\x3d" + b);
+        return
+      }
+      b = a
+    }
+    this.isExcluded(c, d, b, !1) || (c[d] = b)
+  }
+};
+mxObjectCodec.prototype.decodeChildren = function(a, b, c) {
+  for (b = b.firstChild; null != b;) {
+    var d = b.nextSibling;
+    b.nodeType == mxConstants.NODETYPE_ELEMENT && !this.processInclude(a, b, c) && this.decodeChild(a, b, c);
+    b = d
+  }
+};
+mxObjectCodec.prototype.decodeChild = function(a, b, c) {
+  var d = this.getFieldName(b.getAttribute("as"));
+  if (null == d || !this.isExcluded(c, d, b, !1)) {
+    var e = this.getFieldTemplate(c, d, b),
+      f = null;
+    "add" == b.nodeName ? (f = b.getAttribute("value"), null == f && (f = mxUtils.eval(mxUtils.getTextContent(b)))) : f = a.decode(b, e);
+    this.addObjectValue(c, d, f, e)
+  }
+};
+mxObjectCodec.prototype.getFieldTemplate = function(a, b, c) {
+  a = a[b];
+  a instanceof Array && 0 < a.length && (a = null);
+  return a
+};
+mxObjectCodec.prototype.addObjectValue = function(a, b, c, d) {
+  null != c && c != d && (null != b && 0 < b.length ? a[b] = c : a.push(c))
+};
+mxObjectCodec.prototype.processInclude = function(a, b, c) {
+  if ("include" == b.nodeName) {
+    b = b.getAttribute("name");
+    if (null != b) try {
+      var d = mxUtils.load(b).getDocumentElement();
+      null != d && a.decode(d, c)
+    } catch (e) {}
+    return !0
+  }
+  return !1
+};
+mxObjectCodec.prototype.beforeDecode = function(a, b, c) {
+  return b
+};
+mxObjectCodec.prototype.afterDecode = function(a, b, c) {
+  return c
+};
+mxCodecRegistry.register(function() {
+  var a = new mxObjectCodec(new mxCell, ["children", "edges", "overlays", "mxTransient"], ["parent", "source", "target"]);
+  a.isCellCodec = function() {
+    return !0
+  };
+  a.isExcluded = function(a, c, d, e) {
+    return mxObjectCodec.prototype.isExcluded.apply(this, arguments) || e && "value" == c && d.nodeType == mxConstants.NODETYPE_ELEMENT
+  };
+  a.afterEncode = function(a, c, d) {
+    if (null != c.value && c.value.nodeType == mxConstants.NODETYPE_ELEMENT) {
+      var e = d;
+      d = mxClient.IS_IE ? c.value.cloneNode(!0) : a.document.importNode(c.value, !0);
+      d.appendChild(e);
+      a = e.getAttribute("id");
+      d.setAttribute("id", a);
+      e.removeAttribute("id")
+    }
+    return d
+  };
+  a.beforeDecode = function(a, c, d) {
+    var e = c,
+      f = this.getName();
+    c.nodeName != f ? (e = c.getElementsByTagName(f)[0], null != e && e.parentNode == c ? (mxUtils.removeWhitespace(e, !0), mxUtils.removeWhitespace(e, !1), e.parentNode.removeChild(e)) : e =
+      null, d.value = c.cloneNode(!0), c = d.value.getAttribute("id"), null != c && (d.setId(c), d.value.removeAttribute("id"))) : d.setId(c.getAttribute("id"));
+    if (null != e)
+      for (c = 0; c < this.idrefs.length; c++) {
+        var f =
+          this.idrefs[c],
+          g = e.getAttribute(f);
+        if (null != g) {
+          e.removeAttribute(f);
+          var h = a.objects[g] || a.lookup(g);
+          null == h && (g = a.getElementById(g), null != g && (h = (mxCodecRegistry.codecs[g.nodeName] || this).decode(a, g)));
+          d[f] = h
+        }
+      }
+    return e
+  };
+  return a
+}());
+mxCodecRegistry.register(function() {
+  var a = new mxObjectCodec(new mxGraphModel);
+  a.encodeObject = function(a, c, d) {
+    var e = a.document.createElement("root");
+    a.encodeCell(c.getRoot(), e);
+    d.appendChild(e)
+  };
+  a.decodeChild = function(a, c, d) {
+    "root" == c.nodeName ? this.decodeRoot(a, c, d) : mxObjectCodec.prototype.decodeChild.apply(this, arguments)
+  };
+  a.decodeRoot = function(a, c, d) {
+    var e = null;
+    for (c = c.firstChild; null != c;) {
+      var f = a.decodeCell(c);
+      null != f && null == f.getParent() && (e = f);
+      c = c.nextSibling
+    }
+    null != e && d.setRoot(e)
+  };
+  return a
+}());
+mxCodecRegistry.register(function() {
+  var a = new mxObjectCodec(new mxRootChange, ["model", "previous", "root"]);
+  a.afterEncode = function(a, c, d) {
+    a.encodeCell(c.root, d);
+    return d
+  };
+  a.beforeDecode = function(a, c, d) {
+    if (null != c.firstChild && c.firstChild.nodeType == mxConstants.NODETYPE_ELEMENT) {
+      c = c.cloneNode(!0);
+      var e = c.firstChild;
+      d.root = a.decodeCell(e, !1);
+      d = e.nextSibling;
+      e.parentNode.removeChild(e);
+      for (e = d; null != e;) d = e.nextSibling, a.decodeCell(e), e.parentNode.removeChild(e), e = d
+    }
+    return c
+  };
+  a.afterDecode = function(a, c,
+    d) {
+    d.previous = d.root;
+    return d
+  };
+  return a
+}());
+mxCodecRegistry.register(function() {
+  var a = new mxObjectCodec(new mxChildChange, ["model", "child", "previousIndex"], ["parent", "previous"]);
+  a.isReference = function(a, c, d, e) {
+    return "child" == c && (null != a.previous || !e) ? !0 : 0 <= mxUtils.indexOf(this.idrefs, c)
+  };
+  a.afterEncode = function(a, c, d) {
+    this.isReference(c, "child", c.child, !0) ? d.setAttribute("child", a.getId(c.child)) : a.encodeCell(c.child, d);
+    return d
+  };
+  a.beforeDecode = function(a, c, d) {
+    if (null != c.firstChild && c.firstChild.nodeType == mxConstants.NODETYPE_ELEMENT) {
+      c = c.cloneNode(!0);
+      var e = c.firstChild;
+      d.child = a.decodeCell(e, !1);
+      d = e.nextSibling;
+      e.parentNode.removeChild(e);
+      for (e = d; null != e;) {
+        d = e.nextSibling;
+        if (e.nodeType == mxConstants.NODETYPE_ELEMENT) {
+          var f = e.getAttribute("id");
+          null == a.lookup(f) && a.decodeCell(e)
+        }
+        e.parentNode.removeChild(e);
+        e = d
+      }
+    } else e = c.getAttribute("child"), d.child = a.getObject(e);
+    return c
+  };
+  a.afterDecode = function(a, c, d) {
+    d.child.parent = d.previous;
+    d.previous = d.parent;
+    d.previousIndex = d.index;
+    return d
+  };
+  return a
+}());
+mxCodecRegistry.register(function() {
+  var a = new mxObjectCodec(new mxTerminalChange, ["model", "previous"], ["cell", "terminal"]);
+  a.afterDecode = function(a, c, d) {
+    d.previous = d.terminal;
+    return d
+  };
+  return a
+}());
+var mxGenericChangeCodec = function(a, b) {
+  var c = new mxObjectCodec(a, ["model", "previous"], ["cell"]);
+  c.afterDecode = function(a, c, f) {
+    mxUtils.isNode(f.cell) && (f.cell = a.decodeCell(f.cell, !1));
+    f.previous = f[b];
+    return f
+  };
+  return c
+};
+mxCodecRegistry.register(mxGenericChangeCodec(new mxValueChange, "value"));
+mxCodecRegistry.register(mxGenericChangeCodec(new mxStyleChange, "style"));
+mxCodecRegistry.register(mxGenericChangeCodec(new mxGeometryChange, "geometry"));
+mxCodecRegistry.register(mxGenericChangeCodec(new mxCollapseChange, "collapsed"));
+mxCodecRegistry.register(mxGenericChangeCodec(new mxVisibleChange, "visible"));
+mxCodecRegistry.register(mxGenericChangeCodec(new mxCellAttributeChange, "value"));
+mxCodecRegistry.register(function() {
+  return new mxObjectCodec(new mxGraph, "graphListeners eventListeners view container cellRenderer editor selection".split(" "))
+}());
+mxCodecRegistry.register(function() {
+  var a = new mxObjectCodec(new mxGraphView);
+  a.encode = function(a, c) {
+    return this.encodeCell(a, c, c.graph.getModel().getRoot())
+  };
+  a.encodeCell = function(a, c, d) {
+    var e = c.graph.getModel(),
+      f = c.getState(d),
+      g = e.getParent(d);
+    if (null == g || null != f) {
+      var h = e.getChildCount(d),
+        k = c.graph.getCellGeometry(d),
+        l = null;
+      g == e.getRoot() ? l = "layer" : null == g ? l = "graph" : e.isEdge(d) ? l = "edge" : 0 < h && null != k ? l = "group" : e.isVertex(d) && (l = "vertex");
+      if (null != l) {
+        var m = a.document.createElement(l);
+        null != c.graph.getLabel(d) &&
+          (m.setAttribute("label", c.graph.getLabel(d)), c.graph.isHtmlLabel(d) && m.setAttribute("html", !0));
+        if (null == g) {
+          var n = c.getGraphBounds();
+          null != n && (m.setAttribute("x", Math.round(n.x)), m.setAttribute("y", Math.round(n.y)), m.setAttribute("width", Math.round(n.width)), m.setAttribute("height", Math.round(n.height)));
+          m.setAttribute("scale", c.scale)
+        } else if (null != f && null != k) {
+          for (n in f.style) g = f.style[n], "function" == typeof g && "object" == typeof g && (g = mxStyleRegistry.getName(g)), null != g && ("function" != typeof g && "object" !=
+            typeof g) && m.setAttribute(n, g);
+          g = f.absolutePoints;
+          if (null != g && 0 < g.length) {
+            k = Math.round(g[0].x) + "," + Math.round(g[0].y);
+            for (n = 1; n < g.length; n++) k += " " + Math.round(g[n].x) + "," + Math.round(g[n].y);
+            m.setAttribute("points", k)
+          } else m.setAttribute("x", Math.round(f.x)), m.setAttribute("y", Math.round(f.y)), m.setAttribute("width", Math.round(f.width)), m.setAttribute("height", Math.round(f.height));
+          n = f.absoluteOffset;
+          null != n && (0 != n.x && m.setAttribute("dx", Math.round(n.x)), 0 != n.y && m.setAttribute("dy", Math.round(n.y)))
+        }
+        for (n =
+          0; n < h; n++) f = this.encodeCell(a, c, e.getChildAt(d, n)), null != f && m.appendChild(f)
+      }
+    }
+    return m
+  };
+  return a
+}());
+mxCodecRegistry.register(function() {
+  var a = new mxObjectCodec(new mxStylesheet);
+  a.encode = function(a, c) {
+    var d = a.document.createElement(this.getName()),
+      e;
+    for (e in c.styles) {
+      var f = c.styles[e],
+        g = a.document.createElement("add");
+      if (null != e) {
+        g.setAttribute("as", e);
+        for (var h in f) {
+          var k = this.getStringValue(h, f[h]);
+          if (null != k) {
+            var l = a.document.createElement("add");
+            l.setAttribute("value", k);
+            l.setAttribute("as", h);
+            g.appendChild(l)
+          }
+        }
+        0 < g.childNodes.length && d.appendChild(g)
+      }
+    }
+    return d
+  };
+  a.getStringValue = function(a,
+    c) {
+    var d = typeof c;
+    "function" == d ? c = mxStyleRegistry.getName(style[j]) : "object" == d && (c = null);
+    return c
+  };
+  a.decode = function(a, c, d) {
+    d = d || new this.template.constructor;
+    var e = c.getAttribute("id");
+    null != e && (a.objects[e] = d);
+    for (c = c.firstChild; null != c;) {
+      if (!this.processInclude(a, c, d) && "add" == c.nodeName && (e = c.getAttribute("as"), null != e)) {
+        var f = c.getAttribute("extend"),
+          g = null != f ? mxUtils.clone(d.styles[f]) : null;
+        null == g && (null != f && mxLog.warn("mxStylesheetCodec.decode: stylesheet " + f + " not found to extend"), g = {});
+        for (f = c.firstChild; null != f;) {
+          if (f.nodeType == mxConstants.NODETYPE_ELEMENT) {
+            var h = f.getAttribute("as");
+            if ("add" == f.nodeName) {
+              var k = mxUtils.getTextContent(f),
+                l = null;
+              null != k && 0 < k.length ? l = mxUtils.eval(k) : (l = f.getAttribute("value"), mxUtils.isNumeric(l) && (l = parseFloat(l)));
+              null != l && (g[h] = l)
+            } else "remove" == f.nodeName && delete g[h]
+          }
+          f = f.nextSibling
+        }
+        d.putCellStyle(e, g)
+      }
+      c = c.nextSibling
+    }
+    return d
+  };
+  return a
+}());
+mxCodecRegistry.register(function() {
+  var a = new mxObjectCodec(new mxDefaultKeyHandler);
+  a.encode = function(a, c) {
+    return null
+  };
+  a.decode = function(a, c, d) {
+    if (null != d)
+      for (c = c.firstChild; null != c;) {
+        if (!this.processInclude(a, c, d) && "add" == c.nodeName) {
+          var e = c.getAttribute("as"),
+            f = c.getAttribute("action"),
+            g = c.getAttribute("control");
+          d.bindAction(e, f, g)
+        }
+        c = c.nextSibling
+      }
+    return d
+  };
+  return a
+}());
+mxCodecRegistry.register(function() {
+  var a = new mxObjectCodec(new mxDefaultToolbar);
+  a.encode = function(a, c) {
+    return null
+  };
+  a.decode = function(a, c, d) {
+    if (null != d) {
+      var e = d.editor;
+      for (c = c.firstChild; null != c;) {
+        if (c.nodeType == mxConstants.NODETYPE_ELEMENT && !this.processInclude(a, c, d))
+          if ("separator" == c.nodeName) d.addSeparator();
+          else if ("br" == c.nodeName) d.toolbar.addBreak();
+        else if ("hr" == c.nodeName) d.toolbar.addLine();
+        else if ("add" == c.nodeName) {
+          var f = c.getAttribute("as"),
+            f = mxResources.get(f) || f,
+            g = c.getAttribute("icon"),
+            h = c.getAttribute("pressedIcon"),
+            k = c.getAttribute("action"),
+            l = c.getAttribute("mode"),
+            m = c.getAttribute("template"),
+            n = "0" != c.getAttribute("toggle"),
+            p = mxUtils.getTextContent(c),
+            q = null;
+          if (null != k) q = d.addItem(f, g, k, h);
+          else if (null != l) var s = mxUtils.eval(p),
+            q = d.addMode(f, g, l, h, s);
+          else if (null != m || null != p && 0 < p.length) q = e.templates[m], m = c.getAttribute("style"), null != q && null != m && (q = q.clone(), q.setStyle(m)), m = null, null != p && 0 <
+            p.length && (m = mxUtils.eval(p)), q = d.addPrototype(f, g, q, h, m, n);
+          else if (h = mxUtils.getChildNodes(c),
+            0 < h.length)
+            if (null == g) {
+              m = d.addActionCombo(f);
+              for (f = 0; f < h.length; f++) n = h[f], "separator" == n.nodeName ? d.addOption(m, "---") : "add" == n.nodeName && (g = n.getAttribute("as"), n = n.getAttribute("action"), d.addActionOption(
+                m, g, n))
+            } else {
+              var r = null,
+                t = d.addPrototype(f, g, function() {
+                  var a = e.templates[r.value];
+                  if (null != a) {
+                    var a = a.clone(),
+                      b = r.options[r.selectedIndex].cellStyle;
+                    null != b && a.setStyle(b);
+                    return a
+                  }
+                  mxLog.warn("Template " + a + " not found");
+                  return null
+                }, null, null, n),
+                r = d.addCombo();
+              mxEvent.addListener(r, "change",
+                function() {
+                  d.toolbar.selectMode(t, function(a) {
+                    a = mxUtils.convertPoint(e.graph.container, mxEvent.getClientX(a), mxEvent.getClientY(a));
+                    return e.addVertex(null, s(), a.x, a.y)
+                  });
+                  d.toolbar.noReset = !1
+                });
+              for (f = 0; f < h.length; f++) n = h[f], "separator" == n.nodeName ? d.addOption(r, "---") : "add" == n.nodeName && (g = n.getAttribute("as"), p = n.getAttribute("template"), d.addOption(
+                r, g, p || m).cellStyle = n.getAttribute("style"))
+            }
+          null != q && (m = c.getAttribute("id"), null != m && 0 < m.length && q.setAttribute("id", m))
+        }
+        c = c.nextSibling
+      }
+    }
+    return d
+  };
+  return a
+}());
+mxCodecRegistry.register(function() {
+  var a = new mxObjectCodec(new mxDefaultPopupMenu);
+  a.encode = function(a, c) {
+    return null
+  };
+  a.decode = function(a, c, d) {
+    var e = c.getElementsByTagName("include")[0];
+    null != e ? this.processInclude(a, e, d) : null != d && (d.config = c);
+    return d
+  };
+  return a
+}());
+mxCodecRegistry.register(function() {
+  var a = new mxObjectCodec(new mxEditor, "modified lastSnapshot ignoredChanges undoManager graphContainer toolbarContainer".split(" "));
+  a.afterDecode = function(a, c, d) {
+    a = c.getAttribute("defaultEdge");
+    null != a && (c.removeAttribute("defaultEdge"), d.defaultEdge = d.templates[a]);
+    a = c.getAttribute("defaultGroup");
+    null != a && (c.removeAttribute("defaultGroup"), d.defaultGroup = d.templates[a]);
+    return d
+  };
+  a.decodeChild = function(a, c, d) {
+    if ("Array" == c.nodeName) {
+      if ("templates" == c.getAttribute("as")) {
+        this.decodeTemplates(a,
+          c, d);
+        return
+      }
+    } else if ("ui" == c.nodeName) {
+      this.decodeUi(a, c, d);
+      return
+    }
+    mxObjectCodec.prototype.decodeChild.apply(this, arguments)
+  };
+  a.decodeUi = function(a, c, d) {
+    for (a = c.firstChild; null != a;) {
+      if ("add" == a.nodeName) {
+        c = a.getAttribute("as");
+        var e = a.getAttribute("element"),
+          f = a.getAttribute("style"),
+          g = null;
+        if (null != e) g = document.getElementById(e), null != g && null != f && (g.style.cssText += ";" + f);
+        else {
+          var e = parseInt(a.getAttribute("x")),
+            h = parseInt(a.getAttribute("y")),
+            k = a.getAttribute("width"),
+            l = a.getAttribute("height"),
+            g = document.createElement("div");
+          g.style.cssText = f;
+          (new mxWindow(mxResources.get(c) || c, g, e, h, k, l, !1, !0)).setVisible(!0)
+        }
+        "graph" == c ? d.setGraphContainer(g) : "toolbar" == c ? d.setToolbarContainer(g) : "title" == c ? d.setTitleContainer(g) : "status" == c ? d.setStatusContainer(g) : "map" == c && d.setMapContainer(
+          g)
+      } else "resource" == a.nodeName ? mxResources.add(a.getAttribute("basename")) : "stylesheet" == a.nodeName && mxClient.link("stylesheet", a.getAttribute("name"));
+      a = a.nextSibling
+    }
+  };
+  a.decodeTemplates = function(a, c, d) {
+    null == d.templates &&
+      (d.templates = []);
+    c = mxUtils.getChildNodes(c);
+    for (var e = 0; e < c.length; e++) {
+      for (var f = c[e].getAttribute("as"), g = c[e].firstChild; null != g && 1 != g.nodeType;) g = g.nextSibling;
+      null != g && (d.templates[f] = a.decodeCell(g))
+    }
+  };
+  return a
+}());
index acee5a0..aeaa420 100644 (file)
@@ -1 +1,634 @@
-var _0x7982=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x64\x69\x74\x6F\x72\x55\x69","\x61\x63\x74\x69\x6F\x6E\x73","\x69\x6E\x69\x74","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x65\x64\x69\x74\x6F\x72","\x67\x72\x61\x70\x68","\x6E\x65\x77","\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x73\x68\x6F\x77\x44\x69\x61\x6C\x6F\x67","\x61\x64\x64\x41\x63\x74\x69\x6F\x6E","\x6F\x70\x65\x6E","\x73\x61\x76\x65","\x73\x61\x76\x65\x46\x69\x6C\x65","\x43\x74\x72\x6C\x2B\x53","\x73\x61\x76\x65\x41\x73","\x43\x74\x72\x6C\x2B\x53\x68\x69\x66\x74\x2D\x53","\x70\x75\x62\x6C\x69\x73\x68","\x70\x75\x62\x6C\x69\x73\x68\x46\x69\x6C\x65","\x43\x74\x72\x6C\x2B\x53\x68\x69\x66\x74\x2B\x50","\x76\x61\x72\x69\x61\x62\x6C\x65","\x69\x6D\x70\x6F\x72\x74","\x65\x78\x70\x6F\x72\x74","\x43\x74\x72\x6C\x2B\x45","\x65\x64\x69\x74\x46\x69\x6C\x65","\x65\x64\x69\x74","\x67\x65\x74","\x62\x69\x6E\x64","\x70\x75\x74","\x72\x65\x6E\x61\x6D\x65","\x70\x72\x69\x6E\x74","\x70\x72\x69\x6E\x74\x53\x63\x72\x65\x65\x6E","\x73\x70\x72\x69\x74\x65\x2D\x70\x72\x69\x6E\x74","\x43\x74\x72\x6C\x2B\x50","\x70\x72\x65\x76\x69\x65\x77","\x73\x68\x6F\x77","\x75\x6E\x64\x6F","\x75\x6E\x64\x6F\x4D\x61\x6E\x61\x67\x65\x72","\x73\x70\x72\x69\x74\x65\x2D\x75\x6E\x64\x6F","\x43\x74\x72\x6C\x2B\x5A","\x72\x65\x64\x6F","\x73\x70\x72\x69\x74\x65\x2D\x72\x65\x64\x6F","\x43\x74\x72\x6C\x2B\x59","\x63\x75\x74","\x73\x70\x72\x69\x74\x65\x2D\x63\x75\x74","\x43\x74\x72\x6C\x2B\x58","\x63\x6F\x70\x79","\x73\x70\x72\x69\x74\x65\x2D\x63\x6F\x70\x79","\x43\x74\x72\x6C\x2B\x43","\x70\x61\x73\x74\x65","\x73\x70\x72\x69\x74\x65\x2D\x70\x61\x73\x74\x65","\x43\x74\x72\x6C\x2B\x56","\x64\x65\x6C\x65\x74\x65","\x72\x65\x6D\x6F\x76\x65\x43\x65\x6C\x6C\x73","\x44\x65\x6C\x65\x74\x65","\x64\x75\x70\x6C\x69\x63\x61\x74\x65","\x67\x72\x69\x64\x53\x69\x7A\x65","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73","\x6D\x6F\x76\x65\x43\x65\x6C\x6C\x73","\x73\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73","\x43\x74\x72\x6C\x2B\x44","\x73\x65\x6C\x65\x63\x74\x56\x65\x72\x74\x69\x63\x65\x73","\x43\x74\x72\x6C\x2B\x53\x68\x69\x66\x74\x2B\x56","\x73\x65\x6C\x65\x63\x74\x45\x64\x67\x65\x73","\x43\x74\x72\x6C\x2B\x53\x68\x69\x66\x74\x2B\x45","\x73\x65\x6C\x65\x63\x74\x41\x6C\x6C","\x43\x74\x72\x6C\x2B\x41","\x68\x6F\x6D\x65","\x48\x6F\x6D\x65","\x65\x78\x69\x74\x47\x72\x6F\x75\x70","\x50\x61\x67\x65\x20\x55\x70","\x65\x6E\x74\x65\x72\x47\x72\x6F\x75\x70","\x50\x61\x67\x65\x20\x44\x6F\x77\x6E","\x65\x78\x70\x61\x6E\x64","\x66\x6F\x6C\x64\x43\x65\x6C\x6C\x73","\x45\x6E\x74\x65\x72","\x63\x6F\x6C\x6C\x61\x70\x73\x65","\x42\x61\x63\x6B\x73\x70\x61\x63\x65","\x74\x6F\x46\x72\x6F\x6E\x74","\x6F\x72\x64\x65\x72\x43\x65\x6C\x6C\x73","\x43\x74\x72\x6C\x2B\x46","\x74\x6F\x42\x61\x63\x6B","\x43\x74\x72\x6C\x2B\x42","\x67\x72\x6F\x75\x70","\x67\x72\x6F\x75\x70\x43\x65\x6C\x6C\x73","\x73\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x43\x74\x72\x6C\x2B\x47","\x75\x6E\x67\x72\x6F\x75\x70","\x75\x6E\x67\x72\x6F\x75\x70\x43\x65\x6C\x6C\x73","\x43\x74\x72\x6C\x2B\x55","\x72\x65\x6D\x6F\x76\x65\x46\x72\x6F\x6D\x47\x72\x6F\x75\x70","\x72\x65\x6D\x6F\x76\x65\x43\x65\x6C\x6C\x73\x46\x72\x6F\x6D\x50\x61\x72\x65\x6E\x74","\x65\x64\x69\x74\x4C\x69\x6E\x6B","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x67\x65\x74\x4C\x69\x6E\x6B\x46\x6F\x72\x43\x65\x6C\x6C","","\x65\x6E\x74\x65\x72\x56\x61\x6C\x75\x65","\x70\x72\x6F\x6D\x70\x74","\x73\x65\x74\x4C\x69\x6E\x6B\x46\x6F\x72\x43\x65\x6C\x6C","\x6F\x70\x65\x6E\x4C\x69\x6E\x6B","\x61\x75\x74\x6F\x73\x69\x7A\x65","\x62\x65\x67\x69\x6E\x55\x70\x64\x61\x74\x65","\x67\x65\x74\x4D\x6F\x64\x65\x6C","\x6C\x65\x6E\x67\x74\x68","\x67\x65\x74\x43\x68\x69\x6C\x64\x43\x6F\x75\x6E\x74","\x75\x70\x64\x61\x74\x65\x47\x72\x6F\x75\x70\x42\x6F\x75\x6E\x64\x73","\x75\x70\x64\x61\x74\x65\x43\x65\x6C\x6C\x53\x69\x7A\x65","\x65\x6E\x64\x55\x70\x64\x61\x74\x65","\x77\x6F\x72\x64\x57\x72\x61\x70","\x67\x65\x74\x53\x74\x61\x74\x65","\x67\x65\x74\x56\x69\x65\x77","\x77\x72\x61\x70","\x53\x54\x59\x4C\x45\x5F\x57\x48\x49\x54\x45\x5F\x53\x50\x41\x43\x45","\x73\x74\x79\x6C\x65","\x73\x65\x74\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65\x73","\x72\x6F\x74\x61\x74\x69\x6F\x6E","\x30","\x53\x54\x59\x4C\x45\x5F\x52\x4F\x54\x41\x54\x49\x4F\x4E","\x20\x28","\x20\x30\x2D\x33\x36\x30\x29","\x74\x69\x6C\x74","\x69\x73\x56\x65\x72\x74\x65\x78","\x67\x65\x74\x43\x65\x6C\x6C\x47\x65\x6F\x6D\x65\x74\x72\x79","\x63\x6C\x6F\x6E\x65","\x78","\x77\x69\x64\x74\x68","\x68\x65\x69\x67\x68\x74","\x79","\x73\x65\x74\x47\x65\x6F\x6D\x65\x74\x72\x79","\x76\x69\x65\x77","\x53\x54\x59\x4C\x45\x5F\x44\x49\x52\x45\x43\x54\x49\x4F\x4E","\x65\x61\x73\x74","\x73\x6F\x75\x74\x68","\x77\x65\x73\x74","\x6E\x6F\x72\x74\x68","\x43\x74\x72\x6C\x2B\x52","\x61\x63\x74\x75\x61\x6C\x53\x69\x7A\x65","\x7A\x6F\x6F\x6D\x54\x6F","\x7A\x6F\x6F\x6D\x49\x6E","\x41\x64\x64","\x7A\x6F\x6F\x6D\x4F\x75\x74","\x53\x75\x62\x74\x72\x61\x63\x74","\x66\x69\x74\x57\x69\x6E\x64\x6F\x77","\x66\x69\x74","\x66\x69\x74\x50\x61\x67\x65","\x70\x61\x67\x65\x56\x69\x73\x69\x62\x6C\x65","\x66\x75\x6E\x63\x74","\x70\x61\x67\x65\x56\x69\x65\x77","\x70\x61\x67\x65\x46\x6F\x72\x6D\x61\x74","\x70\x61\x67\x65\x53\x63\x61\x6C\x65","\x63\x6C\x69\x65\x6E\x74\x57\x69\x64\x74\x68","\x63\x6C\x69\x65\x6E\x74\x48\x65\x69\x67\x68\x74","\x6D\x69\x6E","\x66\x6C\x6F\x6F\x72","\x73\x63\x72\x6F\x6C\x6C\x4C\x65\x66\x74","\x74\x72\x61\x6E\x73\x6C\x61\x74\x65","\x6D\x61\x78","\x72\x6F\x75\x6E\x64","\x73\x63\x72\x6F\x6C\x6C\x54\x6F\x70","\x66\x69\x74\x50\x61\x67\x65\x57\x69\x64\x74\x68","\x63\x75\x73\x74\x6F\x6D\x5A\x6F\x6F\x6D","\x63\x75\x73\x74\x6F\x6D","\x20\x28\x25\x29","\x67\x65\x74\x53\x63\x61\x6C\x65","\x67\x72\x69\x64","\x69\x73\x47\x72\x69\x64\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x47\x72\x69\x64\x45\x6E\x61\x62\x6C\x65\x64","\x75\x70\x64\x61\x74\x65\x47\x72\x61\x70\x68\x43\x6F\x6D\x70\x6F\x6E\x65\x6E\x74\x73","\x43\x74\x72\x6C\x2B\x53\x68\x69\x66\x74\x2B\x47","\x73\x65\x74\x54\x6F\x67\x67\x6C\x65\x41\x63\x74\x69\x6F\x6E","\x73\x65\x74\x53\x65\x6C\x65\x63\x74\x65\x64\x43\x61\x6C\x6C\x62\x61\x63\x6B","\x67\x75\x69\x64\x65\x73","\x67\x75\x69\x64\x65\x73\x45\x6E\x61\x62\x6C\x65\x64","\x67\x72\x61\x70\x68\x48\x61\x6E\x64\x6C\x65\x72","\x74\x6F\x6F\x6C\x74\x69\x70\x73","\x69\x73\x45\x6E\x61\x62\x6C\x65\x64","\x74\x6F\x6F\x6C\x74\x69\x70\x48\x61\x6E\x64\x6C\x65\x72","\x73\x65\x74\x45\x6E\x61\x62\x6C\x65\x64","\x6E\x61\x76\x69\x67\x61\x74\x69\x6F\x6E","\x66\x6F\x6C\x64\x69\x6E\x67\x45\x6E\x61\x62\x6C\x65\x64","\x72\x65\x76\x61\x6C\x69\x64\x61\x74\x65","\x73\x63\x72\x6F\x6C\x6C\x62\x61\x72\x73","\x73\x63\x61\x6C\x65","\x73\x65\x74\x54\x72\x61\x6E\x73\x6C\x61\x74\x65","\x73\x69\x7A\x65\x44\x69\x64\x43\x68\x61\x6E\x67\x65","\x6F\x76\x65\x72\x66\x6C\x6F\x77","\x61\x75\x74\x6F","\x70\x61\x67\x65\x42\x72\x65\x61\x6B\x73\x56\x69\x73\x69\x62\x6C\x65","\x70\x72\x65\x66\x65\x72\x50\x61\x67\x65\x53\x69\x7A\x65","\x76\x61\x6C\x69\x64\x61\x74\x65","\x75\x70\x64\x61\x74\x65","\x6F\x75\x74\x6C\x69\x6E\x65","\x68\x61\x73\x53\x63\x72\x6F\x6C\x6C\x62\x61\x72\x73","\x63\x6F\x6E\x6E\x65\x63\x74","\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x48\x61\x6E\x64\x6C\x65\x72","\x73\x65\x74\x43\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65","\x43\x74\x72\x6C\x2B\x51","\x63\x6F\x70\x79\x43\x6F\x6E\x6E\x65\x63\x74","\x69\x73\x43\x72\x65\x61\x74\x65\x54\x61\x72\x67\x65\x74","\x73\x65\x74\x43\x72\x65\x61\x74\x65\x54\x61\x72\x67\x65\x74","\x68\x65\x6C\x70","\x6C\x61\x6E\x67\x75\x61\x67\x65","\x69\x73\x4C\x61\x6E\x67\x75\x61\x67\x65\x53\x75\x70\x70\x6F\x72\x74\x65\x64","\x5F","\x2F\x68\x65\x6C\x70","\x2E\x68\x74\x6D\x6C","\x61\x62\x6F\x75\x74","\x20\x43\x61\x6C\x6C\x79\x20\x53\x71\x75\x61\x72\x65","\x46\x31","\x74\x6F\x67\x67\x6C\x65\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65\x46\x6C\x61\x67\x73","\x62\x6F\x6C\x64","\x69\x74\x61\x6C\x69\x63","\x75\x6E\x64\x65\x72\x6C\x69\x6E\x65","\x73\x68\x61\x64\x6F\x77","\x74\x6F\x67\x67\x6C\x65\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65\x73","\x64\x61\x73\x68\x65\x64","\x72\x6F\x75\x6E\x64\x65\x64","\x63\x75\x72\x76\x65\x64","\x29","\x67\x65\x74\x53\x74\x79\x6C\x65","\x73\x65\x74\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65","\x73\x65\x74\x41\x73\x44\x65\x66\x61\x75\x6C\x74\x45\x64\x67\x65","\x73\x65\x74\x44\x65\x66\x61\x75\x6C\x74\x45\x64\x67\x65","\x61\x64\x64\x57\x61\x79\x70\x6F\x69\x6E\x74","\x69\x73\x45\x64\x67\x65","\x67\x65\x74\x48\x61\x6E\x64\x6C\x65\x72","\x73\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73\x48\x61\x6E\x64\x6C\x65\x72","\x67\x65\x74\x50\x61\x72\x65\x6E\x74","\x73\x74\x61\x74\x65","\x74\x72\x69\x67\x67\x65\x72\x58","\x70\x61\x6E\x6E\x69\x6E\x67\x48\x61\x6E\x64\x6C\x65\x72","\x74\x72\x69\x67\x67\x65\x72\x59","\x61\x64\x64\x50\x6F\x69\x6E\x74\x41\x74","\x72\x65\x6D\x6F\x76\x65\x57\x61\x79\x70\x6F\x69\x6E\x74","\x68\x61\x6E\x64\x6C\x65\x72","\x69\x6E\x64\x65\x78","\x72\x65\x6D\x6F\x76\x65\x50\x6F\x69\x6E\x74","\x69\x6D\x61\x67\x65","\x67\x65\x74\x47\x72\x69\x64\x53\x69\x7A\x65","\x67\x65\x74\x44\x65\x66\x61\x75\x6C\x74\x50\x61\x72\x65\x6E\x74","\x69\x6E\x73\x65\x72\x74\x56\x65\x72\x74\x65\x78","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x6F\x75\x6E\x74","\x67\x65\x74\x47\x65\x6F\x6D\x65\x74\x72\x79","\x73\x63\x72\x6F\x6C\x6C\x43\x65\x6C\x6C\x54\x6F\x56\x69\x73\x69\x62\x6C\x65","\x53\x54\x59\x4C\x45\x5F\x49\x4D\x41\x47\x45","\x75\x72\x6C","\x6F\x6E\x6C\x6F\x61\x64","\x6F\x6E\x65\x72\x72\x6F\x72","\x66\x69\x6C\x65\x4E\x6F\x74\x46\x6F\x75\x6E\x64","\x61\x6C\x65\x72\x74","\x73\x72\x63","\x63\x61\x6C\x6C","\x6C\x61\x62\x65\x6C","\x65\x6E\x61\x62\x6C\x65\x64","\x69\x63\x6F\x6E\x43\x6C\x73","\x73\x68\x6F\x72\x74\x63\x75\x74","\x65\x78\x74\x65\x6E\x64","\x73\x74\x61\x74\x65\x43\x68\x61\x6E\x67\x65\x64","\x66\x69\x72\x65\x45\x76\x65\x6E\x74","\x74\x6F\x67\x67\x6C\x65\x41\x63\x74\x69\x6F\x6E","\x73\x65\x6C\x65\x63\x74\x65\x64\x43\x61\x6C\x6C\x62\x61\x63\x6B","\x69\x73\x53\x65\x6C\x65\x63\x74\x65\x64"];_0x7982[0];function Actions(_0x74c8x2){this[_0x7982[1]]=_0x74c8x2;this[_0x7982[2]]= new Object();this[_0x7982[3]]()}Actions[_0x7982[4]][_0x7982[3]]=function(){var _0x74c8x3=this[_0x7982[1]];var _0x74c8x4=_0x74c8x3[_0x7982[5]];var _0x74c8x5=_0x74c8x4[_0x7982[6]];this[_0x7982[10]](_0x7982[7],function(){_0x74c8x3[_0x7982[9]]( new NewDialog(_0x74c8x3)[_0x7982[8]],300,180,true,true)});this[_0x7982[10]](_0x7982[11],function(){_0x74c8x3[_0x7982[9]]( new OpenDialog(_0x74c8x3)[_0x7982[8]],300,180,true,true)});this[_0x7982[10]](_0x7982[12],function(){_0x74c8x3[_0x7982[13]](false)},null,null,_0x7982[14]);this[_0x7982[10]](_0x7982[15],function(){_0x74c8x3[_0x7982[13]](true)},null,null,_0x7982[16]);this[_0x7982[10]](_0x7982[17],function(){_0x74c8x3[_0x7982[18]](false)},null,null,_0x7982[19]);this[_0x7982[10]](_0x7982[20],function(){_0x74c8x3[_0x7982[9]]( new VariableDialog(_0x74c8x3)[_0x7982[8]],300,180,true,true)});this[_0x7982[10]](_0x7982[21],function(){_0x74c8x3[_0x7982[9]]( new ImportDialog(_0x74c8x3)[_0x7982[8]],300,200,true,true)});this[_0x7982[10]](_0x7982[22],function(){_0x74c8x3[_0x7982[9]]( new ExportDialog(_0x74c8x3)[_0x7982[8]],300,200,true,true)},null,null,_0x7982[23]);this[_0x7982[28]](_0x7982[24], new Action(mxResources[_0x7982[26]](_0x7982[25]),mxUtils[_0x7982[27]](this,function(){this[_0x7982[1]][_0x7982[9]]( new EditFileDialog(_0x74c8x3)[_0x7982[8]],620,420,true,true)})));this[_0x7982[10]](_0x7982[29],function(){_0x74c8x3[_0x7982[9]]( new RenameDialog(_0x74c8x3)[_0x7982[8]],300,180,true,true)});this[_0x7982[10]](_0x7982[30],function(){mxUtils[_0x7982[31]](_0x74c8x5)},null,_0x7982[32],_0x7982[33]);this[_0x7982[10]](_0x7982[34],function(){mxUtils[_0x7982[35]](_0x74c8x5,null,10,10)});this[_0x7982[10]](_0x7982[36],function(){_0x74c8x4[_0x7982[37]][_0x7982[36]]()},null,_0x7982[38],_0x7982[39]);this[_0x7982[10]](_0x7982[40],function(){_0x74c8x4[_0x7982[37]][_0x7982[40]]()},null,_0x7982[41],_0x7982[42]);this[_0x7982[10]](_0x7982[43],function(){mxClipboard[_0x7982[43]](_0x74c8x5)},null,_0x7982[44],_0x7982[45]);this[_0x7982[10]](_0x7982[46],function(){mxClipboard[_0x7982[46]](_0x74c8x5)},null,_0x7982[47],_0x7982[48]);this[_0x7982[10]](_0x7982[49],function(){mxClipboard[_0x7982[49]](_0x74c8x5)},false,_0x7982[50],_0x7982[51]);this[_0x7982[10]](_0x7982[52],function(){_0x74c8x5[_0x7982[53]]()},null,null,_0x7982[54]);this[_0x7982[10]](_0x7982[55],function(){var _0x74c8x6=_0x74c8x5[_0x7982[56]];_0x74c8x5[_0x7982[59]](_0x74c8x5[_0x7982[58]](_0x74c8x5[_0x7982[57]](),_0x74c8x6,_0x74c8x6,true))},null,null,_0x7982[60]);this[_0x7982[10]](_0x7982[61],function(){_0x74c8x5[_0x7982[61]]()},null,null,_0x7982[62]);this[_0x7982[10]](_0x7982[63],function(){_0x74c8x5[_0x7982[63]]()},null,null,_0x7982[64]);this[_0x7982[10]](_0x7982[65],function(){_0x74c8x5[_0x7982[65]]()},null,null,_0x7982[66]);this[_0x7982[10]](_0x7982[67],function(){_0x74c8x5[_0x7982[67]]()},null,null,_0x7982[68]);this[_0x7982[10]](_0x7982[69],function(){_0x74c8x5[_0x7982[69]]()},null,null,_0x7982[70]);this[_0x7982[10]](_0x7982[71],function(){_0x74c8x5[_0x7982[71]]()},null,null,_0x7982[72]);this[_0x7982[10]](_0x7982[73],function(){_0x74c8x5[_0x7982[74]](false)},null,null,_0x7982[75]);this[_0x7982[10]](_0x7982[76],function(){_0x74c8x5[_0x7982[74]](true)},null,null,_0x7982[77]);this[_0x7982[10]](_0x7982[78],function(){_0x74c8x5[_0x7982[79]](false)},null,null,_0x7982[80]);this[_0x7982[10]](_0x7982[81],function(){_0x74c8x5[_0x7982[79]](true)},null,null,_0x7982[82]);this[_0x7982[10]](_0x7982[83],function(){_0x74c8x5[_0x7982[85]](_0x74c8x5[_0x7982[84]](null,0))},null,null,_0x7982[86]);this[_0x7982[10]](_0x7982[87],function(){_0x74c8x5[_0x7982[59]](_0x74c8x5[_0x7982[88]]())},null,null,_0x7982[89]);this[_0x7982[10]](_0x7982[90],function(){_0x74c8x5[_0x7982[91]]()});this[_0x7982[10]](_0x7982[92],function(){var _0x74c8x7=_0x74c8x5[_0x7982[93]]();var _0x74c8x8=_0x74c8x5[_0x7982[94]](_0x74c8x7);if(_0x74c8x8==null){_0x74c8x8=_0x7982[95]};_0x74c8x8=mxUtils[_0x7982[97]](mxResources[_0x7982[26]](_0x7982[96]),_0x74c8x8);if(_0x74c8x8!=null){_0x74c8x5[_0x7982[98]](_0x74c8x7,_0x74c8x8)}});this[_0x7982[10]](_0x7982[99],function(){var _0x74c8x7=_0x74c8x5[_0x7982[93]]();var _0x74c8x8=_0x74c8x5[_0x7982[94]](_0x74c8x7);if(_0x74c8x8!=null){window[_0x7982[11]](_0x74c8x8)}});this[_0x7982[10]](_0x7982[100],function(){var _0x74c8x9=_0x74c8x5[_0x7982[57]]();if(_0x74c8x9!=null){_0x74c8x5[_0x7982[102]]()[_0x7982[101]]();try{for(var _0x74c8xa=0;_0x74c8xa<_0x74c8x9[_0x7982[103]];_0x74c8xa++){var _0x74c8x7=_0x74c8x9[_0x74c8xa];if(_0x74c8x5[_0x7982[102]]()[_0x7982[104]](_0x74c8x7)){_0x74c8x5[_0x7982[105]]([_0x74c8x7],20)}else {_0x74c8x5[_0x7982[106]](_0x74c8x7)}}}finally{_0x74c8x5[_0x7982[102]]()[_0x7982[107]]()}}});this[_0x7982[10]](_0x7982[108],function(){var _0x74c8xb=_0x74c8x5[_0x7982[110]]()[_0x7982[109]](_0x74c8x5[_0x7982[93]]());var _0x74c8xc=_0x7982[111];if(_0x74c8xb!=null&&_0x74c8xb[_0x7982[113]][mxConstants[_0x7982[112]]]==_0x7982[111]){_0x74c8xc=null};_0x74c8x5[_0x7982[114]](mxConstants.STYLE_WHITE_SPACE,_0x74c8xc)});this[_0x7982[10]](_0x7982[115],function(){var _0x74c8xc=_0x7982[116];var _0x74c8xb=_0x74c8x5[_0x7982[110]]()[_0x7982[109]](_0x74c8x5[_0x7982[93]]());if(_0x74c8xb!=null){_0x74c8xc=_0x74c8xb[_0x7982[113]][mxConstants[_0x7982[117]]]||_0x74c8xc};_0x74c8xc=mxUtils[_0x7982[97]](mxResources[_0x7982[26]](_0x7982[96])+_0x7982[118]+mxResources[_0x7982[26]](_0x7982[115])+_0x7982[119],_0x74c8xc);if(_0x74c8xc!=null){_0x74c8x5[_0x7982[114]](mxConstants.STYLE_ROTATION,_0x74c8xc)}});this[_0x7982[10]](_0x7982[120],function(){var _0x74c8x9=_0x74c8x5[_0x7982[57]]();if(_0x74c8x9!=null){_0x74c8x5[_0x7982[102]]()[_0x7982[101]]();try{for(var _0x74c8xa=0;_0x74c8xa<_0x74c8x9[_0x7982[103]];_0x74c8xa++){var _0x74c8x7=_0x74c8x9[_0x74c8xa];if(_0x74c8x5[_0x7982[102]]()[_0x7982[121]](_0x74c8x7)&&_0x74c8x5[_0x7982[102]]()[_0x7982[104]](_0x74c8x7)==0){var _0x74c8xd=_0x74c8x5[_0x7982[122]](_0x74c8x7);if(_0x74c8xd!=null){_0x74c8xd=_0x74c8xd[_0x7982[123]]();_0x74c8xd[_0x7982[124]]+=_0x74c8xd[_0x7982[125]]/2-_0x74c8xd[_0x7982[126]]/2;_0x74c8xd[_0x7982[127]]+=_0x74c8xd[_0x7982[126]]/2-_0x74c8xd[_0x7982[125]]/2;var _0x74c8xe=_0x74c8xd[_0x7982[125]];_0x74c8xd[_0x7982[125]]=_0x74c8xd[_0x7982[126]];_0x74c8xd[_0x7982[126]]=_0x74c8xe;_0x74c8x5[_0x7982[102]]()[_0x7982[128]](_0x74c8x7,_0x74c8xd);var _0x74c8xb=_0x74c8x5[_0x7982[129]][_0x7982[109]](_0x74c8x7);if(_0x74c8xb!=null){var _0x74c8xf=_0x74c8xb[_0x7982[113]][mxConstants[_0x7982[130]]]||_0x7982[131];if(_0x74c8xf==_0x7982[131]){_0x74c8xf=_0x7982[132]}else {if(_0x74c8xf==_0x7982[132]){_0x74c8xf=_0x7982[133]}else {if(_0x74c8xf==_0x7982[133]){_0x74c8xf=_0x7982[134]}else {if(_0x74c8xf==_0x7982[134]){_0x74c8xf=_0x7982[131]}}}};_0x74c8x5[_0x7982[114]](mxConstants.STYLE_DIRECTION,_0x74c8xf,[_0x74c8x7])}}}}}finally{_0x74c8x5[_0x7982[102]]()[_0x7982[107]]()}}},null,null,_0x7982[135]);this[_0x7982[10]](_0x7982[136],function(){_0x74c8x5[_0x7982[137]](1)});this[_0x7982[10]](_0x7982[138],function(){_0x74c8x5[_0x7982[138]]()},null,null,_0x7982[139]);this[_0x7982[10]](_0x7982[140],function(){_0x74c8x5[_0x7982[140]]()},null,null,_0x7982[141]);this[_0x7982[10]](_0x7982[142],function(){_0x74c8x5[_0x7982[143]]()});this[_0x7982[10]](_0x7982[144],mxUtils[_0x7982[27]](this,function(){if(!_0x74c8x5[_0x7982[145]]){this[_0x7982[26]](_0x7982[147])[_0x7982[146]]()};var _0x74c8x10=_0x74c8x5[_0x7982[148]];var _0x74c8x11=_0x74c8x5[_0x7982[149]];var _0x74c8x12=_0x74c8x5[_0x7982[8]][_0x7982[150]]-20;var _0x74c8x13=_0x74c8x5[_0x7982[8]][_0x7982[151]]-20;var _0x74c8x14=Math[_0x7982[153]](100*Math[_0x7982[152]](_0x74c8x12/_0x74c8x10[_0x7982[125]]/_0x74c8x11,_0x74c8x13/_0x74c8x10[_0x7982[126]]/_0x74c8x11))/100;_0x74c8x5[_0x7982[137]](_0x74c8x14);_0x74c8x5[_0x7982[8]][_0x7982[154]]=Math[_0x7982[157]](_0x74c8x5[_0x7982[129]][_0x7982[155]][_0x7982[124]]*_0x74c8x14-Math[_0x7982[156]](10,(_0x74c8x5[_0x7982[8]][_0x7982[150]]-_0x74c8x10[_0x7982[125]]*_0x74c8x11*_0x74c8x14)/2));_0x74c8x5[_0x7982[8]][_0x7982[158]]=Math[_0x7982[157]](_0x74c8x5[_0x7982[129]][_0x7982[155]][_0x7982[127]]*_0x74c8x14-Math[_0x7982[156]](10,(_0x74c8x5[_0x7982[8]][_0x7982[151]]-_0x74c8x10[_0x7982[126]]*_0x74c8x11*_0x74c8x14)/2))}));this[_0x7982[10]](_0x7982[159],mxUtils[_0x7982[27]](this,function(){if(!_0x74c8x5[_0x7982[145]]){this[_0x7982[26]](_0x7982[147])[_0x7982[146]]()};var _0x74c8x10=_0x74c8x5[_0x7982[148]];var _0x74c8x11=_0x74c8x5[_0x7982[149]];var _0x74c8x12=_0x74c8x5[_0x7982[8]][_0x7982[150]]-20;var _0x74c8x14=Math[_0x7982[153]](100*_0x74c8x12/_0x74c8x10[_0x7982[125]]/_0x74c8x11)/100;_0x74c8x5[_0x7982[137]](_0x74c8x14);_0x74c8x5[_0x7982[8]][_0x7982[154]]=Math[_0x7982[157]](_0x74c8x5[_0x7982[129]][_0x7982[155]][_0x7982[124]]*_0x74c8x14-Math[_0x7982[156]](10,(_0x74c8x5[_0x7982[8]][_0x7982[150]]-_0x74c8x10[_0x7982[125]]*_0x74c8x11*_0x74c8x14)/2));_0x74c8x5[_0x7982[8]][_0x7982[158]]=Math[_0x7982[157]](_0x74c8x5[_0x7982[129]][_0x7982[155]][_0x7982[127]]*_0x74c8x14-Math[_0x7982[156]](10,(_0x74c8x5[_0x7982[8]][_0x7982[151]]-_0x74c8x10[_0x7982[126]]*_0x74c8x11*_0x74c8x14)/2))}));this[_0x7982[28]](_0x7982[160], new Action(mxResources[_0x7982[26]](_0x7982[161]),function(){var _0x74c8xc=mxUtils[_0x7982[97]](mxResources[_0x7982[26]](_0x7982[96])+_0x7982[162],parseInt(_0x74c8x5[_0x7982[110]]()[_0x7982[163]]()*100));if(_0x74c8xc!=null&&_0x74c8xc[_0x7982[103]]>0&&!isNaN(parseInt(_0x74c8xc))){_0x74c8x5[_0x7982[137]](parseInt(_0x74c8xc)/100)}}));var _0x74c8x15=null;_0x74c8x15=this[_0x7982[10]](_0x7982[164],function(){_0x74c8x5[_0x7982[166]](!_0x74c8x5[_0x7982[165]]());_0x74c8x4[_0x7982[167]]()},null,null,_0x7982[168]);_0x74c8x15[_0x7982[169]](true);_0x74c8x15[_0x7982[170]](function(){return _0x74c8x5[_0x7982[165]]()});_0x74c8x15=this[_0x7982[10]](_0x7982[171],function(){_0x74c8x5[_0x7982[173]][_0x7982[172]]=!_0x74c8x5[_0x7982[173]][_0x7982[172]]});_0x74c8x15[_0x7982[169]](true);_0x74c8x15[_0x7982[170]](function(){return _0x74c8x5[_0x7982[173]][_0x7982[172]]});_0x74c8x15=this[_0x7982[10]](_0x7982[174],function(){_0x74c8x5[_0x7982[176]][_0x7982[177]](!_0x74c8x5[_0x7982[176]][_0x7982[175]]())});_0x74c8x15[_0x7982[169]](true);_0x74c8x15[_0x7982[170]](function(){return _0x74c8x5[_0x7982[176]][_0x7982[175]]()});_0x74c8x15=this[_0x7982[10]](_0x7982[178],function(){_0x74c8x5[_0x7982[179]]=!_0x74c8x5[_0x7982[179]];_0x74c8x5[_0x7982[129]][_0x7982[180]]()});_0x74c8x15[_0x7982[169]](true);_0x74c8x15[_0x7982[170]](function(){return _0x74c8x5[_0x7982[179]]});_0x74c8x15=this[_0x7982[10]](_0x7982[181],function(){_0x74c8x5[_0x7982[181]]=!_0x74c8x5[_0x7982[181]];_0x74c8x4[_0x7982[167]]();if(!_0x74c8x5[_0x7982[181]]){var _0x74c8x16=_0x74c8x5[_0x7982[129]][_0x7982[155]];_0x74c8x5[_0x7982[129]][_0x7982[183]](_0x74c8x16[_0x7982[124]]-_0x74c8x5[_0x7982[8]][_0x7982[154]]/_0x74c8x5[_0x7982[129]][_0x7982[182]],_0x74c8x16[_0x7982[127]]-_0x74c8x5[_0x7982[8]][_0x7982[158]]/_0x74c8x5[_0x7982[129]][_0x7982[182]]);_0x74c8x5[_0x7982[8]][_0x7982[154]]=0;_0x74c8x5[_0x7982[8]][_0x7982[158]]=0;_0x74c8x5[_0x7982[184]]()}else {var _0x74c8x17=_0x74c8x5[_0x7982[129]][_0x7982[155]][_0x7982[124]];var _0x74c8x18=_0x74c8x5[_0x7982[129]][_0x7982[155]][_0x7982[127]];_0x74c8x5[_0x7982[129]][_0x7982[155]][_0x7982[124]]=0;_0x74c8x5[_0x7982[129]][_0x7982[155]][_0x7982[127]]=0;_0x74c8x5[_0x7982[184]]();_0x74c8x5[_0x7982[8]][_0x7982[154]]-=Math[_0x7982[157]](_0x74c8x17*_0x74c8x5[_0x7982[129]][_0x7982[182]]);_0x74c8x5[_0x7982[8]][_0x7982[158]]-=Math[_0x7982[157]](_0x74c8x18*_0x74c8x5[_0x7982[129]][_0x7982[182]])}},!mxClient.IS_TOUCH);_0x74c8x15[_0x7982[169]](true);_0x74c8x15[_0x7982[170]](function(){return _0x74c8x5[_0x7982[8]][_0x7982[113]][_0x7982[185]]==_0x7982[186]});_0x74c8x15=this[_0x7982[10]](_0x7982[147],mxUtils[_0x7982[27]](this,function(){_0x74c8x5[_0x7982[145]]=!_0x74c8x5[_0x7982[145]];_0x74c8x5[_0x7982[187]]=_0x74c8x5[_0x7982[145]];_0x74c8x5[_0x7982[188]]=_0x74c8x5[_0x7982[187]];_0x74c8x5[_0x7982[129]][_0x7982[189]]();_0x74c8x5[_0x7982[184]]();_0x74c8x4[_0x7982[167]]();_0x74c8x4[_0x7982[191]][_0x7982[190]]();if(mxUtils[_0x7982[192]](_0x74c8x5[_0x7982[8]])){if(_0x74c8x5[_0x7982[145]]){_0x74c8x5[_0x7982[8]][_0x7982[154]]-=20;_0x74c8x5[_0x7982[8]][_0x7982[158]]-=20}else {_0x74c8x5[_0x7982[8]][_0x7982[154]]+=20;_0x74c8x5[_0x7982[8]][_0x7982[158]]+=20}}}));_0x74c8x15[_0x7982[169]](true);_0x74c8x15[_0x7982[170]](function(){return _0x74c8x5[_0x7982[145]]});_0x74c8x15=this[_0x7982[10]](_0x7982[193],function(){_0x74c8x5[_0x7982[195]](!_0x74c8x5[_0x7982[194]][_0x7982[175]]())},null,null,_0x7982[196]);_0x74c8x15[_0x7982[169]](true);_0x74c8x15[_0x7982[170]](function(){return _0x74c8x5[_0x7982[194]][_0x7982[175]]()});_0x74c8x15=this[_0x7982[10]](_0x7982[197],function(){_0x74c8x5[_0x7982[194]][_0x7982[199]](!_0x74c8x5[_0x7982[194]][_0x7982[198]]())});_0x74c8x15[_0x7982[169]](true);_0x74c8x15[_0x7982[170]](function(){return _0x74c8x5[_0x7982[194]][_0x7982[198]]()});this[_0x7982[10]](_0x7982[200],function(){var _0x74c8x19=_0x7982[95];if(mxResources[_0x7982[202]](mxClient[_0x7982[201]])){_0x74c8x19=_0x7982[203]+mxClient[_0x7982[201]]};window[_0x7982[11]](RESOURCES_PATH+_0x7982[204]+_0x74c8x19+_0x7982[205])});this[_0x7982[28]](_0x7982[206], new Action(mxResources[_0x7982[26]](_0x7982[206])+_0x7982[207],function(){_0x74c8x3[_0x7982[9]]( new AboutDialog(_0x74c8x3)[_0x7982[8]],320,280,true,true)},null,null,_0x7982[208]));var _0x74c8x1a=mxUtils[_0x7982[27]](this,function(_0x74c8x1b,_0x74c8x1c){this[_0x7982[10]](_0x74c8x1b,function(){_0x74c8x5[_0x7982[209]](mxConstants.STYLE_FONTSTYLE,_0x74c8x1c)})});_0x74c8x1a(_0x7982[210],mxConstants.FONT_BOLD);_0x74c8x1a(_0x7982[211],mxConstants.FONT_ITALIC);_0x74c8x1a(_0x7982[212],mxConstants.FONT_UNDERLINE);this[_0x7982[10]](_0x7982[213],function(){_0x74c8x5[_0x7982[214]](mxConstants.STYLE_SHADOW)});this[_0x7982[10]](_0x7982[215],function(){_0x74c8x5[_0x7982[214]](mxConstants.STYLE_DASHED)});this[_0x7982[10]](_0x7982[216],function(){_0x74c8x5[_0x7982[214]](mxConstants.STYLE_ROUNDED)});this[_0x7982[10]](_0x7982[217],function(){_0x74c8x5[_0x7982[214]](mxConstants.STYLE_CURVED)});this[_0x7982[10]](_0x7982[113],function(){var _0x74c8x9=_0x74c8x5[_0x7982[57]]();if(_0x74c8x9!=null&&_0x74c8x9[_0x7982[103]]>0){var _0x74c8x1d=_0x74c8x5[_0x7982[102]]();var _0x74c8x1c=mxUtils[_0x7982[97]](mxResources[_0x7982[26]](_0x7982[96])+_0x7982[118]+mxResources[_0x7982[26]](_0x7982[113])+_0x7982[218],_0x74c8x1d[_0x7982[219]](_0x74c8x9[0])||_0x7982[95]);if(_0x74c8x1c!=null){_0x74c8x5[_0x7982[220]](_0x74c8x1c,_0x74c8x9)}}});this[_0x7982[10]](_0x7982[221],function(){_0x74c8x5[_0x7982[222]](_0x74c8x5[_0x7982[93]]())});this[_0x7982[10]](_0x7982[223],function(){var _0x74c8x7=_0x74c8x5[_0x7982[93]]();if(_0x74c8x7!=null&&_0x74c8x5[_0x7982[102]]()[_0x7982[224]](_0x74c8x7)){var _0x74c8x1e=_0x74c8x4[_0x7982[6]][_0x7982[226]][_0x7982[225]](_0x74c8x7);if(_0x74c8x1e instanceof mxEdgeHandler){var _0x74c8x16=_0x74c8x5[_0x7982[129]][_0x7982[155]];var _0x74c8x6=_0x74c8x5[_0x7982[129]][_0x7982[182]];var _0x74c8x17=_0x74c8x16[_0x7982[124]];var _0x74c8x18=_0x74c8x16[_0x7982[127]];var _0x74c8x1f=_0x74c8x5[_0x7982[102]]()[_0x7982[227]](_0x74c8x7);var _0x74c8x20=_0x74c8x5[_0x7982[122]](_0x74c8x1f);if(_0x74c8x5[_0x7982[102]]()[_0x7982[121]](_0x74c8x1f)&&_0x74c8x20!=null){_0x74c8x17+=_0x74c8x20[_0x7982[124]];_0x74c8x18+=_0x74c8x20[_0x7982[127]]};_0x74c8x1e[_0x7982[232]](_0x74c8x1e[_0x7982[228]],_0x74c8x5[_0x7982[230]][_0x7982[229]]/_0x74c8x6-_0x74c8x17,_0x74c8x5[_0x7982[230]][_0x7982[231]]/_0x74c8x6-_0x74c8x18)}}});this[_0x7982[10]](_0x7982[233],function(){var _0x74c8x21=_0x74c8x3[_0x7982[2]][_0x7982[26]](_0x7982[233]);if(_0x74c8x21[_0x7982[234]]!=null){_0x74c8x21[_0x7982[234]][_0x7982[236]](_0x74c8x21[_0x7982[234]][_0x7982[228]],_0x74c8x21[_0x7982[235]])}});this[_0x7982[10]](_0x7982[237],function(){function _0x74c8x22(_0x74c8xc,_0x74c8x23,_0x74c8x24){var _0x74c8x25=null;var _0x74c8x9=_0x74c8x5[_0x7982[57]]();_0x74c8x5[_0x7982[102]]()[_0x7982[101]]();try{if(_0x74c8x9[_0x7982[103]]==0){var _0x74c8x26=_0x74c8x5[_0x7982[238]]();_0x74c8x9=[_0x74c8x5[_0x7982[240]](_0x74c8x5[_0x7982[239]](),null,_0x7982[95],_0x74c8x26,_0x74c8x26,_0x74c8x23,_0x74c8x24)];_0x74c8x25=_0x74c8x9};_0x74c8x5[_0x7982[114]](mxConstants.STYLE_IMAGE,_0x74c8xc,_0x74c8x9);_0x74c8x5[_0x7982[114]](mxConstants.STYLE_SHAPE,_0x7982[237],_0x74c8x9);if(_0x74c8x5[_0x7982[241]]()==1){if(_0x74c8x23!=null&&_0x74c8x24!=null){var _0x74c8x7=_0x74c8x9[0];var _0x74c8xd=_0x74c8x5[_0x7982[102]]()[_0x7982[242]](_0x74c8x7);if(_0x74c8xd!=null){_0x74c8xd=_0x74c8xd[_0x7982[123]]();_0x74c8xd[_0x7982[125]]=_0x74c8x23;_0x74c8xd[_0x7982[126]]=_0x74c8x24;_0x74c8x5[_0x7982[102]]()[_0x7982[128]](_0x74c8x7,_0x74c8xd)}}}}finally{_0x74c8x5[_0x7982[102]]()[_0x7982[107]]()};if(_0x74c8x25!=null){_0x74c8x5[_0x7982[59]](_0x74c8x25);_0x74c8x5[_0x7982[243]](_0x74c8x25[0])}}var _0x74c8xc=_0x7982[95];var _0x74c8xb=_0x74c8x5[_0x7982[110]]()[_0x7982[109]](_0x74c8x5[_0x7982[93]]());if(_0x74c8xb!=null){_0x74c8xc=_0x74c8xb[_0x7982[113]][mxConstants[_0x7982[244]]]||_0x74c8xc};_0x74c8xc=mxUtils[_0x7982[97]](mxResources[_0x7982[26]](_0x7982[96])+_0x7982[118]+mxResources[_0x7982[26]](_0x7982[245])+_0x7982[218],_0x74c8xc);if(_0x74c8xc!=null){if(_0x74c8xc[_0x7982[103]]>0){var _0x74c8x27= new Image();_0x74c8x27[_0x7982[246]]=function(){_0x74c8x22(_0x74c8xc,_0x74c8x27[_0x7982[125]],_0x74c8x27[_0x7982[126]])};_0x74c8x27[_0x7982[247]]=function(){mxUtils[_0x7982[249]](mxResources[_0x7982[26]](_0x7982[248]))};_0x74c8x27[_0x7982[250]]=_0x74c8xc}}})};Actions[_0x7982[4]][_0x7982[10]]=function(_0x74c8x1b,_0x74c8x28,_0x74c8x29,_0x74c8x2a,_0x74c8x2b){return this[_0x7982[28]](_0x74c8x1b, new Action(mxResources[_0x7982[26]](_0x74c8x1b),_0x74c8x28,_0x74c8x29,_0x74c8x2a,_0x74c8x2b))};Actions[_0x7982[4]][_0x7982[28]]=function(_0x74c8x2c,_0x74c8x15){this[_0x7982[2]][_0x74c8x2c]=_0x74c8x15;return _0x74c8x15};Actions[_0x7982[4]][_0x7982[26]]=function(_0x74c8x2c){return this[_0x7982[2]][_0x74c8x2c]};function Action(_0x74c8x2e,_0x74c8x28,_0x74c8x29,_0x74c8x2a,_0x74c8x2b){mxEventSource[_0x7982[251]](this);this[_0x7982[252]]=_0x74c8x2e;this[_0x7982[146]]=_0x74c8x28;this[_0x7982[253]]=(_0x74c8x29!=null)?_0x74c8x29:true;this[_0x7982[254]]=_0x74c8x2a;this[_0x7982[255]]=_0x74c8x2b}mxUtils[_0x7982[256]](Action,mxEventSource);Action[_0x7982[4]][_0x7982[177]]=function(_0x74c8xc){if(this[_0x7982[253]]!=_0x74c8xc){this[_0x7982[253]]=_0x74c8xc;this[_0x7982[258]]( new mxEventObject(_0x7982[257]))}};Action[_0x7982[4]][_0x7982[169]]=function(_0x74c8xc){this[_0x7982[259]]=_0x74c8xc};Action[_0x7982[4]][_0x7982[170]]=function(_0x74c8x28){this[_0x7982[260]]=_0x74c8x28};Action[_0x7982[4]][_0x7982[261]]=function(){return this[_0x7982[260]]()}
\ No newline at end of file
+'use strict';
+/**
+ * $Id: Actions.js,v 1.7 2013-02-14 07:48:01 gaudenz Exp $
+ * Copyright (c) 2006-2012, JGraph Ltd
+ */
+/**
+ * Constructs the actions object for the given UI.
+ */
+function Actions(editorUi) {
+       this.editorUi = editorUi;
+       this.actions = new Object();
+       this.init();
+};
+
+/**
+ * Adds the default actions.
+ */
+Actions.prototype.init = function() {
+       var ui = this.editorUi;
+       var editor = ui.editor;
+       var graph = editor.graph;
+
+       // File actions
+       this.addAction('new', function() {
+               ui.showDialog(new NewDialog(ui).container, 300, 180, true, true);
+       });
+       this.addAction('open', function() {
+               ui.showDialog(new OpenDialog(ui).container, 300, 180, true, true);
+       });
+       this.addAction('save', function() {
+               ui.saveFile(false);
+       }, null, null, 'Ctrl+S');
+       this.addAction('saveAs', function() {
+               ui.saveFile(true);
+       }, null, null, 'Ctrl+Shift-S');
+       this.addAction('publish', function() {
+               ui.publishFile(false);
+       }, null, null, 'Ctrl+Shift+P');
+       this.addAction('variable', function() {
+               ui.showDialog(new VariableDialog(ui).container, 300, 180, true, true);
+       });
+       this.addAction('import', function() {
+               ui.showDialog(new ImportDialog(ui).container, 300, 200, true, true);
+       });
+       this.addAction('export', function() {
+               ui.showDialog(new ExportDialog(ui).container, 300, 200, true, true);
+       }, null, null, 'Ctrl+E');
+       this.put('editFile', new Action(mxResources.get('edit'), mxUtils.bind(this,
+               function() {
+                       this.editorUi.showDialog(new EditFileDialog(ui).container, 620, 420,
+                               true, true);
+               })));
+       this.addAction('rename', function() {
+               ui.showDialog(new RenameDialog(ui).container, 300, 180, true, true);
+       });
+       this.addAction('print', function() {
+               mxUtils.printScreen(graph);
+       }, null, 'sprite-print', 'Ctrl+P');
+       this.addAction('preview', function() {
+               mxUtils.show(graph, null, 10, 10);
+       });
+
+       // Edit actions
+       this.addAction('undo', function() {
+               editor.undoManager.undo();
+       }, null, 'sprite-undo', 'Ctrl+Z');
+       this.addAction('redo', function() {
+               editor.undoManager.redo();
+       }, null, 'sprite-redo', 'Ctrl+Y');
+       this.addAction('cut', function() {
+               mxClipboard.cut(graph);
+       }, null, 'sprite-cut', 'Ctrl+X');
+       this.addAction('copy', function() {
+               mxClipboard.copy(graph);
+       }, null, 'sprite-copy', 'Ctrl+C');
+       this.addAction('paste', function() {
+               mxClipboard.paste(graph);
+       }, false, 'sprite-paste', 'Ctrl+V');
+       this.addAction('delete', function() {
+               graph.removeCells();
+       }, null, null, 'Delete');
+       this.addAction('duplicate', function() {
+               var s = graph.gridSize;
+               graph.setSelectionCells(graph.moveCells(graph.getSelectionCells(), s, s,
+                       true));
+       }, null, null, 'Ctrl+D');
+       this.addAction('selectVertices', function() {
+               graph.selectVertices();
+       }, null, null, 'Ctrl+Shift+V');
+       this.addAction('selectEdges', function() {
+               graph.selectEdges();
+       }, null, null, 'Ctrl+Shift+E');
+       this.addAction('selectAll', function() {
+               graph.selectAll();
+       }, null, null, 'Ctrl+A');
+
+       // Navigation actions
+       this.addAction('home', function() {
+               graph.home();
+       }, null, null, 'Home');
+       this.addAction('exitGroup', function() {
+               graph.exitGroup();
+       }, null, null, 'Page Up');
+       this.addAction('enterGroup', function() {
+               graph.enterGroup();
+       }, null, null, 'Page Down');
+       this.addAction('expand', function() {
+               graph.foldCells(false);
+       }, null, null, 'Enter');
+       this.addAction('collapse', function() {
+               graph.foldCells(true);
+       }, null, null, 'Backspace');
+
+       // Arrange actions
+       this.addAction('toFront', function() {
+               graph.orderCells(false);
+       }, null, null, 'Ctrl+F');
+       this.addAction('toBack', function() {
+               graph.orderCells(true);
+       }, null, null, 'Ctrl+B');
+       this.addAction('group', function() {
+               graph.setSelectionCell(graph.groupCells(null, 0));
+       }, null, null, 'Ctrl+G');
+       this.addAction('ungroup', function() {
+               graph.setSelectionCells(graph.ungroupCells());
+       }, null, null, 'Ctrl+U');
+       this.addAction('removeFromGroup', function() {
+               graph.removeCellsFromParent();
+       });
+       this.addAction('editLink', function() {
+               var cell = graph.getSelectionCell();
+               var link = graph.getLinkForCell(cell);
+
+               if (link == null) {
+                       link = '';
+               }
+
+               link = mxUtils.prompt(mxResources.get('enterValue'), link);
+
+               if (link != null) {
+                       graph.setLinkForCell(cell, link);
+               }
+       });
+       this.addAction('openLink', function() {
+               var cell = graph.getSelectionCell();
+               var link = graph.getLinkForCell(cell);
+
+               if (link != null) {
+                       window.open(link);
+               }
+       });
+       this.addAction('autosize', function() {
+               var cells = graph.getSelectionCells();
+
+               if (cells != null) {
+                       graph.getModel().beginUpdate();
+                       try {
+                               for (var i = 0; i < cells.length; i++) {
+                                       var cell = cells[i];
+
+                                       if (graph.getModel().getChildCount(cell)) {
+                                               graph.updateGroupBounds([cell], 20);
+                                       } else {
+                                               graph.updateCellSize(cell);
+                                       }
+                               }
+                       } finally {
+                               graph.getModel().endUpdate();
+                       }
+               }
+       });
+       this.addAction('wordWrap', function() {
+               var state = graph.getView().getState(graph.getSelectionCell());
+               var value = 'wrap';
+
+               if (state != null && state.style[mxConstants.STYLE_WHITE_SPACE] == 'wrap') {
+                       value = null;
+               }
+
+               graph.setCellStyles(mxConstants.STYLE_WHITE_SPACE, value);
+       });
+       this.addAction('rotation', function() {
+               var value = '0';
+               var state = graph.getView().getState(graph.getSelectionCell());
+
+               if (state != null) {
+                       value = state.style[mxConstants.STYLE_ROTATION] || value;
+               }
+
+               value = mxUtils.prompt(mxResources.get('enterValue') + ' (' +
+                       mxResources.get('rotation') + ' 0-360)', value);
+
+               if (value != null) {
+                       graph.setCellStyles(mxConstants.STYLE_ROTATION, value);
+               }
+       });
+       this.addAction('tilt', function() {
+               var cells = graph.getSelectionCells();
+
+               if (cells != null) {
+                       graph.getModel().beginUpdate();
+                       try {
+                               for (var i = 0; i < cells.length; i++) {
+                                       var cell = cells[i];
+
+                                       if (graph.getModel().isVertex(cell) && graph.getModel().getChildCount(
+                                                       cell) == 0) {
+                                               var geo = graph.getCellGeometry(cell);
+
+                                               if (geo != null) {
+                                                       // Rotates the size and position in the geometry
+                                                       geo = geo.clone();
+                                                       geo.x += geo.width / 2 - geo.height / 2;
+                                                       geo.y += geo.height / 2 - geo.width / 2;
+                                                       var tmp = geo.width;
+                                                       geo.width = geo.height;
+                                                       geo.height = tmp;
+                                                       graph.getModel().setGeometry(cell, geo);
+
+                                                       // Reads the current direction and advances by 90 degrees
+                                                       var state = graph.view.getState(cell);
+
+                                                       if (state != null) {
+                                                               var dir = state.style[mxConstants.STYLE_DIRECTION] || 'east' /*default*/ ;
+
+                                                               if (dir == 'east') {
+                                                                       dir = 'south';
+                                                               } else if (dir == 'south') {
+                                                                       dir = 'west';
+                                                               } else if (dir == 'west') {
+                                                                       dir = 'north';
+                                                               } else if (dir == 'north') {
+                                                                       dir = 'east';
+                                                               }
+
+                                                               graph.setCellStyles(mxConstants.STYLE_DIRECTION, dir, [cell]);
+                                                       }
+                                               }
+                                       }
+                               }
+                       } finally {
+                               graph.getModel().endUpdate();
+                       }
+               }
+       }, null, null, 'Ctrl+R');
+
+       // View actions
+       this.addAction('actualSize', function() {
+               graph.zoomTo(1);
+       });
+       this.addAction('zoomIn', function() {
+               graph.zoomIn();
+       }, null, null, 'Add');
+       this.addAction('zoomOut', function() {
+               graph.zoomOut();
+       }, null, null, 'Subtract');
+       this.addAction('fitWindow', function() {
+               graph.fit();
+       });
+
+       this.addAction('fitPage', mxUtils.bind(this, function() {
+               if (!graph.pageVisible) {
+                       this.get('pageView').funct();
+               }
+
+               var fmt = graph.pageFormat;
+               var ps = graph.pageScale;
+               var cw = graph.container.clientWidth - 20;
+               var ch = graph.container.clientHeight - 20;
+
+               var scale = Math.floor(100 * Math.min(cw / fmt.width / ps, ch / fmt.height /
+                       ps)) / 100;
+               graph.zoomTo(scale);
+
+               graph.container.scrollLeft = Math.round(graph.view.translate.x * scale -
+                       Math.max(10, (graph.container.clientWidth - fmt.width * ps * scale) / 2)
+               );
+               graph.container.scrollTop = Math.round(graph.view.translate.y * scale -
+                       Math.max(10, (graph.container.clientHeight - fmt.height * ps * scale) /
+                               2));
+       }));
+       this.addAction('fitPageWidth', mxUtils.bind(this, function() {
+               if (!graph.pageVisible) {
+                       this.get('pageView').funct();
+               }
+
+               var fmt = graph.pageFormat;
+               var ps = graph.pageScale;
+               var cw = graph.container.clientWidth - 20;
+
+               var scale = Math.floor(100 * cw / fmt.width / ps) / 100;
+               graph.zoomTo(scale);
+
+               graph.container.scrollLeft = Math.round(graph.view.translate.x * scale -
+                       Math.max(10, (graph.container.clientWidth - fmt.width * ps * scale) / 2)
+               );
+               graph.container.scrollTop = Math.round(graph.view.translate.y * scale -
+                       Math.max(10, (graph.container.clientHeight - fmt.height * ps * scale) /
+                               2));
+       }));
+       this.put('customZoom', new Action(mxResources.get('custom'), function() {
+               var value = mxUtils.prompt(mxResources.get('enterValue') + ' (%)',
+                       parseInt(graph.getView().getScale() * 100));
+
+               if (value != null && value.length > 0 && !isNaN(parseInt(value))) {
+                       graph.zoomTo(parseInt(value) / 100);
+               }
+       }));
+
+       // Option actions
+       var action = null;
+       action = this.addAction('grid', function() {
+               graph.setGridEnabled(!graph.isGridEnabled());
+               editor.updateGraphComponents();
+       }, null, null, 'Ctrl+Shift+G');
+       action.setToggleAction(true);
+       action.setSelectedCallback(function() {
+               return graph.isGridEnabled();
+       });
+       action = this.addAction('guides', function() {
+               graph.graphHandler.guidesEnabled = !graph.graphHandler.guidesEnabled;
+       });
+       action.setToggleAction(true);
+       action.setSelectedCallback(function() {
+               return graph.graphHandler.guidesEnabled;
+       });
+       action = this.addAction('tooltips', function() {
+               graph.tooltipHandler.setEnabled(!graph.tooltipHandler.isEnabled());
+       });
+       action.setToggleAction(true);
+       action.setSelectedCallback(function() {
+               return graph.tooltipHandler.isEnabled();
+       });
+       action = this.addAction('navigation', function() {
+               graph.foldingEnabled = !graph.foldingEnabled;
+               graph.view.revalidate();
+       });
+       action.setToggleAction(true);
+       action.setSelectedCallback(function() {
+               return graph.foldingEnabled;
+       });
+       action = this.addAction('scrollbars', function() {
+               graph.scrollbars = !graph.scrollbars;
+               editor.updateGraphComponents();
+
+               if (!graph.scrollbars) {
+                       var t = graph.view.translate;
+                       graph.view.setTranslate(t.x - graph.container.scrollLeft / graph.view.scale,
+                               t.y - graph.container.scrollTop / graph.view.scale);
+                       graph.container.scrollLeft = 0;
+                       graph.container.scrollTop = 0;
+                       graph.sizeDidChange();
+               } else {
+                       var dx = graph.view.translate.x;
+                       var dy = graph.view.translate.y;
+
+                       graph.view.translate.x = 0;
+                       graph.view.translate.y = 0;
+                       graph.sizeDidChange();
+                       graph.container.scrollLeft -= Math.round(dx * graph.view.scale);
+                       graph.container.scrollTop -= Math.round(dy * graph.view.scale);
+               }
+       }, !mxClient.IS_TOUCH);
+       action.setToggleAction(true);
+       action.setSelectedCallback(function() {
+               return graph.container.style.overflow == 'auto';
+       });
+       action = this.addAction('pageView', mxUtils.bind(this, function() {
+               graph.pageVisible = !graph.pageVisible;
+               graph.pageBreaksVisible = graph.pageVisible;
+               graph.preferPageSize = graph.pageBreaksVisible;
+               graph.view.validate();
+               graph.sizeDidChange();
+
+               editor.updateGraphComponents();
+               editor.outline.update();
+
+               if (mxUtils.hasScrollbars(graph.container)) {
+                       if (graph.pageVisible) {
+                               graph.container.scrollLeft -= 20;
+                               graph.container.scrollTop -= 20;
+                       } else {
+                               graph.container.scrollLeft += 20;
+                               graph.container.scrollTop += 20;
+                       }
+               }
+       }));
+       action.setToggleAction(true);
+       action.setSelectedCallback(function() {
+               return graph.pageVisible;
+       });
+       action = this.addAction('connect', function() {
+               graph.setConnectable(!graph.connectionHandler.isEnabled());
+       }, null, null, 'Ctrl+Q');
+       action.setToggleAction(true);
+       action.setSelectedCallback(function() {
+               return graph.connectionHandler.isEnabled();
+       });
+       action = this.addAction('copyConnect', function() {
+               graph.connectionHandler.setCreateTarget(!graph.connectionHandler.isCreateTarget());
+       });
+       action.setToggleAction(true);
+       action.setSelectedCallback(function() {
+               return graph.connectionHandler.isCreateTarget();
+       });
+
+       // Help actions
+       this.addAction('help', function() {
+               var ext = '';
+
+               if (mxResources.isLanguageSupported(mxClient.language)) {
+                       ext = '_' + mxClient.language;
+               }
+
+               window.open(RESOURCES_PATH + '/help' + ext + '.html');
+       });
+       this.put('about', new Action(mxResources.get('about') + ' Cally Square',
+               function() {
+                       ui.showDialog(new AboutDialog(ui).container, 320, 280, true, true);
+               }, null, null, 'F1'));
+
+       // Font style actions
+       var toggleFontStyle = mxUtils.bind(this, function(key, style) {
+               this.addAction(key, function() {
+                       graph.toggleCellStyleFlags(mxConstants.STYLE_FONTSTYLE, style);
+               });
+       });
+
+       toggleFontStyle('bold', mxConstants.FONT_BOLD);
+       toggleFontStyle('italic', mxConstants.FONT_ITALIC);
+       toggleFontStyle('underline', mxConstants.FONT_UNDERLINE);
+
+       // Format actions
+       this.addAction('shadow', function() {
+               graph.toggleCellStyles(mxConstants.STYLE_SHADOW);
+       });
+       this.addAction('dashed', function() {
+               graph.toggleCellStyles(mxConstants.STYLE_DASHED);
+       });
+       this.addAction('rounded', function() {
+               graph.toggleCellStyles(mxConstants.STYLE_ROUNDED);
+       });
+       this.addAction('curved', function() {
+               graph.toggleCellStyles(mxConstants.STYLE_CURVED);
+       });
+       this.addAction('style', function() {
+               var cells = graph.getSelectionCells();
+
+               if (cells != null && cells.length > 0) {
+                       var model = graph.getModel();
+                       var style = mxUtils.prompt(mxResources.get('enterValue') + ' (' +
+                               mxResources.get('style') + ')',
+                               model.getStyle(cells[0]) || '');
+
+                       if (style != null) {
+                               graph.setCellStyle(style, cells);
+                       }
+               }
+       });
+       this.addAction('setAsDefaultEdge', function() {
+               graph.setDefaultEdge(graph.getSelectionCell());
+       });
+       this.addAction('addWaypoint', function() {
+               var cell = graph.getSelectionCell();
+
+               if (cell != null && graph.getModel().isEdge(cell)) {
+                       var handler = editor.graph.selectionCellsHandler.getHandler(cell);
+
+                       if (handler instanceof mxEdgeHandler) {
+                               var t = graph.view.translate;
+                               var s = graph.view.scale;
+                               var dx = t.x;
+                               var dy = t.y;
+
+                               var parent = graph.getModel().getParent(cell);
+                               var pgeo = graph.getCellGeometry(parent);
+
+                               if (graph.getModel().isVertex(parent) && pgeo != null) {
+                                       dx += pgeo.x;
+                                       dy += pgeo.y;
+                               }
+
+                               handler.addPointAt(handler.state, graph.panningHandler.triggerX / s - dx,
+                                       graph.panningHandler.triggerY / s - dy);
+                       }
+               }
+       });
+       this.addAction('removeWaypoint', function() {
+               // TODO: Action should run with "this" set to action
+               var rmWaypointAction = ui.actions.get('removeWaypoint');
+
+               if (rmWaypointAction.handler != null) {
+                       // NOTE: Popupevent handled and action updated in Menus.createPopupMenu
+                       rmWaypointAction.handler.removePoint(rmWaypointAction.handler.state,
+                               rmWaypointAction.index);
+               }
+       });
+       this.addAction('image', function() {
+               function updateImage(value, w, h) {
+                       var select = null;
+                       var cells = graph.getSelectionCells();
+
+                       graph.getModel().beginUpdate();
+                       try {
+                               // Inserts new cell if no cell is selected
+                               if (cells.length == 0) {
+                                       var gs = graph.getGridSize();
+                                       cells = [graph.insertVertex(graph.getDefaultParent(), null, '', gs, gs,
+                                               w, h)];
+                                       select = cells;
+                               }
+
+                               graph.setCellStyles(mxConstants.STYLE_IMAGE, value, cells);
+                               graph.setCellStyles(mxConstants.STYLE_SHAPE, 'image', cells);
+
+                               if (graph.getSelectionCount() == 1) {
+                                       if (w != null && h != null) {
+                                               var cell = cells[0];
+                                               var geo = graph.getModel().getGeometry(cell);
+
+                                               if (geo != null) {
+                                                       geo = geo.clone();
+                                                       geo.width = w;
+                                                       geo.height = h;
+                                                       graph.getModel().setGeometry(cell, geo);
+                                               }
+                                       }
+                               }
+                       } finally {
+                               graph.getModel().endUpdate();
+                       }
+
+                       if (select != null) {
+                               graph.setSelectionCells(select);
+                               graph.scrollCellToVisible(select[0]);
+                       }
+               };
+
+               var value = '';
+               var state = graph.getView().getState(graph.getSelectionCell());
+
+               if (state != null) {
+                       value = state.style[mxConstants.STYLE_IMAGE] || value;
+               }
+
+               value = mxUtils.prompt(mxResources.get('enterValue') + ' (' + mxResources.get(
+                       'url') + ')', value);
+
+               if (value != null) {
+                       if (value.length > 0) {
+                               var img = new Image();
+
+                               img.onload = function() {
+                                       updateImage(value, img.width, img.height);
+                               };
+                               img.onerror = function() {
+                                       mxUtils.alert(mxResources.get('fileNotFound'));
+                               };
+
+                               img.src = value;
+                       }
+               }
+       });
+};
+
+/**
+ * Registers the given action under the given name.
+ */
+Actions.prototype.addAction = function(key, funct, enabled, iconCls, shortcut) {
+       return this.put(key, new Action(mxResources.get(key), funct, enabled, iconCls,
+               shortcut));
+};
+
+/**
+ * Registers the given action under the given name.
+ */
+Actions.prototype.put = function(name, action) {
+       this.actions[name] = action;
+
+       return action;
+};
+
+/**
+ * Returns the action for the given name or null if no such action exists.
+ */
+Actions.prototype.get = function(name) {
+       return this.actions[name];
+};
+
+/**
+ * Constructs a new action for the given parameters.
+ */
+function Action(label, funct, enabled, iconCls, shortcut) {
+       mxEventSource.call(this);
+       this.label = label;
+       this.funct = funct;
+       this.enabled = (enabled != null) ? enabled : true;
+       this.iconCls = iconCls;
+       this.shortcut = shortcut;
+};
+
+// Action inherits from mxEventSource
+mxUtils.extend(Action, mxEventSource);
+
+/**
+ * Sets the enabled state of the action and fires a stateChanged event.
+ */
+Action.prototype.setEnabled = function(value) {
+       if (this.enabled != value) {
+               this.enabled = value;
+               this.fireEvent(new mxEventObject('stateChanged'));
+       }
+};
+
+/**
+ * Sets the enabled state of the action and fires a stateChanged event.
+ */
+Action.prototype.setToggleAction = function(value) {
+       this.toggleAction = value;
+};
+
+/**
+ * Sets the enabled state of the action and fires a stateChanged event.
+ */
+Action.prototype.setSelectedCallback = function(funct) {
+       this.selectedCallback = funct;
+};
+
+/**
+ * Sets the enabled state of the action and fires a stateChanged event.
+ */
+Action.prototype.isSelected = function() {
+       return this.selectedCallback();
+};
index 82e2cb3..c78d34e 100644 (file)
@@ -1 +1,1048 @@
-var _0xd3eb=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x69\x6E\x70\x75\x74","\x63\x72\x65\x61\x74\x65\x45\x6C\x65\x6D\x65\x6E\x74","\x74\x79\x70\x65","\x63\x68\x65\x63\x6B\x62\x6F\x78","\x73\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x63\x68\x65\x63\x6B\x65\x64","\x47\x45\x54","\x6F\x70\x65\x6E","\x41\x75\x74\x68\x6F\x72\x69\x7A\x61\x74\x69\x6F\x6E","\x42\x65\x61\x72\x65\x72\x20","\x74\x6F\x6B\x65\x6E","\x64\x61\x74\x61","\x65\x64\x69\x74\x6F\x72","\x73\x65\x74\x52\x65\x71\x75\x65\x73\x74\x48\x65\x61\x64\x65\x72","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x72\x65\x73\x70\x6F\x6E\x73\x65","\x70\x61\x72\x73\x65","\x73\x65\x6C\x65\x63\x74","\x6F\x70\x74\x69\x6F\x6E","\x74\x65\x78\x74","\x2D\x2D\x20\x4E\x6F\x6E\x65\x20\x2D\x2D","\x76\x61\x6C\x75\x65","\x2D\x31","\x61\x70\x70\x65\x6E\x64\x43\x68\x69\x6C\x64","\x25","\x72\x65\x70\x6C\x61\x63\x65","\x66\x6F\x72\x45\x61\x63\x68","\x73\x65\x6C\x65\x63\x74\x65\x64","\x72\x6F\x77\x73","\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65","\x66\x6F\x72\x6D\x2D\x63\x6F\x6E\x74\x72\x6F\x6C\x20\x73\x65\x6C\x65\x63\x74\x32","\x30","\x66\x69\x6C\x74\x65\x72","\x73\x65\x6C\x65\x63\x74\x2D\x67\x72\x6F\x75\x70\x2D\x66\x61\x74\x68\x65\x72","\x74\x6F\x55\x70\x70\x65\x72\x43\x61\x73\x65","\x73\x65\x6C\x65\x63\x74\x2D\x67\x72\x6F\x75\x70\x2D\x73\x6F\x6E","\x2D","\x63\x61\x70\x69\x74\x61\x6C\x69\x7A\x65","","\x49\x53\x5F\x49\x45","\x64\x6F\x63\x75\x6D\x65\x6E\x74\x4D\x6F\x64\x65","\x73\x63\x72\x6F\x6C\x6C\x57\x69\x64\x74\x68","\x62\x6F\x64\x79","\x72\x6F\x75\x6E\x64","\x6D\x61\x78","\x73\x63\x72\x6F\x6C\x6C\x48\x65\x69\x67\x68\x74","\x64\x6F\x63\x75\x6D\x65\x6E\x74\x45\x6C\x65\x6D\x65\x6E\x74","\x67\x65\x44\x69\x61\x6C\x6F\x67","\x63\x72\x65\x61\x74\x65\x44\x69\x76","\x6D\x6F\x64\x61\x6C\x20\x66\x61\x64\x65\x20\x69\x6E\x20\x63\x65\x6E\x74\x65\x72","\x64\x69\x73\x70\x6C\x61\x79","\x73\x74\x79\x6C\x65","\x62\x6C\x6F\x63\x6B","\x70\x61\x64\x64\x69\x6E\x67\x52\x69\x67\x68\x74","\x31\x32\x70\x78","\x67\x65\x4D\x6F\x64\x61\x6C\x44\x69\x61\x6C\x6F\x67","\x6D\x6F\x64\x61\x6C\x2D\x64\x69\x61\x6C\x6F\x67","\x62\x67","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64","\x6D\x6F\x64\x61\x6C\x2D\x62\x61\x63\x6B\x64\x72\x6F\x70\x20\x66\x61\x64\x65\x20\x69\x6E","\x49\x53\x5F\x51\x55\x49\x52\x4B\x53","\x6F\x6E\x44\x69\x61\x6C\x6F\x67\x43\x6C\x6F\x73\x65","\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x63\x6C\x6F\x73\x65","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x72\x65\x6D\x6F\x76\x65\x43\x68\x69\x6C\x64","\x70\x61\x72\x65\x6E\x74\x4E\x6F\x64\x65","\x6D\x6F\x64\x61\x6C\x2D\x63\x6F\x6E\x74\x65\x6E\x74","\x6D\x6F\x64\x61\x6C\x2D\x68\x65\x61\x64\x65\x72","\x6D\x6F\x64\x61\x6C\x2D\x62\x6F\x64\x79","\x6D\x6F\x64\x61\x6C\x2D\x66\x6F\x6F\x74\x65\x72","\x68\x34","\x63\x72\x65\x61\x74\x65\x48\x65\x61\x64\x65\x72","\x69\x6D\x70\x6F\x72\x74","\x67\x65\x74","\x20\x58\x4D\x4C","\x77\x72\x69\x74\x65","\x68\x69\x64\x65\x44\x69\x61\x6C\x6F\x67","\x62\x75\x74\x74\x6F\x6E","\x72\x6F\x77","\x63\x6F\x6C\x2D\x6D\x64\x2D\x31\x32","\x74\x65\x78\x74\x61\x72\x65\x61","\x77\x69\x64\x74\x68","\x31\x30\x30\x25","\x68\x65\x69\x67\x68\x74","\x33\x37\x34\x70\x78","\x66\x69\x6C\x65","\x61\x63\x63\x65\x70\x74","\x74\x65\x78\x74\x2F\x78\x6D\x6C","\x63\x68\x61\x6E\x67\x65","\x66\x69\x6C\x65\x73","\x74\x61\x72\x67\x65\x74","\x6C\x6F\x67","\x6F\x6E\x6C\x6F\x61\x64","\x72\x65\x73\x75\x6C\x74","\x72\x65\x61\x64\x41\x73\x54\x65\x78\x74","\x46\x61\x69\x6C\x65\x64\x20\x74\x6F\x20\x6C\x6F\x61\x64\x20\x66\x6F\x72\x6D\x61\x74\x20\x66\x69\x6C\x65","\x46\x61\x69\x6C\x65\x64\x20\x74\x6F\x20\x6C\x6F\x61\x64\x20\x66\x69\x6C\x65","\x61\x64\x64\x45\x76\x65\x6E\x74\x4C\x69\x73\x74\x65\x6E\x65\x72","\x70\x61\x72\x73\x65\x58\x6D\x6C","\x73\x65\x74\x47\x72\x61\x70\x68\x58\x6D\x6C","\x62\x69\x6E\x64","\x62\x74\x6E\x20\x62\x6C\x75\x65","\x63\x61\x6E\x63\x65\x6C","\x62\x74\x6E\x20\x64\x65\x66\x61\x75\x6C\x74","\x61\x62\x6F\x75\x74","\x20\x43\x61\x6C\x6C\x79\x20\x53\x71\x75\x61\x72\x65","\x69\x6D\x67","\x62\x6F\x72\x64\x65\x72","\x30\x70\x78","\x31\x37\x36","\x31\x35\x31","\x73\x72\x63","\x2F\x6C\x6F\x67\x6F\x2E\x70\x6E\x67","\x62\x72","\x50\x6F\x77\x65\x72\x65\x64\x20\x62\x79\x20\x58\x65\x6E\x69\x61\x6C\x61\x62\x20","\x56\x45\x52\x53\x49\x4F\x4E","\x61","\x68\x72\x65\x66","\x68\x74\x74\x70\x3A\x2F\x2F\x77\x77\x77\x2E\x63\x61\x6C\x6C\x79\x73\x71\x75\x61\x72\x65\x2E\x63\x6F\x6D\x2F","\x5F\x62\x6C\x61\x6E\x6B","\x77\x77\x77\x2E\x63\x61\x6C\x6C\x79\x73\x71\x75\x61\x72\x65\x2E\x63\x6F\x6D","\x73\x61\x76\x65\x41\x73","\x6E\x61\x6D\x65","\x5F","\x67\x65\x74\x4F\x72\x43\x72\x65\x61\x74\x65\x46\x69\x6C\x65\x6E\x61\x6D\x65","\x63\x6F\x6C\x2D\x6D\x64\x2D\x34","\x63\x6F\x6C\x2D\x6D\x64\x2D\x38","\x6C\x61\x62\x65\x6C","\x63\x6F\x6E\x74\x72\x6F\x6C\x2D\x6C\x61\x62\x65\x6C\x20\x70\x75\x6C\x6C\x2D\x72\x69\x67\x68\x74","\x5F\x63\x6F\x70\x79","\x69\x64","\x66\x6F\x72\x6D\x2D\x63\x6F\x6E\x74\x72\x6F\x6C","\x73\x61\x76\x65","\x6E\x65\x77","\x5F\x6E\x65\x77","\x76\x61\x72\x69\x61\x62\x6C\x65","\x76\x61\x72\x69\x61\x62\x6C\x65\x20\x6E\x61\x6D\x65","\x2F\x61\x70\x69\x2F\x73\x71\x75\x61\x72\x65\x2F\x70\x72\x6F\x6A\x65\x63\x74\x73","\x6C\x65\x6E\x67\x74\x68","\x73\x71\x75\x61\x72\x65\x2F\x70\x72\x6F\x6A\x65\x63\x74\x2F","\x72\x65\x6E\x61\x6D\x65","\x66\x69\x6C\x65\x6E\x61\x6D\x65","\x50\x55\x54","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2F\x78\x2D\x77\x77\x77\x2D\x66\x6F\x72\x6D\x2D\x75\x72\x6C\x65\x6E\x63\x6F\x64\x65\x64","\x6E\x61\x6D\x65\x3D","\x50\x72\x6F\x6A\x65\x63\x74\x20\x73\x75\x63\x63\x65\x73\x73\x66\x75\x6C\x6C\x79\x20\x72\x65\x6E\x61\x6D\x65\x64","\x73\x65\x74\x53\x74\x61\x74\x75\x73","\x6D\x65\x73\x73\x61\x67\x65","\x65\x72\x72\x6F\x72\x73","\x6F\x6E\x65\x72\x72\x6F\x72","\x73\x74\x61\x74\x75\x73\x54\x65\x78\x74","\x61\x6C\x65\x72\x74","\x65\x64\x69\x74","\x67\x65\x74\x47\x72\x61\x70\x68\x58\x6D\x6C","\x67\x65\x74\x50\x72\x65\x74\x74\x79\x58\x6D\x6C","\x73\x74\x6F\x70\x50\x72\x6F\x70\x61\x67\x61\x74\x69\x6F\x6E","\x70\x72\x65\x76\x65\x6E\x74\x44\x65\x66\x61\x75\x6C\x74","\x64\x61\x74\x61\x54\x72\x61\x6E\x73\x66\x65\x72","\x64\x72\x61\x67\x6F\x76\x65\x72","\x64\x72\x6F\x70","\x6D\x6F\x64\x61\x6C\x2D\x62\x6F\x64\x79\x20\x66\x6F\x72\x6D","\x65\x78\x70\x6F\x72\x74","\x66\x6F\x72\x6D\x2D\x68\x6F\x72\x69\x7A\x6F\x6E\x74\x61\x6C\x20\x66\x6F\x72\x6D\x2D\x72\x6F\x77\x2D\x73\x65\x70\x65\x72\x61\x74\x65\x64","\x66\x6F\x72\x6D\x2D\x67\x72\x6F\x75\x70\x20\x6C\x61\x73\x74","\x63\x6F\x6C\x2D\x73\x6D\x2D\x34\x20\x63\x6F\x6E\x74\x72\x6F\x6C\x2D\x6C\x61\x62\x65\x6C","\x63\x6F\x6C\x2D\x73\x6D\x2D\x38","\x67\x65\x74\x58\x6D\x6C","\x73\x69\x6D\x75\x6C\x61\x74\x65","\x2F\x64\x6F\x77\x6E\x6C\x6F\x61\x64","\x66\x69\x6C\x65\x6E\x61\x6D\x65\x3D","\x67\x72\x61\x70\x68","\x6D\x6F\x64\x61\x6C\x2D\x62\x6F\x64\x79\x20\x66\x6F\x72\x6D\x20\x6D\x6F\x64\x61\x6C\x2D\x62\x6F\x64\x79\x2D\x73\x63\x72\x6F\x6C\x6C","\x20","\x6E\x6F\x64\x65\x4E\x61\x6D\x65","\x61\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x66\x6F\x72\x6D\x2D\x67\x72\x6F\x75\x70","\x2F\x61\x70\x69\x2F\x61\x67\x65\x6E\x74\x73","\x73\x69\x70\x5F\x69\x64","\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x2F\x71\x75\x65\x75\x65\x73","\x71\x75\x65\x75\x65\x5F\x69\x64","\x2F\x61\x70\x69\x2F\x74\x72\x75\x6E\x6B\x73","\x74\x72\x75\x6E\x6B\x5F\x69\x64","\x2F\x61\x70\x69\x2F\x76\x61\x72\x69\x61\x62\x6C\x65\x73","\x76\x61\x72\x69\x61\x62\x6C\x65\x5F\x69\x64","\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x2F\x63\x6F\x6E\x74\x65\x78\x74\x73","\x63\x6F\x6E\x74\x65\x78\x74","\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x2F\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C\x73","\x6D\x61\x69\x6C\x62\x6F\x78","\x25\x6D\x61\x69\x6C\x62\x6F\x78\x25\x40\x25\x63\x6F\x6E\x74\x65\x78\x74\x25","\x6D\x6F\x64\x65\x6C","\x69\x73\x70\x65\x65\x63\x68\x5F\x61\x73\x72\x5F\x6C\x61\x6E\x67\x75\x61\x67\x65","\x69\x73\x70\x65\x65\x63\x68\x5F\x74\x74\x73\x5F\x6C\x61\x6E\x67\x75\x61\x67\x65","\x67\x6F\x6F\x67\x6C\x65\x5F\x74\x74\x73\x5F\x6C\x61\x6E\x67\x75\x61\x67\x65","\x2F\x61\x70\x69\x2F\x69\x6E\x74\x65\x72\x76\x61\x6C\x73","\x49\x6E\x74\x65\x72\x76\x61\x6C\x49\x64","\x69\x6E\x74\x65\x72\x76\x61\x6C\x5F\x69\x64","\x70\x72\x6F\x6A\x65\x63\x74\x5F\x69\x64","\x2F\x61\x70\x69\x2F\x73\x71\x75\x61\x72\x65\x2F\x6F\x64\x62\x63","\x6F\x64\x62\x63\x5F\x69\x64","\x2F\x61\x70\x69\x2F\x73\x6F\x75\x6E\x64\x73","\x64\x69\x73\x70\x6C\x61\x79\x5F\x6E\x61\x6D\x65","\x66\x69\x6C\x65\x5F\x69\x64","\x74\x69\x6D\x65\x6F\x75\x74","\x64\x69\x67\x69\x74","\x6D\x69\x6E\x64\x69\x67\x69\x74","\x6D\x61\x78\x64\x69\x67\x69\x74","\x6E\x75\x6D\x62\x65\x72","\x6D\x69\x6E","\x72\x65\x74\x72\x79","\x6B\x65\x79","\x71\x75\x65\x72\x79","\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E","\x69\x6E\x6E\x65\x72\x48\x54\x4D\x4C","\x63\x6F\x6D\x6D\x61\x6E\x64","\x68\x65\x6C\x70\x5F","\x70","\x68\x65\x6C\x70\x2D\x62\x6C\x6F\x63\x6B","\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x42\x79\x49\x64","\x72\x65\x66\x72\x65\x73\x68"];_0xd3eb[0];function createCheckbox(_0xa701x2){var _0xa701x3=document[_0xd3eb[2]](_0xd3eb[1]);_0xa701x3[_0xd3eb[5]](_0xd3eb[3],_0xd3eb[4]);if(_0xa701x2){_0xa701x3[_0xd3eb[5]](_0xd3eb[6],true)};return _0xa701x3}function createDropdownFromApi(_0xa701x5,_0xa701x2,_0xa701x6,_0xa701x7,_0xa701x8,_0xa701x9,_0xa701xa){var _0xa701xb= new XMLHttpRequest();_0xa701xb[_0xd3eb[8]](_0xd3eb[7],_0xa701x5,false);_0xa701xb[_0xd3eb[14]](_0xd3eb[9],_0xd3eb[10]+_0xa701x8[_0xd3eb[13]][_0xd3eb[12]][_0xd3eb[11]]);_0xa701xb[_0xd3eb[15]](null);var _0xa701xc=[];if(_0xa701xb[_0xd3eb[16]]===200){_0xa701xc=JSON[_0xd3eb[18]](_0xa701xb[_0xd3eb[17]])};var _0xa701x3=document[_0xd3eb[2]](_0xd3eb[19]);var _0xa701xd=document[_0xd3eb[2]](_0xd3eb[20]);_0xa701xd[_0xd3eb[21]]=_0xd3eb[22];_0xa701xd[_0xd3eb[23]]=_0xd3eb[24];_0xa701x3[_0xd3eb[25]](_0xa701xd);_0xa701xc[_0xd3eb[30]][_0xd3eb[28]](function(_0xa701xe){_0xa701xd=document[_0xd3eb[2]](_0xd3eb[20]);_0xa701xd[_0xd3eb[21]]=_0xa701xe[_0xa701x6];if(_0xa701x9&&_0xa701xa){_0xa701x9[_0xd3eb[28]](function(_0xa701xf){_0xa701xa=_0xa701xa[_0xd3eb[27]](_0xd3eb[26]+_0xa701xf+_0xd3eb[26],_0xa701xe[_0xa701xf])});_0xa701xd[_0xd3eb[23]]=_0xa701xa;_0xa701xd[_0xd3eb[29]]=(_0xa701xa==_0xa701x2)}else {_0xa701xd[_0xd3eb[23]]=_0xa701xe[_0xa701x7];_0xa701xd[_0xd3eb[29]]=(_0xa701xe[_0xa701x7]==_0xa701x2)};_0xa701x3[_0xd3eb[25]](_0xa701xd)});_0xa701x3[_0xd3eb[31]]=_0xd3eb[32];return _0xa701x3}function createGroupedDropdownFromApi(_0xa701x5,_0xa701x2,_0xa701x6,_0xa701x7,_0xa701x8,_0xa701x11){var _0xa701xb= new XMLHttpRequest();_0xa701xb[_0xd3eb[8]](_0xd3eb[7],_0xa701x5,false);_0xa701xb[_0xd3eb[14]](_0xd3eb[9],_0xd3eb[10]+_0xa701x8[_0xd3eb[13]][_0xd3eb[12]][_0xd3eb[11]]);_0xa701xb[_0xd3eb[15]](null);var _0xa701xc=[];if(_0xa701xb[_0xd3eb[16]]===200){_0xa701xc=JSON[_0xd3eb[18]](_0xa701xb[_0xd3eb[17]])};var _0xa701x3=document[_0xd3eb[2]](_0xd3eb[19]);var _0xa701xd=document[_0xd3eb[2]](_0xd3eb[20]);_0xa701xd[_0xd3eb[21]]=_0xd3eb[22];_0xa701xd[_0xd3eb[23]]=_0xd3eb[33];_0xa701x3[_0xd3eb[25]](_0xa701xd);var _0xa701x12={};var _0xa701x13={};_0xa701x12[_0xa701x11]=null;var _0xa701x14=_[_0xd3eb[34]](_0xa701xc[_0xd3eb[30]],_0xa701x12);var _0xa701x15={};_0xa701x14[_0xd3eb[28]](function(_0xa701xe){_0xa701xd=document[_0xd3eb[2]](_0xd3eb[20]);_0xa701xd[_0xd3eb[31]]=_0xd3eb[35];_0xa701xd[_0xd3eb[21]]=_0xa701xe[_0xa701x6][_0xd3eb[36]]();_0xa701xd[_0xd3eb[23]]=_0xa701xe[_0xa701x7];_0xa701xd[_0xd3eb[29]]=(_0xa701xe[_0xa701x7]==_0xa701x2);_0xa701x3[_0xd3eb[25]](_0xa701xd);_0xa701x13[_0xa701x11]=_0xa701xe[_0xa701x7];_0xa701x15=_[_0xd3eb[34]](_0xa701xc[_0xd3eb[30]],_0xa701x13);_0xa701x15[_0xd3eb[28]](function(_0xa701xe){_0xa701xd=document[_0xd3eb[2]](_0xd3eb[20]);_0xa701xd[_0xd3eb[31]]=_0xd3eb[37];_0xa701xd[_0xd3eb[21]]=_0xd3eb[38]+_[_0xd3eb[39]](_0xa701xe[_0xa701x6]);_0xa701xd[_0xd3eb[23]]=_0xa701xe[_0xa701x7];_0xa701xd[_0xd3eb[29]]=(_0xa701xe[_0xa701x7]==_0xa701x2);_0xa701x3[_0xd3eb[25]](_0xa701xd)})});_0xa701x3[_0xd3eb[31]]=_0xd3eb[32];return _0xa701x3}function createDropdownFromArray(_0xa701x17,_0xa701x2){var _0xa701x3=document[_0xd3eb[2]](_0xd3eb[19]);for(var _0xa701x18 in _0xa701x17){var _0xa701xd=document[_0xd3eb[2]](_0xd3eb[20]);_0xa701xd[_0xd3eb[21]]=_0xa701x17[_0xa701x18];_0xa701xd[_0xd3eb[23]]=_0xa701x18;if(_0xa701x2>0||_0xa701x2!=_0xd3eb[40]){_0xa701xd[_0xd3eb[29]]=(_0xa701x2===_0xa701x18)?true:false};_0xa701x3[_0xd3eb[25]](_0xa701xd)};_0xa701x3[_0xd3eb[31]]=_0xd3eb[32];return _0xa701x3}function Dialog(_0xa701x8,_0xa701x1a,_0xa701x1b,_0xa701x1c,_0xa701x1d,_0xa701x1e,_0xa701x1f){var _0xa701x20=0;if(mxClient[_0xd3eb[41]]&&document[_0xd3eb[42]]!=9){_0xa701x20=60};_0xa701x1b+=_0xa701x20;_0xa701x1c+=_0xa701x20;var _0xa701x21=Math[_0xd3eb[46]](0,Math[_0xd3eb[45]]((document[_0xd3eb[44]][_0xd3eb[43]]-_0xa701x1b)/2));var _0xa701x22=Math[_0xd3eb[46]](0,Math[_0xd3eb[45]]((Math[_0xd3eb[46]](document[_0xd3eb[44]][_0xd3eb[47]],document[_0xd3eb[48]][_0xd3eb[47]])-_0xa701x1c)/3));var _0xa701x23=_0xa701x8[_0xd3eb[50]](_0xd3eb[49]);_0xa701x23[_0xd3eb[31]]=_0xd3eb[51];_0xa701x23[_0xd3eb[53]][_0xd3eb[52]]=_0xd3eb[54];_0xa701x23[_0xd3eb[53]][_0xd3eb[55]]=_0xd3eb[56];var _0xa701x24=_0xa701x8[_0xd3eb[50]](_0xd3eb[57]);_0xa701x24[_0xd3eb[31]]=_0xd3eb[58];_0xa701x24[_0xd3eb[25]](_0xa701x1a);_0xa701x23[_0xd3eb[25]](_0xa701x24);if(this[_0xd3eb[59]]==null){this[_0xd3eb[59]]=_0xa701x8[_0xd3eb[50]](_0xd3eb[60]);this[_0xd3eb[59]][_0xd3eb[31]]=_0xd3eb[61];if(mxClient[_0xd3eb[62]]){ new mxDivResizer(this[_0xd3eb[59]])}};if(_0xa701x1d){document[_0xd3eb[44]][_0xd3eb[25]](this[_0xd3eb[59]])};document[_0xd3eb[44]][_0xd3eb[25]](_0xa701x23);this[_0xd3eb[63]]=_0xa701x1f;this[_0xd3eb[64]]=_0xa701x23}Dialog[_0xd3eb[66]][_0xd3eb[65]]=function(){if(this[_0xd3eb[63]]!=null){this[_0xd3eb[63]]();this[_0xd3eb[63]]=null};this[_0xd3eb[64]][_0xd3eb[68]][_0xd3eb[67]](this[_0xd3eb[64]]);this[_0xd3eb[59]][_0xd3eb[68]][_0xd3eb[67]](this[_0xd3eb[59]])};function ImportDialog(_0xa701x8){var _0xa701x26=_0xa701x8[_0xd3eb[50]](_0xd3eb[69]);var _0xa701x27=_0xa701x8[_0xd3eb[50]](_0xd3eb[70]);var _0xa701x28=_0xa701x8[_0xd3eb[50]](_0xd3eb[71]);var _0xa701x29=_0xa701x8[_0xd3eb[50]](_0xd3eb[72]);var _0xa701x2a=_0xa701x8[_0xd3eb[74]](_0xd3eb[73]);mxUtils[_0xd3eb[78]](_0xa701x2a,mxResources[_0xd3eb[76]](_0xd3eb[75])+_0xd3eb[77]);var _0xa701x2b=mxUtils[_0xd3eb[80]](_0xd3eb[40],function(){_0xa701x8[_0xd3eb[79]]()});_0xa701x2b[_0xd3eb[31]]=_0xd3eb[65];_0xa701x27[_0xd3eb[25]](_0xa701x2b);_0xa701x27[_0xd3eb[25]](_0xa701x2a);var _0xa701x2c=_0xa701x8[_0xd3eb[50]](_0xd3eb[81]);var _0xa701x2d=_0xa701x8[_0xd3eb[50]](_0xd3eb[82]);var _0xa701x2e=document[_0xd3eb[2]](_0xd3eb[83]);_0xa701x2e[_0xd3eb[53]][_0xd3eb[84]]=_0xd3eb[85];_0xa701x2e[_0xd3eb[53]][_0xd3eb[86]]=_0xd3eb[87];var _0xa701x3=document[_0xd3eb[2]](_0xd3eb[1]);_0xa701x3[_0xd3eb[3]]=_0xd3eb[88];_0xa701x3[_0xd3eb[5]](_0xd3eb[89],_0xd3eb[90]);_0xa701x3[_0xd3eb[100]](_0xd3eb[91],function _0xa701x2f(_0xa701x30){var _0xa701x31=_0xa701x30[_0xd3eb[93]][_0xd3eb[92]][0];console[_0xd3eb[94]](_0xa701x31);if(_0xa701x31){if(_0xa701x31[_0xd3eb[3]]===_0xd3eb[90]){var _0xa701x32= new FileReader();_0xa701x32[_0xd3eb[95]]=function(_0xa701x33){var _0xa701x34=_0xa701x33[_0xd3eb[93]][_0xd3eb[96]];mxUtils[_0xd3eb[78]](_0xa701x2e,_0xa701x34)};_0xa701x32[_0xd3eb[97]](_0xa701x31)}else {alert(_0xd3eb[98])}}else {alert(_0xd3eb[99])}},false);_0xa701x2d[_0xd3eb[25]](_0xa701x3);_0xa701x2d[_0xd3eb[25]](_0xa701x2e);_0xa701x2c[_0xd3eb[25]](_0xa701x2d);_0xa701x28[_0xd3eb[25]](_0xa701x2c);var _0xa701x35=mxUtils[_0xd3eb[80]](mxResources[_0xd3eb[76]](_0xd3eb[75]),mxUtils[_0xd3eb[103]](this,function(_0xa701x36){var _0xa701x37=mxUtils[_0xd3eb[101]](_0xa701x2e[_0xd3eb[23]]);_0xa701x8[_0xd3eb[13]][_0xd3eb[102]](_0xa701x37[_0xd3eb[48]]);_0xa701x8[_0xd3eb[79]]()}));_0xa701x35[_0xd3eb[31]]=_0xd3eb[104];var _0xa701x38=mxUtils[_0xd3eb[80]](mxResources[_0xd3eb[76]](_0xd3eb[105]),function(){_0xa701x8[_0xd3eb[79]]()});_0xa701x38[_0xd3eb[31]]=_0xd3eb[106];_0xa701x29[_0xd3eb[25]](_0xa701x35);_0xa701x29[_0xd3eb[25]](_0xa701x38);_0xa701x26[_0xd3eb[25]](_0xa701x27);_0xa701x26[_0xd3eb[25]](_0xa701x28);_0xa701x26[_0xd3eb[25]](_0xa701x29);this[_0xd3eb[64]]=_0xa701x26}function AboutDialog(_0xa701x8){var _0xa701x26=_0xa701x8[_0xd3eb[50]](_0xd3eb[69]);var _0xa701x27=_0xa701x8[_0xd3eb[50]](_0xd3eb[70]);var _0xa701x28=_0xa701x8[_0xd3eb[50]](_0xd3eb[71]);var _0xa701x29=_0xa701x8[_0xd3eb[50]](_0xd3eb[72]);var _0xa701x2a=_0xa701x8[_0xd3eb[74]](_0xd3eb[73]);mxUtils[_0xd3eb[78]](_0xa701x2a,mxResources[_0xd3eb[76]](_0xd3eb[107])+_0xd3eb[108]);var _0xa701x2b=mxUtils[_0xd3eb[80]](_0xd3eb[40],function(){_0xa701x8[_0xd3eb[79]]()});_0xa701x2b[_0xd3eb[31]]=_0xd3eb[65];_0xa701x27[_0xd3eb[25]](_0xa701x2b);_0xa701x27[_0xd3eb[25]](_0xa701x2a);var _0xa701x3a=document[_0xd3eb[2]](_0xd3eb[109]);_0xa701x3a[_0xd3eb[53]][_0xd3eb[110]]=_0xd3eb[111];_0xa701x3a[_0xd3eb[5]](_0xd3eb[84],_0xd3eb[112]);_0xa701x3a[_0xd3eb[5]](_0xd3eb[84],_0xd3eb[113]);_0xa701x3a[_0xd3eb[5]](_0xd3eb[114],IMAGE_PATH+_0xd3eb[115]);_0xa701x28[_0xd3eb[25]](_0xa701x3a);mxUtils[_0xd3eb[116]](_0xa701x28);mxUtils[_0xd3eb[78]](_0xa701x28,_0xd3eb[117]+mxClient[_0xd3eb[118]]);mxUtils[_0xd3eb[116]](_0xa701x28);var _0xa701x3b=document[_0xd3eb[2]](_0xd3eb[119]);_0xa701x3b[_0xd3eb[5]](_0xd3eb[120],_0xd3eb[121]);_0xa701x3b[_0xd3eb[5]](_0xd3eb[93],_0xd3eb[122]);mxUtils[_0xd3eb[78]](_0xa701x3b,_0xd3eb[123]);_0xa701x28[_0xd3eb[25]](_0xa701x3b);mxUtils[_0xd3eb[116]](_0xa701x28);mxUtils[_0xd3eb[116]](_0xa701x28);var _0xa701x38=mxUtils[_0xd3eb[80]](mxResources[_0xd3eb[76]](_0xd3eb[65]),function(){_0xa701x8[_0xd3eb[79]]()});_0xa701x38[_0xd3eb[31]]=_0xd3eb[106];_0xa701x29[_0xd3eb[25]](_0xa701x38);_0xa701x26[_0xd3eb[25]](_0xa701x27);_0xa701x26[_0xd3eb[25]](_0xa701x28);_0xa701x26[_0xd3eb[25]](_0xa701x29);this[_0xd3eb[64]]=_0xa701x26}function SaveDialog(_0xa701x8){var _0xa701x26=_0xa701x8[_0xd3eb[50]](_0xd3eb[69]);var _0xa701x27=_0xa701x8[_0xd3eb[50]](_0xd3eb[70]);var _0xa701x28=_0xa701x8[_0xd3eb[50]](_0xd3eb[71]);var _0xa701x29=_0xa701x8[_0xd3eb[50]](_0xd3eb[72]);var _0xa701x2a=_0xa701x8[_0xd3eb[74]](_0xd3eb[73]);mxUtils[_0xd3eb[78]](_0xa701x2a,mxResources[_0xd3eb[76]](_0xd3eb[124]));var _0xa701x2b=mxUtils[_0xd3eb[80]](_0xd3eb[40],function(){_0xa701x8[_0xd3eb[79]]()});_0xa701x2b[_0xd3eb[31]]=_0xd3eb[65];_0xa701x27[_0xd3eb[25]](_0xa701x2b);_0xa701x27[_0xd3eb[25]](_0xa701x2a);var _0xa701x3d=_0xd3eb[125];var _0xa701x3e=_0xd3eb[126]+_0xa701x3d;var _0xa701x2=_0xa701x8[_0xd3eb[13]][_0xd3eb[127]]();var _0xa701x2c=_0xa701x8[_0xd3eb[50]](_0xd3eb[81]);var _0xa701x2d=_0xa701x8[_0xd3eb[50]](_0xd3eb[128]);var _0xa701x3f=_0xa701x8[_0xd3eb[50]](_0xd3eb[129]);var _0xa701x40=document[_0xd3eb[2]](_0xd3eb[130]);_0xa701x40[_0xd3eb[31]]=_0xd3eb[131];mxUtils[_0xd3eb[78]](_0xa701x40,mxResources[_0xd3eb[76]](_0xa701x3d));_0xa701x2d[_0xd3eb[25]](_0xa701x40);var _0xa701x41=document[_0xd3eb[2]](_0xd3eb[1]);_0xa701x41[_0xd3eb[5]](_0xd3eb[23],_0xa701x2+_0xd3eb[132]);_0xa701x41[_0xd3eb[5]](_0xd3eb[133],_0xa701x3e);_0xa701x41[_0xd3eb[31]]=_0xd3eb[134];_0xa701x3f[_0xd3eb[25]](_0xa701x41);_0xa701x2c[_0xd3eb[25]](_0xa701x2d);_0xa701x2c[_0xd3eb[25]](_0xa701x3f);_0xa701x28[_0xd3eb[25]](_0xa701x2c);var _0xa701x35=mxUtils[_0xd3eb[80]](mxResources[_0xd3eb[76]](_0xd3eb[135]),function(){_0xa701x8[_0xd3eb[124]](_0xa701x41[_0xd3eb[23]]);_0xa701x8[_0xd3eb[79]]()});_0xa701x35[_0xd3eb[31]]=_0xd3eb[104];var _0xa701x38=mxUtils[_0xd3eb[80]](mxResources[_0xd3eb[76]](_0xd3eb[105]),function(){_0xa701x8[_0xd3eb[79]]()});_0xa701x38[_0xd3eb[31]]=_0xd3eb[106];_0xa701x29[_0xd3eb[25]](_0xa701x35);_0xa701x29[_0xd3eb[25]](_0xa701x38);_0xa701x26[_0xd3eb[25]](_0xa701x27);_0xa701x26[_0xd3eb[25]](_0xa701x28);_0xa701x26[_0xd3eb[25]](_0xa701x29);this[_0xd3eb[64]]=_0xa701x26}function NewDialog(_0xa701x8){var _0xa701x26=_0xa701x8[_0xd3eb[50]](_0xd3eb[69]);var _0xa701x27=_0xa701x8[_0xd3eb[50]](_0xd3eb[70]);var _0xa701x28=_0xa701x8[_0xd3eb[50]](_0xd3eb[71]);var _0xa701x29=_0xa701x8[_0xd3eb[50]](_0xd3eb[72]);var _0xa701x2a=_0xa701x8[_0xd3eb[74]](_0xd3eb[73]);mxUtils[_0xd3eb[78]](_0xa701x2a,mxResources[_0xd3eb[76]](_0xd3eb[136]));var _0xa701x2b=mxUtils[_0xd3eb[80]](_0xd3eb[40],function(){_0xa701x8[_0xd3eb[79]]()});_0xa701x2b[_0xd3eb[31]]=_0xd3eb[65];_0xa701x27[_0xd3eb[25]](_0xa701x2b);_0xa701x27[_0xd3eb[25]](_0xa701x2a);var _0xa701x3d=_0xd3eb[125];var _0xa701x3e=_0xd3eb[126]+_0xa701x3d;var _0xa701x2=_0xa701x8[_0xd3eb[13]][_0xd3eb[127]]();var _0xa701x2c=_0xa701x8[_0xd3eb[50]](_0xd3eb[81]);var _0xa701x2d=_0xa701x8[_0xd3eb[50]](_0xd3eb[128]);var _0xa701x3f=_0xa701x8[_0xd3eb[50]](_0xd3eb[129]);var _0xa701x40=document[_0xd3eb[2]](_0xd3eb[130]);_0xa701x40[_0xd3eb[31]]=_0xd3eb[131];mxUtils[_0xd3eb[78]](_0xa701x40,mxResources[_0xd3eb[76]](_0xa701x3d));_0xa701x2d[_0xd3eb[25]](_0xa701x40);var _0xa701x41=document[_0xd3eb[2]](_0xd3eb[1]);_0xa701x41[_0xd3eb[5]](_0xd3eb[23],_0xa701x2+_0xd3eb[137]);_0xa701x41[_0xd3eb[5]](_0xd3eb[133],_0xa701x3e);_0xa701x41[_0xd3eb[31]]=_0xd3eb[134];_0xa701x3f[_0xd3eb[25]](_0xa701x41);_0xa701x2c[_0xd3eb[25]](_0xa701x2d);_0xa701x2c[_0xd3eb[25]](_0xa701x3f);_0xa701x28[_0xd3eb[25]](_0xa701x2c);var _0xa701x35=mxUtils[_0xd3eb[80]](mxResources[_0xd3eb[76]](_0xd3eb[136]),function(){_0xa701x8[_0xd3eb[136]](_0xa701x41[_0xd3eb[23]]);_0xa701x8[_0xd3eb[79]]()});_0xa701x35[_0xd3eb[31]]=_0xd3eb[104];var _0xa701x38=mxUtils[_0xd3eb[80]](mxResources[_0xd3eb[76]](_0xd3eb[105]),function(){_0xa701x8[_0xd3eb[79]]()});_0xa701x38[_0xd3eb[31]]=_0xd3eb[106];_0xa701x29[_0xd3eb[25]](_0xa701x35);_0xa701x29[_0xd3eb[25]](_0xa701x38);_0xa701x26[_0xd3eb[25]](_0xa701x27);_0xa701x26[_0xd3eb[25]](_0xa701x28);_0xa701x26[_0xd3eb[25]](_0xa701x29);this[_0xd3eb[64]]=_0xa701x26}function VariableDialog(_0xa701x8){var _0xa701x26=_0xa701x8[_0xd3eb[50]](_0xd3eb[69]);var _0xa701x27=_0xa701x8[_0xd3eb[50]](_0xd3eb[70]);var _0xa701x28=_0xa701x8[_0xd3eb[50]](_0xd3eb[71]);var _0xa701x29=_0xa701x8[_0xd3eb[50]](_0xd3eb[72]);var _0xa701x2a=_0xa701x8[_0xd3eb[74]](_0xd3eb[73]);mxUtils[_0xd3eb[78]](_0xa701x2a,mxResources[_0xd3eb[76]](_0xd3eb[138]));var _0xa701x2b=mxUtils[_0xd3eb[80]](_0xd3eb[40],function(){_0xa701x8[_0xd3eb[79]]()});_0xa701x2b[_0xd3eb[31]]=_0xd3eb[65];_0xa701x27[_0xd3eb[25]](_0xa701x2b);_0xa701x27[_0xd3eb[25]](_0xa701x2a);var _0xa701x3d=_0xd3eb[125];var _0xa701x3e=_0xd3eb[126]+_0xa701x3d;var _0xa701x2=_0xa701x8[_0xd3eb[13]][_0xd3eb[127]]();var _0xa701x2c=_0xa701x8[_0xd3eb[50]](_0xd3eb[81]);var _0xa701x2d=_0xa701x8[_0xd3eb[50]](_0xd3eb[128]);var _0xa701x3f=_0xa701x8[_0xd3eb[50]](_0xd3eb[129]);var _0xa701x40=document[_0xd3eb[2]](_0xd3eb[130]);_0xa701x40[_0xd3eb[31]]=_0xd3eb[131];mxUtils[_0xd3eb[78]](_0xa701x40,mxResources[_0xd3eb[76]](_0xa701x3d));_0xa701x2d[_0xd3eb[25]](_0xa701x40);var _0xa701x41=document[_0xd3eb[2]](_0xd3eb[1]);_0xa701x41[_0xd3eb[5]](_0xd3eb[23],_0xd3eb[139]);_0xa701x41[_0xd3eb[5]](_0xd3eb[133],_0xa701x3e);_0xa701x41[_0xd3eb[31]]=_0xd3eb[134];_0xa701x3f[_0xd3eb[25]](_0xa701x41);_0xa701x2c[_0xd3eb[25]](_0xa701x2d);_0xa701x2c[_0xd3eb[25]](_0xa701x3f);_0xa701x28[_0xd3eb[25]](_0xa701x2c);var _0xa701x35=mxUtils[_0xd3eb[80]](mxResources[_0xd3eb[76]](_0xd3eb[136]),function(){_0xa701x8[_0xd3eb[138]](_0xa701x41[_0xd3eb[23]]);_0xa701x8[_0xd3eb[79]]()});_0xa701x35[_0xd3eb[31]]=_0xd3eb[104];var _0xa701x38=mxUtils[_0xd3eb[80]](mxResources[_0xd3eb[76]](_0xd3eb[105]),function(){_0xa701x8[_0xd3eb[79]]()});_0xa701x38[_0xd3eb[31]]=_0xd3eb[106];_0xa701x29[_0xd3eb[25]](_0xa701x35);_0xa701x29[_0xd3eb[25]](_0xa701x38);_0xa701x26[_0xd3eb[25]](_0xa701x27);_0xa701x26[_0xd3eb[25]](_0xa701x28);_0xa701x26[_0xd3eb[25]](_0xa701x29);this[_0xd3eb[64]]=_0xa701x26}function OpenDialog(_0xa701x8){var _0xa701x26=_0xa701x8[_0xd3eb[50]](_0xd3eb[69]);var _0xa701x27=_0xa701x8[_0xd3eb[50]](_0xd3eb[70]);var _0xa701x28=_0xa701x8[_0xd3eb[50]](_0xd3eb[71]);var _0xa701x29=_0xa701x8[_0xd3eb[50]](_0xd3eb[72]);var _0xa701x2a=_0xa701x8[_0xd3eb[74]](_0xd3eb[73]);mxUtils[_0xd3eb[78]](_0xa701x2a,mxResources[_0xd3eb[76]](_0xd3eb[8]));var _0xa701x2b=mxUtils[_0xd3eb[80]](_0xd3eb[40],function(){_0xa701x8[_0xd3eb[79]]()});_0xa701x2b[_0xd3eb[31]]=_0xd3eb[65];_0xa701x27[_0xd3eb[25]](_0xa701x2b);_0xa701x27[_0xd3eb[25]](_0xa701x2a);var _0xa701x2c=_0xa701x8[_0xd3eb[50]](_0xd3eb[81]);var _0xa701x2d=_0xa701x8[_0xd3eb[50]](_0xd3eb[128]);var _0xa701x3f=_0xa701x8[_0xd3eb[50]](_0xd3eb[129]);var _0xa701x40=document[_0xd3eb[2]](_0xd3eb[130]);_0xa701x40[_0xd3eb[31]]=_0xd3eb[131];mxUtils[_0xd3eb[78]](_0xa701x40,mxResources[_0xd3eb[76]](_0xd3eb[125]));_0xa701x2d[_0xd3eb[25]](_0xa701x40);var _0xa701xb= new XMLHttpRequest();_0xa701xb[_0xd3eb[8]](_0xd3eb[7],_0xd3eb[140],false);_0xa701xb[_0xd3eb[14]](_0xd3eb[9],_0xd3eb[10]+_0xa701x8[_0xd3eb[13]][_0xd3eb[12]][_0xd3eb[11]]);_0xa701xb[_0xd3eb[15]](null);var _0xa701xc=[];if(_0xa701xb[_0xd3eb[16]]===200){_0xa701xc=JSON[_0xd3eb[18]](_0xa701xb[_0xd3eb[17]])};var _0xa701x41=document[_0xd3eb[2]](_0xd3eb[19]);for(var _0xa701x45=0;_0xa701x45<_0xa701xc[_0xd3eb[141]];_0xa701x45++){var _0xa701xd=document[_0xd3eb[2]](_0xd3eb[20]);_0xa701xd[_0xd3eb[21]]=_0xa701xc[_0xa701x45][_0xd3eb[125]];_0xa701xd[_0xd3eb[23]]=_0xa701xc[_0xa701x45][_0xd3eb[133]];_0xa701x41[_0xd3eb[25]](_0xa701xd)};_0xa701x41[_0xd3eb[31]]=_0xd3eb[134];_0xa701x3f[_0xd3eb[25]](_0xa701x41);_0xa701x2c[_0xd3eb[25]](_0xa701x2d);_0xa701x2c[_0xd3eb[25]](_0xa701x3f);_0xa701x28[_0xd3eb[25]](_0xa701x2c);var _0xa701x35=mxUtils[_0xd3eb[80]](mxResources[_0xd3eb[76]](_0xd3eb[8]),function(){console[_0xd3eb[94]](_0xa701x41);console[_0xd3eb[94]](_0xa701x41[_0xd3eb[23]]);window[_0xd3eb[8]](_0xd3eb[142]+_0xa701x41[_0xd3eb[23]],_0xd3eb[122]);_0xa701x8[_0xd3eb[79]]()});_0xa701x35[_0xd3eb[31]]=_0xd3eb[104];var _0xa701x38=mxUtils[_0xd3eb[80]](mxResources[_0xd3eb[76]](_0xd3eb[105]),function(){_0xa701x8[_0xd3eb[79]]()});_0xa701x38[_0xd3eb[31]]=_0xd3eb[106];_0xa701x29[_0xd3eb[25]](_0xa701x35);_0xa701x29[_0xd3eb[25]](_0xa701x38);_0xa701x26[_0xd3eb[25]](_0xa701x27);_0xa701x26[_0xd3eb[25]](_0xa701x28);_0xa701x26[_0xd3eb[25]](_0xa701x29);this[_0xd3eb[64]]=_0xa701x26}function RenameDialog(_0xa701x8){var _0xa701x26=_0xa701x8[_0xd3eb[50]](_0xd3eb[69]);var _0xa701x27=_0xa701x8[_0xd3eb[50]](_0xd3eb[70]);var _0xa701x28=_0xa701x8[_0xd3eb[50]](_0xd3eb[71]);var _0xa701x29=_0xa701x8[_0xd3eb[50]](_0xd3eb[72]);var _0xa701x2a=_0xa701x8[_0xd3eb[74]](_0xd3eb[73]);mxUtils[_0xd3eb[78]](_0xa701x2a,mxResources[_0xd3eb[76]](_0xd3eb[143]));var _0xa701x2b=mxUtils[_0xd3eb[80]](_0xd3eb[40],function(){_0xa701x8[_0xd3eb[79]]()});_0xa701x2b[_0xd3eb[31]]=_0xd3eb[65];_0xa701x27[_0xd3eb[25]](_0xa701x2b);_0xa701x27[_0xd3eb[25]](_0xa701x2a);var _0xa701x2c=_0xa701x8[_0xd3eb[50]](_0xd3eb[81]);var _0xa701x2d=_0xa701x8[_0xd3eb[50]](_0xd3eb[128]);var _0xa701x3f=_0xa701x8[_0xd3eb[50]](_0xd3eb[129]);var _0xa701x40=document[_0xd3eb[2]](_0xd3eb[130]);_0xa701x40[_0xd3eb[31]]=_0xd3eb[131];mxUtils[_0xd3eb[78]](_0xa701x40,mxResources[_0xd3eb[76]](_0xd3eb[125]));_0xa701x2d[_0xd3eb[25]](_0xa701x40);var _0xa701x3d=_0xa701x8[_0xd3eb[13]][_0xd3eb[144]];var _0xa701x3=document[_0xd3eb[2]](_0xd3eb[1]);_0xa701x3[_0xd3eb[5]](_0xd3eb[23],_0xa701x3d);_0xa701x3[_0xd3eb[31]]=_0xd3eb[134];_0xa701x3f[_0xd3eb[25]](_0xa701x3);_0xa701x2c[_0xd3eb[25]](_0xa701x2d);_0xa701x2c[_0xd3eb[25]](_0xa701x3f);_0xa701x28[_0xd3eb[25]](_0xa701x2c);var _0xa701x35=mxUtils[_0xd3eb[80]](mxResources[_0xd3eb[76]](_0xd3eb[135]),function(){var _0xa701xb= new XMLHttpRequest();_0xa701xb[_0xd3eb[8]](_0xd3eb[145],SAVE_URL+_0xa701x8[_0xd3eb[13]][_0xd3eb[12]][_0xd3eb[133]],true);_0xa701xb[_0xd3eb[14]](_0xd3eb[146],_0xd3eb[147]);_0xa701xb[_0xd3eb[14]](_0xd3eb[9],_0xd3eb[10]+_0xa701x8[_0xd3eb[13]][_0xd3eb[12]][_0xd3eb[11]]);_0xa701xb[_0xd3eb[15]](_0xd3eb[148]+_0xa701x3[_0xd3eb[23]]);_0xa701xb[_0xd3eb[95]]=function(_0xa701x33){if(_0xa701xb[_0xd3eb[16]]===200){_0xa701x8[_0xd3eb[13]][_0xd3eb[150]](_0xd3eb[149]);_0xa701x8[_0xd3eb[13]][_0xd3eb[144]]=_0xa701x3[_0xd3eb[23]]}else {console[_0xd3eb[94]](_0xa701xb[_0xd3eb[17]]);_0xa701x8[_0xd3eb[13]][_0xd3eb[150]](JSON[_0xd3eb[18]](_0xa701xb[_0xd3eb[17]])[_0xd3eb[152]][0][_0xd3eb[151]])}};_0xa701xb[_0xd3eb[153]]=function(_0xa701x33){mxUtils[_0xd3eb[155]](_0xa701xb[_0xd3eb[154]])};_0xa701x8[_0xd3eb[79]]()});_0xa701x35[_0xd3eb[31]]=_0xd3eb[104];var _0xa701x38=mxUtils[_0xd3eb[80]](mxResources[_0xd3eb[76]](_0xd3eb[105]),function(){_0xa701x8[_0xd3eb[79]]()});_0xa701x38[_0xd3eb[31]]=_0xd3eb[106];_0xa701x29[_0xd3eb[25]](_0xa701x35);_0xa701x29[_0xd3eb[25]](_0xa701x38);_0xa701x26[_0xd3eb[25]](_0xa701x27);_0xa701x26[_0xd3eb[25]](_0xa701x28);_0xa701x26[_0xd3eb[25]](_0xa701x29);this[_0xd3eb[64]]=_0xa701x26}function EditFileDialog(_0xa701x8){var _0xa701x26=_0xa701x8[_0xd3eb[50]](_0xd3eb[69]);var _0xa701x27=_0xa701x8[_0xd3eb[50]](_0xd3eb[70]);var _0xa701x28=_0xa701x8[_0xd3eb[50]](_0xd3eb[71]);var _0xa701x29=_0xa701x8[_0xd3eb[50]](_0xd3eb[72]);var _0xa701x2a=_0xa701x8[_0xd3eb[74]](_0xd3eb[73]);mxUtils[_0xd3eb[78]](_0xa701x2a,mxResources[_0xd3eb[76]](_0xd3eb[156]));var _0xa701x2b=mxUtils[_0xd3eb[80]](_0xd3eb[40],function(){_0xa701x8[_0xd3eb[79]]()});_0xa701x2b[_0xd3eb[31]]=_0xd3eb[65];_0xa701x27[_0xd3eb[25]](_0xa701x2b);_0xa701x27[_0xd3eb[25]](_0xa701x2a);var _0xa701x2c=_0xa701x8[_0xd3eb[50]](_0xd3eb[81]);var _0xa701x2d=_0xa701x8[_0xd3eb[50]](_0xd3eb[82]);var _0xa701x2e=document[_0xd3eb[2]](_0xd3eb[83]);_0xa701x2e[_0xd3eb[53]][_0xd3eb[84]]=_0xd3eb[85];_0xa701x2e[_0xd3eb[53]][_0xd3eb[86]]=_0xd3eb[87];_0xa701x2e[_0xd3eb[23]]=mxUtils[_0xd3eb[158]](_0xa701x8[_0xd3eb[13]][_0xd3eb[157]]());if(fileSupport){function _0xa701x48(_0xa701x30){_0xa701x30[_0xd3eb[159]]();_0xa701x30[_0xd3eb[160]]();if(_0xa701x30[_0xd3eb[161]][_0xd3eb[92]][_0xd3eb[141]]>0){var _0xa701x49=_0xa701x30[_0xd3eb[161]][_0xd3eb[92]][0];var _0xa701x4a= new FileReader();_0xa701x4a[_0xd3eb[95]]=function(_0xa701x33){_0xa701x2e[_0xd3eb[23]]=_0xa701x33[_0xd3eb[93]][_0xd3eb[96]]};_0xa701x4a[_0xd3eb[97]](_0xa701x49)}}function _0xa701x4b(_0xa701x30){_0xa701x30[_0xd3eb[159]]();_0xa701x30[_0xd3eb[160]]()}_0xa701x2e[_0xd3eb[100]](_0xd3eb[162],_0xa701x4b,false);_0xa701x2e[_0xd3eb[100]](_0xd3eb[163],_0xa701x48,false)};_0xa701x2d[_0xd3eb[25]](_0xa701x2e);_0xa701x2c[_0xd3eb[25]](_0xa701x2d);_0xa701x28[_0xd3eb[25]](_0xa701x2c);var _0xa701x35=mxUtils[_0xd3eb[80]](mxResources[_0xd3eb[76]](_0xd3eb[135]),function(){var _0xa701x37=mxUtils[_0xd3eb[101]](_0xa701x2e[_0xd3eb[23]]);_0xa701x8[_0xd3eb[13]][_0xd3eb[102]](_0xa701x37[_0xd3eb[48]]);_0xa701x8[_0xd3eb[79]]()});_0xa701x35[_0xd3eb[31]]=_0xd3eb[104];var _0xa701x38=mxUtils[_0xd3eb[80]](mxResources[_0xd3eb[76]](_0xd3eb[105]),function(){_0xa701x8[_0xd3eb[79]]()});_0xa701x38[_0xd3eb[31]]=_0xd3eb[106];_0xa701x29[_0xd3eb[25]](_0xa701x35);_0xa701x29[_0xd3eb[25]](_0xa701x38);_0xa701x26[_0xd3eb[25]](_0xa701x27);_0xa701x26[_0xd3eb[25]](_0xa701x28);_0xa701x26[_0xd3eb[25]](_0xa701x29);this[_0xd3eb[64]]=_0xa701x26}function ExportDialog(_0xa701x8){var _0xa701x26=_0xa701x8[_0xd3eb[50]](_0xd3eb[69]);var _0xa701x27=_0xa701x8[_0xd3eb[50]](_0xd3eb[70]);var _0xa701x28=_0xa701x8[_0xd3eb[50]](_0xd3eb[164]);var _0xa701x29=_0xa701x8[_0xd3eb[50]](_0xd3eb[72]);var _0xa701x2a=_0xa701x8[_0xd3eb[74]](_0xd3eb[73]);mxUtils[_0xd3eb[78]](_0xa701x2a,mxResources[_0xd3eb[76]](_0xd3eb[165])+_0xd3eb[77]);var _0xa701x2b=mxUtils[_0xd3eb[80]](_0xd3eb[40],function(){_0xa701x8[_0xd3eb[79]]()});_0xa701x2b[_0xd3eb[31]]=_0xd3eb[65];_0xa701x27[_0xd3eb[25]](_0xa701x2b);_0xa701x27[_0xd3eb[25]](_0xa701x2a);var _0xa701x4d=_0xa701x8[_0xd3eb[50]](_0xd3eb[166]);var _0xa701x4e=_0xa701x8[_0xd3eb[50]](_0xd3eb[167]);var _0xa701x40=document[_0xd3eb[2]](_0xd3eb[130]);_0xa701x40[_0xd3eb[31]]=_0xd3eb[168];mxUtils[_0xd3eb[78]](_0xa701x40,mxResources[_0xd3eb[76]](_0xd3eb[144]));var _0xa701x3=document[_0xd3eb[2]](_0xd3eb[1]);_0xa701x3[_0xd3eb[5]](_0xd3eb[23],_0xa701x8[_0xd3eb[13]][_0xd3eb[127]]());_0xa701x3[_0xd3eb[31]]=_0xd3eb[134];var _0xa701x23=_0xa701x8[_0xd3eb[50]](_0xd3eb[169]);_0xa701x23[_0xd3eb[25]](_0xa701x3);_0xa701x4e[_0xd3eb[25]](_0xa701x40);_0xa701x4e[_0xd3eb[25]](_0xa701x23);_0xa701x4d[_0xd3eb[25]](_0xa701x4e);_0xa701x28[_0xd3eb[25]](_0xa701x4d);var _0xa701x35=mxUtils[_0xd3eb[80]](mxResources[_0xd3eb[76]](_0xd3eb[165]),mxUtils[_0xd3eb[103]](this,function(_0xa701x36){_0xa701x8[_0xd3eb[135]](false);var _0xa701x4f=encodeURIComponent(mxUtils[_0xd3eb[170]](_0xa701x8[_0xd3eb[13]][_0xd3eb[157]]())); new mxXmlRequest(SAVE_URL+_0xa701x8[_0xd3eb[13]][_0xd3eb[12]][_0xd3eb[133]]+_0xd3eb[172],_0xd3eb[173]+_0xa701x3[_0xd3eb[23]],_0xd3eb[7])[_0xd3eb[171]](document,_0xd3eb[122]);_0xa701x8[_0xd3eb[79]]()}));_0xa701x35[_0xd3eb[31]]=_0xd3eb[104];var _0xa701x38=mxUtils[_0xd3eb[80]](mxResources[_0xd3eb[76]](_0xd3eb[105]),function(){_0xa701x8[_0xd3eb[79]]()});_0xa701x38[_0xd3eb[31]]=_0xd3eb[106];_0xa701x29[_0xd3eb[25]](_0xa701x35);_0xa701x29[_0xd3eb[25]](_0xa701x38);_0xa701x26[_0xd3eb[25]](_0xa701x27);_0xa701x26[_0xd3eb[25]](_0xa701x28);_0xa701x26[_0xd3eb[25]](_0xa701x29);this[_0xd3eb[64]]=_0xa701x26}function GeneralDialog(_0xa701x8,_0xa701x51){var _0xa701x52=_0xa701x8[_0xd3eb[13]][_0xd3eb[174]];var _0xa701x26=_0xa701x8[_0xd3eb[50]](_0xd3eb[69]);var _0xa701x27=_0xa701x8[_0xd3eb[50]](_0xd3eb[70]);var _0xa701x28=_0xa701x8[_0xd3eb[50]](_0xd3eb[175]);var _0xa701x29=_0xa701x8[_0xd3eb[50]](_0xd3eb[72]);var _0xa701x2a=_0xa701x8[_0xd3eb[74]](_0xd3eb[73]);mxUtils[_0xd3eb[78]](_0xa701x2a,mxResources[_0xd3eb[76]](_0xd3eb[156])+_0xd3eb[176]+mxResources[_0xd3eb[76]](_0xa701x51[_0xd3eb[23]][_0xd3eb[177]]));var _0xa701x2b=mxUtils[_0xd3eb[80]](_0xd3eb[40],function(){_0xa701x8[_0xd3eb[79]]()});_0xa701x2b[_0xd3eb[31]]=_0xd3eb[65];_0xa701x27[_0xd3eb[25]](_0xa701x2b);_0xa701x27[_0xd3eb[25]](_0xa701x2a);var _0xa701x53=_0xa701x51[_0xd3eb[23]][_0xd3eb[178]][_0xd3eb[141]];var _0xa701x4d=_0xa701x8[_0xd3eb[50]](_0xd3eb[166]);for(var _0xa701x54=0;_0xa701x54<_0xa701x53;_0xa701x54++){var _0xa701x3d=_0xa701x51[_0xd3eb[23]][_0xd3eb[178]][_0xa701x54][_0xd3eb[125]];var _0xa701x3e=_0xd3eb[126]+_0xa701x3d;var _0xa701x2=_0xa701x51[_0xd3eb[23]][_0xd3eb[178]][_0xa701x54][_0xd3eb[23]];var _0xa701x4e=_0xa701x8[_0xd3eb[50]]((_0xa701x54==_0xa701x53-1)?_0xd3eb[167]:_0xd3eb[179]);var _0xa701x40=document[_0xd3eb[2]](_0xd3eb[130]);_0xa701x40[_0xd3eb[31]]=_0xd3eb[168];mxUtils[_0xd3eb[78]](_0xa701x40,mxResources[_0xd3eb[76]](_0xa701x3d));_0xa701x4e[_0xd3eb[25]](_0xa701x40);var _0xa701x3;switch(_0xa701x3d){case _0xd3eb[181]:_0xa701x3=createDropdownFromApi(_0xd3eb[180],_0xa701x2,_0xd3eb[125],_0xd3eb[133],_0xa701x8);break;case _0xd3eb[183]:_0xa701x3=createDropdownFromApi(_0xd3eb[182],_0xa701x2,_0xd3eb[125],_0xd3eb[125],_0xa701x8);break;case _0xd3eb[185]:_0xa701x3=createDropdownFromApi(_0xd3eb[184],_0xa701x2,_0xd3eb[125],_0xd3eb[133],_0xa701x8);break;case _0xd3eb[187]:_0xa701x3=createDropdownFromApi(_0xd3eb[186],_0xa701x2,_0xd3eb[125],_0xd3eb[133],_0xa701x8);break;case _0xd3eb[189]:_0xa701x3=createDropdownFromApi(_0xd3eb[188],_0xa701x2,_0xd3eb[125],_0xd3eb[125],_0xa701x8);break;case _0xd3eb[191]:_0xa701x3=createDropdownFromApi(_0xd3eb[190],_0xa701x2,_0xd3eb[191],_0xd3eb[133],_0xa701x8,[_0xd3eb[191],_0xd3eb[189]],_0xd3eb[192]);break;case _0xd3eb[193]:_0xa701x3=createDropdownFromArray(ISPEECHASRMODEL,_0xa701x2);break;case _0xd3eb[194]:_0xa701x3=createDropdownFromArray(ISPEECHASRLANG,_0xa701x2);break;case _0xd3eb[195]:_0xa701x3=createDropdownFromArray(ISPEECHLANG,_0xa701x2);break;case _0xd3eb[196]:_0xa701x3=createDropdownFromArray(GOOGLETTSLANG,_0xa701x2);break;case _0xd3eb[199]:_0xa701x3=createGroupedDropdownFromApi(_0xd3eb[197],_0xa701x2,_0xd3eb[125],_0xd3eb[133],_0xa701x8,_0xd3eb[198]);break;case _0xd3eb[200]:_0xa701x3=createDropdownFromApi(_0xd3eb[140],_0xa701x2,_0xd3eb[125],_0xd3eb[133],_0xa701x8);break;case _0xd3eb[202]:_0xa701x3=createDropdownFromApi(_0xd3eb[201],_0xa701x2,_0xd3eb[125],_0xd3eb[133],_0xa701x8);break;case _0xd3eb[205]:_0xa701x3=createDropdownFromApi(_0xd3eb[203],_0xa701x2,_0xd3eb[204],_0xd3eb[133],_0xa701x8);break;case _0xd3eb[206]:;case _0xd3eb[207]:;case _0xd3eb[208]:;case _0xd3eb[209]:;case _0xd3eb[17]:;case _0xd3eb[212]:_0xa701x3=document[_0xd3eb[2]](_0xd3eb[1]);_0xa701x3[_0xd3eb[5]](_0xd3eb[3],_0xd3eb[210]);_0xa701x3[_0xd3eb[5]](_0xd3eb[211],0);_0xa701x3[_0xd3eb[5]](_0xd3eb[46],1000);_0xa701x3[_0xd3eb[5]](_0xd3eb[23],_0xa701x2);_0xa701x3[_0xd3eb[31]]=_0xd3eb[134];break;case _0xd3eb[21]:;case _0xd3eb[213]:;case _0xd3eb[214]:;case _0xd3eb[215]:;case _0xd3eb[217]:_0xa701x3=document[_0xd3eb[2]](_0xd3eb[83]);_0xa701x3[_0xd3eb[216]]=_0xa701x2;_0xa701x3[_0xd3eb[31]]=_0xd3eb[134];break;default:_0xa701x3=document[_0xd3eb[2]](_0xd3eb[1]);_0xa701x3[_0xd3eb[5]](_0xd3eb[23],_0xa701x2);_0xa701x3[_0xd3eb[31]]=_0xd3eb[134];break};_0xa701x3[_0xd3eb[5]](_0xd3eb[133],_0xa701x3e);var _0xa701x23=_0xa701x8[_0xd3eb[50]](_0xd3eb[169]);_0xa701x23[_0xd3eb[25]](_0xa701x3);if(mxResources[_0xd3eb[76]](_0xd3eb[218]+_0xa701x3d)){var _0xa701x55=_0xa701x8[_0xd3eb[50]](_0xd3eb[219]);_0xa701x55[_0xd3eb[31]]=_0xd3eb[220];mxUtils[_0xd3eb[78]](_0xa701x55,mxResources[_0xd3eb[76]](_0xd3eb[218]+_0xa701x3d));_0xa701x23[_0xd3eb[25]](_0xa701x55)};_0xa701x4e[_0xd3eb[25]](_0xa701x23);_0xa701x4d[_0xd3eb[25]](_0xa701x4e)};_0xa701x28[_0xd3eb[25]](_0xa701x4d);var _0xa701x35=mxUtils[_0xd3eb[80]](mxResources[_0xd3eb[76]](_0xd3eb[135]),mxUtils[_0xd3eb[103]](this,function(_0xa701x36){for(var _0xa701x54=0;_0xa701x54<_0xa701x51[_0xd3eb[23]][_0xd3eb[178]][_0xd3eb[141]];_0xa701x54++){var _0xa701x3e=_0xd3eb[126]+_0xa701x51[_0xd3eb[23]][_0xd3eb[178]][_0xa701x54][_0xd3eb[125]];var _0xa701x3d=_0xa701x51[_0xd3eb[23]][_0xd3eb[178]][_0xa701x54][_0xd3eb[125]];console[_0xd3eb[94]](_0xa701x3d,document[_0xd3eb[221]](_0xa701x3e)[_0xd3eb[23]]);_0xa701x51[_0xd3eb[5]](_0xa701x3d,document[_0xd3eb[221]](_0xa701x3e)[_0xd3eb[23]])};_0xa701x52[_0xd3eb[222]](_0xa701x51);_0xa701x8[_0xd3eb[79]]()}));_0xa701x35[_0xd3eb[31]]=_0xd3eb[104];var _0xa701x38=mxUtils[_0xd3eb[80]](mxResources[_0xd3eb[76]](_0xd3eb[105]),function(){_0xa701x8[_0xd3eb[79]]()});_0xa701x38[_0xd3eb[31]]=_0xd3eb[106];_0xa701x29[_0xd3eb[25]](_0xa701x35);_0xa701x29[_0xd3eb[25]](_0xa701x38);_0xa701x26[_0xd3eb[25]](_0xa701x27);_0xa701x26[_0xd3eb[25]](_0xa701x28);_0xa701x26[_0xd3eb[25]](_0xa701x29);this[_0xd3eb[64]]=_0xa701x26}
\ No newline at end of file
+'use strict';
+/**
+ * $Id: Dialogs.js,v 1.5 2013-01-29 17:23:31 gaudenz Exp $
+ * Copyright (c) 2006-2012, JGraph Ltd
+ */
+/**
+ * Constructs a new dialog.
+ */
+
+function createCheckbox(value) {
+       var input = document.createElement('input');
+       input.setAttribute('type', 'checkbox');
+       if (value) {
+               input.setAttribute('checked', true);
+       }
+       return input;
+}
+
+function createDropdownFromApi(path, value, option_name, option_value, editorUi, keys, pattern) {
+       var req = new XMLHttpRequest();
+       req.open('GET', path, false); // `false` makes the request synchronous
+       req.setRequestHeader('Authorization', 'Bearer ' + editorUi.editor.data.token);
+       req.send(null);
+       var res = [];
+       if (req.status === 200) {
+               res = JSON.parse(req.response);
+       }
+       var input = document.createElement('select');
+       var option = document.createElement('option');
+       option.text = '-- None --';
+       option.value = '-1';
+       input.appendChild(option);
+       res.rows.forEach(function(elem) {
+               option = document.createElement('option');
+               option.text = elem[option_name];
+               if (keys && pattern) {
+                       keys.forEach(function(key) {
+                               pattern = pattern.replace('%' + key + '%', elem[key]);
+                       });
+                       option.value = pattern;
+                       option.selected = (pattern == value);
+               } else {
+                       option.value = elem[option_value];
+                       option.selected = (elem[option_value] == value);
+               }
+               input.appendChild(option);
+       });
+       input.className = 'form-control select2';
+
+       return input;
+}
+
+function createGroupedDropdownFromApi(path, value, option_name, option_value, editorUi, associationField) {
+       var req = new XMLHttpRequest();
+       req.open('GET', path, false); // `false` makes the request synchronous
+       req.setRequestHeader('Authorization', 'Bearer ' + editorUi.editor.data.token);
+       req.send(null);
+       var res = [];
+       if (req.status === 200) {
+               res = JSON.parse(req.response);
+       }
+       var input = document.createElement('select');
+       var option = document.createElement('option');
+       option.text = '-- None --';
+       option.value = '0';
+       input.appendChild(option);
+       var mainFilter = {};
+       var groupFilter = {};
+       mainFilter[associationField] = null;
+       var mainValues = _.filter(res.rows, mainFilter);
+       var groupValues = {};
+       mainValues.forEach(function(elem) {
+               option = document.createElement('option');
+               option.className = 'select-group-father';
+               option.text = elem[option_name].toUpperCase();
+               option.value = elem[option_value];
+               option.selected = (elem[option_value] == value);
+               input.appendChild(option);
+               groupFilter[associationField] = elem[option_value];
+               groupValues = _.filter(res.rows, groupFilter);
+               groupValues.forEach(function(elem) {
+                       option = document.createElement('option');
+                       option.className = 'select-group-son';
+                       option.text = '-' + _.capitalize(elem[option_name]);
+                       option.value = elem[option_value];
+                       option.selected = (elem[option_value] == value);
+                       input.appendChild(option);
+               });
+       })
+       input.className = 'form-control select2';
+
+       return input;
+}
+
+function createDropdownFromArray(array, value) {
+       var input = document.createElement('select');
+
+       for (var item in array) {
+               var option = document.createElement('option');
+               option.text = array[item];
+               option.value = item;
+               if (value > 0 || value != '')
+                       option.selected = (value === item) ? true : false;
+
+               input.appendChild(option);
+       }
+
+       input.className = 'form-control select2';
+
+       return input;
+}
+
+function Dialog(editorUi, elt, w, h, modal, closable, onClose) {
+       var dx = 0;
+
+       if (mxClient.IS_IE && document.documentMode != 9) {
+               dx = 60;
+       }
+
+       w += dx;
+       h += dx;
+
+       var left = Math.max(0, Math.round((document.body.scrollWidth - w) / 2));
+       var top = Math.max(0, Math.round((Math.max(document.body.scrollHeight,
+               document.documentElement.scrollHeight) - h) / 3));
+
+       var div = editorUi.createDiv('geDialog');
+       div.className = 'modal fade in center';
+       div.style.display = 'block';
+       div.style.paddingRight = '12px';
+       // div.style.width = w + 'px';
+       // div.style.height = h + 'px';
+       // div.style.left = left + 'px';
+       // div.style.top = top + 'px';
+
+       var divModalDialog = editorUi.createDiv('geModalDialog');
+       divModalDialog.className = 'modal-dialog';
+
+       divModalDialog.appendChild(elt);
+       div.appendChild(divModalDialog);
+
+       if (this.bg == null) {
+               this.bg = editorUi.createDiv('background');
+               this.bg.className = 'modal-backdrop fade in';
+
+               if (mxClient.IS_QUIRKS) {
+                       new mxDivResizer(this.bg);
+               }
+       }
+
+       if (modal) {
+               document.body.appendChild(this.bg);
+       }
+
+       document.body.appendChild(div);
+
+       this.onDialogClose = onClose;
+       this.container = div;
+};
+
+/**
+ * Removes the dialog from the DOM.
+ */
+Dialog.prototype.close = function() {
+       if (this.onDialogClose != null) {
+               this.onDialogClose();
+               this.onDialogClose = null;
+       }
+
+       this.container.parentNode.removeChild(this.container);
+       this.bg.parentNode.removeChild(this.bg);
+};
+
+/**
+ * Constructs a new open dialog.
+ */
+function ImportDialog(editorUi) {
+
+       var content = editorUi.createDiv('modal-content');
+       var header = editorUi.createDiv('modal-header');
+       var body = editorUi.createDiv('modal-body');
+       var footer = editorUi.createDiv('modal-footer');
+
+       //--- START HEADER
+       var title = editorUi.createHeader('h4');
+       mxUtils.write(title, mxResources.get('import') + ' XML');
+
+       var x = mxUtils.button('', function() {
+               editorUi.hideDialog();
+       });
+       x.className = 'close';
+
+       header.appendChild(x);
+       header.appendChild(title);
+       //--- END HEADER
+
+       //--- START BODY
+       var row = editorUi.createDiv('row');
+       var col1 = editorUi.createDiv('col-md-12');
+
+       var textarea = document.createElement('textarea');
+       textarea.style.width = '100%';
+       textarea.style.height = '374px';
+
+       var input = document.createElement('input');
+       input.type = 'file';
+       input.setAttribute('accept', 'text/xml');
+
+       input.addEventListener('change', function readSingleFile(evt) {
+               //Retrieve the first (and only!) File from the FileList object
+               var f = evt.target.files[0];
+               console.log(f);
+               if (f) {
+                       if (f.type === 'text/xml') {
+                               var r = new FileReader();
+                               r.onload = function(e) {
+                                       var contents = e.target.result;
+                                       mxUtils.write(textarea, contents);
+                               };
+                               r.readAsText(f);
+                       } else {
+                               alert('Failed to load format file');
+                       }
+               } else {
+                       alert('Failed to load file');
+               }
+       }, false);
+
+       col1.appendChild(input);
+       col1.appendChild(textarea);
+
+       row.appendChild(col1);
+       body.appendChild(row);
+       //--- END BODY
+
+       //--- START FOOTER
+       var save = mxUtils.button(mxResources.get('import'), mxUtils.bind(this,
+               function(data) {
+                       var doc = mxUtils.parseXml(textarea.value);
+                       editorUi.editor.setGraphXml(doc.documentElement);
+                       editorUi.hideDialog();
+               }));
+       save.className = 'btn blue';
+
+       var close = mxUtils.button(mxResources.get('cancel'), function() {
+               editorUi.hideDialog();
+       });
+       close.className = 'btn default';
+
+       footer.appendChild(save);
+       footer.appendChild(close);
+       //--- END FOOTER
+
+       //--- START CONTENT
+       content.appendChild(header);
+       content.appendChild(body);
+       content.appendChild(footer);
+       //--- END CONTENT
+
+       this.container = content;
+
+};
+
+/**
+ * Constructs a new about dialog.
+ */
+function AboutDialog(editorUi) {
+       var content = editorUi.createDiv('modal-content');
+       var header = editorUi.createDiv('modal-header');
+       var body = editorUi.createDiv('modal-body');
+       var footer = editorUi.createDiv('modal-footer');
+
+       //--- START HEADER
+       var title = editorUi.createHeader('h4');
+       mxUtils.write(title, mxResources.get('about') + ' Cally Square');
+
+       var x = mxUtils.button('', function() {
+               editorUi.hideDialog();
+       });
+       x.className = 'close';
+
+       header.appendChild(x);
+       header.appendChild(title);
+       //--- END HEADER
+
+       //--- START BODY
+       var img = document.createElement('img');
+       img.style.border = '0px';
+       img.setAttribute('width', '176');
+       img.setAttribute('width', '151');
+       img.setAttribute('src', IMAGE_PATH + '/logo.png');
+       body.appendChild(img);
+       mxUtils.br(body);
+       mxUtils.write(body, 'Powered by Xenialab ' + mxClient.VERSION);
+       mxUtils.br(body);
+       var link = document.createElement('a');
+       link.setAttribute('href', 'http://www.callysquare.com/');
+       link.setAttribute('target', '_blank');
+       mxUtils.write(link, 'www.callysquare.com');
+       body.appendChild(link);
+       mxUtils.br(body);
+       mxUtils.br(body);
+       //--- END BODY
+
+       var close = mxUtils.button(mxResources.get('close'), function() {
+               editorUi.hideDialog();
+       });
+       close.className = 'btn default';
+
+       footer.appendChild(close);
+       //--- END FOOTER
+
+       //--- START CONTENT
+       content.appendChild(header);
+       content.appendChild(body);
+       content.appendChild(footer);
+       //--- END CONTENT
+
+       this.container = content;
+};
+
+/**
+ * Constructs a new save dialog.
+ */
+function SaveDialog(editorUi) {
+
+       var content = editorUi.createDiv('modal-content');
+       var header = editorUi.createDiv('modal-header');
+       var body = editorUi.createDiv('modal-body');
+       var footer = editorUi.createDiv('modal-footer');
+
+       //--- START HEADER
+       var title = editorUi.createHeader('h4');
+       mxUtils.write(title, mxResources.get('saveAs'));
+
+       var x = mxUtils.button('', function() {
+               editorUi.hideDialog();
+       });
+       x.className = 'close';
+
+       header.appendChild(x);
+       header.appendChild(title);
+       //--- END HEADER
+
+       //--- START BODY
+       var name = 'name';
+       var id = '_' + name;
+       var value = editorUi.editor.getOrCreateFilename();
+
+       var row = editorUi.createDiv('row');
+       var col1 = editorUi.createDiv('col-md-4');
+       var col2 = editorUi.createDiv('col-md-8');
+
+       var label = document.createElement('label');
+       label.className = 'control-label pull-right';
+       mxUtils.write(label, mxResources.get(name));
+       col1.appendChild(label);
+
+       var select = document.createElement('input');
+       select.setAttribute('value', value + '_copy');
+       select.setAttribute('id', id)
+       select.className = 'form-control';
+       col2.appendChild(select);
+
+       row.appendChild(col1);
+       row.appendChild(col2);
+       body.appendChild(row);
+       //--- END BODY
+
+       //--- START FOOTER
+       var save = mxUtils.button(mxResources.get('save'), function() {
+               editorUi.saveAs(select.value);
+               editorUi.hideDialog();
+       });
+       save.className = 'btn blue';
+
+       var close = mxUtils.button(mxResources.get('cancel'), function() {
+               editorUi.hideDialog();
+       });
+       close.className = 'btn default';
+
+       footer.appendChild(save);
+       footer.appendChild(close);
+       //--- END FOOTER
+
+       //--- START CONTENT
+       content.appendChild(header);
+       content.appendChild(body);
+       content.appendChild(footer);
+       //--- END CONTENT
+
+       this.container = content;
+       //nameInput.setAttribute('value', editorUi.editor.getOrCreateFilename());
+};
+
+/**
+ * Constructs a new save dialog.
+ */
+function NewDialog(editorUi) {
+
+       var content = editorUi.createDiv('modal-content');
+       var header = editorUi.createDiv('modal-header');
+       var body = editorUi.createDiv('modal-body');
+       var footer = editorUi.createDiv('modal-footer');
+
+       //--- START HEADER
+       var title = editorUi.createHeader('h4');
+       mxUtils.write(title, mxResources.get('new'));
+
+       var x = mxUtils.button('', function() {
+               editorUi.hideDialog();
+       });
+       x.className = 'close';
+
+       header.appendChild(x);
+       header.appendChild(title);
+       //--- END HEADER
+
+       //--- START BODY
+       var name = 'name';
+       var id = '_' + name;
+       var value = editorUi.editor.getOrCreateFilename();
+
+       var row = editorUi.createDiv('row');
+       var col1 = editorUi.createDiv('col-md-4');
+       var col2 = editorUi.createDiv('col-md-8');
+
+       var label = document.createElement('label');
+       label.className = 'control-label pull-right';
+       mxUtils.write(label, mxResources.get(name));
+       col1.appendChild(label);
+
+       var select = document.createElement('input');
+       select.setAttribute('value', value + '_new');
+       select.setAttribute('id', id)
+       select.className = 'form-control';
+       col2.appendChild(select);
+
+       row.appendChild(col1);
+       row.appendChild(col2);
+       body.appendChild(row);
+       //--- END BODY
+
+       //--- START FOOTER
+       var save = mxUtils.button(mxResources.get('new'), function() {
+               editorUi.new(select.value);
+               editorUi.hideDialog();
+       });
+       save.className = 'btn blue';
+
+       var close = mxUtils.button(mxResources.get('cancel'), function() {
+               editorUi.hideDialog();
+       });
+       close.className = 'btn default';
+
+       footer.appendChild(save);
+       footer.appendChild(close);
+       //--- END FOOTER
+
+       //--- START CONTENT
+       content.appendChild(header);
+       content.appendChild(body);
+       content.appendChild(footer);
+       //--- END CONTENT
+
+       this.container = content;
+       //nameInput.setAttribute('value', editorUi.editor.getOrCreateFilename());
+};
+
+/**
+ * Constructs a new save dialog.
+ */
+function VariableDialog(editorUi) {
+
+       var content = editorUi.createDiv('modal-content');
+       var header = editorUi.createDiv('modal-header');
+       var body = editorUi.createDiv('modal-body');
+       var footer = editorUi.createDiv('modal-footer');
+
+       //--- START HEADER
+       var title = editorUi.createHeader('h4');
+       mxUtils.write(title, mxResources.get('variable'));
+
+       var x = mxUtils.button('', function() {
+               editorUi.hideDialog();
+       });
+       x.className = 'close';
+
+       header.appendChild(x);
+       header.appendChild(title);
+       //--- END HEADER
+
+       //--- START BODY
+       var name = 'name';
+       var id = '_' + name;
+       var value = editorUi.editor.getOrCreateFilename();
+
+       var row = editorUi.createDiv('row');
+       var col1 = editorUi.createDiv('col-md-4');
+       var col2 = editorUi.createDiv('col-md-8');
+
+       var label = document.createElement('label');
+       label.className = 'control-label pull-right';
+       mxUtils.write(label, mxResources.get(name));
+       col1.appendChild(label);
+
+       var select = document.createElement('input');
+       select.setAttribute('value', 'variable name');
+       select.setAttribute('id', id)
+       select.className = 'form-control';
+       col2.appendChild(select);
+
+       row.appendChild(col1);
+       row.appendChild(col2);
+       body.appendChild(row);
+       //--- END BODY
+
+       //--- START FOOTER
+       var save = mxUtils.button(mxResources.get('new'), function() {
+               editorUi.variable(select.value);
+               editorUi.hideDialog();
+       });
+       save.className = 'btn blue';
+
+       var close = mxUtils.button(mxResources.get('cancel'), function() {
+               editorUi.hideDialog();
+       });
+       close.className = 'btn default';
+
+       footer.appendChild(save);
+       footer.appendChild(close);
+       //--- END FOOTER
+
+       //--- START CONTENT
+       content.appendChild(header);
+       content.appendChild(body);
+       content.appendChild(footer);
+       //--- END CONTENT
+
+       this.container = content;
+       //nameInput.setAttribute('value', editorUi.editor.getOrCreateFilename());
+};
+
+/**
+ * Constructs a new save dialog.
+ */
+function OpenDialog(editorUi) {
+
+       var content = editorUi.createDiv('modal-content');
+       var header = editorUi.createDiv('modal-header');
+       var body = editorUi.createDiv('modal-body');
+       var footer = editorUi.createDiv('modal-footer');
+
+       //--- START HEADER
+       var title = editorUi.createHeader('h4');
+       mxUtils.write(title, mxResources.get('open'));
+
+       var x = mxUtils.button('', function() {
+               editorUi.hideDialog();
+       });
+       x.className = 'close';
+
+       header.appendChild(x);
+       header.appendChild(title);
+       //--- END HEADER
+
+       //--- START BODY
+       var row = editorUi.createDiv('row');
+       var col1 = editorUi.createDiv('col-md-4');
+       var col2 = editorUi.createDiv('col-md-8');
+
+       var label = document.createElement('label');
+       label.className = 'control-label pull-right';
+       mxUtils.write(label, mxResources.get('name'));
+       col1.appendChild(label);
+
+       var req = new XMLHttpRequest();
+       req.open('GET', '/api/square/projects', false); // `false` makes the request synchronous
+       req.setRequestHeader('Authorization', 'Bearer ' + editorUi.editor.data.token);
+       req.send(null);
+       var res = [];
+       if (req.status === 200) {
+               res = JSON.parse(req.response);
+       }
+
+       var select = document.createElement('select');
+
+       for (var j = 0; j < res.length; j++) {
+               var option = document.createElement('option');
+               option.text = res[j].name;
+               option.value = res[j].id;
+               select.appendChild(option);
+       }
+       select.className = 'form-control';
+       col2.appendChild(select);
+
+       row.appendChild(col1);
+       row.appendChild(col2);
+       body.appendChild(row);
+       //--- END BODY
+
+       //--- START FOOTER
+       var save = mxUtils.button(mxResources.get('open'), function() {
+               console.log(select);
+               console.log(select.value);
+               window.open('square/project/' + select.value, '_blank');
+               editorUi.hideDialog();
+       });
+       save.className = 'btn blue';
+
+       var close = mxUtils.button(mxResources.get('cancel'), function() {
+               editorUi.hideDialog();
+       });
+       close.className = 'btn default';
+
+       footer.appendChild(save);
+       footer.appendChild(close);
+       //--- END FOOTER
+
+       //--- START CONTENT
+       content.appendChild(header);
+       content.appendChild(body);
+       content.appendChild(footer);
+       //--- END CONTENT
+
+       this.container = content;
+       //nameInput.setAttribute('value', editorUi.editor.getOrCreateFilename());
+};
+/**
+ * Constructs a new rename dialog.
+ */
+function RenameDialog(editorUi) {
+
+       var content = editorUi.createDiv('modal-content');
+       var header = editorUi.createDiv('modal-header');
+       var body = editorUi.createDiv('modal-body');
+       var footer = editorUi.createDiv('modal-footer');
+
+       //--- START HEADER
+       var title = editorUi.createHeader('h4');
+       mxUtils.write(title, mxResources.get('rename'));
+
+       var x = mxUtils.button('', function() {
+               editorUi.hideDialog();
+       });
+       x.className = 'close';
+
+       header.appendChild(x);
+       header.appendChild(title);
+       //--- END HEADER
+
+       //--- START BODY
+       var row = editorUi.createDiv('row');
+       var col1 = editorUi.createDiv('col-md-4');
+       var col2 = editorUi.createDiv('col-md-8');
+
+       var label = document.createElement('label');
+       label.className = 'control-label pull-right';
+       mxUtils.write(label, mxResources.get('name'));
+       col1.appendChild(label);
+       var name = editorUi.editor.filename;
+       var input = document.createElement('input');
+       input.setAttribute('value', name);
+       input.className = 'form-control';
+
+       col2.appendChild(input);
+
+       row.appendChild(col1);
+       row.appendChild(col2);
+       body.appendChild(row);
+       //--- END BODY
+
+       //--- START FOOTER
+       var save = mxUtils.button(mxResources.get('save'), function() {
+               var req = new XMLHttpRequest();
+
+               req.open("PUT", SAVE_URL + editorUi.editor.data.id, true);
+               req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
+               req.setRequestHeader('Authorization', 'Bearer ' + editorUi.editor.data.token);
+               req.send('name=' + input.value);
+
+               req.onload = function(e) {
+                       if (req.status === 200) {
+                               editorUi.editor.setStatus('Project successfully renamed');
+                               editorUi.editor.filename = input.value;
+
+                       } else {
+                               console.log(req.response);
+                               editorUi.editor.setStatus(JSON.parse(req.response).errors[0].message);
+                       }
+               }
+               req.onerror = function(e) {
+                       mxUtils.alert(req.statusText);
+               };
+               editorUi.hideDialog();
+       });
+       save.className = 'btn blue';
+
+       var close = mxUtils.button(mxResources.get('cancel'), function() {
+               editorUi.hideDialog();
+       });
+       close.className = 'btn default';
+
+       footer.appendChild(save);
+       footer.appendChild(close);
+       //--- END FOOTER
+
+       //--- START CONTENT
+       content.appendChild(header);
+       content.appendChild(body);
+       content.appendChild(footer);
+       //--- END CONTENT
+
+       this.container = content;
+       //nameInput.setAttribute('value', editorUi.editor.getOrCreateFilename());
+};
+
+/**
+ * Constructs a new edit file dialog.
+ */
+function EditFileDialog(editorUi) {
+
+       var content = editorUi.createDiv('modal-content');
+       var header = editorUi.createDiv('modal-header');
+       var body = editorUi.createDiv('modal-body');
+       var footer = editorUi.createDiv('modal-footer');
+
+       //--- START HEADER
+       var title = editorUi.createHeader('h4');
+       mxUtils.write(title, mxResources.get('edit'));
+
+       var x = mxUtils.button('', function() {
+               editorUi.hideDialog();
+       });
+       x.className = 'close';
+
+       header.appendChild(x);
+       header.appendChild(title);
+       //--- END HEADER
+
+       //--- START BODY
+       var row = editorUi.createDiv('row');
+       var col1 = editorUi.createDiv('col-md-12');
+
+       var textarea = document.createElement('textarea');
+       textarea.style.width = '100%';
+       textarea.style.height = '374px';
+       textarea.value = mxUtils.getPrettyXml(editorUi.editor.getGraphXml());
+
+       // Enables dropping files
+       if (fileSupport) {
+               function handleDrop(evt) {
+                       evt.stopPropagation();
+                       evt.preventDefault();
+
+                       if (evt.dataTransfer.files.length > 0) {
+                               var file = evt.dataTransfer.files[0];
+
+                               var reader = new FileReader();
+                               reader.onload = function(e) {
+                                       textarea.value = e.target.result;
+                               };
+                               reader.readAsText(file);
+                       }
+               };
+
+               function handleDragOver(evt) {
+                       evt.stopPropagation();
+                       evt.preventDefault();
+               };
+
+               // Setup the dnd listeners.
+               textarea.addEventListener('dragover', handleDragOver, false);
+               textarea.addEventListener('drop', handleDrop, false);
+       }
+       col1.appendChild(textarea);
+
+       row.appendChild(col1);
+       body.appendChild(row);
+       //--- END BODY
+
+       //--- START FOOTER
+       var save = mxUtils.button(mxResources.get('save'), function() {
+               var doc = mxUtils.parseXml(textarea.value);
+               editorUi.editor.setGraphXml(doc.documentElement);
+               editorUi.hideDialog();
+       });
+       save.className = 'btn blue';
+
+       var close = mxUtils.button(mxResources.get('cancel'), function() {
+               editorUi.hideDialog();
+       });
+       close.className = 'btn default';
+
+       footer.appendChild(save);
+       footer.appendChild(close);
+       //--- END FOOTER
+
+       //--- START CONTENT
+       content.appendChild(header);
+       content.appendChild(body);
+       content.appendChild(footer);
+       //--- END CONTENT
+
+       this.container = content;
+};
+
+/**
+ * Constructs a new export dialog.
+ */
+function ExportDialog(editorUi) {
+       var content = editorUi.createDiv('modal-content');
+       var header = editorUi.createDiv('modal-header');
+       var body = editorUi.createDiv('modal-body form');
+       var footer = editorUi.createDiv('modal-footer');
+
+       //--- START HEADER
+       var title = editorUi.createHeader('h4');
+       mxUtils.write(title, mxResources.get('export') + ' XML');
+
+       var x = mxUtils.button('', function() {
+               editorUi.hideDialog();
+       });
+       x.className = 'close';
+
+       header.appendChild(x);
+       header.appendChild(title);
+       //--- END HEADER
+
+       //--- START BODY
+       var form = editorUi.createDiv('form-horizontal form-row-seperated');
+       var group = editorUi.createDiv('form-group last');
+
+       var label = document.createElement('label');
+       label.className = 'col-sm-4 control-label';
+       mxUtils.write(label, mxResources.get('filename'));
+
+       var input = document.createElement('input');
+       input.setAttribute('value', editorUi.editor.getOrCreateFilename());
+       input.className = 'form-control';
+
+       var div = editorUi.createDiv('col-sm-8');
+       div.appendChild(input);
+
+       group.appendChild(label);
+       group.appendChild(div);
+       form.appendChild(group);
+
+       body.appendChild(form);
+       //--- END BODY
+
+       //--- START FOOTER
+       var save = mxUtils.button(mxResources.get('export'), mxUtils.bind(this,
+               function(data) {
+                       editorUi.save(false);
+
+                       var xml = encodeURIComponent(mxUtils.getXml(editorUi.editor.getGraphXml()));
+                       new mxXmlRequest(SAVE_URL + editorUi.editor.data.id + '/download',
+                               'filename=' + input.value, 'GET').simulate(document, "_blank");
+                       editorUi.hideDialog();
+               }));
+       save.className = 'btn blue';
+
+       var close = mxUtils.button(mxResources.get('cancel'), function() {
+               editorUi.hideDialog();
+       });
+       close.className = 'btn default';
+
+       footer.appendChild(save);
+       footer.appendChild(close);
+       //--- END FOOTER
+
+       //--- START CONTENT
+       content.appendChild(header);
+       content.appendChild(body);
+       content.appendChild(footer);
+       //--- END CONTENT
+
+       this.container = content;
+};
+
+/**
+ * Giuseppe Careri
+ * Constructs a new general dialog.
+ */
+function GeneralDialog(editorUi, cell) {
+       var graph = editorUi.editor.graph;
+
+       var content = editorUi.createDiv('modal-content');
+       var header = editorUi.createDiv('modal-header');
+       var body = editorUi.createDiv('modal-body form modal-body-scroll');
+       var footer = editorUi.createDiv('modal-footer');
+
+       //--- START HEADER
+       var title = editorUi.createHeader('h4');
+       mxUtils.write(title, mxResources.get('edit') + ' ' + mxResources.get(cell.value
+               .nodeName));
+
+       var x = mxUtils.button('', function() {
+               editorUi.hideDialog();
+       });
+       x.className = 'close';
+
+       header.appendChild(x);
+       header.appendChild(title);
+       //--- END HEADER
+
+       //--- START BODY
+       var length = cell.value.attributes.length;
+       var form = editorUi.createDiv('form-horizontal form-row-seperated');
+
+       for (var i = 0; i < length; i++) {
+               var name = cell.value.attributes[i].name;
+               var id = '_' + name;
+               var value = cell.value.attributes[i].value;
+
+               var group = editorUi.createDiv((i == length - 1) ? 'form-group last' :
+                       'form-group');
+
+               var label = document.createElement('label');
+               label.className = 'col-sm-4 control-label';
+               mxUtils.write(label, mxResources.get(name));
+               group.appendChild(label);
+
+               var input;
+
+               switch (name) {
+                       case 'sip_id':
+                               input = createDropdownFromApi('/api/agents', value, 'name', 'id', editorUi);
+                               break;
+                       case 'queue_id':
+                               input = createDropdownFromApi('/api/voice/queues', value, 'name', 'name', editorUi);
+                               break;
+                       case 'trunk_id':
+                               input = createDropdownFromApi('/api/trunks', value, 'name', 'id', editorUi);
+                               break;
+                       case 'variable_id':
+                               input = createDropdownFromApi('/api/variables', value, 'name', 'id', editorUi);
+                               break;
+                       case 'context':
+                               input = createDropdownFromApi('/api/voice/contexts', value, 'name', 'name', editorUi);
+                               break;
+                       case 'mailbox':
+                               input = createDropdownFromApi('/api/voice/voicemails', value, 'mailbox', 'id', editorUi, ['mailbox', 'context'], '%mailbox%@%context%');
+                               break;
+                       case 'model':
+                               input = createDropdownFromArray(ISPEECHASRMODEL, value);
+                               break;
+                       case 'ispeech_asr_language':
+                               input = createDropdownFromArray(ISPEECHASRLANG, value);
+                               break;
+                       case 'ispeech_tts_language':
+                               input = createDropdownFromArray(ISPEECHLANG, value);
+                               break;
+                       case 'google_tts_language':
+                               input = createDropdownFromArray(GOOGLETTSLANG, value);
+                               break;
+                       case 'interval_id':
+                               input = createGroupedDropdownFromApi('/api/intervals', value, 'name', 'id', editorUi, 'IntervalId');
+                               break;
+                       case 'project_id':
+                               input = createDropdownFromApi('/api/square/projects', value, 'name', 'id', editorUi);
+                               break;
+                       case 'odbc_id':
+                               input = createDropdownFromApi('/api/square/odbc', value, 'name', 'id', editorUi);
+                               break;
+                       case 'file_id':
+                               input = createDropdownFromApi('/api/sounds', value, 'display_name', 'id', editorUi);
+                               break;
+                       case 'timeout':
+                       case 'digit':
+                       case 'mindigit':
+                       case 'maxdigit':
+                       case 'response':
+                       case 'retry':
+                               input = document.createElement('input');
+                               input.setAttribute('type', 'number');
+                               input.setAttribute('min', 0);
+                               input.setAttribute('max', 1000);
+                               input.setAttribute('value', value);
+                               input.className = 'form-control';
+                               break;
+                       case 'text':
+                       case 'key':
+                       case 'query':
+                       case 'condition':
+                       case 'command':
+                               input = document.createElement('textarea');
+                               input.innerHTML = value;
+                               input.className = 'form-control';
+                               break;
+                       default:
+                               input = document.createElement('input');
+                               input.setAttribute('value', value);
+                               input.className = 'form-control';
+                               break;
+               }
+
+               input.setAttribute('id', id)
+
+               var div = editorUi.createDiv('col-sm-8');
+               div.appendChild(input);
+
+               // Help
+               if (mxResources.get('help_' + name)) {
+                       var help = editorUi.createDiv('p');
+                       help.className = 'help-block';
+                       mxUtils.write(help, mxResources.get('help_' + name));
+                       div.appendChild(help);
+               }
+
+               group.appendChild(div);
+               form.appendChild(group);
+       }
+       body.appendChild(form);
+       //--- END BODY
+
+       //--- START FOOTER
+       var save = mxUtils.button(mxResources.get('save'), mxUtils.bind(this,
+               function(data) {
+                       for (var i = 0; i < cell.value.attributes.length; i++) {
+                               var id = '_' + cell.value.attributes[i].name;
+                               var name = cell.value.attributes[i].name;
+                               console.log(name, document.getElementById(id).value);
+                               cell.setAttribute(name, document.getElementById(id).value);
+                       };
+                       graph.refresh(cell);
+                       editorUi.hideDialog();
+               }));
+       save.className = 'btn blue';
+
+       var close = mxUtils.button(mxResources.get('cancel'), function() {
+               editorUi.hideDialog();
+       });
+       close.className = 'btn default';
+
+       footer.appendChild(save);
+       footer.appendChild(close);
+       //--- END FOOTER
+
+       //--- START CONTENT
+       content.appendChild(header);
+       content.appendChild(body);
+       content.appendChild(footer);
+       //--- END CONTENT
+
+       this.container = content;
+};
index 1fbd323..9858989 100644 (file)
@@ -1 +1,888 @@
-var _0xc0ec=["\x49\x53\x5F\x54\x4F\x55\x43\x48","\x73\x74\x6F\x72\x61\x67\x65","\x6C\x6F\x63\x61\x6C","\x75\x6E\x64\x65\x66\x69\x6E\x65\x64","\x46\x69\x6C\x65","\x46\x69\x6C\x65\x52\x65\x61\x64\x65\x72","\x46\x69\x6C\x65\x4C\x69\x73\x74","\x74\x6F\x75\x63\x68","\x31","\x6F\x70\x65\x6E\x65\x72","\x63\x6F\x75\x6E\x74\x65\x72","\x63\x61\x6C\x6C","\x69\x6E\x69\x74","\x69\x6E\x69\x74\x53\x74\x65\x6E\x63\x69\x6C\x52\x65\x67\x69\x73\x74\x72\x79","\x67\x72\x61\x70\x68","\x6F\x75\x74\x6C\x69\x6E\x65","\x75\x70\x64\x61\x74\x65\x4F\x6E\x50\x61\x6E","\x75\x6E\x64\x6F\x4D\x61\x6E\x61\x67\x65\x72","\x63\x72\x65\x61\x74\x65\x55\x6E\x64\x6F\x4D\x61\x6E\x61\x67\x65\x72","\x73\x74\x61\x74\x75\x73","","\x66\x69\x6C\x65\x6E\x61\x6D\x65","\x67\x65\x74\x4F\x72\x43\x72\x65\x61\x74\x65\x46\x69\x6C\x65\x6E\x61\x6D\x65","\x64\x72\x61\x77\x69\x6E\x67","\x67\x65\x74","\x2E\x78\x6D\x6C","\x67\x65\x74\x46\x69\x6C\x65\x6E\x61\x6D\x65","\x73\x65\x74\x53\x74\x61\x74\x75\x73","\x73\x74\x61\x74\x75\x73\x43\x68\x61\x6E\x67\x65\x64","\x66\x69\x72\x65\x45\x76\x65\x6E\x74","\x67\x65\x74\x53\x74\x61\x74\x75\x73","\x6D\x6F\x64\x69\x66\x69\x65\x64","\x67\x72\x61\x70\x68\x43\x68\x61\x6E\x67\x65\x4C\x69\x73\x74\x65\x6E\x65\x72","\x61\x70\x70\x6C\x79","\x62\x69\x6E\x64","\x61\x64\x64\x4C\x69\x73\x74\x65\x6E\x65\x72","\x67\x65\x74\x4D\x6F\x64\x65\x6C","\x6F\x6E\x62\x65\x66\x6F\x72\x65\x75\x6E\x6C\x6F\x61\x64","\x61\x6C\x6C\x43\x68\x61\x6E\x67\x65\x73\x4C\x6F\x73\x74","\x72\x65\x73\x65\x74\x56\x69\x65\x77\x4F\x6E\x52\x6F\x6F\x74\x43\x68\x61\x6E\x67\x65","\x73\x63\x72\x6F\x6C\x6C\x62\x61\x72\x73","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64","\x65\x78\x74\x65\x6E\x64","\x67\x72\x69\x64\x49\x6D\x61\x67\x65","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x2F\x67\x72\x69\x64\x2E\x67\x69\x66","\x74\x72\x61\x6E\x73\x70\x61\x72\x65\x6E\x74\x49\x6D\x61\x67\x65","\x2F\x74\x72\x61\x6E\x73\x70\x61\x72\x65\x6E\x74\x2E\x67\x69\x66","\x73\x65\x74\x47\x72\x61\x70\x68\x58\x6D\x6C","\x6F\x77\x6E\x65\x72\x44\x6F\x63\x75\x6D\x65\x6E\x74","\x6E\x6F\x64\x65\x4E\x61\x6D\x65","\x6D\x78\x47\x72\x61\x70\x68\x4D\x6F\x64\x65\x6C","\x73\x63\x61\x6C\x65","\x76\x69\x65\x77","\x67\x72\x69\x64\x45\x6E\x61\x62\x6C\x65\x64","\x67\x72\x69\x64","\x67\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x30","\x67\x75\x69\x64\x65\x73\x45\x6E\x61\x62\x6C\x65\x64","\x67\x72\x61\x70\x68\x48\x61\x6E\x64\x6C\x65\x72","\x67\x75\x69\x64\x65\x73","\x74\x6F\x6F\x6C\x74\x69\x70\x73","\x73\x65\x74\x54\x6F\x6F\x6C\x74\x69\x70\x73","\x63\x6F\x6E\x6E\x65\x63\x74","\x73\x65\x74\x43\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65","\x66\x6F\x6C\x64\x69\x6E\x67\x45\x6E\x61\x62\x6C\x65\x64","\x66\x6F\x6C\x64","\x73\x63\x72\x6F\x6C\x6C\x4C\x65\x66\x74","\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x73\x63\x72\x6F\x6C\x6C\x54\x6F\x70","\x78","\x74\x72\x61\x6E\x73\x6C\x61\x74\x65","\x64\x78","\x79","\x64\x79","\x70\x61\x67\x65\x56\x69\x73\x69\x62\x6C\x65","\x70\x61\x67\x65","\x70\x61\x67\x65\x42\x72\x65\x61\x6B\x73\x56\x69\x73\x69\x62\x6C\x65","\x70\x72\x65\x66\x65\x72\x50\x61\x67\x65\x53\x69\x7A\x65","\x70\x61\x67\x65\x53\x63\x61\x6C\x65","\x70\x61\x67\x65\x57\x69\x64\x74\x68","\x70\x61\x67\x65\x48\x65\x69\x67\x68\x74","\x70\x61\x67\x65\x46\x6F\x72\x6D\x61\x74","\x6C\x65\x6E\x67\x74\x68","\x64\x65\x63\x6F\x64\x65","\x75\x70\x64\x61\x74\x65\x47\x72\x61\x70\x68\x43\x6F\x6D\x70\x6F\x6E\x65\x6E\x74\x73","\x67\x65\x74\x47\x72\x61\x70\x68\x58\x6D\x6C","\x63\x72\x65\x61\x74\x65\x58\x6D\x6C\x44\x6F\x63\x75\x6D\x65\x6E\x74","\x65\x6E\x63\x6F\x64\x65","\x72\x6F\x75\x6E\x64","\x73\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x69\x73\x47\x72\x69\x64\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x45\x6E\x61\x62\x6C\x65\x64","\x74\x6F\x6F\x6C\x74\x69\x70\x48\x61\x6E\x64\x6C\x65\x72","\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x48\x61\x6E\x64\x6C\x65\x72","\x77\x69\x64\x74\x68","\x68\x65\x69\x67\x68\x74","\x6E\x6F\x6E\x65","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x43\x6F\x6C\x6F\x72","\x73\x74\x79\x6C\x65","\x74\x72\x61\x6E\x73\x70\x61\x72\x65\x6E\x74","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x61\x67\x65\x53\x68\x61\x70\x65","\x66\x69\x6C\x6C","\x72\x65\x63\x6F\x6E\x66\x69\x67\x75\x72\x65","\x23\x65\x62\x65\x62\x65\x62","\x62\x6F\x72\x64\x65\x72\x53\x74\x79\x6C\x65","\x73\x6F\x6C\x69\x64","\x62\x6F\x72\x64\x65\x72\x43\x6F\x6C\x6F\x72","\x23\x65\x35\x65\x35\x65\x35","\x62\x6F\x72\x64\x65\x72\x54\x6F\x70\x57\x69\x64\x74\x68","\x31\x70\x78","\x62\x6F\x72\x64\x65\x72\x4C\x65\x66\x74\x57\x69\x64\x74\x68","\x62\x6F\x72\x64\x65\x72\x52\x69\x67\x68\x74\x57\x69\x64\x74\x68","\x30\x70\x78","\x62\x6F\x72\x64\x65\x72\x42\x6F\x74\x74\x6F\x6D\x57\x69\x64\x74\x68","\x62\x6F\x72\x64\x65\x72","\x76\x61\x6C\x69\x64\x61\x74\x65","\x6F\x76\x65\x72\x66\x6C\x6F\x77","\x68\x69\x64\x64\x65\x6E","\x61\x75\x74\x6F","\x49\x53\x5F\x49\x45","\x64\x6F\x63\x75\x6D\x65\x6E\x74\x4D\x6F\x64\x65","\x75\x72\x6C\x28","\x29","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x6E\x6F\x64\x65","\x49\x53\x5F\x49\x45\x36","\x73\x74\x79\x6C\x65\x73\x68\x65\x65\x74","\x2F\x67\x72\x61\x70\x68\x65\x64\x69\x74\x6F\x72\x2D\x69\x65\x36\x2E\x63\x73\x73","\x6C\x69\x6E\x6B","\x6C\x6F\x61\x64\x44\x65\x66\x61\x75\x6C\x74\x42\x75\x6E\x64\x6C\x65","\x61\x64\x64","\x44\x45\x46\x41\x55\x4C\x54\x5F\x48\x4F\x54\x53\x50\x4F\x54","\x63\x72\x65\x61\x74\x65\x4D\x61\x72\x6B\x65\x72","\x69\x6E\x74\x65\x72\x73\x65\x63\x74\x73","\x69\x73\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6E\x67","\x53\x48\x41\x44\x4F\x57\x43\x4F\x4C\x4F\x52","\x23\x64\x30\x64\x30\x64\x30","\x48\x41\x4E\x44\x4C\x45\x5F\x46\x49\x4C\x4C\x43\x4F\x4C\x4F\x52","\x23\x39\x39\x63\x63\x66\x66","\x48\x41\x4E\x44\x4C\x45\x5F\x53\x54\x52\x4F\x4B\x45\x43\x4F\x4C\x4F\x52","\x23\x30\x30\x38\x38\x63\x66","\x56\x45\x52\x54\x45\x58\x5F\x53\x45\x4C\x45\x43\x54\x49\x4F\x4E\x5F\x43\x4F\x4C\x4F\x52","\x23\x30\x30\x61\x38\x66\x66","\x4F\x55\x54\x4C\x49\x4E\x45\x5F\x43\x4F\x4C\x4F\x52","\x4F\x55\x54\x4C\x49\x4E\x45\x5F\x48\x41\x4E\x44\x4C\x45\x5F\x46\x49\x4C\x4C\x43\x4F\x4C\x4F\x52","\x4F\x55\x54\x4C\x49\x4E\x45\x5F\x48\x41\x4E\x44\x4C\x45\x5F\x53\x54\x52\x4F\x4B\x45\x43\x4F\x4C\x4F\x52","\x43\x4F\x4E\x4E\x45\x43\x54\x5F\x48\x41\x4E\x44\x4C\x45\x5F\x46\x49\x4C\x4C\x43\x4F\x4C\x4F\x52","\x23\x63\x65\x65\x37\x66\x66","\x45\x44\x47\x45\x5F\x53\x45\x4C\x45\x43\x54\x49\x4F\x4E\x5F\x43\x4F\x4C\x4F\x52","\x44\x45\x46\x41\x55\x4C\x54\x5F\x56\x41\x4C\x49\x44\x5F\x43\x4F\x4C\x4F\x52","\x4C\x41\x42\x45\x4C\x5F\x48\x41\x4E\x44\x4C\x45\x5F\x46\x49\x4C\x4C\x43\x4F\x4C\x4F\x52","\x47\x55\x49\x44\x45\x5F\x43\x4F\x4C\x4F\x52","\x70\x61\x67\x65\x42\x72\x65\x61\x6B\x43\x6F\x6C\x6F\x72","\x23\x63\x30\x63\x30\x63\x30","\x64\x65\x66\x61\x75\x6C\x74\x4F\x70\x61\x63\x69\x74\x79","\x63\x72\x65\x61\x74\x65\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x61\x67\x65\x53\x68\x61\x70\x65","\x77\x68\x69\x74\x65","\x23\x63\x61\x63\x61\x63\x61","\x67\x65\x74\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x61\x67\x65\x42\x6F\x75\x6E\x64\x73","\x67\x65\x74\x47\x72\x61\x70\x68\x42\x6F\x75\x6E\x64\x73","\x6D\x69\x6E","\x66\x6C\x6F\x6F\x72","\x6D\x61\x78","\x63\x65\x69\x6C","\x70\x61\x6E\x47\x72\x61\x70\x68","\x64\x69\x61\x6C\x65\x63\x74","\x44\x49\x41\x4C\x45\x43\x54\x5F\x53\x56\x47","\x75\x73\x65\x53\x63\x72\x6F\x6C\x6C\x62\x61\x72\x73\x46\x6F\x72\x50\x61\x6E\x6E\x69\x6E\x67","\x68\x61\x73\x53\x63\x72\x6F\x6C\x6C\x62\x61\x72\x73","\x6D\x61\x72\x67\x69\x6E\x4C\x65\x66\x74","\x70\x78","\x6D\x61\x72\x67\x69\x6E\x54\x6F\x70","\x76\x61\x6C\x69\x64\x61\x74\x65\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64","\x67\x65\x74\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x69\x6D\x61\x67\x65","\x73\x72\x63","\x64\x65\x73\x74\x72\x6F\x79","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x61\x6E\x65","\x72\x65\x64\x72\x61\x77","\x72\x65\x64\x72\x61\x77\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x69\x73\x53\x68\x61\x64\x6F\x77","\x44\x49\x41\x4C\x45\x43\x54\x5F\x53\x54\x52\x49\x43\x54\x48\x54\x4D\x4C","\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x66\x69\x72\x73\x74\x43\x68\x69\x6C\x64","\x61\x62\x73\x6F\x6C\x75\x74\x65","\x69\x6E\x73\x65\x72\x74\x42\x65\x66\x6F\x72\x65","\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65","\x67\x65\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x61\x67\x65","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x2D\x31\x70\x78\x20\x2D\x31\x70\x78","\x64\x62\x6C\x63\x6C\x69\x63\x6B","\x64\x62\x6C\x43\x6C\x69\x63\x6B","\x66\x69\x72\x65\x4D\x6F\x75\x73\x65\x45\x76\x65\x6E\x74","\x69\x73\x48\x69\x64\x65\x4F\x6E\x48\x6F\x76\x65\x72","\x68\x69\x64\x65","\x69\x73\x4D\x6F\x75\x73\x65\x44\x6F\x77\x6E","\x69\x73\x43\x6F\x6E\x73\x75\x6D\x65\x64","\x61\x64\x64\x47\x65\x73\x74\x75\x72\x65\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x62\x6F\x75\x6E\x64\x73","\x75\x70\x64\x61\x74\x65\x50\x61\x67\x65\x42\x72\x65\x61\x6B\x73","\x6D\x69\x6E\x50\x61\x67\x65\x42\x72\x65\x61\x6B\x44\x69\x73\x74","\x68\x6F\x72\x69\x7A\x6F\x6E\x74\x61\x6C\x50\x61\x67\x65\x42\x72\x65\x61\x6B\x73","\x70\x6F\x69\x6E\x74\x73","\x69\x73\x44\x61\x73\x68\x65\x64","\x70\x61\x67\x65\x42\x72\x65\x61\x6B\x44\x61\x73\x68\x65\x64","\x61\x64\x64\x50\x69\x70\x65","\x73\x70\x6C\x69\x63\x65","\x76\x65\x72\x74\x69\x63\x61\x6C\x50\x61\x67\x65\x42\x72\x65\x61\x6B\x73","\x73\x6E\x61\x70\x54\x6F\x54\x65\x72\x6D\x69\x6E\x61\x6C\x73","\x73\x68\x6F\x75\x6C\x64\x52\x65\x6D\x6F\x76\x65\x43\x65\x6C\x6C\x73\x46\x72\x6F\x6D\x50\x61\x72\x65\x6E\x74","\x69\x73\x56\x65\x72\x74\x65\x78","\x67\x65\x74\x43\x65\x6C\x6C\x47\x65\x6F\x6D\x65\x74\x72\x79","\x72\x65\x6C\x61\x74\x69\x76\x65","\x69\x73\x45\x6E\x61\x62\x6C\x65\x64\x46\x6F\x72\x45\x76\x65\x6E\x74","\x69\x73\x41\x6C\x74\x44\x6F\x77\x6E","\x61\x64\x64\x49\x74\x65\x6D","\x6D\x6F\x75\x73\x65\x64\x6F\x77\x6E","\x63\x6F\x6E\x73\x75\x6D\x65","\x67\x65\x74\x49\x6E\x69\x74\x69\x61\x6C\x43\x65\x6C\x6C\x46\x6F\x72\x45\x76\x65\x6E\x74","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x67\x65\x74\x50\x61\x72\x65\x6E\x74","\x69\x73\x43\x65\x6C\x6C\x53\x65\x6C\x65\x63\x74\x65\x64","\x69\x73\x56\x61\x6C\x69\x64\x52\x6F\x6F\x74","\x69\x73\x44\x65\x6C\x61\x79\x65\x64\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E","\x73\x65\x6C\x65\x63\x74\x44\x65\x6C\x61\x79\x65\x64","\x67\x65\x74\x43\x65\x6C\x6C","\x63\x65\x6C\x6C","\x67\x65\x74\x45\x76\x65\x6E\x74","\x73\x65\x6C\x65\x63\x74\x43\x65\x6C\x6C\x46\x6F\x72\x45\x76\x65\x6E\x74","\x67\x65\x74\x43\x65\x6C\x6C\x46\x6F\x72\x50\x6F\x70\x75\x70\x45\x76\x65\x6E\x74","\x65\x64\x69\x74","\x67\x65\x74\x50\x72\x6F\x70\x65\x72\x74\x79","\x75\x6E\x64\x6F\x61\x62\x6C\x65\x45\x64\x69\x74\x48\x61\x70\x70\x65\x6E\x65\x64","\x67\x65\x74\x56\x69\x65\x77","\x63\x68\x61\x6E\x67\x65\x73","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73\x46\x6F\x72\x43\x68\x61\x6E\x67\x65\x73","\x67\x65\x74\x53\x74\x61\x74\x65","\x70\x75\x73\x68","\x73\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73","\x2F\x67\x65\x6E\x65\x72\x61\x6C\x2E\x78\x6D\x6C","\x6C\x6F\x61\x64\x53\x74\x65\x6E\x63\x69\x6C\x53\x65\x74","\x6C\x69\x62\x72\x61\x72\x69\x65\x73","\x70\x61\x63\x6B\x61\x67\x65\x73","\x67\x65\x74\x53\x74\x65\x6E\x63\x69\x6C","\x73\x74\x65\x6E\x63\x69\x6C\x73","\x67\x65\x74\x42\x61\x73\x65\x6E\x61\x6D\x65\x46\x6F\x72\x53\x74\x65\x6E\x63\x69\x6C","\x73\x75\x62\x73\x74\x72\x69\x6E\x67","\x74\x6F\x4C\x6F\x77\x65\x72\x43\x61\x73\x65","\x2E\x6A\x73","\x6C\x6F\x61\x64","\x67\x65\x74\x54\x65\x78\x74","\x2F","\x2E","\x73\x70\x6C\x69\x74","\x6D\x78\x67\x72\x61\x70\x68","\x67\x65\x74\x58\x6D\x6C","\x70\x61\x72\x73\x65\x53\x74\x65\x6E\x63\x69\x6C\x53\x65\x74","\x64\x6F\x63\x75\x6D\x65\x6E\x74\x45\x6C\x65\x6D\x65\x6E\x74","\x6E\x61\x6D\x65","\x6E\x6F\x64\x65\x54\x79\x70\x65","\x4E\x4F\x44\x45\x54\x59\x50\x45\x5F\x45\x4C\x45\x4D\x45\x4E\x54","\x5F","\x72\x65\x70\x6C\x61\x63\x65","\x61\x64\x64\x53\x74\x65\x6E\x63\x69\x6C","\x77","\x68","\x6E\x65\x78\x74\x53\x69\x62\x6C\x69\x6E\x67","\x70\x72\x6F\x64\x75\x63\x65\x72","\x63\x6F\x6E\x73\x75\x6D\x65\x72","\x64\x6F\x6E\x65","\x73\x65\x74\x43\x6F\x6E\x73\x75\x6D\x65\x72","\x65\x78\x65\x63\x75\x74\x65","\x73\x65\x74\x44\x61\x74\x61","\x64\x61\x74\x61","\x65\x72\x72\x6F\x72","\x63\x61\x6E\x63\x65\x6C","\x61\x6C\x65\x72\x74"];var useLocalStorage=(mxClient[_0xc0ec[0]]||urlParams[_0xc0ec[1]]==_0xc0ec[2])&& typeof (localStorage)!=_0xc0ec[3];var fileSupport=window[_0xc0ec[4]]!=null&&window[_0xc0ec[5]]!=null&&window[_0xc0ec[6]]!=null;var touchStyle=mxClient[_0xc0ec[0]]||urlParams[_0xc0ec[7]]==_0xc0ec[8];var counter=0;try{var op=window;while(op[_0xc0ec[9]]!=null&&!isNaN(op[_0xc0ec[9]][_0xc0ec[10]])){op=op[_0xc0ec[9]]};if(op!=null){op[_0xc0ec[10]]++;counter=op[_0xc0ec[10]]}}catch(e){};Editor=function(){mxEventSource[_0xc0ec[11]](this);this[_0xc0ec[12]]();this[_0xc0ec[13]]();this[_0xc0ec[14]]= new Graph();this[_0xc0ec[15]]= new mxOutline(this[_0xc0ec[14]]);this[_0xc0ec[15]][_0xc0ec[16]]=true;this[_0xc0ec[17]]=this[_0xc0ec[18]]();this[_0xc0ec[19]]=_0xc0ec[20];this[_0xc0ec[21]]=null;this[_0xc0ec[22]]=function(){return this[_0xc0ec[21]]||mxResources[_0xc0ec[24]](_0xc0ec[23],[counter])+_0xc0ec[25]};this[_0xc0ec[26]]=function(){return this[_0xc0ec[21]]};this[_0xc0ec[27]]=function(_0x742cx6){this[_0xc0ec[19]]=_0x742cx6;this[_0xc0ec[29]]( new mxEventObject(_0xc0ec[28]))};this[_0xc0ec[30]]=function(){return this[_0xc0ec[19]]};this[_0xc0ec[31]]=false;this[_0xc0ec[32]]=function(){this[_0xc0ec[31]]=true};this[_0xc0ec[14]][_0xc0ec[36]]()[_0xc0ec[35]](mxEvent.CHANGE,mxUtils[_0xc0ec[34]](this,function(){this[_0xc0ec[32]][_0xc0ec[33]](this,arguments)}));window[_0xc0ec[37]]=mxUtils[_0xc0ec[34]](this,function(){if(this[_0xc0ec[31]]){return mxResources[_0xc0ec[24]](_0xc0ec[38])}});this[_0xc0ec[14]][_0xc0ec[39]]=false;this[_0xc0ec[14]][_0xc0ec[40]]=true;this[_0xc0ec[14]][_0xc0ec[41]]=null};mxUtils[_0xc0ec[42]](Editor,mxEventSource);Editor[_0xc0ec[44]][_0xc0ec[43]]=IMAGE_PATH+_0xc0ec[45];Editor[_0xc0ec[44]][_0xc0ec[46]]=IMAGE_PATH+_0xc0ec[47];Editor[_0xc0ec[44]][_0xc0ec[48]]=function(_0x742cx7){var _0x742cx8= new mxCodec(_0x742cx7[_0xc0ec[49]]);if(_0x742cx7[_0xc0ec[50]]==_0xc0ec[51]){this[_0xc0ec[14]][_0xc0ec[53]][_0xc0ec[52]]=1;this[_0xc0ec[14]][_0xc0ec[54]]=_0x742cx7[_0xc0ec[56]](_0xc0ec[55])!=_0xc0ec[57];this[_0xc0ec[14]][_0xc0ec[59]][_0xc0ec[58]]=_0x742cx7[_0xc0ec[56]](_0xc0ec[60])!=_0xc0ec[57];this[_0xc0ec[14]][_0xc0ec[62]](_0x742cx7[_0xc0ec[56]](_0xc0ec[61])!=_0xc0ec[57]);this[_0xc0ec[14]][_0xc0ec[64]](_0x742cx7[_0xc0ec[56]](_0xc0ec[63])!=_0xc0ec[57]);this[_0xc0ec[14]][_0xc0ec[65]]=_0x742cx7[_0xc0ec[56]](_0xc0ec[66])!=_0xc0ec[57];this[_0xc0ec[14]][_0xc0ec[40]]=_0x742cx7[_0xc0ec[56]](_0xc0ec[40])!=_0xc0ec[57];if(!this[_0xc0ec[14]][_0xc0ec[40]]){this[_0xc0ec[14]][_0xc0ec[68]][_0xc0ec[67]]=0;this[_0xc0ec[14]][_0xc0ec[68]][_0xc0ec[69]]=0;this[_0xc0ec[14]][_0xc0ec[53]][_0xc0ec[71]][_0xc0ec[70]]=Number(_0x742cx7[_0xc0ec[56]](_0xc0ec[72])||0);this[_0xc0ec[14]][_0xc0ec[53]][_0xc0ec[71]][_0xc0ec[73]]=Number(_0x742cx7[_0xc0ec[56]](_0xc0ec[74])||0)};this[_0xc0ec[14]][_0xc0ec[75]]=_0x742cx7[_0xc0ec[56]](_0xc0ec[76])==_0xc0ec[8];this[_0xc0ec[14]][_0xc0ec[77]]=this[_0xc0ec[14]][_0xc0ec[75]];this[_0xc0ec[14]][_0xc0ec[78]]=this[_0xc0ec[14]][_0xc0ec[77]];var _0x742cx9=_0x742cx7[_0xc0ec[56]](_0xc0ec[79]);if(_0x742cx9!=null){this[_0xc0ec[14]][_0xc0ec[79]]=_0x742cx9}else {this[_0xc0ec[14]][_0xc0ec[79]]=1.5};var _0x742cxa=_0x742cx7[_0xc0ec[56]](_0xc0ec[80]);var _0x742cxb=_0x742cx7[_0xc0ec[56]](_0xc0ec[81]);if(_0x742cxa!=null&&_0x742cxb!=null){this[_0xc0ec[14]][_0xc0ec[82]]= new mxRectangle(0,0,parseFloat(_0x742cxa),parseFloat(_0x742cxb));this[_0xc0ec[15]][_0xc0ec[15]][_0xc0ec[82]]=this[_0xc0ec[14]][_0xc0ec[82]]};var _0x742cxc=_0x742cx7[_0xc0ec[56]](_0xc0ec[41]);if(_0x742cxc!=null&&_0x742cxc[_0xc0ec[83]]>0){this[_0xc0ec[14]][_0xc0ec[41]]=_0x742cxc};_0x742cx8[_0xc0ec[84]](_0x742cx7,this[_0xc0ec[14]][_0xc0ec[36]]());this[_0xc0ec[85]]()}};Editor[_0xc0ec[44]][_0xc0ec[86]]=function(){var _0x742cxd= new mxCodec(mxUtils[_0xc0ec[87]]());var _0x742cx7=_0x742cxd[_0xc0ec[88]](this[_0xc0ec[14]][_0xc0ec[36]]());if(this[_0xc0ec[14]][_0xc0ec[53]][_0xc0ec[71]][_0xc0ec[70]]!=0||this[_0xc0ec[14]][_0xc0ec[53]][_0xc0ec[71]][_0xc0ec[73]]!=0){_0x742cx7[_0xc0ec[90]](_0xc0ec[72],Math[_0xc0ec[89]](this[_0xc0ec[14]][_0xc0ec[53]][_0xc0ec[71]][_0xc0ec[70]]*100)/100);_0x742cx7[_0xc0ec[90]](_0xc0ec[74],Math[_0xc0ec[89]](this[_0xc0ec[14]][_0xc0ec[53]][_0xc0ec[71]][_0xc0ec[73]]*100)/100)};_0x742cx7[_0xc0ec[90]](_0xc0ec[55],(this[_0xc0ec[14]][_0xc0ec[91]]())?_0xc0ec[8]:_0xc0ec[57]);_0x742cx7[_0xc0ec[90]](_0xc0ec[60],(this[_0xc0ec[14]][_0xc0ec[59]][_0xc0ec[58]])?_0xc0ec[8]:_0xc0ec[57]);_0x742cx7[_0xc0ec[90]](_0xc0ec[60],(this[_0xc0ec[14]][_0xc0ec[59]][_0xc0ec[58]])?_0xc0ec[8]:_0xc0ec[57]);_0x742cx7[_0xc0ec[90]](_0xc0ec[61],(this[_0xc0ec[14]][_0xc0ec[93]][_0xc0ec[92]]())?_0xc0ec[8]:_0xc0ec[57]);_0x742cx7[_0xc0ec[90]](_0xc0ec[63],(this[_0xc0ec[14]][_0xc0ec[94]][_0xc0ec[92]]())?_0xc0ec[8]:_0xc0ec[57]);_0x742cx7[_0xc0ec[90]](_0xc0ec[66],(this[_0xc0ec[14]][_0xc0ec[65]])?_0xc0ec[8]:_0xc0ec[57]);_0x742cx7[_0xc0ec[90]](_0xc0ec[76],(this[_0xc0ec[14]][_0xc0ec[75]])?_0xc0ec[8]:_0xc0ec[57]);_0x742cx7[_0xc0ec[90]](_0xc0ec[79],this[_0xc0ec[14]][_0xc0ec[79]]);_0x742cx7[_0xc0ec[90]](_0xc0ec[80],this[_0xc0ec[14]][_0xc0ec[82]][_0xc0ec[95]]);_0x742cx7[_0xc0ec[90]](_0xc0ec[81],this[_0xc0ec[14]][_0xc0ec[82]][_0xc0ec[96]]);if(!this[_0xc0ec[14]][_0xc0ec[40]]){_0x742cx7[_0xc0ec[90]](_0xc0ec[40],_0xc0ec[57])};if(this[_0xc0ec[14]][_0xc0ec[41]]!=null){_0x742cx7[_0xc0ec[90]](_0xc0ec[41],this[_0xc0ec[14]][_0xc0ec[41]])};return _0x742cx7};Editor[_0xc0ec[44]][_0xc0ec[85]]=function(){var _0x742cxe=this[_0xc0ec[14]];var _0x742cxf=this[_0xc0ec[15]];if(_0x742cxe[_0xc0ec[68]]!=null&&_0x742cxf[_0xc0ec[15]][_0xc0ec[68]]!=null){if(_0x742cxe[_0xc0ec[41]]!=null){if(_0x742cxe[_0xc0ec[41]]==_0xc0ec[97]){_0x742cxe[_0xc0ec[68]][_0xc0ec[99]][_0xc0ec[98]]=_0xc0ec[100]}else {if(_0x742cxe[_0xc0ec[53]][_0xc0ec[101]]!=null){_0x742cxe[_0xc0ec[53]][_0xc0ec[101]][_0xc0ec[102]]=_0x742cxe[_0xc0ec[41]];_0x742cxe[_0xc0ec[53]][_0xc0ec[101]][_0xc0ec[103]]()};_0x742cxe[_0xc0ec[68]][_0xc0ec[99]][_0xc0ec[98]]=_0x742cxe[_0xc0ec[41]]}}else {_0x742cxe[_0xc0ec[68]][_0xc0ec[99]][_0xc0ec[98]]=_0xc0ec[20]};if(_0x742cxe[_0xc0ec[75]]){_0x742cxe[_0xc0ec[68]][_0xc0ec[99]][_0xc0ec[98]]=_0xc0ec[104];_0x742cxe[_0xc0ec[68]][_0xc0ec[99]][_0xc0ec[105]]=_0xc0ec[106];_0x742cxe[_0xc0ec[68]][_0xc0ec[99]][_0xc0ec[107]]=_0xc0ec[108];_0x742cxe[_0xc0ec[68]][_0xc0ec[99]][_0xc0ec[109]]=_0xc0ec[110];_0x742cxe[_0xc0ec[68]][_0xc0ec[99]][_0xc0ec[111]]=_0xc0ec[110];_0x742cxe[_0xc0ec[68]][_0xc0ec[99]][_0xc0ec[112]]=_0xc0ec[113];_0x742cxe[_0xc0ec[68]][_0xc0ec[99]][_0xc0ec[114]]=_0xc0ec[113]}else {_0x742cxe[_0xc0ec[68]][_0xc0ec[99]][_0xc0ec[115]]=_0xc0ec[20]};_0x742cxf[_0xc0ec[15]][_0xc0ec[68]][_0xc0ec[99]][_0xc0ec[98]]=_0x742cxe[_0xc0ec[68]][_0xc0ec[99]][_0xc0ec[98]];if(_0x742cxf[_0xc0ec[15]][_0xc0ec[75]]!=_0x742cxe[_0xc0ec[75]]||_0x742cxf[_0xc0ec[15]][_0xc0ec[79]]!=_0x742cxe[_0xc0ec[79]]){_0x742cxf[_0xc0ec[15]][_0xc0ec[79]]=_0x742cxe[_0xc0ec[79]];_0x742cxf[_0xc0ec[15]][_0xc0ec[75]]=_0x742cxe[_0xc0ec[75]];_0x742cxf[_0xc0ec[15]][_0xc0ec[53]][_0xc0ec[116]]()};if(_0x742cxe[_0xc0ec[40]]&&_0x742cxe[_0xc0ec[68]][_0xc0ec[99]][_0xc0ec[117]]==_0xc0ec[118]&& !touchStyle){_0x742cxe[_0xc0ec[68]][_0xc0ec[99]][_0xc0ec[117]]=_0xc0ec[119]}else {if(!_0x742cxe[_0xc0ec[40]]||touchStyle){_0x742cxe[_0xc0ec[68]][_0xc0ec[99]][_0xc0ec[117]]=_0xc0ec[118]}};var _0x742cx10=(mxClient[_0xc0ec[120]]&&document[_0xc0ec[121]]>=9)?_0xc0ec[122]+this[_0xc0ec[46]]+_0xc0ec[123]:_0xc0ec[97];_0x742cxe[_0xc0ec[68]][_0xc0ec[99]][_0xc0ec[124]]=(!_0x742cxe[_0xc0ec[75]]&&_0x742cxe[_0xc0ec[91]]())?_0xc0ec[122]+this[_0xc0ec[43]]+_0xc0ec[123]:_0x742cx10;if(_0x742cxe[_0xc0ec[53]][_0xc0ec[101]]!=null){_0x742cxe[_0xc0ec[53]][_0xc0ec[101]][_0xc0ec[125]][_0xc0ec[99]][_0xc0ec[124]]=(this[_0xc0ec[14]][_0xc0ec[91]]())?_0xc0ec[122]+this[_0xc0ec[43]]+_0xc0ec[123]:_0xc0ec[97]}}};Editor[_0xc0ec[44]][_0xc0ec[12]]=function(){if(mxClient[_0xc0ec[126]]){mxClient[_0xc0ec[129]](_0xc0ec[127],CSS_PATH+_0xc0ec[128])};mxResources[_0xc0ec[130]]=false;mxResources[_0xc0ec[131]](RESOURCE_BASE);mxConstants[_0xc0ec[132]]=0.3;var _0x742cx11=mxConnectionHandler[_0xc0ec[44]][_0xc0ec[133]];mxConnectionHandler[_0xc0ec[44]][_0xc0ec[133]]=function(){var _0x742cx12=_0x742cx11[_0xc0ec[33]](this,arguments);_0x742cx12[_0xc0ec[134]]=mxUtils[_0xc0ec[34]](this,function(_0x742cx13,_0x742cx14){if(this[_0xc0ec[135]]()){return true};return mxCellMarker[_0xc0ec[44]][_0xc0ec[134]][_0xc0ec[33]](_0x742cx12,arguments)});return _0x742cx12};mxConstants[_0xc0ec[136]]=_0xc0ec[137];mxConstants[_0xc0ec[138]]=_0xc0ec[139];mxConstants[_0xc0ec[140]]=_0xc0ec[141];mxConstants[_0xc0ec[142]]=_0xc0ec[143];mxConstants[_0xc0ec[144]]=_0xc0ec[143];mxConstants[_0xc0ec[145]]=_0xc0ec[139];mxConstants[_0xc0ec[146]]=_0xc0ec[143];mxConstants[_0xc0ec[147]]=_0xc0ec[148];mxConstants[_0xc0ec[149]]=_0xc0ec[143];mxConstants[_0xc0ec[150]]=_0xc0ec[143];mxConstants[_0xc0ec[151]]=_0xc0ec[148];mxConstants[_0xc0ec[152]]=_0xc0ec[141];mxGraph[_0xc0ec[44]][_0xc0ec[153]]=_0xc0ec[154];mxGraph[_0xc0ec[44]][_0xc0ec[79]]=1;mxRubberband[_0xc0ec[44]][_0xc0ec[155]]=30;mxGraphView[_0xc0ec[44]][_0xc0ec[156]]=function(_0x742cx15){return  new mxRectangleShape(_0x742cx15,this[_0xc0ec[14]][_0xc0ec[41]]||_0xc0ec[157],_0xc0ec[158])};mxGraphView[_0xc0ec[44]][_0xc0ec[159]]=function(){var _0x742cx16=this[_0xc0ec[160]]();var _0x742cx17=(_0x742cx16[_0xc0ec[95]]>0)?_0x742cx16[_0xc0ec[70]]/this[_0xc0ec[52]]-this[_0xc0ec[71]][_0xc0ec[70]]:0;var _0x742cx18=(_0x742cx16[_0xc0ec[96]]>0)?_0x742cx16[_0xc0ec[73]]/this[_0xc0ec[52]]-this[_0xc0ec[71]][_0xc0ec[73]]:0;var _0x742cx19=_0x742cx16[_0xc0ec[95]]/this[_0xc0ec[52]];var _0x742cx1a=_0x742cx16[_0xc0ec[96]]/this[_0xc0ec[52]];var _0x742cx1b=this[_0xc0ec[14]][_0xc0ec[82]];var _0x742cx9=this[_0xc0ec[14]][_0xc0ec[79]];var _0x742cxa=_0x742cx1b[_0xc0ec[95]]*_0x742cx9;var _0x742cxb=_0x742cx1b[_0xc0ec[96]]*_0x742cx9;var _0x742cx1c=Math[_0xc0ec[162]](Math[_0xc0ec[161]](0,_0x742cx17)/_0x742cxa);var _0x742cx1d=Math[_0xc0ec[162]](Math[_0xc0ec[161]](0,_0x742cx18)/_0x742cxb);var _0x742cx1e=Math[_0xc0ec[164]](Math[_0xc0ec[163]](1,_0x742cx17+_0x742cx19)/_0x742cxa);var _0x742cx1f=Math[_0xc0ec[164]](Math[_0xc0ec[163]](1,_0x742cx18+_0x742cx1a)/_0x742cxb);var _0x742cx20=_0x742cx1e-_0x742cx1c;var _0x742cx21=_0x742cx1f-_0x742cx1d;var _0x742cx15= new mxRectangle(this[_0xc0ec[52]]*(this[_0xc0ec[71]][_0xc0ec[70]]+_0x742cx1c*_0x742cxa),this[_0xc0ec[52]]*(this[_0xc0ec[71]][_0xc0ec[73]]+_0x742cx1d*_0x742cxb),this[_0xc0ec[52]]*_0x742cx20*_0x742cxa,this[_0xc0ec[52]]*_0x742cx21*_0x742cxb);return _0x742cx15};var _0x742cx22=mxGraph[_0xc0ec[44]][_0xc0ec[165]];mxGraph[_0xc0ec[44]][_0xc0ec[165]]=function(_0x742cx23,_0x742cx24){_0x742cx22[_0xc0ec[33]](this,arguments);if((this[_0xc0ec[166]]!=mxConstants[_0xc0ec[167]]&&this[_0xc0ec[53]][_0xc0ec[101]]!=null)&&(!this[_0xc0ec[168]]||!mxUtils[_0xc0ec[169]](this[_0xc0ec[68]]))){this[_0xc0ec[53]][_0xc0ec[101]][_0xc0ec[125]][_0xc0ec[99]][_0xc0ec[170]]=_0x742cx23+_0xc0ec[171];this[_0xc0ec[53]][_0xc0ec[101]][_0xc0ec[125]][_0xc0ec[99]][_0xc0ec[172]]=_0x742cx24+_0xc0ec[171]}};var _0x742cx25=this;mxGraphView[_0xc0ec[44]][_0xc0ec[173]]=function(){var _0x742cxc=this[_0xc0ec[14]][_0xc0ec[174]]();if(_0x742cxc!=null){if(this[_0xc0ec[124]]==null||this[_0xc0ec[124]][_0xc0ec[175]]!=_0x742cxc[_0xc0ec[176]]){if(this[_0xc0ec[124]]!=null){this[_0xc0ec[124]][_0xc0ec[177]]()};var _0x742cx15= new mxRectangle(0,0,1,1);this[_0xc0ec[124]]= new mxImageShape(_0x742cx15,_0x742cxc[_0xc0ec[176]]);this[_0xc0ec[124]][_0xc0ec[166]]=this[_0xc0ec[14]][_0xc0ec[166]];this[_0xc0ec[124]][_0xc0ec[12]](this[_0xc0ec[178]]);this[_0xc0ec[124]][_0xc0ec[179]]()};this[_0xc0ec[180]](this[_0xc0ec[124]],_0x742cxc)}else {if(this[_0xc0ec[124]]!=null){this[_0xc0ec[124]][_0xc0ec[177]]();this[_0xc0ec[124]]=null}};if(this[_0xc0ec[14]][_0xc0ec[75]]){var _0x742cx15=this[_0xc0ec[159]]();if(this[_0xc0ec[101]]==null){this[_0xc0ec[101]]=this[_0xc0ec[156]](_0x742cx15);this[_0xc0ec[101]][_0xc0ec[52]]=1;this[_0xc0ec[101]][_0xc0ec[181]]=true;this[_0xc0ec[101]][_0xc0ec[166]]=mxConstants[_0xc0ec[182]];this[_0xc0ec[101]][_0xc0ec[12]](this[_0xc0ec[14]][_0xc0ec[68]]);this[_0xc0ec[14]][_0xc0ec[68]][_0xc0ec[184]][_0xc0ec[99]][_0xc0ec[183]]=_0xc0ec[185];this[_0xc0ec[14]][_0xc0ec[68]][_0xc0ec[186]](this[_0xc0ec[101]][_0xc0ec[125]],this[_0xc0ec[14]][_0xc0ec[68]][_0xc0ec[184]]);this[_0xc0ec[101]][_0xc0ec[179]]();this[_0xc0ec[101]][_0xc0ec[125]][_0xc0ec[187]]=_0xc0ec[188];this[_0xc0ec[101]][_0xc0ec[125]][_0xc0ec[99]][_0xc0ec[189]]=_0xc0ec[190];mxEvent[_0xc0ec[35]](this[_0xc0ec[101]][_0xc0ec[125]],_0xc0ec[191],mxUtils[_0xc0ec[34]](this,function(_0x742cx14){this[_0xc0ec[14]][_0xc0ec[192]](_0x742cx14)}));mxEvent[_0xc0ec[198]](this[_0xc0ec[101]][_0xc0ec[125]],mxUtils[_0xc0ec[34]](this,function(_0x742cx14){this[_0xc0ec[14]][_0xc0ec[193]](mxEvent.MOUSE_DOWN, new mxMouseEvent(_0x742cx14))}),mxUtils[_0xc0ec[34]](this,function(_0x742cx14){if(this[_0xc0ec[14]][_0xc0ec[93]]!=null&&this[_0xc0ec[14]][_0xc0ec[93]][_0xc0ec[194]]()){this[_0xc0ec[14]][_0xc0ec[93]][_0xc0ec[195]]()};if(this[_0xc0ec[14]][_0xc0ec[196]]&&!mxEvent[_0xc0ec[197]](_0x742cx14)){this[_0xc0ec[14]][_0xc0ec[193]](mxEvent.MOUSE_MOVE, new mxMouseEvent(_0x742cx14))}}),mxUtils[_0xc0ec[34]](this,function(_0x742cx14){this[_0xc0ec[14]][_0xc0ec[193]](mxEvent.MOUSE_UP, new mxMouseEvent(_0x742cx14))}))}else {this[_0xc0ec[101]][_0xc0ec[52]]=1;this[_0xc0ec[101]][_0xc0ec[199]]=_0x742cx15;this[_0xc0ec[101]][_0xc0ec[179]]()};this[_0xc0ec[101]][_0xc0ec[125]][_0xc0ec[99]][_0xc0ec[124]]=(this[_0xc0ec[14]][_0xc0ec[91]]())?_0xc0ec[122]+_0x742cx25[_0xc0ec[43]]+_0xc0ec[123]:_0xc0ec[97]}else {if(this[_0xc0ec[101]]!=null){this[_0xc0ec[101]][_0xc0ec[177]]();this[_0xc0ec[101]]=null}}};mxGraph[_0xc0ec[44]][_0xc0ec[200]]=function(_0x742cx26,_0x742cx27,_0x742cx28){var _0x742cx29=this[_0xc0ec[53]][_0xc0ec[52]];var _0x742cx2a=this[_0xc0ec[53]][_0xc0ec[71]];var _0x742cx1b=this[_0xc0ec[82]];var _0x742cx9=_0x742cx29*this[_0xc0ec[79]];var _0x742cx2b=this[_0xc0ec[53]][_0xc0ec[159]]();_0x742cx27=_0x742cx2b[_0xc0ec[95]];_0x742cx28=_0x742cx2b[_0xc0ec[96]];var _0x742cx15= new mxRectangle(_0x742cx29*_0x742cx2a[_0xc0ec[70]],_0x742cx29*_0x742cx2a[_0xc0ec[73]],_0x742cx1b[_0xc0ec[95]]*_0x742cx9,_0x742cx1b[_0xc0ec[96]]*_0x742cx9);_0x742cx26=_0x742cx26&&Math[_0xc0ec[161]](_0x742cx15[_0xc0ec[95]],_0x742cx15[_0xc0ec[96]])>this[_0xc0ec[201]];var _0x742cx2c=(_0x742cx26)?Math[_0xc0ec[164]](_0x742cx27/_0x742cx15[_0xc0ec[95]])-1:0;var _0x742cx2d=(_0x742cx26)?Math[_0xc0ec[164]](_0x742cx28/_0x742cx15[_0xc0ec[96]])-1:0;var _0x742cx2e=_0x742cx2b[_0xc0ec[70]]+_0x742cx27;var _0x742cx2f=_0x742cx2b[_0xc0ec[73]]+_0x742cx28;if(this[_0xc0ec[202]]==null&&_0x742cx2c>0){this[_0xc0ec[202]]=[]};if(this[_0xc0ec[202]]!=null){for(var _0x742cx30=0;_0x742cx30<=_0x742cx2c;_0x742cx30++){var _0x742cx31=[ new mxPoint(_0x742cx2b[_0xc0ec[70]]+(_0x742cx30+1)*_0x742cx15[_0xc0ec[95]],_0x742cx2b[_0xc0ec[73]]), new mxPoint(_0x742cx2b[_0xc0ec[70]]+(_0x742cx30+1)*_0x742cx15[_0xc0ec[95]],_0x742cx2f)];if(this[_0xc0ec[202]][_0x742cx30]!=null){this[_0xc0ec[202]][_0x742cx30][_0xc0ec[52]]=1;this[_0xc0ec[202]][_0x742cx30][_0xc0ec[203]]=_0x742cx31;this[_0xc0ec[202]][_0x742cx30][_0xc0ec[179]]()}else {var _0x742cx32= new mxPolyline(_0x742cx31,this[_0xc0ec[153]],this[_0xc0ec[52]]);_0x742cx32[_0xc0ec[166]]=this[_0xc0ec[166]];_0x742cx32[_0xc0ec[204]]=this[_0xc0ec[205]];_0x742cx32[_0xc0ec[206]]=false;_0x742cx32[_0xc0ec[52]]=_0x742cx29;_0x742cx32[_0xc0ec[12]](this[_0xc0ec[53]][_0xc0ec[178]]);_0x742cx32[_0xc0ec[179]]();this[_0xc0ec[202]][_0x742cx30]=_0x742cx32}};for(var _0x742cx30=_0x742cx2c;_0x742cx30<this[_0xc0ec[202]][_0xc0ec[83]];_0x742cx30++){this[_0xc0ec[202]][_0x742cx30][_0xc0ec[177]]()};this[_0xc0ec[202]][_0xc0ec[207]](_0x742cx2c,this[_0xc0ec[202]][_0xc0ec[83]]-_0x742cx2c)};if(this[_0xc0ec[208]]==null&&_0x742cx2d>0){this[_0xc0ec[208]]=[]};if(this[_0xc0ec[208]]!=null){for(var _0x742cx30=0;_0x742cx30<=_0x742cx2d;_0x742cx30++){var _0x742cx31=[ new mxPoint(_0x742cx2b[_0xc0ec[70]],_0x742cx2b[_0xc0ec[73]]+(_0x742cx30+1)*_0x742cx15[_0xc0ec[96]]), new mxPoint(_0x742cx2e,_0x742cx2b[_0xc0ec[73]]+(_0x742cx30+1)*_0x742cx15[_0xc0ec[96]])];if(this[_0xc0ec[208]][_0x742cx30]!=null){this[_0xc0ec[208]][_0x742cx30][_0xc0ec[52]]=1;this[_0xc0ec[208]][_0x742cx30][_0xc0ec[203]]=_0x742cx31;this[_0xc0ec[208]][_0x742cx30][_0xc0ec[179]]()}else {var _0x742cx32= new mxPolyline(_0x742cx31,this[_0xc0ec[153]],_0x742cx29);_0x742cx32[_0xc0ec[166]]=this[_0xc0ec[166]];_0x742cx32[_0xc0ec[204]]=this[_0xc0ec[205]];_0x742cx32[_0xc0ec[206]]=false;_0x742cx32[_0xc0ec[52]]=_0x742cx29;_0x742cx32[_0xc0ec[12]](this[_0xc0ec[53]][_0xc0ec[178]]);_0x742cx32[_0xc0ec[179]]();this[_0xc0ec[208]][_0x742cx30]=_0x742cx32}};for(var _0x742cx30=_0x742cx2d;_0x742cx30<this[_0xc0ec[208]][_0xc0ec[83]];_0x742cx30++){this[_0xc0ec[208]][_0x742cx30][_0xc0ec[177]]()};this[_0xc0ec[208]][_0xc0ec[207]](_0x742cx2d,this[_0xc0ec[208]][_0xc0ec[83]]-_0x742cx2d)}};mxEdgeHandler[_0xc0ec[44]][_0xc0ec[209]]=true;mxGraphHandler[_0xc0ec[44]][_0xc0ec[58]]=true;var _0x742cx33=mxGraphHandler[_0xc0ec[44]][_0xc0ec[210]];mxGraphHandler[_0xc0ec[44]][_0xc0ec[210]]=function(_0x742cx34,_0x742cx35,_0x742cx14){for(var _0x742cx30=0;_0x742cx30<_0x742cx35[_0xc0ec[83]];_0x742cx30++){if(this[_0xc0ec[14]][_0xc0ec[36]]()[_0xc0ec[211]](_0x742cx35[_0x742cx30])){var _0x742cx36=this[_0xc0ec[14]][_0xc0ec[212]](_0x742cx35[_0x742cx30]);if(_0x742cx36!=null&&_0x742cx36[_0xc0ec[213]]){return false}}};return _0x742cx33[_0xc0ec[33]](this,arguments)};mxGuide[_0xc0ec[44]][_0xc0ec[214]]=function(_0x742cx14){return !mxEvent[_0xc0ec[215]](_0x742cx14)};mxPopupMenuAddItem=mxPopupMenu[_0xc0ec[44]][_0xc0ec[216]];mxPopupMenu[_0xc0ec[44]][_0xc0ec[216]]=function(_0x742cx37,_0x742cx38,_0x742cx39,_0x742cx34,_0x742cx3a,_0x742cx3b){var _0x742cx3c=mxPopupMenuAddItem[_0xc0ec[33]](this,arguments);if(_0x742cx3b!=null&& !_0x742cx3b){mxEvent[_0xc0ec[35]](_0x742cx3c,_0xc0ec[217],function(_0x742cx14){mxEvent[_0xc0ec[218]](_0x742cx14)})};return _0x742cx3c};var _0x742cx3d=mxGraphHandler[_0xc0ec[44]][_0xc0ec[219]];mxGraphHandler[_0xc0ec[44]][_0xc0ec[219]]=function(_0x742cx3e){var _0x742cx3f=this[_0xc0ec[14]][_0xc0ec[36]]();var _0x742cx40=_0x742cx3f[_0xc0ec[221]](this[_0xc0ec[14]][_0xc0ec[220]]());var _0x742cx41=_0x742cx3d[_0xc0ec[33]](this,arguments);var _0x742cx34=_0x742cx3f[_0xc0ec[221]](_0x742cx41);if(_0x742cx40==null||(_0x742cx40!=_0x742cx41&&_0x742cx40!=_0x742cx34)){while(!this[_0xc0ec[14]][_0xc0ec[222]](_0x742cx41)&&!this[_0xc0ec[14]][_0xc0ec[222]](_0x742cx34)&&_0x742cx3f[_0xc0ec[211]](_0x742cx34)&&!this[_0xc0ec[14]][_0xc0ec[223]](_0x742cx34)){_0x742cx41=_0x742cx34;_0x742cx34=this[_0xc0ec[14]][_0xc0ec[36]]()[_0xc0ec[221]](_0x742cx41)}};return _0x742cx41};var _0x742cx42=mxGraphHandler[_0xc0ec[44]][_0xc0ec[224]];mxGraphHandler[_0xc0ec[44]][_0xc0ec[224]]=function(_0x742cx41){var _0x742cx3c=_0x742cx42[_0xc0ec[33]](this,arguments);var _0x742cx3f=this[_0xc0ec[14]][_0xc0ec[36]]();var _0x742cx40=_0x742cx3f[_0xc0ec[221]](this[_0xc0ec[14]][_0xc0ec[220]]());var _0x742cx34=_0x742cx3f[_0xc0ec[221]](_0x742cx41);if(_0x742cx40==null||(_0x742cx40!=_0x742cx41&&_0x742cx40!=_0x742cx34)){if(!this[_0xc0ec[14]][_0xc0ec[222]](_0x742cx41)&&_0x742cx3f[_0xc0ec[211]](_0x742cx34)&&!this[_0xc0ec[14]][_0xc0ec[223]](_0x742cx34)){_0x742cx3c=true}};return _0x742cx3c};mxGraphHandler[_0xc0ec[44]][_0xc0ec[225]]=function(_0x742cx3e){var _0x742cx41=_0x742cx3e[_0xc0ec[226]]();if(_0x742cx41==null){_0x742cx41=this[_0xc0ec[227]]};var _0x742cx3f=this[_0xc0ec[14]][_0xc0ec[36]]();var _0x742cx34=_0x742cx3f[_0xc0ec[221]](_0x742cx41);while(this[_0xc0ec[14]][_0xc0ec[222]](_0x742cx41)&&_0x742cx3f[_0xc0ec[211]](_0x742cx34)&&!this[_0xc0ec[14]][_0xc0ec[223]](_0x742cx34)){_0x742cx41=_0x742cx34;_0x742cx34=_0x742cx3f[_0xc0ec[221]](_0x742cx41)};this[_0xc0ec[14]][_0xc0ec[229]](_0x742cx41,_0x742cx3e[_0xc0ec[228]]())};mxPanningHandler[_0xc0ec[44]][_0xc0ec[230]]=function(_0x742cx3e){var _0x742cx41=_0x742cx3e[_0xc0ec[226]]();var _0x742cx3f=this[_0xc0ec[14]][_0xc0ec[36]]();var _0x742cx34=_0x742cx3f[_0xc0ec[221]](_0x742cx41);while(_0x742cx3f[_0xc0ec[211]](_0x742cx34)&&!this[_0xc0ec[14]][_0xc0ec[223]](_0x742cx34)){if(this[_0xc0ec[14]][_0xc0ec[222]](_0x742cx34)){_0x742cx41=_0x742cx34};_0x742cx34=_0x742cx3f[_0xc0ec[221]](_0x742cx34)};return _0x742cx41}};Editor[_0xc0ec[44]][_0xc0ec[18]]=function(){var _0x742cxe=this[_0xc0ec[14]];var _0x742cx43= new mxUndoManager();var _0x742cx44=function(_0x742cx45,_0x742cx14){_0x742cx43[_0xc0ec[233]](_0x742cx14[_0xc0ec[232]](_0xc0ec[231]))};_0x742cxe[_0xc0ec[36]]()[_0xc0ec[35]](mxEvent.UNDO,_0x742cx44);_0x742cxe[_0xc0ec[234]]()[_0xc0ec[35]](mxEvent.UNDO,_0x742cx44);var _0x742cx46=function(_0x742cx45,_0x742cx14){var _0x742cx47=_0x742cxe[_0xc0ec[236]](_0x742cx14[_0xc0ec[232]](_0xc0ec[231])[_0xc0ec[235]]);var _0x742cx35=[];for(var _0x742cx30=1;_0x742cx30<_0x742cx47[_0xc0ec[83]];_0x742cx30++){if(_0x742cxe[_0xc0ec[53]][_0xc0ec[237]](_0x742cx47[_0x742cx30])!=null){_0x742cx35[_0xc0ec[238]](_0x742cx47[_0x742cx30])}};_0x742cxe[_0xc0ec[239]](_0x742cx35)};_0x742cx43[_0xc0ec[35]](mxEvent.UNDO,_0x742cx46);_0x742cx43[_0xc0ec[35]](mxEvent.REDO,_0x742cx46);return _0x742cx43};Editor[_0xc0ec[44]][_0xc0ec[13]]=function(){mxStencilRegistry[_0xc0ec[241]](STENCIL_PATH+_0xc0ec[240])};(function(){mxStencilRegistry[_0xc0ec[242]]={};mxStencilRegistry[_0xc0ec[243]]=[];mxStencilRegistry[_0xc0ec[244]]=function(_0x742cx48){var _0x742cx3c=mxStencilRegistry[_0xc0ec[245]][_0x742cx48];if(_0x742cx3c==null){var _0x742cx49=mxStencilRegistry[_0xc0ec[246]](_0x742cx48);if(_0x742cx49!=null){var _0x742cx4a=mxStencilRegistry[_0xc0ec[242]][_0x742cx49];if(_0x742cx4a!=null){if(mxStencilRegistry[_0xc0ec[243]][_0x742cx49]==null){mxStencilRegistry[_0xc0ec[243]][_0x742cx49]=1;for(var _0x742cx30=0;_0x742cx30<_0x742cx4a[_0xc0ec[83]];_0x742cx30++){var _0x742cx4b=_0x742cx4a[_0x742cx30];if(_0x742cx4b[_0xc0ec[248]]()[_0xc0ec[247]](_0x742cx4b[_0xc0ec[83]]-4,_0x742cx4b[_0xc0ec[83]])==_0xc0ec[25]){mxStencilRegistry[_0xc0ec[241]](_0x742cx4b,null)}else {if(_0x742cx4b[_0xc0ec[248]]()[_0xc0ec[247]](_0x742cx4b[_0xc0ec[83]]-3,_0x742cx4b[_0xc0ec[83]])==_0xc0ec[249]){var _0x742cx4c=mxUtils[_0xc0ec[250]](_0x742cx4b);if(_0x742cx4c!=null){eval[_0xc0ec[11]](window,_0x742cx4c[_0xc0ec[251]]())}}else {}}}}}else {mxStencilRegistry[_0xc0ec[241]](STENCIL_PATH+_0xc0ec[252]+_0x742cx49+_0xc0ec[25],null)};_0x742cx3c=mxStencilRegistry[_0xc0ec[245]][_0x742cx48]}};return _0x742cx3c};mxStencilRegistry[_0xc0ec[246]]=function(_0x742cx48){var _0x742cx4d=_0x742cx48[_0xc0ec[254]](_0xc0ec[253]);var _0x742cx4e=null;if(_0x742cx4d[_0xc0ec[83]]>0&&_0x742cx4d[0]==_0xc0ec[255]){_0x742cx4e=_0x742cx4d[1];for(var _0x742cx30=2;_0x742cx30<_0x742cx4d[_0xc0ec[83]]-1;_0x742cx30++){_0x742cx4e+=_0xc0ec[252]+_0x742cx4d[_0x742cx30]}};return _0x742cx4e};mxStencilRegistry[_0xc0ec[241]]=function(_0x742cx4f,_0x742cx50,_0x742cx51){_0x742cx51=(_0x742cx51!=null)?_0x742cx51:false;var _0x742cx52=mxStencilRegistry[_0xc0ec[243]][_0x742cx4f];if(_0x742cx51||_0x742cx52==null){var _0x742cx53=false;if(_0x742cx52==null){var _0x742cx4c=mxUtils[_0xc0ec[250]](_0x742cx4f);_0x742cx52=_0x742cx4c[_0xc0ec[256]]();mxStencilRegistry[_0xc0ec[243]][_0x742cx4f]=_0x742cx52;_0x742cx53=true};mxStencilRegistry[_0xc0ec[257]](_0x742cx52,_0x742cx50,_0x742cx53)}};mxStencilRegistry[_0xc0ec[257]]=function(_0x742cx54,_0x742cx50,_0x742cx53){_0x742cx53=(_0x742cx53!=null)?_0x742cx53:true;var _0x742cx55=_0x742cx54[_0xc0ec[258]];var _0x742cx56=_0x742cx55[_0xc0ec[184]];var _0x742cx57=_0xc0ec[20];var _0x742cx48=_0x742cx55[_0xc0ec[56]](_0xc0ec[259]);if(_0x742cx48!=null){_0x742cx57=_0x742cx48+_0xc0ec[253]};while(_0x742cx56!=null){if(_0x742cx56[_0xc0ec[260]]==mxConstants[_0xc0ec[261]]){_0x742cx48=_0x742cx56[_0xc0ec[56]](_0xc0ec[259]);if(_0x742cx48!=null){_0x742cx57=_0x742cx57[_0xc0ec[248]]();var _0x742cx58=_0x742cx48[_0xc0ec[263]](/ /g,_0xc0ec[262]);if(_0x742cx53){mxStencilRegistry[_0xc0ec[264]](_0x742cx57+_0x742cx58[_0xc0ec[248]](), new mxStencil(_0x742cx56))};if(_0x742cx50!=null){var _0x742cx19=_0x742cx56[_0xc0ec[56]](_0xc0ec[265]);var _0x742cx1a=_0x742cx56[_0xc0ec[56]](_0xc0ec[266]);_0x742cx19=(_0x742cx19==null)?80:parseInt(_0x742cx19,10);_0x742cx1a=(_0x742cx1a==null)?80:parseInt(_0x742cx1a,10);_0x742cx50(_0x742cx57,_0x742cx58,_0x742cx48,_0x742cx19,_0x742cx1a)}}};_0x742cx56=_0x742cx56[_0xc0ec[267]]}}})();OpenFile=function(_0x742cx59){this[_0xc0ec[268]]=null;this[_0xc0ec[269]]=null;this[_0xc0ec[270]]=_0x742cx59};OpenFile[_0xc0ec[44]][_0xc0ec[271]]=function(_0x742cx6){this[_0xc0ec[269]]=_0x742cx6;this[_0xc0ec[272]]()};OpenFile[_0xc0ec[44]][_0xc0ec[273]]=function(_0x742cx6,_0x742cx5a){this[_0xc0ec[274]]=_0x742cx6;this[_0xc0ec[21]]=_0x742cx5a;this[_0xc0ec[272]]()};OpenFile[_0xc0ec[44]][_0xc0ec[275]]=function(_0x742cx5b){this[_0xc0ec[276]]();mxUtils[_0xc0ec[277]](_0x742cx5b)};OpenFile[_0xc0ec[44]][_0xc0ec[272]]=function(){if(this[_0xc0ec[269]]!=null&&this[_0xc0ec[274]]!=null){this[_0xc0ec[269]](this[_0xc0ec[274]],this[_0xc0ec[21]]);this[_0xc0ec[276]]()}};OpenFile[_0xc0ec[44]][_0xc0ec[276]]=function(){if(this[_0xc0ec[270]]!=null){this[_0xc0ec[270]]()}}
\ No newline at end of file
+/**
+ * $Id: Editor.js,v 1.14 2013/03/06 17:57:10 boris Exp $
+ * Copyright (c) 2006-2012, JGraph Ltd
+ */
+// Specifies if local storage should be used (eg. on the iPad which has no filesystem)
+var useLocalStorage = (mxClient.IS_TOUCH || urlParams['storage'] == 'local') && typeof(localStorage) != 'undefined';
+var fileSupport = window.File != null && window.FileReader != null && window.FileList != null;
+
+// Specifies if connector should be shown on selected cells
+var touchStyle = mxClient.IS_TOUCH || urlParams['touch'] == '1';
+
+// Counts open editor tabs (must be global for cross-window access)
+var counter = 0;
+
+// Cross-domain window access is not allowed in FF, so if we
+// were opened from another domain then this will fail.
+try {
+       var op = window;
+
+       while (op.opener != null && !isNaN(op.opener.counter)) {
+               op = op.opener;
+       }
+
+       // Increments the counter in the first opener in the chain
+       if (op != null) {
+               op.counter++;
+               counter = op.counter;
+       }
+} catch (e) {
+       // ignore
+}
+
+/**
+ * Editor constructor executed on page load.
+ */
+Editor = function() {
+       mxEventSource.call(this);
+       this.init();
+       this.initStencilRegistry();
+       this.graph = new Graph();
+       this.outline = new mxOutline(this.graph);
+       this.outline.updateOnPan = true;
+       this.undoManager = this.createUndoManager();
+       this.status = '';
+
+       // Contains the name which was used for the last save. Default value is null.
+       this.filename = null;
+
+       this.getOrCreateFilename = function() {
+               return this.filename || mxResources.get('drawing', [counter]) + '.xml';
+       };
+
+       this.getFilename = function() {
+               return this.filename;
+       };
+
+       // Sets the status and fires a statusChanged event
+       this.setStatus = function(value) {
+               this.status = value;
+               this.fireEvent(new mxEventObject('statusChanged'));
+       };
+
+       // Returns the current status
+       this.getStatus = function() {
+               return this.status;
+       };
+
+       // Contains the current modified state of the diagram. This is false for
+       // new diagrams and after the diagram was saved.
+       this.modified = false;
+
+       // Updates modified state if graph changes
+       this.graphChangeListener = function() {
+               this.modified = true;
+       };
+       this.graph.getModel().addListener(mxEvent.CHANGE, mxUtils.bind(this, function() {
+               this.graphChangeListener.apply(this, arguments);
+       }));
+
+       // Installs dialog if browser window is closed without saving
+       // This must be disabled during save and image export
+       window.onbeforeunload = mxUtils.bind(this, function() {
+               if (this.modified) {
+                       return mxResources.get('allChangesLost');
+               }
+       });
+
+       // Sets persistent graph state defaults
+       this.graph.resetViewOnRootChange = false;
+       this.graph.scrollbars = true;
+       this.graph.background = null;
+};
+
+// Editor inherits from mxEventSource
+mxUtils.extend(Editor, mxEventSource);
+
+/**
+ * Specifies the image URL to be used for the grid.
+ */
+Editor.prototype.gridImage = IMAGE_PATH + '/grid.gif';
+
+/**
+ * Specifies the image URL to be used for the transparent background.
+ */
+Editor.prototype.transparentImage = IMAGE_PATH + '/transparent.gif';
+
+/**
+ * Sets the XML node for the current diagram.
+ */
+Editor.prototype.setGraphXml = function(node) {
+       var dec = new mxCodec(node.ownerDocument);
+
+       if (node.nodeName == 'mxGraphModel') {
+               this.graph.view.scale = 1;
+               this.graph.gridEnabled = node.getAttribute('grid') != '0';
+               this.graph.graphHandler.guidesEnabled = node.getAttribute('guides') != '0';
+               this.graph.setTooltips(node.getAttribute('tooltips') != '0');
+               this.graph.setConnectable(node.getAttribute('connect') != '0');
+               this.graph.foldingEnabled = node.getAttribute('fold') != '0';
+               this.graph.scrollbars = node.getAttribute('scrollbars') != '0';
+
+               if (!this.graph.scrollbars) {
+                       this.graph.container.scrollLeft = 0;
+                       this.graph.container.scrollTop = 0;
+                       this.graph.view.translate.x = Number(node.getAttribute('dx') || 0);
+                       this.graph.view.translate.y = Number(node.getAttribute('dy') || 0);
+               }
+
+               this.graph.pageVisible = node.getAttribute('page') == '1';
+               this.graph.pageBreaksVisible = this.graph.pageVisible;
+               this.graph.preferPageSize = this.graph.pageBreaksVisible;
+
+               // Loads the persistent state settings
+               var ps = node.getAttribute('pageScale');
+
+               if (ps != null) {
+                       this.graph.pageScale = ps;
+               } else {
+                       this.graph.pageScale = 1.5;
+               }
+
+               var pw = node.getAttribute('pageWidth');
+               var ph = node.getAttribute('pageHeight');
+
+               if (pw != null && ph != null) {
+                       this.graph.pageFormat = new mxRectangle(0, 0, parseFloat(pw), parseFloat(ph));
+                       this.outline.outline.pageFormat = this.graph.pageFormat;
+               }
+
+               // Loads the persistent state settings
+               var bg = node.getAttribute('background');
+
+               if (bg != null && bg.length > 0) {
+                       this.graph.background = bg;
+               }
+
+               dec.decode(node, this.graph.getModel());
+               this.updateGraphComponents();
+       }
+};
+
+/**
+ * Returns the XML node that represents the current diagram.
+ */
+Editor.prototype.getGraphXml = function() {
+       var enc = new mxCodec(mxUtils.createXmlDocument());
+       var node = enc.encode(this.graph.getModel());
+
+       if (this.graph.view.translate.x != 0 || this.graph.view.translate.y != 0) {
+               node.setAttribute('dx', Math.round(this.graph.view.translate.x * 100) / 100);
+               node.setAttribute('dy', Math.round(this.graph.view.translate.y * 100) / 100);
+       }
+
+       node.setAttribute('grid', (this.graph.isGridEnabled()) ? '1' : '0');
+       node.setAttribute('guides', (this.graph.graphHandler.guidesEnabled) ? '1' : '0');
+       node.setAttribute('guides', (this.graph.graphHandler.guidesEnabled) ? '1' : '0');
+       node.setAttribute('tooltips', (this.graph.tooltipHandler.isEnabled()) ? '1' : '0');
+       node.setAttribute('connect', (this.graph.connectionHandler.isEnabled()) ? '1' : '0');
+       node.setAttribute('fold', (this.graph.foldingEnabled) ? '1' : '0');
+       node.setAttribute('page', (this.graph.pageVisible) ? '1' : '0');
+       node.setAttribute('pageScale', this.graph.pageScale);
+       node.setAttribute('pageWidth', this.graph.pageFormat.width);
+       node.setAttribute('pageHeight', this.graph.pageFormat.height);
+
+       if (!this.graph.scrollbars) {
+               node.setAttribute('scrollbars', '0');
+       }
+
+       if (this.graph.background != null) {
+               node.setAttribute('background', this.graph.background);
+       }
+
+       return node;
+};
+
+/**
+ * Keeps the graph container in sync with the persistent graph state
+ */
+Editor.prototype.updateGraphComponents = function() {
+       var graph = this.graph;
+       var outline = this.outline;
+
+       if (graph.container != null && outline.outline.container != null) {
+               if (graph.background != null) {
+                       if (graph.background == 'none') {
+                               graph.container.style.backgroundColor = 'transparent';
+                       } else {
+                               if (graph.view.backgroundPageShape != null) {
+                                       graph.view.backgroundPageShape.fill = graph.background;
+                                       graph.view.backgroundPageShape.reconfigure();
+                               }
+
+                               graph.container.style.backgroundColor = graph.background;
+                       }
+               } else {
+                       graph.container.style.backgroundColor = '';
+               }
+
+               if (graph.pageVisible) {
+                       graph.container.style.backgroundColor = '#ebebeb';
+                       graph.container.style.borderStyle = 'solid';
+                       graph.container.style.borderColor = '#e5e5e5';
+                       graph.container.style.borderTopWidth = '1px';
+                       graph.container.style.borderLeftWidth = '1px';
+                       graph.container.style.borderRightWidth = '0px';
+                       graph.container.style.borderBottomWidth = '0px';
+               } else {
+                       graph.container.style.border = '';
+               }
+
+               outline.outline.container.style.backgroundColor = graph.container.style.backgroundColor;
+
+               if (outline.outline.pageVisible != graph.pageVisible ||
+                       outline.outline.pageScale != graph.pageScale) {
+                       outline.outline.pageScale = graph.pageScale;
+                       outline.outline.pageVisible = graph.pageVisible;
+                       outline.outline.view.validate();
+               }
+
+               if (graph.scrollbars && graph.container.style.overflow == 'hidden' && !touchStyle) {
+                       graph.container.style.overflow = 'auto';
+               } else if (!graph.scrollbars || touchStyle) {
+                       graph.container.style.overflow = 'hidden';
+               }
+
+               // Transparent.gif is a workaround for focus repaint problems in IE
+               var noBackground = (mxClient.IS_IE && document.documentMode >= 9) ? 'url(' + this.transparentImage + ')' : 'none';
+               graph.container.style.backgroundImage = (!graph.pageVisible && graph.isGridEnabled()) ? 'url(' + this.gridImage + ')' : noBackground;
+
+               if (graph.view.backgroundPageShape != null) {
+                       graph.view.backgroundPageShape.node.style.backgroundImage = (this.graph.isGridEnabled()) ? 'url(' + this.gridImage + ')' : 'none';
+               }
+       }
+};
+
+/**
+ * Initializes the environment.
+ */
+Editor.prototype.init = function() {
+       // Adds stylesheet for IE6
+       if (mxClient.IS_IE6) {
+               mxClient.link('stylesheet', CSS_PATH + '/grapheditor-ie6.css');
+       }
+
+       // Adds required resources (disables loading of fallback properties, this can only
+       // be used if we know that all keys are defined in the language specific file)
+       mxResources.loadDefaultBundle = false;
+       mxResources.add(RESOURCE_BASE);
+
+       // Makes the connection hotspot smaller
+       mxConstants.DEFAULT_HOTSPOT = 0.3;
+
+       var mxConnectionHandlerCreateMarker = mxConnectionHandler.prototype.createMarker;
+       mxConnectionHandler.prototype.createMarker = function() {
+               var marker = mxConnectionHandlerCreateMarker.apply(this, arguments);
+
+               // Overrides to ignore hotspot only for target terminal
+               marker.intersects = mxUtils.bind(this, function(state, evt) {
+                       if (this.isConnecting()) {
+                               return true;
+                       }
+
+                       return mxCellMarker.prototype.intersects.apply(marker, arguments);
+               });
+
+               return marker;
+       };
+
+       // Makes the shadow brighter
+       mxConstants.SHADOWCOLOR = '#d0d0d0';
+
+       // Changes some default colors
+       mxConstants.HANDLE_FILLCOLOR = '#99ccff';
+       mxConstants.HANDLE_STROKECOLOR = '#0088cf';
+       mxConstants.VERTEX_SELECTION_COLOR = '#00a8ff';
+       mxConstants.OUTLINE_COLOR = '#00a8ff';
+       mxConstants.OUTLINE_HANDLE_FILLCOLOR = '#99ccff';
+       mxConstants.OUTLINE_HANDLE_STROKECOLOR = '#00a8ff';
+       mxConstants.CONNECT_HANDLE_FILLCOLOR = '#cee7ff';
+       mxConstants.EDGE_SELECTION_COLOR = '#00a8ff';
+       mxConstants.DEFAULT_VALID_COLOR = '#00a8ff';
+       mxConstants.LABEL_HANDLE_FILLCOLOR = '#cee7ff';
+       mxConstants.GUIDE_COLOR = '#0088cf';
+
+       mxGraph.prototype.pageBreakColor = '#c0c0c0';
+       mxGraph.prototype.pageScale = 1;
+
+       // Increases default rubberband opacity (default is 20)
+       mxRubberband.prototype.defaultOpacity = 30;
+
+       // Changes border color of background page shape
+       mxGraphView.prototype.createBackgroundPageShape = function(bounds) {
+               return new mxRectangleShape(bounds, this.graph.background || 'white', '#cacaca');
+       };
+
+       // Fits the number of background pages to the graph
+       mxGraphView.prototype.getBackgroundPageBounds = function() {
+               var gb = this.getGraphBounds();
+
+               // Computes unscaled, untranslated graph bounds
+               var x = (gb.width > 0) ? gb.x / this.scale - this.translate.x : 0;
+               var y = (gb.height > 0) ? gb.y / this.scale - this.translate.y : 0;
+               var w = gb.width / this.scale;
+               var h = gb.height / this.scale;
+
+               var fmt = this.graph.pageFormat;
+               var ps = this.graph.pageScale;
+
+               var pw = fmt.width * ps;
+               var ph = fmt.height * ps;
+
+               var x0 = Math.floor(Math.min(0, x) / pw);
+               var y0 = Math.floor(Math.min(0, y) / ph);
+               var xe = Math.ceil(Math.max(1, x + w) / pw);
+               var ye = Math.ceil(Math.max(1, y + h) / ph);
+
+               var rows = xe - x0;
+               var cols = ye - y0;
+
+               var bounds = new mxRectangle(this.scale * (this.translate.x + x0 * pw), this.scale *
+                       (this.translate.y + y0 * ph), this.scale * rows * pw, this.scale * cols * ph);
+
+               return bounds;
+       };
+
+       // Add panning for background page in VML
+       var graphPanGraph = mxGraph.prototype.panGraph;
+       mxGraph.prototype.panGraph = function(dx, dy) {
+               graphPanGraph.apply(this, arguments);
+
+               if ((this.dialect != mxConstants.DIALECT_SVG && this.view.backgroundPageShape != null) &&
+                       (!this.useScrollbarsForPanning || !mxUtils.hasScrollbars(this.container))) {
+                       this.view.backgroundPageShape.node.style.marginLeft = dx + 'px';
+                       this.view.backgroundPageShape.node.style.marginTop = dy + 'px';
+               }
+       };
+
+       var editor = this;
+
+       // Uses HTML for background pages (to support grid background image)
+       mxGraphView.prototype.validateBackground = function() {
+               var bg = this.graph.getBackgroundImage();
+
+               if (bg != null) {
+                       if (this.backgroundImage == null || this.backgroundImage.image != bg.src) {
+                               if (this.backgroundImage != null) {
+                                       this.backgroundImage.destroy();
+                               }
+
+                               var bounds = new mxRectangle(0, 0, 1, 1);
+
+                               this.backgroundImage = new mxImageShape(bounds, bg.src);
+                               this.backgroundImage.dialect = this.graph.dialect;
+                               this.backgroundImage.init(this.backgroundPane);
+                               this.backgroundImage.redraw();
+                       }
+
+                       this.redrawBackgroundImage(this.backgroundImage, bg);
+               } else if (this.backgroundImage != null) {
+                       this.backgroundImage.destroy();
+                       this.backgroundImage = null;
+               }
+
+               if (this.graph.pageVisible) {
+                       var bounds = this.getBackgroundPageBounds();
+
+                       if (this.backgroundPageShape == null) {
+                               this.backgroundPageShape = this.createBackgroundPageShape(bounds);
+                               this.backgroundPageShape.scale = 1;
+                               this.backgroundPageShape.isShadow = true;
+                               this.backgroundPageShape.dialect = mxConstants.DIALECT_STRICTHTML;
+                               this.backgroundPageShape.init(this.graph.container);
+                               // Required for the browser to render the background page in correct order
+                               this.graph.container.firstChild.style.position = 'absolute';
+                               this.graph.container.insertBefore(this.backgroundPageShape.node, this.graph.container.firstChild);
+                               this.backgroundPageShape.redraw();
+
+                               this.backgroundPageShape.node.className = 'geBackgroundPage';
+                               this.backgroundPageShape.node.style.backgroundPosition = '-1px -1px';
+
+                               // Adds listener for double click handling on background
+                               mxEvent.addListener(this.backgroundPageShape.node, 'dblclick',
+                                       mxUtils.bind(this, function(evt) {
+                                               this.graph.dblClick(evt);
+                                       })
+                               );
+
+                               // Adds basic listeners for graph event dispatching outside of the
+                               // container and finishing the handling of a single gesture
+                               mxEvent.addGestureListeners(this.backgroundPageShape.node,
+                                       mxUtils.bind(this, function(evt) {
+                                               this.graph.fireMouseEvent(mxEvent.MOUSE_DOWN, new mxMouseEvent(evt));
+                                       }),
+                                       mxUtils.bind(this, function(evt) {
+                                               // Hides the tooltip if mouse is outside container
+                                               if (this.graph.tooltipHandler != null &&
+                                                       this.graph.tooltipHandler.isHideOnHover()) {
+                                                       this.graph.tooltipHandler.hide();
+                                               }
+
+                                               if (this.graph.isMouseDown &&
+                                                       !mxEvent.isConsumed(evt)) {
+                                                       this.graph.fireMouseEvent(mxEvent.MOUSE_MOVE,
+                                                               new mxMouseEvent(evt));
+                                               }
+                                       }),
+                                       mxUtils.bind(this, function(evt) {
+                                               this.graph.fireMouseEvent(mxEvent.MOUSE_UP,
+                                                       new mxMouseEvent(evt));
+                                       }));
+                       } else {
+                               this.backgroundPageShape.scale = 1;
+                               this.backgroundPageShape.bounds = bounds;
+                               this.backgroundPageShape.redraw();
+                       }
+
+                       this.backgroundPageShape.node.style.backgroundImage = (this.graph.isGridEnabled()) ?
+                               'url(' + editor.gridImage + ')' : 'none';
+               } else if (this.backgroundPageShape != null) {
+                       this.backgroundPageShape.destroy();
+                       this.backgroundPageShape = null;
+               }
+       };
+
+       // Draws page breaks only within the page
+       mxGraph.prototype.updatePageBreaks = function(visible, width, height) {
+               var scale = this.view.scale;
+               var tr = this.view.translate;
+               var fmt = this.pageFormat;
+               var ps = scale * this.pageScale;
+
+               var bounds2 = this.view.getBackgroundPageBounds();
+
+               width = bounds2.width;
+               height = bounds2.height;
+               var bounds = new mxRectangle(scale * tr.x, scale * tr.y,
+                       fmt.width * ps, fmt.height * ps);
+
+               // Does not show page breaks if the scale is too small
+               visible = visible && Math.min(bounds.width, bounds.height) > this.minPageBreakDist;
+
+               var horizontalCount = (visible) ? Math.ceil(width / bounds.width) - 1 : 0;
+               var verticalCount = (visible) ? Math.ceil(height / bounds.height) - 1 : 0;
+               var right = bounds2.x + width;
+               var bottom = bounds2.y + height;
+
+               if (this.horizontalPageBreaks == null && horizontalCount > 0) {
+                       this.horizontalPageBreaks = [];
+               }
+
+               if (this.horizontalPageBreaks != null) {
+                       for (var i = 0; i <= horizontalCount; i++) {
+                               var pts = [new mxPoint(bounds2.x + (i + 1) * bounds.width, bounds2.y),
+                                       new mxPoint(bounds2.x + (i + 1) * bounds.width, bottom)
+                               ];
+
+                               if (this.horizontalPageBreaks[i] != null) {
+                                       this.horizontalPageBreaks[i].scale = 1;
+                                       this.horizontalPageBreaks[i].points = pts;
+                                       this.horizontalPageBreaks[i].redraw();
+                               } else {
+                                       var pageBreak = new mxPolyline(pts, this.pageBreakColor, this.scale);
+                                       pageBreak.dialect = this.dialect;
+                                       pageBreak.isDashed = this.pageBreakDashed;
+                                       pageBreak.addPipe = false;
+                                       pageBreak.scale = scale;
+                                       pageBreak.init(this.view.backgroundPane);
+                                       pageBreak.redraw();
+
+                                       this.horizontalPageBreaks[i] = pageBreak;
+                               }
+                       }
+
+                       for (var i = horizontalCount; i < this.horizontalPageBreaks.length; i++) {
+                               this.horizontalPageBreaks[i].destroy();
+                       }
+
+                       this.horizontalPageBreaks.splice(horizontalCount, this.horizontalPageBreaks.length - horizontalCount);
+               }
+
+               if (this.verticalPageBreaks == null && verticalCount > 0) {
+                       this.verticalPageBreaks = [];
+               }
+
+               if (this.verticalPageBreaks != null) {
+                       for (var i = 0; i <= verticalCount; i++) {
+                               var pts = [new mxPoint(bounds2.x, bounds2.y + (i + 1) * bounds.height),
+                                       new mxPoint(right, bounds2.y + (i + 1) * bounds.height)
+                               ];
+
+                               if (this.verticalPageBreaks[i] != null) {
+                                       this.verticalPageBreaks[i].scale = 1; //scale;
+                                       this.verticalPageBreaks[i].points = pts;
+                                       this.verticalPageBreaks[i].redraw();
+                               } else {
+                                       var pageBreak = new mxPolyline(pts, this.pageBreakColor, scale);
+                                       pageBreak.dialect = this.dialect;
+                                       pageBreak.isDashed = this.pageBreakDashed;
+                                       pageBreak.addPipe = false;
+                                       pageBreak.scale = scale;
+                                       pageBreak.init(this.view.backgroundPane);
+                                       pageBreak.redraw();
+
+                                       this.verticalPageBreaks[i] = pageBreak;
+                               }
+                       }
+
+                       for (var i = verticalCount; i < this.verticalPageBreaks.length; i++) {
+                               this.verticalPageBreaks[i].destroy();
+                       }
+
+                       this.verticalPageBreaks.splice(verticalCount, this.verticalPageBreaks.length - verticalCount);
+               }
+       };
+
+       // Enables snapping to off-grid terminals for edge waypoints
+       mxEdgeHandler.prototype.snapToTerminals = true;
+
+       // Enables guides
+       mxGraphHandler.prototype.guidesEnabled = true;
+
+       // Disables removing relative children from parents
+       var mxGraphHandlerShouldRemoveCellsFromParent = mxGraphHandler.prototype.shouldRemoveCellsFromParent;
+       mxGraphHandler.prototype.shouldRemoveCellsFromParent = function(parent, cells, evt) {
+               for (var i = 0; i < cells.length; i++) {
+                       if (this.graph.getModel().isVertex(cells[i])) {
+                               var geo = this.graph.getCellGeometry(cells[i]);
+
+                               if (geo != null && geo.relative) {
+                                       return false;
+                               }
+                       }
+               }
+
+               return mxGraphHandlerShouldRemoveCellsFromParent.apply(this, arguments);
+       };
+
+       // Alt-move disables guides
+       mxGuide.prototype.isEnabledForEvent = function(evt) {
+               return !mxEvent.isAltDown(evt);
+       };
+
+       // Consumes click events for disabled menu items
+       mxPopupMenuAddItem = mxPopupMenu.prototype.addItem;
+       mxPopupMenu.prototype.addItem = function(title, image, funct, parent, iconCls, enabled) {
+               var result = mxPopupMenuAddItem.apply(this, arguments);
+
+               if (enabled != null && !enabled) {
+                       mxEvent.addListener(result, 'mousedown', function(evt) {
+                               mxEvent.consume(evt);
+                       });
+               }
+
+               return result;
+       };
+
+       // Selects descendants before children selection mode
+       var graphHandlerGetInitialCellForEvent = mxGraphHandler.prototype.getInitialCellForEvent;
+       mxGraphHandler.prototype.getInitialCellForEvent = function(me) {
+               var model = this.graph.getModel();
+               var psel = model.getParent(this.graph.getSelectionCell());
+               var cell = graphHandlerGetInitialCellForEvent.apply(this, arguments);
+               var parent = model.getParent(cell);
+
+               if (psel == null || (psel != cell && psel != parent)) {
+                       while (!this.graph.isCellSelected(cell) && !this.graph.isCellSelected(parent) &&
+                               model.isVertex(parent) && !this.graph.isValidRoot(parent)) {
+                               cell = parent;
+                               parent = this.graph.getModel().getParent(cell);
+                       }
+               }
+
+               return cell;
+       };
+
+       // Selection is delayed to mouseup if child selected
+       var graphHandlerIsDelayedSelection = mxGraphHandler.prototype.isDelayedSelection;
+       mxGraphHandler.prototype.isDelayedSelection = function(cell) {
+               var result = graphHandlerIsDelayedSelection.apply(this, arguments);
+               var model = this.graph.getModel();
+               var psel = model.getParent(this.graph.getSelectionCell());
+               var parent = model.getParent(cell);
+
+               if (psel == null || (psel != cell && psel != parent)) {
+                       if (!this.graph.isCellSelected(cell) && model.isVertex(parent) && !this.graph.isValidRoot(parent)) {
+                               result = true;
+                       }
+               }
+
+               return result;
+       };
+
+       // Delayed selection of parent group
+       mxGraphHandler.prototype.selectDelayed = function(me) {
+               var cell = me.getCell();
+
+               if (cell == null) {
+                       cell = this.cell;
+               }
+
+               var model = this.graph.getModel();
+               var parent = model.getParent(cell);
+
+               while (this.graph.isCellSelected(cell) && model.isVertex(parent) && !this.graph.isValidRoot(parent)) {
+                       cell = parent;
+                       parent = model.getParent(cell);
+               }
+
+               this.graph.selectCellForEvent(cell, me.getEvent());
+       };
+
+       // Returns last selected ancestor
+       mxPanningHandler.prototype.getCellForPopupEvent = function(me) {
+               var cell = me.getCell();
+               var model = this.graph.getModel();
+               var parent = model.getParent(cell);
+
+               while (model.isVertex(parent) && !this.graph.isValidRoot(parent)) {
+                       if (this.graph.isCellSelected(parent)) {
+                               cell = parent;
+                       }
+
+                       parent = model.getParent(parent);
+               }
+
+               return cell;
+       };
+};
+
+/**
+ * Creates and returns a new undo manager.
+ */
+Editor.prototype.createUndoManager = function() {
+       var graph = this.graph;
+       var undoMgr = new mxUndoManager();
+
+       // Installs the command history
+       var listener = function(sender, evt) {
+               undoMgr.undoableEditHappened(evt.getProperty('edit'));
+       };
+
+       graph.getModel().addListener(mxEvent.UNDO, listener);
+       graph.getView().addListener(mxEvent.UNDO, listener);
+
+       // Keeps the selection in sync with the history
+       var undoHandler = function(sender, evt) {
+               var cand = graph.getSelectionCellsForChanges(evt.getProperty('edit').changes);
+               var cells = [];
+
+               for (var i = 1; i < cand.length; i++) {
+                       if (graph.view.getState(cand[i]) != null) {
+                               cells.push(cand[i]);
+                       }
+               }
+
+               graph.setSelectionCells(cells);
+       };
+
+       undoMgr.addListener(mxEvent.UNDO, undoHandler);
+       undoMgr.addListener(mxEvent.REDO, undoHandler);
+
+       return undoMgr;
+};
+
+/**
+ * Adds basic stencil set (no namespace).
+ */
+Editor.prototype.initStencilRegistry = function() {
+       // Loads default stencils
+       mxStencilRegistry.loadStencilSet(STENCIL_PATH + '/general.xml');
+};
+
+/**
+ * Overrides stencil registry for dynamic loading of stencils.
+ */
+(function() {
+       /**
+        * Maps from library names to an array of Javascript filenames,
+        * which are synchronously loaded. Currently only stencil files
+        * (.xml) and JS files (.js) are supported.
+        * IMPORTANT: For embedded diagrams to work entries must also
+        * be added in EmbedServlet.java.
+        */
+       mxStencilRegistry.libraries = {};
+
+       /**
+        * Stores all package names that have been dynamically loaded.
+        * Each package is only loaded once.
+        */
+       mxStencilRegistry.packages = [];
+
+       // Extends the default stencil registry to add dynamic loading
+       mxStencilRegistry.getStencil = function(name) {
+               var result = mxStencilRegistry.stencils[name];
+
+               if (result == null) {
+                       var basename = mxStencilRegistry.getBasenameForStencil(name);
+
+                       // Loads stencil files and tries again
+                       if (basename != null) {
+                               var libs = mxStencilRegistry.libraries[basename];
+
+                               if (libs != null) {
+                                       if (mxStencilRegistry.packages[basename] == null) {
+                                               mxStencilRegistry.packages[basename] = 1;
+
+                                               for (var i = 0; i < libs.length; i++) {
+                                                       var fname = libs[i];
+
+                                                       if (fname.toLowerCase().substring(fname.length - 4, fname.length) == '.xml') {
+                                                               mxStencilRegistry.loadStencilSet(fname, null);
+                                                       } else if (fname.toLowerCase().substring(fname.length - 3, fname.length) == '.js') {
+                                                               var req = mxUtils.load(fname);
+
+                                                               if (req != null) {
+                                                                       eval.call(window, req.getText());
+                                                               }
+                                                       } else {
+                                                               // FIXME: This does not yet work as the loading is triggered after
+                                                               // the shape was used in the graph, at which point the keys have
+                                                               // typically been translated in the calling method.
+                                                               //mxResources.add(fname);
+                                                       }
+                                               }
+                                       }
+                               } else {
+                                       mxStencilRegistry.loadStencilSet(STENCIL_PATH + '/' + basename + '.xml', null);
+                               }
+
+                               result = mxStencilRegistry.stencils[name];
+                       }
+               }
+
+               return result;
+       };
+
+       // Returns the basename for the given stencil or null if no file must be
+       // loaded to render the given stencil.
+       mxStencilRegistry.getBasenameForStencil = function(name) {
+               var parts = name.split('.');
+               var tmp = null;
+
+               if (parts.length > 0 && parts[0] == 'mxgraph') {
+                       tmp = parts[1];
+
+                       for (var i = 2; i < parts.length - 1; i++) {
+                               tmp += '/' + parts[i];
+                       }
+               }
+
+               return tmp;
+       };
+
+       // Loads the given stencil set
+       mxStencilRegistry.loadStencilSet = function(stencilFile, postStencilLoad, force) {
+               force = (force != null) ? force : false;
+
+               // Uses additional cache for detecting previous load attempts
+               var xmlDoc = mxStencilRegistry.packages[stencilFile];
+
+               if (force || xmlDoc == null) {
+                       var install = false;
+
+                       if (xmlDoc == null) {
+                               var req = mxUtils.load(stencilFile);
+                               xmlDoc = req.getXml();
+                               mxStencilRegistry.packages[stencilFile] = xmlDoc;
+                               install = true;
+                       }
+
+                       mxStencilRegistry.parseStencilSet(xmlDoc, postStencilLoad, install);
+               }
+       };
+
+       // Parses the given stencil set
+       mxStencilRegistry.parseStencilSet = function(xmlDocument, postStencilLoad, install) {
+               install = (install != null) ? install : true;
+               var root = xmlDocument.documentElement;
+               var shape = root.firstChild;
+               var packageName = '';
+               var name = root.getAttribute('name');
+
+               if (name != null) {
+                       packageName = name + '.';
+               }
+
+               while (shape != null) {
+                       if (shape.nodeType == mxConstants.NODETYPE_ELEMENT) {
+                               name = shape.getAttribute('name');
+
+                               if (name != null) {
+                                       packageName = packageName.toLowerCase();
+                                       var stencilName = name.replace(/ /g, "_");
+
+                                       if (install) {
+                                               mxStencilRegistry.addStencil(packageName + stencilName.toLowerCase(), new mxStencil(shape));
+                                       }
+
+                                       if (postStencilLoad != null) {
+                                               var w = shape.getAttribute('w');
+                                               var h = shape.getAttribute('h');
+
+                                               w = (w == null) ? 80 : parseInt(w, 10);
+                                               h = (h == null) ? 80 : parseInt(h, 10);
+
+                                               postStencilLoad(packageName, stencilName, name, w, h);
+                                       }
+                               }
+                       }
+
+                       shape = shape.nextSibling;
+               }
+       };
+})();
+
+/**
+ * Class for asynchronously opening a new window and loading a file at the same
+ * time. This acts as a bridge between the open dialog and the new editor.
+ */
+OpenFile = function(done) {
+       this.producer = null;
+       this.consumer = null;
+       this.done = done;
+};
+
+/**
+ * Registers the editor from the new window.
+ */
+OpenFile.prototype.setConsumer = function(value) {
+       this.consumer = value;
+       this.execute();
+};
+
+/**
+ * Sets the data from the loaded file.
+ */
+OpenFile.prototype.setData = function(value, filename) {
+       this.data = value;
+       this.filename = filename;
+       this.execute();
+};
+
+/**
+ * Displays an error message.
+ */
+OpenFile.prototype.error = function(msg) {
+       this.cancel();
+       mxUtils.alert(msg);
+};
+
+/**
+ * Consumes the data.
+ */
+OpenFile.prototype.execute = function() {
+       if (this.consumer != null && this.data != null) {
+               this.consumer(this.data, this.filename);
+               this.cancel();
+       }
+};
+
+/**
+ * Cancels the operation.
+ */
+OpenFile.prototype.cancel = function() {
+       if (this.done != null) {
+               this.done();
+       }
+};
index f68281a..4104913 100644 (file)
@@ -1 +1,1484 @@
-var _0x37a3=["\x65\x64\x69\x74\x6F\x72","\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x67\x65\x45\x64\x69\x74\x6F\x72","\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x42\x79\x49\x64","\x67\x72\x61\x70\x68","\x6F\x76\x65\x72\x66\x6C\x6F\x77","\x73\x74\x79\x6C\x65","\x68\x69\x64\x64\x65\x6E","\x73\x72\x63","\x73\x75\x62\x6D\x65\x6E\x75\x49\x6D\x61\x67\x65","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x63\x6F\x6E\x6E\x65\x63\x74\x49\x6D\x61\x67\x65","\x61\x63\x74\x69\x6F\x6E\x73","\x6D\x65\x6E\x75\x73","\x63\x72\x65\x61\x74\x65\x44\x69\x76\x73","\x72\x65\x66\x72\x65\x73\x68","\x63\x72\x65\x61\x74\x65\x55\x69","\x65\x76\x65\x6E\x74","\x69\x73\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x41\x6C\x6C\x6F\x77\x65\x64","\x69\x73\x45\x64\x69\x74\x69\x6E\x67","\x62\x69\x6E\x64","\x62\x6F\x64\x79","\x6F\x6E\x73\x65\x6C\x65\x63\x74\x73\x74\x61\x72\x74","\x6D\x65\x6E\x75\x62\x61\x72\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x6F\x6E\x6D\x6F\x75\x73\x65\x64\x6F\x77\x6E","\x74\x6F\x6F\x6C\x62\x61\x72\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x64\x69\x61\x67\x72\x61\x6D\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x73\x69\x64\x65\x62\x61\x72\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x66\x6F\x6F\x74\x65\x72\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x49\x53\x5F\x49\x45","\x64\x6F\x63\x75\x6D\x65\x6E\x74\x4D\x6F\x64\x65","\x75\x6E\x64\x65\x66\x69\x6E\x65\x64","\x63\x6F\x6E\x74\x65\x78\x74\x6D\x65\x6E\x75","\x61\x64\x64\x4C\x69\x73\x74\x65\x6E\x65\x72","\x6F\x6E\x63\x6F\x6E\x74\x65\x78\x74\x6D\x65\x6E\x75","\x69\x6E\x69\x74","\x74\x61\x62\x69\x6E\x64\x65\x78","\x30","\x73\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x63\x75\x72\x73\x6F\x72","\x64\x65\x66\x61\x75\x6C\x74","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x75\x72\x6C\x28","\x67\x72\x69\x64\x49\x6D\x61\x67\x65","\x29","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x2D\x31\x70\x78\x20\x2D\x31\x70\x78","\x66\x6F\x63\x75\x73","\x66\x69\x72\x65\x4D\x6F\x75\x73\x65\x45\x76\x65\x6E\x74","\x4D\x4F\x55\x53\x45\x5F\x44\x4F\x57\x4E","\x61\x70\x70\x6C\x79","\x6D\x75\x6C\x74\x69\x70\x6C\x69\x63\x69\x74\x69\x65\x73","\x73\x74\x61\x72\x74","\x66\x69\x6E\x61\x6C\x6C\x79","\x65\x6E\x64","\x6E","\x63\x72\x65\x61\x74\x65\x4D\x75\x6C\x74\x69\x70\x6C\x69\x63\x69\x74\x69\x65\x73","\x61\x6E\x73\x77\x65\x72","\x68\x61\x6E\x67\x75\x70","\x64\x69\x61\x6C","\x65\x78\x74\x5F\x64\x69\x61\x6C","\x71\x75\x65\x75\x65","\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C","\x63\x61\x6C\x6C\x62\x61\x63\x6B","\x73\x65\x74","\x6D\x61\x74\x68","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64","\x70\x6C\x61\x79\x62\x61\x63\x6B","\x6D\x65\x6E\x75","\x73\x61\x79\x64\x69\x67\x69\x74\x73","\x73\x61\x79\x6E\x75\x6D\x62\x65\x72","\x73\x61\x79\x70\x68\x6F\x6E\x65\x74\x69\x63","\x74\x74\x73","\x69\x73\x70\x65\x65\x63\x68\x74\x74\x73","\x67\x65\x74\x64\x69\x67\x69\x74\x73","\x72\x65\x63\x6F\x72\x64","\x64\x61\x74\x61\x62\x61\x73\x65","\x69\x73\x70\x65\x65\x63\x68\x61\x73\x72","\x67\x6F\x74\x6F\x63","\x67\x6F\x74\x6F\x69\x66","\x67\x6F\x74\x6F\x69\x66\x74\x69\x6D\x65","\x67\x6F\x74\x6F\x69\x66\x6D\x75\x6C\x74\x69\x74\x69\x6D\x65","\x76\x73\x77\x69\x74\x63\x68","\x71\x75\x65\x75\x65\x6C\x6F\x67","\x67\x6F\x61\x6C","\x6E\x6F\x6F\x70","\x73\x79\x73\x74\x65\x6D","\x61\x67\x69","\x73\x75\x62\x70\x72\x6F\x6A\x65\x63\x74","\x63\x75\x73\x74\x6F\x6D\x5F\x61\x70\x70","\x64\x62\x6C\x43\x6C\x69\x63\x6B","\x63\x65\x6C\x6C","\x66\x69\x72\x65\x45\x76\x65\x6E\x74","\x69\x73\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x43\x6F\x6E\x73\x75\x6D\x65\x64","\x69\x73\x45\x64\x67\x65","\x67\x65\x74\x4D\x6F\x64\x65\x6C","\x74\x61\x67\x4E\x61\x6D\x65","\x76\x61\x6C\x75\x65","\x73\x6F\x75\x72\x63\x65","\x69\x6E\x64\x65\x78\x4F\x66","\x73\x74\x61\x72\x74\x45\x64\x69\x74\x69\x6E\x67\x41\x74\x43\x65\x6C\x6C","\x69\x73\x56\x65\x72\x74\x65\x78","\x6C\x6F\x67","\x73\x68\x6F\x77\x44\x69\x61\x6C\x6F\x67","\x63\x6F\x6E\x73\x75\x6D\x65","\x61\x75\x74\x6F\x45\x78\x70\x61\x6E\x64","\x70\x61\x6E\x6E\x69\x6E\x67\x48\x61\x6E\x64\x6C\x65\x72","\x66\x61\x63\x74\x6F\x72\x79\x4D\x65\x74\x68\x6F\x64","\x63\x72\x65\x61\x74\x65\x50\x6F\x70\x75\x70\x4D\x65\x6E\x75","\x6F\x75\x74\x6C\x69\x6E\x65\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x6F\x75\x74\x6C\x69\x6E\x65","\x68\x69\x64\x65\x4D\x65\x6E\x75","\x61\x64\x64\x47\x65\x73\x74\x75\x72\x65\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x49\x53\x5F\x54\x4F\x55\x43\x48","\x67\x65\x73\x74\x75\x72\x65\x63\x68\x61\x6E\x67\x65","\x74\x72\x61\x6E\x73\x66\x6F\x72\x6D","\x73\x63\x61\x6C\x65\x28","\x73\x63\x61\x6C\x65","\x67\x65\x74\x44\x72\x61\x77\x50\x61\x6E\x65","\x76\x69\x65\x77","\x76\x69\x73\x69\x62\x69\x6C\x69\x74\x79","\x67\x65\x74\x4F\x76\x65\x72\x6C\x61\x79\x50\x61\x6E\x65","\x67\x65\x73\x74\x75\x72\x65\x65\x6E\x64","\x72\x65\x6D\x6F\x76\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x7A\x6F\x6F\x6D\x54\x6F\x43\x65\x6E\x74\x65\x72","\x7A\x6F\x6F\x6D","\x76\x69\x73\x69\x62\x6C\x65","\x63\x72\x65\x61\x74\x65\x4B\x65\x79\x48\x61\x6E\x64\x6C\x65\x72","\x67\x65\x74\x4B\x65\x79\x48\x61\x6E\x64\x6C\x65\x72","\x72\x65\x73\x69\x7A\x65","\x73\x69\x7A\x65\x44\x69\x64\x43\x68\x61\x6E\x67\x65","\x75\x70\x64\x61\x74\x65","\x6F\x70\x65\x6E","\x73\x70\x6C\x69\x74\x53\x69\x7A\x65","\x6D\x65\x6E\x75\x62\x61\x72\x48\x65\x69\x67\x68\x74","\x74\x6F\x6F\x6C\x62\x61\x72\x48\x65\x69\x67\x68\x74","\x66\x6F\x6F\x74\x65\x72\x48\x65\x69\x67\x68\x74","\x68\x73\x70\x6C\x69\x74\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x76\x73\x70\x6C\x69\x74\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x61\x64\x64\x55\x6E\x64\x6F\x4C\x69\x73\x74\x65\x6E\x65\x72","\x61\x64\x64\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x4C\x69\x73\x74\x65\x6E\x65\x72","\x70\x61\x73\x74\x65","\x67\x65\x74","\x69\x73\x45\x6D\x70\x74\x79","\x73\x65\x74\x45\x6E\x61\x62\x6C\x65\x64","\x63\x75\x74","\x63\x6F\x70\x79","\x6F\x70\x65\x6E\x65\x72","\x6F\x70\x65\x6E\x46\x69\x6C\x65","\x70\x61\x72\x73\x65\x58\x6D\x6C","\x64\x6F\x63\x75\x6D\x65\x6E\x74\x45\x6C\x65\x6D\x65\x6E\x74","\x73\x65\x74\x47\x72\x61\x70\x68\x58\x6D\x6C","\x6D\x6F\x64\x69\x66\x69\x65\x64","\x63\x6C\x65\x61\x72","\x75\x6E\x64\x6F\x4D\x61\x6E\x61\x67\x65\x72","\x66\x69\x6C\x65\x6E\x61\x6D\x65","\x69\x6E\x76\x61\x6C\x69\x64\x4F\x72\x4D\x69\x73\x73\x69\x6E\x67\x46\x69\x6C\x65","\x3A\x20","\x6D\x65\x73\x73\x61\x67\x65","\x61\x6C\x65\x72\x74","\x73\x65\x74\x43\x6F\x6E\x73\x75\x6D\x65\x72","\x6F\x70\x65\x6E\x53\x74\x72\x69\x6E\x67","\x64\x61\x74\x61","\x6E\x65\x77","\x67\x65\x74\x47\x72\x61\x70\x68\x58\x6D\x6C","\x67\x65\x74\x50\x72\x65\x74\x74\x79\x58\x6D\x6C","\x67\x65\x74\x49\x74\x65\x6D","\x72\x65\x70\x6C\x61\x63\x65","\x63\x6F\x6E\x66\x69\x72\x6D","\x73\x65\x74\x49\x74\x65\x6D","\x73\x61\x76\x65\x64","\x20","\x73\x65\x74\x53\x74\x61\x74\x75\x73","\x6C\x65\x6E\x67\x74\x68","\x50\x4F\x53\x54","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2F\x78\x2D\x77\x77\x77\x2D\x66\x6F\x72\x6D\x2D\x75\x72\x6C\x65\x6E\x63\x6F\x64\x65\x64","\x73\x65\x74\x52\x65\x71\x75\x65\x73\x74\x48\x65\x61\x64\x65\x72","\x41\x75\x74\x68\x6F\x72\x69\x7A\x61\x74\x69\x6F\x6E","\x42\x65\x61\x72\x65\x72\x20","\x74\x6F\x6B\x65\x6E","\x6F\x6E\x6C\x6F\x61\x64","\x72\x65\x61\x64\x79\x53\x74\x61\x74\x65","\x73\x74\x61\x74\x75\x73","\x50\x72\x6F\x6A\x65\x63\x74\x20","\x6E\x61\x6D\x65","\x72\x65\x73\x70\x6F\x6E\x73\x65","\x70\x61\x72\x73\x65","\x20\x69\x73\x20\x6F\x70\x65\x6E\x69\x6E\x67\x20\x69\x6E\x20\x6E\x65\x77\x20\x77\x69\x6E\x64\x6F\x77\x21","\x73\x71\x75\x61\x72\x65\x2F\x70\x72\x6F\x6A\x65\x63\x74\x2F","\x69\x64","\x5F\x62\x6C\x61\x6E\x6B","\x45\x72\x72\x6F\x72\x20\x63\x72\x65\x61\x74\x69\x6E\x67\x20\x70\x72\x6F\x6A\x65\x63\x74\x3A\x20","\x65\x72\x72\x6F\x72\x73","\x6F\x6E\x65\x72\x72\x6F\x72","\x73\x74\x61\x74\x75\x73\x54\x65\x78\x74","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x3D\x70\x72\x6F\x6A\x65\x63\x74\x5F\x6E\x65\x77\x26\x6E\x61\x6D\x65\x3D","\x73\x65\x6E\x64","\x64\x72\x61\x77\x69\x6E\x67\x54\x6F\x6F\x4C\x61\x72\x67\x65","\x70\x6F\x70\x75\x70","\x45\x72\x72\x6F\x72\x20\x63\x72\x65\x61\x74\x69\x6E\x67\x20\x70\x72\x6F\x6A\x65\x63\x74","\x73\x61\x76\x65","\x50\x55\x54","\x55\x70\x64\x61\x74\x65\x64\x20\x61\x74\x20","\x75\x70\x64\x61\x74\x65\x64\x41\x74","\x20\x28","\x45\x72\x72\x6F\x72\x20\x73\x61\x76\x69\x6E\x67\x20\x70\x72\x6F\x6A\x65\x63\x74\x3A\x20","\x70\x72\x65\x70\x72\x6F\x64\x75\x63\x74\x69\x6F\x6E\x3D","\x45\x72\x72\x6F\x72\x20\x73\x61\x76\x69\x6E\x67\x20\x66\x69\x6C\x65","\x73\x61\x76\x65\x41\x73","\x45\x72\x72\x6F\x72\x20\x63\x6C\x6F\x6E\x69\x6E\x67\x20\x70\x72\x6F\x6A\x65\x63\x74\x3A\x20","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x3D\x70\x72\x6F\x6A\x65\x63\x74\x5F\x63\x6C\x6F\x6E\x65\x64\x26\x6E\x61\x6D\x65\x3D","\x26\x70\x72\x65\x70\x72\x6F\x64\x75\x63\x74\x69\x6F\x6E\x3D","\x26\x70\x72\x6F\x64\x75\x63\x74\x69\x6F\x6E\x3D","\x76\x61\x6C\x69\x64\x61\x74\x65","\x67\x65\x74\x52\x6F\x6F\x74","\x6D\x6F\x64\x65\x6C","\x67\x65\x74\x43\x68\x69\x6C\x64\x43\x6F\x75\x6E\x74","\x67\x65\x74\x43\x68\x69\x6C\x64\x41\x74","\x69\x73\x56\x61\x6C\x69\x64\x52\x6F\x6F\x74","\x3C\x62\x72\x3E","\x73\x65\x74\x43\x65\x6C\x6C\x57\x61\x72\x6E\x69\x6E\x67","","\x76\x61\x6C\x69\x64\x61\x74\x65\x42\x6C\x6F\x63\x6B","\x4F\x6E\x6C\x79\x20\x6F\x6E\x65\x20\x53\x74\x61\x72\x74\x20\x62\x6C\x6F\x63\x6B\x20\x69\x73\x20\x61\x6C\x6C\x6F\x77\x65\x64","\x0A","\x4F\x6E\x6C\x79\x20\x6F\x6E\x65\x20\x46\x69\x6E\x61\x6C\x6C\x79\x20\x62\x6C\x6F\x63\x6B\x20\x69\x73\x20\x61\x6C\x6C\x6F\x77\x65\x64","\x66\x69\x6C\x65\x5F\x69\x64","\x67\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x6E\x6F\x41\x75\x64\x69\x6F\x53\x65\x6C\x65\x63\x74\x65\x64","\x76\x61\x72\x69\x61\x62\x6C\x65\x5F\x69\x64","\x6E\x6F\x56\x61\x72\x69\x61\x62\x6C\x65\x53\x65\x6C\x65\x63\x74\x65\x64","\x76\x61\x72\x69\x61\x62\x6C\x65","\x6F\x64\x62\x63\x5F\x69\x64","\x6E\x6F\x44\x61\x74\x61\x62\x61\x73\x65\x53\x65\x6C\x65\x63\x74\x65\x64","\x65\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x6E\x6F\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E\x53\x65\x6C\x65\x63\x74\x65\x64","\x63\x6F\x6D\x6D\x61\x6E\x64","\x6E\x6F\x43\x6F\x6D\x6D\x61\x6E\x64\x53\x65\x6C\x65\x63\x74\x65\x64","\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E","\x6E\x6F\x43\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x53\x65\x6C\x65\x63\x74\x65\x64","\x64\x69\x67\x69\x74\x73","\x6E\x6F\x44\x69\x67\x69\x74\x73\x53\x65\x6C\x65\x63\x74\x65\x64","\x6E\x75\x6D\x62\x65\x72","\x6E\x6F\x4E\x75\x6D\x62\x65\x72\x53\x65\x6C\x65\x63\x74\x65\x64","\x74\x65\x78\x74","\x6E\x6F\x54\x65\x78\x74\x53\x65\x6C\x65\x63\x74\x65\x64","\x6E\x6F\x46\x69\x6C\x65\x53\x65\x6C\x65\x63\x74\x65\x64","\x67\x6F\x61\x6C\x6E\x61\x6D\x65","\x6E\x6F\x47\x6F\x61\x6C\x53\x65\x6C\x65\x63\x74\x65\x64","\x70\x68\x6F\x6E\x65","\x6E\x6F\x49\x64\x65\x6E\x74\x69\x66\x69\x65\x72\x53\x65\x6C\x65\x63\x74\x65\x64","\x73\x69\x70\x5F\x69\x64","\x71\x75\x65\x75\x65\x5F\x69\x64","\x2D\x31","\x6E\x6F\x51\x75\x65\x75\x65\x53\x65\x6C\x65\x63\x74\x65\x64","\x6C\x69\x73\x74\x5F\x69\x64","\x6E\x6F\x4C\x69\x73\x74\x53\x65\x6C\x65\x63\x74\x65\x64","\x69\x6E\x74\x65\x72\x76\x61\x6C\x5F\x69\x64","\x6E\x6F\x49\x6E\x74\x65\x72\x76\x61\x6C\x53\x65\x6C\x65\x63\x74\x65\x64","\x6D\x61\x69\x6C\x62\x6F\x78","\x6E\x6F\x42\x6F\x78\x4E\x75\x6D\x62\x65\x72\x53\x65\x6C\x65\x63\x74\x65\x64","\x70\x72\x6F\x6A\x65\x63\x74\x5F\x69\x64","\x6E\x6F\x50\x72\x6F\x6A\x65\x63\x74\x53\x65\x6C\x65\x63\x74\x65\x64","\x6B\x65\x79","\x6E\x6F\x4B\x65\x79\x53\x65\x6C\x65\x63\x74\x65\x64","\x6E\x6F\x64\x65\x4E\x61\x6D\x65","\x67\x65\x74\x49\x64","\x67\x65\x74\x43\x65\x6C\x6C","\x67\x65\x74\x56\x61\x6C\x75\x65","\x74\x65\x73\x74","\x6E\x75\x6D\x62\x65\x72\x4F\x72\x49\x6E\x76\x61\x6C\x69\x64\x4F\x72\x54\x69\x6D\x65\x6F\x75\x74","\x2C","\x73\x70\x6C\x69\x74","\x6E\x75\x6D\x62\x65\x72\x4F\x72\x41\x6C\x6C","\x66\x6F\x72\x45\x61\x63\x68","\x6E\x75\x6D\x62\x65\x72\x4F\x72\x49\x6E\x76\x61\x6C\x69\x64\x4F\x72\x44\x65\x66\x61\x75\x6C\x74","\x74\x72\x75\x65\x4F\x72\x46\x61\x6C\x73\x65","\x69\x73\x43\x65\x6C\x6C\x43\x6F\x6C\x6C\x61\x70\x73\x65\x64","\x63\x6F\x6E\x74\x61\x69\x6E\x73\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E\x45\x72\x72\x6F\x72\x73\x52\x65\x73\x6F\x75\x72\x63\x65","\x67\x65\x74\x54\x65\x72\x6D\x69\x6E\x61\x6C","\x67\x65\x74\x45\x64\x67\x65\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E\x45\x72\x72\x6F\x72","\x67\x65\x74\x43\x65\x6C\x6C\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E\x45\x72\x72\x6F\x72","\x76\x61\x6C\x69\x64\x61\x74\x65\x43\x65\x6C\x6C","\x67\x65\x74\x50\x61\x72\x65\x6E\x74","\x67\x65\x74\x44\x65\x66\x61\x75\x6C\x74\x50\x61\x72\x65\x6E\x74","\x63\x68\x69\x6C\x64\x72\x65\x6E","\x70\x75\x62\x6C\x69\x73\x68","\x50\x75\x62\x6C\x69\x73\x68\x65\x64\x20\x61\x74\x20","\x45\x72\x72\x6F\x72\x20\x70\x75\x62\x6C\x69\x73\x68\x69\x6E\x67\x20\x66\x69\x6C\x65","\x45\x72\x72\x6F\x72\x20\x70\x75\x62\x6C\x69\x73\x68\x69\x6E\x67\x20\x70\x72\x6F\x6A\x65\x63\x74\x3A\x20","\x56\x61\x72\x69\x61\x62\x6C\x65\x20\x63\x72\x65\x61\x74\x65\x64\x20\x61\x74\x20","\x63\x72\x65\x61\x74\x65\x64\x41\x74","\x45\x72\x72\x6F\x72\x20\x63\x72\x65\x61\x74\x69\x6E\x67\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x3A\x20","\x6E\x61\x6D\x65\x3D","\x45\x72\x72\x6F\x72\x20\x63\x72\x65\x61\x74\x69\x6E\x67\x20\x76\x61\x72\x69\x61\x62\x6C\x65","\x67\x65\x74\x55\x72\x6C","\x70\x61\x74\x68\x6E\x61\x6D\x65","\x6C\x6F\x63\x61\x74\x69\x6F\x6E","\x3F","\x26","\x3D","\x75\x6E\x64\x6F","\x72\x65\x64\x6F","\x63\x61\x6E\x55\x6E\x64\x6F","\x63\x61\x6E\x52\x65\x64\x6F","\x69\x73\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x45\x6D\x70\x74\x79","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73","\x64\x65\x6C\x65\x74\x65","\x64\x75\x70\x6C\x69\x63\x61\x74\x65","\x62\x6F\x6C\x64","\x69\x74\x61\x6C\x69\x63","\x75\x6E\x64\x65\x72\x6C\x69\x6E\x65","\x74\x6F\x46\x72\x6F\x6E\x74","\x74\x6F\x42\x61\x63\x6B","\x64\x61\x73\x68\x65\x64","\x72\x6F\x75\x6E\x64\x65\x64","\x73\x68\x61\x64\x6F\x77","\x74\x69\x6C\x74","\x61\x75\x74\x6F\x73\x69\x7A\x65","\x63\x75\x72\x76\x65\x64","\x72\x6F\x74\x61\x74\x69\x6F\x6E","\x77\x6F\x72\x64\x57\x72\x61\x70","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x6F\x75\x6E\x74","\x67\x72\x6F\x75\x70","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x75\x6E\x67\x72\x6F\x75\x70","\x72\x65\x6D\x6F\x76\x65\x46\x72\x6F\x6D\x47\x72\x6F\x75\x70","\x66\x6F\x6E\x74\x46\x61\x6D\x69\x6C\x79","\x66\x6F\x6E\x74\x53\x69\x7A\x65","\x61\x6C\x69\x67\x6E\x6D\x65\x6E\x74","\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x66\x6F\x72\x6D\x61\x74","\x61\x72\x72\x61\x6E\x67\x65","\x6C\x69\x6E\x65\x77\x69\x64\x74\x68","\x73\x70\x61\x63\x69\x6E\x67","\x6C\x69\x6E\x65","\x6C\x69\x6E\x65\x65\x6E\x64","\x6C\x69\x6E\x65\x73\x74\x61\x72\x74","\x73\x65\x74\x41\x73\x44\x65\x66\x61\x75\x6C\x74\x45\x64\x67\x65","\x61\x6C\x69\x67\x6E","\x67\x65\x74\x53\x74\x61\x74\x65","\x69\x73\x4C\x6F\x6F\x70","\x64\x69\x72\x65\x63\x74\x69\x6F\x6E","\x66\x6F\x6C\x64\x69\x6E\x67\x45\x6E\x61\x62\x6C\x65\x64","\x63\x75\x72\x72\x65\x6E\x74\x52\x6F\x6F\x74","\x6E\x61\x76\x69\x67\x61\x74\x69\x6F\x6E","\x68\x6F\x6D\x65","\x65\x78\x69\x74\x47\x72\x6F\x75\x70","\x65\x6E\x74\x65\x72\x47\x72\x6F\x75\x70","\x65\x78\x70\x61\x6E\x64","\x63\x6F\x6C\x6C\x61\x70\x73\x65","\x65\x64\x69\x74\x4C\x69\x6E\x6B","\x67\x65\x74\x4C\x69\x6E\x6B\x46\x6F\x72\x43\x65\x6C\x6C","\x6F\x70\x65\x6E\x4C\x69\x6E\x6B","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x4D\x6F\x64\x65\x6C","\x63\x6C\x69\x65\x6E\x74\x57\x69\x64\x74\x68","\x63\x6C\x69\x65\x6E\x74\x48\x65\x69\x67\x68\x74","\x6D\x69\x6E","\x6D\x61\x78","\x68\x65\x69\x67\x68\x74","\x70\x78","\x74\x6F\x70","\x49\x53\x5F\x51\x55\x49\x52\x4B\x53","\x77\x69\x64\x74\x68","\x62\x6F\x74\x74\x6F\x6D","\x6C\x65\x66\x74","\x64\x69\x73\x70\x6C\x61\x79","\x6E\x6F\x6E\x65","\x68\x73\x70\x6C\x69\x74","\x76\x73\x70\x6C\x69\x74","\x67\x65\x4D\x65\x6E\x75\x62\x61\x72\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x63\x72\x65\x61\x74\x65\x44\x69\x76","\x67\x65\x54\x6F\x6F\x6C\x62\x61\x72\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x67\x65\x53\x69\x64\x65\x62\x61\x72\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x67\x65\x4F\x75\x74\x6C\x69\x6E\x65\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x67\x65\x44\x69\x61\x67\x72\x61\x6D\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x67\x65\x46\x6F\x6F\x74\x65\x72\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x67\x65\x48\x73\x70\x6C\x69\x74","\x67\x65\x56\x73\x70\x6C\x69\x74","\x30\x70\x78","\x72\x69\x67\x68\x74","\x6D\x65\x6E\x75\x62\x61\x72","\x67\x65\x4D\x65\x6E\x75\x62\x61\x72","\x63\x72\x65\x61\x74\x65\x4D\x65\x6E\x75\x62\x61\x72","\x61\x70\x70\x65\x6E\x64\x43\x68\x69\x6C\x64","\x74\x6F\x6F\x6C\x62\x61\x72","\x67\x65\x54\x6F\x6F\x6C\x62\x61\x72","\x63\x72\x65\x61\x74\x65\x54\x6F\x6F\x6C\x62\x61\x72","\x73\x69\x64\x65\x62\x61\x72","\x63\x72\x65\x61\x74\x65\x53\x69\x64\x65\x62\x61\x72","\x63\x72\x65\x61\x74\x65\x46\x6F\x6F\x74\x65\x72","\x73\x74\x61\x74\x75\x73\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x63\x72\x65\x61\x74\x65\x53\x74\x61\x74\x75\x73\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x73\x74\x61\x74\x75\x73\x43\x68\x61\x6E\x67\x65\x64","\x67\x65\x74\x53\x74\x61\x74\x75\x73","\x73\x65\x74\x53\x74\x61\x74\x75\x73\x54\x65\x78\x74","\x61\x64\x64\x53\x70\x6C\x69\x74\x48\x61\x6E\x64\x6C\x65\x72","\x61","\x63\x72\x65\x61\x74\x65\x45\x6C\x65\x6D\x65\x6E\x74","\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65","\x67\x65\x49\x74\x65\x6D\x20\x67\x65\x53\x74\x61\x74\x75\x73","\x69\x6E\x6E\x65\x72\x48\x54\x4D\x4C","\x67\x65\x46\x6F\x6F\x74\x65\x72","\x64\x69\x76","\x63\x72\x65\x61\x74\x65\x48\x65\x61\x64\x65\x72","\x63\x72\x65\x61\x74\x65\x46\x6F\x72\x6D","\x66\x6F\x72\x6D","\x67\x65\x74\x43\x6C\x69\x65\x6E\x74\x58","\x67\x65\x74\x43\x6C\x69\x65\x6E\x74\x59","\x78","\x79","\x6D\x6F\x75\x73\x65\x6D\x6F\x76\x65","\x74\x6F\x75\x63\x68\x6D\x6F\x76\x65","\x6D\x6F\x75\x73\x65\x75\x70","\x74\x6F\x75\x63\x68\x65\x6E\x64","\x68\x69\x64\x65\x44\x69\x61\x6C\x6F\x67","\x64\x69\x61\x6C\x6F\x67","\x49\x53\x5F\x56\x4D\x4C","\x63\x6C\x6F\x73\x65","\x73\x61\x76\x65\x46\x69\x6C\x65","\x67\x65\x74\x4F\x72\x43\x72\x65\x61\x74\x65\x46\x69\x6C\x65\x6E\x61\x6D\x65","\x70\x75\x62\x6C\x69\x73\x68\x46\x69\x6C\x65","\x65\x78\x65\x63\x75\x74\x65\x4C\x61\x79\x6F\x75\x74","\x61\x6E\x69\x6D\x61\x74\x65","\x62\x65\x67\x69\x6E\x55\x70\x64\x61\x74\x65","\x65\x78\x65\x63\x75\x74\x65","\x43\x61\x6D\x69\x6E\x6F","\x75\x73\x65\x72\x41\x67\x65\x6E\x74","\x65\x6E\x64\x55\x70\x64\x61\x74\x65","\x73\x74\x61\x72\x74\x41\x6E\x69\x6D\x61\x74\x69\x6F\x6E","\x69\x73\x43\x6F\x6E\x74\x72\x6F\x6C\x44\x6F\x77\x6E","\x49\x53\x5F\x4D\x41\x43","\x6D\x65\x74\x61\x4B\x65\x79","\x6D\x6F\x76\x65\x43\x65\x6C\x6C\x73","\x73\x63\x72\x6F\x6C\x6C\x43\x65\x6C\x6C\x54\x6F\x56\x69\x73\x69\x62\x6C\x65","\x65\x6E\x61\x62\x6C\x65\x64","\x66\x75\x6E\x63\x74","\x62\x69\x6E\x64\x43\x6F\x6E\x74\x72\x6F\x6C\x53\x68\x69\x66\x74\x4B\x65\x79","\x62\x69\x6E\x64\x43\x6F\x6E\x74\x72\x6F\x6C\x4B\x65\x79","\x62\x69\x6E\x64\x53\x68\x69\x66\x74\x4B\x65\x79","\x62\x69\x6E\x64\x4B\x65\x79","\x65\x73\x63\x61\x70\x65","\x65\x6E\x74\x65\x72","\x66\x6F\x6C\x64\x43\x65\x6C\x6C\x73","\x7A\x6F\x6F\x6D\x49\x6E","\x7A\x6F\x6F\x6D\x4F\x75\x74","\x73\x65\x6C\x65\x63\x74\x41\x6C\x6C","\x73\x65\x6C\x65\x63\x74\x56\x65\x72\x74\x69\x63\x65\x73","\x73\x65\x6C\x65\x63\x74\x45\x64\x67\x65\x73","\x65\x78\x70\x6F\x72\x74","\x63\x6F\x6E\x6E\x65\x63\x74","\x67\x72\x69\x64","\x61\x62\x6F\x75\x74","\x6D\x75\x73\x74\x68\x61\x76\x65","\x6F\x75\x74\x67\x6F\x69\x6E\x67\x65\x64\x67\x65","\x70\x75\x73\x68","\x69\x6E\x63\x6F\x6D\x69\x6E\x67\x65\x64\x67\x65"];EditorUi=function(_0xcd70x1,_0xcd70x2){this[_0x37a3[0]]=_0xcd70x1|| new Editor();this[_0x37a3[1]]=_0xcd70x2||document[_0x37a3[3]](_0x37a3[2]);var _0xcd70x3=_0xcd70x1[_0x37a3[4]];var _0xcd70x4=this;this[_0x37a3[1]][_0x37a3[6]][_0x37a3[5]]=_0x37a3[7]; new Image()[_0x37a3[8]]=mxPopupMenu[_0x37a3[10]][_0x37a3[9]];if(mxConnectionHandler[_0x37a3[10]][_0x37a3[11]]!=null){ new Image()[_0x37a3[8]]=mxConnectionHandler[_0x37a3[10]][_0x37a3[11]][_0x37a3[8]]};this[_0x37a3[12]]= new Actions(this);this[_0x37a3[13]]= new Menus(this);this[_0x37a3[14]]();this[_0x37a3[15]]();this[_0x37a3[16]]();var _0xcd70x5=mxUtils[_0x37a3[20]](this,function(_0xcd70x6){if(_0xcd70x6==null){_0xcd70x6=window[_0x37a3[17]]};if(this[_0x37a3[18]](_0xcd70x6)){return true};return _0xcd70x3[_0x37a3[19]]()});if(this[_0x37a3[1]]==document[_0x37a3[21]]){this[_0x37a3[23]][_0x37a3[22]]=_0xcd70x5;this[_0x37a3[23]][_0x37a3[24]]=_0xcd70x5;this[_0x37a3[25]][_0x37a3[22]]=_0xcd70x5;this[_0x37a3[25]][_0x37a3[24]]=_0xcd70x5;this[_0x37a3[26]][_0x37a3[22]]=_0xcd70x5;this[_0x37a3[26]][_0x37a3[24]]=_0xcd70x5;this[_0x37a3[27]][_0x37a3[22]]=_0xcd70x5;this[_0x37a3[27]][_0x37a3[24]]=_0xcd70x5;this[_0x37a3[28]][_0x37a3[22]]=_0xcd70x5;this[_0x37a3[28]][_0x37a3[24]]=_0xcd70x5};if(mxClient[_0x37a3[29]]&&( typeof (document[_0x37a3[30]])===_0x37a3[31]||document[_0x37a3[30]]<9)){mxEvent[_0x37a3[33]](this[_0x37a3[26]],_0x37a3[32],_0xcd70x5);mxEvent[_0x37a3[33]](this[_0x37a3[27]],_0x37a3[32],_0xcd70x5)}else {this[_0x37a3[26]][_0x37a3[34]]=_0xcd70x5;this[_0x37a3[27]][_0x37a3[34]]=_0xcd70x5};_0xcd70x3[_0x37a3[35]](this[_0x37a3[26]]);_0xcd70x3[_0x37a3[15]]();_0xcd70x3[_0x37a3[1]][_0x37a3[38]](_0x37a3[36],_0x37a3[37]);_0xcd70x3[_0x37a3[1]][_0x37a3[6]][_0x37a3[39]]=_0x37a3[40];_0xcd70x3[_0x37a3[1]][_0x37a3[6]][_0x37a3[41]]=_0x37a3[42]+_0xcd70x1[_0x37a3[43]]+_0x37a3[44];_0xcd70x3[_0x37a3[1]][_0x37a3[6]][_0x37a3[45]]=_0x37a3[46];_0xcd70x3[_0x37a3[1]][_0x37a3[47]]();var _0xcd70x7=_0xcd70x3[_0x37a3[48]];_0xcd70x3[_0x37a3[48]]=function(_0xcd70x8,_0xcd70x9,_0xcd70xa){if(_0xcd70x8==mxEvent[_0x37a3[49]]){this[_0x37a3[1]][_0x37a3[47]]()};_0xcd70x7[_0x37a3[50]](this,arguments)};this[_0x37a3[56]](_0xcd70x3[_0x37a3[51]],[_0x37a3[52],_0x37a3[53],_0x37a3[54]],[[1,1],[1,1],[0,0]],[[0,0],[0,0],[1,_0x37a3[55]]]);this[_0x37a3[56]](_0xcd70x3[_0x37a3[51]],[_0x37a3[57],_0x37a3[58],_0x37a3[59],_0x37a3[60],_0x37a3[61],_0x37a3[62],_0x37a3[63]],[[1,1],[0,0],[0,1],[0,1],[0,1],[1,1],[0,1]],[[1,_0x37a3[55]],[1,_0x37a3[55]],[1,_0x37a3[55]],[1,_0x37a3[55]],[1,_0x37a3[55]],[1,_0x37a3[55]],[1,_0x37a3[55]]]);this[_0x37a3[56]](_0xcd70x3[_0x37a3[51]],[_0x37a3[64],_0x37a3[65]],[[1,1],[1,1]],[[1,_0x37a3[55]],[1,_0x37a3[55]]]);this[_0x37a3[56]](_0xcd70x3[_0x37a3[51]],[_0x37a3[66],_0x37a3[67],_0x37a3[68],_0x37a3[69],_0x37a3[70],_0x37a3[71],_0x37a3[72],_0x37a3[73],_0x37a3[74]],[[1,_0x37a3[55]],[1,1],[1,_0x37a3[55]],[1,1],[1,1],[1,1],[1,1],[1,1],[1,_0x37a3[55]]],[[1,_0x37a3[55]],[1,_0x37a3[55]],[1,_0x37a3[55]],[1,_0x37a3[55]],[1,_0x37a3[55]],[1,_0x37a3[55]],[1,_0x37a3[55]],[1,_0x37a3[55]],[1,_0x37a3[55]]]);this[_0x37a3[56]](_0xcd70x3[_0x37a3[51]],[_0x37a3[75]],[[1,1]],[[1,_0x37a3[55]]]);this[_0x37a3[56]](_0xcd70x3[_0x37a3[51]],[_0x37a3[76],_0x37a3[77]],[[1,1],[1,1]],[[1,_0x37a3[55]],[1,_0x37a3[55]]]);this[_0x37a3[56]](_0xcd70x3[_0x37a3[51]],[_0x37a3[78],_0x37a3[79],_0x37a3[80],_0x37a3[81],_0x37a3[82]],[[0,0],[1,2],[1,2],[1,2],[1,_0x37a3[55]]],[[1,_0x37a3[55]],[1,_0x37a3[55]],[1,_0x37a3[55]],[1,_0x37a3[55]],[1,_0x37a3[55]]]);this[_0x37a3[56]](_0xcd70x3[_0x37a3[51]],[_0x37a3[83],_0x37a3[84]],[[1,1],[1,1]],[[1,_0x37a3[55]],[1,_0x37a3[55]]]);this[_0x37a3[56]](_0xcd70x3[_0x37a3[51]],[_0x37a3[85],_0x37a3[86],_0x37a3[87],_0x37a3[88],_0x37a3[89]],[[1,1],[1,1],[0,1],[0,1],[0,1]],[[1,_0x37a3[55]],[1,_0x37a3[55]],[1,_0x37a3[55]],[1,_0x37a3[55]],[1,_0x37a3[55]]]);_0xcd70x3[_0x37a3[90]]=function(_0xcd70x6,_0xcd70xb){var _0xcd70xc=[_0x37a3[66],_0x37a3[79],_0x37a3[80],_0x37a3[68],_0x37a3[74],_0x37a3[82]];var _0xcd70xd= new mxEventObject(mxEvent.DOUBLE_CLICK,_0x37a3[17],_0xcd70x6,_0x37a3[91],_0xcd70xb);this[_0x37a3[92]](_0xcd70xd);if(this[_0x37a3[93]]()&&!mxEvent[_0x37a3[94]](_0xcd70x6)&&!_0xcd70xd[_0x37a3[94]]()){if(this[_0x37a3[96]]()[_0x37a3[95]](_0xcd70xb)){if(_0xcd70xc[_0x37a3[100]](_0xcd70xb[_0x37a3[99]][_0x37a3[98]][_0x37a3[97]])>=0){this[_0x37a3[101]](_0xcd70xb)}}else {if(this[_0x37a3[96]]()[_0x37a3[102]](_0xcd70xb)){console[_0x37a3[103]](_0xcd70x4);console[_0x37a3[103]](_0xcd70xb);_0xcd70x4[_0x37a3[104]]( new GeneralDialog(_0xcd70x4,_0xcd70xb)[_0x37a3[1]],320,280,true,true)}};_0xcd70xd[_0x37a3[105]]()}};_0xcd70x3[_0x37a3[107]][_0x37a3[106]]=true;_0xcd70x3[_0x37a3[107]][_0x37a3[108]]=mxUtils[_0x37a3[20]](this,function(_0xcd70xe,_0xcd70xb,_0xcd70x6){this[_0x37a3[13]][_0x37a3[109]](_0xcd70xe,_0xcd70xb,_0xcd70x6)});_0xcd70x1[_0x37a3[111]][_0x37a3[35]](this[_0x37a3[110]]);mxEvent[_0x37a3[113]](document,mxUtils[_0x37a3[20]](this,function(_0xcd70x6){_0xcd70x3[_0x37a3[107]][_0x37a3[112]]()}));if(mxClient[_0x37a3[114]]){mxEvent[_0x37a3[33]](_0xcd70x3[_0x37a3[1]],_0x37a3[115],mxUtils[_0x37a3[20]](this,function(_0xcd70x6){_0xcd70x3[_0x37a3[120]][_0x37a3[119]]()[_0x37a3[38]](_0x37a3[116],_0x37a3[117]+_0xcd70x6[_0x37a3[118]]+_0x37a3[44]);_0xcd70x3[_0x37a3[120]][_0x37a3[122]]()[_0x37a3[6]][_0x37a3[121]]=_0x37a3[7]}));mxEvent[_0x37a3[33]](_0xcd70x3[_0x37a3[1]],_0x37a3[123],mxUtils[_0x37a3[20]](this,function(_0xcd70x6){_0xcd70x3[_0x37a3[120]][_0x37a3[119]]()[_0x37a3[124]](_0x37a3[116]);_0xcd70x3[_0x37a3[125]]=true;_0xcd70x3[_0x37a3[126]](_0xcd70x6[_0x37a3[118]]);_0xcd70x3[_0x37a3[120]][_0x37a3[122]]()[_0x37a3[6]][_0x37a3[121]]=_0x37a3[127]}))};var _0xcd70xf=this[_0x37a3[128]](_0xcd70x1);this[_0x37a3[129]]=function(){return _0xcd70xf};mxEvent[_0x37a3[33]](window,_0x37a3[130],mxUtils[_0x37a3[20]](this,function(){this[_0x37a3[15]]();_0xcd70x3[_0x37a3[131]]();this[_0x37a3[0]][_0x37a3[111]][_0x37a3[132]](false);this[_0x37a3[0]][_0x37a3[111]][_0x37a3[111]][_0x37a3[131]]()}));this[_0x37a3[35]]();this[_0x37a3[133]]()};EditorUi[_0x37a3[10]][_0x37a3[134]]=(mxClient[_0x37a3[114]])?16:8;EditorUi[_0x37a3[10]][_0x37a3[135]]=33;EditorUi[_0x37a3[10]][_0x37a3[136]]=36;EditorUi[_0x37a3[10]][_0x37a3[137]]=28;EditorUi[_0x37a3[10]][_0x37a3[138]]=204;EditorUi[_0x37a3[10]][_0x37a3[139]]=190;EditorUi[_0x37a3[10]][_0x37a3[35]]=function(){this[_0x37a3[140]]();this[_0x37a3[141]]();var _0xcd70x10=this[_0x37a3[12]][_0x37a3[143]](_0x37a3[142]);var _0xcd70x11=function(){_0xcd70x10[_0x37a3[145]](!mxClipboard[_0x37a3[144]]())};var _0xcd70x12=mxClipboard[_0x37a3[146]];mxClipboard[_0x37a3[146]]=function(){_0xcd70x12[_0x37a3[50]](this,arguments);_0xcd70x11()};var _0xcd70x13=mxClipboard[_0x37a3[147]];mxClipboard[_0x37a3[147]]=function(){_0xcd70x13[_0x37a3[50]](this,arguments);_0xcd70x11()}};EditorUi[_0x37a3[10]][_0x37a3[18]]=function(_0xcd70x6){return false};EditorUi[_0x37a3[10]][_0x37a3[133]]=function(){try{if(window[_0x37a3[148]]!=null&&window[_0x37a3[148]][_0x37a3[149]]!=null){window[_0x37a3[148]][_0x37a3[149]][_0x37a3[161]](mxUtils[_0x37a3[20]](this,function(_0xcd70x14,_0xcd70x15){try{var _0xcd70x16=mxUtils[_0x37a3[150]](_0xcd70x14);this[_0x37a3[0]][_0x37a3[152]](_0xcd70x16[_0x37a3[151]]);this[_0x37a3[0]][_0x37a3[153]]=false;this[_0x37a3[0]][_0x37a3[155]][_0x37a3[154]]();if(_0xcd70x15!=null){this[_0x37a3[0]][_0x37a3[156]]=_0xcd70x15}}catch(e){mxUtils[_0x37a3[160]](mxResources[_0x37a3[143]](_0x37a3[157])+_0x37a3[158]+e[_0x37a3[159]])}}))}}catch(e){}};EditorUi[_0x37a3[10]][_0x37a3[162]]=function(_0xcd70x14,_0xcd70x15,_0xcd70x17){try{var _0xcd70x16=mxUtils[_0x37a3[150]](_0xcd70x14);this[_0x37a3[0]][_0x37a3[152]](_0xcd70x16[_0x37a3[151]]);this[_0x37a3[0]][_0x37a3[153]]=false;this[_0x37a3[0]][_0x37a3[155]][_0x37a3[154]]();if(_0xcd70x15!=null){this[_0x37a3[0]][_0x37a3[156]]=_0xcd70x15};if(_0xcd70x17!=null){this[_0x37a3[0]][_0x37a3[163]]=_0xcd70x17}}catch(e){mxUtils[_0x37a3[160]](mxResources[_0x37a3[143]](_0x37a3[157])+_0x37a3[158]+e[_0x37a3[159]])}};EditorUi[_0x37a3[10]][_0x37a3[164]]=function(_0xcd70x18){var _0xcd70x1=this[_0x37a3[0]];if(_0xcd70x18!=null){var _0xcd70x14=mxUtils[_0x37a3[166]](this[_0x37a3[0]][_0x37a3[165]]());try{if(useLocalStorage){if(localStorage[_0x37a3[167]](_0xcd70x18)!=null&&!mxUtils[_0x37a3[169]](mxResources[_0x37a3[143]](_0x37a3[168],[_0xcd70x18]))){return};localStorage[_0x37a3[170]](_0xcd70x18,_0xcd70x14);this[_0x37a3[0]][_0x37a3[173]](mxResources[_0x37a3[143]](_0x37a3[171])+_0x37a3[172]+ new Date())}else {console[_0x37a3[103]](_0xcd70x14[_0x37a3[174]]);console[_0x37a3[103]](MAX_REQUEST_SIZE);if(_0xcd70x14[_0x37a3[174]]<MAX_REQUEST_SIZE){_0xcd70x14=encodeURIComponent(_0xcd70x14);_0xcd70x18=encodeURIComponent(_0xcd70x18);var _0xcd70x19= new XMLHttpRequest();_0xcd70x19[_0x37a3[133]](_0x37a3[175],SAVE_URL,true);_0xcd70x19[_0x37a3[178]](_0x37a3[176],_0x37a3[177]);_0xcd70x19[_0x37a3[178]](_0x37a3[179],_0x37a3[180]+_0xcd70x1[_0x37a3[163]][_0x37a3[181]]);_0xcd70x19[_0x37a3[182]]=function(_0xcd70x1a){if(_0xcd70x19[_0x37a3[183]]===4){if(_0xcd70x19[_0x37a3[184]]===201){_0xcd70x1[_0x37a3[173]](_0x37a3[185]+JSON[_0x37a3[188]](_0xcd70x19[_0x37a3[187]])[_0x37a3[186]]+_0x37a3[189]);setTimeout(function(){window[_0x37a3[133]](_0x37a3[190]+JSON[_0x37a3[188]](_0xcd70x19[_0x37a3[187]])[_0x37a3[191]],_0x37a3[192])},1500)}else {_0xcd70x1[_0x37a3[173]](_0x37a3[193]+JSON[_0x37a3[188]](_0xcd70x19[_0x37a3[187]])[_0x37a3[194]][0][_0x37a3[159]])}}};_0xcd70x19[_0x37a3[195]]=function(_0xcd70x1a){mxUtils[_0x37a3[160]](_0xcd70x19[_0x37a3[196]])};_0xcd70x19[_0x37a3[198]](_0x37a3[197]+_0xcd70x18)}else {mxUtils[_0x37a3[160]](mxResources[_0x37a3[143]](_0x37a3[199]));mxUtils[_0x37a3[200]](_0xcd70x14);return}};this[_0x37a3[0]][_0x37a3[156]]=_0xcd70x18;this[_0x37a3[0]][_0x37a3[153]]=false}catch(e){this[_0x37a3[0]][_0x37a3[173]](_0x37a3[201])}}else {this[_0x37a3[0]][_0x37a3[173]](_0x37a3[201])}};EditorUi[_0x37a3[10]][_0x37a3[202]]=function(_0xcd70x18){var _0xcd70x1=this[_0x37a3[0]];if(_0xcd70x18!=null){var _0xcd70x14=mxUtils[_0x37a3[166]](this[_0x37a3[0]][_0x37a3[165]]());try{if(useLocalStorage){if(localStorage[_0x37a3[167]](_0xcd70x18)!=null&&!mxUtils[_0x37a3[169]](mxResources[_0x37a3[143]](_0x37a3[168],[_0xcd70x18]))){return};localStorage[_0x37a3[170]](_0xcd70x18,_0xcd70x14);this[_0x37a3[0]][_0x37a3[173]](mxResources[_0x37a3[143]](_0x37a3[171])+_0x37a3[172]+ new Date())}else {console[_0x37a3[103]](_0xcd70x14[_0x37a3[174]]);console[_0x37a3[103]](MAX_REQUEST_SIZE);if(_0xcd70x14[_0x37a3[174]]<MAX_REQUEST_SIZE){_0xcd70x14=encodeURIComponent(_0xcd70x14);var _0xcd70x19= new XMLHttpRequest();_0xcd70x19[_0x37a3[133]](_0x37a3[203],SAVE_URL+this[_0x37a3[0]][_0x37a3[163]][_0x37a3[191]],true);_0xcd70x19[_0x37a3[178]](_0x37a3[176],_0x37a3[177]);_0xcd70x19[_0x37a3[178]](_0x37a3[179],_0x37a3[180]+_0xcd70x1[_0x37a3[163]][_0x37a3[181]]);_0xcd70x19[_0x37a3[182]]=function(_0xcd70x1a){if(_0xcd70x19[_0x37a3[183]]===4){if(_0xcd70x19[_0x37a3[184]]===200){_0xcd70x1[_0x37a3[173]](_0x37a3[204]+JSON[_0x37a3[188]](_0xcd70x19[_0x37a3[187]])[_0x37a3[205]]+_0x37a3[206]+_0xcd70x19[_0x37a3[184]]+_0x37a3[172]+_0xcd70x19[_0x37a3[196]]+_0x37a3[44])}else {_0xcd70x1[_0x37a3[173]](_0x37a3[207]+JSON[_0x37a3[188]](_0xcd70x19[_0x37a3[187]])[_0x37a3[194]][0][_0x37a3[159]])}}};_0xcd70x19[_0x37a3[195]]=function(_0xcd70x1a){mxUtils[_0x37a3[160]](_0xcd70x19[_0x37a3[196]])};_0xcd70x19[_0x37a3[198]](_0x37a3[208]+_0xcd70x14)}else {mxUtils[_0x37a3[160]](mxResources[_0x37a3[143]](_0x37a3[199]));mxUtils[_0x37a3[200]](_0xcd70x14);return}};this[_0x37a3[0]][_0x37a3[156]]=_0xcd70x18;this[_0x37a3[0]][_0x37a3[153]]=false}catch(e){this[_0x37a3[0]][_0x37a3[173]](_0x37a3[209])}}else {this[_0x37a3[0]][_0x37a3[173]](_0x37a3[209])}};EditorUi[_0x37a3[10]][_0x37a3[210]]=function(_0xcd70x18){var _0xcd70x1=this[_0x37a3[0]];if(_0xcd70x18!=null){var _0xcd70x14=mxUtils[_0x37a3[166]](this[_0x37a3[0]][_0x37a3[165]]());try{if(useLocalStorage){if(localStorage[_0x37a3[167]](_0xcd70x18)!=null&&!mxUtils[_0x37a3[169]](mxResources[_0x37a3[143]](_0x37a3[168],[_0xcd70x18]))){return};localStorage[_0x37a3[170]](_0xcd70x18,_0xcd70x14);this[_0x37a3[0]][_0x37a3[173]](mxResources[_0x37a3[143]](_0x37a3[171])+_0x37a3[172]+ new Date())}else {console[_0x37a3[103]](_0xcd70x14[_0x37a3[174]]);console[_0x37a3[103]](MAX_REQUEST_SIZE);if(_0xcd70x14[_0x37a3[174]]<MAX_REQUEST_SIZE){_0xcd70x14=encodeURIComponent(_0xcd70x14);_0xcd70x18=encodeURIComponent(_0xcd70x18);var _0xcd70x19= new XMLHttpRequest();_0xcd70x19[_0x37a3[133]](_0x37a3[175],SAVE_URL,true);_0xcd70x19[_0x37a3[178]](_0x37a3[176],_0x37a3[177]);_0xcd70x19[_0x37a3[178]](_0x37a3[179],_0x37a3[180]+_0xcd70x1[_0x37a3[163]][_0x37a3[181]]);_0xcd70x19[_0x37a3[182]]=function(_0xcd70x1a){if(_0xcd70x19[_0x37a3[183]]===4){if(_0xcd70x19[_0x37a3[184]]===201){_0xcd70x1[_0x37a3[173]](_0x37a3[185]+JSON[_0x37a3[188]](_0xcd70x19[_0x37a3[187]])[_0x37a3[186]]+_0x37a3[189]);setTimeout(function(){window[_0x37a3[133]](_0x37a3[190]+JSON[_0x37a3[188]](_0xcd70x19[_0x37a3[187]])[_0x37a3[191]],_0x37a3[192])},1500)}else {_0xcd70x1[_0x37a3[173]](_0x37a3[211]+JSON[_0x37a3[188]](_0xcd70x19[_0x37a3[187]])[_0x37a3[194]][0][_0x37a3[159]])}}};_0xcd70x19[_0x37a3[195]]=function(_0xcd70x1a){mxUtils[_0x37a3[160]](_0xcd70x19[_0x37a3[196]])};_0xcd70x19[_0x37a3[198]](_0x37a3[212]+_0xcd70x18+_0x37a3[213]+_0xcd70x14+_0x37a3[214]+_0xcd70x14)}else {mxUtils[_0x37a3[160]](mxResources[_0x37a3[143]](_0x37a3[199]));mxUtils[_0x37a3[200]](_0xcd70x14);return}};this[_0x37a3[0]][_0x37a3[156]]=_0xcd70x18;this[_0x37a3[0]][_0x37a3[153]]=false}catch(e){this[_0x37a3[0]][_0x37a3[173]](_0x37a3[209])}}else {this[_0x37a3[0]][_0x37a3[173]](_0x37a3[209])}};EditorUi[_0x37a3[10]][_0x37a3[215]]=function(_0xcd70x1b,_0xcd70x1c){var _0xcd70x3=this[_0x37a3[0]][_0x37a3[4]];for(var _0xcd70x1b=_0xcd70x1b!=null?_0xcd70x1b:_0xcd70x3[_0x37a3[217]][_0x37a3[216]](),_0xcd70x1c=_0xcd70x1c!=null?_0xcd70x1c:{},_0xcd70x1d=true,_0xcd70x1e=_0xcd70x3[_0x37a3[217]][_0x37a3[218]](_0xcd70x1b),_0xcd70x1a=0;_0xcd70x1a<_0xcd70x1e;_0xcd70x1a++){var _0xcd70x1f=_0xcd70x3[_0x37a3[217]][_0x37a3[219]](_0xcd70x1b,_0xcd70x1a),_0xcd70x20=_0xcd70x1c;_0xcd70x3[_0x37a3[220]](_0xcd70x1f)&&(_0xcd70x20={});_0xcd70x20=this[_0x37a3[215]](_0xcd70x1f,_0xcd70x20);_0xcd70x20!=null?_0xcd70x3[_0x37a3[222]](_0xcd70x1f,_0xcd70x20[_0x37a3[168]](/\n/g,_0x37a3[221])):_0xcd70x3[_0x37a3[222]](_0xcd70x1f,null);_0xcd70x1d=_0xcd70x1d&&_0xcd70x20==null};_0xcd70x1e=_0x37a3[223];if(_0xcd70x3[_0x37a3[217]][_0x37a3[102]](_0xcd70x1b)){switch(_0xcd70x1b[_0x37a3[98]][_0x37a3[267]]){case _0x37a3[52]:_0xcd70x1e=this[_0x37a3[224]](_0x37a3[52])?_0x37a3[223]:_0x37a3[225]+_0x37a3[226];break;case _0x37a3[53]:_0xcd70x1e=this[_0x37a3[224]](_0x37a3[53])?_0x37a3[223]:_0x37a3[227]+_0x37a3[226];break;case _0x37a3[67]:_0xcd70x1e=(_0xcd70x1b[_0x37a3[98]][_0x37a3[229]](_0x37a3[228])>0)?_0x37a3[223]:mxResources[_0x37a3[143]](_0x37a3[230])+_0x37a3[226];break;case _0x37a3[66]:;case _0x37a3[68]:_0xcd70x1e=(_0xcd70x1b[_0x37a3[98]][_0x37a3[229]](_0x37a3[228])>0)?_0x37a3[223]:mxResources[_0x37a3[143]](_0x37a3[230])+_0x37a3[226];_0xcd70x1e+=(_0xcd70x1b[_0x37a3[98]][_0x37a3[229]](_0x37a3[231])>0)?_0x37a3[223]:mxResources[_0x37a3[143]](_0x37a3[232])+_0x37a3[226];break;case _0x37a3[74]:_0xcd70x1e=(_0xcd70x1b[_0x37a3[98]][_0x37a3[229]](_0x37a3[228])>0)?_0x37a3[223]:mxResources[_0x37a3[143]](_0x37a3[230])+_0x37a3[226];_0xcd70x1e+=(_0xcd70x1b[_0x37a3[98]][_0x37a3[229]](_0x37a3[231])>0)?_0x37a3[223]:mxResources[_0x37a3[143]](_0x37a3[232])+_0x37a3[226];break;case _0x37a3[82]:_0xcd70x1e=(_0xcd70x1b[_0x37a3[98]][_0x37a3[229]](_0x37a3[233])!==_0x37a3[223])?_0x37a3[223]:mxResources[_0x37a3[143]](_0x37a3[232])+_0x37a3[226];break;case _0x37a3[76]:_0xcd70x1e=(_0xcd70x1b[_0x37a3[98]][_0x37a3[229]](_0x37a3[234])>0)?_0x37a3[223]:mxResources[_0x37a3[143]](_0x37a3[235])+_0x37a3[226];break;case _0x37a3[64]:;case _0x37a3[65]:_0xcd70x1e=(_0xcd70x1b[_0x37a3[98]][_0x37a3[229]](_0x37a3[231])>0)?_0x37a3[223]:mxResources[_0x37a3[143]](_0x37a3[232])+_0x37a3[226];break;case _0x37a3[78]:_0xcd70x1e=(_0xcd70x1b[_0x37a3[98]][_0x37a3[229]](_0x37a3[236])!==_0x37a3[223])?_0x37a3[223]:mxResources[_0x37a3[143]](_0x37a3[237])+_0x37a3[226];break;case _0x37a3[86]:;case _0x37a3[87]:_0xcd70x1e=(_0xcd70x1b[_0x37a3[98]][_0x37a3[229]](_0x37a3[238])!==_0x37a3[223])?_0x37a3[223]:mxResources[_0x37a3[143]](_0x37a3[239])+_0x37a3[226];break;case _0x37a3[79]:_0xcd70x1e=(_0xcd70x1b[_0x37a3[98]][_0x37a3[229]](_0x37a3[240])!==_0x37a3[223])?_0x37a3[223]:mxResources[_0x37a3[143]](_0x37a3[241])+_0x37a3[226];break;case _0x37a3[69]:_0xcd70x1e=(_0xcd70x1b[_0x37a3[98]][_0x37a3[229]](_0x37a3[242])!==_0x37a3[223])?_0x37a3[223]:mxResources[_0x37a3[143]](_0x37a3[243])+_0x37a3[226];break;case _0x37a3[70]:_0xcd70x1e=(_0xcd70x1b[_0x37a3[98]][_0x37a3[229]](_0x37a3[244])!==_0x37a3[223])?_0x37a3[223]:mxResources[_0x37a3[143]](_0x37a3[245])+_0x37a3[226];break;case _0x37a3[71]:_0xcd70x1e=(_0xcd70x1b[_0x37a3[98]][_0x37a3[229]](_0x37a3[246])!==_0x37a3[223])?_0x37a3[223]:mxResources[_0x37a3[143]](_0x37a3[247])+_0x37a3[226];break;case _0x37a3[75]:_0xcd70x1e=(_0xcd70x1b[_0x37a3[98]][_0x37a3[229]](_0x37a3[156])!==_0x37a3[223])?_0x37a3[223]:mxResources[_0x37a3[143]](_0x37a3[248])+_0x37a3[226];break;case _0x37a3[84]:_0xcd70x1e=(_0xcd70x1b[_0x37a3[98]][_0x37a3[229]](_0x37a3[249])!==_0x37a3[223])?_0x37a3[223]:mxResources[_0x37a3[143]](_0x37a3[250])+_0x37a3[226];break;case _0x37a3[60]:_0xcd70x1e=(_0xcd70x1b[_0x37a3[98]][_0x37a3[229]](_0x37a3[251])!==_0x37a3[223])?_0x37a3[223]:mxResources[_0x37a3[143]](_0x37a3[252])+_0x37a3[226];break;case _0x37a3[59]:_0xcd70x1e=(_0xcd70x1b[_0x37a3[98]][_0x37a3[229]](_0x37a3[253])>0)?_0x37a3[223]:mxResources[_0x37a3[143]](_0x37a3[252])+_0x37a3[226];break;case _0x37a3[61]:_0xcd70x1e=(_0xcd70x1b[_0x37a3[98]][_0x37a3[229]](_0x37a3[254])!==_0x37a3[255])?_0x37a3[223]:mxResources[_0x37a3[143]](_0x37a3[256])+_0x37a3[226];break;case _0x37a3[63]:_0xcd70x1e=(_0xcd70x1b[_0x37a3[98]][_0x37a3[229]](_0x37a3[257])>0)?_0x37a3[223]:mxResources[_0x37a3[143]](_0x37a3[258])+_0x37a3[226];break;case _0x37a3[80]:_0xcd70x1e=(_0xcd70x1b[_0x37a3[98]][_0x37a3[229]](_0x37a3[259])>0)?_0x37a3[223]:mxResources[_0x37a3[143]](_0x37a3[260])+_0x37a3[226];break;case _0x37a3[81]:_0xcd70x1e=(_0xcd70x1b[_0x37a3[98]][_0x37a3[229]](_0x37a3[259])!=_0x37a3[223])?_0x37a3[223]:mxResources[_0x37a3[143]](_0x37a3[260])+_0x37a3[226];break;case _0x37a3[62]:_0xcd70x1e=(_0xcd70x1b[_0x37a3[98]][_0x37a3[229]](_0x37a3[261])!==_0x37a3[223])?_0x37a3[223]:mxResources[_0x37a3[143]](_0x37a3[262])+_0x37a3[226];break;case _0x37a3[88]:_0xcd70x1e=(_0xcd70x1b[_0x37a3[98]][_0x37a3[229]](_0x37a3[263])>0)?_0x37a3[223]:mxResources[_0x37a3[143]](_0x37a3[264])+_0x37a3[226];break;case _0x37a3[72]:_0xcd70x1e=(_0xcd70x1b[_0x37a3[98]][_0x37a3[229]](_0x37a3[246])!==_0x37a3[223])?_0x37a3[223]:mxResources[_0x37a3[143]](_0x37a3[247])+_0x37a3[226];break;case _0x37a3[73]:_0xcd70x1e=(_0xcd70x1b[_0x37a3[98]][_0x37a3[229]](_0x37a3[246])!==_0x37a3[223])?_0x37a3[223]:mxResources[_0x37a3[143]](_0x37a3[247])+_0x37a3[226];_0xcd70x1e+=(_0xcd70x1b[_0x37a3[98]][_0x37a3[229]](_0x37a3[265])!==_0x37a3[223])?_0x37a3[223]:mxResources[_0x37a3[143]](_0x37a3[266])+_0x37a3[226];break;case _0x37a3[77]:_0xcd70x1e=(_0xcd70x1b[_0x37a3[98]][_0x37a3[229]](_0x37a3[265])!==_0x37a3[223])?_0x37a3[223]:mxResources[_0x37a3[143]](_0x37a3[266])+_0x37a3[226];break}};if(_0xcd70x3[_0x37a3[217]][_0x37a3[95]](_0xcd70x1b)){var _0xcd70x21=_0xcd70x3[_0x37a3[217]][_0x37a3[269]](_0xcd70x1b[_0x37a3[99]][_0x37a3[268]]());switch(_0xcd70x21[_0x37a3[98]][_0x37a3[267]]){case _0x37a3[66]:var _0xcd70x22=/^[0-9]{1,45}$|^[i]{1}$|^[t]{1}|^[#]{1}|^[*]{1}$/;_0xcd70x1e=_0xcd70x1e+((_0xcd70x22[_0x37a3[271]](String(_0xcd70x1b[_0x37a3[270]]())))?_0x37a3[223]:mxResources[_0x37a3[143]](_0x37a3[272])+_0x37a3[226]);break;case _0x37a3[68]:var _0xcd70x22=/^[0-9]{1,45}$|^[-]{1}$|^[i]{1}$|^[t]{1}|^[#]{1}|^[*]{1}$/;var _0xcd70x23=String(_0xcd70x1b[_0x37a3[270]]());var _0xcd70x24=_0xcd70x23[_0x37a3[274]](_0x37a3[273]);_0xcd70x24[_0x37a3[276]](function(_0xcd70x25){_0xcd70x1e=_0xcd70x1e+((_0xcd70x22[_0x37a3[271]](_0xcd70x25))?_0x37a3[223]:mxResources[_0x37a3[143]](_0x37a3[275])+_0x37a3[226])});break;case _0x37a3[74]:var _0xcd70x22=/^(x|i|-)$/;var _0xcd70x23=String(_0xcd70x1b[_0x37a3[270]]());_0xcd70x1e=_0xcd70x1e+((_0xcd70x22[_0x37a3[271]](_0xcd70x23))?_0x37a3[223]:mxResources[_0x37a3[143]](_0x37a3[277])+_0x37a3[226]);break;case _0x37a3[79]:;case _0x37a3[80]:;case _0x37a3[81]:var _0xcd70x22=/^(true){1}$|^(false){1}$/;_0xcd70x1e=_0xcd70x1e+((_0xcd70x22[_0x37a3[271]](String(_0xcd70x1b[_0x37a3[270]]())))?_0x37a3[223]:mxResources[_0x37a3[143]](_0x37a3[278])+_0x37a3[226]);break}};_0xcd70x3[_0x37a3[279]](_0xcd70x1b)&&!_0xcd70x1d&&(_0xcd70x1e=_0xcd70x1e+((mxResources[_0x37a3[143]](_0xcd70x3[_0x37a3[280]])||_0xcd70x3[_0x37a3[280]])+_0x37a3[226]));_0xcd70x1e=_0xcd70x3[_0x37a3[217]][_0x37a3[95]](_0xcd70x1b)?_0xcd70x1e+(_0xcd70x3[_0x37a3[282]](_0xcd70x1b,_0xcd70x3[_0x37a3[217]][_0x37a3[281]](_0xcd70x1b,true),_0xcd70x3[_0x37a3[217]][_0x37a3[281]](_0xcd70x1b,false))||_0x37a3[223]):_0xcd70x1e+(_0xcd70x3[_0x37a3[283]](_0xcd70x1b)||_0x37a3[223]);_0xcd70x1a=_0xcd70x3[_0x37a3[284]](_0xcd70x1b,_0xcd70x1c);_0xcd70x1a!=null&&(_0xcd70x1e=_0xcd70x1e+_0xcd70x1a);_0xcd70x3[_0x37a3[217]][_0x37a3[285]](_0xcd70x1b)==null&&_0xcd70x3[_0x37a3[120]][_0x37a3[215]]();return _0xcd70x1e[_0x37a3[174]]>0||!_0xcd70x1d?_0xcd70x1e:null};EditorUi[_0x37a3[10]][_0x37a3[224]]=function(_0xcd70x26){var _0xcd70x3=this[_0x37a3[0]][_0x37a3[4]];var _0xcd70x27=_0xcd70x3[_0x37a3[286]]();var _0xcd70x28=0;_0xcd70x27[_0x37a3[287]][_0x37a3[276]](function(_0xcd70x29){if(_0xcd70x3[_0x37a3[217]][_0x37a3[102]](_0xcd70x29)&&_0xcd70x29[_0x37a3[98]][_0x37a3[267]]==_0xcd70x26){_0xcd70x28++}});return _0xcd70x28>1?false:true};EditorUi[_0x37a3[10]][_0x37a3[288]]=function(_0xcd70x18){var _0xcd70x1=this[_0x37a3[0]];if(_0xcd70x18!=null){var _0xcd70x2a=this[_0x37a3[215]]();if(_0xcd70x2a===null){var _0xcd70x14=mxUtils[_0x37a3[166]](this[_0x37a3[0]][_0x37a3[165]]());try{if(useLocalStorage){if(localStorage[_0x37a3[167]](_0xcd70x18)!=null&&!mxUtils[_0x37a3[169]](mxResources[_0x37a3[143]](_0x37a3[168],[_0xcd70x18]))){return};localStorage[_0x37a3[170]](_0xcd70x18,_0xcd70x14);this[_0x37a3[0]][_0x37a3[173]](mxResources[_0x37a3[143]](_0x37a3[171])+_0x37a3[172]+ new Date())}else {console[_0x37a3[103]](_0xcd70x14[_0x37a3[174]]);console[_0x37a3[103]](MAX_REQUEST_SIZE);if(_0xcd70x14[_0x37a3[174]]<MAX_REQUEST_SIZE){_0xcd70x14=encodeURIComponent(_0xcd70x14);var _0xcd70x19= new XMLHttpRequest();_0xcd70x19[_0x37a3[133]](_0x37a3[203],SAVE_URL+this[_0x37a3[0]][_0x37a3[163]][_0x37a3[191]],true);_0xcd70x19[_0x37a3[178]](_0x37a3[176],_0x37a3[177]);_0xcd70x19[_0x37a3[178]](_0x37a3[179],_0x37a3[180]+_0xcd70x1[_0x37a3[163]][_0x37a3[181]]);_0xcd70x19[_0x37a3[182]]=function(_0xcd70x1a){if(_0xcd70x19[_0x37a3[183]]===4){if(_0xcd70x19[_0x37a3[184]]===200){_0xcd70x1[_0x37a3[173]](_0x37a3[289]+JSON[_0x37a3[188]](_0xcd70x19[_0x37a3[187]])[_0x37a3[205]]+_0x37a3[206]+_0xcd70x19[_0x37a3[184]]+_0x37a3[172]+_0xcd70x19[_0x37a3[196]]+_0x37a3[44])}else {_0xcd70x1[_0x37a3[173]](_0x37a3[207]+JSON[_0x37a3[188]](_0xcd70x19[_0x37a3[187]])[_0x37a3[194]][0][_0x37a3[159]])}}};_0xcd70x19[_0x37a3[195]]=function(_0xcd70x1a){mxUtils[_0x37a3[160]](_0xcd70x19[_0x37a3[196]])};_0xcd70x19[_0x37a3[198]](_0x37a3[208]+_0xcd70x14+_0x37a3[214]+_0xcd70x14)}else {mxUtils[_0x37a3[160]](mxResources[_0x37a3[143]](_0x37a3[199]));mxUtils[_0x37a3[200]](_0xcd70x14);return}};this[_0x37a3[0]][_0x37a3[156]]=_0xcd70x18;this[_0x37a3[0]][_0x37a3[153]]=false}catch(e){this[_0x37a3[0]][_0x37a3[173]](_0x37a3[290])}}else {_0xcd70x1[_0x37a3[173]](_0x37a3[291])}}else {this[_0x37a3[0]][_0x37a3[173]](_0x37a3[290])}};EditorUi[_0x37a3[10]][_0x37a3[233]]=function(_0xcd70x18){var _0xcd70x1=this[_0x37a3[0]];if(_0xcd70x18!=null){try{var _0xcd70x19= new XMLHttpRequest();_0xcd70x19[_0x37a3[133]](_0x37a3[175],VARIABLE_URL,true);_0xcd70x19[_0x37a3[178]](_0x37a3[176],_0x37a3[177]);_0xcd70x19[_0x37a3[178]](_0x37a3[179],_0x37a3[180]+_0xcd70x1[_0x37a3[163]][_0x37a3[181]]);_0xcd70x19[_0x37a3[182]]=function(_0xcd70x1a){if(_0xcd70x19[_0x37a3[183]]===4){if(_0xcd70x19[_0x37a3[184]]===201){_0xcd70x1[_0x37a3[173]](_0x37a3[292]+JSON[_0x37a3[188]](_0xcd70x19[_0x37a3[187]])[_0x37a3[293]]+_0x37a3[206]+_0xcd70x19[_0x37a3[184]]+_0x37a3[172]+_0xcd70x19[_0x37a3[196]]+_0x37a3[44])}else {_0xcd70x1[_0x37a3[173]](_0x37a3[294]+JSON[_0x37a3[188]](_0xcd70x19[_0x37a3[187]])[_0x37a3[194]][0][_0x37a3[159]])}}};_0xcd70x19[_0x37a3[195]]=function(_0xcd70x1a){mxUtils[_0x37a3[160]](_0xcd70x19[_0x37a3[196]])};_0xcd70x19[_0x37a3[198]](_0x37a3[295]+_0xcd70x18)}catch(e){this[_0x37a3[0]][_0x37a3[173]](_0x37a3[296])}}else {this[_0x37a3[0]][_0x37a3[173]](_0x37a3[296])}};EditorUi[_0x37a3[10]][_0x37a3[297]]=function(_0xcd70x2b){var _0xcd70x2c=(_0xcd70x2b!=null)?_0xcd70x2b:window[_0x37a3[299]][_0x37a3[298]];var _0xcd70x2d=(_0xcd70x2c[_0x37a3[100]](_0x37a3[300])>0)?1:0;for(var _0xcd70x2e in urlParams){if(_0xcd70x2d==0){_0xcd70x2c+=_0x37a3[300]}else {_0xcd70x2c+=_0x37a3[301]};_0xcd70x2c+=_0xcd70x2e+_0x37a3[302]+urlParams[_0xcd70x2e];_0xcd70x2d++};return _0xcd70x2c};EditorUi[_0x37a3[10]][_0x37a3[140]]=function(){var _0xcd70x2f=this[_0x37a3[12]][_0x37a3[143]](_0x37a3[303]);var _0xcd70x30=this[_0x37a3[12]][_0x37a3[143]](_0x37a3[304]);var _0xcd70x31=this[_0x37a3[0]][_0x37a3[155]];var _0xcd70x32=function(){_0xcd70x2f[_0x37a3[145]](_0xcd70x31[_0x37a3[305]]());_0xcd70x30[_0x37a3[145]](_0xcd70x31[_0x37a3[306]]())};_0xcd70x31[_0x37a3[33]](mxEvent.ADD,_0xcd70x32);_0xcd70x31[_0x37a3[33]](mxEvent.UNDO,_0xcd70x32);_0xcd70x31[_0x37a3[33]](mxEvent.REDO,_0xcd70x32);_0xcd70x31[_0x37a3[33]](mxEvent.CLEAR,_0xcd70x32);_0xcd70x32()};EditorUi[_0x37a3[10]][_0x37a3[141]]=function(){var _0xcd70x33=mxUtils[_0x37a3[20]](this,function(){var _0xcd70x3=this[_0x37a3[0]][_0x37a3[4]];var _0xcd70x34=!_0xcd70x3[_0x37a3[307]]();var _0xcd70x35=false;var _0xcd70x36=false;var _0xcd70x37=_0xcd70x3[_0x37a3[308]]();if(_0xcd70x37!=null){for(var _0xcd70x38=0;_0xcd70x38<_0xcd70x37[_0x37a3[174]];_0xcd70x38++){var _0xcd70xb=_0xcd70x37[_0xcd70x38];if(_0xcd70x3[_0x37a3[96]]()[_0x37a3[95]](_0xcd70xb)){_0xcd70x36=true};if(_0xcd70x3[_0x37a3[96]]()[_0x37a3[102]](_0xcd70xb)){_0xcd70x35=true};if(_0xcd70x36&&_0xcd70x35){break}}};var _0xcd70x39=[_0x37a3[146],_0x37a3[147],_0x37a3[309],_0x37a3[310],_0x37a3[311],_0x37a3[312],_0x37a3[6],_0x37a3[313],_0x37a3[314],_0x37a3[315],_0x37a3[316],_0x37a3[317],_0x37a3[318],_0x37a3[319],_0x37a3[320]];for(var _0xcd70x38=0;_0xcd70x38<_0xcd70x39[_0x37a3[174]];_0xcd70x38++){this[_0x37a3[12]][_0x37a3[143]](_0xcd70x39[_0xcd70x38])[_0x37a3[145]](_0xcd70x34)};this[_0x37a3[12]][_0x37a3[143]](_0x37a3[321])[_0x37a3[145]](_0xcd70x36);this[_0x37a3[12]][_0x37a3[143]](_0x37a3[322])[_0x37a3[145]](_0xcd70x35);this[_0x37a3[12]][_0x37a3[143]](_0x37a3[323])[_0x37a3[145]](_0xcd70x35);this[_0x37a3[12]][_0x37a3[143]](_0x37a3[325])[_0x37a3[145]](_0xcd70x3[_0x37a3[324]]()>1);this[_0x37a3[12]][_0x37a3[143]](_0x37a3[327])[_0x37a3[145]](_0xcd70x3[_0x37a3[324]]()==1&&_0xcd70x3[_0x37a3[96]]()[_0x37a3[218]](_0xcd70x3[_0x37a3[326]]())>0);var _0xcd70x3a=_0xcd70x35&&_0xcd70x3[_0x37a3[324]]()==1;this[_0x37a3[12]][_0x37a3[143]](_0x37a3[328])[_0x37a3[145]](_0xcd70x3a&&_0xcd70x3[_0x37a3[96]]()[_0x37a3[102]](_0xcd70x3[_0x37a3[96]]()[_0x37a3[285]](_0xcd70x3[_0x37a3[326]]())));var _0xcd70x3b=[_0x37a3[329],_0x37a3[330],_0x37a3[331],_0x37a3[332],_0x37a3[246],_0x37a3[333],_0x37a3[334],_0x37a3[335],_0x37a3[336]];for(var _0xcd70x38=0;_0xcd70x38<_0xcd70x3b[_0x37a3[174]];_0xcd70x38++){this[_0x37a3[13]][_0x37a3[143]](_0xcd70x3b[_0xcd70x38])[_0x37a3[145]](_0xcd70x34)};_0xcd70x3b=[_0x37a3[337],_0x37a3[338],_0x37a3[339]];for(var _0xcd70x38=0;_0xcd70x38<_0xcd70x3b[_0x37a3[174]];_0xcd70x38++){this[_0x37a3[13]][_0x37a3[143]](_0xcd70x3b[_0xcd70x38])[_0x37a3[145]](_0xcd70x36)};this[_0x37a3[12]][_0x37a3[143]](_0x37a3[340])[_0x37a3[145]](_0xcd70x36);this[_0x37a3[13]][_0x37a3[143]](_0x37a3[341])[_0x37a3[145]](_0xcd70x3[_0x37a3[324]]()>1);this[_0x37a3[13]][_0x37a3[143]](_0x37a3[344])[_0x37a3[145]](_0xcd70x35||(_0xcd70x36&&_0xcd70x3[_0x37a3[343]](_0xcd70x3[_0x37a3[120]][_0x37a3[342]](_0xcd70x3[_0x37a3[326]]()))));this[_0x37a3[13]][_0x37a3[143]](_0x37a3[347])[_0x37a3[145]](_0xcd70x3[_0x37a3[345]]&&((_0xcd70x3[_0x37a3[120]][_0x37a3[346]]!=null)||(_0xcd70x3[_0x37a3[324]]()==1&&_0xcd70x3[_0x37a3[220]](_0xcd70x3[_0x37a3[326]]()))));this[_0x37a3[12]][_0x37a3[143]](_0x37a3[348])[_0x37a3[145]](_0xcd70x3[_0x37a3[120]][_0x37a3[346]]!=null);this[_0x37a3[12]][_0x37a3[143]](_0x37a3[349])[_0x37a3[145]](_0xcd70x3[_0x37a3[120]][_0x37a3[346]]!=null);var _0xcd70x3c=_0xcd70x3[_0x37a3[324]]()==1&&_0xcd70x3[_0x37a3[220]](_0xcd70x3[_0x37a3[326]]());this[_0x37a3[12]][_0x37a3[143]](_0x37a3[350])[_0x37a3[145]](_0xcd70x3c);this[_0x37a3[12]][_0x37a3[143]](_0x37a3[351])[_0x37a3[145]](_0xcd70x3c);this[_0x37a3[12]][_0x37a3[143]](_0x37a3[352])[_0x37a3[145]](_0xcd70x3c);this[_0x37a3[12]][_0x37a3[143]](_0x37a3[353])[_0x37a3[145]](_0xcd70x3[_0x37a3[324]]()==1);this[_0x37a3[12]][_0x37a3[143]](_0x37a3[355])[_0x37a3[145]](_0xcd70x3[_0x37a3[324]]()==1&&_0xcd70x3[_0x37a3[354]](_0xcd70x3[_0x37a3[326]]())!=null)});this[_0x37a3[0]][_0x37a3[4]][_0x37a3[356]]()[_0x37a3[33]](mxEvent.CHANGE,_0xcd70x33);_0xcd70x33()};EditorUi[_0x37a3[10]][_0x37a3[15]]=function(){var _0xcd70x3d=mxClient[_0x37a3[29]]&&(document[_0x37a3[30]]==null||document[_0x37a3[30]]==5);var _0xcd70x3e=this[_0x37a3[1]][_0x37a3[357]];var _0xcd70x3f=this[_0x37a3[1]][_0x37a3[358]];if(this[_0x37a3[1]]==document[_0x37a3[21]]){_0xcd70x3e=document[_0x37a3[21]][_0x37a3[357]]||document[_0x37a3[151]][_0x37a3[357]];_0xcd70x3f=(_0xcd70x3d)?document[_0x37a3[21]][_0x37a3[358]]||document[_0x37a3[151]][_0x37a3[358]]:document[_0x37a3[151]][_0x37a3[358]]};var _0xcd70x40=Math[_0x37a3[360]](0,Math[_0x37a3[359]](this[_0x37a3[138]],_0xcd70x3e-this[_0x37a3[134]]-20));var _0xcd70x41=Math[_0x37a3[360]](0,Math[_0x37a3[359]](this[_0x37a3[139]],_0xcd70x3f-this[_0x37a3[135]]-this[_0x37a3[136]]-this[_0x37a3[137]]-this[_0x37a3[134]]-1));this[_0x37a3[23]][_0x37a3[6]][_0x37a3[361]]=this[_0x37a3[135]]+_0x37a3[362];this[_0x37a3[25]][_0x37a3[6]][_0x37a3[363]]=this[_0x37a3[135]]+_0x37a3[362];this[_0x37a3[25]][_0x37a3[6]][_0x37a3[361]]=this[_0x37a3[136]]+_0x37a3[362];var _0xcd70x42=this[_0x37a3[135]]+this[_0x37a3[136]];if(!mxClient[_0x37a3[364]]){_0xcd70x42+=1};this[_0x37a3[27]][_0x37a3[6]][_0x37a3[363]]=_0xcd70x42+_0x37a3[362];this[_0x37a3[27]][_0x37a3[6]][_0x37a3[365]]=_0xcd70x40+_0x37a3[362];this[_0x37a3[110]][_0x37a3[6]][_0x37a3[365]]=_0xcd70x40+_0x37a3[362];this[_0x37a3[110]][_0x37a3[6]][_0x37a3[361]]=_0xcd70x41+_0x37a3[362];this[_0x37a3[110]][_0x37a3[6]][_0x37a3[366]]=this[_0x37a3[137]]+_0x37a3[362];this[_0x37a3[26]][_0x37a3[6]][_0x37a3[367]]=(_0xcd70x40+this[_0x37a3[134]])+_0x37a3[362];this[_0x37a3[26]][_0x37a3[6]][_0x37a3[363]]=this[_0x37a3[27]][_0x37a3[6]][_0x37a3[363]];this[_0x37a3[28]][_0x37a3[6]][_0x37a3[361]]=this[_0x37a3[137]]+_0x37a3[362];this[_0x37a3[28]][_0x37a3[6]][_0x37a3[368]]=_0x37a3[369];this[_0x37a3[370]][_0x37a3[6]][_0x37a3[363]]=this[_0x37a3[27]][_0x37a3[6]][_0x37a3[363]];this[_0x37a3[370]][_0x37a3[6]][_0x37a3[366]]=this[_0x37a3[110]][_0x37a3[6]][_0x37a3[366]];this[_0x37a3[370]][_0x37a3[6]][_0x37a3[367]]=_0xcd70x40+_0x37a3[362];this[_0x37a3[371]][_0x37a3[6]][_0x37a3[365]]=this[_0x37a3[27]][_0x37a3[6]][_0x37a3[365]];this[_0x37a3[371]][_0x37a3[6]][_0x37a3[366]]=(_0xcd70x41+this[_0x37a3[137]])+_0x37a3[362];if(_0xcd70x3d){this[_0x37a3[23]][_0x37a3[6]][_0x37a3[365]]=_0xcd70x3e+_0x37a3[362];this[_0x37a3[25]][_0x37a3[6]][_0x37a3[365]]=this[_0x37a3[23]][_0x37a3[6]][_0x37a3[365]];var _0xcd70x43=(_0xcd70x3f-_0xcd70x41-this[_0x37a3[134]]-this[_0x37a3[137]]-this[_0x37a3[135]]-this[_0x37a3[136]]);this[_0x37a3[27]][_0x37a3[6]][_0x37a3[361]]=_0xcd70x43+_0x37a3[362];this[_0x37a3[26]][_0x37a3[6]][_0x37a3[365]]=(_0xcd70x3e-_0xcd70x40-this[_0x37a3[134]])+_0x37a3[362];var _0xcd70x44=(_0xcd70x3f-this[_0x37a3[137]]-this[_0x37a3[135]]-this[_0x37a3[136]]);this[_0x37a3[26]][_0x37a3[6]][_0x37a3[361]]=_0xcd70x44+_0x37a3[362];this[_0x37a3[28]][_0x37a3[6]][_0x37a3[365]]=this[_0x37a3[23]][_0x37a3[6]][_0x37a3[365]];this[_0x37a3[370]][_0x37a3[6]][_0x37a3[361]]=_0xcd70x44+_0x37a3[362]}else {this[_0x37a3[27]][_0x37a3[6]][_0x37a3[366]]=(_0xcd70x41+this[_0x37a3[134]]+this[_0x37a3[137]])+_0x37a3[362];this[_0x37a3[26]][_0x37a3[6]][_0x37a3[366]]=this[_0x37a3[110]][_0x37a3[6]][_0x37a3[366]]}};EditorUi[_0x37a3[10]][_0x37a3[14]]=function(){this[_0x37a3[23]]=this[_0x37a3[373]](_0x37a3[372]);this[_0x37a3[25]]=this[_0x37a3[373]](_0x37a3[374]);this[_0x37a3[27]]=this[_0x37a3[373]](_0x37a3[375]);this[_0x37a3[110]]=this[_0x37a3[373]](_0x37a3[376]);this[_0x37a3[26]]=this[_0x37a3[373]](_0x37a3[377]);this[_0x37a3[28]]=this[_0x37a3[373]](_0x37a3[378]);this[_0x37a3[370]]=this[_0x37a3[373]](_0x37a3[379]);this[_0x37a3[371]]=this[_0x37a3[373]](_0x37a3[380]);this[_0x37a3[23]][_0x37a3[6]][_0x37a3[363]]=_0x37a3[381];this[_0x37a3[23]][_0x37a3[6]][_0x37a3[367]]=_0x37a3[381];this[_0x37a3[23]][_0x37a3[6]][_0x37a3[382]]=_0x37a3[381];this[_0x37a3[25]][_0x37a3[6]][_0x37a3[367]]=_0x37a3[381];this[_0x37a3[25]][_0x37a3[6]][_0x37a3[382]]=_0x37a3[381];this[_0x37a3[27]][_0x37a3[6]][_0x37a3[367]]=_0x37a3[381];this[_0x37a3[110]][_0x37a3[6]][_0x37a3[367]]=_0x37a3[381];this[_0x37a3[26]][_0x37a3[6]][_0x37a3[382]]=_0x37a3[381];this[_0x37a3[28]][_0x37a3[6]][_0x37a3[367]]=_0x37a3[381];this[_0x37a3[28]][_0x37a3[6]][_0x37a3[382]]=_0x37a3[381];this[_0x37a3[28]][_0x37a3[6]][_0x37a3[366]]=_0x37a3[381];this[_0x37a3[371]][_0x37a3[6]][_0x37a3[367]]=_0x37a3[381];this[_0x37a3[371]][_0x37a3[6]][_0x37a3[361]]=this[_0x37a3[134]]+_0x37a3[362];this[_0x37a3[370]][_0x37a3[6]][_0x37a3[365]]=this[_0x37a3[134]]+_0x37a3[362]};EditorUi[_0x37a3[10]][_0x37a3[16]]=function(){this[_0x37a3[383]]=this[_0x37a3[13]][_0x37a3[385]](this[_0x37a3[373]](_0x37a3[384]));this[_0x37a3[23]][_0x37a3[386]](this[_0x37a3[383]][_0x37a3[1]]);this[_0x37a3[387]]=this[_0x37a3[389]](this[_0x37a3[373]](_0x37a3[388]));this[_0x37a3[25]][_0x37a3[386]](this[_0x37a3[387]][_0x37a3[1]]);this[_0x37a3[390]]=this[_0x37a3[391]](this[_0x37a3[27]]);this[_0x37a3[28]][_0x37a3[386]](this[_0x37a3[392]]());this[_0x37a3[393]]=this[_0x37a3[394]]();this[_0x37a3[0]][_0x37a3[33]](_0x37a3[395],mxUtils[_0x37a3[20]](this,function(){this[_0x37a3[397]](this[_0x37a3[0]][_0x37a3[396]]())}));this[_0x37a3[397]](this[_0x37a3[0]][_0x37a3[396]]());this[_0x37a3[383]][_0x37a3[1]][_0x37a3[386]](this[_0x37a3[393]]);this[_0x37a3[1]][_0x37a3[386]](this[_0x37a3[23]]);this[_0x37a3[1]][_0x37a3[386]](this[_0x37a3[25]]);this[_0x37a3[1]][_0x37a3[386]](this[_0x37a3[27]]);this[_0x37a3[1]][_0x37a3[386]](this[_0x37a3[110]]);this[_0x37a3[1]][_0x37a3[386]](this[_0x37a3[26]]);this[_0x37a3[1]][_0x37a3[386]](this[_0x37a3[28]]);this[_0x37a3[1]][_0x37a3[386]](this[_0x37a3[370]]);this[_0x37a3[1]][_0x37a3[386]](this[_0x37a3[371]]);this[_0x37a3[398]](this[_0x37a3[370]],true,0,mxUtils[_0x37a3[20]](this,function(_0xcd70x45){this[_0x37a3[138]]=_0xcd70x45;this[_0x37a3[15]]();this[_0x37a3[0]][_0x37a3[4]][_0x37a3[131]]();this[_0x37a3[0]][_0x37a3[111]][_0x37a3[132]](false);this[_0x37a3[0]][_0x37a3[111]][_0x37a3[111]][_0x37a3[131]]()}));this[_0x37a3[398]](this[_0x37a3[371]],false,this[_0x37a3[137]],mxUtils[_0x37a3[20]](this,function(_0xcd70x45){this[_0x37a3[139]]=_0xcd70x45;this[_0x37a3[15]]();this[_0x37a3[0]][_0x37a3[111]][_0x37a3[132]](false);this[_0x37a3[0]][_0x37a3[111]][_0x37a3[111]][_0x37a3[131]]()}))};EditorUi[_0x37a3[10]][_0x37a3[394]]=function(){var _0xcd70x2=document[_0x37a3[400]](_0x37a3[399]);_0xcd70x2[_0x37a3[401]]=_0x37a3[402];return _0xcd70x2};EditorUi[_0x37a3[10]][_0x37a3[394]]=function(){var _0xcd70x2=document[_0x37a3[400]](_0x37a3[399]);_0xcd70x2[_0x37a3[401]]=_0x37a3[402];return _0xcd70x2};EditorUi[_0x37a3[10]][_0x37a3[397]]=function(_0xcd70x45){this[_0x37a3[393]][_0x37a3[403]]=_0xcd70x45};EditorUi[_0x37a3[10]][_0x37a3[389]]=function(_0xcd70x2){return  new Toolbar(this,_0xcd70x2)};EditorUi[_0x37a3[10]][_0x37a3[391]]=function(_0xcd70x2){return  new Sidebar(this,_0xcd70x2)};EditorUi[_0x37a3[10]][_0x37a3[392]]=function(){return this[_0x37a3[373]](_0x37a3[404])};EditorUi[_0x37a3[10]][_0x37a3[373]]=function(_0xcd70x46){var _0xcd70x47=document[_0x37a3[400]](_0x37a3[405]);_0xcd70x47[_0x37a3[401]]=_0xcd70x46;return _0xcd70x47};EditorUi[_0x37a3[10]][_0x37a3[406]]=function(_0xcd70x46){var _0xcd70x47=document[_0x37a3[400]](_0xcd70x46);return _0xcd70x47};EditorUi[_0x37a3[10]][_0x37a3[407]]=function(_0xcd70x46){var _0xcd70x47=document[_0x37a3[400]](_0x37a3[408]);_0xcd70x47[_0x37a3[401]]=_0xcd70x46;return _0xcd70x47};EditorUi[_0x37a3[10]][_0x37a3[398]]=function(_0xcd70x47,_0xcd70x48,_0xcd70x49,_0xcd70x4a){var _0xcd70x4b=null;var _0xcd70x4c=null;function _0xcd70x4d(){return parseInt(((_0xcd70x48)?_0xcd70x47[_0x37a3[6]][_0x37a3[367]]:_0xcd70x47[_0x37a3[6]][_0x37a3[366]]))}function _0xcd70x4e(_0xcd70x6){if(_0xcd70x4b!=null){var _0xcd70x4f= new mxPoint(mxEvent[_0x37a3[409]](_0xcd70x6),mxEvent[_0x37a3[410]](_0xcd70x6));_0xcd70x4a(Math[_0x37a3[360]](0,_0xcd70x4c+((_0xcd70x48)?(_0xcd70x4f[_0x37a3[411]]-_0xcd70x4b[_0x37a3[411]]):(_0xcd70x4b[_0x37a3[412]]-_0xcd70x4f[_0x37a3[412]]))-_0xcd70x49));mxEvent[_0x37a3[105]](_0xcd70x6)}}function _0xcd70x50(_0xcd70x6){_0xcd70x4e(_0xcd70x6);_0xcd70x4b=null;_0xcd70x4c=null}mxEvent[_0x37a3[113]](_0xcd70x47,function(_0xcd70x6){_0xcd70x4b= new mxPoint(mxEvent[_0x37a3[409]](_0xcd70x6),mxEvent[_0x37a3[410]](_0xcd70x6));_0xcd70x4c=_0xcd70x4d();mxEvent[_0x37a3[105]](_0xcd70x6)});mxEvent[_0x37a3[33]](document,_0x37a3[413],_0xcd70x4e);mxEvent[_0x37a3[33]](document,_0x37a3[414],_0xcd70x4e);mxEvent[_0x37a3[33]](document,_0x37a3[415],_0xcd70x50);mxEvent[_0x37a3[33]](document,_0x37a3[416],_0xcd70x50)};EditorUi[_0x37a3[10]][_0x37a3[104]]=function(_0xcd70x47,_0xcd70x3e,_0xcd70x3f,_0xcd70x51,_0xcd70x52,_0xcd70x53){this[_0x37a3[417]]();this[_0x37a3[418]]= new Dialog(this,_0xcd70x47,_0xcd70x3e,(mxClient[_0x37a3[419]])?_0xcd70x3f-12:_0xcd70x3f,_0xcd70x51,_0xcd70x52,_0xcd70x53)};EditorUi[_0x37a3[10]][_0x37a3[417]]=function(){if(this[_0x37a3[418]]!=null){this[_0x37a3[418]][_0x37a3[420]]();this[_0x37a3[418]]=null;this[_0x37a3[0]][_0x37a3[4]][_0x37a3[1]][_0x37a3[47]]()}};EditorUi[_0x37a3[10]][_0x37a3[421]]=function(_0xcd70x54){if(!_0xcd70x54&&this[_0x37a3[0]][_0x37a3[156]]!=null){this[_0x37a3[202]](this[_0x37a3[0]][_0x37a3[422]]())}else {this[_0x37a3[104]]( new SaveDialog(this)[_0x37a3[1]],300,100,true,true)}};EditorUi[_0x37a3[10]][_0x37a3[423]]=function(_0xcd70x54){if(!_0xcd70x54&&this[_0x37a3[0]][_0x37a3[156]]!=null){this[_0x37a3[288]](this[_0x37a3[0]][_0x37a3[422]]())}else {}};EditorUi[_0x37a3[10]][_0x37a3[424]]=function(_0xcd70x55,_0xcd70x56,_0xcd70x57){var _0xcd70x3=this[_0x37a3[0]][_0x37a3[4]];var _0xcd70xb=_0xcd70x3[_0x37a3[326]]();_0xcd70x56=this[_0x37a3[425]]!=null?this[_0x37a3[425]]:_0xcd70x56;_0xcd70x3[_0x37a3[96]]()[_0x37a3[426]]();try{_0xcd70x55[_0x37a3[427]](_0xcd70x3[_0x37a3[286]](),_0xcd70xb)}catch(e){throw e}finally{if(_0xcd70x56&&navigator[_0x37a3[429]][_0x37a3[100]](_0x37a3[428])<0){var _0xcd70x58= new mxMorphing(_0xcd70x3);_0xcd70x58[_0x37a3[33]](mxEvent.DONE,mxUtils[_0x37a3[20]](this,function(){_0xcd70x3[_0x37a3[96]]()[_0x37a3[430]]()}));_0xcd70x58[_0x37a3[431]]()}else {_0xcd70x3[_0x37a3[96]]()[_0x37a3[430]]()}}};EditorUi[_0x37a3[10]][_0x37a3[128]]=function(_0xcd70x1){var _0xcd70x3=this[_0x37a3[0]][_0x37a3[4]];var _0xcd70xf= new mxKeyHandler(_0xcd70x3);_0xcd70xf[_0x37a3[432]]=function(_0xcd70x6){return mxEvent[_0x37a3[432]](_0xcd70x6)||(mxClient[_0x37a3[433]]&&_0xcd70x6[_0x37a3[434]])};function _0xcd70x59(_0xcd70x5a){if(!_0xcd70x3[_0x37a3[307]]()){var _0xcd70x49=0;var _0xcd70x5b=0;if(_0xcd70x5a==37){_0xcd70x49= -1}else {if(_0xcd70x5a==38){_0xcd70x5b= -1}else {if(_0xcd70x5a==39){_0xcd70x49=1}else {if(_0xcd70x5a==40){_0xcd70x5b=1}}}};_0xcd70x3[_0x37a3[435]](_0xcd70x3[_0x37a3[308]](),_0xcd70x49,_0xcd70x5b);_0xcd70x3[_0x37a3[436]](_0xcd70x3[_0x37a3[326]]())}}var _0xcd70x5c=mxUtils[_0x37a3[20]](this,function(_0xcd70x5d,_0xcd70x5e,_0xcd70x2e,_0xcd70x5f){var _0xcd70x60=this[_0x37a3[12]][_0x37a3[143]](_0xcd70x2e);if(_0xcd70x60!=null){var _0xcd70x1f=function(){if(_0xcd70x60[_0x37a3[437]]){_0xcd70x60[_0x37a3[438]]()}};if(_0xcd70x5e){if(_0xcd70x5f){_0xcd70xf[_0x37a3[439]](_0xcd70x5d,_0xcd70x1f)}else {_0xcd70xf[_0x37a3[440]](_0xcd70x5d,_0xcd70x1f)}}else {if(_0xcd70x5f){_0xcd70xf[_0x37a3[441]](_0xcd70x5d,_0xcd70x1f)}else {_0xcd70xf[_0x37a3[442]](_0xcd70x5d,_0xcd70x1f)}}}});var _0xcd70x61=this;var _0xcd70x62=_0xcd70xf[_0x37a3[443]];_0xcd70xf[_0x37a3[443]]=function(_0xcd70x6){_0xcd70x61[_0x37a3[417]]();_0xcd70x62[_0x37a3[50]](this,arguments)};_0xcd70xf[_0x37a3[444]]=function(){};_0xcd70xf[_0x37a3[442]](8,function(){_0xcd70x3[_0x37a3[445]](true)});_0xcd70xf[_0x37a3[442]](13,function(){_0xcd70x3[_0x37a3[445]](false)});_0xcd70xf[_0x37a3[442]](33,function(){_0xcd70x3[_0x37a3[349]]()});_0xcd70xf[_0x37a3[442]](34,function(){_0xcd70x3[_0x37a3[350]]()});_0xcd70xf[_0x37a3[442]](36,function(){_0xcd70x3[_0x37a3[348]]()});_0xcd70xf[_0x37a3[442]](35,function(){_0xcd70x3[_0x37a3[15]]()});_0xcd70xf[_0x37a3[442]](37,function(){_0xcd70x59(37)});_0xcd70xf[_0x37a3[442]](38,function(){_0xcd70x59(38)});_0xcd70xf[_0x37a3[442]](39,function(){_0xcd70x59(39)});_0xcd70xf[_0x37a3[442]](40,function(){_0xcd70x59(40)});_0xcd70xf[_0x37a3[442]](113,function(){_0xcd70x3[_0x37a3[101]]()});_0xcd70x5c(46,false,_0x37a3[309]);_0xcd70x5c(82,true,_0x37a3[319]);_0xcd70x5c(83,true,_0x37a3[202]);_0xcd70x5c(83,true,_0x37a3[210],true);_0xcd70x5c(107,false,_0x37a3[446]);_0xcd70x5c(109,false,_0x37a3[447]);_0xcd70x5c(65,true,_0x37a3[448]);_0xcd70x5c(86,true,_0x37a3[449],true);_0xcd70x5c(69,true,_0x37a3[450],true);_0xcd70x5c(69,true,_0x37a3[451]);_0xcd70x5c(66,true,_0x37a3[315]);_0xcd70x5c(70,true,_0x37a3[314]);_0xcd70x5c(68,true,_0x37a3[310]);_0xcd70x5c(90,true,_0x37a3[303]);_0xcd70x5c(89,true,_0x37a3[304]);_0xcd70x5c(88,true,_0x37a3[146]);_0xcd70x5c(67,true,_0x37a3[147]);_0xcd70x5c(81,true,_0x37a3[452]);_0xcd70x5c(86,true,_0x37a3[142]);_0xcd70x5c(71,true,_0x37a3[325]);_0xcd70x5c(71,true,_0x37a3[453],true);_0xcd70x5c(85,true,_0x37a3[327]);_0xcd70x5c(112,false,_0x37a3[454]);_0xcd70x5c(80,true,_0x37a3[288],true);return _0xcd70xf};EditorUi[_0x37a3[10]][_0x37a3[56]]=function(_0xcd70x3,_0xcd70x37,_0xcd70x63,_0xcd70x64){for(var _0xcd70x38=0;_0xcd70x38<_0xcd70x37[_0x37a3[174]];_0xcd70x38++){_0xcd70x3[_0x37a3[457]]( new mxMultiplicity(true,_0xcd70x37[_0xcd70x38],null,null,_0xcd70x63[_0xcd70x38][0],_0xcd70x63[_0xcd70x38][1],null,mxResources[_0x37a3[143]](_0xcd70x37[_0xcd70x38])+mxResources[_0x37a3[143]](_0x37a3[455])+_0xcd70x63[_0xcd70x38][0]+mxResources[_0x37a3[143]](_0x37a3[456]),null));_0xcd70x3[_0x37a3[457]]( new mxMultiplicity(false,_0xcd70x37[_0xcd70x38],null,null,_0xcd70x64[_0xcd70x38][0],_0xcd70x64[_0xcd70x38][1],null,mxResources[_0x37a3[143]](_0xcd70x37[_0xcd70x38])+mxResources[_0x37a3[143]](_0x37a3[455])+_0xcd70x64[_0xcd70x38][0]+mxResources[_0x37a3[143]](_0x37a3[458]),null))}}
\ No newline at end of file
+/**
+ * $Id: EditorUi.js,v 1.21 2013/03/14 20:46:36 david Exp $
+ * Copyright (c) 2006-2012, JGraph Ltd
+ */
+/**
+ * Constructs a new graph editor
+ */
+EditorUi = function(editor, container) {
+       this.editor = editor || new Editor();
+       this.container = container || document.getElementById('geEditor');
+       var graph = editor.graph;
+       var self = this;
+
+       // Disables scrollbars
+       this.container.style.overflow = 'hidden';
+
+       // Pre-fetches submenu image
+       new Image().src = mxPopupMenu.prototype.submenuImage;
+
+       // Pre-fetches connect image
+       if (mxConnectionHandler.prototype.connectImage != null) {
+               new Image().src = mxConnectionHandler.prototype.connectImage.src;
+       }
+
+       // Creates the user interface
+       this.actions = new Actions(this);
+       this.menus = new Menus(this);
+       this.createDivs();
+       this.refresh();
+       this.createUi();
+
+       // Disables HTML and text selection
+       var textEditing = mxUtils.bind(this, function(evt) {
+               if (evt == null) {
+                       evt = window.event;
+               }
+
+               if (this.isSelectionAllowed(evt)) {
+                       return true;
+               }
+
+               return graph.isEditing();
+       });
+
+       // Disables text selection while not editing and no dialog visible
+       if (this.container == document.body) {
+               this.menubarContainer.onselectstart = textEditing;
+               this.menubarContainer.onmousedown = textEditing;
+               this.toolbarContainer.onselectstart = textEditing;
+               this.toolbarContainer.onmousedown = textEditing;
+               this.diagramContainer.onselectstart = textEditing;
+               this.diagramContainer.onmousedown = textEditing;
+               this.sidebarContainer.onselectstart = textEditing;
+               this.sidebarContainer.onmousedown = textEditing;
+               this.footerContainer.onselectstart = textEditing;
+               this.footerContainer.onmousedown = textEditing;
+       }
+
+       // And uses built-in context menu while editing
+       if (mxClient.IS_IE && (typeof(document.documentMode) === 'undefined' ||
+                       document.documentMode < 9)) {
+               mxEvent.addListener(this.diagramContainer, 'contextmenu', textEditing);
+               mxEvent.addListener(this.sidebarContainer, 'contextmenu', textEditing);
+       } else {
+               // Allows browser context menu outside of diagram and sidebar
+               this.diagramContainer.oncontextmenu = textEditing;
+               this.sidebarContainer.oncontextmenu = textEditing;
+       }
+
+       // Contains the main graph instance inside the given panel
+       graph.init(this.diagramContainer);
+       graph.refresh();
+
+       // Enables scrollbars and sets cursor style for the container
+       graph.container.setAttribute('tabindex', '0');
+       // graph.container.style.overflow = (touchStyle) ? 'hidden' : 'auto';
+       graph.container.style.cursor = 'default';
+       graph.container.style.backgroundImage = 'url(' + editor.gridImage + ')';
+       graph.container.style.backgroundPosition = '-1px -1px';
+       graph.container.focus();
+
+       // Keeps graph container focused on mouse down
+       var graphFireMouseEvent = graph.fireMouseEvent;
+       graph.fireMouseEvent = function(evtName, me, sender) {
+               if (evtName == mxEvent.MOUSE_DOWN) {
+                       this.container.focus();
+               }
+
+               graphFireMouseEvent.apply(this, arguments);
+       };
+
+       // Giuseppe Careri
+       // Defines invalid connections along with the error messages that they produce.
+       this.createMultiplicities(graph.multiplicities, ['start', 'finally', 'end'], [
+               [1, 1],
+               [1, 1],
+               [0, 0]
+       ], [
+               [0, 0],
+               [0, 0],
+               [1, 'n']
+       ]);
+       this.createMultiplicities(graph.multiplicities, ['answer', 'hangup', 'dial',
+               'ext_dial', 'queue', 'voicemail', 'callback'
+       ], [
+               [1, 1],
+               [0, 0],
+               [0, 1],
+               [0, 1],
+               [0, 1],
+               [1, 1],
+               [0, 1]
+       ], [
+               [1, 'n'],
+               [1, 'n'],
+               [1, 'n'],
+               [1, 'n'],
+               [1, 'n'],
+               [1, 'n'],
+               [1, 'n']
+       ]);
+       this.createMultiplicities(graph.multiplicities, ['set', 'math'], [
+               [1, 1],
+               [1, 1]
+       ], [
+               [1, 'n'],
+               [1, 'n']
+       ]);
+       this.createMultiplicities(graph.multiplicities, ['background', 'playback',
+               'menu', 'saydigits', 'saynumber', 'sayphonetic', 'tts', 'ispeechtts', 'getdigits'
+       ], [
+               [1, 'n'],
+               [1, 1],
+               [1, 'n'],
+               [1, 1],
+               [1, 1],
+               [1, 1],
+               [1, 1],
+               [1, 1],
+               [1, 'n']
+       ], [
+               [1, 'n'],
+               [1, 'n'],
+               [1, 'n'],
+               [1, 'n'],
+               [1, 'n'],
+               [1, 'n'],
+               [1, 'n'],
+               [1, 'n'],
+               [1, 'n']
+       ]);
+       this.createMultiplicities(graph.multiplicities, ['record'], [
+               [1, 1]
+       ], [
+               [1, 'n']
+       ]);
+       this.createMultiplicities(graph.multiplicities, ['database', 'ispeechasr'], [
+               [1, 1],
+               [1, 1]
+       ], [
+               [1, 'n'],
+               [1, 'n']
+       ]);
+       this.createMultiplicities(graph.multiplicities, ['gotoc', 'gotoif',
+               'gotoiftime', 'gotoifmultitime', 'vswitch'
+       ], [
+               [0, 0],
+               [1, 2],
+               [1, 2],
+               [1, 2],
+               [1, 'n']
+       ], [
+               [1, 'n'],
+               [1, 'n'],
+               [1, 'n'],
+               [1, 'n'],
+               [1, 'n']
+       ]);
+       this.createMultiplicities(graph.multiplicities, ['queuelog', 'goal'], [
+               [1, 1],
+               [1, 1]
+       ], [
+               [1, 'n'],
+               [1, 'n']
+       ]);
+       this.createMultiplicities(graph.multiplicities, ['noop', 'system', 'agi',
+               'subproject', 'custom_app'
+       ], [
+               [1, 1],
+               [1, 1],
+               [0, 1],
+               [0, 1],
+               [0, 1]
+       ], [
+               [1, 'n'],
+               [1, 'n'],
+               [1, 'n'],
+               [1, 'n'],
+               [1, 'n']
+       ]);
+
+       // Giuseppe Careri
+       // Processes a doubleclick on an optional cell and fires a <dblclick> event.
+       // The event is fired initially.
+       // If the graph is enabled and the event has not been consumed, then <edit> is called with the given cell.
+       // The event is ignored if no cell was specified.
+       graph.dblClick = function(evt, cell) {
+               var edges = ['background', 'gotoif', 'gotoiftime', 'menu', 'getdigits', 'vswitch'];
+               var mxe = new mxEventObject(mxEvent.DOUBLE_CLICK, 'event', evt, 'cell',
+                       cell);
+               this.fireEvent(mxe);
+
+               if (this.isEnabled() && !mxEvent.isConsumed(evt) && !mxe.isConsumed()) {
+                       // Override dblClick Vertices and Edges
+                       if (this.getModel().isEdge(cell)) {
+                               if (edges.indexOf(cell.source.value.tagName) >= 0)
+                                       this.startEditingAtCell(cell);
+                       } else if (this.getModel().isVertex(cell)) {
+                               console.log(self);
+                               console.log(cell);
+                               self.showDialog(new GeneralDialog(self, cell).container, 320, 280, true,
+                                       true);
+                       }
+                       mxe.consume();
+               }
+       }
+
+       // Configures automatic expand on mouseover
+       graph.panningHandler.autoExpand = true;
+
+       // Installs context menu
+       graph.panningHandler.factoryMethod = mxUtils.bind(this, function(menu, cell,
+               evt) {
+               this.menus.createPopupMenu(menu, cell, evt);
+       });
+
+       // Initializes the outline
+       editor.outline.init(this.outlineContainer);
+
+       // Hides context menu
+       mxEvent.addGestureListeners(document, mxUtils.bind(this, function(evt) {
+               graph.panningHandler.hideMenu();
+       }));
+
+       // Adds gesture handling (pinch to zoom)
+       if (mxClient.IS_TOUCH) {
+               mxEvent.addListener(graph.container, 'gesturechange',
+                       mxUtils.bind(this, function(evt) {
+                               graph.view.getDrawPane().setAttribute('transform', 'scale(' + evt.scale +
+                                       ')');
+                               graph.view.getOverlayPane().style.visibility = 'hidden';
+                       })
+               );
+
+               mxEvent.addListener(graph.container, 'gestureend',
+                       mxUtils.bind(this, function(evt) {
+                               graph.view.getDrawPane().removeAttribute('transform');
+                               graph.zoomToCenter = true;
+                               graph.zoom(evt.scale);
+                               graph.view.getOverlayPane().style.visibility = 'visible';
+                       })
+               );
+       }
+
+       // Create handler for key events
+       var keyHandler = this.createKeyHandler(editor);
+
+       // Getter for key handler
+       this.getKeyHandler = function() {
+               return keyHandler;
+       };
+
+       // Updates the editor UI after the window has been resized
+       mxEvent.addListener(window, 'resize', mxUtils.bind(this, function() {
+               this.refresh();
+               graph.sizeDidChange();
+               this.editor.outline.update(false);
+               this.editor.outline.outline.sizeDidChange();
+       }));
+
+       // Updates action and menu states
+       this.init();
+       this.open();
+};
+
+/**
+ * Specifies the size of the split bar.
+ */
+EditorUi.prototype.splitSize = (mxClient.IS_TOUCH) ? 16 : 8;
+
+/**
+ * Specifies the height of the menubar. Default is 34.
+ */
+EditorUi.prototype.menubarHeight = 33;
+
+/**
+ * Specifies the height of the toolbar. Default is 36.
+ */
+EditorUi.prototype.toolbarHeight = 36;
+
+/**
+ * Specifies the height of the footer. Default is 28.
+ */
+EditorUi.prototype.footerHeight = 28;
+
+/**
+ * Specifies the position of the horizontal split bar. Default is 212.
+ */
+EditorUi.prototype.hsplitPosition = 204;
+
+/**
+ * Specifies the position of the vertical split bar. Default is 190.
+ */
+EditorUi.prototype.vsplitPosition = 190;
+
+/**
+ * Installs the listeners to update the action states.
+ */
+EditorUi.prototype.init = function() {
+       // Updates action states
+       this.addUndoListener();
+       this.addSelectionListener();
+
+       // Overrides clipboard to update paste action state
+       var paste = this.actions.get('paste');
+
+       var updatePaste = function() {
+               paste.setEnabled(!mxClipboard.isEmpty());
+       };
+
+       var mxClipboardCut = mxClipboard.cut;
+       mxClipboard.cut = function() {
+               mxClipboardCut.apply(this, arguments);
+               updatePaste();
+       };
+
+       var mxClipboardCopy = mxClipboard.copy;
+       mxClipboard.copy = function() {
+               mxClipboardCopy.apply(this, arguments);
+               updatePaste();
+       };
+};
+
+/**
+ * Hook for allowing selection and context menu for certain events.
+ */
+EditorUi.prototype.isSelectionAllowed = function(evt) {
+       return false;
+};
+
+/**
+ * Opens the current diagram via the window.opener if one exists.
+ */
+EditorUi.prototype.open = function() {
+       // Cross-domain window access is not allowed in FF, so if we
+       // were opened from another domain then this will fail.
+       try {
+               if (window.opener != null && window.opener.openFile != null) {
+                       window.opener.openFile.setConsumer(mxUtils.bind(this, function(xml,
+                               filename) {
+                               try {
+                                       var doc = mxUtils.parseXml(xml);
+                                       this.editor.setGraphXml(doc.documentElement);
+                                       this.editor.modified = false;
+                                       this.editor.undoManager.clear();
+
+                                       if (filename != null) {
+                                               this.editor.filename = filename;
+                                       }
+                               } catch (e) {
+                                       mxUtils.alert(mxResources.get('invalidOrMissingFile') + ': ' + e.message);
+                               }
+                       }));
+               }
+       } catch (e) {
+               // ignore
+       }
+};
+
+/**
+ * Giuseppe Careri
+ * Opens the current diagram via string.
+ */
+EditorUi.prototype.openString = function(xml, filename, data) {
+       try {
+               var doc = mxUtils.parseXml(xml);
+               this.editor.setGraphXml(doc.documentElement);
+               this.editor.modified = false;
+               this.editor.undoManager.clear();
+
+               if (filename != null) {
+                       this.editor.filename = filename;
+               }
+
+               if (data != null) {
+                       this.editor.data = data;
+               }
+       } catch (e) {
+               mxUtils.alert(mxResources.get('invalidOrMissingFile') + ': ' + e.message);
+       }
+};
+
+/**
+ * Saves As the current graph under the given project name.
+ */
+EditorUi.prototype.new = function(name) {
+       var editor = this.editor;
+
+       if (name != null) {
+               var xml = mxUtils.getPrettyXml(this.editor.getGraphXml());
+               try {
+                       if (useLocalStorage) {
+                               if (localStorage.getItem(name) != null &&
+                                       !mxUtils.confirm(mxResources.get('replace', [name]))) {
+                                       return;
+                               }
+
+                               localStorage.setItem(name, xml);
+                               this.editor.setStatus(mxResources.get('saved') + ' ' + new Date());
+                       } else {
+                               console.log(xml.length);
+                               console.log(MAX_REQUEST_SIZE);
+                               if (xml.length < MAX_REQUEST_SIZE) {
+                                       xml = encodeURIComponent(xml);
+                                       name = encodeURIComponent(name);
+
+                                       var xhr = new XMLHttpRequest();
+                                       xhr.open("POST", SAVE_URL, true);
+                                       xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
+                                       xhr.setRequestHeader('Authorization', 'Bearer ' + editor.data.token);
+                                       xhr.onload = function(e) {
+                                               if (xhr.readyState === 4) {
+                                                       if (xhr.status === 201) {
+                                                               editor.setStatus('Project ' + JSON.parse(xhr.response).name +
+                                                                       ' is opening in new window!');
+                                                               setTimeout(function() {
+                                                                       window.open('square/project/' + JSON.parse(xhr.response).id,
+                                                                               '_blank');
+                                                               }, 1500);
+                                                       } else {
+                                                               editor.setStatus('Error creating project: ' +
+                                                                       JSON.parse(xhr.response).errors[0].message);
+                                                       }
+                                               }
+                                       };
+                                       xhr.onerror = function(e) {
+                                               mxUtils.alert(xhr.statusText);
+                                       };
+                                       xhr.send('description=project_new&name=' + name);
+                               } else {
+                                       mxUtils.alert(mxResources.get('drawingTooLarge'));
+                                       mxUtils.popup(xml);
+
+                                       return;
+                               }
+                       }
+
+                       this.editor.filename = name;
+                       this.editor.modified = false;
+               } catch (e) {
+                       this.editor.setStatus('Error creating project');
+               }
+       } else {
+               this.editor.setStatus('Error creating project');
+       }
+};
+
+
+/**
+ * Saves the current graph under the given project name.
+ */
+EditorUi.prototype.save = function(name) {
+       var editor = this.editor;
+
+       if (name != null) {
+               var xml = mxUtils.getPrettyXml(this.editor.getGraphXml());
+               try {
+                       if (useLocalStorage) {
+                               if (localStorage.getItem(name) != null &&
+                                       !mxUtils.confirm(mxResources.get('replace', [name]))) {
+                                       return;
+                               }
+
+                               localStorage.setItem(name, xml);
+                               this.editor.setStatus(mxResources.get('saved') + ' ' + new Date());
+                       } else {
+                               console.log(xml.length);
+                               console.log(MAX_REQUEST_SIZE);
+                               if (xml.length < MAX_REQUEST_SIZE) {
+                                       xml = encodeURIComponent(xml);
+
+                                       var xhr = new XMLHttpRequest();
+                                       xhr.open("PUT", SAVE_URL + this.editor.data.id, true);
+                                       xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
+                                       xhr.setRequestHeader('Authorization', 'Bearer ' + editor.data.token);
+                                       xhr.onload = function(e) {
+                                               if (xhr.readyState === 4) {
+                                                       if (xhr.status === 200) {
+                                                               editor.setStatus('Updated at ' + JSON.parse(xhr.response).updatedAt +
+                                                                       ' (' + xhr.status + ' ' + xhr.statusText + ')');
+                                                       } else {
+                                                               editor.setStatus('Error saving project: ' +
+                                                                       JSON.parse(xhr.response).errors[0].message);
+                                                       }
+                                               }
+                                       };
+                                       xhr.onerror = function(e) {
+                                               mxUtils.alert(xhr.statusText);
+                                       };
+                                       xhr.send('preproduction=' + xml);
+                               } else {
+                                       mxUtils.alert(mxResources.get('drawingTooLarge'));
+                                       mxUtils.popup(xml);
+
+                                       return;
+                               }
+                       }
+
+                       this.editor.filename = name;
+                       this.editor.modified = false;
+               } catch (e) {
+                       this.editor.setStatus('Error saving file');
+               }
+       } else {
+               this.editor.setStatus('Error saving file');
+       }
+};
+
+/**
+ * Saves As the current graph under the given project name.
+ */
+EditorUi.prototype.saveAs = function(name) {
+       var editor = this.editor;
+
+       if (name != null) {
+               var xml = mxUtils.getPrettyXml(this.editor.getGraphXml());
+               try {
+                       if (useLocalStorage) {
+                               if (localStorage.getItem(name) != null &&
+                                       !mxUtils.confirm(mxResources.get('replace', [name]))) {
+                                       return;
+                               }
+
+                               localStorage.setItem(name, xml);
+                               this.editor.setStatus(mxResources.get('saved') + ' ' + new Date());
+                       } else {
+                               console.log(xml.length);
+                               console.log(MAX_REQUEST_SIZE);
+                               if (xml.length < MAX_REQUEST_SIZE) {
+                                       xml = encodeURIComponent(xml);
+                                       name = encodeURIComponent(name);
+
+                                       var xhr = new XMLHttpRequest();
+                                       xhr.open("POST", SAVE_URL, true);
+                                       xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
+                                       xhr.setRequestHeader('Authorization', 'Bearer ' + editor.data.token);
+                                       xhr.onload = function(e) {
+                                               if (xhr.readyState === 4) {
+                                                       if (xhr.status === 201) {
+                                                               editor.setStatus('Project ' + JSON.parse(xhr.response).name +
+                                                                       ' is opening in new window!');
+                                                               setTimeout(function() {
+                                                                       window.open('square/project/' + JSON.parse(xhr.response).id,
+                                                                               '_blank');
+                                                               }, 1500);
+                                                       } else {
+                                                               editor.setStatus('Error cloning project: ' +
+                                                                       JSON.parse(xhr.response).errors[0].message);
+                                                       }
+                                               }
+                                       };
+                                       xhr.onerror = function(e) {
+                                               mxUtils.alert(xhr.statusText);
+                                       };
+                                       xhr.send('description=project_cloned&name=' + name +
+                                               '&preproduction=' + xml + '&production=' + xml);
+                               } else {
+                                       mxUtils.alert(mxResources.get('drawingTooLarge'));
+                                       mxUtils.popup(xml);
+
+                                       return;
+                               }
+                       }
+
+                       this.editor.filename = name;
+                       this.editor.modified = false;
+               } catch (e) {
+                       this.editor.setStatus('Error saving file');
+               }
+       } else {
+               this.editor.setStatus('Error saving file');
+       }
+};
+
+/**
+ * Plush the current graph under the given project name.
+ */
+EditorUi.prototype.validate = function(a, b) {
+       var graph = this.editor.graph;
+       for (var a = a != null ? a : graph.model.getRoot(), b = b != null ? b : {}, c = true, d = graph.model.getChildCount(a), e = 0; e < d; e++) {
+               var f = graph.model.getChildAt(a, e),
+                       g = b;
+               graph.isValidRoot(f) && (g = {});
+               g = this.validate(f, g);
+               g != null ? graph.setCellWarning(f, g.replace(/\n/g, "<br>")) : graph.setCellWarning(f, null);
+               c = c && g == null
+       }
+
+       d = "";
+
+       //--- Giuseppe Careri - Modify 12/12/2013 - giuseppe.careri@gmail.com
+       if (graph.model.isVertex(a)) {
+               switch (a.value.nodeName) {
+                       case 'start':
+                               d = this.validateBlock('start') ? '' : "Only one Start block is allowed" + "\n";
+                               break;
+                       case 'finally':
+                               d = this.validateBlock('finally') ? '' : "Only one Finally block is allowed" + "\n";
+                               break;
+                       case 'playback':
+                               d = (a.value.getAttribute('file_id') > 0) ? "" : mxResources.get('noAudioSelected') + "\n";
+                               break;
+                       case 'background':
+                       case 'menu':
+                               d = (a.value.getAttribute('file_id') > 0) ? "" : mxResources.get('noAudioSelected') + "\n";
+                               d += (a.value.getAttribute('variable_id') > 0) ? "" : mxResources.get('noVariableSelected') + "\n";
+                               break;
+                       case 'getdigits':
+                               d = (a.value.getAttribute('file_id') > 0) ? "" : mxResources.get('noAudioSelected') + "\n";
+                               d += (a.value.getAttribute('variable_id') > 0) ? "" : mxResources.get('noVariableSelected') + "\n";
+                               break;
+                       case 'vswitch':
+                               d = (a.value.getAttribute('variable') !== "") ? "" : mxResources.get('noVariableSelected') + "\n";
+                               break;
+                       case 'database':
+                               d = (a.value.getAttribute('odbc_id') > 0) ? "" : mxResources.get('noDatabaseSelected') + "\n";
+                               break;
+                       case 'set':
+                       case 'math':
+                               d = (a.value.getAttribute('variable_id') > 0) ? "" : mxResources.get('noVariableSelected') + "\n";
+                               break;
+                       case 'gotoc':
+                               d = (a.value.getAttribute('extension') !== "") ? "" : mxResources.get('noExtensionSelected') + "\n";
+                               break;
+                       case 'system':
+                       case 'agi':
+                               d = (a.value.getAttribute('command') !== "") ? "" : mxResources.get('noCommandSelected') + "\n";
+                               break;
+                       case 'gotoif':
+                               d = (a.value.getAttribute('condition') !== "") ? "" : mxResources.get('noConditionSelected') + "\n";
+                               break;
+                       case 'saydigits':
+                               d = (a.value.getAttribute('digits') !== "") ? "" : mxResources.get('noDigitsSelected') + "\n";
+                               break;
+                       case 'saynumber':
+                               d = (a.value.getAttribute('number') !== "") ? "" : mxResources.get('noNumberSelected') + "\n";
+                               break;
+                       case 'sayphonetic':
+                               d = (a.value.getAttribute('text') !== "") ? "" : mxResources.get('noTextSelected') + "\n";
+                               break;
+                       case 'record':
+                               d = (a.value.getAttribute('filename') !== "") ? "" : mxResources.get('noFileSelected') + "\n";
+                               break;
+                       case 'goal':
+                               d = (a.value.getAttribute('goalname') !== "") ? "" : mxResources.get('noGoalSelected') + "\n";
+                               break;
+                       case 'ext_dial':
+                               d = (a.value.getAttribute('phone') !== "") ? "" : mxResources.get('noIdentifierSelected') + "\n";
+                               break;
+                       case 'dial':
+                               d = (a.value.getAttribute('sip_id') > 0) ? "" : mxResources.get('noIdentifierSelected') + "\n";
+                               break;
+                       case 'queue':
+                               d = (a.value.getAttribute('queue_id') !== "-1") ? "" : mxResources.get('noQueueSelected') + "\n";
+                               break;
+                       case 'callback':
+                               d = (a.value.getAttribute('list_id') > 0) ? "" : mxResources.get('noListSelected') + "\n";
+                               break;
+                       case 'gotoiftime':
+                               d = (a.value.getAttribute('interval_id') > 0) ? "" : mxResources.get('noIntervalSelected') + "\n";
+                               break;
+                       case 'gotoifmultitime':
+                               d = (a.value.getAttribute('interval_id') != "") ? "" : mxResources.get('noIntervalSelected') + "\n";
+                               break;
+                       case 'voicemail':
+                               d = (a.value.getAttribute('mailbox') !== "") ? "" : mxResources.get('noBoxNumberSelected') + "\n";
+                               break;
+                       case 'subproject':
+                               d = (a.value.getAttribute('project_id') > 0) ? "" : mxResources.get('noProjectSelected') + "\n";
+                               break;
+                       case 'tts':
+                               d = (a.value.getAttribute('text') !== "") ? "" : mxResources.get('noTextSelected') + "\n";
+                               break;
+                       case 'ispeechtts':
+                               d = (a.value.getAttribute('text') !== "") ? "" : mxResources.get('noTextSelected') + "\n";
+                               d += (a.value.getAttribute('key') !== "") ? "" : mxResources.get('noKeySelected') + "\n";
+                               break;
+                       case 'ispeechasr':
+                               d = (a.value.getAttribute('key') !== "") ? "" : mxResources.get('noKeySelected') + "\n";
+                               break;
+               }
+       }
+
+       if (graph.model.isEdge(a)) {
+               var z = graph.model.getCell(a.source.getId());
+               switch (z.value.nodeName) {
+                       case 'background':
+                               var patt = /^[0-9]{1,45}$|^[i]{1}$|^[t]{1}|^[#]{1}|^[*]{1}$/;
+                               d = d + ((patt.test(String(a.getValue()))) ? "" : mxResources.get('numberOrInvalidOrTimeout') + "\n");
+                               break;
+                       case 'menu':
+                               var patt = /^[0-9]{1,45}$|^[-]{1}$|^[i]{1}$|^[t]{1}|^[#]{1}|^[*]{1}$/;
+                               var str = String(a.getValue());
+                               var res = str.split(",");
+                               res.forEach(function(entry) {
+                                       d = d + ((patt.test(entry)) ? "" : mxResources.get('numberOrAll') + "\n");
+                               });
+                               break;
+                       case 'getdigits':
+                               var patt = /^(x|i|-)$/;
+                               var str = String(a.getValue());
+                               d = d + ((patt.test(str)) ? "" : mxResources.get('numberOrInvalidOrDefault') + "\n");
+                               break;
+                       case 'gotoif':
+                       case 'gotoiftime':
+                       case 'gotoifmultitime':
+                               var patt = /^(true){1}$|^(false){1}$/;
+                               d = d + ((patt.test(String(a.getValue()))) ? "" : mxResources.get('trueOrFalse') + "\n");
+                               break;
+
+               }
+       }
+       // -----------------------------------------------------------------
+
+
+       graph.isCellCollapsed(a) && !c && (d = d + ((mxResources.get(graph.containsValidationErrorsResource) || graph.containsValidationErrorsResource) + "\n"));
+       d = graph.model.isEdge(a) ?
+               d + (graph.getEdgeValidationError(a, graph.model.getTerminal(a, true), graph.model.getTerminal(a, false)) || "") : d + (graph.getCellValidationError(a) || "");
+       e = graph.validateCell(a, b);
+       e != null && (d = d + e);
+       graph.model.getParent(a) == null && graph.view.validate();
+       return d.length > 0 || !c ? d : null
+};
+EditorUi.prototype.validateBlock = function(blockName) {
+       var graph = this.editor.graph;
+       var parent = graph.getDefaultParent();
+       var count = 0;
+       // var model = graph.getModel();
+       //We can also use model.getChildren(parent)
+       parent.children.forEach(function(n) {
+               if (graph.model.isVertex(n) && n.value.nodeName == blockName) {
+                       count++;
+               }
+       });
+       return count > 1 ? false : true;
+}
+EditorUi.prototype.publish = function(name) {
+       var editor = this.editor;
+
+       if (name != null) {
+               var response = this.validate();
+               if (response === null) {
+
+                       var xml = mxUtils.getPrettyXml(this.editor.getGraphXml());
+                       try {
+                               if (useLocalStorage) {
+                                       if (localStorage.getItem(name) != null &&
+                                               !mxUtils.confirm(mxResources.get('replace', [name]))) {
+                                               return;
+                                       }
+
+                                       localStorage.setItem(name, xml);
+                                       this.editor.setStatus(mxResources.get('saved') + ' ' + new Date());
+                               } else {
+                                       console.log(xml.length);
+                                       console.log(MAX_REQUEST_SIZE);
+                                       if (xml.length < MAX_REQUEST_SIZE) {
+                                               xml = encodeURIComponent(xml);
+
+                                               var xhr = new XMLHttpRequest();
+                                               xhr.open("PUT", SAVE_URL + this.editor.data.id, true);
+                                               xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
+                                               xhr.setRequestHeader('Authorization', 'Bearer ' + editor.data.token);
+                                               xhr.onload = function(e) {
+                                                       if (xhr.readyState === 4) {
+                                                               if (xhr.status === 200) {
+                                                                       editor.setStatus('Published at ' + JSON.parse(xhr.response).updatedAt +
+                                                                               ' (' + xhr.status + ' ' + xhr.statusText + ')');
+                                                               } else {
+                                                                       editor.setStatus('Error saving project: ' +
+                                                                               JSON.parse(xhr.response).errors[0].message);
+                                                               }
+                                                       }
+                                               };
+                                               xhr.onerror = function(e) {
+                                                       mxUtils.alert(xhr.statusText);
+                                               };
+                                               xhr.send('preproduction=' + xml + '&production=' + xml);
+                                       } else {
+                                               mxUtils.alert(mxResources.get('drawingTooLarge'));
+                                               mxUtils.popup(xml);
+
+                                               return;
+                                       }
+                               }
+
+                               this.editor.filename = name;
+                               this.editor.modified = false;
+                       } catch (e) {
+                               this.editor.setStatus('Error publishing file');
+                       }
+               } else {
+                       editor.setStatus('Error publishing project: ');
+               }
+       } else {
+               this.editor.setStatus('Error publishing file');
+       }
+};
+
+
+/**
+ * Create variable
+ */
+EditorUi.prototype.variable = function(name) {
+       var editor = this.editor;
+
+       if (name != null) {
+               try {
+
+                       var xhr = new XMLHttpRequest();
+                       xhr.open("POST", VARIABLE_URL, true);
+                       xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
+                       xhr.setRequestHeader('Authorization', 'Bearer ' + editor.data.token);
+                       xhr.onload = function(e) {
+                               if (xhr.readyState === 4) {
+                                       if (xhr.status === 201) {
+                                               editor.setStatus('Variable created at ' + JSON.parse(xhr.response).createdAt +
+                                                       ' (' + xhr.status + ' ' + xhr.statusText + ')');
+                                       } else {
+                                               editor.setStatus('Error creating variable: ' +
+                                                       JSON.parse(xhr.response).errors[0].message);
+                                       }
+                               }
+                       };
+                       xhr.onerror = function(e) {
+                               mxUtils.alert(xhr.statusText);
+                       };
+                       xhr.send('name=' + name);
+               } catch (e) {
+                       this.editor.setStatus('Error creating variable');
+               }
+       } else {
+               this.editor.setStatus('Error creating variable');
+       }
+};
+
+/**
+ * Returns the URL for a copy of this editor with no state.
+ */
+EditorUi.prototype.getUrl = function(pathname) {
+       var href = (pathname != null) ? pathname : window.location.pathname;
+       var parms = (href.indexOf('?') > 0) ? 1 : 0;
+
+       // Removes template URL parameter for new blank diagram
+       for (var key in urlParams) {
+               if (parms == 0) {
+                       href += '?';
+               } else {
+                       href += '&';
+               }
+
+               href += key + '=' + urlParams[key];
+               parms++;
+       }
+
+       return href;
+};
+
+/**
+ * Updates the states of the given undo/redo items.
+ */
+EditorUi.prototype.addUndoListener = function() {
+       var undo = this.actions.get('undo');
+       var redo = this.actions.get('redo');
+
+       var undoMgr = this.editor.undoManager;
+
+       var undoListener = function() {
+               undo.setEnabled(undoMgr.canUndo());
+               redo.setEnabled(undoMgr.canRedo());
+       };
+
+       undoMgr.addListener(mxEvent.ADD, undoListener);
+       undoMgr.addListener(mxEvent.UNDO, undoListener);
+       undoMgr.addListener(mxEvent.REDO, undoListener);
+       undoMgr.addListener(mxEvent.CLEAR, undoListener);
+
+       // Updates the button states once
+       undoListener();
+};
+
+/**
+ * Updates the states of the given toolbar items based on the selection.
+ */
+EditorUi.prototype.addSelectionListener = function() {
+       var selectionListener = mxUtils.bind(this, function() {
+               var graph = this.editor.graph;
+               var selected = !graph.isSelectionEmpty();
+               var vertexSelected = false;
+               var edgeSelected = false;
+
+               var cells = graph.getSelectionCells();
+
+               if (cells != null) {
+                       for (var i = 0; i < cells.length; i++) {
+                               var cell = cells[i];
+
+                               if (graph.getModel().isEdge(cell)) {
+                                       edgeSelected = true;
+                               }
+
+                               if (graph.getModel().isVertex(cell)) {
+                                       vertexSelected = true;
+                               }
+
+                               if (edgeSelected && vertexSelected) {
+                                       break;
+                               }
+                       }
+               }
+
+               // Updates action states
+               var actions = ['cut', 'copy', 'delete', 'duplicate', 'bold', 'italic',
+                       'style', 'underline', 'toFront', 'toBack', 'dashed', 'rounded',
+                       'shadow',
+                       'tilt', 'autosize'
+               ];
+
+               for (var i = 0; i < actions.length; i++) {
+                       this.actions.get(actions[i]).setEnabled(selected);
+               }
+
+               this.actions.get('curved').setEnabled(edgeSelected);
+               this.actions.get('rotation').setEnabled(vertexSelected);
+               this.actions.get('wordWrap').setEnabled(vertexSelected);
+               this.actions.get('group').setEnabled(graph.getSelectionCount() > 1);
+               this.actions.get('ungroup').setEnabled(graph.getSelectionCount() == 1 &&
+                       graph.getModel().getChildCount(graph.getSelectionCell()) > 0);
+               var oneVertexSelected = vertexSelected && graph.getSelectionCount() == 1;
+               this.actions.get('removeFromGroup').setEnabled(oneVertexSelected &&
+                       graph.getModel().isVertex(graph.getModel().getParent(graph.getSelectionCell()))
+               );
+
+               // Updates menu states
+               var menus = ['fontFamily', 'fontSize', 'alignment', 'position', 'text',
+                       'format',
+                       'arrange', 'linewidth', 'spacing'
+               ];
+
+               for (var i = 0; i < menus.length; i++) {
+                       this.menus.get(menus[i]).setEnabled(selected);
+               }
+
+               menus = ['line', 'lineend', 'linestart'];
+
+               for (var i = 0; i < menus.length; i++) {
+                       this.menus.get(menus[i]).setEnabled(edgeSelected);
+               }
+
+               this.actions.get('setAsDefaultEdge').setEnabled(edgeSelected);
+
+               this.menus.get('align').setEnabled(graph.getSelectionCount() > 1);
+               this.menus.get('direction').setEnabled(vertexSelected || (edgeSelected &&
+                       graph.isLoop(graph.view.getState(graph.getSelectionCell()))));
+               this.menus.get('navigation').setEnabled(graph.foldingEnabled && ((graph.view
+                               .currentRoot != null) ||
+                       (graph.getSelectionCount() == 1 && graph.isValidRoot(graph.getSelectionCell()))
+               ));
+               this.actions.get('home').setEnabled(graph.view.currentRoot != null);
+               this.actions.get('exitGroup').setEnabled(graph.view.currentRoot != null);
+               var groupEnabled = graph.getSelectionCount() == 1 && graph.isValidRoot(
+                       graph.getSelectionCell());
+               this.actions.get('enterGroup').setEnabled(groupEnabled);
+               this.actions.get('expand').setEnabled(groupEnabled);
+               this.actions.get('collapse').setEnabled(groupEnabled);
+               this.actions.get('editLink').setEnabled(graph.getSelectionCount() == 1);
+               this.actions.get('openLink').setEnabled(graph.getSelectionCount() == 1 &&
+                       graph.getLinkForCell(graph.getSelectionCell()) != null);
+       });
+
+       this.editor.graph.getSelectionModel().addListener(mxEvent.CHANGE,
+               selectionListener);
+       selectionListener();
+};
+
+/**
+ * Refreshes the viewport.
+ */
+EditorUi.prototype.refresh = function() {
+       var quirks = mxClient.IS_IE && (document.documentMode == null || document.documentMode ==
+               5);
+       var w = this.container.clientWidth;
+       var h = this.container.clientHeight;
+
+       if (this.container == document.body) {
+               w = document.body.clientWidth || document.documentElement.clientWidth;
+               h = (quirks) ? document.body.clientHeight || document.documentElement.clientHeight :
+                       document.documentElement.clientHeight;
+       }
+
+       var effHsplitPosition = Math.max(0, Math.min(this.hsplitPosition, w - this.splitSize -
+               20));
+       var effVsplitPosition = Math.max(0, Math.min(this.vsplitPosition, h - this.menubarHeight -
+               this.toolbarHeight - this.footerHeight - this.splitSize - 1));
+
+       this.menubarContainer.style.height = this.menubarHeight + 'px';
+       this.toolbarContainer.style.top = this.menubarHeight + 'px';
+       this.toolbarContainer.style.height = this.toolbarHeight + 'px';
+
+       var tmp = this.menubarHeight + this.toolbarHeight;
+
+       if (!mxClient.IS_QUIRKS) {
+               tmp += 1;
+       }
+
+       this.sidebarContainer.style.top = tmp + 'px';
+       this.sidebarContainer.style.width = effHsplitPosition + 'px';
+       this.outlineContainer.style.width = effHsplitPosition + 'px';
+       this.outlineContainer.style.height = effVsplitPosition + 'px';
+       this.outlineContainer.style.bottom = this.footerHeight + 'px';
+       this.diagramContainer.style.left = (effHsplitPosition + this.splitSize) +
+               'px';
+       this.diagramContainer.style.top = this.sidebarContainer.style.top;
+       this.footerContainer.style.height = this.footerHeight + 'px';
+       this.footerContainer.style.display = 'none';
+       this.hsplit.style.top = this.sidebarContainer.style.top;
+       this.hsplit.style.bottom = this.outlineContainer.style.bottom;
+       this.hsplit.style.left = effHsplitPosition + 'px';
+       this.vsplit.style.width = this.sidebarContainer.style.width;
+       this.vsplit.style.bottom = (effVsplitPosition + this.footerHeight) + 'px';
+
+       if (quirks) {
+               this.menubarContainer.style.width = w + 'px';
+               this.toolbarContainer.style.width = this.menubarContainer.style.width;
+               var sidebarHeight = (h - effVsplitPosition - this.splitSize - this.footerHeight -
+                       this.menubarHeight - this.toolbarHeight);
+               this.sidebarContainer.style.height = sidebarHeight + 'px';
+               this.diagramContainer.style.width = (w - effHsplitPosition - this.splitSize) +
+                       'px';
+               var diagramHeight = (h - this.footerHeight - this.menubarHeight - this.toolbarHeight);
+               this.diagramContainer.style.height = diagramHeight + 'px';
+               this.footerContainer.style.width = this.menubarContainer.style.width;
+               this.hsplit.style.height = diagramHeight + 'px';
+       } else {
+               this.sidebarContainer.style.bottom = (effVsplitPosition + this.splitSize +
+                       this.footerHeight) + 'px';
+               this.diagramContainer.style.bottom = this.outlineContainer.style.bottom;
+       }
+};
+
+/**
+ * Creates the required containers.
+ */
+EditorUi.prototype.createDivs = function() {
+       this.menubarContainer = this.createDiv('geMenubarContainer');
+       this.toolbarContainer = this.createDiv('geToolbarContainer');
+       this.sidebarContainer = this.createDiv('geSidebarContainer');
+       this.outlineContainer = this.createDiv('geOutlineContainer');
+       this.diagramContainer = this.createDiv('geDiagramContainer');
+       this.footerContainer = this.createDiv('geFooterContainer');
+       this.hsplit = this.createDiv('geHsplit');
+       this.vsplit = this.createDiv('geVsplit');
+
+       // Sets static style for containers
+       this.menubarContainer.style.top = '0px';
+       this.menubarContainer.style.left = '0px';
+       this.menubarContainer.style.right = '0px';
+       this.toolbarContainer.style.left = '0px';
+       this.toolbarContainer.style.right = '0px';
+       this.sidebarContainer.style.left = '0px';
+       this.outlineContainer.style.left = '0px';
+       this.diagramContainer.style.right = '0px';
+       this.footerContainer.style.left = '0px';
+       this.footerContainer.style.right = '0px';
+       this.footerContainer.style.bottom = '0px';
+       this.vsplit.style.left = '0px';
+       this.vsplit.style.height = this.splitSize + 'px';
+       this.hsplit.style.width = this.splitSize + 'px';
+};
+
+/**
+ * Creates the required containers.
+ */
+EditorUi.prototype.createUi = function() {
+       // Creates menubar
+       this.menubar = this.menus.createMenubar(this.createDiv('geMenubar'));
+       this.menubarContainer.appendChild(this.menubar.container);
+
+       // Creates toolbar
+       this.toolbar = this.createToolbar(this.createDiv('geToolbar'));
+       this.toolbarContainer.appendChild(this.toolbar.container);
+
+       // Creates the sidebar
+       this.sidebar = this.createSidebar(this.sidebarContainer);
+
+       // Creates the footer
+       this.footerContainer.appendChild(this.createFooter());
+
+       // Adds status bar in menubar
+       this.statusContainer = this.createStatusContainer();
+
+       // Connects the status bar to the editor status
+       this.editor.addListener('statusChanged', mxUtils.bind(this, function() {
+               this.setStatusText(this.editor.getStatus());
+       }));
+
+       this.setStatusText(this.editor.getStatus());
+       this.menubar.container.appendChild(this.statusContainer);
+
+       // Inserts into DOM
+       this.container.appendChild(this.menubarContainer);
+       this.container.appendChild(this.toolbarContainer);
+       this.container.appendChild(this.sidebarContainer);
+       this.container.appendChild(this.outlineContainer);
+       this.container.appendChild(this.diagramContainer);
+       this.container.appendChild(this.footerContainer);
+       this.container.appendChild(this.hsplit);
+       this.container.appendChild(this.vsplit);
+
+       // HSplit
+       this.addSplitHandler(this.hsplit, true, 0, mxUtils.bind(this, function(
+               value) {
+               this.hsplitPosition = value;
+               this.refresh();
+               this.editor.graph.sizeDidChange();
+               this.editor.outline.update(false);
+               this.editor.outline.outline.sizeDidChange();
+       }));
+
+       // VSplit
+       this.addSplitHandler(this.vsplit, false, this.footerHeight, mxUtils.bind(
+               this,
+               function(value) {
+                       this.vsplitPosition = value;
+                       this.refresh();
+                       this.editor.outline.update(false);
+                       this.editor.outline.outline.sizeDidChange();
+               }));
+};
+
+/**
+ * Creates a new toolbar for the given container.
+ */
+EditorUi.prototype.createStatusContainer = function() {
+       var container = document.createElement('a');
+       container.className = 'geItem geStatus';
+
+       return container;
+};
+
+/**
+ * Creates a new toolbar for the given container.
+ */
+EditorUi.prototype.createStatusContainer = function() {
+       var container = document.createElement('a');
+       container.className = 'geItem geStatus';
+
+       return container;
+};
+
+/**
+ * Creates a new toolbar for the given container.
+ */
+EditorUi.prototype.setStatusText = function(value) {
+       this.statusContainer.innerHTML = value;
+};
+
+/**
+ * Creates a new toolbar for the given container.
+ */
+EditorUi.prototype.createToolbar = function(container) {
+       return new Toolbar(this, container);
+};
+
+/**
+ * Creates a new sidebar for the given container.
+ */
+EditorUi.prototype.createSidebar = function(container) {
+       return new Sidebar(this, container);
+};
+
+/**
+ * Creates and returns a new footer.
+ */
+EditorUi.prototype.createFooter = function() {
+       return this.createDiv('geFooter');
+};
+
+/**
+ * Creates the actual toolbar for the toolbar container.
+ */
+EditorUi.prototype.createDiv = function(classname) {
+       var elt = document.createElement('div');
+       elt.className = classname;
+
+       return elt;
+};
+
+/**
+ * Creates the custom header.
+ */
+EditorUi.prototype.createHeader = function(classname) {
+       var elt = document.createElement(classname);
+       return elt;
+};
+
+/**
+ * Creates the custom header.
+ */
+EditorUi.prototype.createForm = function(classname) {
+       var elt = document.createElement('form');
+       elt.className = classname;
+
+       return elt;
+};
+
+/**
+ * Updates the states of the given undo/redo items.
+ */
+EditorUi.prototype.addSplitHandler = function(elt, horizontal, dx, onChange) {
+       var start = null;
+       var initial = null;
+
+       function getValue() {
+               return parseInt(((horizontal) ? elt.style.left : elt.style.bottom));
+       };
+
+       function moveHandler(evt) {
+               if (start != null) {
+                       var pt = new mxPoint(mxEvent.getClientX(evt), mxEvent.getClientY(evt));
+                       onChange(Math.max(0, initial + ((horizontal) ? (pt.x - start.x) : (start.y -
+                               pt.y)) - dx));
+                       mxEvent.consume(evt);
+               }
+       };
+
+       function dropHandler(evt) {
+               moveHandler(evt);
+               start = null;
+               initial = null;
+       };
+
+       mxEvent.addGestureListeners(elt, function(evt) {
+               start = new mxPoint(mxEvent.getClientX(evt), mxEvent.getClientY(evt));
+               initial = getValue();
+               mxEvent.consume(evt);
+       });
+
+       mxEvent.addListener(document, 'mousemove', moveHandler);
+       mxEvent.addListener(document, 'touchmove', moveHandler);
+       mxEvent.addListener(document, 'mouseup', dropHandler);
+       mxEvent.addListener(document, 'touchend', dropHandler);
+};
+
+/**
+ * Displays a print dialog.
+ */
+EditorUi.prototype.showDialog = function(elt, w, h, modal, closable, onClose) {
+       this.hideDialog();
+       this.dialog = new Dialog(this, elt, w, (mxClient.IS_VML) ? h - 12 : h,
+               modal,
+               closable, onClose);
+};
+
+/**
+ * Displays a print dialog.
+ */
+EditorUi.prototype.hideDialog = function() {
+       if (this.dialog != null) {
+               this.dialog.close();
+               this.dialog = null;
+               this.editor.graph.container.focus();
+       }
+};
+
+/**
+ * Adds the label menu items to the given menu and parent.
+ */
+EditorUi.prototype.saveFile = function(forceDialog) {
+       if (!forceDialog && this.editor.filename != null) {
+               this.save(this.editor.getOrCreateFilename());
+       } else {
+               this.showDialog(new SaveDialog(this).container, 300, 100, true, true);
+       }
+};
+
+/**
+ * Adds the label menu items to the given menu and parent.
+ */
+EditorUi.prototype.publishFile = function(forceDialog) {
+       if (!forceDialog && this.editor.filename != null) {
+               this.publish(this.editor.getOrCreateFilename());
+       } else {
+               //this.showDialog(new SaveDialog(this).container, 300, 100, true, true);
+       }
+};
+
+/**
+ * Executes the given layout.
+ */
+EditorUi.prototype.executeLayout = function(layout, animate, ignoreChildCount) {
+       var graph = this.editor.graph;
+       var cell = graph.getSelectionCell();
+
+       // Allow global overridding of animation
+       animate = this.animate != null ? this.animate : animate;
+
+       graph.getModel().beginUpdate();
+       try {
+               layout.execute(graph.getDefaultParent(), cell);
+       } catch (e) {
+               throw e;
+       } finally {
+               // Animates the changes in the graph model except
+               // for Camino, where animation is too slow
+               if (animate && navigator.userAgent.indexOf('Camino') < 0) {
+                       // New API for animating graph layout results asynchronously
+                       var morph = new mxMorphing(graph);
+                       morph.addListener(mxEvent.DONE, mxUtils.bind(this, function() {
+                               graph.getModel().endUpdate();
+                       }));
+
+                       morph.startAnimation();
+               } else {
+                       graph.getModel().endUpdate();
+               }
+       }
+};
+
+/**
+ * Creates the keyboard event handler for the current graph and history.
+ */
+EditorUi.prototype.createKeyHandler = function(editor) {
+       var graph = this.editor.graph;
+       var keyHandler = new mxKeyHandler(graph);
+
+       // Routes command-key to control-key on Mac
+       keyHandler.isControlDown = function(evt) {
+               return mxEvent.isControlDown(evt) || (mxClient.IS_MAC && evt.metaKey);
+       };
+
+       // Helper function to move cells with the cursor keys
+       function nudge(keyCode) {
+               if (!graph.isSelectionEmpty()) {
+                       var dx = 0;
+                       var dy = 0;
+
+                       if (keyCode == 37) {
+                               dx = -1;
+                       } else if (keyCode == 38) {
+                               dy = -1;
+                       } else if (keyCode == 39) {
+                               dx = 1;
+                       } else if (keyCode == 40) {
+                               dy = 1;
+                       }
+
+                       graph.moveCells(graph.getSelectionCells(), dx, dy);
+                       graph.scrollCellToVisible(graph.getSelectionCell());
+               }
+       };
+
+       // Binds keystrokes to actions
+       var bindAction = mxUtils.bind(this, function(code, control, key, shift) {
+               var action = this.actions.get(key);
+
+               if (action != null) {
+                       var f = function() {
+                               if (action.enabled) {
+                                       action.funct();
+                               }
+                       };
+
+                       if (control) {
+                               if (shift) {
+                                       keyHandler.bindControlShiftKey(code, f);
+                               } else {
+                                       keyHandler.bindControlKey(code, f);
+                               }
+                       } else {
+                               if (shift) {
+                                       keyHandler.bindShiftKey(code, f);
+                               } else {
+                                       keyHandler.bindKey(code, f);
+                               }
+                       }
+               }
+       });
+
+       var ui = this;
+       var keyHandleEscape = keyHandler.escape;
+       keyHandler.escape = function(evt) {
+               ui.hideDialog();
+               keyHandleEscape.apply(this, arguments);
+       };
+
+       // Ignores enter keystroke. Remove this line if you want the
+       // enter keystroke to stop editing.
+       keyHandler.enter = function() {};
+       keyHandler.bindKey(8, function() {
+               graph.foldCells(true);
+       }); // Backspace
+       keyHandler.bindKey(13, function() {
+               graph.foldCells(false);
+       }); // Enter
+       keyHandler.bindKey(33, function() {
+               graph.exitGroup();
+       }); // Page Up
+       keyHandler.bindKey(34, function() {
+               graph.enterGroup();
+       }); // Page Down
+       keyHandler.bindKey(36, function() {
+               graph.home();
+       }); // Home
+       keyHandler.bindKey(35, function() {
+               graph.refresh();
+       }); // End
+       keyHandler.bindKey(37, function() {
+               nudge(37);
+       }); // Left arrow
+       keyHandler.bindKey(38, function() {
+               nudge(38);
+       }); // Up arrow
+       keyHandler.bindKey(39, function() {
+               nudge(39);
+       }); // Right arrow
+       keyHandler.bindKey(40, function() {
+               nudge(40);
+       }); // Down arrow
+       keyHandler.bindKey(113, function() {
+               graph.startEditingAtCell();
+       });
+       bindAction(46, false, 'delete'); // Delete
+       bindAction(82, true, 'tilt'); // Ctrl+R
+       bindAction(83, true, 'save'); // Ctrl+S
+       bindAction(83, true, 'saveAs', true); // Ctrl+Shift+S
+       bindAction(107, false, 'zoomIn'); // Add
+       bindAction(109, false, 'zoomOut'); // Subtract
+       bindAction(65, true, 'selectAll'); // Ctrl+A
+       bindAction(86, true, 'selectVertices', true); // Ctrl+Shift+V
+       bindAction(69, true, 'selectEdges', true); // Ctrl+Shift+E
+       bindAction(69, true, 'export'); // Ctrl+Shift+E
+       bindAction(66, true, 'toBack'); // Ctrl+B
+       bindAction(70, true, 'toFront'); // Ctrl+F
+       bindAction(68, true, 'duplicate'); // Ctrl+D
+       bindAction(90, true, 'undo'); // Ctrl+Z
+       bindAction(89, true, 'redo'); // Ctrl+Y
+       bindAction(88, true, 'cut'); // Ctrl+X
+       bindAction(67, true, 'copy'); // Ctrl+C
+       bindAction(81, true, 'connect'); // Ctrl+Q
+       bindAction(86, true, 'paste'); // Ctrl+V
+       bindAction(71, true, 'group'); // Ctrl+G
+       bindAction(71, true, 'grid', true); // Ctrl+Shift+G
+       bindAction(85, true, 'ungroup'); // Ctrl+U
+       bindAction(112, false, 'about'); // F1
+       bindAction(80, true, 'publish', true); // Ctrl+Shift+P
+
+       return keyHandler;
+};
+
+/**
+ * Giuseppe Careri
+ * Creates a new toolbar for the given container.
+ */
+EditorUi.prototype.createMultiplicities = function(graph, cells, source,
+       target) {
+       for (var i = 0; i < cells.length; i++) {
+
+               graph.push(new mxMultiplicity(true, cells[i], null, null, source[i][0],
+                       source[i][1], null, mxResources.get(cells[i]) + mxResources.get('musthave') + source[i][0] + mxResources.get('outgoingedge'), null));
+               graph.push(new mxMultiplicity(false, cells[i], null, null, target[i][0],
+                       target[i][1], null, mxResources.get(cells[i]) + mxResources.get('musthave') + target[i][0] + mxResources.get('incomingedge'), null));
+       };
+};
index 476abae..46f34e4 100644 (file)
@@ -1 +1,748 @@
-var _0x16e3=["\x63\x61\x6C\x6C","\x73\x65\x74\x43\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65","\x73\x65\x74\x44\x72\x6F\x70\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x50\x61\x6E\x6E\x69\x6E\x67","\x73\x65\x74\x54\x6F\x6F\x6C\x74\x69\x70\x73","\x73\x65\x74\x41\x6C\x6C\x6F\x77\x4C\x6F\x6F\x70\x73","\x73\x65\x74\x4D\x75\x6C\x74\x69\x67\x72\x61\x70\x68","\x61\x6C\x6C\x6F\x77\x41\x75\x74\x6F\x50\x61\x6E\x6E\x69\x6E\x67","\x72\x65\x73\x65\x74\x45\x64\x67\x65\x73\x4F\x6E\x43\x6F\x6E\x6E\x65\x63\x74","\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x43\x68\x69\x6C\x64\x72\x65\x6E","\x74\x61\x72\x67\x65\x74\x43\x6F\x6E\x6E\x65\x63\x74\x49\x6D\x61\x67\x65","\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x48\x61\x6E\x64\x6C\x65\x72","\x73\x65\x74\x41\x6C\x6C\x6F\x77\x44\x61\x6E\x67\x6C\x69\x6E\x67\x45\x64\x67\x65\x73","\x73\x65\x74\x43\x72\x65\x61\x74\x65\x54\x61\x72\x67\x65\x74","\x69\x73\x56\x61\x6C\x69\x64\x53\x6F\x75\x72\x63\x65","\x61\x70\x70\x6C\x79","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x63\x6F\x6E\x6E\x65\x63\x74","\x32","\x61\x6C\x74\x65\x72\x6E\x61\x74\x65\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x76\x65\x72\x74\x69\x63\x61\x6C","\x6C\x6F\x61\x64\x53\x74\x79\x6C\x65\x73\x68\x65\x65\x74","\x67\x65\x74\x52\x75\x62\x62\x65\x72\x62\x61\x6E\x64","\x63\x75\x72\x73\x6F\x72","\x73\x74\x79\x6C\x65","\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x70\x6F\x69\x6E\x74\x65\x72","\x62\x69\x6E\x64","\x61\x64\x64\x4C\x69\x73\x74\x65\x6E\x65\x72","\x70\x61\x6E\x6E\x69\x6E\x67\x48\x61\x6E\x64\x6C\x65\x72","\x64\x65\x66\x61\x75\x6C\x74","\x69\x73\x48\x74\x6D\x6C\x4C\x61\x62\x65\x6C","\x67\x65\x74\x53\x74\x61\x74\x65","\x76\x69\x65\x77","\x67\x65\x74\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65","\x68\x74\x6D\x6C","\x31","\x77\x68\x69\x74\x65\x53\x70\x61\x63\x65","\x77\x72\x61\x70","\x67\x65\x74\x4C\x61\x62\x65\x6C\x56\x61\x6C\x75\x65","\x63\x65\x6C\x6C\x52\x65\x6E\x64\x65\x72\x65\x72","\x68\x74\x6D\x6C\x45\x6E\x74\x69\x74\x69\x65\x73","\x69\x73\x43\x65\x6C\x6C\x4C\x6F\x63\x6B\x65\x64","\x74\x61\x70\x41\x6E\x64\x48\x6F\x6C\x64\x54\x6F\x6C\x65\x72\x61\x6E\x63\x65","\x74\x61\x70\x41\x6E\x64\x48\x6F\x6C\x64","\x61\x63\x74\x69\x76\x65","\x67\x72\x61\x70\x68","\x67\x65\x74\x47\x72\x61\x70\x68\x58","\x67\x65\x74\x47\x72\x61\x70\x68\x59","\x73\x74\x61\x72\x74","\x70\x61\x6E\x6E\x69\x6E\x67\x54\x72\x69\x67\x67\x65\x72","\x63\x65\x6C\x6C","\x69\x73\x43\x65\x6C\x6C\x53\x65\x6C\x65\x63\x74\x65\x64","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x6F\x75\x6E\x74","\x72\x65\x6D\x6F\x76\x65\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x69\x6E\x69\x74\x54\x6F\x75\x63\x68","\x65\x78\x74\x65\x6E\x64","\x6D\x69\x6E\x46\x69\x74\x53\x63\x61\x6C\x65","\x6D\x61\x78\x46\x69\x74\x53\x63\x61\x6C\x65","\x67\x65\x74\x44\x6F\x63\x75\x6D\x65\x6E\x74\x45\x6C\x65\x6D\x65\x6E\x74","\x2F\x64\x65\x66\x61\x75\x6C\x74\x2E\x78\x6D\x6C","\x6C\x6F\x61\x64","\x6F\x77\x6E\x65\x72\x44\x6F\x63\x75\x6D\x65\x6E\x74","\x67\x65\x74\x53\x74\x79\x6C\x65\x73\x68\x65\x65\x74","\x64\x65\x63\x6F\x64\x65","\x66\x6C\x69\x70\x45\x64\x67\x65","\x67\x65\x74\x56\x61\x6C\x75\x65","\x45\x4C\x42\x4F\x57\x5F\x48\x4F\x52\x49\x5A\x4F\x4E\x54\x41\x4C","\x45\x4C\x42\x4F\x57\x5F\x56\x45\x52\x54\x49\x43\x41\x4C","\x73\x65\x74\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65\x73","\x73\x65\x74\x44\x65\x66\x61\x75\x6C\x74\x45\x64\x67\x65","\x69\x73\x45\x64\x67\x65","\x67\x65\x74\x4D\x6F\x64\x65\x6C","\x63\x6C\x6F\x6E\x65\x43\x65\x6C\x6C\x73","\x67\x65\x6F\x6D\x65\x74\x72\x79","\x70\x6F\x69\x6E\x74\x73","\x67\x65\x74\x53\x74\x79\x6C\x65","\x73\x65\x74\x53\x74\x79\x6C\x65","\x63\x72\x65\x61\x74\x65\x45\x64\x67\x65\x53\x74\x61\x74\x65","\x63\x72\x65\x61\x74\x65\x53\x74\x61\x74\x65","\x66\x61\x63\x74\x6F\x72\x79\x4D\x65\x74\x68\x6F\x64","\x69\x73\x43\x65\x6C\x6C\x46\x6F\x6C\x64\x61\x62\x6C\x65","\x66\x6F\x6C\x64\x69\x6E\x67\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x53\x77\x69\x6D\x6C\x61\x6E\x65","\x69\x73\x56\x61\x6C\x69\x64\x52\x6F\x6F\x74","\x63\x72\x65\x61\x74\x65\x47\x72\x6F\x75\x70\x43\x65\x6C\x6C","\x67\x72\x6F\x75\x70","\x67\x65\x74\x54\x6F\x6F\x6C\x74\x69\x70\x46\x6F\x72\x43\x65\x6C\x6C","","\x69\x73\x56\x65\x72\x74\x65\x78","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x5F","\x6E\x6F\x64\x65\x4E\x61\x6D\x65","\x76\x61\x6C\x75\x65","\x67\x65\x74","\x63\x6F\x6E\x76\x65\x72\x74\x56\x61\x6C\x75\x65\x54\x6F\x53\x74\x72\x69\x6E\x67","\x6F\x62\x6A\x65\x63\x74","\x6C\x61\x62\x65\x6C","\x67\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x63\x65\x6C\x6C\x4C\x61\x62\x65\x6C\x43\x68\x61\x6E\x67\x65\x64","\x63\x6C\x6F\x6E\x65\x4E\x6F\x64\x65","\x73\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x73\x65\x74\x4C\x69\x6E\x6B\x46\x6F\x72\x43\x65\x6C\x6C","\x63\x72\x65\x61\x74\x65\x58\x6D\x6C\x44\x6F\x63\x75\x6D\x65\x6E\x74","\x55\x73\x65\x72\x4F\x62\x6A\x65\x63\x74","\x63\x72\x65\x61\x74\x65\x45\x6C\x65\x6D\x65\x6E\x74","\x6C\x65\x6E\x67\x74\x68","\x6C\x69\x6E\x6B","\x72\x65\x6D\x6F\x76\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x73\x65\x74\x56\x61\x6C\x75\x65","\x6D\x6F\x64\x65\x6C","\x67\x65\x74\x4C\x69\x6E\x6B\x46\x6F\x72\x43\x65\x6C\x6C","\x69\x73\x45\x6E\x61\x62\x6C\x65\x64","\x6D\x61\x72\x6B\x65\x72","\x66\x69\x72\x73\x74","\x68\x69\x64\x65\x4D\x65\x6E\x75","\x75\x70\x64\x61\x74\x65\x4D\x6F\x75\x73\x65\x45\x76\x65\x6E\x74","\x67\x72\x61\x70\x68\x58","\x67\x72\x61\x70\x68\x59","\x67\x65\x74\x43\x65\x6C\x6C\x41\x74","\x73\x74\x61\x74\x65","\x73\x68\x61\x70\x65","\x6E\x6F\x64\x65","\x66\x69\x72\x65\x4D\x6F\x75\x73\x65\x45\x76\x65\x6E\x74","\x4D\x4F\x55\x53\x45\x5F\x44\x4F\x57\x4E","\x69\x73\x4D\x65\x6E\x75\x53\x68\x6F\x77\x69\x6E\x67","\x67\x65\x74\x43\x65\x6C\x6C","\x69\x73\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x45\x6D\x70\x74\x79","\x4D\x4F\x55\x53\x45\x5F\x55\x50","\x69\x73\x45\x64\x69\x74\x69\x6E\x67","\x67\x65\x74\x45\x76\x65\x6E\x74","\x67\x65\x74\x43\x6C\x69\x65\x6E\x74\x58","\x67\x65\x74\x43\x6C\x69\x65\x6E\x74\x59","\x70\x6F\x70\x75\x70","\x63\x6F\x6E\x73\x75\x6D\x65","\x4D\x4F\x55\x53\x45\x5F\x4D\x4F\x56\x45","\x69\x73\x43\x6F\x6E\x73\x75\x6D\x65\x64","\x72\x6F\x74\x61\x74\x69\x6F\x6E\x45\x6E\x61\x62\x6C\x65\x64","\x62\x61\x73\x65\x53\x70\x61\x63\x69\x6E\x67\x54\x6F\x70","\x62\x61\x73\x65\x53\x70\x61\x63\x69\x6E\x67\x42\x6F\x74\x74\x6F\x6D","\x48\x41\x4E\x44\x4C\x45\x5F\x53\x49\x5A\x45","\x4C\x41\x42\x45\x4C\x5F\x48\x41\x4E\x44\x4C\x45\x5F\x53\x49\x5A\x45","\x49\x53\x5F\x54\x4F\x55\x43\x48","\x74\x6F\x6C\x65\x72\x61\x6E\x63\x65","\x67\x72\x69\x64\x53\x69\x7A\x65","\x73\x65\x6C\x65\x63\x74\x4F\x6E\x50\x6F\x70\x75\x70","\x75\x73\x65\x4C\x65\x66\x74\x42\x75\x74\x74\x6F\x6E\x46\x6F\x72\x50\x61\x6E\x6E\x69\x6E\x67","\x69\x73\x50\x61\x6E\x6E\x69\x6E\x67\x54\x72\x69\x67\x67\x65\x72","\x69\x67\x6E\x6F\x72\x65\x43\x65\x6C\x6C","\x69\x73\x43\x6F\x6E\x74\x72\x6F\x6C\x44\x6F\x77\x6E","\x69\x73\x53\x68\x69\x66\x74\x44\x6F\x77\x6E","\x75\x73\x65\x50\x6F\x70\x75\x70\x54\x72\x69\x67\x67\x65\x72","\x69\x73\x50\x6F\x70\x75\x70\x54\x72\x69\x67\x67\x65\x72","\x6D\x6F\x75\x73\x65\x44\x6F\x77\x6E","\x64\x65\x6C\x61\x79\x65\x64\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E","\x63\x72\x65\x61\x74\x65\x48\x61\x6E\x64\x6C\x65\x72\x73","\x74\x6F\x6F\x6C\x74\x69\x70\x48\x61\x6E\x64\x6C\x65\x72","\x73\x65\x74\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73\x48\x61\x6E\x64\x6C\x65\x72","\x70\x61\x6E\x6E\x69\x6E\x67\x45\x6E\x61\x62\x6C\x65\x64","\x67\x72\x61\x70\x68\x48\x61\x6E\x64\x6C\x65\x72","\x73\x65\x6C\x65\x63\x74\x43\x65\x6C\x6C\x73","\x73\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x64\x62\x6C\x43\x6C\x69\x63\x6B","\x63\x6F\x6E\x76\x65\x72\x74\x50\x6F\x69\x6E\x74","\x78","\x79","\x2F\x74\x6F\x75\x63\x68\x2D\x68\x61\x6E\x64\x6C\x65\x2E\x70\x6E\x67","\x68\x61\x6E\x64\x6C\x65\x49\x6D\x61\x67\x65","\x73\x69\x7A\x65\x72\x49\x6D\x61\x67\x65","\x73\x72\x63","\x2F\x74\x6F\x75\x63\x68\x2D\x63\x6F\x6E\x6E\x65\x63\x74\x6F\x72\x2E\x70\x6E\x67","\x69\x6E\x69\x74","\x69\x73\x43\x65\x6C\x6C\x43\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65","\x63\x6F\x6E\x6E\x65\x63\x74\x6F\x72\x49\x6D\x67","\x63\x72\x65\x61\x74\x65\x49\x6D\x61\x67\x65","\x77\x69\x64\x74\x68","\x32\x39\x70\x78","\x68\x65\x69\x67\x68\x74","\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x61\x62\x73\x6F\x6C\x75\x74\x65","\x74\x69\x74\x6C\x65","\x72\x65\x64\x69\x72\x65\x63\x74\x4D\x6F\x75\x73\x65\x45\x76\x65\x6E\x74\x73","\x70\x61\x64\x64\x69\x6E\x67","\x32\x70\x78","\x69\x73\x4D\x6F\x75\x73\x65\x44\x6F\x77\x6E","\x61\x64\x64\x47\x65\x73\x74\x75\x72\x65\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x61\x70\x70\x65\x6E\x64\x43\x68\x69\x6C\x64","\x72\x65\x64\x72\x61\x77\x54\x6F\x6F\x6C\x73","\x72\x65\x64\x72\x61\x77","\x73\x69\x6E\x67\x6C\x65\x53\x69\x7A\x65\x72","\x6C\x65\x66\x74","\x6F\x66\x66\x73\x65\x74\x57\x69\x64\x74\x68","\x70\x78","\x74\x6F\x70","\x6F\x66\x66\x73\x65\x74\x48\x65\x69\x67\x68\x74","\x64\x65\x73\x74\x72\x6F\x79","\x72\x65\x6D\x6F\x76\x65\x43\x68\x69\x6C\x64","\x70\x61\x72\x65\x6E\x74\x4E\x6F\x64\x65","\x2F\x63\x6F\x6E\x6E\x65\x63\x74\x6F\x72\x2E\x70\x6E\x67","\x63\x6F\x6E\x6E\x65\x63\x74\x49\x6D\x61\x67\x65","\x49\x53\x5F\x49\x45","\x49\x53\x5F\x53\x56\x47","\x64\x69\x76","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x75\x72\x6C\x28","\x29","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x63\x65\x6E\x74\x65\x72","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x52\x65\x70\x65\x61\x74","\x6E\x6F\x2D\x72\x65\x70\x65\x61\x74","\x64\x69\x73\x70\x6C\x61\x79","\x49\x53\x5F\x51\x55\x49\x52\x4B\x53","\x69\x6E\x6C\x69\x6E\x65","\x69\x6E\x6C\x69\x6E\x65\x2D\x62\x6C\x6F\x63\x6B","\x6D\x6F\x75\x73\x65\x64\x6F\x77\x6E"];Graph=function(_0xde98x1,_0xde98x2,_0xde98x3,_0xde98x4){mxGraph[_0x16e3[0]](this,_0xde98x1,_0xde98x2,_0xde98x3,_0xde98x4);this[_0x16e3[1]](true);this[_0x16e3[2]](false);this[_0x16e3[3]](true);this[_0x16e3[4]](!mxClient.IS_TOUCH);this[_0x16e3[5]](false);this[_0x16e3[6]](false);this[_0x16e3[7]]=true;this[_0x16e3[8]]=false;this[_0x16e3[9]]=false;this[_0x16e3[11]][_0x16e3[10]]=true;this[_0x16e3[12]](false);this[_0x16e3[11]][_0x16e3[13]](false);this[_0x16e3[11]][_0x16e3[14]]=function(){return mxConnectionHandler[_0x16e3[16]][_0x16e3[14]][_0x16e3[15]](this,arguments)&&urlParams[_0x16e3[17]]!=_0x16e3[18]};this[_0x16e3[19]]=_0x16e3[20];if(_0xde98x4==null){this[_0x16e3[21]]()};var _0xde98x5= new mxRubberband(this);this[_0x16e3[22]]=function(){return _0xde98x5};this[_0x16e3[29]][_0x16e3[28]](mxEvent.PAN_START,mxUtils[_0x16e3[27]](this,function(){this[_0x16e3[25]][_0x16e3[24]][_0x16e3[23]]=_0x16e3[26]}));this[_0x16e3[29]][_0x16e3[28]](mxEvent.PAN_END,mxUtils[_0x16e3[27]](this,function(){this[_0x16e3[25]][_0x16e3[24]][_0x16e3[23]]=_0x16e3[30]}));this[_0x16e3[31]]=function(_0xde98x6){var _0xde98x7=this[_0x16e3[33]][_0x16e3[32]](_0xde98x6);var _0xde98x8=(_0xde98x7!=null)?_0xde98x7[_0x16e3[24]]:this[_0x16e3[34]](_0xde98x6);return _0xde98x8[_0x16e3[35]]==_0x16e3[36]||_0xde98x8[_0x16e3[37]]==_0x16e3[38]};this[_0x16e3[40]][_0x16e3[39]]=function(_0xde98x7){var _0xde98x9=mxCellRenderer[_0x16e3[16]][_0x16e3[39]][_0x16e3[15]](this,arguments);if(_0xde98x7[_0x16e3[24]][_0x16e3[37]]==_0x16e3[38]&&_0xde98x7[_0x16e3[24]][_0x16e3[35]]!=1){_0xde98x9=mxUtils[_0x16e3[41]](_0xde98x9,false)};return _0xde98x9};this[_0x16e3[42]]=function(_0xde98x6){return false};this[_0x16e3[11]][_0x16e3[43]]=16;var _0xde98xa=this[_0x16e3[11]][_0x16e3[44]];this[_0x16e3[11]][_0x16e3[44]]=function(_0xde98xb,_0xde98x7){if(_0xde98x7==null){if(!this[_0x16e3[46]][_0x16e3[29]][_0x16e3[45]]){_0xde98x5[_0x16e3[49]](_0xde98xb[_0x16e3[47]](),_0xde98xb[_0x16e3[48]]());this[_0x16e3[46]][_0x16e3[29]][_0x16e3[50]]=false}}else {if(tapAndHoldStartsConnection){_0xde98xa[_0x16e3[15]](this,arguments)}else {if(this[_0x16e3[46]][_0x16e3[52]](_0xde98x7[_0x16e3[51]])&&this[_0x16e3[46]][_0x16e3[53]]()>1){this[_0x16e3[46]][_0x16e3[54]](_0xde98x7[_0x16e3[51]])}}}};if(touchStyle){this[_0x16e3[55]]()}};mxUtils[_0x16e3[56]](Graph,mxGraph);Graph[_0x16e3[16]][_0x16e3[57]]=null;Graph[_0x16e3[16]][_0x16e3[58]]=null;Graph[_0x16e3[16]][_0x16e3[21]]=function(){var _0xde98xc=mxUtils[_0x16e3[61]](STYLE_PATH+_0x16e3[60])[_0x16e3[59]]();var _0xde98xd= new mxCodec(_0xde98xc[_0x16e3[62]]);_0xde98xd[_0x16e3[64]](_0xde98xc,this[_0x16e3[63]]())};Graph[_0x16e3[16]][_0x16e3[65]]=function(_0xde98xe){if(_0xde98xe!=null){var _0xde98x7=this[_0x16e3[33]][_0x16e3[32]](_0xde98xe);var _0xde98x8=(_0xde98x7!=null)?_0xde98x7[_0x16e3[24]]:this[_0x16e3[34]](_0xde98xe);if(_0xde98x8!=null){var _0xde98xf=mxUtils[_0x16e3[66]](_0xde98x8,mxConstants.STYLE_ELBOW,mxConstants.ELBOW_HORIZONTAL);var _0xde98x10=(_0xde98xf==mxConstants[_0x16e3[67]])?mxConstants[_0x16e3[68]]:mxConstants[_0x16e3[67]];this[_0x16e3[69]](mxConstants.STYLE_ELBOW,_0xde98x10,[_0xde98xe])}}};Graph[_0x16e3[16]][_0x16e3[70]]=function(_0xde98x6){if(_0xde98x6!=null&&this[_0x16e3[72]]()[_0x16e3[71]](_0xde98x6)){var _0xde98x11=this[_0x16e3[72]]()[_0x16e3[73]]([_0xde98x6])[0];if(_0xde98x11[_0x16e3[74]]!=null){_0xde98x11[_0x16e3[74]][_0x16e3[75]]=null};var _0xde98x8=_0xde98x11[_0x16e3[76]]();_0xde98x8=mxUtils[_0x16e3[77]](_0xde98x8,mxConstants.STYLE_ENTRY_X,null);_0xde98x8=mxUtils[_0x16e3[77]](_0xde98x8,mxConstants.STYLE_ENTRY_Y,null);_0xde98x8=mxUtils[_0x16e3[77]](_0xde98x8,mxConstants.STYLE_EXIT_X,null);_0xde98x8=mxUtils[_0x16e3[77]](_0xde98x8,mxConstants.STYLE_EXIT_Y,null);_0xde98x11[_0x16e3[77]](_0xde98x8);this[_0x16e3[11]][_0x16e3[78]]=function(_0xde98xb){return this[_0x16e3[46]][_0x16e3[33]][_0x16e3[79]](_0xde98x11)};this[_0x16e3[11]][_0x16e3[80]]=function(){return this[_0x16e3[46]][_0x16e3[73]]([_0xde98x11])[0]}}};Graph[_0x16e3[16]][_0x16e3[81]]=function(_0xde98x6){return this[_0x16e3[82]]&&this[_0x16e3[83]](_0xde98x6)};Graph[_0x16e3[16]][_0x16e3[84]]=function(_0xde98x6){return this[_0x16e3[83]](_0xde98x6)};Graph[_0x16e3[16]][_0x16e3[85]]=function(){var _0xde98x12=mxGraph[_0x16e3[16]][_0x16e3[85]][_0x16e3[15]](this,arguments);_0xde98x12[_0x16e3[77]](_0x16e3[86]);return _0xde98x12};Graph[_0x16e3[16]][_0x16e3[87]]=function(_0xde98x6){var _0xde98x13=_0x16e3[88];if(this[_0x16e3[72]]()[_0x16e3[89]](_0xde98x6)){_0xde98x13+=mxResources[_0x16e3[93]](_0x16e3[90]+_0xde98x6[_0x16e3[92]][_0x16e3[91]])}else {if(this[_0x16e3[72]]()[_0x16e3[71]](_0xde98x6)){_0xde98x13=mxGraph[_0x16e3[16]][_0x16e3[87]][_0x16e3[15]](this,arguments)}};return _0xde98x13};Graph[_0x16e3[16]][_0x16e3[94]]=function(_0xde98x6){if(_0xde98x6[_0x16e3[92]]!=null&& typeof (_0xde98x6[_0x16e3[92]])==_0x16e3[95]){return _0xde98x6[_0x16e3[92]][_0x16e3[97]](_0x16e3[96])};return mxGraph[_0x16e3[16]][_0x16e3[94]][_0x16e3[15]](this,arguments)};Graph[_0x16e3[16]][_0x16e3[98]]=function(_0xde98x6,_0xde98x10,_0xde98x14){if(_0xde98x6[_0x16e3[92]]!=null&& typeof (_0xde98x6[_0x16e3[92]])==_0x16e3[95]){var _0xde98x15=_0xde98x6[_0x16e3[92]][_0x16e3[99]](true);_0xde98x15[_0x16e3[100]](_0x16e3[96],_0xde98x10);_0xde98x10=_0xde98x15};mxGraph[_0x16e3[16]][_0x16e3[98]][_0x16e3[15]](this,arguments)};Graph[_0x16e3[16]][_0x16e3[101]]=function(_0xde98x6,_0xde98x16){var _0xde98x10=null;if(_0xde98x6[_0x16e3[92]]!=null&& typeof (_0xde98x6[_0x16e3[92]])==_0x16e3[95]){_0xde98x10=_0xde98x6[_0x16e3[92]][_0x16e3[99]](true)}else {var _0xde98x17=mxUtils[_0x16e3[102]]();_0xde98x10=_0xde98x17[_0x16e3[104]](_0x16e3[103]);_0xde98x10[_0x16e3[100]](_0x16e3[96],_0xde98x6[_0x16e3[92]])};if(_0xde98x16!=null&&_0xde98x16[_0x16e3[105]]>0){_0xde98x10[_0x16e3[100]](_0x16e3[106],_0xde98x16)}else {_0xde98x10[_0x16e3[107]](_0x16e3[106])};this[_0x16e3[109]][_0x16e3[108]](_0xde98x6,_0xde98x10)};Graph[_0x16e3[16]][_0x16e3[110]]=function(_0xde98x6){if(_0xde98x6[_0x16e3[92]]!=null&& typeof (_0xde98x6[_0x16e3[92]])==_0x16e3[95]){return _0xde98x6[_0x16e3[92]][_0x16e3[97]](_0x16e3[106])};return null};Graph[_0x16e3[16]][_0x16e3[55]]=function(){this[_0x16e3[11]][_0x16e3[112]][_0x16e3[111]]=function(){return this[_0x16e3[46]][_0x16e3[11]][_0x16e3[113]]!=null};this[_0x16e3[28]](mxEvent.START_EDITING,function(_0xde98x18,_0xde98x19){this[_0x16e3[29]][_0x16e3[114]]()});var _0xde98x1a=false;var _0xde98x1b=null;this[_0x16e3[115]]=function(_0xde98xb){mxGraph[_0x16e3[16]][_0x16e3[115]][_0x16e3[15]](this,arguments);if(_0xde98xb[_0x16e3[32]]()==null){var _0xde98x6=this[_0x16e3[118]](_0xde98xb[_0x16e3[116]],_0xde98xb[_0x16e3[117]]);if(this[_0x16e3[72]]()[_0x16e3[71]](_0xde98x6)){_0xde98xb[_0x16e3[119]]=this[_0x16e3[33]][_0x16e3[32]](_0xde98x6);if(_0xde98xb[_0x16e3[119]]!=null&&_0xde98xb[_0x16e3[119]][_0x16e3[120]]!=null){this[_0x16e3[25]][_0x16e3[24]][_0x16e3[23]]=_0xde98xb[_0x16e3[119]][_0x16e3[120]][_0x16e3[121]][_0x16e3[24]][_0x16e3[23]]}}};if(_0xde98xb[_0x16e3[32]]()==null){this[_0x16e3[25]][_0x16e3[24]][_0x16e3[23]]=_0x16e3[30]}};this[_0x16e3[122]]=function(_0xde98x1c,_0xde98xb,_0xde98x18){if(_0xde98x1c==mxEvent[_0x16e3[123]]){if(!this[_0x16e3[29]][_0x16e3[124]]()){_0xde98x1b=_0xde98xb[_0x16e3[125]]();_0xde98x1a=(_0xde98x1b!=null)?this[_0x16e3[52]](_0xde98x1b):this[_0x16e3[126]]()}else {_0xde98x1a=false;_0xde98x1b=null}}else {if(_0xde98x1c==mxEvent[_0x16e3[127]]){if(_0xde98x1a&&!this[_0x16e3[128]]()){if(!this[_0x16e3[29]][_0x16e3[124]]()){var _0xde98x1d=mxEvent[_0x16e3[130]](_0xde98xb[_0x16e3[129]]());var _0xde98x1e=mxEvent[_0x16e3[131]](_0xde98xb[_0x16e3[129]]());this[_0x16e3[29]][_0x16e3[132]](_0xde98x1d+16,_0xde98x1e,_0xde98x1b,_0xde98xb[_0x16e3[129]]())};_0xde98x1a=false;_0xde98x1b=null;_0xde98xb[_0x16e3[133]]();return};_0xde98x1a=false;_0xde98x1b=null}};mxGraph[_0x16e3[16]][_0x16e3[122]][_0x16e3[15]](this,arguments);if(_0xde98x1c==mxEvent[_0x16e3[134]]&&_0xde98xb[_0x16e3[135]]()){_0xde98x1a=false;_0xde98x1b=null}}};(function(){mxVertexHandler[_0x16e3[16]][_0x16e3[136]]=true;mxText[_0x16e3[16]][_0x16e3[137]]=5;mxText[_0x16e3[16]][_0x16e3[138]]=1;if(touchStyle){mxConstants[_0x16e3[139]]=16;mxConstants[_0x16e3[140]]=7;if(mxClient[_0x16e3[141]]){mxVertexHandler[_0x16e3[16]][_0x16e3[142]]=4;mxEdgeHandler[_0x16e3[16]][_0x16e3[142]]=6;Graph[_0x16e3[16]][_0x16e3[142]]=14;Graph[_0x16e3[16]][_0x16e3[143]]=20;mxPanningHandler[_0x16e3[16]][_0x16e3[144]]=false;mxPanningHandler[_0x16e3[16]][_0x16e3[145]]=true;mxPanningHandler[_0x16e3[16]][_0x16e3[146]]=function(_0xde98xb){var _0xde98x19=_0xde98xb[_0x16e3[129]]();return (this[_0x16e3[145]]&&(this[_0x16e3[147]]||_0xde98xb[_0x16e3[32]]()==null))||(mxEvent[_0x16e3[148]](_0xde98x19)&&mxEvent[_0x16e3[149]](_0xde98x19))||(this[_0x16e3[150]]&&mxEvent[_0x16e3[151]](_0xde98x19))}};var _0xde98x1f=mxGraphHandler[_0x16e3[16]][_0x16e3[152]];mxGraphHandler[_0x16e3[16]][_0x16e3[152]]=function(_0xde98x18,_0xde98xb){_0xde98x1f[_0x16e3[15]](this,arguments);if(this[_0x16e3[46]][_0x16e3[52]](_0xde98xb[_0x16e3[125]]())&&this[_0x16e3[46]][_0x16e3[53]]()>1){this[_0x16e3[153]]=false}};Graph[_0x16e3[16]][_0x16e3[154]]=function(_0xde98x1){this[_0x16e3[155]]= new mxTooltipHandler(this);this[_0x16e3[155]][_0x16e3[156]](false);this[_0x16e3[157]]= new mxSelectionCellsHandler(this);this[_0x16e3[29]]= new mxPanningHandler(this);this[_0x16e3[29]][_0x16e3[158]]=false;this[_0x16e3[11]]= new mxConnectionHandler(this);this[_0x16e3[11]][_0x16e3[156]](false);this[_0x16e3[159]]= new mxGraphHandler(this)};mxConnectionHandler[_0x16e3[16]][_0x16e3[160]]=function(_0xde98xe,_0xde98x20){if(touchStyle&&_0xde98x20!=null){this[_0x16e3[46]][_0x16e3[161]](_0xde98x20)}else {this[_0x16e3[46]][_0x16e3[161]](_0xde98xe)}};var _0xde98x21=mxGraph[_0x16e3[16]][_0x16e3[162]];Graph[_0x16e3[16]][_0x16e3[162]]=function(_0xde98x19,_0xde98x6){if(_0xde98x6==null){var _0xde98x22=mxUtils[_0x16e3[163]](this[_0x16e3[25]],mxEvent[_0x16e3[130]](_0xde98x19),mxEvent[_0x16e3[131]](_0xde98x19));_0xde98x6=this[_0x16e3[118]](_0xde98x22[_0x16e3[164]],_0xde98x22[_0x16e3[165]])};_0xde98x21[_0x16e3[0]](this,_0xde98x19,_0xde98x6)};var _0xde98x23= new mxImage(IMAGE_PATH+_0x16e3[166],16,16);mxVertexHandler[_0x16e3[16]][_0x16e3[167]]=_0xde98x23;mxEdgeHandler[_0x16e3[16]][_0x16e3[167]]=_0xde98x23;mxOutline[_0x16e3[16]][_0x16e3[168]]=_0xde98x23; new Image()[_0x16e3[169]]=_0xde98x23[_0x16e3[169]];var _0xde98x24=IMAGE_PATH+_0x16e3[170];var _0xde98x25=mxVertexHandler[_0x16e3[16]][_0x16e3[171]];mxVertexHandler[_0x16e3[16]][_0x16e3[171]]=function(){_0xde98x25[_0x16e3[15]](this,arguments);if(showConnectorImg&&this[_0x16e3[46]][_0x16e3[11]][_0x16e3[111]]()&&this[_0x16e3[46]][_0x16e3[172]](this[_0x16e3[119]][_0x16e3[51]])&&!this[_0x16e3[46]][_0x16e3[84]](this[_0x16e3[119]][_0x16e3[51]])&&this[_0x16e3[46]][_0x16e3[53]]()==1){this[_0x16e3[173]]=mxUtils[_0x16e3[174]](_0xde98x24);this[_0x16e3[173]][_0x16e3[24]][_0x16e3[23]]=_0x16e3[26];this[_0x16e3[173]][_0x16e3[24]][_0x16e3[175]]=_0x16e3[176];this[_0x16e3[173]][_0x16e3[24]][_0x16e3[177]]=_0x16e3[176];this[_0x16e3[173]][_0x16e3[24]][_0x16e3[178]]=_0x16e3[179];if(!mxClient[_0x16e3[141]]){this[_0x16e3[173]][_0x16e3[100]](_0x16e3[180],mxResources[_0x16e3[93]](_0x16e3[17]));mxEvent[_0x16e3[181]](this[_0x16e3[173]],this[_0x16e3[46]],this[_0x16e3[119]])};this[_0x16e3[173]][_0x16e3[24]][_0x16e3[182]]=_0x16e3[183];mxEvent[_0x16e3[185]](this[_0x16e3[173]],mxUtils[_0x16e3[27]](this,function(_0xde98x19){this[_0x16e3[46]][_0x16e3[29]][_0x16e3[114]]();var _0xde98x22=mxUtils[_0x16e3[163]](this[_0x16e3[46]][_0x16e3[25]],mxEvent[_0x16e3[130]](_0xde98x19),mxEvent[_0x16e3[131]](_0xde98x19));this[_0x16e3[46]][_0x16e3[11]][_0x16e3[49]](this[_0x16e3[119]],_0xde98x22[_0x16e3[164]],_0xde98x22[_0x16e3[165]]);this[_0x16e3[46]][_0x16e3[184]]=true;mxEvent[_0x16e3[133]](_0xde98x19)}));this[_0x16e3[46]][_0x16e3[25]][_0x16e3[186]](this[_0x16e3[173]])};this[_0x16e3[187]]()};var _0xde98x26=mxVertexHandler[_0x16e3[16]][_0x16e3[188]];mxVertexHandler[_0x16e3[16]][_0x16e3[188]]=function(){_0xde98x26[_0x16e3[15]](this);this[_0x16e3[187]]()};mxVertexHandler[_0x16e3[16]][_0x16e3[187]]=function(){if(this[_0x16e3[119]]!=null&&this[_0x16e3[173]]!=null){if(mxVertexHandler[_0x16e3[16]][_0x16e3[189]]){this[_0x16e3[173]][_0x16e3[24]][_0x16e3[190]]=(this[_0x16e3[119]][_0x16e3[164]]+this[_0x16e3[119]][_0x16e3[175]]-this[_0x16e3[173]][_0x16e3[191]]/2)+_0x16e3[192];this[_0x16e3[173]][_0x16e3[24]][_0x16e3[193]]=(this[_0x16e3[119]][_0x16e3[165]]-this[_0x16e3[173]][_0x16e3[194]]/2)+_0x16e3[192]}else {this[_0x16e3[173]][_0x16e3[24]][_0x16e3[190]]=(this[_0x16e3[119]][_0x16e3[164]]+this[_0x16e3[119]][_0x16e3[175]]+mxConstants[_0x16e3[139]]/2+4)+_0x16e3[192];this[_0x16e3[173]][_0x16e3[24]][_0x16e3[193]]=(this[_0x16e3[119]][_0x16e3[165]]+(this[_0x16e3[119]][_0x16e3[177]]-this[_0x16e3[173]][_0x16e3[194]])/2)+_0x16e3[192]}}};var _0xde98x27=mxVertexHandler[_0x16e3[16]][_0x16e3[195]];mxVertexHandler[_0x16e3[16]][_0x16e3[195]]=function(_0xde98x18,_0xde98xb){_0xde98x27[_0x16e3[15]](this,arguments);if(this[_0x16e3[173]]!=null){this[_0x16e3[173]][_0x16e3[197]][_0x16e3[196]](this[_0x16e3[173]]);this[_0x16e3[173]]=null}}; new Image()[_0x16e3[169]]=_0xde98x24}else {var _0xde98x28= new mxImage(IMAGE_PATH+_0x16e3[198],15,15);mxConnectionHandler[_0x16e3[16]][_0x16e3[199]]=_0xde98x28; new Image()[_0x16e3[169]]=_0xde98x28[_0x16e3[169]];if(urlParams[_0x16e3[17]]==_0x16e3[18]){var _0xde98x28= new mxImage(IMAGE_PATH+_0x16e3[198],15,15);var _0xde98x25=mxVertexHandler[_0x16e3[16]][_0x16e3[171]];mxVertexHandler[_0x16e3[16]][_0x16e3[171]]=function(){_0xde98x25[_0x16e3[15]](this,arguments);if(showConnectorImg&&this[_0x16e3[46]][_0x16e3[11]][_0x16e3[111]]()&&this[_0x16e3[46]][_0x16e3[172]](this[_0x16e3[119]][_0x16e3[51]])&&!this[_0x16e3[46]][_0x16e3[84]](this[_0x16e3[119]][_0x16e3[51]])&&this[_0x16e3[46]][_0x16e3[53]]()==1){if(mxClient[_0x16e3[200]]&&!mxClient[_0x16e3[201]]){this[_0x16e3[173]]=document[_0x16e3[104]](_0x16e3[202]);this[_0x16e3[173]][_0x16e3[24]][_0x16e3[203]]=_0x16e3[204]+_0xde98x28[_0x16e3[169]]+_0x16e3[205];this[_0x16e3[173]][_0x16e3[24]][_0x16e3[206]]=_0x16e3[207];this[_0x16e3[173]][_0x16e3[24]][_0x16e3[208]]=_0x16e3[209];this[_0x16e3[173]][_0x16e3[24]][_0x16e3[175]]=(_0xde98x28[_0x16e3[175]]+4)+_0x16e3[192];this[_0x16e3[173]][_0x16e3[24]][_0x16e3[177]]=(_0xde98x28[_0x16e3[177]]+4)+_0x16e3[192];this[_0x16e3[173]][_0x16e3[24]][_0x16e3[210]]=(mxClient[_0x16e3[211]])?_0x16e3[212]:_0x16e3[213]}else {this[_0x16e3[173]]=mxUtils[_0x16e3[174]](_0xde98x28[_0x16e3[169]]);this[_0x16e3[173]][_0x16e3[24]][_0x16e3[175]]=_0xde98x28[_0x16e3[175]]+_0x16e3[192];this[_0x16e3[173]][_0x16e3[24]][_0x16e3[177]]=_0xde98x28[_0x16e3[177]]+_0x16e3[192]};this[_0x16e3[173]][_0x16e3[24]][_0x16e3[23]]=_0x16e3[26];this[_0x16e3[173]][_0x16e3[24]][_0x16e3[178]]=_0x16e3[179];this[_0x16e3[173]][_0x16e3[100]](_0x16e3[180],mxResources[_0x16e3[93]](_0x16e3[17]));mxEvent[_0x16e3[181]](this[_0x16e3[173]],this[_0x16e3[46]],this[_0x16e3[119]]);this[_0x16e3[173]][_0x16e3[24]][_0x16e3[182]]=_0x16e3[183];mxEvent[_0x16e3[28]](this[_0x16e3[173]],_0x16e3[214],mxUtils[_0x16e3[27]](this,function(_0xde98x19){this[_0x16e3[46]][_0x16e3[29]][_0x16e3[114]]();var _0xde98x22=mxUtils[_0x16e3[163]](this[_0x16e3[46]][_0x16e3[25]],mxEvent[_0x16e3[130]](_0xde98x19),mxEvent[_0x16e3[131]](_0xde98x19));this[_0x16e3[46]][_0x16e3[11]][_0x16e3[49]](this[_0x16e3[119]],_0xde98x22[_0x16e3[164]],_0xde98x22[_0x16e3[165]]);this[_0x16e3[46]][_0x16e3[184]]=true;mxEvent[_0x16e3[133]](_0xde98x19)}));this[_0x16e3[46]][_0x16e3[25]][_0x16e3[186]](this[_0x16e3[173]])};this[_0x16e3[187]]()};var _0xde98x26=mxVertexHandler[_0x16e3[16]][_0x16e3[188]];mxVertexHandler[_0x16e3[16]][_0x16e3[188]]=function(){_0xde98x26[_0x16e3[15]](this);this[_0x16e3[187]]()};mxVertexHandler[_0x16e3[16]][_0x16e3[187]]=function(){if(this[_0x16e3[119]]!=null&&this[_0x16e3[173]]!=null){if(mxVertexHandler[_0x16e3[16]][_0x16e3[189]]){this[_0x16e3[173]][_0x16e3[24]][_0x16e3[190]]=(this[_0x16e3[119]][_0x16e3[164]]+this[_0x16e3[119]][_0x16e3[175]]-this[_0x16e3[173]][_0x16e3[191]]/2)+_0x16e3[192];this[_0x16e3[173]][_0x16e3[24]][_0x16e3[193]]=(this[_0x16e3[119]][_0x16e3[165]]-this[_0x16e3[173]][_0x16e3[194]]/2)+_0x16e3[192]}else {this[_0x16e3[173]][_0x16e3[24]][_0x16e3[190]]=(this[_0x16e3[119]][_0x16e3[164]]+this[_0x16e3[119]][_0x16e3[175]]+mxConstants[_0x16e3[139]]/2+2)+_0x16e3[192];this[_0x16e3[173]][_0x16e3[24]][_0x16e3[193]]=(this[_0x16e3[119]][_0x16e3[165]]+(this[_0x16e3[119]][_0x16e3[177]]-this[_0x16e3[173]][_0x16e3[194]])/2)+_0x16e3[192]}}};var _0xde98x27=mxVertexHandler[_0x16e3[16]][_0x16e3[195]];mxVertexHandler[_0x16e3[16]][_0x16e3[195]]=function(_0xde98x18,_0xde98xb){_0xde98x27[_0x16e3[15]](this,arguments);if(this[_0x16e3[173]]!=null){this[_0x16e3[173]][_0x16e3[197]][_0x16e3[196]](this[_0x16e3[173]]);this[_0x16e3[173]]=null}}}}})()
\ No newline at end of file
+/**
+ * $Id: Graph.js,v 1.14 2013-02-16 10:19:54 gaudenz Exp $
+ * Copyright (c) 2006-2012, JGraph Ltd
+ */
+/**
+ * Constructs a new graph instance. Note that the constructor does not take a
+ * container because the graph instance is needed for creating the UI, which
+ * in turn will create the container for the graph. Hence, the container is
+ * assigned later in EditorUi.
+ */
+Graph = function(container, model, renderHint, stylesheet)
+{
+       mxGraph.call(this, container, model, renderHint, stylesheet);
+       
+       this.setConnectable(true);
+       this.setDropEnabled(false);
+       this.setPanning(true);
+       this.setTooltips(!mxClient.IS_TOUCH);
+       this.setAllowLoops(false);
+       this.setMultigraph(false);
+       this.allowAutoPanning = true;
+       this.resetEdgesOnConnect = false;
+       this.constrainChildren = false;
+       
+       // Centers the port icon on the target port
+    this.connectionHandler.targetConnectImage = true;
+
+    // Does not allow dangling edges
+    this.setAllowDanglingEdges(false);
+
+       // Enables cloning of connection sources
+       this.connectionHandler.setCreateTarget(false);
+       
+       // Disables built-in connection starts
+       this.connectionHandler.isValidSource = function()
+       {
+               return mxConnectionHandler.prototype.isValidSource.apply(this, arguments) && urlParams['connect'] != '2';
+       };
+
+       // Sets the style to be used when an elbow edge is double clicked
+       this.alternateEdgeStyle = 'vertical';
+
+       if (stylesheet == null)
+       {
+               this.loadStylesheet();
+       }
+       
+       // Creates rubberband selection
+    var rubberband = new mxRubberband(this);
+    
+    this.getRubberband = function()
+    {
+       return rubberband;
+    };
+    
+    // Shows hand cursor while panning
+       this.panningHandler.addListener(mxEvent.PAN_START, mxUtils.bind(this, function()
+       {
+               this.container.style.cursor = 'pointer';
+       }));
+                       
+       this.panningHandler.addListener(mxEvent.PAN_END, mxUtils.bind(this, function()
+       {
+               this.container.style.cursor = 'default';
+       }));
+
+    // Adds support for HTML labels via style. Note: Currently, only the Java
+    // backend supports HTML labels but CSS support is limited to the following:
+    // http://docs.oracle.com/javase/6/docs/api/index.html?javax/swing/text/html/CSS.html
+       this.isHtmlLabel = function(cell)
+       {
+               var state = this.view.getState(cell);
+               var style = (state != null) ? state.style : this.getCellStyle(cell);
+               
+               return style['html'] == '1' || style['whiteSpace'] == 'wrap';
+       };
+       
+       // HTML entities are displayed as plain text in wrapped plain text labels
+       this.cellRenderer.getLabelValue = function(state)
+       {
+               var result = mxCellRenderer.prototype.getLabelValue.apply(this, arguments);
+               
+               if (state.style['whiteSpace'] == 'wrap' && state.style['html'] != 1)
+               {
+                       result = mxUtils.htmlEntities(result, false);
+               }
+               
+               return result;
+       };
+       
+       // Unlocks all cells
+       this.isCellLocked = function(cell)
+       {
+               return false;
+       };
+
+       // Tap and hold brings up context menu.
+       // Tolerance slightly below graph tolerance is better.
+       this.connectionHandler.tapAndHoldTolerance = 16;
+       
+       //  Tap and hold on background starts rubberband on cell starts connecting
+       var connectionHandlerTapAndHold = this.connectionHandler.tapAndHold;
+       this.connectionHandler.tapAndHold = function(me, state)
+       {
+               if (state == null)
+               {
+                       if (!this.graph.panningHandler.active)
+                       {
+                               rubberband.start(me.getGraphX(), me.getGraphY());
+                               this.graph.panningHandler.panningTrigger = false;
+                       }
+               }
+               else if (tapAndHoldStartsConnection)
+               {
+                       connectionHandlerTapAndHold.apply(this, arguments);     
+               }
+               else if (this.graph.isCellSelected(state.cell) && this.graph.getSelectionCount() > 1)
+               {
+                       this.graph.removeSelectionCell(state.cell);
+               }
+       };
+
+       if (touchStyle)
+       {
+               this.initTouch();
+       }
+};
+
+// Graph inherits from mxGraph
+mxUtils.extend(Graph, mxGraph);
+
+/**
+ * Allows to all values in fit.
+ */
+Graph.prototype.minFitScale = null;
+
+/**
+ * Allows to all values in fit.
+ */
+Graph.prototype.maxFitScale = null;
+
+/**
+ * Loads the stylesheet for this graph.
+ */
+Graph.prototype.loadStylesheet = function()
+{
+    var node = mxUtils.load(STYLE_PATH + '/default.xml').getDocumentElement();
+       var dec = new mxCodec(node.ownerDocument);
+       dec.decode(node, this.getStylesheet());
+};
+
+/**
+ * Inverts the elbow edge style without removing existing styles.
+ */
+Graph.prototype.flipEdge = function(edge)
+{
+       if (edge != null)
+       {
+               var state = this.view.getState(edge);
+               var style = (state != null) ? state.style : this.getCellStyle(edge);
+               
+               if (style != null)
+               {
+                       var elbow = mxUtils.getValue(style, mxConstants.STYLE_ELBOW,
+                               mxConstants.ELBOW_HORIZONTAL);
+                       var value = (elbow == mxConstants.ELBOW_HORIZONTAL) ?
+                               mxConstants.ELBOW_VERTICAL : mxConstants.ELBOW_HORIZONTAL;
+                       this.setCellStyles(mxConstants.STYLE_ELBOW, value, [edge]);
+               }
+       }
+};
+
+/**
+ * Sets the default edge for future connections.
+ */
+Graph.prototype.setDefaultEdge = function(cell)
+{
+       if (cell != null && this.getModel().isEdge(cell))
+       {
+               // Take a snapshot of the cell at the moment of calling
+               var proto = this.getModel().cloneCells([cell])[0];
+               
+               // Delete existing points
+               if (proto.geometry != null)
+               {
+                       proto.geometry.points = null;
+               }
+               
+               // Delete entry-/exitXY styles
+               var style = proto.getStyle();
+               style = mxUtils.setStyle(style, mxConstants.STYLE_ENTRY_X, null);
+               style = mxUtils.setStyle(style, mxConstants.STYLE_ENTRY_Y, null);
+               style = mxUtils.setStyle(style, mxConstants.STYLE_EXIT_X, null);
+               style = mxUtils.setStyle(style, mxConstants.STYLE_EXIT_Y, null);
+               proto.setStyle(style);
+               
+               // Uses edge template for connect preview
+               this.connectionHandler.createEdgeState = function(me)
+               {
+               return this.graph.view.createState(proto);
+           };
+
+           // Creates new connections from edge template
+           this.connectionHandler.factoryMethod = function()
+           {
+               return this.graph.cloneCells([proto])[0];
+           };
+       }
+};
+
+/**
+ * Disables folding for non-swimlanes.
+ */
+Graph.prototype.isCellFoldable = function(cell)
+{
+       return this.foldingEnabled && this.isSwimlane(cell);
+};
+
+/**
+ * Disables drill-down for non-swimlanes.
+ */
+Graph.prototype.isValidRoot = function(cell)
+{
+       return this.isSwimlane(cell);
+};
+
+/**
+ * Overrides createGroupCell to set the group style for new groups to 'group'.
+ */
+Graph.prototype.createGroupCell = function()
+{
+       var group = mxGraph.prototype.createGroupCell.apply(this, arguments);
+       group.setStyle('group');
+       
+       return group;
+};
+
+/**
+ * Giuseppe Careri
+ * Overrides tooltips to show position and size
+ */
+Graph.prototype.getTooltipForCell = function(cell)
+{
+       var tip = '';
+       
+       if (this.getModel().isVertex(cell))
+       {
+               // var geo = this.getCellGeometry(cell);
+               
+               // var f2 = function(x)
+               // {
+               //      return Math.round(parseFloat(x) * 100) / 100;
+               // };
+               
+               // if (geo != null)
+               // {
+               //      if (tip == null)
+               //      {
+               //              tip = '';
+               //      }
+               //      else if (tip.length > 0)
+               //      {
+               //              tip += '\n';
+               //      }
+                       
+               //      tip += 'X: ' + f2(geo.x) + '\nY: ' + f2(geo.y) + '\nW: ' + f2(geo.width) + '\nH: ' + f2(geo.height);
+               // }
+               
+               tip += mxResources.get('description_' + cell.value.nodeName);
+       }
+       else if (this.getModel().isEdge(cell))
+       {
+               tip = mxGraph.prototype.getTooltipForCell.apply(this, arguments);
+       }
+       
+       return tip;
+};
+
+/**
+ * Giuseppe Careri
+ * Returns the label for the given cell.
+ */
+Graph.prototype.convertValueToString = function(cell)
+{
+       if (cell.value != null && typeof(cell.value) == 'object')
+       {
+               return cell.value.getAttribute('label');
+       }
+       
+       return mxGraph.prototype.convertValueToString.apply(this, arguments);
+};
+
+/**
+ * Giuseppe Careri
+ * Handles label changes for XML user objects.
+ */
+Graph.prototype.cellLabelChanged = function(cell, value, autoSize)
+{
+       if (cell.value != null && typeof(cell.value) == 'object')
+       {
+               var tmp = cell.value.cloneNode(true);
+               tmp.setAttribute('label', value);
+               value = tmp;
+       }
+       
+       mxGraph.prototype.cellLabelChanged.apply(this, arguments);
+};
+
+/**
+ * Sets the link for the given cell.
+ */
+Graph.prototype.setLinkForCell = function(cell, link)
+{
+       var value = null;
+       
+       if (cell.value != null && typeof(cell.value) == 'object')
+       {
+               value = cell.value.cloneNode(true);
+       }
+       else
+       {
+               var doc = mxUtils.createXmlDocument();
+               
+               value = doc.createElement('UserObject');
+               value.setAttribute('label', cell.value);
+       }
+       
+       if (link != null && link.length > 0)
+       {
+               value.setAttribute('link', link);
+       }
+       else
+       {
+               value.removeAttribute('link');
+       }
+       
+       this.model.setValue(cell, value);
+};
+
+/**
+ * Returns the link for the given cell.
+ */
+Graph.prototype.getLinkForCell = function(cell)
+{
+       if (cell.value != null && typeof(cell.value) == 'object')
+       {
+               return cell.value.getAttribute('link');
+       }
+       
+       return null;
+};
+
+/**
+ * Customized graph for touch devices.
+ */
+Graph.prototype.initTouch = function()
+{
+       // Disables new connections via "hotspot"
+       this.connectionHandler.marker.isEnabled = function()
+       {
+               return this.graph.connectionHandler.first != null;
+       };
+
+       // Hides menu when editing starts
+       this.addListener(mxEvent.START_EDITING, function(sender, evt)
+       {
+               this.panningHandler.hideMenu();
+       });
+
+       // Context menu for touchstyle
+       var showMenu = false;
+       var menuCell = null;
+
+       // Checks if native hit detection did not return anything and does custom
+       // hit detection for edges to take into account the tolerance
+       this.updateMouseEvent = function(me)
+       {
+               mxGraph.prototype.updateMouseEvent.apply(this, arguments);
+
+               if (me.getState() == null)
+               {
+                       var cell = this.getCellAt(me.graphX, me.graphY);
+                       
+                       if (this.getModel().isEdge(cell))
+                       {
+                               me.state = this.view.getState(cell);
+                               
+                               if (me.state != null && me.state.shape != null)
+                               {
+                                       this.container.style.cursor = me.state.shape.node.style.cursor;
+                               }
+                       }
+               }
+               
+               if (me.getState() == null)
+               {
+                       this.container.style.cursor = 'default';
+               }
+       };
+       
+       // Handles popup menu on touch devices (tap selected cell)
+       this.fireMouseEvent = function(evtName, me, sender)
+       {
+               if (evtName == mxEvent.MOUSE_DOWN)
+               {
+                       if (!this.panningHandler.isMenuShowing())
+                       {
+                               menuCell = me.getCell();
+                               showMenu = (menuCell != null) ? this.isCellSelected(menuCell) : this.isSelectionEmpty();
+                       }
+                       else
+                       {
+                               showMenu = false;
+                               menuCell = null;
+                       }
+               }
+               else if (evtName == mxEvent.MOUSE_UP)
+               {
+                       if (showMenu && !this.isEditing())
+                       {
+                               if (!this.panningHandler.isMenuShowing())
+                               {
+                                       var x = mxEvent.getClientX(me.getEvent());
+                                       var y = mxEvent.getClientY(me.getEvent());
+                                       
+                                       this.panningHandler.popup(x + 16, y, menuCell, me.getEvent());
+                               }
+                               
+                               showMenu = false;
+                               menuCell = null;
+                               me.consume();
+                               
+                               return;
+                       }
+                       
+                       showMenu = false;
+                       menuCell = null;
+               }
+
+               mxGraph.prototype.fireMouseEvent.apply(this, arguments);
+
+               if (evtName == mxEvent.MOUSE_MOVE && me.isConsumed())
+               {
+                       showMenu = false;
+                       menuCell = null;
+               }
+       };
+};
+
+/**
+ * Implements touch devices.
+ */
+(function()
+{
+       // Enables rotation handle
+       mxVertexHandler.prototype.rotationEnabled = true;
+       
+       // Matches label positions of mxGraph 1.x
+       mxText.prototype.baseSpacingTop = 5;
+       mxText.prototype.baseSpacingBottom = 1;
+
+       // Touch-specific static overrides
+       if (touchStyle)
+       {
+               // Sets constants for touch style
+               mxConstants.HANDLE_SIZE = 16;
+               mxConstants.LABEL_HANDLE_SIZE = 7;
+               
+               // Larger tolerance and grid for real touch devices
+               if (mxClient.IS_TOUCH)
+               {
+                       mxVertexHandler.prototype.tolerance = 4;
+                       mxEdgeHandler.prototype.tolerance = 6;
+                       Graph.prototype.tolerance = 14;
+                       Graph.prototype.gridSize = 20;
+                       
+                       // One finger pans (no rubberband selection) must start regardless of mouse button
+                       mxPanningHandler.prototype.selectOnPopup = false;
+                       mxPanningHandler.prototype.useLeftButtonForPanning = true;
+                       mxPanningHandler.prototype.isPanningTrigger = function(me)
+                       {
+                               var evt = me.getEvent();
+                               
+                               return (this.useLeftButtonForPanning && (this.ignoreCell || me.getState() == null)/* &&
+                                               mxEvent.isLeftMouseButton(evt)*/) || (mxEvent.isControlDown(evt) &&
+                                               mxEvent.isShiftDown(evt)) || (this.usePopupTrigger &&
+                                               mxEvent.isPopupTrigger(evt));
+                       };
+               }
+               
+               // Don't clear selection if multiple cells selected
+               var graphHandlerMouseDown = mxGraphHandler.prototype.mouseDown;
+               mxGraphHandler.prototype.mouseDown = function(sender, me)
+               {
+                       graphHandlerMouseDown.apply(this, arguments);
+
+                       if (this.graph.isCellSelected(me.getCell()) && this.graph.getSelectionCount() > 1)
+                       {
+                               this.delayedSelection = false;
+                       }
+               };
+
+               // Changes order of panninghandler
+               Graph.prototype.createHandlers = function(container)
+               {
+                       this.tooltipHandler = new mxTooltipHandler(this);
+                       this.tooltipHandler.setEnabled(false);
+                       // Selection cells first
+                       this.selectionCellsHandler = new mxSelectionCellsHandler(this);
+                       this.panningHandler = new mxPanningHandler(this);
+                       this.panningHandler.panningEnabled = false;
+                       this.connectionHandler = new mxConnectionHandler(this);
+                       this.connectionHandler.setEnabled(false);
+                       this.graphHandler = new mxGraphHandler(this);
+               };
+
+               // On connect the target is selected and we clone the cell of the preview edge for insert
+               mxConnectionHandler.prototype.selectCells = function(edge, target)
+               {
+                       if (touchStyle && target != null)
+                       {
+                               this.graph.setSelectionCell(target);
+                       }
+                       else
+                       {
+                               this.graph.setSelectionCell(edge);
+                       }
+               };
+
+               // Overrides double click handling to use the tolerance
+               // FIXME: Double click on edges in iPad needs focus on textarea
+               var graphDblClick = mxGraph.prototype.dblClick;
+               Graph.prototype.dblClick = function(evt, cell)
+               {
+                       if (cell == null)
+                       {
+                               var pt = mxUtils.convertPoint(this.container,
+                                       mxEvent.getClientX(evt), mxEvent.getClientY(evt));
+                               cell = this.getCellAt(pt.x, pt.y);
+                       }
+
+                       graphDblClick.call(this, evt, cell);
+               };
+
+               // Rounded edge and vertex handles
+               var touchHandle = new mxImage(IMAGE_PATH + '/touch-handle.png', 16, 16);
+               mxVertexHandler.prototype.handleImage = touchHandle;
+               mxEdgeHandler.prototype.handleImage = touchHandle;
+               mxOutline.prototype.sizerImage = touchHandle;
+               
+               // Pre-fetches touch handle
+               new Image().src = touchHandle.src;
+
+               // Adds connect icon to selected vertices
+               var connectorSrc = IMAGE_PATH + '/touch-connector.png';
+               
+               var vertexHandlerInit = mxVertexHandler.prototype.init;
+               mxVertexHandler.prototype.init = function()
+               {
+                       vertexHandlerInit.apply(this, arguments);
+
+                       // Only show connector image on one cell and do not show on containers
+                       if (showConnectorImg && this.graph.connectionHandler.isEnabled() &&
+                               this.graph.isCellConnectable(this.state.cell) &&
+                               !this.graph.isValidRoot(this.state.cell) &&
+                               this.graph.getSelectionCount() == 1)
+                       {
+                               this.connectorImg = mxUtils.createImage(connectorSrc);
+                               this.connectorImg.style.cursor = 'pointer';
+                               this.connectorImg.style.width = '29px';
+                               this.connectorImg.style.height = '29px';
+                               this.connectorImg.style.position = 'absolute';
+                               
+                               if (!mxClient.IS_TOUCH)
+                               {
+                                       this.connectorImg.setAttribute('title', mxResources.get('connect'));
+                                       mxEvent.redirectMouseEvents(this.connectorImg, this.graph, this.state);
+                               }
+
+                               // Adds 2px tolerance
+                               this.connectorImg.style.padding = '2px';
+                               
+                               // Starts connecting on touch/mouse down
+                               mxEvent.addGestureListeners(this.connectorImg,
+                                       mxUtils.bind(this, function(evt)
+                                       {
+                                               this.graph.panningHandler.hideMenu();
+                                               var pt = mxUtils.convertPoint(this.graph.container,
+                                                               mxEvent.getClientX(evt), mxEvent.getClientY(evt));
+                                               this.graph.connectionHandler.start(this.state, pt.x, pt.y);
+                                               this.graph.isMouseDown = true;
+                                               mxEvent.consume(evt);
+                                       })
+                               );
+
+                               this.graph.container.appendChild(this.connectorImg);
+                       }
+
+                       this.redrawTools();
+               };
+               
+               var vertexHandlerRedraw = mxVertexHandler.prototype.redraw;
+               mxVertexHandler.prototype.redraw = function()
+               {
+                       vertexHandlerRedraw.apply(this);
+                       this.redrawTools();
+               };
+               
+               mxVertexHandler.prototype.redrawTools = function()
+               {
+                       if (this.state != null && this.connectorImg != null)
+                       {
+                               // Top right for single-sizer
+                               if (mxVertexHandler.prototype.singleSizer)
+                               {
+                                       this.connectorImg.style.left = (this.state.x + this.state.width - this.connectorImg.offsetWidth / 2) + 'px';
+                                       this.connectorImg.style.top = (this.state.y - this.connectorImg.offsetHeight / 2) + 'px';
+                               }
+                               else
+                               {
+                                       this.connectorImg.style.left = (this.state.x + this.state.width + mxConstants.HANDLE_SIZE / 2 + 4/* - 2 padding*/) + 'px';
+                                       this.connectorImg.style.top = (this.state.y + (this.state.height - this.connectorImg.offsetHeight) / 2) + 'px';
+                               }
+                       }
+               };
+               
+               var vertexHandlerDestroy = mxVertexHandler.prototype.destroy;
+               mxVertexHandler.prototype.destroy = function(sender, me)
+               {
+                       vertexHandlerDestroy.apply(this, arguments);
+
+                       if (this.connectorImg != null)
+                       {
+                               this.connectorImg.parentNode.removeChild(this.connectorImg);
+                               this.connectorImg = null;
+                       }
+               };
+               
+               // Pre-fetches touch connector
+               new Image().src = connectorSrc;
+       }
+       else
+       {
+               var img = new mxImage(IMAGE_PATH + '/connector.png', 15, 15);
+               mxConnectionHandler.prototype.connectImage = img;
+
+               // Pre-fetches img
+               new Image().src = img.src;
+               
+               if (urlParams['connect'] == '2') // not touchStyle
+               {
+                       var img = new mxImage(IMAGE_PATH + '/connector.png', 15, 15);
+                                       
+                       var vertexHandlerInit = mxVertexHandler.prototype.init;
+                       mxVertexHandler.prototype.init = function()
+                       {
+                               vertexHandlerInit.apply(this, arguments);
+       
+                               // Only show connector image on one cell and do not show on containers
+                               if (showConnectorImg && this.graph.connectionHandler.isEnabled() &&
+                                       this.graph.isCellConnectable(this.state.cell) &&
+                                       !this.graph.isValidRoot(this.state.cell) &&
+                                       this.graph.getSelectionCount() == 1)
+                               {
+                                       // Workaround for event redirection via image tag in quirks and IE8
+                                       if (mxClient.IS_IE && !mxClient.IS_SVG)
+                                       {
+                                               this.connectorImg = document.createElement('div');
+                                               this.connectorImg.style.backgroundImage = 'url(' + img.src + ')';
+                                               this.connectorImg.style.backgroundPosition = 'center';
+                                               this.connectorImg.style.backgroundRepeat = 'no-repeat';
+                                               this.connectorImg.style.width = (img.width + 4) + 'px';
+                                               this.connectorImg.style.height = (img.height + 4) + 'px';
+                                               this.connectorImg.style.display = (mxClient.IS_QUIRKS) ? 'inline' : 'inline-block';
+                                       }
+                                       else
+                                       {
+                                               this.connectorImg = mxUtils.createImage(img.src);
+                                               this.connectorImg.style.width = img.width + 'px';
+                                               this.connectorImg.style.height = img.height + 'px';
+                                       }
+                                       
+                                       this.connectorImg.style.cursor = 'pointer';
+                                       this.connectorImg.style.position = 'absolute';
+                                       this.connectorImg.setAttribute('title', mxResources.get('connect'));
+                                       mxEvent.redirectMouseEvents(this.connectorImg, this.graph, this.state);
+                                       
+                                       // Adds 2px tolerance
+                                       this.connectorImg.style.padding = '2px';
+                                       
+                                       // Starts connecting on touch/mouse down
+                                       mxEvent.addListener(this.connectorImg, 'mousedown',
+                                               mxUtils.bind(this, function(evt)
+                                               {
+                                                       this.graph.panningHandler.hideMenu();
+                                                       var pt = mxUtils.convertPoint(this.graph.container,
+                                                                       mxEvent.getClientX(evt), mxEvent.getClientY(evt));
+                                                       this.graph.connectionHandler.start(this.state, pt.x, pt.y);
+                                                       this.graph.isMouseDown = true;
+                                                       mxEvent.consume(evt);
+                                               })
+                                       );
+       
+                                       this.graph.container.appendChild(this.connectorImg);
+                               }
+       
+                               this.redrawTools();
+                       };
+                       
+                       var vertexHandlerRedraw = mxVertexHandler.prototype.redraw;
+                       mxVertexHandler.prototype.redraw = function()
+                       {
+                               vertexHandlerRedraw.apply(this);
+                               this.redrawTools();
+                       };
+                       
+                       mxVertexHandler.prototype.redrawTools = function()
+                       {
+                               if (this.state != null && this.connectorImg != null)
+                               {
+                                       // Top right for single-sizer
+                                       if (mxVertexHandler.prototype.singleSizer)
+                                       {
+                                               this.connectorImg.style.left = (this.state.x + this.state.width - this.connectorImg.offsetWidth / 2) + 'px';
+                                               this.connectorImg.style.top = (this.state.y - this.connectorImg.offsetHeight / 2) + 'px';
+                                       }
+                                       else
+                                       {
+                                               this.connectorImg.style.left = (this.state.x + this.state.width + mxConstants.HANDLE_SIZE / 2 + 2/* - 2 padding*/) + 'px';
+                                               this.connectorImg.style.top = (this.state.y + (this.state.height - this.connectorImg.offsetHeight) / 2) + 'px';
+                                       }
+                               }
+                       };
+                       
+                       var vertexHandlerDestroy = mxVertexHandler.prototype.destroy;
+                       mxVertexHandler.prototype.destroy = function(sender, me)
+                       {
+                               vertexHandlerDestroy.apply(this, arguments);
+       
+                               if (this.connectorImg != null)
+                               {
+                                       this.connectorImg.parentNode.removeChild(this.connectorImg);
+                                       this.connectorImg = null;
+                               }
+                       };
+               }
+       }
+})();
index ca1246e..8ef4252 100644 (file)
@@ -1 +1,716 @@
-var _0xe88f=["\x65\x64\x69\x74\x6F\x72\x55\x69","\x6D\x65\x6E\x75\x73","\x69\x6E\x69\x74","\x73\x72\x63","\x2F\x63\x68\x65\x63\x6B\x6D\x61\x72\x6B\x2E\x67\x69\x66","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x67\x72\x61\x70\x68","\x65\x64\x69\x74\x6F\x72","\x66\x6F\x6E\x74\x46\x61\x6D\x69\x6C\x79","\x48\x65\x6C\x76\x65\x74\x69\x63\x61","\x56\x65\x72\x64\x61\x6E\x61","\x54\x69\x6D\x65\x73\x20\x4E\x65\x77\x20\x52\x6F\x6D\x61\x6E","\x47\x61\x72\x61\x6D\x6F\x6E\x64","\x43\x6F\x6D\x69\x63\x20\x53\x61\x6E\x73\x20\x4D\x53","\x43\x6F\x75\x72\x69\x65\x72\x20\x4E\x65\x77","\x47\x65\x6F\x72\x67\x69\x61","\x4C\x75\x63\x69\x64\x61\x20\x43\x6F\x6E\x73\x6F\x6C\x65","\x54\x61\x68\x6F\x6D\x61","\x6C\x65\x6E\x67\x74\x68","\x53\x54\x59\x4C\x45\x5F\x46\x4F\x4E\x54\x46\x41\x4D\x49\x4C\x59","\x73\x74\x79\x6C\x65\x43\x68\x61\x6E\x67\x65","\x73\x74\x79\x6C\x65","\x6E\x65\x78\x74\x53\x69\x62\x6C\x69\x6E\x67","\x66\x69\x72\x73\x74\x43\x68\x69\x6C\x64","\x61\x64\x64\x53\x65\x70\x61\x72\x61\x74\x6F\x72","\x63\x75\x73\x74\x6F\x6D","\x67\x65\x74","","\x70\x72\x6F\x6D\x70\x74\x43\x68\x61\x6E\x67\x65","\x62\x69\x6E\x64","\x70\x75\x74","\x66\x6F\x6E\x74\x53\x69\x7A\x65","\x53\x54\x59\x4C\x45\x5F\x46\x4F\x4E\x54\x53\x49\x5A\x45","\x28\x70\x74\x29","\x31\x32","\x6C\x69\x6E\x65\x77\x69\x64\x74\x68","\x70\x78","\x53\x54\x59\x4C\x45\x5F\x53\x54\x52\x4F\x4B\x45\x57\x49\x44\x54\x48","\x28\x70\x78\x29","\x31","\x6C\x69\x6E\x65","\x73\x74\x72\x61\x69\x67\x68\x74","\x53\x54\x59\x4C\x45\x5F\x45\x44\x47\x45","\x65\x6E\x74\x69\x74\x79\x52\x65\x6C\x61\x74\x69\x6F\x6E","\x65\x6E\x74\x69\x74\x79\x52\x65\x6C\x61\x74\x69\x6F\x6E\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x68\x6F\x72\x69\x7A\x6F\x6E\x74\x61\x6C","\x53\x54\x59\x4C\x45\x5F\x45\x4C\x42\x4F\x57","\x65\x6C\x62\x6F\x77\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x76\x65\x72\x74\x69\x63\x61\x6C","\x6D\x61\x6E\x75\x61\x6C","\x73\x65\x67\x6D\x65\x6E\x74\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x61\x75\x74\x6F\x6D\x61\x74\x69\x63","\x6F\x72\x74\x68\x6F\x67\x6F\x6E\x61\x6C\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x6C\x69\x6E\x65\x65\x6E\x64","\x63\x6C\x61\x73\x73\x69\x63","\x53\x54\x59\x4C\x45\x5F\x45\x4E\x44\x41\x52\x52\x4F\x57","\x41\x52\x52\x4F\x57\x5F\x43\x4C\x41\x53\x53\x49\x43","\x6F\x70\x65\x6E\x41\x72\x72\x6F\x77","\x41\x52\x52\x4F\x57\x5F\x4F\x50\x45\x4E","\x62\x6C\x6F\x63\x6B","\x41\x52\x52\x4F\x57\x5F\x42\x4C\x4F\x43\x4B","\x6F\x76\x61\x6C","\x41\x52\x52\x4F\x57\x5F\x4F\x56\x41\x4C","\x64\x69\x61\x6D\x6F\x6E\x64","\x41\x52\x52\x4F\x57\x5F\x44\x49\x41\x4D\x4F\x4E\x44","\x64\x69\x61\x6D\x6F\x6E\x64\x54\x68\x69\x6E","\x41\x52\x52\x4F\x57\x5F\x44\x49\x41\x4D\x4F\x4E\x44\x5F\x54\x48\x49\x4E","\x6E\x6F\x6E\x65","\x4E\x4F\x4E\x45","\x74\x72\x61\x6E\x73\x70\x61\x72\x65\x6E\x74","\x65\x6E\x64\x46\x69\x6C\x6C","\x74\x6F\x67\x67\x6C\x65\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65\x73","\x61\x64\x64\x49\x74\x65\x6D","\x73\x69\x7A\x65","\x6C\x69\x6E\x65\x73\x74\x61\x72\x74","\x53\x54\x59\x4C\x45\x5F\x53\x54\x41\x52\x54\x41\x52\x52\x4F\x57","\x73\x74\x61\x72\x74\x46\x69\x6C\x6C","\x73\x70\x61\x63\x69\x6E\x67","\x65\x6E\x61\x62\x6C\x65\x64","\x73\x68\x61\x64\x6F\x77","\x61\x63\x74\x69\x6F\x6E\x73","\x73\x68\x6F\x77\x44\x69\x73\x61\x62\x6C\x65\x64","\x74\x6F\x70","\x30","\x72\x69\x67\x68\x74","\x62\x6F\x74\x74\x6F\x6D","\x6C\x65\x66\x74","\x67\x6C\x6F\x62\x61\x6C","\x70\x65\x72\x69\x6D\x65\x74\x65\x72","\x73\x6F\x75\x72\x63\x65\x53\x70\x61\x63\x69\x6E\x67","\x74\x61\x72\x67\x65\x74\x53\x70\x61\x63\x69\x6E\x67","\x66\x6F\x72\x6D\x61\x74","\x61\x64\x64\x4D\x65\x6E\x75\x49\x74\x65\x6D","\x74\x65\x78\x74","\x61\x64\x64\x53\x75\x62\x6D\x65\x6E\x75","\x2D","\x62\x6F\x6C\x64","\x69\x74\x61\x6C\x69\x63","\x75\x6E\x64\x65\x72\x6C\x69\x6E\x65","\x61\x64\x64\x4D\x65\x6E\x75\x49\x74\x65\x6D\x73","\x61\x6C\x69\x67\x6E\x6D\x65\x6E\x74","\x77\x6F\x72\x64\x57\x72\x61\x70","\x74\x65\x78\x74\x4F\x70\x61\x63\x69\x74\x79","\x28\x25\x29","\x31\x30\x30","\x68\x69\x64\x65","\x6C\x65\x66\x74\x41\x6C\x69\x67\x6E","\x53\x54\x59\x4C\x45\x5F\x41\x4C\x49\x47\x4E","\x41\x4C\x49\x47\x4E\x5F\x4C\x45\x46\x54","\x63\x65\x6E\x74\x65\x72","\x41\x4C\x49\x47\x4E\x5F\x43\x45\x4E\x54\x45\x52","\x72\x69\x67\x68\x74\x41\x6C\x69\x67\x6E","\x41\x4C\x49\x47\x4E\x5F\x52\x49\x47\x48\x54","\x74\x6F\x70\x41\x6C\x69\x67\x6E","\x53\x54\x59\x4C\x45\x5F\x56\x45\x52\x54\x49\x43\x41\x4C\x5F\x41\x4C\x49\x47\x4E","\x41\x4C\x49\x47\x4E\x5F\x54\x4F\x50","\x6D\x69\x64\x64\x6C\x65","\x41\x4C\x49\x47\x4E\x5F\x4D\x49\x44\x44\x4C\x45","\x62\x6F\x74\x74\x6F\x6D\x41\x6C\x69\x67\x6E","\x41\x4C\x49\x47\x4E\x5F\x42\x4F\x54\x54\x4F\x4D","\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x53\x54\x59\x4C\x45\x5F\x4C\x41\x42\x45\x4C\x5F\x50\x4F\x53\x49\x54\x49\x4F\x4E","\x53\x54\x59\x4C\x45\x5F\x56\x45\x52\x54\x49\x43\x41\x4C\x5F\x4C\x41\x42\x45\x4C\x5F\x50\x4F\x53\x49\x54\x49\x4F\x4E","\x64\x69\x72\x65\x63\x74\x69\x6F\x6E","\x66\x6C\x69\x70\x48","\x66\x6C\x69\x70\x56","\x74\x69\x6C\x74","\x72\x6F\x74\x61\x74\x69\x6F\x6E","\x61\x6C\x69\x67\x6E","\x61\x6C\x69\x67\x6E\x43\x65\x6C\x6C\x73","\x6C\x61\x79\x6F\x75\x74","\x68\x6F\x72\x69\x7A\x6F\x6E\x74\x61\x6C\x46\x6C\x6F\x77","\x65\x78\x65\x63\x75\x74\x65\x4C\x61\x79\x6F\x75\x74","\x76\x65\x72\x74\x69\x63\x61\x6C\x46\x6C\x6F\x77","\x6E\x61\x76\x69\x67\x61\x74\x69\x6F\x6E","\x68\x6F\x6D\x65","\x65\x78\x69\x74\x47\x72\x6F\x75\x70","\x65\x6E\x74\x65\x72\x47\x72\x6F\x75\x70","\x65\x78\x70\x61\x6E\x64","\x63\x6F\x6C\x6C\x61\x70\x73\x65","\x61\x72\x72\x61\x6E\x67\x65","\x74\x6F\x46\x72\x6F\x6E\x74","\x74\x6F\x42\x61\x63\x6B","\x67\x72\x6F\x75\x70","\x75\x6E\x67\x72\x6F\x75\x70","\x72\x65\x6D\x6F\x76\x65\x46\x72\x6F\x6D\x47\x72\x6F\x75\x70","\x76\x69\x65\x77","\x61\x63\x74\x75\x61\x6C\x53\x69\x7A\x65","\x25","\x7A\x6F\x6F\x6D\x54\x6F","\x7A\x6F\x6F\x6D\x49\x6E","\x7A\x6F\x6F\x6D\x4F\x75\x74","\x66\x69\x74\x57\x69\x6E\x64\x6F\x77","\x63\x75\x73\x74\x6F\x6D\x5A\x6F\x6F\x6D","\x66\x69\x74\x50\x61\x67\x65","\x66\x69\x74\x50\x61\x67\x65\x57\x69\x64\x74\x68","\x66\x69\x6C\x65","\x6E\x65\x77","\x6F\x70\x65\x6E","\x73\x61\x76\x65","\x73\x61\x76\x65\x41\x73","\x70\x75\x62\x6C\x69\x73\x68","\x76\x61\x72\x69\x61\x62\x6C\x65","\x69\x6D\x70\x6F\x72\x74","\x65\x78\x70\x6F\x72\x74","\x65\x64\x69\x74\x46\x69\x6C\x65","\x72\x65\x6E\x61\x6D\x65","\x70\x72\x69\x6E\x74","\x65\x64\x69\x74","\x75\x6E\x64\x6F","\x72\x65\x64\x6F","\x63\x75\x74","\x63\x6F\x70\x79","\x70\x61\x73\x74\x65","\x64\x65\x6C\x65\x74\x65","\x64\x75\x70\x6C\x69\x63\x61\x74\x65","\x73\x65\x6C\x65\x63\x74\x56\x65\x72\x74\x69\x63\x65\x73","\x73\x65\x6C\x65\x63\x74\x45\x64\x67\x65\x73","\x73\x65\x6C\x65\x63\x74\x41\x6C\x6C","\x68\x65\x6C\x70","\x61\x62\x6F\x75\x74","\x61\x64\x64\x4D\x65\x6E\x75","\x65\x78\x65\x63\x75\x74\x65","\x62\x65\x67\x69\x6E\x55\x70\x64\x61\x74\x65","\x67\x65\x74\x4D\x6F\x64\x65\x6C","\x73\x65\x74\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65\x73","\x65\x6E\x64\x55\x70\x64\x61\x74\x65","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x67\x65\x74\x53\x74\x61\x74\x65","\x67\x65\x74\x56\x69\x65\x77","\x65\x6E\x74\x65\x72\x56\x61\x6C\x75\x65","\x20","\x70\x72\x6F\x6D\x70\x74","\x6C\x61\x62\x65\x6C","\x66\x75\x6E\x63\x74","\x74\x6F\x67\x67\x6C\x65\x41\x63\x74\x69\x6F\x6E","\x69\x73\x53\x65\x6C\x65\x63\x74\x65\x64","\x61\x64\x64\x43\x68\x65\x63\x6B\x6D\x61\x72\x6B","\x61\x64\x64\x53\x68\x6F\x72\x74\x63\x75\x74","\x73\x68\x6F\x72\x74\x63\x75\x74","\x73\x70\x61\x6E","\x63\x72\x65\x61\x74\x65\x45\x6C\x65\x6D\x65\x6E\x74","\x63\x6F\x6C\x6F\x72","\x67\x72\x61\x79","\x77\x72\x69\x74\x65","\x61\x70\x70\x65\x6E\x64\x43\x68\x69\x6C\x64","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x75\x72\x6C\x28","\x2F\x63\x68\x65\x63\x6B\x6D\x61\x72\x6B\x2E\x67\x69\x66\x29","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x52\x65\x70\x65\x61\x74","\x6E\x6F\x2D\x72\x65\x70\x65\x61\x74","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x32\x70\x78\x20\x35\x30\x25","\x63\x72\x65\x61\x74\x65\x50\x6F\x70\x75\x70\x4D\x65\x6E\x75","\x73\x6D\x61\x72\x74\x53\x65\x70\x61\x72\x61\x74\x6F\x72\x73","\x69\x73\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x45\x6D\x70\x74\x79","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x6F\x75\x6E\x74","\x69\x73\x45\x64\x67\x65","\x73\x65\x74\x41\x73\x44\x65\x66\x61\x75\x6C\x74\x45\x64\x67\x65","\x67\x65\x74\x48\x61\x6E\x64\x6C\x65\x72","\x73\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73\x48\x61\x6E\x64\x6C\x65\x72","\x62\x65\x6E\x64\x73","\x67\x65\x74\x48\x61\x6E\x64\x6C\x65\x46\x6F\x72\x45\x76\x65\x6E\x74","\x72\x65\x6D\x6F\x76\x65\x57\x61\x79\x70\x6F\x69\x6E\x74","\x68\x61\x6E\x64\x6C\x65\x72","\x69\x6E\x64\x65\x78","\x61\x64\x64\x57\x61\x79\x70\x6F\x69\x6E\x74","\x67\x65\x74\x4C\x69\x6E\x6B\x46\x6F\x72\x43\x65\x6C\x6C","\x6F\x70\x65\x6E\x4C\x69\x6E\x6B","\x63\x72\x65\x61\x74\x65\x4D\x65\x6E\x75\x62\x61\x72","\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x68\x69\x64\x65\x4D\x65\x6E\x75","\x61\x64\x64\x47\x65\x73\x74\x75\x72\x65\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x63\x75\x72\x72\x65\x6E\x74\x4D\x65\x6E\x75","\x61","\x68\x72\x65\x66","\x6A\x61\x76\x61\x73\x63\x72\x69\x70\x74\x3A\x76\x6F\x69\x64\x28\x30\x29\x3B","\x73\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65","\x67\x65\x49\x74\x65\x6D","\x61\x64\x64\x4D\x65\x6E\x75\x48\x61\x6E\x64\x6C\x65\x72","\x70\x61\x6E\x6E\x69\x6E\x67\x48\x61\x6E\x64\x6C\x65\x72","\x64\x69\x76","\x20\x67\x65\x4D\x65\x6E\x75\x62\x61\x72\x4D\x65\x6E\x75","\x61\x75\x74\x6F\x45\x78\x70\x61\x6E\x64","\x61\x70\x70\x6C\x79","\x64\x65\x73\x74\x72\x6F\x79","\x63\x75\x72\x72\x65\x6E\x74\x45\x6C\x74","\x6F\x66\x66\x73\x65\x74\x4C\x65\x66\x74","\x6F\x66\x66\x73\x65\x74\x57\x69\x64\x74\x68","\x70\x61\x67\x65\x2D\x73\x69\x64\x65\x62\x61\x72","\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x42\x79\x49\x64","\x6F\x66\x66\x73\x65\x74\x54\x6F\x70","\x6F\x66\x66\x73\x65\x74\x48\x65\x69\x67\x68\x74","\x70\x6F\x70\x75\x70","\x63\x6F\x6E\x73\x75\x6D\x65","\x6D\x6F\x75\x73\x65\x6D\x6F\x76\x65","\x61\x64\x64\x4C\x69\x73\x74\x65\x6E\x65\x72","\x6D\x6F\x75\x73\x65\x64\x6F\x77\x6E","\x63\x6C\x69\x63\x6B","\x63\x61\x6C\x6C","\x65\x78\x74\x65\x6E\x64","\x73\x65\x74\x45\x6E\x61\x62\x6C\x65\x64","\x73\x74\x61\x74\x65\x43\x68\x61\x6E\x67\x65\x64","\x66\x69\x72\x65\x45\x76\x65\x6E\x74"];Menus=function(_0x125fx1){this[_0xe88f[0]]=_0x125fx1;this[_0xe88f[1]]= new Object();this[_0xe88f[2]](); new Image()[_0xe88f[3]]=IMAGE_PATH+_0xe88f[4]};Menus[_0xe88f[5]][_0xe88f[2]]=function(){var _0x125fx2=this[_0xe88f[0]][_0xe88f[7]][_0xe88f[6]];this[_0xe88f[30]](_0xe88f[8], new Menu(mxUtils[_0xe88f[29]](this,function(_0x125fx3,_0x125fx4){var _0x125fx5=[_0xe88f[9],_0xe88f[10],_0xe88f[11],_0xe88f[12],_0xe88f[13],_0xe88f[14],_0xe88f[15],_0xe88f[16],_0xe88f[17]];for(var _0x125fx6=0;_0x125fx6<_0x125fx5[_0xe88f[18]];_0x125fx6++){var _0x125fx7=this[_0xe88f[20]](_0x125fx3,_0x125fx5[_0x125fx6],[mxConstants[_0xe88f[19]]],[_0x125fx5[_0x125fx6]],null,_0x125fx4);_0x125fx7[_0xe88f[23]][_0xe88f[22]][_0xe88f[21]][_0xe88f[8]]=_0x125fx5[_0x125fx6]};_0x125fx3[_0xe88f[24]](_0x125fx4);this[_0xe88f[28]](_0x125fx3,mxResources[_0xe88f[26]](_0xe88f[25]),_0xe88f[27],mxConstants.DEFAULT_FONTFAMILY,mxConstants.STYLE_FONTFAMILY,_0x125fx4)})));this[_0xe88f[30]](_0xe88f[31], new Menu(mxUtils[_0xe88f[29]](this,function(_0x125fx3,_0x125fx4){var _0x125fx8=[6,8,9,10,11,12,14,18,24,36,48,72];for(var _0x125fx6=0;_0x125fx6<_0x125fx8[_0xe88f[18]];_0x125fx6++){this[_0xe88f[20]](_0x125fx3,_0x125fx8[_0x125fx6],[mxConstants[_0xe88f[32]]],[_0x125fx8[_0x125fx6]],null,_0x125fx4)};_0x125fx3[_0xe88f[24]](_0x125fx4);this[_0xe88f[28]](_0x125fx3,mxResources[_0xe88f[26]](_0xe88f[25]),_0xe88f[33],_0xe88f[34],mxConstants.STYLE_FONTSIZE,_0x125fx4)})));this[_0xe88f[30]](_0xe88f[35], new Menu(mxUtils[_0xe88f[29]](this,function(_0x125fx3,_0x125fx4){var _0x125fx8=[1,2,3,4,8,12,16,24];for(var _0x125fx6=0;_0x125fx6<_0x125fx8[_0xe88f[18]];_0x125fx6++){this[_0xe88f[20]](_0x125fx3,_0x125fx8[_0x125fx6]+_0xe88f[36],[mxConstants[_0xe88f[37]]],[_0x125fx8[_0x125fx6]],null,_0x125fx4)};_0x125fx3[_0xe88f[24]](_0x125fx4);this[_0xe88f[28]](_0x125fx3,mxResources[_0xe88f[26]](_0xe88f[25]),_0xe88f[38],_0xe88f[39],mxConstants.STYLE_STROKEWIDTH,_0x125fx4)})));this[_0xe88f[30]](_0xe88f[40], new Menu(mxUtils[_0xe88f[29]](this,function(_0x125fx3,_0x125fx4){this[_0xe88f[20]](_0x125fx3,mxResources[_0xe88f[26]](_0xe88f[41]),[mxConstants[_0xe88f[42]]],[null],null,_0x125fx4);this[_0xe88f[20]](_0x125fx3,mxResources[_0xe88f[26]](_0xe88f[43]),[mxConstants[_0xe88f[42]]],[_0xe88f[44]],null,_0x125fx4);_0x125fx3[_0xe88f[24]](_0x125fx4);this[_0xe88f[20]](_0x125fx3,mxResources[_0xe88f[26]](_0xe88f[45]),[mxConstants[_0xe88f[42]],mxConstants[_0xe88f[46]]],[_0xe88f[47],_0xe88f[45]],null,_0x125fx4);this[_0xe88f[20]](_0x125fx3,mxResources[_0xe88f[26]](_0xe88f[48]),[mxConstants[_0xe88f[42]],mxConstants[_0xe88f[46]]],[_0xe88f[47],_0xe88f[48]],null,_0x125fx4);_0x125fx3[_0xe88f[24]](_0x125fx4);this[_0xe88f[20]](_0x125fx3,mxResources[_0xe88f[26]](_0xe88f[49]),[mxConstants[_0xe88f[42]]],[_0xe88f[50]],null,_0x125fx4);this[_0xe88f[20]](_0x125fx3,mxResources[_0xe88f[26]](_0xe88f[51]),[mxConstants[_0xe88f[42]]],[_0xe88f[52]],null,_0x125fx4)})));this[_0xe88f[30]](_0xe88f[53], new Menu(mxUtils[_0xe88f[29]](this,function(_0x125fx3,_0x125fx4){this[_0xe88f[20]](_0x125fx3,mxResources[_0xe88f[26]](_0xe88f[54]),[mxConstants[_0xe88f[55]]],[mxConstants[_0xe88f[56]]],null,_0x125fx4);this[_0xe88f[20]](_0x125fx3,mxResources[_0xe88f[26]](_0xe88f[57]),[mxConstants[_0xe88f[55]]],[mxConstants[_0xe88f[58]]],null,_0x125fx4);this[_0xe88f[20]](_0x125fx3,mxResources[_0xe88f[26]](_0xe88f[59]),[mxConstants[_0xe88f[55]]],[mxConstants[_0xe88f[60]]],null,_0x125fx4);_0x125fx3[_0xe88f[24]](_0x125fx4);this[_0xe88f[20]](_0x125fx3,mxResources[_0xe88f[26]](_0xe88f[61]),[mxConstants[_0xe88f[55]]],[mxConstants[_0xe88f[62]]],null,_0x125fx4);this[_0xe88f[20]](_0x125fx3,mxResources[_0xe88f[26]](_0xe88f[63]),[mxConstants[_0xe88f[55]]],[mxConstants[_0xe88f[64]]],null,_0x125fx4);this[_0xe88f[20]](_0x125fx3,mxResources[_0xe88f[26]](_0xe88f[65]),[mxConstants[_0xe88f[55]]],[mxConstants[_0xe88f[66]]],null,_0x125fx4);_0x125fx3[_0xe88f[24]](_0x125fx4);this[_0xe88f[20]](_0x125fx3,mxResources[_0xe88f[26]](_0xe88f[67]),[mxConstants[_0xe88f[55]]],[mxConstants[_0xe88f[68]]],null,_0x125fx4);_0x125fx3[_0xe88f[24]](_0x125fx4);_0x125fx3[_0xe88f[72]](mxResources[_0xe88f[26]](_0xe88f[69]),null,function(){_0x125fx2[_0xe88f[71]](_0xe88f[70],true)},_0x125fx4,null,true);_0x125fx3[_0xe88f[24]](_0x125fx4);this[_0xe88f[28]](_0x125fx3,mxResources[_0xe88f[26]](_0xe88f[73]),_0xe88f[38],mxConstants.DEFAULT_MARKERSIZE,mxConstants.STYLE_ENDSIZE,_0x125fx4)})));this[_0xe88f[30]](_0xe88f[74], new Menu(mxUtils[_0xe88f[29]](this,function(_0x125fx3,_0x125fx4){this[_0xe88f[20]](_0x125fx3,mxResources[_0xe88f[26]](_0xe88f[54]),[mxConstants[_0xe88f[75]]],[mxConstants[_0xe88f[56]]],null,_0x125fx4);this[_0xe88f[20]](_0x125fx3,mxResources[_0xe88f[26]](_0xe88f[57]),[mxConstants[_0xe88f[75]]],[mxConstants[_0xe88f[58]]],null,_0x125fx4);this[_0xe88f[20]](_0x125fx3,mxResources[_0xe88f[26]](_0xe88f[59]),[mxConstants[_0xe88f[75]]],[mxConstants[_0xe88f[60]]],null,_0x125fx4);_0x125fx3[_0xe88f[24]](_0x125fx4);this[_0xe88f[20]](_0x125fx3,mxResources[_0xe88f[26]](_0xe88f[61]),[mxConstants[_0xe88f[75]]],[mxConstants[_0xe88f[62]]],null,_0x125fx4);this[_0xe88f[20]](_0x125fx3,mxResources[_0xe88f[26]](_0xe88f[63]),[mxConstants[_0xe88f[75]]],[mxConstants[_0xe88f[64]]],null,_0x125fx4);this[_0xe88f[20]](_0x125fx3,mxResources[_0xe88f[26]](_0xe88f[65]),[mxConstants[_0xe88f[75]]],[mxConstants[_0xe88f[66]]],null,_0x125fx4);_0x125fx3[_0xe88f[24]](_0x125fx4);this[_0xe88f[20]](_0x125fx3,mxResources[_0xe88f[26]](_0xe88f[67]),[mxConstants[_0xe88f[75]]],[mxConstants[_0xe88f[68]]],null,_0x125fx4);_0x125fx3[_0xe88f[24]](_0x125fx4);_0x125fx3[_0xe88f[72]](mxResources[_0xe88f[26]](_0xe88f[69]),null,function(){_0x125fx2[_0xe88f[71]](_0xe88f[76],true)},_0x125fx4,null,true);_0x125fx3[_0xe88f[24]](_0x125fx4);this[_0xe88f[28]](_0x125fx3,mxResources[_0xe88f[26]](_0xe88f[73]),_0xe88f[38],mxConstants.DEFAULT_MARKERSIZE,mxConstants.STYLE_STARTSIZE,_0x125fx4)})));this[_0xe88f[30]](_0xe88f[77], new Menu(mxUtils[_0xe88f[29]](this,function(_0x125fx3,_0x125fx4){var _0x125fx9=this[_0xe88f[0]][_0xe88f[80]][_0xe88f[26]](_0xe88f[79])[_0xe88f[78]];var _0x125fxa=this[_0xe88f[26]](_0xe88f[40])[_0xe88f[78]];if(_0x125fx9||_0x125fx3[_0xe88f[81]]){this[_0xe88f[28]](_0x125fx3,mxResources[_0xe88f[26]](_0xe88f[82]),_0xe88f[38],_0xe88f[83],mxConstants.STYLE_SPACING_TOP,_0x125fx4,_0x125fx9);this[_0xe88f[28]](_0x125fx3,mxResources[_0xe88f[26]](_0xe88f[84]),_0xe88f[38],_0xe88f[83],mxConstants.STYLE_SPACING_RIGHT,_0x125fx4,_0x125fx9);this[_0xe88f[28]](_0x125fx3,mxResources[_0xe88f[26]](_0xe88f[85]),_0xe88f[38],_0xe88f[83],mxConstants.STYLE_SPACING_BOTTOM,_0x125fx4,_0x125fx9);this[_0xe88f[28]](_0x125fx3,mxResources[_0xe88f[26]](_0xe88f[86]),_0xe88f[38],_0xe88f[83],mxConstants.STYLE_SPACING_LEFT,_0x125fx4,_0x125fx9);_0x125fx3[_0xe88f[24]](_0x125fx4);this[_0xe88f[28]](_0x125fx3,mxResources[_0xe88f[26]](_0xe88f[87]),_0xe88f[38],_0xe88f[83],mxConstants.STYLE_SPACING,_0x125fx4,_0x125fx9);this[_0xe88f[28]](_0x125fx3,mxResources[_0xe88f[26]](_0xe88f[88]),_0xe88f[38],_0xe88f[83],mxConstants.STYLE_PERIMETER_SPACING,_0x125fx4,_0x125fx9)};if(_0x125fxa||_0x125fx3[_0xe88f[81]]){_0x125fx3[_0xe88f[24]](_0x125fx4);this[_0xe88f[28]](_0x125fx3,mxResources[_0xe88f[26]](_0xe88f[89]),_0xe88f[38],_0xe88f[83],mxConstants.STYLE_SOURCE_PERIMETER_SPACING,_0x125fx4,_0x125fxa);this[_0xe88f[28]](_0x125fx3,mxResources[_0xe88f[26]](_0xe88f[90]),_0xe88f[38],_0xe88f[83],mxConstants.STYLE_TARGET_PERIMETER_SPACING,_0x125fx4,_0x125fxa)}})));this[_0xe88f[30]](_0xe88f[91], new Menu(mxUtils[_0xe88f[29]](this,function(_0x125fx3,_0x125fx4){this[_0xe88f[92]](_0x125fx3,_0xe88f[21],_0x125fx4)})));this[_0xe88f[30]](_0xe88f[93], new Menu(mxUtils[_0xe88f[29]](this,function(_0x125fx3,_0x125fx4){var _0x125fxb=this[_0xe88f[26]](_0xe88f[93])[_0xe88f[78]];_0x125fx3[_0xe88f[24]](_0x125fx4);this[_0xe88f[94]](_0xe88f[8],_0x125fx3,_0x125fx4);this[_0xe88f[94]](_0xe88f[31],_0x125fx3,_0x125fx4);this[_0xe88f[99]](_0x125fx3,[_0xe88f[95],_0xe88f[96],_0xe88f[97],_0xe88f[98],_0xe88f[95]],_0x125fx4);this[_0xe88f[94]](_0xe88f[100],_0x125fx3,_0x125fx4);this[_0xe88f[92]](_0x125fx3,_0xe88f[101],_0x125fx4);_0x125fx3[_0xe88f[24]](_0x125fx4);this[_0xe88f[28]](_0x125fx3,mxResources[_0xe88f[26]](_0xe88f[102]),_0xe88f[103],_0xe88f[104],mxConstants.STYLE_TEXT_OPACITY,_0x125fx4,_0x125fxb);_0x125fx3[_0xe88f[72]](mxResources[_0xe88f[26]](_0xe88f[105]),null,function(){_0x125fx2[_0xe88f[71]](mxConstants.STYLE_NOLABEL,false)},_0x125fx4,null,_0x125fxb)})));this[_0xe88f[30]](_0xe88f[100], new Menu(mxUtils[_0xe88f[29]](this,function(_0x125fx3,_0x125fx4){this[_0xe88f[20]](_0x125fx3,mxResources[_0xe88f[26]](_0xe88f[106]),[mxConstants[_0xe88f[107]]],[mxConstants[_0xe88f[108]]],null,_0x125fx4);this[_0xe88f[20]](_0x125fx3,mxResources[_0xe88f[26]](_0xe88f[109]),[mxConstants[_0xe88f[107]]],[mxConstants[_0xe88f[110]]],null,_0x125fx4);this[_0xe88f[20]](_0x125fx3,mxResources[_0xe88f[26]](_0xe88f[111]),[mxConstants[_0xe88f[107]]],[mxConstants[_0xe88f[112]]],null,_0x125fx4);_0x125fx3[_0xe88f[24]](_0x125fx4);this[_0xe88f[20]](_0x125fx3,mxResources[_0xe88f[26]](_0xe88f[113]),[mxConstants[_0xe88f[114]]],[mxConstants[_0xe88f[115]]],null,_0x125fx4);this[_0xe88f[20]](_0x125fx3,mxResources[_0xe88f[26]](_0xe88f[116]),[mxConstants[_0xe88f[114]]],[mxConstants[_0xe88f[117]]],null,_0x125fx4);this[_0xe88f[20]](_0x125fx3,mxResources[_0xe88f[26]](_0xe88f[118]),[mxConstants[_0xe88f[114]]],[mxConstants[_0xe88f[119]]],null,_0x125fx4);_0x125fx3[_0xe88f[24]](_0x125fx4);this[_0xe88f[94]](_0xe88f[120],_0x125fx3,_0x125fx4);this[_0xe88f[94]](_0xe88f[77],_0x125fx3,_0x125fx4);_0x125fx3[_0xe88f[24]](_0x125fx4);var _0x125fxb=this[_0xe88f[26]](_0xe88f[93])[_0xe88f[78]];_0x125fx3[_0xe88f[72]](mxResources[_0xe88f[26]](_0xe88f[48]),null,function(){_0x125fx2[_0xe88f[71]](mxConstants.STYLE_HORIZONTAL,true)},_0x125fx4,null,_0x125fxb)})));this[_0xe88f[30]](_0xe88f[120], new Menu(mxUtils[_0xe88f[29]](this,function(_0x125fx3,_0x125fx4){this[_0xe88f[20]](_0x125fx3,mxResources[_0xe88f[26]](_0xe88f[86]),[mxConstants[_0xe88f[121]],mxConstants[_0xe88f[107]]],[mxConstants[_0xe88f[108]],mxConstants[_0xe88f[112]]],null,_0x125fx4);this[_0xe88f[20]](_0x125fx3,mxResources[_0xe88f[26]](_0xe88f[109]),[mxConstants[_0xe88f[121]],mxConstants[_0xe88f[107]]],[mxConstants[_0xe88f[110]],mxConstants[_0xe88f[110]]],null,_0x125fx4);this[_0xe88f[20]](_0x125fx3,mxResources[_0xe88f[26]](_0xe88f[84]),[mxConstants[_0xe88f[121]],mxConstants[_0xe88f[107]]],[mxConstants[_0xe88f[112]],mxConstants[_0xe88f[108]]],null,_0x125fx4);_0x125fx3[_0xe88f[24]](_0x125fx4);this[_0xe88f[20]](_0x125fx3,mxResources[_0xe88f[26]](_0xe88f[82]),[mxConstants[_0xe88f[122]],mxConstants[_0xe88f[114]]],[mxConstants[_0xe88f[115]],mxConstants[_0xe88f[119]]],null,_0x125fx4);this[_0xe88f[20]](_0x125fx3,mxResources[_0xe88f[26]](_0xe88f[116]),[mxConstants[_0xe88f[122]],mxConstants[_0xe88f[114]]],[mxConstants[_0xe88f[117]],mxConstants[_0xe88f[117]]],null,_0x125fx4);this[_0xe88f[20]](_0x125fx3,mxResources[_0xe88f[26]](_0xe88f[85]),[mxConstants[_0xe88f[122]],mxConstants[_0xe88f[114]]],[mxConstants[_0xe88f[119]],mxConstants[_0xe88f[115]]],null,_0x125fx4)})));this[_0xe88f[30]](_0xe88f[123], new Menu(mxUtils[_0xe88f[29]](this,function(_0x125fx3,_0x125fx4){_0x125fx3[_0xe88f[72]](mxResources[_0xe88f[26]](_0xe88f[124]),null,function(){_0x125fx2[_0xe88f[71]](mxConstants.STYLE_FLIPH,false)},_0x125fx4);_0x125fx3[_0xe88f[72]](mxResources[_0xe88f[26]](_0xe88f[125]),null,function(){_0x125fx2[_0xe88f[71]](mxConstants.STYLE_FLIPV,false)},_0x125fx4);this[_0xe88f[99]](_0x125fx3,[_0xe88f[95],_0xe88f[126],_0xe88f[127]],_0x125fx4)})));this[_0xe88f[30]](_0xe88f[128], new Menu(mxUtils[_0xe88f[29]](this,function(_0x125fx3,_0x125fx4){_0x125fx3[_0xe88f[72]](mxResources[_0xe88f[26]](_0xe88f[106]),null,function(){_0x125fx2[_0xe88f[129]](mxConstants.ALIGN_LEFT)},_0x125fx4);_0x125fx3[_0xe88f[72]](mxResources[_0xe88f[26]](_0xe88f[109]),null,function(){_0x125fx2[_0xe88f[129]](mxConstants.ALIGN_CENTER)},_0x125fx4);_0x125fx3[_0xe88f[72]](mxResources[_0xe88f[26]](_0xe88f[111]),null,function(){_0x125fx2[_0xe88f[129]](mxConstants.ALIGN_RIGHT)},_0x125fx4);_0x125fx3[_0xe88f[24]](_0x125fx4);_0x125fx3[_0xe88f[72]](mxResources[_0xe88f[26]](_0xe88f[113]),null,function(){_0x125fx2[_0xe88f[129]](mxConstants.ALIGN_TOP)},_0x125fx4);_0x125fx3[_0xe88f[72]](mxResources[_0xe88f[26]](_0xe88f[116]),null,function(){_0x125fx2[_0xe88f[129]](mxConstants.ALIGN_MIDDLE)},_0x125fx4);_0x125fx3[_0xe88f[72]](mxResources[_0xe88f[26]](_0xe88f[118]),null,function(){_0x125fx2[_0xe88f[129]](mxConstants.ALIGN_BOTTOM)},_0x125fx4)})));this[_0xe88f[30]](_0xe88f[130], new Menu(mxUtils[_0xe88f[29]](this,function(_0x125fx3,_0x125fx4){_0x125fx3[_0xe88f[72]](mxResources[_0xe88f[26]](_0xe88f[131]),null,mxUtils[_0xe88f[29]](this,function(){var _0x125fxc= new mxHierarchicalLayout(_0x125fx2,mxConstants.DIRECTION_WEST);this[_0xe88f[0]][_0xe88f[132]](_0x125fxc,true,true)}),_0x125fx4);_0x125fx3[_0xe88f[72]](mxResources[_0xe88f[26]](_0xe88f[133]),null,mxUtils[_0xe88f[29]](this,function(){var _0x125fxc= new mxHierarchicalLayout(_0x125fx2,mxConstants.DIRECTION_NORTH);this[_0xe88f[0]][_0xe88f[132]](_0x125fxc,true,true)}),_0x125fx4)})));this[_0xe88f[30]](_0xe88f[134], new Menu(mxUtils[_0xe88f[29]](this,function(_0x125fx3,_0x125fx4){this[_0xe88f[99]](_0x125fx3,[_0xe88f[135],_0xe88f[95],_0xe88f[136],_0xe88f[137],_0xe88f[95],_0xe88f[138],_0xe88f[139]],_0x125fx4)})));this[_0xe88f[30]](_0xe88f[140], new Menu(mxUtils[_0xe88f[29]](this,function(_0x125fx3,_0x125fx4){this[_0xe88f[99]](_0x125fx3,[_0xe88f[141],_0xe88f[142],_0xe88f[95]],_0x125fx4);this[_0xe88f[94]](_0xe88f[130],_0x125fx3,_0x125fx4);_0x125fx3[_0xe88f[24]](_0x125fx4);this[_0xe88f[99]](_0x125fx3,[_0xe88f[95],_0xe88f[143],_0xe88f[144],_0xe88f[145]],_0x125fx4)})));this[_0xe88f[30]](_0xe88f[146], new Menu(mxUtils[_0xe88f[29]](this,function(_0x125fx3,_0x125fx4){this[_0xe88f[99]](_0x125fx3,[_0xe88f[147]],_0x125fx4);_0x125fx3[_0xe88f[24]]();var _0x125fxd=[0.25,0.5,0.75,1,2,4];for(var _0x125fx6=0;_0x125fx6<_0x125fxd[_0xe88f[18]];_0x125fx6++){(function(_0x125fxe){_0x125fx3[_0xe88f[72]]((_0x125fxe*100)+_0xe88f[148],null,function(){_0x125fx2[_0xe88f[149]](_0x125fxe)},_0x125fx4)})(_0x125fxd[_0x125fx6])};this[_0xe88f[99]](_0x125fx3,[_0xe88f[95],_0xe88f[150],_0xe88f[151],_0xe88f[95],_0xe88f[152],_0xe88f[153],_0xe88f[95],_0xe88f[154],_0xe88f[155]],_0x125fx4)})));this[_0xe88f[30]](_0xe88f[156], new Menu(mxUtils[_0xe88f[29]](this,function(_0x125fx3,_0x125fx4){this[_0xe88f[99]](_0x125fx3,[_0xe88f[157],_0xe88f[158],_0xe88f[95],_0xe88f[159],_0xe88f[160],_0xe88f[161],_0xe88f[95],_0xe88f[162],_0xe88f[95],_0xe88f[163],_0xe88f[164],_0xe88f[95],_0xe88f[165],_0xe88f[166],_0xe88f[95],_0xe88f[167]],_0x125fx4)})));this[_0xe88f[30]](_0xe88f[168], new Menu(mxUtils[_0xe88f[29]](this,function(_0x125fx3,_0x125fx4){this[_0xe88f[99]](_0x125fx3,[_0xe88f[169],_0xe88f[170],_0xe88f[95],_0xe88f[171],_0xe88f[172],_0xe88f[173],_0xe88f[174],_0xe88f[95],_0xe88f[175],_0xe88f[95],_0xe88f[176],_0xe88f[177],_0xe88f[178]])})));this[_0xe88f[30]](_0xe88f[179], new Menu(mxUtils[_0xe88f[29]](this,function(_0x125fx3,_0x125fx4){this[_0xe88f[99]](_0x125fx3,[_0xe88f[179],_0xe88f[95],_0xe88f[180]])})))};Menus[_0xe88f[5]][_0xe88f[30]]=function(_0x125fxf,_0x125fx3){this[_0xe88f[1]][_0x125fxf]=_0x125fx3};Menus[_0xe88f[5]][_0xe88f[26]]=function(_0x125fxf){return this[_0xe88f[1]][_0x125fxf]};Menus[_0xe88f[5]][_0xe88f[94]]=function(_0x125fxf,_0x125fx3,_0x125fx4){var _0x125fxb=this[_0xe88f[26]](_0x125fxf)[_0xe88f[78]];if(_0x125fx3[_0xe88f[81]]||_0x125fxb){var _0x125fx10=_0x125fx3[_0xe88f[72]](mxResources[_0xe88f[26]](_0x125fxf),null,null,_0x125fx4,null,_0x125fxb);this[_0xe88f[181]](_0x125fxf,_0x125fx3,_0x125fx10)}};Menus[_0xe88f[5]][_0xe88f[181]]=function(_0x125fxf,_0x125fx11,_0x125fx4){var _0x125fx3=this[_0xe88f[26]](_0x125fxf);if(_0x125fx3!=null&&(_0x125fx11[_0xe88f[81]]||_0x125fx3[_0xe88f[78]])){this[_0xe88f[26]](_0x125fxf)[_0xe88f[182]](_0x125fx11,_0x125fx4)}};Menus[_0xe88f[5]][_0xe88f[20]]=function(_0x125fx3,_0x125fx12,_0x125fx13,_0x125fx14,_0x125fx15,_0x125fx4){return _0x125fx3[_0xe88f[72]](_0x125fx12,null,mxUtils[_0xe88f[29]](this,function(){var _0x125fx2=this[_0xe88f[0]][_0xe88f[7]][_0xe88f[6]];_0x125fx2[_0xe88f[184]]()[_0xe88f[183]]();try{for(var _0x125fx6=0;_0x125fx6<_0x125fx13[_0xe88f[18]];_0x125fx6++){_0x125fx2[_0xe88f[185]](_0x125fx13[_0x125fx6],_0x125fx14[_0x125fx6])}}finally{_0x125fx2[_0xe88f[184]]()[_0xe88f[186]]()}}),_0x125fx4,_0x125fx15)};Menus[_0xe88f[5]][_0xe88f[28]]=function(_0x125fx3,_0x125fx12,_0x125fx16,_0x125fx17,_0x125fx18,_0x125fx4,_0x125fxb){return _0x125fx3[_0xe88f[72]](_0x125fx12,null,mxUtils[_0xe88f[29]](this,function(){var _0x125fx2=this[_0xe88f[0]][_0xe88f[7]][_0xe88f[6]];var _0x125fx19=_0x125fx17;var _0x125fx1a=_0x125fx2[_0xe88f[189]]()[_0xe88f[188]](_0x125fx2[_0xe88f[187]]());if(_0x125fx1a!=null){_0x125fx19=_0x125fx1a[_0xe88f[21]][_0x125fx18]||_0x125fx19};_0x125fx19=mxUtils[_0xe88f[192]](mxResources[_0xe88f[26]](_0xe88f[190])+((_0x125fx16[_0xe88f[18]]>0)?(_0xe88f[191]+_0x125fx16):_0xe88f[27]),_0x125fx19);if(_0x125fx19!=null&&_0x125fx19[_0xe88f[18]]>0){_0x125fx2[_0xe88f[185]](_0x125fx18,_0x125fx19)}}),_0x125fx4,null,_0x125fxb)};Menus[_0xe88f[5]][_0xe88f[92]]=function(_0x125fx3,_0x125fx18,_0x125fx4){var _0x125fx1b=this[_0xe88f[0]][_0xe88f[80]][_0xe88f[26]](_0x125fx18);if(_0x125fx1b!=null&&(_0x125fx3[_0xe88f[81]]||_0x125fx1b[_0xe88f[78]])){var _0x125fx1c=_0x125fx3[_0xe88f[72]](_0x125fx1b[_0xe88f[193]],null,_0x125fx1b[_0xe88f[194]],_0x125fx4,null,_0x125fx1b[_0xe88f[78]]);if(_0x125fx1b[_0xe88f[195]]&&_0x125fx1b[_0xe88f[196]]()){this[_0xe88f[197]](_0x125fx1c)};this[_0xe88f[198]](_0x125fx1c,_0x125fx1b);return _0x125fx1c};return null};Menus[_0xe88f[5]][_0xe88f[198]]=function(_0x125fx1c,_0x125fx1b){if(_0x125fx1b[_0xe88f[199]]!=null){var _0x125fx1d=_0x125fx1c[_0xe88f[23]][_0xe88f[22]][_0xe88f[22]];var _0x125fx1e=document[_0xe88f[201]](_0xe88f[200]);_0x125fx1e[_0xe88f[21]][_0xe88f[202]]=_0xe88f[203];mxUtils[_0xe88f[204]](_0x125fx1e,_0x125fx1b[_0xe88f[199]]);_0x125fx1d[_0xe88f[205]](_0x125fx1e)}};Menus[_0xe88f[5]][_0xe88f[197]]=function(_0x125fx1c){var _0x125fx1d=_0x125fx1c[_0xe88f[23]][_0xe88f[22]];_0x125fx1d[_0xe88f[21]][_0xe88f[206]]=_0xe88f[207]+IMAGE_PATH+_0xe88f[208];_0x125fx1d[_0xe88f[21]][_0xe88f[209]]=_0xe88f[210];_0x125fx1d[_0xe88f[21]][_0xe88f[211]]=_0xe88f[212]};Menus[_0xe88f[5]][_0xe88f[99]]=function(_0x125fx3,_0x125fx13,_0x125fx4){for(var _0x125fx6=0;_0x125fx6<_0x125fx13[_0xe88f[18]];_0x125fx6++){if(_0x125fx13[_0x125fx6]==_0xe88f[95]){_0x125fx3[_0xe88f[24]](_0x125fx4)}else {this[_0xe88f[92]](_0x125fx3,_0x125fx13[_0x125fx6],_0x125fx4)}}};Menus[_0xe88f[5]][_0xe88f[213]]=function(_0x125fx3,_0x125fx1f,_0x125fx20){var _0x125fx2=this[_0xe88f[0]][_0xe88f[7]][_0xe88f[6]];_0x125fx3[_0xe88f[214]]=true;if(_0x125fx2[_0xe88f[215]]()){this[_0xe88f[99]](_0x125fx3,[_0xe88f[169],_0xe88f[170],_0xe88f[95],_0xe88f[173],_0xe88f[95]])}else {this[_0xe88f[99]](_0x125fx3,[_0xe88f[174],_0xe88f[95],_0xe88f[171],_0xe88f[172],_0xe88f[95],_0xe88f[175]]);if(_0x125fx2[_0xe88f[216]]()==1&&_0x125fx2[_0xe88f[184]]()[_0xe88f[217]](_0x125fx2[_0xe88f[187]]())){this[_0xe88f[99]](_0x125fx3,[_0xe88f[218]])};_0x125fx3[_0xe88f[24]]()};if(_0x125fx2[_0xe88f[216]]()>0){this[_0xe88f[99]](_0x125fx3,[_0xe88f[141],_0xe88f[142],_0xe88f[95]]);if(_0x125fx2[_0xe88f[184]]()[_0xe88f[217]](_0x125fx2[_0xe88f[187]]())){var _0x125fx21=false;var _0x125fx1f=_0x125fx2[_0xe88f[187]]();if(_0x125fx1f!=null&&_0x125fx2[_0xe88f[184]]()[_0xe88f[217]](_0x125fx1f)){var _0x125fx22=_0x125fx2[_0xe88f[220]][_0xe88f[219]](_0x125fx1f);if(_0x125fx22 instanceof mxEdgeHandler&&_0x125fx22[_0xe88f[221]]!=null&&_0x125fx22[_0xe88f[221]][_0xe88f[18]]>2){var _0x125fx23=_0x125fx22[_0xe88f[222]]( new mxMouseEvent(_0x125fx20));var _0x125fx24=this[_0xe88f[0]][_0xe88f[80]][_0xe88f[26]](_0xe88f[223]);_0x125fx24[_0xe88f[224]]=_0x125fx22;_0x125fx24[_0xe88f[225]]=_0x125fx23;_0x125fx21=_0x125fx23>0&&_0x125fx23<_0x125fx22[_0xe88f[221]][_0xe88f[18]]}};this[_0xe88f[99]](_0x125fx3,[_0xe88f[95],(_0x125fx21)?_0xe88f[223]:_0xe88f[226]])}else {if(_0x125fx2[_0xe88f[216]]()>1){_0x125fx3[_0xe88f[24]]();this[_0xe88f[99]](_0x125fx3,[_0xe88f[143]])}};_0x125fx3[_0xe88f[24]]();if(_0x125fx2[_0xe88f[216]]()==1){var _0x125fx25=_0x125fx2[_0xe88f[227]](_0x125fx2[_0xe88f[187]]());if(_0x125fx25!=null){this[_0xe88f[99]](_0x125fx3,[_0xe88f[228]])}}}else {this[_0xe88f[99]](_0x125fx3,[_0xe88f[95],_0xe88f[176],_0xe88f[177],_0xe88f[95],_0xe88f[178]])}};Menus[_0xe88f[5]][_0xe88f[229]]=function(_0x125fx26){var _0x125fx27= new Menubar(this[_0xe88f[0]],_0x125fx26);var _0x125fx28=[_0xe88f[156],_0xe88f[168],_0xe88f[146],_0xe88f[91],_0xe88f[93],_0xe88f[140],_0xe88f[179]];for(var _0x125fx6=0;_0x125fx6<_0x125fx28[_0xe88f[18]];_0x125fx6++){_0x125fx27[_0xe88f[181]](mxResources[_0xe88f[26]](_0x125fx28[_0x125fx6]),this[_0xe88f[26]](_0x125fx28[_0x125fx6])[_0xe88f[194]])};return _0x125fx27};function Menubar(_0x125fx1,_0x125fx26){this[_0xe88f[0]]=_0x125fx1;this[_0xe88f[230]]=_0x125fx26;mxEvent[_0xe88f[232]](document,mxUtils[_0xe88f[29]](this,function(_0x125fx20){this[_0xe88f[231]]()}))}Menubar[_0xe88f[5]][_0xe88f[231]]=function(){if(this[_0xe88f[233]]!=null){this[_0xe88f[233]][_0xe88f[231]]()}};Menubar[_0xe88f[5]][_0xe88f[181]]=function(_0x125fx12,_0x125fx2a){var _0x125fx2b=document[_0xe88f[201]](_0xe88f[234]);_0x125fx2b[_0xe88f[237]](_0xe88f[235],_0xe88f[236]);_0x125fx2b[_0xe88f[238]]=_0xe88f[239];mxUtils[_0xe88f[204]](_0x125fx2b,_0x125fx12);this[_0xe88f[240]](_0x125fx2b,_0x125fx2a);this[_0xe88f[230]][_0xe88f[205]](_0x125fx2b);return _0x125fx2b};Menubar[_0xe88f[5]][_0xe88f[240]]=function(_0x125fx2b,_0x125fx2a){if(_0x125fx2a!=null){var _0x125fx2c=true;var _0x125fx2d=mxUtils[_0xe88f[29]](this,function(_0x125fx20){if(_0x125fx2c&&_0x125fx2b[_0xe88f[78]]==null||_0x125fx2b[_0xe88f[78]]){this[_0xe88f[0]][_0xe88f[7]][_0xe88f[6]][_0xe88f[241]][_0xe88f[231]]();var _0x125fx3= new mxPopupMenu(_0x125fx2a);_0x125fx3[_0xe88f[242]][_0xe88f[238]]+=_0xe88f[243];_0x125fx3[_0xe88f[214]]=true;_0x125fx3[_0xe88f[81]]=true;_0x125fx3[_0xe88f[244]]=true;_0x125fx3[_0xe88f[231]]=mxUtils[_0xe88f[29]](this,function(){mxPopupMenu[_0xe88f[5]][_0xe88f[231]][_0xe88f[245]](_0x125fx3,arguments);_0x125fx3[_0xe88f[246]]();this[_0xe88f[233]]=null;this[_0xe88f[247]]=null});var _0x125fx2e=_0x125fx2b[_0xe88f[248]]+document[_0xe88f[251]](_0xe88f[250])[_0xe88f[249]]+22;var _0x125fx2f=_0x125fx2b[_0xe88f[252]]+_0x125fx2b[_0xe88f[253]]+140;_0x125fx3[_0xe88f[254]](_0x125fx2e,_0x125fx2f,null,_0x125fx20);this[_0xe88f[233]]=_0x125fx3;this[_0xe88f[247]]=_0x125fx2b};_0x125fx2c=true;mxEvent[_0xe88f[255]](_0x125fx20)});mxEvent[_0xe88f[257]](_0x125fx2b,_0xe88f[256],mxUtils[_0xe88f[29]](this,function(_0x125fx20){if(this[_0xe88f[233]]!=null&&this[_0xe88f[247]]!=_0x125fx2b){this[_0xe88f[231]]();_0x125fx2d(_0x125fx20)}}));mxEvent[_0xe88f[257]](_0x125fx2b,_0xe88f[258],mxUtils[_0xe88f[29]](this,function(){_0x125fx2c=this[_0xe88f[247]]!=_0x125fx2b}));mxEvent[_0xe88f[257]](_0x125fx2b,_0xe88f[259],_0x125fx2d)}};function Menu(_0x125fx2a,_0x125fxb){mxEventSource[_0xe88f[260]](this);this[_0xe88f[194]]=_0x125fx2a;this[_0xe88f[78]]=(_0x125fxb!=null)?_0x125fxb:true}mxUtils[_0xe88f[261]](Menu,mxEventSource);Menu[_0xe88f[5]][_0xe88f[262]]=function(_0x125fx19){if(this[_0xe88f[78]]!=_0x125fx19){this[_0xe88f[78]]=_0x125fx19;this[_0xe88f[264]]( new mxEventObject(_0xe88f[263]))}};Menu[_0xe88f[5]][_0xe88f[182]]=function(_0x125fx3,_0x125fx4){this[_0xe88f[194]](_0x125fx3,_0x125fx4)}
\ No newline at end of file
+/**
+ * $Id: Menus.js,v 1.13 2013-02-20 16:21:29 gaudenz Exp $
+ * Copyright (c) 2006-2012, JGraph Ltd
+ */
+/**
+ * Constructs a new graph editor
+ */
+Menus = function(editorUi) {
+       this.editorUi = editorUi;
+       this.menus = new Object();
+       this.init();
+
+       // Pre-fetches checkmark image
+       new Image().src = IMAGE_PATH + '/checkmark.gif';
+};
+
+/**
+ * Adds the label menu items to the given menu and parent.
+ */
+Menus.prototype.init = function() {
+       var graph = this.editorUi.editor.graph;
+
+       this.put('fontFamily', new Menu(mxUtils.bind(this, function(menu, parent) {
+               var fonts = ['Helvetica', 'Verdana', 'Times New Roman', 'Garamond',
+                       'Comic Sans MS',
+                       'Courier New', 'Georgia', 'Lucida Console', 'Tahoma'
+               ];
+
+               for (var i = 0; i < fonts.length; i++) {
+                       var tr = this.styleChange(menu, fonts[i], [mxConstants.STYLE_FONTFAMILY], [
+                               fonts[i]
+                       ], null, parent);
+                       tr.firstChild.nextSibling.style.fontFamily = fonts[i];
+               }
+
+               menu.addSeparator(parent);
+               this.promptChange(menu, mxResources.get('custom'), '', mxConstants.DEFAULT_FONTFAMILY,
+                       mxConstants.STYLE_FONTFAMILY, parent);
+       })));
+       this.put('fontSize', new Menu(mxUtils.bind(this, function(menu, parent) {
+               var sizes = [6, 8, 9, 10, 11, 12, 14, 18, 24, 36, 48, 72];
+
+               for (var i = 0; i < sizes.length; i++) {
+                       this.styleChange(menu, sizes[i], [mxConstants.STYLE_FONTSIZE], [sizes[i]],
+                               null, parent);
+               }
+
+               menu.addSeparator(parent);
+               this.promptChange(menu, mxResources.get('custom'), '(pt)', '12',
+                       mxConstants.STYLE_FONTSIZE, parent);
+       })));
+       this.put('linewidth', new Menu(mxUtils.bind(this, function(menu, parent) {
+               var sizes = [1, 2, 3, 4, 8, 12, 16, 24];
+
+               for (var i = 0; i < sizes.length; i++) {
+                       this.styleChange(menu, sizes[i] + 'px', [mxConstants.STYLE_STROKEWIDTH], [
+                               sizes[i]
+                       ], null, parent);
+               }
+
+               menu.addSeparator(parent);
+               this.promptChange(menu, mxResources.get('custom'), '(px)', '1',
+                       mxConstants.STYLE_STROKEWIDTH, parent);
+       })));
+       this.put('line', new Menu(mxUtils.bind(this, function(menu, parent) {
+               this.styleChange(menu, mxResources.get('straight'), [mxConstants.STYLE_EDGE], [
+                       null
+               ], null, parent);
+               this.styleChange(menu, mxResources.get('entityRelation'), [mxConstants.STYLE_EDGE], [
+                       'entityRelationEdgeStyle'
+               ], null, parent);
+               menu.addSeparator(parent);
+               this.styleChange(menu, mxResources.get('horizontal'), [mxConstants.STYLE_EDGE,
+                       mxConstants.STYLE_ELBOW
+               ], ['elbowEdgeStyle', 'horizontal'], null, parent);
+               this.styleChange(menu, mxResources.get('vertical'), [mxConstants.STYLE_EDGE,
+                       mxConstants.STYLE_ELBOW
+               ], ['elbowEdgeStyle', 'vertical'], null, parent);
+               menu.addSeparator(parent);
+               this.styleChange(menu, mxResources.get('manual'), [mxConstants.STYLE_EDGE], [
+                       'segmentEdgeStyle'
+               ], null, parent);
+               this.styleChange(menu, mxResources.get('automatic'), [mxConstants.STYLE_EDGE], [
+                       'orthogonalEdgeStyle'
+               ], null, parent);
+       })));
+       this.put('lineend', new Menu(mxUtils.bind(this, function(menu, parent) {
+               this.styleChange(menu, mxResources.get('classic'), [mxConstants.STYLE_ENDARROW], [
+                       mxConstants.ARROW_CLASSIC
+               ], null, parent);
+               this.styleChange(menu, mxResources.get('openArrow'), [mxConstants.STYLE_ENDARROW], [
+                       mxConstants.ARROW_OPEN
+               ], null, parent);
+               this.styleChange(menu, mxResources.get('block'), [mxConstants.STYLE_ENDARROW], [
+                       mxConstants.ARROW_BLOCK
+               ], null, parent);
+               menu.addSeparator(parent);
+               this.styleChange(menu, mxResources.get('oval'), [mxConstants.STYLE_ENDARROW], [
+                       mxConstants.ARROW_OVAL
+               ], null, parent);
+               this.styleChange(menu, mxResources.get('diamond'), [mxConstants.STYLE_ENDARROW], [
+                       mxConstants.ARROW_DIAMOND
+               ], null, parent);
+               this.styleChange(menu, mxResources.get('diamondThin'), [mxConstants.STYLE_ENDARROW], [
+                       mxConstants.ARROW_DIAMOND_THIN
+               ], null, parent);
+               menu.addSeparator(parent);
+               this.styleChange(menu, mxResources.get('none'), [mxConstants.STYLE_ENDARROW], [
+                       mxConstants.NONE
+               ], null, parent);
+               menu.addSeparator(parent);
+               menu.addItem(mxResources.get('transparent'), null, function() {
+                       graph.toggleCellStyles('endFill', true);
+               }, parent, null, true);
+               menu.addSeparator(parent);
+               this.promptChange(menu, mxResources.get('size'), '(px)', mxConstants.DEFAULT_MARKERSIZE,
+                       mxConstants.STYLE_ENDSIZE, parent);
+       })));
+       this.put('linestart', new Menu(mxUtils.bind(this, function(menu, parent) {
+               this.styleChange(menu, mxResources.get('classic'), [mxConstants.STYLE_STARTARROW], [
+                       mxConstants.ARROW_CLASSIC
+               ], null, parent);
+               this.styleChange(menu, mxResources.get('openArrow'), [mxConstants.STYLE_STARTARROW], [
+                       mxConstants.ARROW_OPEN
+               ], null, parent);
+               this.styleChange(menu, mxResources.get('block'), [mxConstants.STYLE_STARTARROW], [
+                       mxConstants.ARROW_BLOCK
+               ], null, parent);
+               menu.addSeparator(parent);
+               this.styleChange(menu, mxResources.get('oval'), [mxConstants.STYLE_STARTARROW], [
+                       mxConstants.ARROW_OVAL
+               ], null, parent);
+               this.styleChange(menu, mxResources.get('diamond'), [mxConstants.STYLE_STARTARROW], [
+                       mxConstants.ARROW_DIAMOND
+               ], null, parent);
+               this.styleChange(menu, mxResources.get('diamondThin'), [mxConstants.STYLE_STARTARROW], [
+                       mxConstants.ARROW_DIAMOND_THIN
+               ], null, parent);
+               menu.addSeparator(parent);
+               this.styleChange(menu, mxResources.get('none'), [mxConstants.STYLE_STARTARROW], [
+                       mxConstants.NONE
+               ], null, parent);
+               menu.addSeparator(parent);
+               menu.addItem(mxResources.get('transparent'), null, function() {
+                       graph.toggleCellStyles('startFill', true);
+               }, parent, null, true);
+               menu.addSeparator(parent);
+               this.promptChange(menu, mxResources.get('size'), '(px)', mxConstants.DEFAULT_MARKERSIZE,
+                       mxConstants.STYLE_STARTSIZE, parent);
+       })));
+       this.put('spacing', new Menu(mxUtils.bind(this, function(menu, parent) {
+               // Uses shadow action and line menu to analyze selection
+               var vertexSelected = this.editorUi.actions.get('shadow').enabled;
+               var edgeSelected = this.get('line').enabled;
+
+               if (vertexSelected || menu.showDisabled) {
+                       this.promptChange(menu, mxResources.get('top'), '(px)', '0',
+                               mxConstants.STYLE_SPACING_TOP, parent, vertexSelected);
+                       this.promptChange(menu, mxResources.get('right'), '(px)', '0',
+                               mxConstants.STYLE_SPACING_RIGHT, parent, vertexSelected);
+                       this.promptChange(menu, mxResources.get('bottom'), '(px)', '0',
+                               mxConstants.STYLE_SPACING_BOTTOM, parent, vertexSelected);
+                       this.promptChange(menu, mxResources.get('left'), '(px)', '0',
+                               mxConstants.STYLE_SPACING_LEFT, parent, vertexSelected);
+                       menu.addSeparator(parent);
+                       this.promptChange(menu, mxResources.get('global'), '(px)', '0',
+                               mxConstants.STYLE_SPACING, parent, vertexSelected);
+                       this.promptChange(menu, mxResources.get('perimeter'), '(px)', '0',
+                               mxConstants.STYLE_PERIMETER_SPACING, parent, vertexSelected);
+               }
+
+               if (edgeSelected || menu.showDisabled) {
+                       menu.addSeparator(parent);
+                       this.promptChange(menu, mxResources.get('sourceSpacing'), '(px)', '0',
+                               mxConstants.STYLE_SOURCE_PERIMETER_SPACING, parent, edgeSelected);
+                       this.promptChange(menu, mxResources.get('targetSpacing'), '(px)', '0',
+                               mxConstants.STYLE_TARGET_PERIMETER_SPACING, parent, edgeSelected);
+               }
+       })));
+       this.put('format', new Menu(mxUtils.bind(this, function(menu, parent) {
+               this.addMenuItem(menu, 'style', parent);
+       })));
+       this.put('text', new Menu(mxUtils.bind(this, function(menu, parent) {
+               var enabled = this.get('text').enabled;
+               menu.addSeparator(parent);
+               this.addSubmenu('fontFamily', menu, parent);
+               this.addSubmenu('fontSize', menu, parent);
+               this.addMenuItems(menu, ['-', 'bold', 'italic', 'underline', '-'],
+                       parent);
+               this.addSubmenu('alignment', menu, parent);
+               this.addMenuItem(menu, 'wordWrap', parent);
+               menu.addSeparator(parent);
+               this.promptChange(menu, mxResources.get('textOpacity'), '(%)', '100',
+                       mxConstants.STYLE_TEXT_OPACITY, parent, enabled);
+               menu.addItem(mxResources.get('hide'), null, function() {
+                       graph.toggleCellStyles(mxConstants.STYLE_NOLABEL, false);
+               }, parent, null, enabled);
+       })));
+       this.put('alignment', new Menu(mxUtils.bind(this, function(menu, parent) {
+               this.styleChange(menu, mxResources.get('leftAlign'), [mxConstants.STYLE_ALIGN], [
+                       mxConstants.ALIGN_LEFT
+               ], null, parent);
+               this.styleChange(menu, mxResources.get('center'), [mxConstants.STYLE_ALIGN], [
+                       mxConstants.ALIGN_CENTER
+               ], null, parent);
+               this.styleChange(menu, mxResources.get('rightAlign'), [mxConstants.STYLE_ALIGN], [
+                       mxConstants.ALIGN_RIGHT
+               ], null, parent);
+               menu.addSeparator(parent);
+               this.styleChange(menu, mxResources.get('topAlign'), [mxConstants.STYLE_VERTICAL_ALIGN], [
+                       mxConstants.ALIGN_TOP
+               ], null, parent);
+               this.styleChange(menu, mxResources.get('middle'), [mxConstants.STYLE_VERTICAL_ALIGN], [
+                       mxConstants.ALIGN_MIDDLE
+               ], null, parent);
+               this.styleChange(menu, mxResources.get('bottomAlign'), [mxConstants.STYLE_VERTICAL_ALIGN], [
+                       mxConstants.ALIGN_BOTTOM
+               ], null, parent);
+               menu.addSeparator(parent);
+               this.addSubmenu('position', menu, parent);
+               this.addSubmenu('spacing', menu, parent);
+               menu.addSeparator(parent);
+               var enabled = this.get('text').enabled;
+               menu.addItem(mxResources.get('vertical'), null, function() {
+                       graph.toggleCellStyles(mxConstants.STYLE_HORIZONTAL, true);
+               }, parent, null, enabled);
+       })));
+       this.put('position', new Menu(mxUtils.bind(this, function(menu, parent) {
+               this.styleChange(menu, mxResources.get('left'), [mxConstants.STYLE_LABEL_POSITION,
+                       mxConstants.STYLE_ALIGN
+               ], [mxConstants.ALIGN_LEFT, mxConstants.ALIGN_RIGHT], null, parent);
+               this.styleChange(menu, mxResources.get('center'), [mxConstants.STYLE_LABEL_POSITION,
+                       mxConstants.STYLE_ALIGN
+               ], [mxConstants.ALIGN_CENTER, mxConstants.ALIGN_CENTER], null, parent);
+               this.styleChange(menu, mxResources.get('right'), [mxConstants.STYLE_LABEL_POSITION,
+                       mxConstants.STYLE_ALIGN
+               ], [mxConstants.ALIGN_RIGHT, mxConstants.ALIGN_LEFT], null, parent);
+               menu.addSeparator(parent);
+               this.styleChange(menu, mxResources.get('top'), [mxConstants.STYLE_VERTICAL_LABEL_POSITION,
+                       mxConstants.STYLE_VERTICAL_ALIGN
+               ], [mxConstants.ALIGN_TOP, mxConstants.ALIGN_BOTTOM], null, parent);
+               this.styleChange(menu, mxResources.get('middle'), [mxConstants.STYLE_VERTICAL_LABEL_POSITION,
+                       mxConstants.STYLE_VERTICAL_ALIGN
+               ], [mxConstants.ALIGN_MIDDLE, mxConstants.ALIGN_MIDDLE], null, parent);
+               this.styleChange(menu, mxResources.get('bottom'), [mxConstants.STYLE_VERTICAL_LABEL_POSITION,
+                       mxConstants.STYLE_VERTICAL_ALIGN
+               ], [mxConstants.ALIGN_BOTTOM, mxConstants.ALIGN_TOP], null, parent);
+       })));
+       this.put('direction', new Menu(mxUtils.bind(this, function(menu, parent) {
+               menu.addItem(mxResources.get('flipH'), null, function() {
+                       graph.toggleCellStyles(mxConstants.STYLE_FLIPH, false);
+               }, parent);
+               menu.addItem(mxResources.get('flipV'), null, function() {
+                       graph.toggleCellStyles(mxConstants.STYLE_FLIPV, false);
+               }, parent);
+               this.addMenuItems(menu, ['-', 'tilt', 'rotation'], parent);
+       })));
+       this.put('align', new Menu(mxUtils.bind(this, function(menu, parent) {
+               menu.addItem(mxResources.get('leftAlign'), null, function() {
+                       graph.alignCells(mxConstants.ALIGN_LEFT);
+               }, parent);
+               menu.addItem(mxResources.get('center'), null, function() {
+                       graph.alignCells(mxConstants.ALIGN_CENTER);
+               }, parent);
+               menu.addItem(mxResources.get('rightAlign'), null, function() {
+                       graph.alignCells(mxConstants.ALIGN_RIGHT);
+               }, parent);
+               menu.addSeparator(parent);
+               menu.addItem(mxResources.get('topAlign'), null, function() {
+                       graph.alignCells(mxConstants.ALIGN_TOP);
+               }, parent);
+               menu.addItem(mxResources.get('middle'), null, function() {
+                       graph.alignCells(mxConstants.ALIGN_MIDDLE);
+               }, parent);
+               menu.addItem(mxResources.get('bottomAlign'), null, function() {
+                       graph.alignCells(mxConstants.ALIGN_BOTTOM);
+               }, parent);
+       })));
+       this.put('layout', new Menu(mxUtils.bind(this, function(menu, parent) {
+               // menu.addItem(mxResources.get('horizontalTree'), null, mxUtils.bind(this, function()
+               // {
+               //      if (!graph.isSelectionEmpty())
+               //      {
+               //              var layout = new mxCompactTreeLayout(graph, true);
+               //              layout.edgeRouting = false;
+               //              layout.levelDistance = 30;
+               //              this.editorUi.executeLayout(layout, true, true);
+               //      }
+               // }), parent);
+               // menu.addItem(mxResources.get('verticalTree'), null, mxUtils.bind(this, function()
+               // {
+               //      if (!graph.isSelectionEmpty())
+               //      {
+               //              var layout = new mxCompactTreeLayout(graph, false);
+               //              layout.edgeRouting = false;
+               //              layout.levelDistance = 30;
+               //              this.editorUi.executeLayout(layout, true, true);
+               //      }
+               // }), parent);
+               // menu.addSeparator(parent);
+               menu.addItem(mxResources.get('horizontalFlow'), null, mxUtils.bind(this,
+                       function() {
+                               var layout = new mxHierarchicalLayout(graph, mxConstants.DIRECTION_WEST);
+                               this.editorUi.executeLayout(layout, true, true);
+                       }), parent);
+               menu.addItem(mxResources.get('verticalFlow'), null, mxUtils.bind(this,
+                       function() {
+                               var layout = new mxHierarchicalLayout(graph, mxConstants.DIRECTION_NORTH);
+                               this.editorUi.executeLayout(layout, true, true);
+                       }), parent);
+               //menu.addSeparator(parent);
+               // menu.addItem(mxResources.get('organic'), null, mxUtils.bind(this, function()
+               // {
+               //      var layout = new mxFastOrganicLayout(graph);
+               //              this.editorUi.executeLayout(layout, true, true);
+               // }), parent);
+               // menu.addItem(mxResources.get('circle'), null, mxUtils.bind(this, function()
+               // {
+               //      var layout = new mxCircleLayout(graph);
+               //              this.editorUi.executeLayout(layout, true, true, graph.getSelectionCells());
+               // }), parent);
+       })));
+       this.put('navigation', new Menu(mxUtils.bind(this, function(menu, parent) {
+               this.addMenuItems(menu, ['home', '-', 'exitGroup', 'enterGroup', '-',
+                       'expand', 'collapse'
+               ], parent);
+       })));
+       this.put('arrange', new Menu(mxUtils.bind(this, function(menu, parent) {
+               this.addMenuItems(menu, ['toFront', 'toBack', '-'], parent);
+               //this.addSubmenu('direction', menu, parent);
+               this.addSubmenu('layout', menu, parent);
+               //this.addSubmenu('align', menu, parent);
+               menu.addSeparator(parent);
+               //this.addSubmenu('navigation', menu, parent);
+               this.addMenuItems(menu, ['-', 'group', 'ungroup', 'removeFromGroup'],
+                       parent);
+               //this.addMenuItems(menu, ['-', 'group', 'ungroup', 'removeFromGroup', '-', 'autosize'], parent);
+       })));
+       this.put('view', new Menu(mxUtils.bind(this, function(menu, parent) {
+               this.addMenuItems(menu, ['actualSize'], parent);
+               menu.addSeparator();
+               var scales = [0.25, 0.5, 0.75, 1, 2, 4];
+
+               for (var i = 0; i < scales.length; i++) {
+                       (function(scale) {
+                               menu.addItem((scale * 100) + '%', null, function() {
+                                       graph.zoomTo(scale);
+                               }, parent);
+                       })(scales[i]);
+               }
+
+               this.addMenuItems(menu, ['-', 'zoomIn', 'zoomOut', '-', 'fitWindow',
+                       'customZoom', '-', 'fitPage', 'fitPageWidth'
+               ], parent);
+       })));
+       this.put('file', new Menu(mxUtils.bind(this, function(menu, parent) {
+               this.addMenuItems(menu, ['new', 'open', '-', 'save', 'saveAs', 'publish',
+                       '-', 'variable', '-', 'import', 'export', '-', 'editFile', 'rename', '-',
+                       'print'
+               ], parent);
+       })));
+       this.put('edit', new Menu(mxUtils.bind(this, function(menu, parent) {
+               this.addMenuItems(menu, ['undo', 'redo', '-', 'cut', 'copy', 'paste',
+                       'delete', '-', 'duplicate', '-',
+                       'selectVertices', 'selectEdges', 'selectAll'
+               ]);
+       })));
+       this.put('help', new Menu(mxUtils.bind(this, function(menu, parent) {
+               this.addMenuItems(menu, ['help', '-', 'about']);
+       })));
+};
+
+/**
+ * Adds the label menu items to the given menu and parent.
+ */
+Menus.prototype.put = function(name, menu) {
+       this.menus[name] = menu;
+};
+
+/**
+ * Adds the label menu items to the given menu and parent.
+ */
+Menus.prototype.get = function(name) {
+       return this.menus[name];
+};
+
+/**
+ * Adds the given submenu.
+ */
+Menus.prototype.addSubmenu = function(name, menu, parent) {
+       var enabled = this.get(name).enabled;
+
+       if (menu.showDisabled || enabled) {
+               var submenu = menu.addItem(mxResources.get(name), null, null, parent, null,
+                       enabled);
+               this.addMenu(name, menu, submenu);
+       }
+};
+
+/**
+ * Adds the label menu items to the given menu and parent.
+ */
+Menus.prototype.addMenu = function(name, popupMenu, parent) {
+       var menu = this.get(name);
+
+       if (menu != null && (popupMenu.showDisabled || menu.enabled)) {
+               this.get(name).execute(popupMenu, parent);
+       }
+};
+
+/**
+ * Adds a style change item to the given menu.
+ */
+Menus.prototype.styleChange = function(menu, label, keys, values, sprite,
+       parent) {
+       return menu.addItem(label, null, mxUtils.bind(this, function() {
+               var graph = this.editorUi.editor.graph;
+
+               graph.getModel().beginUpdate();
+               try {
+                       for (var i = 0; i < keys.length; i++) {
+                               graph.setCellStyles(keys[i], values[i]);
+                       }
+               } finally {
+                       graph.getModel().endUpdate();
+               }
+       }), parent, sprite);
+};
+
+/**
+ * Adds a style change item with a prompt to the given menu.
+ */
+Menus.prototype.promptChange = function(menu, label, hint, defaultValue, key,
+       parent, enabled) {
+       return menu.addItem(label, null, mxUtils.bind(this, function() {
+               var graph = this.editorUi.editor.graph;
+               var value = defaultValue;
+               var state = graph.getView().getState(graph.getSelectionCell());
+
+               if (state != null) {
+                       value = state.style[key] || value;
+               }
+
+               value = mxUtils.prompt(mxResources.get('enterValue') + ((hint.length > 0) ?
+                       (' ' + hint) : ''), value);
+
+               if (value != null && value.length > 0) {
+                       graph.setCellStyles(key, value);
+               }
+       }), parent, null, enabled);
+};
+
+/**
+ * Creates the keyboard event handler for the current graph and history.
+ */
+Menus.prototype.addMenuItem = function(menu, key, parent) {
+       var action = this.editorUi.actions.get(key);
+
+       if (action != null && (menu.showDisabled || action.enabled)) {
+               var item = menu.addItem(action.label, null, action.funct, parent, null,
+                       action.enabled);
+
+               // Adds checkmark image
+               if (action.toggleAction && action.isSelected()) {
+                       this.addCheckmark(item);
+               }
+
+               this.addShortcut(item, action);
+
+               return item;
+       }
+
+       return null;
+};
+
+/**
+ * Adds a checkmark to the given menuitem.
+ */
+Menus.prototype.addShortcut = function(item, action) {
+       if (action.shortcut != null) {
+               var td = item.firstChild.nextSibling.nextSibling;
+               var span = document.createElement('span');
+               span.style.color = 'gray';
+               mxUtils.write(span, action.shortcut);
+               td.appendChild(span);
+       }
+};
+
+/**
+ * Adds a checkmark to the given menuitem.
+ */
+Menus.prototype.addCheckmark = function(item) {
+       var td = item.firstChild.nextSibling;
+       td.style.backgroundImage = 'url(' + IMAGE_PATH + '/checkmark.gif)';
+       td.style.backgroundRepeat = 'no-repeat';
+       td.style.backgroundPosition = '2px 50%';
+};
+
+/**
+ * Creates the keyboard event handler for the current graph and history.
+ */
+Menus.prototype.addMenuItems = function(menu, keys, parent) {
+       for (var i = 0; i < keys.length; i++) {
+               if (keys[i] == '-') {
+                       menu.addSeparator(parent);
+               } else {
+                       this.addMenuItem(menu, keys[i], parent);
+               }
+       }
+};
+
+/**
+ * Creates the keyboard event handler for the current graph and history.
+ */
+Menus.prototype.createPopupMenu = function(menu, cell, evt) {
+       var graph = this.editorUi.editor.graph;
+       menu.smartSeparators = true;
+
+       if (graph.isSelectionEmpty()) {
+               this.addMenuItems(menu, ['undo', 'redo', '-', 'paste', '-']);
+       } else {
+               this.addMenuItems(menu, ['delete', '-', 'cut', 'copy', '-', 'duplicate']);
+
+               if (graph.getSelectionCount() == 1 && graph.getModel().isEdge(graph.getSelectionCell())) {
+                       this.addMenuItems(menu, ['setAsDefaultEdge']);
+               }
+
+               menu.addSeparator();
+       }
+
+       if (graph.getSelectionCount() > 0) {
+               this.addMenuItems(menu, ['toFront', 'toBack', '-']);
+
+               if (graph.getModel().isEdge(graph.getSelectionCell())) {
+                       var isWaypoint = false;
+                       var cell = graph.getSelectionCell();
+
+                       if (cell != null && graph.getModel().isEdge(cell)) {
+                               var handler = graph.selectionCellsHandler.getHandler(cell);
+
+                               if (handler instanceof mxEdgeHandler && handler.bends != null && handler.bends
+                                       .length > 2) {
+                                       var index = handler.getHandleForEvent(new mxMouseEvent(evt));
+
+                                       // Configures removeWaypoint action before execution
+                                       var rmWaypointAction = this.editorUi.actions.get('removeWaypoint');
+                                       rmWaypointAction.handler = handler;
+                                       rmWaypointAction.index = index;
+
+                                       isWaypoint = index > 0 && index < handler.bends.length;
+                               }
+                       }
+
+                       this.addMenuItems(menu, ['-', (isWaypoint) ? 'removeWaypoint' :
+                               'addWaypoint'
+                       ]);
+               } else if (graph.getSelectionCount() > 1) {
+                       menu.addSeparator();
+                       this.addMenuItems(menu, ['group']);
+               }
+
+               menu.addSeparator();
+
+               if (graph.getSelectionCount() == 1) {
+                       var link = graph.getLinkForCell(graph.getSelectionCell());
+
+                       if (link != null) {
+                               this.addMenuItems(menu, ['openLink']);
+                       }
+               }
+       } else {
+               this.addMenuItems(menu, ['-', 'selectVertices', 'selectEdges', '-',
+                       'selectAll'
+               ]);
+       }
+};
+
+/**
+ * Creates the keyboard event handler for the current graph and history.
+ */
+Menus.prototype.createMenubar = function(container) {
+       var menubar = new Menubar(this.editorUi, container);
+       var menus = ['file', 'edit', 'view', 'format', 'text', 'arrange',
+               'help'
+       ];
+
+       for (var i = 0; i < menus.length; i++) {
+               menubar.addMenu(mxResources.get(menus[i]), this.get(menus[i]).funct);
+       }
+
+       return menubar;
+};
+
+/**
+ * Construcs a new menubar for the given editor.
+ */
+function Menubar(editorUi, container) {
+       this.editorUi = editorUi;
+       this.container = container;
+
+       // Global handler to hide the current menu
+       mxEvent.addGestureListeners(document, mxUtils.bind(this, function(evt) {
+               this.hideMenu();
+       }));
+};
+
+/**
+ * Adds the menubar elements.
+ */
+Menubar.prototype.hideMenu = function() {
+       if (this.currentMenu != null) {
+               this.currentMenu.hideMenu();
+       }
+};
+
+/**
+ * Adds a submenu to this menubar.
+ */
+Menubar.prototype.addMenu = function(label, funct) {
+       var elt = document.createElement('a');
+       elt.setAttribute('href', 'javascript:void(0);');
+       elt.className = 'geItem';
+       mxUtils.write(elt, label);
+
+       this.addMenuHandler(elt, funct);
+       this.container.appendChild(elt);
+
+       return elt;
+};
+
+/**
+ * Adds a handler for showing a menu in the given element.
+ */
+Menubar.prototype.addMenuHandler = function(elt, funct) {
+       if (funct != null) {
+               var show = true;
+
+               var clickHandler = mxUtils.bind(this, function(evt) {
+                       if (show && elt.enabled == null || elt.enabled) {
+                               this.editorUi.editor.graph.panningHandler.hideMenu();
+                               var menu = new mxPopupMenu(funct);
+                               menu.div.className += ' geMenubarMenu';
+                               menu.smartSeparators = true;
+                               menu.showDisabled = true;
+                               menu.autoExpand = true;
+
+                               // Disables autoexpand and destroys menu when hidden
+                               menu.hideMenu = mxUtils.bind(this, function() {
+                                       mxPopupMenu.prototype.hideMenu.apply(menu, arguments);
+                                       menu.destroy();
+                                       this.currentMenu = null;
+                                       this.currentElt = null;
+                               });
+
+                               // Added width of the page-sidebar
+                               var x = elt.offsetLeft + document.getElementById('page-sidebar').offsetWidth +
+                                       22;
+                               // Added static height of the page-navbar
+                               var y = elt.offsetTop + elt.offsetHeight + 140;
+
+                               menu.popup(x, y, null, evt);
+
+                               //menu.popup(elt.offsetLeft + 4, elt.offsetTop + elt.offsetHeight + 4, null, evt);
+                               this.currentMenu = menu;
+                               this.currentElt = elt;
+                       }
+
+                       show = true;
+                       mxEvent.consume(evt);
+               });
+
+               // Shows menu automatically while in expanded state
+               mxEvent.addListener(elt, 'mousemove', mxUtils.bind(this, function(evt) {
+                       if (this.currentMenu != null && this.currentElt != elt) {
+                               this.hideMenu();
+                               clickHandler(evt);
+                       }
+               }));
+
+               // Hides menu if already showing
+               mxEvent.addListener(elt, 'mousedown', mxUtils.bind(this, function() {
+                       show = this.currentElt != elt;
+               }));
+
+               mxEvent.addListener(elt, 'click', clickHandler);
+       }
+};
+
+/**
+ * Constructs a new action for the given parameters.
+ */
+function Menu(funct, enabled) {
+       mxEventSource.call(this);
+       this.funct = funct;
+       this.enabled = (enabled != null) ? enabled : true;
+};
+
+// Menu inherits from mxEventSource
+mxUtils.extend(Menu, mxEventSource);
+
+/**
+ * Sets the enabled state of the action and fires a stateChanged event.
+ */
+Menu.prototype.setEnabled = function(value) {
+       if (this.enabled != value) {
+               this.enabled = value;
+               this.fireEvent(new mxEventObject('stateChanged'));
+       }
+};
+
+/**
+ * Sets the enabled state of the action and fires a stateChanged event.
+ */
+Menu.prototype.execute = function(menu, parent) {
+       this.funct(menu, parent);
+};
index 8c205d8..42e13ca 100644 (file)
@@ -1 +1,1234 @@
-var _0x653f=["\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x63\x6F\x6E\x73\x74\x72\x75\x63\x74\x6F\x72","\x73\x69\x7A\x65","\x72\x65\x64\x72\x61\x77\x50\x61\x74\x68","\x73\x74\x79\x6C\x65","\x67\x65\x74\x56\x61\x6C\x75\x65","\x6D\x69\x6E","\x6D\x6F\x76\x65\x54\x6F","\x6C\x69\x6E\x65\x54\x6F","\x65\x6E\x64","\x63\x6C\x6F\x73\x65","\x63\x75\x62\x65","\x64\x65\x66\x61\x75\x6C\x74\x53\x68\x61\x70\x65\x73","\x6E\x6F\x74\x65","\x74\x61\x62\x57\x69\x64\x74\x68","\x74\x61\x62\x48\x65\x69\x67\x68\x74","\x74\x61\x62\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x72\x69\x67\x68\x74","\x6C\x65\x66\x74","\x66\x6F\x6C\x64\x65\x72","\x63\x61\x72\x64","\x71\x75\x61\x64\x54\x6F","\x74\x61\x70\x65","\x73\x74\x65\x70","\x63\x61\x6C\x6C","\x65\x78\x74\x65\x6E\x64","\x69\x73\x48\x74\x6D\x6C\x41\x6C\x6C\x6F\x77\x65\x64","\x70\x61\x69\x6E\x74\x46\x6F\x72\x65\x67\x72\x6F\x75\x6E\x64","\x62\x65\x67\x69\x6E","\x73\x74\x72\x6F\x6B\x65","\x61\x70\x70\x6C\x79","\x70\x6C\x75\x73","\x64\x6F\x75\x62\x6C\x65","\x73\x74\x72\x6F\x6B\x65\x77\x69\x64\x74\x68","\x6D\x61\x78","\x70\x61\x69\x6E\x74\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64","\x73\x65\x74\x44\x61\x73\x68\x65\x64","\x73\x79\x6D\x62\x6F\x6C","\x41\x6C\x69\x67\x6E","\x56\x65\x72\x74\x69\x63\x61\x6C\x41\x6C\x69\x67\x6E","\x57\x69\x64\x74\x68","\x48\x65\x69\x67\x68\x74","\x53\x70\x61\x63\x69\x6E\x67","\x41\x72\x63\x53\x70\x61\x63\x69\x6E\x67","\x67\x65\x74\x41\x72\x63\x53\x69\x7A\x65","\x41\x4C\x49\x47\x4E\x5F\x43\x45\x4E\x54\x45\x52","\x41\x4C\x49\x47\x4E\x5F\x52\x49\x47\x48\x54","\x41\x4C\x49\x47\x4E\x5F\x4D\x49\x44\x44\x4C\x45","\x41\x4C\x49\x47\x4E\x5F\x42\x4F\x54\x54\x4F\x4D","\x73\x61\x76\x65","\x70\x61\x69\x6E\x74\x56\x65\x72\x74\x65\x78\x53\x68\x61\x70\x65","\x72\x65\x73\x74\x6F\x72\x65","\x65\x78\x74","\x6D\x65\x73\x73\x61\x67\x65","\x61\x64\x64\x50\x69\x70\x65","\x63\x75\x72\x76\x65\x54\x6F","\x75\x6D\x6C\x41\x63\x74\x6F\x72","\x6C\x6F\x6C\x6C\x69\x70\x6F\x70","\x6A\x65\x74\x74\x79\x57\x69\x64\x74\x68","\x6A\x65\x74\x74\x79\x48\x65\x69\x67\x68\x74","\x63\x6F\x6D\x70\x6F\x6E\x65\x6E\x74","\x6F\x75\x74\x65\x72\x53\x74\x72\x6F\x6B\x65","\x65\x6C\x6C\x69\x70\x73\x65","\x66\x69\x6C\x6C\x41\x6E\x64\x53\x74\x72\x6F\x6B\x65","\x73\x65\x74\x53\x68\x61\x64\x6F\x77","\x65\x6E\x64\x53\x74\x61\x74\x65","\x73\x74\x61\x72\x74\x53\x74\x61\x74\x65","\x69\x6E\x69\x74\x53\x68\x61\x70\x65\x73","\x78","\x79","\x77\x69\x64\x74\x68","\x68\x65\x69\x67\x68\x74","\x73\x68\x61\x70\x65\x73","\x70\x61\x69\x6E\x74\x45\x64\x67\x65\x53\x68\x61\x70\x65","\x6C\x65\x6E\x67\x74\x68","\x73\x71\x72\x74","\x6C\x69\x6E\x6B","\x64\x61\x73\x68","\x61\x64\x64\x4D\x61\x72\x6B\x65\x72","\x75\x6E\x64\x65\x66\x69\x6E\x65\x64","\x75\x73\x65\x47\x72\x69\x64\x46\x6F\x72\x53\x70\x65\x63\x69\x61\x6C\x48\x61\x6E\x64\x6C\x65","\x69\x6E\x69\x74","\x68\x6F\x72\x69\x7A\x6F\x6E\x74\x61\x6C","\x73\x74\x61\x74\x65","\x67\x72\x61\x70\x68","\x76\x69\x65\x77","\x68\x61\x6E\x64\x6C\x65\x49\x6D\x61\x67\x65","\x73\x70\x65\x63\x69\x61\x6C\x48\x61\x6E\x64\x6C\x65","\x73\x72\x63","\x64\x69\x61\x6C\x65\x63\x74","\x44\x49\x41\x4C\x45\x43\x54\x5F\x53\x56\x47","\x44\x49\x41\x4C\x45\x43\x54\x5F\x56\x4D\x4C","\x67\x65\x74\x4F\x76\x65\x72\x6C\x61\x79\x50\x61\x6E\x65","\x67\x65\x74\x56\x69\x65\x77","\x63\x75\x72\x73\x6F\x72","\x6E\x6F\x64\x65","\x67\x65\x74\x53\x70\x65\x63\x69\x61\x6C\x48\x61\x6E\x64\x6C\x65\x43\x75\x72\x73\x6F\x72","\x72\x65\x64\x69\x72\x65\x63\x74\x4D\x6F\x75\x73\x65\x45\x76\x65\x6E\x74\x73","\x64\x65\x66\x61\x75\x6C\x74","\x72\x65\x64\x72\x61\x77","\x62\x6F\x75\x6E\x64\x73","\x67\x65\x74\x53\x70\x65\x63\x69\x61\x6C\x48\x61\x6E\x64\x6C\x65\x42\x6F\x75\x6E\x64\x73","\x64\x65\x73\x74\x72\x6F\x79","\x67\x65\x74\x48\x61\x6E\x64\x6C\x65\x46\x6F\x72\x45\x76\x65\x6E\x74","\x69\x73\x53\x6F\x75\x72\x63\x65","\x6D\x6F\x75\x73\x65\x4D\x6F\x76\x65","\x69\x73\x43\x6F\x6E\x73\x75\x6D\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74\x47\x72\x61\x70\x68\x58","\x67\x65\x74\x47\x72\x61\x70\x68\x59","\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x50\x6F\x69\x6E\x74","\x67\x65\x74\x45\x76\x65\x6E\x74","\x69\x73\x47\x72\x69\x64\x45\x6E\x61\x62\x6C\x65\x64\x45\x76\x65\x6E\x74","\x73\x63\x61\x6C\x65","\x73\x6E\x61\x70","\x75\x70\x64\x61\x74\x65\x53\x74\x79\x6C\x65","\x6D\x6F\x76\x65\x53\x69\x7A\x65\x72\x54\x6F","\x63\x65\x6C\x6C\x52\x65\x6E\x64\x65\x72\x65\x72","\x63\x6F\x6E\x73\x75\x6D\x65","\x6D\x6F\x75\x73\x65\x55\x70","\x61\x70\x70\x6C\x79\x53\x74\x79\x6C\x65","\x72\x65\x73\x65\x74","\x67\x65\x74\x53\x68\x61\x70\x65\x52\x6F\x74\x61\x74\x69\x6F\x6E","\x73\x68\x61\x70\x65","\x74\x6F\x52\x61\x64\x69\x61\x6E\x73","\x63\x6F\x73","\x73\x69\x6E","\x69\x73\x50\x61\x69\x6E\x74\x42\x6F\x75\x6E\x64\x73\x49\x6E\x76\x65\x72\x74\x65\x64","\x67\x65\x74\x53\x70\x65\x63\x69\x61\x6C\x48\x61\x6E\x64\x6C\x65\x50\x6F\x69\x6E\x74","\x66\x6C\x69\x70\x48","\x66\x6C\x69\x70\x56","\x67\x65\x74\x43\x65\x6E\x74\x65\x72\x58","\x67\x65\x74\x43\x65\x6E\x74\x65\x72\x59","\x67\x65\x74\x52\x6F\x74\x61\x74\x65\x64\x50\x6F\x69\x6E\x74","\x75\x70\x64\x61\x74\x65\x53\x74\x79\x6C\x65\x55\x6E\x72\x6F\x74\x61\x74\x65\x64","\x72\x6F\x75\x6E\x64","\x67\x65\x74\x4D\x6F\x64\x65\x6C","\x62\x65\x67\x69\x6E\x55\x70\x64\x61\x74\x65","\x63\x65\x6C\x6C","\x73\x65\x74\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65\x73","\x65\x6E\x64\x55\x70\x64\x61\x74\x65","\x73\x74\x61\x72\x74\x53\x69\x7A\x65","\x64\x65\x66\x61\x75\x6C\x74\x56\x61\x6C\x75\x65","\x73\x63\x61\x6C\x65\x46\x61\x63\x74\x6F\x72","\x63\x72\x65\x61\x74\x65\x48\x61\x6E\x64\x6C\x65\x72","\x67\x65\x74\x41\x6C\x6C\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74\x73","\x73\x74\x65\x6E\x63\x69\x6C","\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74\x73"];(function(){function _0x4d9cx1(){}_0x4d9cx1[_0x653f[0]]= new mxCylinder();_0x4d9cx1[_0x653f[0]][_0x653f[1]]=_0x4d9cx1;_0x4d9cx1[_0x653f[0]][_0x653f[2]]=20;_0x4d9cx1[_0x653f[0]][_0x653f[3]]=function(_0x4d9cx2,_0x4d9cx3,_0x4d9cx4,_0x4d9cx5,_0x4d9cx6,_0x4d9cx7){var _0x4d9cx8=Math[_0x653f[6]](_0x4d9cx5,Math[_0x653f[6]](_0x4d9cx6,mxUtils[_0x653f[5]](this[_0x653f[4]],_0x653f[2],this[_0x653f[2]])));if(_0x4d9cx7){_0x4d9cx2[_0x653f[7]](_0x4d9cx8,_0x4d9cx6);_0x4d9cx2[_0x653f[8]](_0x4d9cx8,_0x4d9cx8);_0x4d9cx2[_0x653f[8]](0,0);_0x4d9cx2[_0x653f[7]](_0x4d9cx8,_0x4d9cx8);_0x4d9cx2[_0x653f[8]](_0x4d9cx5,_0x4d9cx8);_0x4d9cx2[_0x653f[9]]()}else {_0x4d9cx2[_0x653f[7]](0,0);_0x4d9cx2[_0x653f[8]](_0x4d9cx5-_0x4d9cx8,0);_0x4d9cx2[_0x653f[8]](_0x4d9cx5,_0x4d9cx8);_0x4d9cx2[_0x653f[8]](_0x4d9cx5,_0x4d9cx6);_0x4d9cx2[_0x653f[8]](_0x4d9cx8,_0x4d9cx6);_0x4d9cx2[_0x653f[8]](0,_0x4d9cx6-_0x4d9cx8);_0x4d9cx2[_0x653f[8]](0,0);_0x4d9cx2[_0x653f[10]]();_0x4d9cx2[_0x653f[9]]()}};mxCellRenderer[_0x653f[0]][_0x653f[12]][_0x653f[11]]=_0x4d9cx1;function _0x4d9cx9(){}_0x4d9cx9[_0x653f[0]]= new mxCylinder();_0x4d9cx9[_0x653f[0]][_0x653f[1]]=_0x4d9cx9;_0x4d9cx9[_0x653f[0]][_0x653f[2]]=30;_0x4d9cx9[_0x653f[0]][_0x653f[3]]=function(_0x4d9cx2,_0x4d9cx3,_0x4d9cx4,_0x4d9cx5,_0x4d9cx6,_0x4d9cx7){var _0x4d9cx8=Math[_0x653f[6]](_0x4d9cx5,Math[_0x653f[6]](_0x4d9cx6,mxUtils[_0x653f[5]](this[_0x653f[4]],_0x653f[2],this[_0x653f[2]])));if(_0x4d9cx7){_0x4d9cx2[_0x653f[7]](_0x4d9cx5-_0x4d9cx8,0);_0x4d9cx2[_0x653f[8]](_0x4d9cx5-_0x4d9cx8,_0x4d9cx8);_0x4d9cx2[_0x653f[8]](_0x4d9cx5,_0x4d9cx8);_0x4d9cx2[_0x653f[9]]()}else {_0x4d9cx2[_0x653f[7]](0,0);_0x4d9cx2[_0x653f[8]](_0x4d9cx5-_0x4d9cx8,0);_0x4d9cx2[_0x653f[8]](_0x4d9cx5,_0x4d9cx8);_0x4d9cx2[_0x653f[8]](_0x4d9cx5,_0x4d9cx6);_0x4d9cx2[_0x653f[8]](0,_0x4d9cx6);_0x4d9cx2[_0x653f[8]](0,0);_0x4d9cx2[_0x653f[10]]();_0x4d9cx2[_0x653f[9]]()}};mxCellRenderer[_0x653f[0]][_0x653f[12]][_0x653f[13]]=_0x4d9cx9;function _0x4d9cxa(){}_0x4d9cxa[_0x653f[0]]= new mxCylinder();_0x4d9cxa[_0x653f[0]][_0x653f[1]]=_0x4d9cxa;_0x4d9cxa[_0x653f[0]][_0x653f[14]]=60;_0x4d9cxa[_0x653f[0]][_0x653f[15]]=20;_0x4d9cxa[_0x653f[0]][_0x653f[16]]=_0x653f[17];_0x4d9cxa[_0x653f[0]][_0x653f[3]]=function(_0x4d9cx2,_0x4d9cx3,_0x4d9cx4,_0x4d9cx5,_0x4d9cx6,_0x4d9cx7){var _0x4d9cxb=mxUtils[_0x653f[5]](this[_0x653f[4]],_0x653f[14],this[_0x653f[14]]);var _0x4d9cxc=mxUtils[_0x653f[5]](this[_0x653f[4]],_0x653f[15],this[_0x653f[15]]);var _0x4d9cxd=mxUtils[_0x653f[5]](this[_0x653f[4]],_0x653f[16],this[_0x653f[16]]);var _0x4d9cxe=Math[_0x653f[6]](_0x4d9cx5,_0x4d9cxb);var _0x4d9cxf=Math[_0x653f[6]](_0x4d9cx6,_0x4d9cxc);if(_0x4d9cx7){if(_0x4d9cxd==_0x653f[18]){_0x4d9cx2[_0x653f[7]](0,_0x4d9cxf);_0x4d9cx2[_0x653f[8]](_0x4d9cxe,_0x4d9cxf)}else {_0x4d9cx2[_0x653f[7]](_0x4d9cx5-_0x4d9cxe,_0x4d9cxf);_0x4d9cx2[_0x653f[8]](_0x4d9cx5,_0x4d9cxf)};_0x4d9cx2[_0x653f[9]]()}else {if(_0x4d9cxd==_0x653f[18]){_0x4d9cx2[_0x653f[7]](0,0);_0x4d9cx2[_0x653f[8]](_0x4d9cxe,0);_0x4d9cx2[_0x653f[8]](_0x4d9cxe,_0x4d9cxf);_0x4d9cx2[_0x653f[8]](_0x4d9cx5,_0x4d9cxf)}else {_0x4d9cx2[_0x653f[7]](0,_0x4d9cxf);_0x4d9cx2[_0x653f[8]](_0x4d9cx5-_0x4d9cxe,_0x4d9cxf);_0x4d9cx2[_0x653f[8]](_0x4d9cx5-_0x4d9cxe,0);_0x4d9cx2[_0x653f[8]](_0x4d9cx5,0)};_0x4d9cx2[_0x653f[8]](_0x4d9cx5,_0x4d9cx6);_0x4d9cx2[_0x653f[8]](0,_0x4d9cx6);_0x4d9cx2[_0x653f[8]](0,_0x4d9cxf);_0x4d9cx2[_0x653f[10]]();_0x4d9cx2[_0x653f[9]]()}};mxCellRenderer[_0x653f[0]][_0x653f[12]][_0x653f[19]]=_0x4d9cxa;function _0x4d9cx10(){}_0x4d9cx10[_0x653f[0]]= new mxCylinder();_0x4d9cx10[_0x653f[0]][_0x653f[1]]=_0x4d9cx10;_0x4d9cx10[_0x653f[0]][_0x653f[2]]=30;_0x4d9cx10[_0x653f[0]][_0x653f[3]]=function(_0x4d9cx2,_0x4d9cx3,_0x4d9cx4,_0x4d9cx5,_0x4d9cx6,_0x4d9cx7){var _0x4d9cx8=Math[_0x653f[6]](_0x4d9cx5,Math[_0x653f[6]](_0x4d9cx6,mxUtils[_0x653f[5]](this[_0x653f[4]],_0x653f[2],this[_0x653f[2]])));if(!_0x4d9cx7){_0x4d9cx2[_0x653f[7]](_0x4d9cx8,0);_0x4d9cx2[_0x653f[8]](_0x4d9cx5,0);_0x4d9cx2[_0x653f[8]](_0x4d9cx5,_0x4d9cx6);_0x4d9cx2[_0x653f[8]](0,_0x4d9cx6);_0x4d9cx2[_0x653f[8]](0,_0x4d9cx8);_0x4d9cx2[_0x653f[8]](_0x4d9cx8,0);_0x4d9cx2[_0x653f[10]]();_0x4d9cx2[_0x653f[9]]()}};mxCellRenderer[_0x653f[0]][_0x653f[12]][_0x653f[20]]=_0x4d9cx10;function _0x4d9cx11(){}_0x4d9cx11[_0x653f[0]]= new mxCylinder();_0x4d9cx11[_0x653f[0]][_0x653f[1]]=_0x4d9cx11;_0x4d9cx11[_0x653f[0]][_0x653f[2]]=0.4;_0x4d9cx11[_0x653f[0]][_0x653f[3]]=function(_0x4d9cx2,_0x4d9cx3,_0x4d9cx4,_0x4d9cx5,_0x4d9cx6,_0x4d9cx7){var _0x4d9cx8=mxUtils[_0x653f[5]](this[_0x653f[4]],_0x653f[2],this[_0x653f[2]]);var _0x4d9cxf=_0x4d9cx6*_0x4d9cx8;var _0x4d9cx12=1.4;if(!_0x4d9cx7){_0x4d9cx2[_0x653f[7]](0,_0x4d9cxf/2);_0x4d9cx2[_0x653f[21]](_0x4d9cx5/4,_0x4d9cxf*_0x4d9cx12,_0x4d9cx5/2,_0x4d9cxf/2);_0x4d9cx2[_0x653f[21]](_0x4d9cx5*3/4,_0x4d9cxf*(1-_0x4d9cx12),_0x4d9cx5,_0x4d9cxf/2);_0x4d9cx2[_0x653f[8]](_0x4d9cx5,_0x4d9cx6-_0x4d9cxf/2);_0x4d9cx2[_0x653f[21]](_0x4d9cx5*3/4,_0x4d9cx6-_0x4d9cxf*_0x4d9cx12,_0x4d9cx5/2,_0x4d9cx6-_0x4d9cxf/2);_0x4d9cx2[_0x653f[21]](_0x4d9cx5/4,_0x4d9cx6-_0x4d9cxf*(1-_0x4d9cx12),0,_0x4d9cx6-_0x4d9cxf/2);_0x4d9cx2[_0x653f[8]](0,_0x4d9cxf/2);_0x4d9cx2[_0x653f[10]]();_0x4d9cx2[_0x653f[9]]()}};mxCellRenderer[_0x653f[0]][_0x653f[12]][_0x653f[22]]=_0x4d9cx11;function _0x4d9cx13(){}_0x4d9cx13[_0x653f[0]]= new mxCylinder();_0x4d9cx13[_0x653f[0]][_0x653f[1]]=_0x4d9cx13;_0x4d9cx13[_0x653f[0]][_0x653f[2]]=0.2;_0x4d9cx13[_0x653f[0]][_0x653f[3]]=function(_0x4d9cx2,_0x4d9cx3,_0x4d9cx4,_0x4d9cx5,_0x4d9cx6,_0x4d9cx7){var _0x4d9cx8=_0x4d9cx5*mxUtils[_0x653f[5]](this[_0x653f[4]],_0x653f[2],this[_0x653f[2]]);if(!_0x4d9cx7){_0x4d9cx2[_0x653f[7]](0,0);_0x4d9cx2[_0x653f[8]](_0x4d9cx5-_0x4d9cx8,0);_0x4d9cx2[_0x653f[8]](_0x4d9cx5,_0x4d9cx6/2);_0x4d9cx2[_0x653f[8]](_0x4d9cx5-_0x4d9cx8,_0x4d9cx6);_0x4d9cx2[_0x653f[8]](0,_0x4d9cx6);_0x4d9cx2[_0x653f[8]](_0x4d9cx8,_0x4d9cx6/2);_0x4d9cx2[_0x653f[10]]();_0x4d9cx2[_0x653f[9]]()}};mxCellRenderer[_0x653f[0]][_0x653f[12]][_0x653f[23]]=_0x4d9cx13;function _0x4d9cx14(){mxRectangleShape[_0x653f[24]](this)}mxUtils[_0x653f[25]](_0x4d9cx14,mxRectangleShape);_0x4d9cx14[_0x653f[0]][_0x653f[26]]=function(){return false};_0x4d9cx14[_0x653f[0]][_0x653f[27]]=function(_0x4d9cx15,_0x4d9cx3,_0x4d9cx4,_0x4d9cx5,_0x4d9cx6){var _0x4d9cx16=Math[_0x653f[6]](_0x4d9cx5/5,_0x4d9cx6/5)+1;_0x4d9cx15[_0x653f[28]]();_0x4d9cx15[_0x653f[7]](_0x4d9cx3+_0x4d9cx5/2,_0x4d9cx4+_0x4d9cx16);_0x4d9cx15[_0x653f[8]](_0x4d9cx3+_0x4d9cx5/2,_0x4d9cx4+_0x4d9cx6-_0x4d9cx16);_0x4d9cx15[_0x653f[7]](_0x4d9cx3+_0x4d9cx16,_0x4d9cx4+_0x4d9cx6/2);_0x4d9cx15[_0x653f[8]](_0x4d9cx3+_0x4d9cx5-_0x4d9cx16,_0x4d9cx4+_0x4d9cx6/2);_0x4d9cx15[_0x653f[9]]();_0x4d9cx15[_0x653f[29]]();mxRectangleShape[_0x653f[0]][_0x653f[27]][_0x653f[30]](this,arguments)};mxCellRenderer[_0x653f[0]][_0x653f[12]][_0x653f[31]]=_0x4d9cx14;function _0x4d9cx17(){mxRectangleShape[_0x653f[24]](this)}mxUtils[_0x653f[25]](_0x4d9cx17,mxRectangleShape);_0x4d9cx17[_0x653f[0]][_0x653f[26]]=function(){return false};_0x4d9cx17[_0x653f[0]][_0x653f[27]]=function(_0x4d9cx15,_0x4d9cx3,_0x4d9cx4,_0x4d9cx5,_0x4d9cx6){if(this[_0x653f[4]]!=null){if(this[_0x653f[4]][_0x653f[32]]==1){var _0x4d9cx18=Math[_0x653f[34]](2,this[_0x653f[33]]+1);mxRectangleShape[_0x653f[0]][_0x653f[35]][_0x653f[24]](this,_0x4d9cx15,_0x4d9cx3+_0x4d9cx18,_0x4d9cx4+_0x4d9cx18,_0x4d9cx5-2*_0x4d9cx18,_0x4d9cx6-2*_0x4d9cx18);mxRectangleShape[_0x653f[0]][_0x653f[27]][_0x653f[30]](this,arguments);_0x4d9cx3+=_0x4d9cx18;_0x4d9cx4+=_0x4d9cx18;_0x4d9cx5-=2*_0x4d9cx18;_0x4d9cx6-=2*_0x4d9cx18};_0x4d9cx15[_0x653f[36]](false);var _0x4d9cx19=0;var _0x4d9cx1a=null;do{_0x4d9cx1a=mxCellRenderer[_0x653f[0]][_0x653f[12]][this[_0x653f[4]][_0x653f[37]+_0x4d9cx19]];if(_0x4d9cx1a!=null){var _0x4d9cx1b=this[_0x653f[4]][_0x653f[37]+_0x4d9cx19+_0x653f[38]];var _0x4d9cx1c=this[_0x653f[4]][_0x653f[37]+_0x4d9cx19+_0x653f[39]];var _0x4d9cx1d=this[_0x653f[4]][_0x653f[37]+_0x4d9cx19+_0x653f[40]];var _0x4d9cx1e=this[_0x653f[4]][_0x653f[37]+_0x4d9cx19+_0x653f[41]];var _0x4d9cx1f=this[_0x653f[4]][_0x653f[37]+_0x4d9cx19+_0x653f[42]]||0;var _0x4d9cx20=this[_0x653f[4]][_0x653f[37]+_0x4d9cx19+_0x653f[43]];if(_0x4d9cx20!=null){_0x4d9cx1f+=this[_0x653f[44]](_0x4d9cx5+this[_0x653f[33]],_0x4d9cx6+this[_0x653f[33]])*_0x4d9cx20};var _0x4d9cx21=_0x4d9cx3;var _0x4d9cx22=_0x4d9cx4;if(_0x4d9cx1b==mxConstants[_0x653f[45]]){_0x4d9cx21+=(_0x4d9cx5-_0x4d9cx1d)/2}else {if(_0x4d9cx1b==mxConstants[_0x653f[46]]){_0x4d9cx21+=_0x4d9cx5-_0x4d9cx1d-_0x4d9cx1f}else {_0x4d9cx21+=_0x4d9cx1f}};if(_0x4d9cx1c==mxConstants[_0x653f[47]]){_0x4d9cx22+=(_0x4d9cx6-_0x4d9cx1e)/2}else {if(_0x4d9cx1c==mxConstants[_0x653f[48]]){_0x4d9cx22+=_0x4d9cx6-_0x4d9cx1e-_0x4d9cx1f}else {_0x4d9cx22+=_0x4d9cx1f}};_0x4d9cx15[_0x653f[49]]();var _0x4d9cx23= new _0x4d9cx1a();_0x4d9cx23[_0x653f[4]]=this[_0x653f[4]];_0x4d9cx1a[_0x653f[0]][_0x653f[50]][_0x653f[24]](_0x4d9cx23,_0x4d9cx15,_0x4d9cx21,_0x4d9cx22,_0x4d9cx1d,_0x4d9cx1e);_0x4d9cx15[_0x653f[51]]()};_0x4d9cx19++}while(_0x4d9cx1a!=null);}};mxCellRenderer[_0x653f[0]][_0x653f[12]][_0x653f[52]]=_0x4d9cx17;function _0x4d9cx24(){}_0x4d9cx24[_0x653f[0]]= new mxCylinder();_0x4d9cx24[_0x653f[0]][_0x653f[1]]=_0x4d9cx24;_0x4d9cx24[_0x653f[0]][_0x653f[3]]=function(_0x4d9cx2,_0x4d9cx3,_0x4d9cx4,_0x4d9cx5,_0x4d9cx6,_0x4d9cx7){if(_0x4d9cx7){_0x4d9cx2[_0x653f[7]](0,0);_0x4d9cx2[_0x653f[8]](_0x4d9cx5/2,_0x4d9cx6/2);_0x4d9cx2[_0x653f[8]](_0x4d9cx5,0);_0x4d9cx2[_0x653f[9]]()}else {_0x4d9cx2[_0x653f[7]](0,0);_0x4d9cx2[_0x653f[8]](_0x4d9cx5,0);_0x4d9cx2[_0x653f[8]](_0x4d9cx5,_0x4d9cx6);_0x4d9cx2[_0x653f[8]](0,_0x4d9cx6);_0x4d9cx2[_0x653f[10]]()}};mxCellRenderer[_0x653f[0]][_0x653f[12]][_0x653f[53]]=_0x4d9cx24;function _0x4d9cx25(){}_0x4d9cx25[_0x653f[0]]= new mxCylinder();_0x4d9cx25[_0x653f[0]][_0x653f[1]]=_0x4d9cx25;_0x4d9cx25[_0x653f[0]][_0x653f[54]]=true;_0x4d9cx25[_0x653f[0]][_0x653f[3]]=function(_0x4d9cx2,_0x4d9cx3,_0x4d9cx4,_0x4d9cx5,_0x4d9cx6,_0x4d9cx7){var _0x4d9cx1d=_0x4d9cx5/3;var _0x4d9cx1e=_0x4d9cx6/4;if(!_0x4d9cx7){_0x4d9cx2[_0x653f[7]](_0x4d9cx5/2,_0x4d9cx1e);_0x4d9cx2[_0x653f[55]](_0x4d9cx5/2-_0x4d9cx1d,_0x4d9cx1e,_0x4d9cx5/2-_0x4d9cx1d,0,_0x4d9cx5/2,0);_0x4d9cx2[_0x653f[55]](_0x4d9cx5/2+_0x4d9cx1d,0,_0x4d9cx5/2+_0x4d9cx1d,_0x4d9cx1e,_0x4d9cx5/2,_0x4d9cx1e);_0x4d9cx2[_0x653f[10]]();_0x4d9cx2[_0x653f[7]](_0x4d9cx5/2,_0x4d9cx1e);_0x4d9cx2[_0x653f[8]](_0x4d9cx5/2,2*_0x4d9cx6/3);_0x4d9cx2[_0x653f[7]](_0x4d9cx5/2,_0x4d9cx6/3);_0x4d9cx2[_0x653f[8]](0,_0x4d9cx6/3);_0x4d9cx2[_0x653f[7]](_0x4d9cx5/2,_0x4d9cx6/3);_0x4d9cx2[_0x653f[8]](_0x4d9cx5,_0x4d9cx6/3);_0x4d9cx2[_0x653f[7]](_0x4d9cx5/2,2*_0x4d9cx6/3);_0x4d9cx2[_0x653f[8]](0,_0x4d9cx6);_0x4d9cx2[_0x653f[7]](_0x4d9cx5/2,2*_0x4d9cx6/3);_0x4d9cx2[_0x653f[8]](_0x4d9cx5,_0x4d9cx6);_0x4d9cx2[_0x653f[9]]()}};mxCellRenderer[_0x653f[0]][_0x653f[12]][_0x653f[56]]=_0x4d9cx25;function _0x4d9cx26(){}_0x4d9cx26[_0x653f[0]]= new mxCylinder();_0x4d9cx26[_0x653f[0]][_0x653f[1]]=_0x4d9cx26;_0x4d9cx26[_0x653f[0]][_0x653f[2]]=10;_0x4d9cx26[_0x653f[0]][_0x653f[54]]=true;_0x4d9cx26[_0x653f[0]][_0x653f[3]]=function(_0x4d9cx2,_0x4d9cx3,_0x4d9cx4,_0x4d9cx5,_0x4d9cx6,_0x4d9cx7){var _0x4d9cx27=mxUtils[_0x653f[5]](this[_0x653f[4]],_0x653f[2],this[_0x653f[2]]);var _0x4d9cx1d=_0x4d9cx27*2/3;var _0x4d9cx1e=_0x4d9cx27;if(!_0x4d9cx7){_0x4d9cx2[_0x653f[7]](_0x4d9cx5/2,_0x4d9cx1e);_0x4d9cx2[_0x653f[55]](_0x4d9cx5/2-_0x4d9cx1d,_0x4d9cx1e,_0x4d9cx5/2-_0x4d9cx1d,0,_0x4d9cx5/2,0);_0x4d9cx2[_0x653f[55]](_0x4d9cx5/2+_0x4d9cx1d,0,_0x4d9cx5/2+_0x4d9cx1d,_0x4d9cx1e,_0x4d9cx5/2,_0x4d9cx1e);_0x4d9cx2[_0x653f[10]]();_0x4d9cx2[_0x653f[7]](_0x4d9cx5/2,_0x4d9cx1e);_0x4d9cx2[_0x653f[8]](_0x4d9cx5/2,_0x4d9cx6);_0x4d9cx2[_0x653f[9]]()}};mxCellRenderer[_0x653f[0]][_0x653f[12]][_0x653f[57]]=_0x4d9cx26;function _0x4d9cx28(){}_0x4d9cx28[_0x653f[0]]= new mxCylinder();_0x4d9cx28[_0x653f[0]][_0x653f[1]]=_0x4d9cx28;_0x4d9cx28[_0x653f[0]][_0x653f[58]]=32;_0x4d9cx28[_0x653f[0]][_0x653f[59]]=12;_0x4d9cx28[_0x653f[0]][_0x653f[3]]=function(_0x4d9cx2,_0x4d9cx3,_0x4d9cx4,_0x4d9cx5,_0x4d9cx6,_0x4d9cx7){var _0x4d9cxe=mxUtils[_0x653f[5]](this[_0x653f[4]],_0x653f[58],this[_0x653f[58]]);var _0x4d9cxf=mxUtils[_0x653f[5]](this[_0x653f[4]],_0x653f[59],this[_0x653f[59]]);var _0x4d9cx29=_0x4d9cxe/2;var _0x4d9cx2a=_0x4d9cx29+_0x4d9cxe/2;var _0x4d9cx2b=0.3*_0x4d9cx6-_0x4d9cxf/2;var _0x4d9cx2c=0.7*_0x4d9cx6-_0x4d9cxf/2;if(_0x4d9cx7){_0x4d9cx2[_0x653f[7]](_0x4d9cx29,_0x4d9cx2b);_0x4d9cx2[_0x653f[8]](_0x4d9cx2a,_0x4d9cx2b);_0x4d9cx2[_0x653f[8]](_0x4d9cx2a,_0x4d9cx2b+_0x4d9cxf);_0x4d9cx2[_0x653f[8]](_0x4d9cx29,_0x4d9cx2b+_0x4d9cxf);_0x4d9cx2[_0x653f[7]](_0x4d9cx29,_0x4d9cx2c);_0x4d9cx2[_0x653f[8]](_0x4d9cx2a,_0x4d9cx2c);_0x4d9cx2[_0x653f[8]](_0x4d9cx2a,_0x4d9cx2c+_0x4d9cxf);_0x4d9cx2[_0x653f[8]](_0x4d9cx29,_0x4d9cx2c+_0x4d9cxf);_0x4d9cx2[_0x653f[9]]()}else {_0x4d9cx2[_0x653f[7]](_0x4d9cx29,0);_0x4d9cx2[_0x653f[8]](_0x4d9cx5,0);_0x4d9cx2[_0x653f[8]](_0x4d9cx5,_0x4d9cx6);_0x4d9cx2[_0x653f[8]](_0x4d9cx29,_0x4d9cx6);_0x4d9cx2[_0x653f[8]](_0x4d9cx29,_0x4d9cx2c+_0x4d9cxf);_0x4d9cx2[_0x653f[8]](0,_0x4d9cx2c+_0x4d9cxf);_0x4d9cx2[_0x653f[8]](0,_0x4d9cx2c);_0x4d9cx2[_0x653f[8]](_0x4d9cx29,_0x4d9cx2c);_0x4d9cx2[_0x653f[8]](_0x4d9cx29,_0x4d9cx2b+_0x4d9cxf);_0x4d9cx2[_0x653f[8]](0,_0x4d9cx2b+_0x4d9cxf);_0x4d9cx2[_0x653f[8]](0,_0x4d9cx2b);_0x4d9cx2[_0x653f[8]](_0x4d9cx29,_0x4d9cx2b);_0x4d9cx2[_0x653f[10]]();_0x4d9cx2[_0x653f[9]]()}};mxCellRenderer[_0x653f[0]][_0x653f[12]][_0x653f[60]]=_0x4d9cx28;function _0x4d9cx2d(){}_0x4d9cx2d[_0x653f[0]]= new mxDoubleEllipse();_0x4d9cx2d[_0x653f[0]][_0x653f[1]]=_0x4d9cx2d;_0x4d9cx2d[_0x653f[0]][_0x653f[61]]=true;_0x4d9cx2d[_0x653f[0]][_0x653f[50]]=function(_0x4d9cx15,_0x4d9cx3,_0x4d9cx4,_0x4d9cx5,_0x4d9cx6){var _0x4d9cx18=Math[_0x653f[6]](4,Math[_0x653f[6]](_0x4d9cx5/5,_0x4d9cx6/5));if(_0x4d9cx5>0&&_0x4d9cx6>0){_0x4d9cx15[_0x653f[62]](_0x4d9cx3+_0x4d9cx18,_0x4d9cx4+_0x4d9cx18,_0x4d9cx5-2*_0x4d9cx18,_0x4d9cx6-2*_0x4d9cx18);_0x4d9cx15[_0x653f[63]]()};_0x4d9cx15[_0x653f[64]](false);if(this[_0x653f[61]]){_0x4d9cx15[_0x653f[62]](_0x4d9cx3,_0x4d9cx4,_0x4d9cx5,_0x4d9cx6);_0x4d9cx15[_0x653f[29]]()}};mxCellRenderer[_0x653f[0]][_0x653f[12]][_0x653f[65]]=_0x4d9cx2d;function _0x4d9cx2e(){}_0x4d9cx2e[_0x653f[0]]= new _0x4d9cx2d();_0x4d9cx2e[_0x653f[0]][_0x653f[1]]=_0x4d9cx2e;_0x4d9cx2e[_0x653f[0]][_0x653f[61]]=false;mxCellRenderer[_0x653f[0]][_0x653f[12]][_0x653f[66]]=_0x4d9cx2e;var _0x4d9cx2f=mxImageExport[_0x653f[0]][_0x653f[67]];mxImageExport[_0x653f[0]][_0x653f[67]]=function(){_0x4d9cx2f[_0x653f[30]](this,arguments);function _0x4d9cx30(_0x4d9cx31){return {drawShape:function(_0x4d9cx32,_0x4d9cx33,_0x4d9cx34,_0x4d9cx35){var _0x4d9cx3=_0x4d9cx34[_0x653f[68]];var _0x4d9cx4=_0x4d9cx34[_0x653f[69]];var _0x4d9cx5=_0x4d9cx34[_0x653f[70]];var _0x4d9cx6=_0x4d9cx34[_0x653f[71]];if(_0x4d9cx35){var _0x4d9cx18=Math[_0x653f[6]](4,Math[_0x653f[6]](_0x4d9cx5/5,_0x4d9cx6/5));_0x4d9cx3+=_0x4d9cx18;_0x4d9cx4+=_0x4d9cx18;_0x4d9cx5-=2*_0x4d9cx18;_0x4d9cx6-=2*_0x4d9cx18;if(_0x4d9cx5>0&&_0x4d9cx6>0){_0x4d9cx32[_0x653f[62]](_0x4d9cx3,_0x4d9cx4,_0x4d9cx5,_0x4d9cx6)};return true}else {_0x4d9cx32[_0x653f[63]]();if(_0x4d9cx31){_0x4d9cx32[_0x653f[62]](_0x4d9cx3,_0x4d9cx4,_0x4d9cx5,_0x4d9cx6);_0x4d9cx32[_0x653f[29]]()}}}}}this[_0x653f[72]][_0x653f[65]]=_0x4d9cx30(true);this[_0x653f[72]][_0x653f[66]]=_0x4d9cx30(false)};function _0x4d9cx36(){mxArrow[_0x653f[24]](this)}mxUtils[_0x653f[25]](_0x4d9cx36,mxArrow);_0x4d9cx36[_0x653f[0]][_0x653f[73]]=function(_0x4d9cx15,_0x4d9cx37){var _0x4d9cx1d=10;var _0x4d9cx38=_0x4d9cx37[0];var _0x4d9cx39=_0x4d9cx37[_0x4d9cx37[_0x653f[74]]-1];var _0x4d9cxe=_0x4d9cx39[_0x653f[68]]-_0x4d9cx38[_0x653f[68]];var _0x4d9cxf=_0x4d9cx39[_0x653f[69]]-_0x4d9cx38[_0x653f[69]];var _0x4d9cx3a=Math[_0x653f[75]](_0x4d9cxe*_0x4d9cxe+_0x4d9cxf*_0x4d9cxf);var _0x4d9cx3b=_0x4d9cx3a;var _0x4d9cx3c=_0x4d9cxe/_0x4d9cx3a;var _0x4d9cx3d=_0x4d9cxf/_0x4d9cx3a;var _0x4d9cx3e=_0x4d9cx3b*_0x4d9cx3c;var _0x4d9cx3f=_0x4d9cx3b*_0x4d9cx3d;var _0x4d9cx40=_0x4d9cx1d*_0x4d9cx3d/3;var _0x4d9cx41=-_0x4d9cx1d*_0x4d9cx3c/3;var _0x4d9cx42=_0x4d9cx38[_0x653f[68]]-_0x4d9cx40/2;var _0x4d9cx43=_0x4d9cx38[_0x653f[69]]-_0x4d9cx41/2;var _0x4d9cx44=_0x4d9cx42+_0x4d9cx40;var _0x4d9cx45=_0x4d9cx43+_0x4d9cx41;var _0x4d9cx46=_0x4d9cx44+_0x4d9cx3e;var _0x4d9cx47=_0x4d9cx45+_0x4d9cx3f;var _0x4d9cx48=_0x4d9cx46+_0x4d9cx40;var _0x4d9cx49=_0x4d9cx47+_0x4d9cx41;var _0x4d9cx4a=_0x4d9cx48-3*_0x4d9cx40;var _0x4d9cx4b=_0x4d9cx49-3*_0x4d9cx41;_0x4d9cx15[_0x653f[28]]();_0x4d9cx15[_0x653f[7]](_0x4d9cx44,_0x4d9cx45);_0x4d9cx15[_0x653f[8]](_0x4d9cx46,_0x4d9cx47);_0x4d9cx15[_0x653f[7]](_0x4d9cx4a+_0x4d9cx40,_0x4d9cx4b+_0x4d9cx41);_0x4d9cx15[_0x653f[8]](_0x4d9cx42,_0x4d9cx43);_0x4d9cx15[_0x653f[29]]()};mxCellRenderer[_0x653f[0]][_0x653f[12]][_0x653f[76]]=_0x4d9cx36;mxMarker[_0x653f[78]](_0x653f[77],function(_0x4d9cx32,_0x4d9cx1a,_0x4d9cx4c,_0x4d9cx39,_0x4d9cx4d,_0x4d9cx4e,_0x4d9cx4f,_0x4d9cx50,_0x4d9cx51,_0x4d9cx52){var _0x4d9cx3c=_0x4d9cx4d*(_0x4d9cx4f+_0x4d9cx51+1);var _0x4d9cx3d=_0x4d9cx4e*(_0x4d9cx4f+_0x4d9cx51+1);return function(){_0x4d9cx32[_0x653f[28]]();_0x4d9cx32[_0x653f[7]](_0x4d9cx39[_0x653f[68]]-_0x4d9cx3c/2-_0x4d9cx3d/2,_0x4d9cx39[_0x653f[69]]-_0x4d9cx3d/2+_0x4d9cx3c/2);_0x4d9cx32[_0x653f[8]](_0x4d9cx39[_0x653f[68]]+_0x4d9cx3d/2-3*_0x4d9cx3c/2,_0x4d9cx39[_0x653f[69]]-3*_0x4d9cx3d/2-_0x4d9cx3c/2);_0x4d9cx32[_0x653f[29]]()}});var _0x4d9cx53=-99;if( typeof (mxVertexHandler)!=_0x653f[79]){function _0x4d9cx54(_0x4d9cx33){mxVertexHandler[_0x653f[24]](this,_0x4d9cx33)}mxUtils[_0x653f[25]](_0x4d9cx54,mxVertexHandler);_0x4d9cx54[_0x653f[0]][_0x653f[80]]=false;_0x4d9cx54[_0x653f[0]][_0x653f[81]]=function(){this[_0x653f[82]]=mxUtils[_0x653f[5]](this[_0x653f[83]][_0x653f[4]],mxConstants.STYLE_HORIZONTAL,true);var _0x4d9cx55=this[_0x653f[83]][_0x653f[85]][_0x653f[84]];if(this[_0x653f[86]]!=null){var _0x4d9cx34= new mxRectangle(0,0,this[_0x653f[86]][_0x653f[70]],this[_0x653f[86]][_0x653f[71]]);this[_0x653f[87]]= new mxImageShape(_0x4d9cx34,this[_0x653f[86]][_0x653f[88]])}else {var _0x4d9cx4f=10;var _0x4d9cx34= new mxRectangle(0,0,_0x4d9cx4f,_0x4d9cx4f);this[_0x653f[87]]= new mxRhombus(_0x4d9cx34,mxConstants.HANDLE_FILLCOLOR,mxConstants.HANDLE_STROKECOLOR)};this[_0x653f[87]][_0x653f[89]]=(_0x4d9cx55[_0x653f[89]]!=mxConstants[_0x653f[90]])?mxConstants[_0x653f[91]]:mxConstants[_0x653f[90]];this[_0x653f[87]][_0x653f[81]](_0x4d9cx55[_0x653f[93]]()[_0x653f[92]]());this[_0x653f[87]][_0x653f[95]][_0x653f[4]][_0x653f[94]]=this[_0x653f[96]]();mxEvent[_0x653f[97]](this[_0x653f[87]][_0x653f[95]],_0x4d9cx55,this[_0x653f[83]]);mxVertexHandler[_0x653f[0]][_0x653f[81]][_0x653f[30]](this,arguments)};_0x4d9cx54[_0x653f[0]][_0x653f[96]]=function(){return _0x653f[98]};_0x4d9cx54[_0x653f[0]][_0x653f[99]]=function(){mxVertexHandler[_0x653f[0]][_0x653f[99]][_0x653f[30]](this,arguments);var _0x4d9cx4f=this[_0x653f[87]][_0x653f[100]][_0x653f[70]];this[_0x653f[87]][_0x653f[100]]=this[_0x653f[101]](_0x4d9cx4f);this[_0x653f[87]][_0x653f[99]]()};_0x4d9cx54[_0x653f[0]][_0x653f[102]]=function(){mxVertexHandler[_0x653f[0]][_0x653f[102]][_0x653f[30]](this,arguments);if(this[_0x653f[87]]!=null){this[_0x653f[87]][_0x653f[102]]();this[_0x653f[87]]=null}};_0x4d9cx54[_0x653f[0]][_0x653f[103]]=function(_0x4d9cx56){if(_0x4d9cx56[_0x653f[104]](this[_0x653f[87]])){return _0x4d9cx53};return mxVertexHandler[_0x653f[0]][_0x653f[103]][_0x653f[30]](this,arguments)};_0x4d9cx54[_0x653f[0]][_0x653f[105]]=function(_0x4d9cx57,_0x4d9cx56){if(!_0x4d9cx56[_0x653f[106]]()&&this[_0x653f[107]]==_0x4d9cx53){var _0x4d9cx58= new mxPoint(_0x4d9cx56[_0x653f[108]](),_0x4d9cx56[_0x653f[109]]());this[_0x653f[110]](_0x4d9cx58);var _0x4d9cx59=this[_0x653f[84]][_0x653f[112]](_0x4d9cx56[_0x653f[111]]());var _0x4d9cx5a=this[_0x653f[84]][_0x653f[93]]()[_0x653f[113]];if(_0x4d9cx59&&this[_0x653f[80]]){_0x4d9cx58[_0x653f[68]]=this[_0x653f[84]][_0x653f[114]](_0x4d9cx58[_0x653f[68]]/_0x4d9cx5a)*_0x4d9cx5a;_0x4d9cx58[_0x653f[69]]=this[_0x653f[84]][_0x653f[114]](_0x4d9cx58[_0x653f[69]]/_0x4d9cx5a)*_0x4d9cx5a};this[_0x653f[115]](_0x4d9cx58);this[_0x653f[116]](this[_0x653f[87]],_0x4d9cx58[_0x653f[68]],_0x4d9cx58[_0x653f[69]]);this[_0x653f[83]][_0x653f[85]][_0x653f[84]][_0x653f[117]][_0x653f[99]](this[_0x653f[83]],true);_0x4d9cx56[_0x653f[118]]()}else {mxVertexHandler[_0x653f[0]][_0x653f[105]][_0x653f[30]](this,arguments)}};_0x4d9cx54[_0x653f[0]][_0x653f[119]]=function(_0x4d9cx57,_0x4d9cx56){if(!_0x4d9cx56[_0x653f[106]]()&&this[_0x653f[107]]==_0x4d9cx53){this[_0x653f[120]]();this[_0x653f[121]]();_0x4d9cx56[_0x653f[118]]()}else {mxVertexHandler[_0x653f[0]][_0x653f[119]][_0x653f[30]](this,arguments)}};_0x4d9cx54[_0x653f[0]][_0x653f[101]]=function(_0x4d9cx4f){var _0x4d9cx5b=this[_0x653f[83]][_0x653f[123]][_0x653f[122]]();var _0x4d9cx5c=mxUtils[_0x653f[124]](_0x4d9cx5b);var _0x4d9cx5d=Math[_0x653f[125]](_0x4d9cx5c);var _0x4d9cx5e=Math[_0x653f[126]](_0x4d9cx5c);var _0x4d9cx34= new mxRectangle(this[_0x653f[83]][_0x653f[68]],this[_0x653f[83]][_0x653f[69]],this[_0x653f[83]][_0x653f[70]],this[_0x653f[83]][_0x653f[71]]);if(this[_0x653f[83]][_0x653f[123]][_0x653f[127]]()){var _0x4d9cx5f=(_0x4d9cx34[_0x653f[70]]-_0x4d9cx34[_0x653f[71]])/2;_0x4d9cx34[_0x653f[68]]+=_0x4d9cx5f;_0x4d9cx34[_0x653f[69]]-=_0x4d9cx5f;var _0x4d9cx23=_0x4d9cx34[_0x653f[70]];_0x4d9cx34[_0x653f[70]]=_0x4d9cx34[_0x653f[71]];_0x4d9cx34[_0x653f[71]]=_0x4d9cx23};var _0x4d9cx60=this[_0x653f[128]](_0x4d9cx34);if(this[_0x653f[83]][_0x653f[123]][_0x653f[129]]){_0x4d9cx60[_0x653f[68]]=2*_0x4d9cx34[_0x653f[68]]+_0x4d9cx34[_0x653f[70]]-_0x4d9cx60[_0x653f[68]]};if(this[_0x653f[83]][_0x653f[123]][_0x653f[130]]){_0x4d9cx60[_0x653f[69]]=2*_0x4d9cx34[_0x653f[69]]+_0x4d9cx34[_0x653f[71]]-_0x4d9cx60[_0x653f[69]]};_0x4d9cx60=mxUtils[_0x653f[133]](_0x4d9cx60,_0x4d9cx5d,_0x4d9cx5e, new mxPoint(this[_0x653f[83]][_0x653f[131]](),this[_0x653f[83]][_0x653f[132]]()));return  new mxRectangle(_0x4d9cx60[_0x653f[68]]-_0x4d9cx4f/2,_0x4d9cx60[_0x653f[69]]-_0x4d9cx4f/2,_0x4d9cx4f,_0x4d9cx4f)};_0x4d9cx54[_0x653f[0]][_0x653f[128]]=function(_0x4d9cx34){return null};_0x4d9cx54[_0x653f[0]][_0x653f[115]]=function(_0x4d9cx58){};_0x4d9cx54[_0x653f[0]][_0x653f[110]]=function(_0x4d9cx58){_0x4d9cx58[_0x653f[68]]=Math[_0x653f[34]](this[_0x653f[83]][_0x653f[68]],Math[_0x653f[6]](this[_0x653f[83]][_0x653f[68]]+this[_0x653f[83]][_0x653f[70]],_0x4d9cx58[_0x653f[68]]));_0x4d9cx58[_0x653f[69]]=Math[_0x653f[34]](this[_0x653f[83]][_0x653f[69]],Math[_0x653f[6]](this[_0x653f[83]][_0x653f[69]]+this[_0x653f[83]][_0x653f[71]],_0x4d9cx58[_0x653f[69]]))};_0x4d9cx54[_0x653f[0]][_0x653f[120]]=function(){};function _0x4d9cx61(_0x4d9cx33){_0x4d9cx54[_0x653f[24]](this,_0x4d9cx33)}mxUtils[_0x653f[25]](_0x4d9cx61,_0x4d9cx54);_0x4d9cx61[_0x653f[0]][_0x653f[128]]=function(_0x4d9cx34){var _0x4d9cx5a=this[_0x653f[84]][_0x653f[93]]()[_0x653f[113]];var _0x4d9cxb=Math[_0x653f[6]](_0x4d9cx34[_0x653f[70]],mxUtils[_0x653f[5]](this[_0x653f[83]][_0x653f[4]],_0x653f[14],60)*_0x4d9cx5a);var _0x4d9cxc=Math[_0x653f[6]](_0x4d9cx34[_0x653f[71]],mxUtils[_0x653f[5]](this[_0x653f[83]][_0x653f[4]],_0x653f[15],20)*_0x4d9cx5a);var _0x4d9cxd=mxUtils[_0x653f[5]](this[_0x653f[83]][_0x653f[4]],_0x653f[16],_0x653f[17]);var _0x4d9cx3=(_0x4d9cxd==_0x653f[18])?_0x4d9cx34[_0x653f[68]]+_0x4d9cxb:_0x4d9cx34[_0x653f[68]]+_0x4d9cx34[_0x653f[70]]-_0x4d9cxb;return  new mxPoint(_0x4d9cx3,_0x4d9cx34[_0x653f[69]]+_0x4d9cxc)};_0x4d9cx61[_0x653f[0]][_0x653f[115]]=function(_0x4d9cx58){var _0x4d9cx5b=this[_0x653f[83]][_0x653f[123]][_0x653f[122]]();var _0x4d9cx5c=mxUtils[_0x653f[124]](_0x4d9cx5b);var _0x4d9cx5d=Math[_0x653f[125]](-_0x4d9cx5c);var _0x4d9cx5e=Math[_0x653f[126]](-_0x4d9cx5c);var _0x4d9cx34= new mxRectangle(this[_0x653f[83]][_0x653f[68]],this[_0x653f[83]][_0x653f[69]],this[_0x653f[83]][_0x653f[70]],this[_0x653f[83]][_0x653f[71]]);if(this[_0x653f[83]][_0x653f[123]][_0x653f[127]]()){var _0x4d9cx5f=(_0x4d9cx34[_0x653f[70]]-_0x4d9cx34[_0x653f[71]])/2;_0x4d9cx34[_0x653f[68]]+=_0x4d9cx5f;_0x4d9cx34[_0x653f[69]]-=_0x4d9cx5f;var _0x4d9cx23=_0x4d9cx34[_0x653f[70]];_0x4d9cx34[_0x653f[70]]=_0x4d9cx34[_0x653f[71]];_0x4d9cx34[_0x653f[71]]=_0x4d9cx23};var _0x4d9cx60= new mxPoint(_0x4d9cx58[_0x653f[68]],_0x4d9cx58[_0x653f[69]]);_0x4d9cx60=mxUtils[_0x653f[133]](_0x4d9cx60,_0x4d9cx5d,_0x4d9cx5e, new mxPoint(this[_0x653f[83]][_0x653f[131]](),this[_0x653f[83]][_0x653f[132]]()));if(this[_0x653f[83]][_0x653f[123]][_0x653f[129]]){_0x4d9cx60[_0x653f[68]]=2*_0x4d9cx34[_0x653f[68]]+_0x4d9cx34[_0x653f[70]]-_0x4d9cx60[_0x653f[68]]};if(this[_0x653f[83]][_0x653f[123]][_0x653f[130]]){_0x4d9cx60[_0x653f[69]]=2*_0x4d9cx34[_0x653f[69]]+_0x4d9cx34[_0x653f[71]]-_0x4d9cx60[_0x653f[69]]};var _0x4d9cx62=this[_0x653f[134]](_0x4d9cx60,_0x4d9cx34);if(_0x4d9cx62!=null){if(this[_0x653f[83]][_0x653f[123]][_0x653f[129]]){_0x4d9cx62[_0x653f[68]]=2*_0x4d9cx34[_0x653f[68]]+_0x4d9cx34[_0x653f[70]]-_0x4d9cx62[_0x653f[68]]};if(this[_0x653f[83]][_0x653f[123]][_0x653f[130]]){_0x4d9cx62[_0x653f[69]]=2*_0x4d9cx34[_0x653f[69]]+_0x4d9cx34[_0x653f[71]]-_0x4d9cx62[_0x653f[69]]};_0x4d9cx5d=Math[_0x653f[125]](_0x4d9cx5c);_0x4d9cx5e=Math[_0x653f[126]](_0x4d9cx5c);_0x4d9cx62=mxUtils[_0x653f[133]](_0x4d9cx62,_0x4d9cx5d,_0x4d9cx5e, new mxPoint(this[_0x653f[83]][_0x653f[131]](),this[_0x653f[83]][_0x653f[132]]()));_0x4d9cx58[_0x653f[68]]=_0x4d9cx62[_0x653f[68]];_0x4d9cx58[_0x653f[69]]=_0x4d9cx62[_0x653f[69]]}};_0x4d9cx61[_0x653f[0]][_0x653f[134]]=function(_0x4d9cx60,_0x4d9cx34){var _0x4d9cxd=mxUtils[_0x653f[5]](this[_0x653f[83]][_0x653f[4]],_0x653f[16],_0x653f[17]);var _0x4d9cxb=(_0x4d9cxd==_0x653f[18])?_0x4d9cx60[_0x653f[68]]-_0x4d9cx34[_0x653f[68]]:_0x4d9cx34[_0x653f[68]]+_0x4d9cx34[_0x653f[70]]-_0x4d9cx60[_0x653f[68]];var _0x4d9cxc=_0x4d9cx60[_0x653f[69]]-_0x4d9cx34[_0x653f[69]];var _0x4d9cx5a=this[_0x653f[84]][_0x653f[93]]()[_0x653f[113]];this[_0x653f[83]][_0x653f[4]][_0x653f[14]]=Math[_0x653f[135]](Math[_0x653f[34]](1,_0x4d9cxb)/_0x4d9cx5a);this[_0x653f[83]][_0x653f[4]][_0x653f[15]]=Math[_0x653f[135]](Math[_0x653f[34]](1,_0x4d9cxc)/_0x4d9cx5a)};_0x4d9cx61[_0x653f[0]][_0x653f[120]]=function(){var _0x4d9cx63=this[_0x653f[84]][_0x653f[136]]();_0x4d9cx63[_0x653f[137]]();try{this[_0x653f[83]][_0x653f[85]][_0x653f[84]][_0x653f[139]](_0x653f[14],this[_0x653f[83]][_0x653f[4]][_0x653f[14]],[this[_0x653f[83]][_0x653f[138]]]);this[_0x653f[83]][_0x653f[85]][_0x653f[84]][_0x653f[139]](_0x653f[15],this[_0x653f[83]][_0x653f[4]][_0x653f[15]],[this[_0x653f[83]][_0x653f[138]]])}finally{_0x4d9cx63[_0x653f[140]]()}};function _0x4d9cx64(_0x4d9cx33){_0x4d9cx61[_0x653f[24]](this,_0x4d9cx33)}mxUtils[_0x653f[25]](_0x4d9cx64,_0x4d9cx61);_0x4d9cx64[_0x653f[0]][_0x653f[128]]=function(_0x4d9cx34){var _0x4d9cx5a=this[_0x653f[84]][_0x653f[93]]()[_0x653f[113]];var _0x4d9cx65=mxUtils[_0x653f[5]](this[_0x653f[83]][_0x653f[4]],mxConstants.STYLE_STARTSIZE,mxConstants.DEFAULT_STARTSIZE);return  new mxPoint(_0x4d9cx34[_0x653f[68]]+_0x4d9cx34[_0x653f[70]]/2,_0x4d9cx34[_0x653f[69]]+Math[_0x653f[6]](_0x4d9cx34[_0x653f[71]],_0x4d9cx65*_0x4d9cx5a))};_0x4d9cx64[_0x653f[0]][_0x653f[134]]=function(_0x4d9cx58,_0x4d9cx34){_0x4d9cx58[_0x653f[68]]=_0x4d9cx34[_0x653f[68]]+_0x4d9cx34[_0x653f[70]]/2;startSize=_0x4d9cx58[_0x653f[69]]-_0x4d9cx34[_0x653f[69]];var _0x4d9cx5a=this[_0x653f[84]][_0x653f[93]]()[_0x653f[113]];this[_0x653f[83]][_0x653f[4]][_0x653f[141]]=Math[_0x653f[135]](Math[_0x653f[34]](1,startSize)/_0x4d9cx5a);return _0x4d9cx58};_0x4d9cx64[_0x653f[0]][_0x653f[120]]=function(){this[_0x653f[83]][_0x653f[85]][_0x653f[84]][_0x653f[139]](_0x653f[141],this[_0x653f[83]][_0x653f[4]][_0x653f[141]],[this[_0x653f[83]][_0x653f[138]]])};function _0x4d9cx66(_0x4d9cx33){_0x4d9cx61[_0x653f[24]](this,_0x4d9cx33)}mxUtils[_0x653f[25]](_0x4d9cx66,_0x4d9cx61);_0x4d9cx66[_0x653f[0]][_0x653f[142]]=20;_0x4d9cx66[_0x653f[0]][_0x653f[143]]=1;_0x4d9cx66[_0x653f[0]][_0x653f[128]]=function(_0x4d9cx34){var _0x4d9cx5a=this[_0x653f[84]][_0x653f[93]]()[_0x653f[113]];var _0x4d9cx67=Math[_0x653f[6]](_0x4d9cx34[_0x653f[70]],Math[_0x653f[6]](_0x4d9cx34[_0x653f[71]],mxUtils[_0x653f[5]](this[_0x653f[83]][_0x653f[4]],_0x653f[2],this[_0x653f[142]])*_0x4d9cx5a/this[_0x653f[143]]));return  new mxPoint(_0x4d9cx34[_0x653f[68]]+_0x4d9cx67,_0x4d9cx34[_0x653f[69]]+_0x4d9cx67)};_0x4d9cx66[_0x653f[0]][_0x653f[134]]=function(_0x4d9cx60,_0x4d9cx34){var _0x4d9cx4f=Math[_0x653f[34]](0,Math[_0x653f[6]](Math[_0x653f[6]](_0x4d9cx34[_0x653f[70]]/this[_0x653f[143]],_0x4d9cx60[_0x653f[68]]-_0x4d9cx34[_0x653f[68]]),Math[_0x653f[6]](_0x4d9cx34[_0x653f[71]]/this[_0x653f[143]],_0x4d9cx60[_0x653f[69]]-_0x4d9cx34[_0x653f[69]])));var _0x4d9cx5a=this[_0x653f[84]][_0x653f[93]]()[_0x653f[113]];this[_0x653f[83]][_0x653f[4]][_0x653f[2]]=Math[_0x653f[135]](Math[_0x653f[34]](1,_0x4d9cx4f)/_0x4d9cx5a)*this[_0x653f[143]];return  new mxPoint(_0x4d9cx34[_0x653f[68]]+_0x4d9cx4f,_0x4d9cx34[_0x653f[69]]+_0x4d9cx4f)};_0x4d9cx66[_0x653f[0]][_0x653f[120]]=function(){this[_0x653f[83]][_0x653f[85]][_0x653f[84]][_0x653f[139]](_0x653f[2],this[_0x653f[83]][_0x653f[4]][_0x653f[2]],[this[_0x653f[83]][_0x653f[138]]])};function _0x4d9cx68(_0x4d9cx33){_0x4d9cx66[_0x653f[24]](this,_0x4d9cx33)}mxUtils[_0x653f[25]](_0x4d9cx68,_0x4d9cx66);_0x4d9cx68[_0x653f[0]][_0x653f[142]]=30;_0x4d9cx68[_0x653f[0]][_0x653f[143]]=2;function _0x4d9cx69(_0x4d9cx33){_0x4d9cx66[_0x653f[24]](this,_0x4d9cx33)}mxUtils[_0x653f[25]](_0x4d9cx69,_0x4d9cx66);_0x4d9cx69[_0x653f[0]][_0x653f[142]]=30;_0x4d9cx69[_0x653f[0]][_0x653f[143]]=1;_0x4d9cx69[_0x653f[0]][_0x653f[128]]=function(_0x4d9cx34){var _0x4d9cx5a=this[_0x653f[84]][_0x653f[93]]()[_0x653f[113]];var _0x4d9cx67=Math[_0x653f[6]](_0x4d9cx34[_0x653f[70]],Math[_0x653f[6]](_0x4d9cx34[_0x653f[71]],mxUtils[_0x653f[5]](this[_0x653f[83]][_0x653f[4]],_0x653f[2],this[_0x653f[142]])*_0x4d9cx5a/this[_0x653f[143]]));return  new mxPoint(_0x4d9cx34[_0x653f[68]]+_0x4d9cx34[_0x653f[70]]-_0x4d9cx67,_0x4d9cx34[_0x653f[69]]+_0x4d9cx67)};_0x4d9cx69[_0x653f[0]][_0x653f[134]]=function(_0x4d9cx60,_0x4d9cx34){var _0x4d9cx4f=Math[_0x653f[34]](0,Math[_0x653f[6]](Math[_0x653f[6]](_0x4d9cx34[_0x653f[70]]/this[_0x653f[143]],_0x4d9cx60[_0x653f[68]]-_0x4d9cx34[_0x653f[68]]+_0x4d9cx34[_0x653f[70]]),Math[_0x653f[6]](_0x4d9cx34[_0x653f[71]]/this[_0x653f[143]],_0x4d9cx60[_0x653f[69]]-_0x4d9cx34[_0x653f[69]])));var _0x4d9cx5a=this[_0x653f[84]][_0x653f[93]]()[_0x653f[113]];this[_0x653f[83]][_0x653f[4]][_0x653f[2]]=Math[_0x653f[135]](Math[_0x653f[34]](1,_0x4d9cx4f)/_0x4d9cx5a)*this[_0x653f[143]];return  new mxPoint(_0x4d9cx34[_0x653f[68]]+_0x4d9cx34[_0x653f[70]]-_0x4d9cx4f,_0x4d9cx34[_0x653f[69]]+_0x4d9cx4f)};function _0x4d9cx6a(_0x4d9cx33){_0x4d9cx66[_0x653f[24]](this,_0x4d9cx33)}mxUtils[_0x653f[25]](_0x4d9cx6a,_0x4d9cx66);_0x4d9cx6a[_0x653f[0]][_0x653f[142]]=0.2;_0x4d9cx6a[_0x653f[0]][_0x653f[143]]=1;_0x4d9cx6a[_0x653f[0]][_0x653f[128]]=function(_0x4d9cx34){var _0x4d9cx67=mxUtils[_0x653f[5]](this[_0x653f[83]][_0x653f[4]],_0x653f[2],this[_0x653f[142]]);return  new mxPoint(_0x4d9cx34[_0x653f[68]]+_0x4d9cx34[_0x653f[70]]*_0x4d9cx67,_0x4d9cx34[_0x653f[69]]+_0x4d9cx34[_0x653f[71]]/2)};_0x4d9cx6a[_0x653f[0]][_0x653f[134]]=function(_0x4d9cx60,_0x4d9cx34){var _0x4d9cx4f=Math[_0x653f[6]](1,(_0x4d9cx60[_0x653f[68]]-_0x4d9cx34[_0x653f[68]])/_0x4d9cx34[_0x653f[70]]);this[_0x653f[83]][_0x653f[4]][_0x653f[2]]=_0x4d9cx4f;return  new mxPoint(_0x4d9cx34[_0x653f[68]]+_0x4d9cx4f*_0x4d9cx34[_0x653f[70]],_0x4d9cx34[_0x653f[69]]+_0x4d9cx34[_0x653f[71]]/2)};function _0x4d9cx6b(_0x4d9cx33){_0x4d9cx66[_0x653f[24]](this,_0x4d9cx33)}mxUtils[_0x653f[25]](_0x4d9cx6b,_0x4d9cx66);_0x4d9cx6b[_0x653f[0]][_0x653f[142]]=0.4;_0x4d9cx6b[_0x653f[0]][_0x653f[143]]=1;_0x4d9cx6b[_0x653f[0]][_0x653f[128]]=function(_0x4d9cx34){var _0x4d9cx67=mxUtils[_0x653f[5]](this[_0x653f[83]][_0x653f[4]],_0x653f[2],this[_0x653f[142]]);return  new mxPoint(_0x4d9cx34[_0x653f[68]]+_0x4d9cx34[_0x653f[70]]/2,_0x4d9cx34[_0x653f[69]]+_0x4d9cx67*_0x4d9cx34[_0x653f[71]]/2)};_0x4d9cx6b[_0x653f[0]][_0x653f[134]]=function(_0x4d9cx60,_0x4d9cx34){var _0x4d9cx4f=Math[_0x653f[34]](0,Math[_0x653f[6]](1,((_0x4d9cx60[_0x653f[69]]-_0x4d9cx34[_0x653f[69]])/_0x4d9cx34[_0x653f[71]])*2));this[_0x653f[83]][_0x653f[4]][_0x653f[2]]=_0x4d9cx4f;return  new mxPoint(_0x4d9cx34[_0x653f[68]]+_0x4d9cx34[_0x653f[70]]/2,_0x4d9cx34[_0x653f[69]]+_0x4d9cx4f*_0x4d9cx34[_0x653f[71]]/2)};var _0x4d9cx6c={"\x73\x77\x69\x6D\x6C\x61\x6E\x65":_0x4d9cx64,"\x66\x6F\x6C\x64\x65\x72":_0x4d9cx61,"\x63\x75\x62\x65":_0x4d9cx66,"\x63\x61\x72\x64":_0x4d9cx68,"\x6E\x6F\x74\x65":_0x4d9cx69,"\x73\x74\x65\x70":_0x4d9cx6a,"\x74\x61\x70\x65":_0x4d9cx6b};var _0x4d9cx6d=mxGraph[_0x653f[0]][_0x653f[144]];mxGraph[_0x653f[0]][_0x653f[144]]=function(_0x4d9cx33){if(_0x4d9cx33!=null){var _0x4d9cx6e=_0x4d9cx6c[_0x4d9cx33[_0x653f[4]][_0x653f[123]]];if(_0x4d9cx6e!=null){return  new _0x4d9cx6e(_0x4d9cx33)}};return _0x4d9cx6d[_0x653f[30]](this,arguments)}};mxGraph[_0x653f[0]][_0x653f[145]]=function(_0x4d9cx6f,_0x4d9cx50){if(_0x4d9cx6f!=null&&_0x4d9cx6f[_0x653f[123]]!=null){if(_0x4d9cx6f[_0x653f[123]][_0x653f[146]]!=null){if(_0x4d9cx6f[_0x653f[123]][_0x653f[146]]!=null){return _0x4d9cx6f[_0x653f[123]][_0x653f[146]][_0x653f[147]]}}else {if(_0x4d9cx6f[_0x653f[123]][_0x653f[147]]!=null){return _0x4d9cx6f[_0x653f[123]][_0x653f[147]]}}};return null};mxRectangleShape[_0x653f[0]][_0x653f[147]]=[ new mxConnectionConstraint( new mxPoint(0.25,0),true), new mxConnectionConstraint( new mxPoint(0.5,0),true), new mxConnectionConstraint( new mxPoint(0.75,0),true), new mxConnectionConstraint( new mxPoint(0,0.25),true), new mxConnectionConstraint( new mxPoint(0,0.5),true), new mxConnectionConstraint( new mxPoint(0,0.75),true), new mxConnectionConstraint( new mxPoint(1,0.25),true), new mxConnectionConstraint( new mxPoint(1,0.5),true), new mxConnectionConstraint( new mxPoint(1,0.75),true), new mxConnectionConstraint( new mxPoint(0.25,1),true), new mxConnectionConstraint( new mxPoint(0.5,1),true), new mxConnectionConstraint( new mxPoint(0.75,1),true)];mxLabel[_0x653f[0]][_0x653f[147]]=mxRectangleShape[_0x653f[0]][_0x653f[147]];mxImageShape[_0x653f[0]][_0x653f[147]]=mxRectangleShape[_0x653f[0]][_0x653f[147]];mxSwimlane[_0x653f[0]][_0x653f[147]]=mxRectangleShape[_0x653f[0]][_0x653f[147]];_0x4d9cx14[_0x653f[0]][_0x653f[147]]=mxRectangleShape[_0x653f[0]][_0x653f[147]];_0x4d9cx9[_0x653f[0]][_0x653f[147]]=mxRectangleShape[_0x653f[0]][_0x653f[147]];_0x4d9cx10[_0x653f[0]][_0x653f[147]]=mxRectangleShape[_0x653f[0]][_0x653f[147]];_0x4d9cx1[_0x653f[0]][_0x653f[147]]=mxRectangleShape[_0x653f[0]][_0x653f[147]];_0x4d9cxa[_0x653f[0]][_0x653f[147]]=mxRectangleShape[_0x653f[0]][_0x653f[147]];mxCylinder[_0x653f[0]][_0x653f[147]]=[ new mxConnectionConstraint( new mxPoint(0.15,0.05),false), new mxConnectionConstraint( new mxPoint(0.5,0),true), new mxConnectionConstraint( new mxPoint(0.85,0.05),false), new mxConnectionConstraint( new mxPoint(0,0.3),true), new mxConnectionConstraint( new mxPoint(0,0.5),true), new mxConnectionConstraint( new mxPoint(0,0.7),true), new mxConnectionConstraint( new mxPoint(1,0.3),true), new mxConnectionConstraint( new mxPoint(1,0.5),true), new mxConnectionConstraint( new mxPoint(1,0.7),true), new mxConnectionConstraint( new mxPoint(0.15,0.95),false), new mxConnectionConstraint( new mxPoint(0.5,1),true), new mxConnectionConstraint( new mxPoint(0.85,0.95),false)];_0x4d9cx25[_0x653f[0]][_0x653f[147]]=[ new mxConnectionConstraint( new mxPoint(0.25,0.1),false), new mxConnectionConstraint( new mxPoint(0.5,0),false), new mxConnectionConstraint( new mxPoint(0.75,0.1),false), new mxConnectionConstraint( new mxPoint(0,1/3),false), new mxConnectionConstraint( new mxPoint(0,1),false), new mxConnectionConstraint( new mxPoint(1,1/3),false), new mxConnectionConstraint( new mxPoint(1,1),false), new mxConnectionConstraint( new mxPoint(0.5,0.5),false)];_0x4d9cx28[_0x653f[0]][_0x653f[147]]=[ new mxConnectionConstraint( new mxPoint(0.25,0),true), new mxConnectionConstraint( new mxPoint(0.5,0),true), new mxConnectionConstraint( new mxPoint(0.75,0),true), new mxConnectionConstraint( new mxPoint(0,0.3),true), new mxConnectionConstraint( new mxPoint(0,0.7),true), new mxConnectionConstraint( new mxPoint(1,0.25),true), new mxConnectionConstraint( new mxPoint(1,0.5),true), new mxConnectionConstraint( new mxPoint(1,0.75),true), new mxConnectionConstraint( new mxPoint(0.25,1),true), new mxConnectionConstraint( new mxPoint(0.5,1),true), new mxConnectionConstraint( new mxPoint(0.75,1),true)];mxActor[_0x653f[0]][_0x653f[147]]=[ new mxConnectionConstraint( new mxPoint(0.5,0),true), new mxConnectionConstraint( new mxPoint(0.25,0.2),false), new mxConnectionConstraint( new mxPoint(0.1,0.5),false), new mxConnectionConstraint( new mxPoint(0,0.75),true), new mxConnectionConstraint( new mxPoint(0.75,0.25),false), new mxConnectionConstraint( new mxPoint(0.9,0.5),false), new mxConnectionConstraint( new mxPoint(1,0.75),true), new mxConnectionConstraint( new mxPoint(0.25,1),true), new mxConnectionConstraint( new mxPoint(0.5,1),true), new mxConnectionConstraint( new mxPoint(0.75,1),true)];_0x4d9cx11[_0x653f[0]][_0x653f[147]]=[ new mxConnectionConstraint( new mxPoint(0,0.35),false), new mxConnectionConstraint( new mxPoint(0,0.5),false), new mxConnectionConstraint( new mxPoint(0,0.65),false), new mxConnectionConstraint( new mxPoint(1,0.35),false), new mxConnectionConstraint( new mxPoint(1,0.5),false), new mxConnectionConstraint( new mxPoint(1,0.65),false), new mxConnectionConstraint( new mxPoint(0.25,1),false), new mxConnectionConstraint( new mxPoint(0.75,0),false)];_0x4d9cx13[_0x653f[0]][_0x653f[147]]=[ new mxConnectionConstraint( new mxPoint(0.25,0),true), new mxConnectionConstraint( new mxPoint(0.5,0),true), new mxConnectionConstraint( new mxPoint(0.75,0),true), new mxConnectionConstraint( new mxPoint(0.25,1),true), new mxConnectionConstraint( new mxPoint(0.5,1),true), new mxConnectionConstraint( new mxPoint(0.75,1),true), new mxConnectionConstraint( new mxPoint(0.1,0.25),false), new mxConnectionConstraint( new mxPoint(0.2,0.5),false), new mxConnectionConstraint( new mxPoint(0.1,0.75),false), new mxConnectionConstraint( new mxPoint(0.9,0.25),false), new mxConnectionConstraint( new mxPoint(1,0.5),false), new mxConnectionConstraint( new mxPoint(0.9,0.75),false)];mxLine[_0x653f[0]][_0x653f[147]]=[ new mxConnectionConstraint( new mxPoint(0,0.5),false), new mxConnectionConstraint( new mxPoint(0.25,0.5),false), new mxConnectionConstraint( new mxPoint(0.75,0.5),false), new mxConnectionConstraint( new mxPoint(1,0.5),false)];_0x4d9cx26[_0x653f[0]][_0x653f[147]]=[ new mxConnectionConstraint( new mxPoint(0.5,0),false), new mxConnectionConstraint( new mxPoint(0.5,1),false)];mxEllipse[_0x653f[0]][_0x653f[147]]=[ new mxConnectionConstraint( new mxPoint(0,0),true), new mxConnectionConstraint( new mxPoint(1,0),true), new mxConnectionConstraint( new mxPoint(0,1),true), new mxConnectionConstraint( new mxPoint(1,1),true), new mxConnectionConstraint( new mxPoint(0.5,0),true), new mxConnectionConstraint( new mxPoint(0.5,1),true), new mxConnectionConstraint( new mxPoint(0,0.5),true), new mxConnectionConstraint( new mxPoint(1,0.5))];mxDoubleEllipse[_0x653f[0]][_0x653f[147]]=mxEllipse[_0x653f[0]][_0x653f[147]];mxRhombus[_0x653f[0]][_0x653f[147]]=mxEllipse[_0x653f[0]][_0x653f[147]];mxTriangle[_0x653f[0]][_0x653f[147]]=[ new mxConnectionConstraint( new mxPoint(0,0.25),true), new mxConnectionConstraint( new mxPoint(0,0.5),true), new mxConnectionConstraint( new mxPoint(0,0.75),true), new mxConnectionConstraint( new mxPoint(0.5,0),true), new mxConnectionConstraint( new mxPoint(0.5,1),true), new mxConnectionConstraint( new mxPoint(1,0.5),true)];mxHexagon[_0x653f[0]][_0x653f[147]]=[ new mxConnectionConstraint( new mxPoint(0.375,0),true), new mxConnectionConstraint( new mxPoint(0.5,0),true), new mxConnectionConstraint( new mxPoint(0.625,0),true), new mxConnectionConstraint( new mxPoint(0.125,0.25),false), new mxConnectionConstraint( new mxPoint(0,0.5),true), new mxConnectionConstraint( new mxPoint(0.125,0.75),false), new mxConnectionConstraint( new mxPoint(0.875,0.25),false), new mxConnectionConstraint( new mxPoint(0,0.5),true), new mxConnectionConstraint( new mxPoint(1,0.5),true), new mxConnectionConstraint( new mxPoint(0.875,0.75),false), new mxConnectionConstraint( new mxPoint(0.375,1),true), new mxConnectionConstraint( new mxPoint(0.5,1),true), new mxConnectionConstraint( new mxPoint(0.625,1),true)];mxCloud[_0x653f[0]][_0x653f[147]]=[ new mxConnectionConstraint( new mxPoint(0.25,0.25),false), new mxConnectionConstraint( new mxPoint(0.4,0.1),false), new mxConnectionConstraint( new mxPoint(0.16,0.55),false), new mxConnectionConstraint( new mxPoint(0.07,0.4),false), new mxConnectionConstraint( new mxPoint(0.31,0.8),false), new mxConnectionConstraint( new mxPoint(0.13,0.77),false), new mxConnectionConstraint( new mxPoint(0.8,0.8),false), new mxConnectionConstraint( new mxPoint(0.55,0.95),false), new mxConnectionConstraint( new mxPoint(0.875,0.5),false), new mxConnectionConstraint( new mxPoint(0.96,0.7),false), new mxConnectionConstraint( new mxPoint(0.625,0.2),false), new mxConnectionConstraint( new mxPoint(0.88,0.25),false)];mxArrow[_0x653f[0]][_0x653f[147]]=null})()
\ No newline at end of file
+/**
+ * $Id: Shapes.js,v 1.13 2013-02-02 06:44:30 gaudenz Exp $
+ * Copyright (c) 2006-2012, JGraph Ltd
+ */
+
+/**
+ * Registers shapes.
+ */
+(function()
+{
+       // Cube Shape, supports size style
+       function CubeShape() { };
+       CubeShape.prototype = new mxCylinder();
+       CubeShape.prototype.constructor = CubeShape;
+       CubeShape.prototype.size = 20;
+       CubeShape.prototype.redrawPath = function(path, x, y, w, h, isForeground)
+       {
+               var s = Math.min(w, Math.min(h, mxUtils.getValue(this.style, 'size', this.size)));
+
+               if (isForeground)
+               {
+                       path.moveTo(s, h);
+                       path.lineTo(s, s);
+                       path.lineTo(0, 0);
+                       path.moveTo(s, s);
+                       path.lineTo(w, s);
+                       path.end();
+               }
+               else
+               {
+                       path.moveTo(0, 0);
+                       path.lineTo(w - s, 0);
+                       path.lineTo(w, s);
+                       path.lineTo(w, h);
+                       path.lineTo(s, h);
+                       path.lineTo(0, h - s);
+                       path.lineTo(0, 0);
+                       path.close();
+                       path.end();
+               }
+       };
+
+       mxCellRenderer.prototype.defaultShapes['cube'] = CubeShape;
+
+       // Note Shape, supports size style
+       function NoteShape() { };
+       NoteShape.prototype = new mxCylinder();
+       NoteShape.prototype.constructor = NoteShape;
+       NoteShape.prototype.size = 30;
+       NoteShape.prototype.redrawPath = function(path, x, y, w, h, isForeground)
+       {
+               var s = Math.min(w, Math.min(h, mxUtils.getValue(this.style, 'size', this.size)));
+
+               if (isForeground)
+               {
+                       path.moveTo(w - s, 0);
+                       path.lineTo(w - s, s);
+                       path.lineTo(w, s);
+                       path.end();
+               }
+               else
+               {
+                       path.moveTo(0, 0);
+                       path.lineTo(w - s, 0);
+                       path.lineTo(w, s);
+                       path.lineTo(w, h);
+                       path.lineTo(0, h);
+                       path.lineTo(0, 0);
+                       path.close();
+                       path.end();
+               }
+       };
+
+       mxCellRenderer.prototype.defaultShapes['note'] = NoteShape;
+
+       // Folder Shape, supports tabWidth, tabHeight styles
+       function FolderShape() { };
+       FolderShape.prototype = new mxCylinder();
+       FolderShape.prototype.constructor = FolderShape;
+       FolderShape.prototype.tabWidth = 60;
+       FolderShape.prototype.tabHeight = 20;
+       FolderShape.prototype.tabPosition = 'right';
+       FolderShape.prototype.redrawPath = function(path, x, y, w, h, isForeground)
+       {
+               var tw = mxUtils.getValue(this.style, 'tabWidth', this.tabWidth);
+               var th = mxUtils.getValue(this.style, 'tabHeight', this.tabHeight);
+               var tp = mxUtils.getValue(this.style, 'tabPosition', this.tabPosition);
+               var dx = Math.min(w, tw);
+               var dy = Math.min(h, th);
+
+               if (isForeground)
+               {
+                       if (tp == 'left')
+                       {
+                               path.moveTo(0, dy);
+                               path.lineTo(dx, dy);
+                       }
+                       // Right is default
+                       else
+                       {
+                               path.moveTo(w - dx, dy);
+                               path.lineTo(w, dy);
+                       }
+                       
+                       path.end();
+               }
+               else
+               {
+                       if (tp == 'left')
+                       {
+                               path.moveTo(0, 0);
+                               path.lineTo(dx, 0);
+                               path.lineTo(dx, dy);
+                               path.lineTo(w, dy);
+                       }
+                       // Right is default
+                       else
+                       {
+                               path.moveTo(0, dy);
+                               path.lineTo(w - dx, dy);
+                               path.lineTo(w - dx, 0);
+                               path.lineTo(w, 0);
+                       }
+                       
+                       path.lineTo(w, h);
+                       path.lineTo(0, h);
+                       path.lineTo(0, dy);
+                       path.close();
+                       path.end();
+               }
+       };
+
+       mxCellRenderer.prototype.defaultShapes['folder'] = FolderShape;
+
+       // Card Shape, supports size style
+       function CardShape() { };
+       CardShape.prototype = new mxCylinder();
+       CardShape.prototype.constructor = CardShape;
+       CardShape.prototype.size = 30;
+       CardShape.prototype.redrawPath = function(path, x, y, w, h, isForeground)
+       {
+               var s = Math.min(w, Math.min(h, mxUtils.getValue(this.style, 'size', this.size)));
+
+               if (!isForeground)
+               {
+                       path.moveTo(s, 0);
+                       path.lineTo(w, 0);
+                       path.lineTo(w, h);
+                       path.lineTo(0, h);
+                       path.lineTo(0, s);
+                       path.lineTo(s, 0);
+                       path.close();
+                       path.end();
+               }
+       };
+
+       mxCellRenderer.prototype.defaultShapes['card'] = CardShape;
+
+       // Tape Shape, supports size style
+       function TapeShape() { };
+       TapeShape.prototype = new mxCylinder();
+       TapeShape.prototype.constructor = TapeShape;
+       TapeShape.prototype.size = 0.4;
+       TapeShape.prototype.redrawPath = function(path, x, y, w, h, isForeground)
+       {
+               var s = mxUtils.getValue(this.style, 'size', this.size);
+               var dy = h * s;
+               var fy = 1.4;
+
+               if (!isForeground)
+               {
+                       path.moveTo(0, dy / 2);
+                       path.quadTo(w / 4, dy * fy, w / 2, dy / 2);
+                       path.quadTo(w * 3 / 4, dy * (1 - fy), w, dy / 2);
+                       path.lineTo(w, h - dy / 2);
+                       path.quadTo(w * 3 / 4, h - dy * fy, w / 2, h - dy / 2);
+                       path.quadTo(w / 4, h - dy * (1 - fy), 0, h - dy / 2);
+                       path.lineTo(0, dy / 2);
+                       path.close();
+                       path.end();
+               }
+       };
+
+       mxCellRenderer.prototype.defaultShapes['tape'] = TapeShape;
+
+       // Tape Shape, supports size style
+       function StepShape() { };
+       StepShape.prototype = new mxCylinder();
+       StepShape.prototype.constructor = StepShape;
+       StepShape.prototype.size = 0.2;
+       StepShape.prototype.redrawPath = function(path, x, y, w, h, isForeground)
+       {
+               var s =  w * mxUtils.getValue(this.style, 'size', this.size);
+
+               if (!isForeground)
+               {
+                       path.moveTo(0, 0);
+                       path.lineTo(w - s, 0);
+                       path.lineTo(w, h / 2);
+                       path.lineTo(w - s, h);
+                       path.lineTo(0, h);
+                       path.lineTo(s, h / 2);
+                       path.close();
+                       path.end();
+               }
+       };
+
+       mxCellRenderer.prototype.defaultShapes['step'] = StepShape;
+
+       // Plus Shape
+       function PlusShape()
+       {
+               mxRectangleShape.call(this);
+       };
+       mxUtils.extend(PlusShape, mxRectangleShape);
+       PlusShape.prototype.isHtmlAllowed = function()
+       {
+               return false;
+       };
+       PlusShape.prototype.paintForeground = function(c, x, y, w, h)
+       {
+               var border = Math.min(w / 5, h / 5) + 1;
+               
+               c.begin();
+               c.moveTo(x + w / 2, y + border);
+               c.lineTo(x + w / 2, y + h - border);
+               c.moveTo(x + border, y + h / 2);
+               c.lineTo(x + w - border, y + h / 2);
+               c.end();
+               c.stroke();
+               mxRectangleShape.prototype.paintForeground.apply(this, arguments);
+       };
+
+       mxCellRenderer.prototype.defaultShapes['plus'] = PlusShape;
+
+       // CompositeShape
+       function ExtendedShape()
+       {
+               mxRectangleShape.call(this);
+       };
+       mxUtils.extend(ExtendedShape, mxRectangleShape);
+       ExtendedShape.prototype.isHtmlAllowed = function()
+       {
+               return false;
+       };
+       ExtendedShape.prototype.paintForeground = function(c, x, y, w, h)
+       {
+               if (this.style != null)
+               {
+                       if (this.style['double'] == 1)
+                       {
+                               var inset = Math.max(2, this.strokewidth + 1);
+       
+                               mxRectangleShape.prototype.paintBackground.call(this, c, x + inset, y + inset, w - 2 * inset, h - 2 * inset);
+                               mxRectangleShape.prototype.paintForeground.apply(this, arguments);
+                               
+                               x += inset;
+                               y += inset;
+                               w -= 2 * inset;
+                               h -= 2 * inset;
+                       }
+                       
+                       c.setDashed(false);
+                       
+                       // Draws the symbols defined in the style. The symbols are
+                       // numbered from 1...n. Possible postfixes are align,
+                       // verticalAlign, spacing, arcSpacing, width, height
+                       var counter = 0;
+                       var shape = null;
+                       
+                       do
+                       {
+                               shape = mxCellRenderer.prototype.defaultShapes[this.style['symbol' + counter]];
+                               
+                               if (shape != null)
+                               {
+                                       var align = this.style['symbol' + counter + 'Align'];
+                                       var valign = this.style['symbol' + counter + 'VerticalAlign'];
+                                       var width = this.style['symbol' + counter + 'Width'];
+                                       var height = this.style['symbol' + counter + 'Height'];
+                                       var spacing = this.style['symbol' + counter + 'Spacing'] || 0;
+                                       var arcspacing = this.style['symbol' + counter + 'ArcSpacing'];
+                                       
+                                       if (arcspacing != null)
+                                       {
+                                               spacing += this.getArcSize(w + this.strokewidth, h + this.strokewidth) * arcspacing;
+                                       }
+                                       
+                                       var x2 = x;
+                                       var y2 = y;
+                                       
+                                       if (align == mxConstants.ALIGN_CENTER)
+                                       {
+                                               x2 += (w - width) / 2;
+                                       }
+                                       else if (align == mxConstants.ALIGN_RIGHT)
+                                       {
+                                               x2 += w - width - spacing;
+                                       }
+                                       else
+                                       {
+                                               x2 += spacing;
+                                       }
+                                       
+                                       if (valign == mxConstants.ALIGN_MIDDLE)
+                                       {
+                                               y2 += (h - height) / 2;
+                                       }
+                                       else if (valign == mxConstants.ALIGN_BOTTOM)
+                                       {
+                                               y2 += h - height - spacing;
+                                       }
+                                       else
+                                       {
+                                               y2 += spacing;
+                                       }
+                                       
+                                       c.save();
+                                       
+                                       // Small hack to pass style along into subshape
+                                       var tmp = new shape();
+                                       // TODO: Clone style and override settings (eg. strokewidth)
+                                       tmp.style = this.style;
+                                       shape.prototype.paintVertexShape.call(tmp, c, x2, y2, width, height);
+                                       c.restore();
+                               }
+                               
+                               counter++;
+                       }
+                       while (shape != null);
+               }
+       };
+
+       mxCellRenderer.prototype.defaultShapes['ext'] = ExtendedShape;
+       
+       // Tape Shape, supports size style
+       function MessageShape() { };
+       MessageShape.prototype = new mxCylinder();
+       MessageShape.prototype.constructor = MessageShape;
+       MessageShape.prototype.redrawPath = function(path, x, y, w, h, isForeground)
+       {
+               if (isForeground)
+               {
+                       path.moveTo(0, 0);
+                       path.lineTo(w / 2, h / 2);
+                       path.lineTo(w, 0);
+                       path.end();
+               }
+               else
+               {
+                       path.moveTo(0, 0);
+                       path.lineTo(w, 0);
+                       path.lineTo(w, h);
+                       path.lineTo(0, h);
+                       path.close();
+               }
+       };
+
+       mxCellRenderer.prototype.defaultShapes['message'] = MessageShape;
+       
+       // New Actor Shape
+       function UmlActorShape() { };
+       UmlActorShape.prototype = new mxCylinder();
+       UmlActorShape.prototype.constructor = UmlActorShape;
+       UmlActorShape.prototype.addPipe = true;
+       UmlActorShape.prototype.redrawPath = function(path, x, y, w, h, isForeground)
+       {
+               var width = w / 3;
+               var height = h / 4;
+               
+               if (!isForeground)
+               {
+                       path.moveTo(w / 2, height);
+                       path.curveTo(w / 2 - width, height, w / 2 - width, 0, w / 2, 0);
+                       path.curveTo(w / 2 + width, 0, w / 2 + width, height, w / 2, height);
+                       path.close();
+
+                       path.moveTo(w / 2, height);
+                       path.lineTo(w / 2, 2 * h / 3);
+                       
+                       // Arms
+                       path.moveTo(w / 2, h / 3);
+                       path.lineTo(0, h / 3);
+                       path.moveTo(w / 2, h / 3);
+                       path.lineTo(w, h / 3);
+                       
+                       // Legs
+                       path.moveTo(w / 2, 2 * h / 3);
+                       path.lineTo(0, h);
+                       path.moveTo(w / 2, 2 * h / 3);
+                       path.lineTo(w, h);
+                       path.end();
+               }
+       };
+
+       // Replaces existing actor shape
+       mxCellRenderer.prototype.defaultShapes['umlActor'] = UmlActorShape;
+
+       // New Actor Shape
+       function LollipopShape() { };
+       LollipopShape.prototype = new mxCylinder();
+       LollipopShape.prototype.constructor = LollipopShape;
+       LollipopShape.prototype.size = 10;
+       LollipopShape.prototype.addPipe = true;
+       LollipopShape.prototype.redrawPath = function(path, x, y, w, h, isForeground)
+       {
+               var ss = mxUtils.getValue(this.style, 'size', this.size);
+               var width = ss * 2 / 3;
+               var height = ss;
+               
+               if (!isForeground)
+               {
+                       path.moveTo(w / 2, height);
+                       path.curveTo(w / 2 - width, height, w / 2 - width, 0, w / 2, 0);
+                       path.curveTo(w / 2 + width, 0, w / 2 + width, height, w / 2, height);
+                       path.close();
+
+                       path.moveTo(w / 2, height);
+                       path.lineTo(w / 2, h);
+                       path.end();
+               }
+       };
+
+       // Replaces existing actor shape
+       mxCellRenderer.prototype.defaultShapes['lollipop'] = LollipopShape;
+       
+       // Folder Shape, supports tabWidth, tabHeight styles
+       function ComponentShape() { };
+       ComponentShape.prototype = new mxCylinder();
+       ComponentShape.prototype.constructor = ComponentShape;
+       ComponentShape.prototype.jettyWidth = 32;
+       ComponentShape.prototype.jettyHeight = 12;
+       ComponentShape.prototype.redrawPath = function(path, x, y, w, h, isForeground)
+       {
+               var dx = mxUtils.getValue(this.style, 'jettyWidth', this.jettyWidth);
+               var dy = mxUtils.getValue(this.style, 'jettyHeight', this.jettyHeight);
+               var x0 = dx / 2;
+               var x1 = x0 + dx / 2;
+               var y0 = 0.3 * h - dy / 2;
+               var y1 = 0.7 * h - dy / 2;
+
+               if (isForeground)
+               {
+                       path.moveTo(x0, y0);
+                       path.lineTo(x1, y0);
+                       path.lineTo(x1, y0 + dy);
+                       path.lineTo(x0, y0 + dy);
+                       path.moveTo(x0, y1);
+                       path.lineTo(x1, y1);
+                       path.lineTo(x1, y1 + dy);
+                       path.lineTo(x0, y1 + dy);
+                       path.end();
+               }
+               else
+               {
+                       path.moveTo(x0, 0);
+                       path.lineTo(w, 0);
+                       path.lineTo(w, h);
+                       path.lineTo(x0, h);
+                       path.lineTo(x0, y1 + dy);
+                       path.lineTo(0, y1 + dy);
+                       path.lineTo(0, y1);
+                       path.lineTo(x0, y1);
+                       path.lineTo(x0, y0 + dy);
+                       path.lineTo(0, y0 + dy);
+                       path.lineTo(0, y0);
+                       path.lineTo(x0, y0);
+                       path.close();
+                       path.end();
+               }
+       };
+
+       mxCellRenderer.prototype.defaultShapes['component'] = ComponentShape;
+       
+       // State Shapes derives from double ellipse
+       function StateShape() { };
+       StateShape.prototype = new mxDoubleEllipse();
+       StateShape.prototype.constructor = StateShape;
+       StateShape.prototype.outerStroke = true;
+       StateShape.prototype.paintVertexShape = function(c, x, y, w, h)
+       {
+               var inset = Math.min(4, Math.min(w / 5, h / 5));
+               
+               if (w > 0 && h > 0)
+               {
+                       c.ellipse(x + inset, y + inset, w - 2 * inset, h - 2 * inset);
+                       c.fillAndStroke();
+               }
+               
+               c.setShadow(false);
+
+               if (this.outerStroke)
+               {
+                       c.ellipse(x, y, w, h);
+                       c.stroke();                     
+               }
+       };
+
+       mxCellRenderer.prototype.defaultShapes['endState'] = StateShape;
+
+       function StartStateShape() { };
+       StartStateShape.prototype = new StateShape();
+       StartStateShape.prototype.constructor = StartStateShape;
+       StartStateShape.prototype.outerStroke = false;
+       
+       mxCellRenderer.prototype.defaultShapes['startState'] = StartStateShape;
+
+       // Image export for state shapes
+       var imageExportInitShapes = mxImageExport.prototype.initShapes;
+       mxImageExport.prototype.initShapes = function()
+       {
+               imageExportInitShapes.apply(this, arguments);
+
+               function createStateShape(outerStroke)
+               {
+                       return {
+                               drawShape: function(canvas, state, bounds, background)
+                               {
+                                       var x = bounds.x;
+                                       var y = bounds.y;
+                                       var w = bounds.width;
+                                       var h = bounds.height;
+                                       
+                                       if (background)
+                                       {
+                                               var inset = Math.min(4, Math.min(w / 5, h / 5));
+                                               x += inset;
+                                               y += inset;
+                                               w -= 2 * inset;
+                                               h -= 2 * inset;
+                                               
+                                               if (w > 0 && h > 0)
+                                               {
+                                                       canvas.ellipse(x, y, w, h);
+                                               }
+                                               
+                                               return true;
+                                       }
+                                       else
+                                       {
+                                               canvas.fillAndStroke();
+               
+                                               if (outerStroke)
+                                               {
+                                                       canvas.ellipse(x, y, w, h);
+                                                       canvas.stroke();
+                                               }
+                                       }
+                               }
+                       };
+               };
+               
+               this.shapes['endState'] = createStateShape(true);
+               this.shapes['startState'] = createStateShape(false);
+       };
+
+       // Defines custom edge shape
+       function LinkShape()
+       {
+               mxArrow.call(this);
+       };
+       mxUtils.extend(LinkShape, mxArrow);
+       LinkShape.prototype.paintEdgeShape = function(c, pts)
+       {
+               var width = 10;
+
+               // Base vector (between end points)
+               var p0 = pts[0];
+               var pe = pts[pts.length - 1];
+               
+               var dx = pe.x - p0.x;
+               var dy = pe.y - p0.y;
+               var dist = Math.sqrt(dx * dx + dy * dy);
+               var length = dist;
+               
+               // Computes the norm and the inverse norm
+               var nx = dx / dist;
+               var ny = dy / dist;
+               var basex = length * nx;
+               var basey = length * ny;
+               var floorx = width * ny/3;
+               var floory = -width * nx/3;
+               
+               // Computes points
+               var p0x = p0.x - floorx / 2;
+               var p0y = p0.y - floory / 2;
+               var p1x = p0x + floorx;
+               var p1y = p0y + floory;
+               var p2x = p1x + basex;
+               var p2y = p1y + basey;
+               var p3x = p2x + floorx;
+               var p3y = p2y + floory;
+               // p4 not necessary
+               var p5x = p3x - 3 * floorx;
+               var p5y = p3y - 3 * floory;
+               
+               c.begin();
+               c.moveTo(p1x, p1y);
+               c.lineTo(p2x, p2y);
+               c.moveTo(p5x + floorx, p5y + floory);
+               c.lineTo(p0x, p0y);
+               c.stroke();
+       };
+
+       // Registers the link shape
+       mxCellRenderer.prototype.defaultShapes['link'] = LinkShape;
+
+       // Registers and defines the custom marker
+       mxMarker.addMarker('dash', function(canvas, shape, type, pe, unitX, unitY, size, source, sw, filled)
+       {
+               var nx = unitX * (size + sw + 1);
+               var ny = unitY * (size + sw + 1);
+
+               return function()
+               {
+                       canvas.begin();
+                       canvas.moveTo(pe.x - nx / 2 - ny / 2, pe.y - ny / 2 + nx / 2);
+                       canvas.lineTo(pe.x + ny / 2 - 3 * nx / 2, pe.y - 3 * ny / 2 - nx / 2);
+                       canvas.stroke();
+               };
+       });
+
+       // Implements custom handlers
+       var SPECIAL_HANDLE_INDEX = -99;
+
+       // Handlers are only added if mxVertexHandler is defined (ie. not in embedded graph)
+       if (typeof(mxVertexHandler) != 'undefined')
+       {
+               function mxExtVertexHandler(state)
+               {
+                       mxVertexHandler.call(this, state);
+               };
+       
+               mxUtils.extend(mxExtVertexHandler, mxVertexHandler);
+       
+               mxExtVertexHandler.prototype.useGridForSpecialHandle = false;
+               
+               mxExtVertexHandler.prototype.init = function()
+               {
+                       this.horizontal = mxUtils.getValue(this.state.style, mxConstants.STYLE_HORIZONTAL, true);
+                       var graph = this.state.view.graph;
+       
+                       if (this.handleImage != null)
+                       {
+                               var bounds = new mxRectangle(0, 0, this.handleImage.width, this.handleImage.height);
+                               this.specialHandle = new mxImageShape(bounds, this.handleImage.src);
+                       }
+                       else
+                       {
+                               var size = 10;
+                               var bounds = new mxRectangle(0, 0, size, size);
+                               this.specialHandle = new mxRhombus(bounds, mxConstants.HANDLE_FILLCOLOR, mxConstants.HANDLE_STROKECOLOR);
+                       }
+                       
+                       this.specialHandle.dialect = (graph.dialect != mxConstants.DIALECT_SVG) ?
+                                       mxConstants.DIALECT_VML : mxConstants.DIALECT_SVG;
+                       this.specialHandle.init(graph.getView().getOverlayPane());
+                       this.specialHandle.node.style.cursor = this.getSpecialHandleCursor();
+       
+                       mxEvent.redirectMouseEvents(this.specialHandle.node, graph, this.state);
+                       mxVertexHandler.prototype.init.apply(this, arguments);
+               };
+               
+               mxExtVertexHandler.prototype.getSpecialHandleCursor = function()
+               {
+                       return 'default';
+               };
+               
+               mxExtVertexHandler.prototype.redraw = function()
+               {
+                       mxVertexHandler.prototype.redraw.apply(this, arguments);
+       
+                       var size = this.specialHandle.bounds.width;
+                       this.specialHandle.bounds = this.getSpecialHandleBounds(size);
+                       this.specialHandle.redraw();
+               };
+
+               mxExtVertexHandler.prototype.destroy = function()
+               {
+                       mxVertexHandler.prototype.destroy.apply(this, arguments);
+                       
+                       if (this.specialHandle != null)
+                       {
+                               this.specialHandle.destroy();
+                               this.specialHandle = null;
+                       }
+               };
+               
+               mxExtVertexHandler.prototype.getHandleForEvent = function(me)
+               {
+                       if (me.isSource(this.specialHandle))
+                       {
+                               return SPECIAL_HANDLE_INDEX;
+                       }
+                       
+                       return mxVertexHandler.prototype.getHandleForEvent.apply(this, arguments);
+               };
+
+               mxExtVertexHandler.prototype.mouseMove = function(sender, me)
+               {
+                       if (!me.isConsumed() && this.index == SPECIAL_HANDLE_INDEX)
+                       {
+                               var point = new mxPoint(me.getGraphX(), me.getGraphY());
+                               this.constrainPoint(point);
+                               var gridEnabled = this.graph.isGridEnabledEvent(me.getEvent());
+                               var scale = this.graph.getView().scale;
+                               
+                               if (gridEnabled && this.useGridForSpecialHandle)
+                               {
+                                       point.x = this.graph.snap(point.x / scale) * scale;
+                                       point.y = this.graph.snap(point.y / scale) * scale;
+                               }
+                               
+                               this.updateStyle(point);                        
+                               this.moveSizerTo(this.specialHandle, point.x, point.y);
+                               this.state.view.graph.cellRenderer.redraw(this.state, true);
+                               me.consume();
+                       }
+                       else
+                       {
+                               mxVertexHandler.prototype.mouseMove.apply(this, arguments);
+                       }
+               };
+
+               mxExtVertexHandler.prototype.mouseUp = function(sender, me)
+               {
+                       if (!me.isConsumed() && this.index == SPECIAL_HANDLE_INDEX)
+                       {
+                               this.applyStyle();
+                               this.reset();
+                               me.consume();
+                       }
+                       else
+                       {
+                               mxVertexHandler.prototype.mouseUp.apply(this, arguments);
+                       }
+               };
+
+               mxExtVertexHandler.prototype.getSpecialHandleBounds = function(size)
+               {
+                       var rotation = this.state.shape.getShapeRotation();
+                       var alpha = mxUtils.toRadians(rotation);
+                       var cos = Math.cos(alpha);
+                       var sin = Math.sin(alpha);
+                       
+                       var bounds = new mxRectangle(this.state.x, this.state.y, this.state.width, this.state.height);
+                       
+                       if (this.state.shape.isPaintBoundsInverted())
+                       {
+                               var t = (bounds.width - bounds.height) / 2;
+                               bounds.x += t;
+                               bounds.y -= t;
+                               var tmp = bounds.width;
+                               bounds.width = bounds.height;
+                               bounds.height = tmp;
+                       }
+       
+                       var pt = this.getSpecialHandlePoint(bounds);
+
+                       if (this.state.shape.flipH)
+                       {
+                               pt.x = 2 * bounds.x + bounds.width - pt.x;
+                       }
+                       
+                       if (this.state.shape.flipV)
+                       {
+                               pt.y = 2 * bounds.y + bounds.height - pt.y;
+                       }
+                       
+                       pt = mxUtils.getRotatedPoint(pt, cos, sin,
+                               new mxPoint(this.state.getCenterX(), this.state.getCenterY()));
+
+                       return new mxRectangle(pt.x - size / 2, pt.y - size / 2, size, size);
+               };
+               
+               mxExtVertexHandler.prototype.getSpecialHandlePoint = function(bounds)
+               {
+                       // Hook for subclassers
+                       return null;
+               };
+       
+               mxExtVertexHandler.prototype.updateStyle = function(point)
+               {
+                       // Hook for subclassers
+               };
+               
+               mxExtVertexHandler.prototype.constrainPoint = function(point)
+               {
+                       point.x = Math.max(this.state.x, Math.min(this.state.x + this.state.width, point.x));
+                       point.y = Math.max(this.state.y, Math.min(this.state.y + this.state.height, point.y));
+               };
+               
+               mxExtVertexHandler.prototype.applyStyle = function()
+               {
+                       // Hook for subclassers
+               };
+
+               // Folder Handler
+               function mxFolderHandler(state)
+               {
+                       mxExtVertexHandler.call(this, state);
+               };
+       
+               mxUtils.extend(mxFolderHandler, mxExtVertexHandler);
+
+               mxFolderHandler.prototype.getSpecialHandlePoint = function(bounds)
+               {
+                       var scale = this.graph.getView().scale;
+                       var tw = Math.min(bounds.width, mxUtils.getValue(this.state.style, 'tabWidth', 60) * scale);
+                       var th = Math.min(bounds.height, mxUtils.getValue(this.state.style, 'tabHeight', 20) * scale);
+                       
+                       var tp = mxUtils.getValue(this.state.style, 'tabPosition', 'right');
+                       var x = (tp == 'left') ? bounds.x + tw : bounds.x + bounds.width - tw;
+       
+                       return new mxPoint(x, bounds.y + th);
+               };
+               
+               mxFolderHandler.prototype.updateStyle = function(point)
+               {
+                       var rotation = this.state.shape.getShapeRotation();
+                       var alpha = mxUtils.toRadians(rotation);
+                       var cos = Math.cos(-alpha);
+                       var sin = Math.sin(-alpha);
+
+                       var bounds = new mxRectangle(this.state.x, this.state.y, this.state.width, this.state.height);
+                       
+                       if (this.state.shape.isPaintBoundsInverted())
+                       {
+                               var t = (bounds.width - bounds.height) / 2;
+                               bounds.x += t;
+                               bounds.y -= t;
+                               var tmp = bounds.width;
+                               bounds.width = bounds.height;
+                               bounds.height = tmp;
+                       }
+       
+                       var pt = new mxPoint(point.x, point.y);
+                       pt = mxUtils.getRotatedPoint(pt, cos, sin,
+                               new mxPoint(this.state.getCenterX(), this.state.getCenterY()));
+
+                       if (this.state.shape.flipH)
+                       {
+                               pt.x = 2 * bounds.x + bounds.width - pt.x;
+                       }
+                       
+                       if (this.state.shape.flipV)
+                       {
+                               pt.y = 2 * bounds.y + bounds.height - pt.y;
+                       }
+                       
+                       var result = this.updateStyleUnrotated(pt, bounds);
+               
+                       // Modifies point to use rotated coordinates of return value
+                       if (result != null)
+                       {
+                               if (this.state.shape.flipH)
+                               {
+                                       result.x = 2 * bounds.x + bounds.width - result.x;
+                               }
+                               
+                               if (this.state.shape.flipV)
+                               {
+                                       result.y = 2 * bounds.y + bounds.height - result.y;
+                               }
+                               
+                               cos = Math.cos(alpha);
+                               sin = Math.sin(alpha);
+                               result = mxUtils.getRotatedPoint(result, cos, sin,
+                                               new mxPoint(this.state.getCenterX(), this.state.getCenterY()));
+                               point.x = result.x;
+                               point.y = result.y;
+                       }
+               };
+               
+               mxFolderHandler.prototype.updateStyleUnrotated = function(pt, bounds)
+               {
+                       var tp = mxUtils.getValue(this.state.style, 'tabPosition', 'right');
+                       var tw = (tp == 'left') ? pt.x - bounds.x : bounds.x + bounds.width - pt.x;
+                       var th = pt.y - bounds.y;
+                       
+                       var scale = this.graph.getView().scale;
+                       this.state.style['tabWidth'] = Math.round(Math.max(1, tw) / scale);
+                       this.state.style['tabHeight'] =  Math.round(Math.max(1, th) / scale);
+               };
+               
+               mxFolderHandler.prototype.applyStyle = function()
+               {
+                       var model = this.graph.getModel();
+                       model.beginUpdate();
+                       try
+                       {
+                               this.state.view.graph.setCellStyles('tabWidth', this.state.style['tabWidth'], [this.state.cell]);
+                               this.state.view.graph.setCellStyles('tabHeight', this.state.style['tabHeight'], [this.state.cell]);
+                       }
+                       finally
+                       {
+                               model.endUpdate();
+                       }
+               };
+               
+               // Swimlane Handler
+               function mxSwimlaneHandler(state)
+               {
+                       mxFolderHandler.call(this, state);
+               };
+               
+               mxUtils.extend(mxSwimlaneHandler, mxFolderHandler);
+               
+               mxSwimlaneHandler.prototype.getSpecialHandlePoint = function(bounds)
+               {
+                       var scale = this.graph.getView().scale;
+                       var startSize = mxUtils.getValue(this.state.style, mxConstants.STYLE_STARTSIZE, mxConstants.DEFAULT_STARTSIZE);
+
+                       return new mxPoint(bounds.x + bounds.width / 2, bounds.y + Math.min(bounds.height, startSize * scale));
+               };
+               
+               mxSwimlaneHandler.prototype.updateStyleUnrotated = function(point, bounds)
+               {
+                       point.x = bounds.x + bounds.width / 2;
+                       startSize = point.y - bounds.y;
+                       var scale = this.graph.getView().scale;
+                       this.state.style['startSize'] = Math.round(Math.max(1, startSize) / scale);
+                       
+                       return point;
+               };
+               
+               mxSwimlaneHandler.prototype.applyStyle = function()
+               {
+                       this.state.view.graph.setCellStyles('startSize', this.state.style['startSize'], [this.state.cell]);
+               };
+
+               // Cube Handler
+               function mxCubeHandler(state)
+               {
+                       mxFolderHandler.call(this, state);
+               };
+       
+               mxUtils.extend(mxCubeHandler, mxFolderHandler);
+               
+               mxCubeHandler.prototype.defaultValue = 20;
+       
+               mxCubeHandler.prototype.scaleFactor = 1;
+               
+               mxCubeHandler.prototype.getSpecialHandlePoint = function(bounds)
+               {
+                       var scale = this.graph.getView().scale;
+                       var sz = Math.min(bounds.width, Math.min(bounds.height,
+                               mxUtils.getValue(this.state.style, 'size', this.defaultValue) * scale / this.scaleFactor));
+                       
+                       return new mxPoint(bounds.x + sz, bounds.y + sz);
+               };
+       
+               mxCubeHandler.prototype.updateStyleUnrotated = function(pt, bounds)
+               {
+                       var size = Math.max(0, Math.min(Math.min(bounds.width / this.scaleFactor, pt.x - bounds.x),
+                                       Math.min(bounds.height / this.scaleFactor, pt.y - bounds.y)));
+                       var scale = this.graph.getView().scale;
+                       this.state.style['size'] = Math.round(Math.max(1, size) / scale) * this.scaleFactor;
+                       
+                       // Stays on the diagonal
+                       return new mxPoint(bounds.x + size, bounds.y + size);
+               };
+               
+               mxCubeHandler.prototype.applyStyle = function()
+               {
+                       this.state.view.graph.setCellStyles('size', this.state.style['size'], [this.state.cell]);
+               };
+               
+               // Card Handler
+               function mxCardHandler(state)
+               {
+                       mxCubeHandler.call(this, state);
+               };
+       
+               mxUtils.extend(mxCardHandler, mxCubeHandler);
+               
+               mxCardHandler.prototype.defaultValue = 30;
+       
+               mxCardHandler.prototype.scaleFactor = 2;
+               
+               // Note Handler
+               function mxNoteHandler(state)
+               {
+                       mxCubeHandler.call(this, state);
+               };
+       
+               mxUtils.extend(mxNoteHandler, mxCubeHandler);
+               
+               mxNoteHandler.prototype.defaultValue = 30;
+       
+               mxNoteHandler.prototype.scaleFactor = 1;
+               
+               mxNoteHandler.prototype.getSpecialHandlePoint = function(bounds)
+               {
+                       var scale = this.graph.getView().scale;
+                       var sz = Math.min(bounds.width, Math.min(bounds.height,
+                                       mxUtils.getValue(this.state.style, 'size', this.defaultValue) * scale / this.scaleFactor));
+                       
+                       return new mxPoint(bounds.x + bounds.width - sz, bounds.y + sz);
+               };
+               
+               mxNoteHandler.prototype.updateStyleUnrotated = function(pt, bounds)
+               {
+                       var size = Math.max(0, Math.min(Math.min(bounds.width / this.scaleFactor, pt.x - bounds.x + bounds.width),
+                                       Math.min(bounds.height / this.scaleFactor, pt.y - bounds.y)));
+                       var scale = this.graph.getView().scale;
+                       this.state.style['size'] = Math.round(Math.max(1, size) / scale) * this.scaleFactor;
+                       
+                       // Stays on the diagonal
+                       return new mxPoint(bounds.x + bounds.width - size, bounds.y + size);
+               };
+               
+               // Step Handler
+               function mxStepHandler(state)
+               {
+                       mxCubeHandler.call(this, state);
+               };
+       
+               mxUtils.extend(mxStepHandler, mxCubeHandler);
+               
+               mxStepHandler.prototype.defaultValue = 0.2;
+       
+               mxStepHandler.prototype.scaleFactor = 1;
+               
+               mxStepHandler.prototype.getSpecialHandlePoint = function(bounds)
+               {
+                       var sz = mxUtils.getValue(this.state.style, 'size', this.defaultValue);
+                       
+                       return new mxPoint(bounds.x + bounds.width * sz, bounds.y + bounds.height / 2);
+               };
+       
+               mxStepHandler.prototype.updateStyleUnrotated = function(pt, bounds)
+               {
+                       var size = Math.min(1, (pt.x - bounds.x) / bounds.width);
+                       this.state.style['size'] = size;
+                       
+                       return new mxPoint(bounds.x + size * bounds.width, bounds.y + bounds.height / 2);
+               };
+               
+               // Tape Handler
+               function mxTapeHandler(state)
+               {
+                       mxCubeHandler.call(this, state);
+               };
+       
+               mxUtils.extend(mxTapeHandler, mxCubeHandler);
+               
+               mxTapeHandler.prototype.defaultValue = 0.4;
+       
+               mxTapeHandler.prototype.scaleFactor = 1;
+               
+               mxTapeHandler.prototype.getSpecialHandlePoint = function(bounds)
+               {
+                       var sz = mxUtils.getValue(this.state.style, 'size', this.defaultValue);
+       
+                       return new mxPoint(bounds.x + bounds.width / 2, bounds.y + sz * bounds.height / 2);
+               };
+       
+               mxTapeHandler.prototype.updateStyleUnrotated = function(pt, bounds)
+               {
+                       var size = Math.max(0, Math.min(1, ((pt.y - bounds.y) / bounds.height) * 2));
+                       this.state.style['size'] = size;
+                       
+                       return new mxPoint(bounds.x + bounds.width / 2, bounds.y + size * bounds.height / 2);
+               };
+               
+               var handlers = {'swimlane': mxSwimlaneHandler, 'folder': mxFolderHandler, 'cube': mxCubeHandler,
+                               'card': mxCardHandler, 'note': mxNoteHandler, 'step': mxStepHandler, 'tape': mxTapeHandler};
+
+               var mxGraphCreateHandler = mxGraph.prototype.createHandler;
+               mxGraph.prototype.createHandler = function(state)
+               {
+                       if (state != null)
+                       {
+                               var ctor = handlers[state.style['shape']];
+
+                               if (ctor != null)
+                               {
+                                       return new ctor(state);
+                               }
+                       }
+                       
+                       return mxGraphCreateHandler.apply(this, arguments);
+               };
+       }
+       
+       // Constraints
+       mxGraph.prototype.getAllConnectionConstraints = function(terminal, source)
+       {
+               if (terminal != null && terminal.shape != null)
+               {
+                       if (terminal.shape.stencil != null)
+                       {
+                               if (terminal.shape.stencil != null)
+                               {
+                                       return terminal.shape.stencil.constraints;
+                               }
+                       }
+                       else if (terminal.shape.constraints != null)
+                       {
+                               return terminal.shape.constraints;
+                       }
+               }
+
+               return null;
+       };
+
+       mxRectangleShape.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.25, 0), true),
+                                                 new mxConnectionConstraint(new mxPoint(0.5, 0), true),
+                                                 new mxConnectionConstraint(new mxPoint(0.75, 0), true),
+                                                new mxConnectionConstraint(new mxPoint(0, 0.25), true),
+                                                new mxConnectionConstraint(new mxPoint(0, 0.5), true),
+                                                new mxConnectionConstraint(new mxPoint(0, 0.75), true),
+                                                new mxConnectionConstraint(new mxPoint(1, 0.25), true),
+                                                new mxConnectionConstraint(new mxPoint(1, 0.5), true),
+                                                new mxConnectionConstraint(new mxPoint(1, 0.75), true),
+                                                new mxConnectionConstraint(new mxPoint(0.25, 1), true),
+                                                new mxConnectionConstraint(new mxPoint(0.5, 1), true),
+                                                new mxConnectionConstraint(new mxPoint(0.75, 1), true)];
+       mxLabel.prototype.constraints = mxRectangleShape.prototype.constraints;
+       mxImageShape.prototype.constraints = mxRectangleShape.prototype.constraints;
+       mxSwimlane.prototype.constraints = mxRectangleShape.prototype.constraints;
+       PlusShape.prototype.constraints = mxRectangleShape.prototype.constraints;
+       NoteShape.prototype.constraints = mxRectangleShape.prototype.constraints;
+       CardShape.prototype.constraints = mxRectangleShape.prototype.constraints;
+       CubeShape.prototype.constraints = mxRectangleShape.prototype.constraints;
+       FolderShape.prototype.constraints = mxRectangleShape.prototype.constraints;
+       mxCylinder.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.15, 0.05), false),
+                                        new mxConnectionConstraint(new mxPoint(0.5, 0), true),
+                                        new mxConnectionConstraint(new mxPoint(0.85, 0.05), false),
+                                new mxConnectionConstraint(new mxPoint(0, 0.3), true),
+                                new mxConnectionConstraint(new mxPoint(0, 0.5), true),
+                                new mxConnectionConstraint(new mxPoint(0, 0.7), true),
+                                new mxConnectionConstraint(new mxPoint(1, 0.3), true),
+                                new mxConnectionConstraint(new mxPoint(1, 0.5), true),
+                                new mxConnectionConstraint(new mxPoint(1, 0.7), true),
+                                new mxConnectionConstraint(new mxPoint(0.15, 0.95), false),
+                                new mxConnectionConstraint(new mxPoint(0.5, 1), true),
+                                new mxConnectionConstraint(new mxPoint(0.85, 0.95), false)];
+       UmlActorShape.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.25, 0.1), false),
+                                                 new mxConnectionConstraint(new mxPoint(0.5, 0), false),
+                                                 new mxConnectionConstraint(new mxPoint(0.75, 0.1), false),
+                                                new mxConnectionConstraint(new mxPoint(0, 1/3), false),
+                                                new mxConnectionConstraint(new mxPoint(0, 1), false),
+                                                new mxConnectionConstraint(new mxPoint(1, 1/3), false),
+                                                new mxConnectionConstraint(new mxPoint(1, 1), false),
+                                                new mxConnectionConstraint(new mxPoint(0.5, 0.5), false)];
+       ComponentShape.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.25, 0), true),
+                                                 new mxConnectionConstraint(new mxPoint(0.5, 0), true),
+                                                 new mxConnectionConstraint(new mxPoint(0.75, 0), true),
+                                                new mxConnectionConstraint(new mxPoint(0, 0.3), true),
+                                                new mxConnectionConstraint(new mxPoint(0, 0.7), true),
+                                                new mxConnectionConstraint(new mxPoint(1, 0.25), true),
+                                                new mxConnectionConstraint(new mxPoint(1, 0.5), true),
+                                                new mxConnectionConstraint(new mxPoint(1, 0.75), true),
+                                                new mxConnectionConstraint(new mxPoint(0.25, 1), true),
+                                                new mxConnectionConstraint(new mxPoint(0.5, 1), true),
+                                                new mxConnectionConstraint(new mxPoint(0.75, 1), true)];
+       mxActor.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.5, 0), true),
+                                new mxConnectionConstraint(new mxPoint(0.25, 0.2), false),
+                                new mxConnectionConstraint(new mxPoint(0.1, 0.5), false),
+                                new mxConnectionConstraint(new mxPoint(0, 0.75), true),
+                                new mxConnectionConstraint(new mxPoint(0.75, 0.25), false),
+                                new mxConnectionConstraint(new mxPoint(0.9, 0.5), false),
+                                new mxConnectionConstraint(new mxPoint(1, 0.75), true),
+                                new mxConnectionConstraint(new mxPoint(0.25, 1), true),
+                                new mxConnectionConstraint(new mxPoint(0.5, 1), true),
+                                new mxConnectionConstraint(new mxPoint(0.75, 1), true)];
+       TapeShape.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0, 0.35), false),
+                                          new mxConnectionConstraint(new mxPoint(0, 0.5), false),
+                                          new mxConnectionConstraint(new mxPoint(0, 0.65), false),
+                                          new mxConnectionConstraint(new mxPoint(1, 0.35), false),
+                                               new mxConnectionConstraint(new mxPoint(1, 0.5), false),
+                                               new mxConnectionConstraint(new mxPoint(1, 0.65), false),
+                                                                               new mxConnectionConstraint(new mxPoint(0.25, 1), false),
+                                                                               new mxConnectionConstraint(new mxPoint(0.75, 0), false)];
+       // TODO: Relative ports
+       StepShape.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.25, 0), true),
+                                       new mxConnectionConstraint(new mxPoint(0.5, 0), true),
+                                       new mxConnectionConstraint(new mxPoint(0.75, 0), true),
+                                       new mxConnectionConstraint(new mxPoint(0.25, 1), true),
+                                                       new mxConnectionConstraint(new mxPoint(0.5, 1), true),
+                                                       new mxConnectionConstraint(new mxPoint(0.75, 1), true),
+                                          new mxConnectionConstraint(new mxPoint(0.1, 0.25), false),
+                                          new mxConnectionConstraint(new mxPoint(0.2, 0.5), false),
+                                          new mxConnectionConstraint(new mxPoint(0.1, 0.75), false),
+                                          new mxConnectionConstraint(new mxPoint(0.9, 0.25), false),
+                                               new mxConnectionConstraint(new mxPoint(1, 0.5), false),
+                                               new mxConnectionConstraint(new mxPoint(0.9, 0.75), false)];
+       mxLine.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0, 0.5), false),
+                                       new mxConnectionConstraint(new mxPoint(0.25, 0.5), false),
+                                       new mxConnectionConstraint(new mxPoint(0.75, 0.5), false),
+                                                                       new mxConnectionConstraint(new mxPoint(1, 0.5), false)];
+       LollipopShape.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.5, 0), false),
+                                                                               new mxConnectionConstraint(new mxPoint(0.5, 1), false)];
+       mxEllipse.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0, 0), true), new mxConnectionConstraint(new mxPoint(1, 0), true),
+                                          new mxConnectionConstraint(new mxPoint(0, 1), true), new mxConnectionConstraint(new mxPoint(1, 1), true),
+                                          new mxConnectionConstraint(new mxPoint(0.5, 0), true), new mxConnectionConstraint(new mxPoint(0.5, 1), true),
+                                                  new mxConnectionConstraint(new mxPoint(0, 0.5), true), new mxConnectionConstraint(new mxPoint(1, 0.5))];
+       mxDoubleEllipse.prototype.constraints = mxEllipse.prototype.constraints;
+       mxRhombus.prototype.constraints = mxEllipse.prototype.constraints;
+       mxTriangle.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0, 0.25), true),
+                                           new mxConnectionConstraint(new mxPoint(0, 0.5), true),
+                                          new mxConnectionConstraint(new mxPoint(0, 0.75), true),
+                                          new mxConnectionConstraint(new mxPoint(0.5, 0), true),
+                                          new mxConnectionConstraint(new mxPoint(0.5, 1), true),
+                                          new mxConnectionConstraint(new mxPoint(1, 0.5), true)];
+       mxHexagon.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.375, 0), true),
+                                           new mxConnectionConstraint(new mxPoint(0.5, 0), true),
+                                          new mxConnectionConstraint(new mxPoint(0.625, 0), true),
+                                          new mxConnectionConstraint(new mxPoint(0.125, 0.25), false),
+                                          new mxConnectionConstraint(new mxPoint(0, 0.5), true),
+                                          new mxConnectionConstraint(new mxPoint(0.125, 0.75), false),
+                                          new mxConnectionConstraint(new mxPoint(0.875, 0.25), false),
+                                          new mxConnectionConstraint(new mxPoint(0, 0.5), true),
+                                          new mxConnectionConstraint(new mxPoint(1, 0.5), true),
+                                          new mxConnectionConstraint(new mxPoint(0.875, 0.75), false),
+                                          new mxConnectionConstraint(new mxPoint(0.375, 1), true),
+                                           new mxConnectionConstraint(new mxPoint(0.5, 1), true),
+                                          new mxConnectionConstraint(new mxPoint(0.625, 1), true)];
+       mxCloud.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.25, 0.25), false),
+                                        new mxConnectionConstraint(new mxPoint(0.4, 0.1), false),
+                                        new mxConnectionConstraint(new mxPoint(0.16, 0.55), false),
+                                        new mxConnectionConstraint(new mxPoint(0.07, 0.4), false),
+                                        new mxConnectionConstraint(new mxPoint(0.31, 0.8), false),
+                                        new mxConnectionConstraint(new mxPoint(0.13, 0.77), false),
+                                        new mxConnectionConstraint(new mxPoint(0.8, 0.8), false),
+                                        new mxConnectionConstraint(new mxPoint(0.55, 0.95), false),
+                                        new mxConnectionConstraint(new mxPoint(0.875, 0.5), false),
+                                        new mxConnectionConstraint(new mxPoint(0.96, 0.7), false),
+                                        new mxConnectionConstraint(new mxPoint(0.625, 0.2), false),
+                                        new mxConnectionConstraint(new mxPoint(0.88, 0.25), false)];
+       mxArrow.prototype.constraints = null;
+})();
index 5051f3a..bdcb8ea 100644 (file)
@@ -1 +1,904 @@
-var _0xdb7c=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x64\x69\x74\x6F\x72\x55\x69","\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x70\x61\x6C\x65\x74\x74\x65\x73","\x73\x68\x6F\x77\x54\x6F\x6F\x6C\x74\x69\x70\x73","\x67\x72\x61\x70\x68","\x64\x69\x76","\x63\x72\x65\x61\x74\x65\x45\x6C\x65\x6D\x65\x6E\x74","\x67\x65\x74\x53\x74\x79\x6C\x65\x73\x68\x65\x65\x74","\x65\x64\x69\x74\x6F\x72","\x72\x65\x73\x65\x74\x56\x69\x65\x77\x4F\x6E\x52\x6F\x6F\x74\x43\x68\x61\x6E\x67\x65","\x66\x6F\x6C\x64\x69\x6E\x67\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x43\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65","\x61\x75\x74\x6F\x53\x63\x72\x6F\x6C\x6C","\x73\x65\x74\x54\x6F\x6F\x6C\x74\x69\x70\x73","\x73\x65\x74\x45\x6E\x61\x62\x6C\x65\x64","\x76\x69\x73\x69\x62\x69\x6C\x69\x74\x79","\x73\x74\x79\x6C\x65","\x68\x69\x64\x64\x65\x6E","\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x61\x62\x73\x6F\x6C\x75\x74\x65","\x61\x70\x70\x65\x6E\x64\x43\x68\x69\x6C\x64","\x62\x6F\x64\x79","\x49\x53\x5F\x54\x4F\x55\x43\x48","\x6D\x6F\x75\x73\x65\x75\x70","\x62\x69\x6E\x64","\x61\x64\x64\x4C\x69\x73\x74\x65\x6E\x65\x72","\x73\x63\x72\x6F\x6C\x6C","\x6D\x6F\x75\x73\x65\x64\x6F\x77\x6E","\x68\x69\x64\x65\x54\x6F\x6F\x6C\x74\x69\x70","\x6D\x6F\x75\x73\x65\x6D\x6F\x76\x65","\x67\x65\x74\x53\x6F\x75\x72\x63\x65","\x63\x75\x72\x72\x65\x6E\x74\x45\x6C\x74","\x70\x61\x72\x65\x6E\x74\x4E\x6F\x64\x65","\x6D\x6F\x75\x73\x65\x6F\x75\x74","\x74\x6F\x45\x6C\x65\x6D\x65\x6E\x74","\x72\x65\x6C\x61\x74\x65\x64\x54\x61\x72\x67\x65\x74","\x69\x6E\x69\x74","\x73\x72\x63","\x2F\x74\x6F\x6F\x6C\x74\x69\x70\x2E\x70\x6E\x67","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x6C\x6F\x67","\x65\x6E\x74\x72\x79","\x67\x65\x74","\x2F\x65\x6E\x74\x72\x79\x2F","\x5F\x31\x32\x38\x78\x31\x32\x38\x2E\x70\x6E\x67","\x73\x74\x61\x72\x74","\x66\x69\x6E\x61\x6C\x6C\x79","\x65\x6E\x64","\x61\x64\x64\x49\x6D\x61\x67\x65\x50\x61\x6C\x65\x74\x74\x65","\x63\x61\x6C\x6C\x5F\x6D\x61\x6E\x61\x67\x65\x6D\x65\x6E\x74","\x2F\x63\x61\x6C\x6C\x5F\x6D\x61\x6E\x61\x67\x65\x6D\x65\x6E\x74\x2F","\x61\x6E\x73\x77\x65\x72","\x68\x61\x6E\x67\x75\x70","\x64\x69\x61\x6C","\x65\x78\x74\x5F\x64\x69\x61\x6C","\x71\x75\x65\x75\x65","\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C","\x76\x61\x72\x69\x61\x62\x6C\x65","\x2F\x76\x61\x72\x69\x61\x62\x6C\x65\x2F","\x73\x65\x74","\x6D\x61\x74\x68","\x70\x6C\x61\x79\x62\x61\x63\x6B","\x2F\x70\x6C\x61\x79\x62\x61\x63\x6B\x2F","\x6D\x65\x6E\x75","\x73\x61\x79\x64\x69\x67\x69\x74\x73","\x73\x61\x79\x6E\x75\x6D\x62\x65\x72","\x73\x61\x79\x70\x68\x6F\x6E\x65\x74\x69\x63","\x74\x74\x73","\x69\x73\x70\x65\x65\x63\x68\x74\x74\x73","\x67\x65\x74\x64\x69\x67\x69\x74\x73","\x72\x65\x63\x6F\x72\x64\x69\x6E\x67","\x2F\x72\x65\x63\x6F\x72\x64\x69\x6E\x67\x2F","\x72\x65\x63\x6F\x72\x64","\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x53\x65\x72\x76\x65\x72","\x2F\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x5F\x73\x65\x72\x76\x65\x72\x2F","\x64\x61\x74\x61\x62\x61\x73\x65","\x69\x73\x70\x65\x65\x63\x68\x61\x73\x72","\x63\x61\x6C\x6C\x66\x6C\x6F\x77","\x2F\x63\x61\x6C\x6C\x66\x6C\x6F\x77\x2F","\x67\x6F\x74\x6F\x63","\x67\x6F\x74\x6F\x69\x66","\x67\x6F\x74\x6F\x69\x66\x74\x69\x6D\x65","\x76\x73\x77\x69\x74\x63\x68","\x73\x74\x61\x74\x73","\x2F\x73\x74\x61\x74\x73\x2F","\x67\x6F\x61\x6C","\x67\x65\x6E\x65\x72\x61\x6C","\x2F\x67\x65\x6E\x65\x72\x61\x6C\x2F","\x6E\x6F\x6F\x70","\x73\x79\x73\x74\x65\x6D","\x61\x67\x69","\x73\x75\x62\x70\x72\x6F\x6A\x65\x63\x74","\x63\x75\x73\x74\x6F\x6D\x5F\x61\x70\x70","\x65\x6E\x61\x62\x6C\x65\x54\x6F\x6F\x6C\x74\x69\x70\x73","\x74\x6F\x6F\x6C\x74\x69\x70\x42\x6F\x72\x64\x65\x72","\x74\x68\x75\x6D\x62\x42\x6F\x72\x64\x65\x72","\x74\x6F\x6F\x6C\x74\x69\x70\x44\x65\x6C\x61\x79","\x69\x6E\x73\x74\x61\x6C\x6C\x45\x64\x67\x65\x73","\x67\x65\x61\x72\x49\x6D\x61\x67\x65","\x2F\x63\x6C\x69\x70\x61\x72\x74\x2F\x47\x65\x61\x72\x5F\x31\x32\x38\x78\x31\x32\x38\x2E\x70\x6E\x67","\x74\x68\x75\x6D\x62\x57\x69\x64\x74\x68","\x74\x68\x75\x6D\x62\x48\x65\x69\x67\x68\x74","\x74\x68\x75\x6D\x62\x50\x61\x64\x64\x69\x6E\x67","\x73\x69\x64\x65\x62\x61\x72\x54\x69\x74\x6C\x65\x53\x69\x7A\x65","\x73\x69\x64\x65\x62\x61\x72\x54\x69\x74\x6C\x65\x73","\x74\x6F\x6F\x6C\x74\x69\x70\x54\x69\x74\x6C\x65\x73","\x73\x68\x6F\x77\x54\x6F\x6F\x6C\x74\x69\x70","\x74\x68\x72\x65\x61\x64","\x63\x6C\x65\x61\x72\x54\x69\x6D\x65\x6F\x75\x74","\x74\x6F\x6F\x6C\x74\x69\x70","\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65","\x67\x65\x53\x69\x64\x65\x62\x61\x72\x54\x6F\x6F\x6C\x74\x69\x70","\x67\x72\x61\x70\x68\x32","\x73\x65\x74\x54\x72\x61\x6E\x73\x6C\x61\x74\x65","\x76\x69\x65\x77","\x49\x53\x5F\x53\x56\x47","\x63\x61\x6E\x76\x61\x73","\x72\x65\x6C\x61\x74\x69\x76\x65","\x74\x6F\x6F\x6C\x74\x69\x70\x49\x6D\x61\x67\x65","\x63\x72\x65\x61\x74\x65\x49\x6D\x61\x67\x65","\x77\x69\x64\x74\x68","\x31\x34\x70\x78","\x68\x65\x69\x67\x68\x74","\x32\x37\x70\x78","\x64\x69\x73\x70\x6C\x61\x79","\x62\x6C\x6F\x63\x6B","\x6C\x61\x62\x65\x6C\x73\x56\x69\x73\x69\x62\x6C\x65","\x63\x6C\x65\x61\x72","\x6D\x6F\x64\x65\x6C","\x61\x64\x64\x43\x65\x6C\x6C\x73","\x67\x65\x74\x47\x72\x61\x70\x68\x42\x6F\x75\x6E\x64\x73","\x49\x53\x5F\x51\x55\x49\x52\x4B\x53","\x6F\x76\x65\x72\x66\x6C\x6F\x77","\x76\x69\x73\x69\x62\x6C\x65","\x70\x78","\x6C\x65\x6E\x67\x74\x68","\x74\x6F\x6F\x6C\x74\x69\x70\x54\x69\x74\x6C\x65","\x62\x6F\x72\x64\x65\x72\x54\x6F\x70","\x31\x70\x78\x20\x73\x6F\x6C\x69\x64\x20\x67\x72\x61\x79","\x74\x65\x78\x74\x41\x6C\x69\x67\x6E","\x63\x65\x6E\x74\x65\x72","\x31\x30\x30\x25","\x70\x61\x64\x64\x69\x6E\x67\x54\x6F\x70","\x32\x70\x78","\x36\x70\x78","\x69\x6E\x6E\x65\x72\x48\x54\x4D\x4C","","\x77\x72\x69\x74\x65","\x6F\x66\x66\x73\x65\x74\x48\x65\x69\x67\x68\x74","\x6D\x61\x72\x67\x69\x6E\x54\x6F\x70","\x74\x6F\x70","\x6E\x6F\x6E\x65","\x78","\x6D\x69\x6E","\x79","\x63\x6C\x69\x65\x6E\x74\x57\x69\x64\x74\x68","\x73\x70\x6C\x69\x74\x53\x69\x7A\x65","\x6F\x66\x66\x73\x65\x74\x54\x6F\x70","\x73\x63\x72\x6F\x6C\x6C\x54\x6F\x70","\x6D\x61\x78","\x74\x72\x61\x6E\x73\x66\x6F\x72\x6D","\x74\x72\x61\x6E\x73\x6C\x61\x74\x65\x28","\x2C","\x29","\x73\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x6C\x65\x66\x74","\x64\x72\x61\x77\x50\x61\x6E\x65","\x6F\x66\x66\x73\x65\x74\x57\x69\x64\x74\x68","\x70\x61\x67\x65\x2D\x73\x69\x64\x65\x62\x61\x72","\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x42\x79\x49\x64","\x73\x65\x74\x54\x69\x6D\x65\x6F\x75\x74","\x63\x72\x65\x61\x74\x65\x54\x69\x74\x6C\x65","\x61","\x68\x72\x65\x66","\x6A\x61\x76\x61\x73\x63\x72\x69\x70\x74\x3A\x76\x6F\x69\x64\x28\x30\x29\x3B","\x67\x65\x54\x69\x74\x6C\x65","\x63\x72\x65\x61\x74\x65\x54\x68\x75\x6D\x62","\x73\x63\x61\x6C\x65\x41\x6E\x64\x54\x72\x61\x6E\x73\x6C\x61\x74\x65","\x66\x6C\x6F\x6F\x72","\x64\x69\x61\x6C\x65\x63\x74","\x44\x49\x41\x4C\x45\x43\x54\x5F\x53\x56\x47","\x4E\x4F\x5F\x46\x4F","\x63\x6C\x6F\x6E\x65\x4E\x6F\x64\x65","\x6F\x77\x6E\x65\x72\x53\x56\x47\x45\x6C\x65\x6D\x65\x6E\x74","\x67\x65\x74\x43\x61\x6E\x76\x61\x73","\x67\x65\x74\x4D\x6F\x64\x65\x6C","\x49\x53\x5F\x49\x45\x36","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x75\x72\x6C\x28","\x74\x72\x61\x6E\x73\x70\x61\x72\x65\x6E\x74\x49\x6D\x61\x67\x65","\x63\x75\x72\x73\x6F\x72","\x70\x6F\x69\x6E\x74\x65\x72","\x6D\x69\x6E\x57\x69\x64\x74\x68","\x6D\x69\x6E\x48\x65\x69\x67\x68\x74","\x66\x6F\x6E\x74\x53\x69\x7A\x65","\x77\x68\x69\x74\x65\x53\x70\x61\x63\x65","\x6E\x6F\x77\x72\x61\x70","\x49\x53\x5F\x49\x45","\x34\x70\x78","\x63\x72\x65\x61\x74\x65\x49\x74\x65\x6D","\x67\x65\x49\x74\x65\x6D","\x70\x61\x64\x64\x69\x6E\x67","\x63\x6C\x69\x63\x6B","\x63\x6F\x6E\x73\x75\x6D\x65","\x63\x72\x65\x61\x74\x65\x44\x72\x6F\x70\x48\x61\x6E\x64\x6C\x65\x72","\x69\x73\x45\x6E\x61\x62\x6C\x65\x64","\x67\x65\x74\x49\x6D\x70\x6F\x72\x74\x61\x62\x6C\x65\x43\x65\x6C\x6C\x73","\x69\x73\x56\x61\x6C\x69\x64\x44\x72\x6F\x70\x54\x61\x72\x67\x65\x74","\x69\x73\x53\x70\x6C\x69\x74\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x53\x70\x6C\x69\x74\x54\x61\x72\x67\x65\x74","\x73\x70\x6C\x69\x74\x45\x64\x67\x65","\x69\x6D\x70\x6F\x72\x74\x43\x65\x6C\x6C\x73","\x73\x63\x72\x6F\x6C\x6C\x43\x65\x6C\x6C\x54\x6F\x56\x69\x73\x69\x62\x6C\x65","\x73\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73","\x63\x72\x65\x61\x74\x65\x44\x72\x61\x67\x50\x72\x65\x76\x69\x65\x77","\x62\x6F\x72\x64\x65\x72","\x31\x70\x78\x20\x64\x61\x73\x68\x65\x64\x20\x62\x6C\x61\x63\x6B","\x63\x72\x65\x61\x74\x65\x44\x72\x61\x67\x53\x6F\x75\x72\x63\x65","\x61\x75\x74\x6F\x73\x63\x72\x6F\x6C\x6C","\x6D\x61\x6B\x65\x44\x72\x61\x67\x67\x61\x62\x6C\x65","\x67\x65\x74\x44\x72\x6F\x70\x54\x61\x72\x67\x65\x74","\x61\x70\x70\x6C\x79","\x69\x73\x56\x61\x6C\x69\x64\x52\x6F\x6F\x74","\x61\x64\x64\x43\x6C\x69\x63\x6B\x48\x61\x6E\x64\x6C\x65\x72","\x67\x65\x74\x43\x6C\x69\x65\x6E\x74\x58","\x67\x65\x74\x43\x6C\x69\x65\x6E\x74\x59","\x61\x64\x64\x47\x65\x73\x74\x75\x72\x65\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x6D\x6F\x75\x73\x65\x55\x70","\x69\x73\x50\x6F\x70\x75\x70\x54\x72\x69\x67\x67\x65\x72","\x63\x75\x72\x72\x65\x6E\x74\x47\x72\x61\x70\x68","\x74\x6F\x6C\x65\x72\x61\x6E\x63\x65","\x61\x62\x73","\x67\x65\x74\x47\x72\x69\x64\x53\x69\x7A\x65","\x64\x72\x6F\x70","\x63\x72\x65\x61\x74\x65\x58\x6D\x6C\x44\x6F\x63\x75\x6D\x65\x6E\x74","\x6C\x61\x62\x65\x6C","\x66\x6F\x72\x45\x61\x63\x68","\x63\x72\x65\x61\x74\x65\x56\x65\x72\x74\x65\x78\x54\x65\x6D\x70\x6C\x61\x74\x65","\x6B\x65\x79","\x69\x73\x70\x65\x65\x63\x68\x5F\x61\x73\x72\x5F\x6C\x61\x6E\x67\x75\x61\x67\x65","\x69\x74\x2D\x49\x54","\x66\x69\x6C\x65\x5F\x69\x64","\x6F\x70\x74\x73","\x30","\x72\x65\x73\x70\x6F\x6E\x73\x65","\x64\x69\x67\x69\x74","\x35","\x31","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64","\x72\x65\x74\x72\x79","\x76\x61\x72\x69\x61\x62\x6C\x65\x5F\x69\x64","\x6D\x69\x6E\x64\x69\x67\x69\x74","\x6D\x61\x78\x64\x69\x67\x69\x74","\x31\x30","\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x6F\x70\x74\x69\x6F\x6E\x73","\x76\x61\x72\x69\x61\x62\x6C\x65\x5F\x76\x61\x6C\x75\x65","\x6F\x64\x62\x63\x5F\x69\x64","\x71\x75\x65\x72\x79","\x6F\x75\x74\x70\x75\x74","\x63\x6F\x6E\x74\x65\x78\x74","\x65\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x63\x6F\x6D\x6D\x61\x6E\x64","\x61\x72\x67\x73","\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E","\x69\x6E\x74\x65\x72\x76\x61\x6C\x5F\x69\x64","\x67\x6F\x74\x6F\x69\x66\x6D\x75\x6C\x74\x69\x74\x69\x6D\x65","\x64\x69\x67\x69\x74\x73","\x65\x73\x63\x61\x70\x65\x5F\x64\x69\x67\x69\x74\x73","\x23","\x6E\x75\x6D\x62\x65\x72","\x74\x65\x78\x74","\x66\x69\x6C\x65","\x74\x69\x6D\x65\x6F\x75\x74","\x2D\x31","\x73\x69\x70\x5F\x69\x64","\x75\x72\x6C","\x36\x30","\x70\x68\x6F\x6E\x65","\x74\x72\x75\x6E\x6B\x5F\x69\x64","\x67\x6F\x6F\x67\x6C\x65\x5F\x74\x74\x73\x5F\x6C\x61\x6E\x67\x75\x61\x67\x65","\x69\x74","\x69\x73\x70\x65\x65\x63\x68\x5F\x74\x74\x73\x5F\x6C\x61\x6E\x67\x75\x61\x67\x65","\x65\x75\x72\x69\x74\x61\x6C\x69\x61\x6E\x66\x65\x6D\x61\x6C\x65","\x71\x75\x65\x75\x65\x5F\x69\x64","\x6D\x61\x63\x72\x6F","\x67\x6F\x73\x75\x62","\x33\x30\x30","\x6D\x61\x69\x6C\x62\x6F\x78","\x70\x72\x6F\x6A\x65\x63\x74\x5F\x69\x64","\x6F\x70\x65\x72\x61\x74\x69\x6F\x6E","\x71\x75\x65\x75\x65\x6E\x61\x6D\x65","\x61\x67\x65\x6E\x74","\x71\x75\x65\x75\x65\x5F\x65\x76\x65\x6E\x74","\x64\x61\x74\x61\x31","\x64\x61\x74\x61\x32","\x64\x61\x74\x61\x33","\x64\x61\x74\x61\x34","\x64\x61\x74\x61\x35","\x71\x75\x65\x75\x65\x6C\x6F\x67","\x67\x6F\x61\x6C\x6E\x61\x6D\x65","\x6C\x69\x73\x74\x5F\x69\x64","\x7B\x43\x41\x4C\x4C\x45\x52\x49\x44\x28\x6E\x75\x6D\x29\x7D","\x63\x61\x6C\x6C\x62\x61\x63\x6B","\x76\x65\x72\x74\x65\x78","\x63\x72\x65\x61\x74\x65\x56\x65\x72\x74\x65\x78\x54\x65\x6D\x70\x6C\x61\x74\x65\x46\x72\x6F\x6D\x43\x65\x6C\x6C\x73","\x69\x73\x47\x75\x69\x64\x65\x73\x45\x6E\x61\x62\x6C\x65\x64","\x67\x75\x69\x64\x65\x73\x45\x6E\x61\x62\x6C\x65\x64","\x67\x72\x61\x70\x68\x48\x61\x6E\x64\x6C\x65\x72","\x63\x72\x65\x61\x74\x65\x45\x64\x67\x65\x54\x65\x6D\x70\x6C\x61\x74\x65","\x73\x65\x74\x54\x65\x72\x6D\x69\x6E\x61\x6C\x50\x6F\x69\x6E\x74","\x67\x65\x6F\x6D\x65\x74\x72\x79","\x65\x64\x67\x65","\x63\x72\x65\x61\x74\x65\x45\x64\x67\x65\x54\x65\x6D\x70\x6C\x61\x74\x65\x46\x72\x6F\x6D\x43\x65\x6C\x6C\x73","\x73\x65\x74\x44\x65\x66\x61\x75\x6C\x74\x45\x64\x67\x65","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x43\x6F\x6C\x6F\x72","\x23\x66\x66\x66\x66\x66\x66","\x61\x64\x64\x50\x61\x6C\x65\x74\x74\x65","\x67\x65\x53\x69\x64\x65\x62\x61\x72","\x61\x64\x64\x46\x6F\x6C\x64\x69\x6E\x67\x48\x61\x6E\x64\x6C\x65\x72","\x2F\x63\x6F\x6C\x6C\x61\x70\x73\x65\x64\x2E\x67\x69\x66\x29","\x2F\x65\x78\x70\x61\x6E\x64\x65\x64\x2E\x67\x69\x66\x29","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x52\x65\x70\x65\x61\x74","\x6E\x6F\x2D\x72\x65\x70\x65\x61\x74","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x31\x30\x30\x25\x20\x35\x30\x25","\x77\x61\x69\x74","\x72\x65\x6D\x6F\x76\x65\x50\x61\x6C\x65\x74\x74\x65","\x72\x65\x6D\x6F\x76\x65\x43\x68\x69\x6C\x64","\x69\x6D\x61\x67\x65\x3B\x69\x6D\x61\x67\x65\x3D"];_0xdb7c[0];function Sidebar(_0xa1dex2,_0xa1dex3){this[_0xdb7c[1]]=_0xa1dex2;this[_0xdb7c[2]]=_0xa1dex3;this[_0xdb7c[3]]= new Object();this[_0xdb7c[4]]=true;this[_0xdb7c[5]]= new Graph(document[_0xdb7c[7]](_0xdb7c[6]),null,null,this[_0xdb7c[1]][_0xdb7c[9]][_0xdb7c[5]][_0xdb7c[8]]());this[_0xdb7c[5]][_0xdb7c[10]]=false;this[_0xdb7c[5]][_0xdb7c[11]]=false;this[_0xdb7c[5]][_0xdb7c[12]](false);this[_0xdb7c[5]][_0xdb7c[13]]=false;this[_0xdb7c[5]][_0xdb7c[14]](false);this[_0xdb7c[5]][_0xdb7c[15]](false);this[_0xdb7c[5]][_0xdb7c[2]][_0xdb7c[17]][_0xdb7c[16]]=_0xdb7c[18];this[_0xdb7c[5]][_0xdb7c[2]][_0xdb7c[17]][_0xdb7c[19]]=_0xdb7c[20];document[_0xdb7c[22]][_0xdb7c[21]](this[_0xdb7c[5]][_0xdb7c[2]]);if(!mxClient[_0xdb7c[23]]){mxEvent[_0xdb7c[26]](document,_0xdb7c[24],mxUtils[_0xdb7c[25]](this,function(){this[_0xdb7c[4]]=true}));mxEvent[_0xdb7c[26]](_0xa1dex3,_0xdb7c[27],mxUtils[_0xdb7c[25]](this,function(){this[_0xdb7c[4]]=true}));mxEvent[_0xdb7c[26]](document,_0xdb7c[28],mxUtils[_0xdb7c[25]](this,function(){this[_0xdb7c[4]]=false;this[_0xdb7c[29]]()}));mxEvent[_0xdb7c[26]](document,_0xdb7c[30],mxUtils[_0xdb7c[25]](this,function(_0xa1dex4){var _0xa1dex5=mxEvent[_0xdb7c[31]](_0xa1dex4);while(_0xa1dex5!=null){if(_0xa1dex5==this[_0xdb7c[32]]){return};_0xa1dex5=_0xa1dex5[_0xdb7c[33]]};this[_0xdb7c[29]]()}));mxEvent[_0xdb7c[26]](document,_0xdb7c[34],mxUtils[_0xdb7c[25]](this,function(_0xa1dex4){if(_0xa1dex4[_0xdb7c[35]]==null&&_0xa1dex4[_0xdb7c[36]]==null){this[_0xdb7c[29]]()}}))};this[_0xdb7c[37]](); new Image()[_0xdb7c[38]]=IMAGE_PATH+_0xdb7c[39]}Sidebar[_0xdb7c[40]][_0xdb7c[37]]=function(){var _0xa1dex6=STENCIL_PATH;console[_0xdb7c[41]](_0xa1dex6);this[_0xdb7c[49]](_0xdb7c[42],mxResources[_0xdb7c[43]](_0xdb7c[42]),_0xa1dex6+_0xdb7c[44],_0xdb7c[45],[_0xdb7c[46],_0xdb7c[47],_0xdb7c[48]],[mxResources[_0xdb7c[43]](_0xdb7c[46]),mxResources[_0xdb7c[43]](_0xdb7c[47]),mxResources[_0xdb7c[43]](_0xdb7c[48])]);this[_0xdb7c[49]](_0xdb7c[50],mxResources[_0xdb7c[43]](_0xdb7c[50]),_0xa1dex6+_0xdb7c[51],_0xdb7c[45],[_0xdb7c[52],_0xdb7c[53],_0xdb7c[54],_0xdb7c[55],_0xdb7c[56],_0xdb7c[57]],[mxResources[_0xdb7c[43]](_0xdb7c[52]),mxResources[_0xdb7c[43]](_0xdb7c[53]),mxResources[_0xdb7c[43]](_0xdb7c[54]),mxResources[_0xdb7c[43]](_0xdb7c[55]),mxResources[_0xdb7c[43]](_0xdb7c[56]),mxResources[_0xdb7c[43]](_0xdb7c[57])]);this[_0xdb7c[49]](_0xdb7c[58],mxResources[_0xdb7c[43]](_0xdb7c[58]),_0xa1dex6+_0xdb7c[59],_0xdb7c[45],[_0xdb7c[60],_0xdb7c[61]],[mxResources[_0xdb7c[43]](_0xdb7c[60]),mxResources[_0xdb7c[43]](_0xdb7c[61])]);this[_0xdb7c[49]](_0xdb7c[62],mxResources[_0xdb7c[43]](_0xdb7c[62]),_0xa1dex6+_0xdb7c[63],_0xdb7c[45],[_0xdb7c[62],_0xdb7c[64],_0xdb7c[65],_0xdb7c[66],_0xdb7c[67],_0xdb7c[68],_0xdb7c[69],_0xdb7c[70]],[mxResources[_0xdb7c[43]](_0xdb7c[62]),mxResources[_0xdb7c[43]](_0xdb7c[64]),mxResources[_0xdb7c[43]](_0xdb7c[65]),mxResources[_0xdb7c[43]](_0xdb7c[66]),mxResources[_0xdb7c[43]](_0xdb7c[67]),mxResources[_0xdb7c[43]](_0xdb7c[68]),mxResources[_0xdb7c[43]](_0xdb7c[69]),mxResources[_0xdb7c[43]](_0xdb7c[70])]);this[_0xdb7c[49]](_0xdb7c[71],mxResources[_0xdb7c[43]](_0xdb7c[71]),_0xa1dex6+_0xdb7c[72],_0xdb7c[45],[_0xdb7c[73]],[mxResources[_0xdb7c[43]](_0xdb7c[73])]);this[_0xdb7c[49]](_0xdb7c[74],mxResources[_0xdb7c[43]](_0xdb7c[74]),_0xa1dex6+_0xdb7c[75],_0xdb7c[45],[_0xdb7c[76],_0xdb7c[77]],[mxResources[_0xdb7c[43]](_0xdb7c[76]),mxResources[_0xdb7c[43]](_0xdb7c[77])]);this[_0xdb7c[49]](_0xdb7c[78],mxResources[_0xdb7c[43]](_0xdb7c[78]),_0xa1dex6+_0xdb7c[79],_0xdb7c[45],[_0xdb7c[80],_0xdb7c[81],_0xdb7c[82],_0xdb7c[83]],[mxResources[_0xdb7c[43]](_0xdb7c[80]),mxResources[_0xdb7c[43]](_0xdb7c[81]),mxResources[_0xdb7c[43]](_0xdb7c[82]),mxResources[_0xdb7c[43]](_0xdb7c[83])]);this[_0xdb7c[49]](_0xdb7c[84],mxResources[_0xdb7c[43]](_0xdb7c[84]),_0xa1dex6+_0xdb7c[85],_0xdb7c[45],[_0xdb7c[86]],[mxResources[_0xdb7c[43]](_0xdb7c[86])]);this[_0xdb7c[49]](_0xdb7c[87],mxResources[_0xdb7c[43]](_0xdb7c[87]),_0xa1dex6+_0xdb7c[88],_0xdb7c[45],[_0xdb7c[89],_0xdb7c[90],_0xdb7c[91],_0xdb7c[92],_0xdb7c[93]],[mxResources[_0xdb7c[43]](_0xdb7c[89]),mxResources[_0xdb7c[43]](_0xdb7c[90]),mxResources[_0xdb7c[43]](_0xdb7c[91]),mxResources[_0xdb7c[43]](_0xdb7c[92]),mxResources[_0xdb7c[43]](_0xdb7c[93])])};Sidebar[_0xdb7c[40]][_0xdb7c[94]]=!mxClient[_0xdb7c[23]];Sidebar[_0xdb7c[40]][_0xdb7c[95]]=16;Sidebar[_0xdb7c[40]][_0xdb7c[96]]=3;Sidebar[_0xdb7c[40]][_0xdb7c[97]]=300;Sidebar[_0xdb7c[40]][_0xdb7c[98]]=true;Sidebar[_0xdb7c[40]][_0xdb7c[99]]=STENCIL_PATH+_0xdb7c[100];Sidebar[_0xdb7c[40]][_0xdb7c[101]]=34;Sidebar[_0xdb7c[40]][_0xdb7c[102]]=34;Sidebar[_0xdb7c[40]][_0xdb7c[103]]=2;Sidebar[_0xdb7c[40]][_0xdb7c[104]]=9;Sidebar[_0xdb7c[40]][_0xdb7c[105]]=false;Sidebar[_0xdb7c[40]][_0xdb7c[106]]=false;Sidebar[_0xdb7c[40]][_0xdb7c[107]]=function(_0xa1dex7,_0xa1dex8,_0xa1dex9,_0xa1dexa){if(this[_0xdb7c[94]]&&this[_0xdb7c[4]]){if(this[_0xdb7c[32]]!=_0xa1dex7){if(this[_0xdb7c[108]]!=null){window[_0xdb7c[109]](this[_0xdb7c[108]]);this[_0xdb7c[108]]=null};var _0xa1dexb=mxUtils[_0xdb7c[25]](this,function(){if(this[_0xdb7c[110]]==null){this[_0xdb7c[110]]=document[_0xdb7c[7]](_0xdb7c[6]);this[_0xdb7c[110]][_0xdb7c[111]]=_0xdb7c[112];document[_0xdb7c[22]][_0xdb7c[21]](this[_0xdb7c[110]]);this[_0xdb7c[113]]= new Graph(this[_0xdb7c[110]],null,null,this[_0xdb7c[1]][_0xdb7c[9]][_0xdb7c[5]][_0xdb7c[8]]());this[_0xdb7c[113]][_0xdb7c[115]][_0xdb7c[114]](this[_0xdb7c[95]],this[_0xdb7c[95]]);this[_0xdb7c[113]][_0xdb7c[10]]=false;this[_0xdb7c[113]][_0xdb7c[11]]=false;this[_0xdb7c[113]][_0xdb7c[13]]=false;this[_0xdb7c[113]][_0xdb7c[14]](false);this[_0xdb7c[113]][_0xdb7c[12]](false);this[_0xdb7c[113]][_0xdb7c[15]](false);if(!mxClient[_0xdb7c[116]]){this[_0xdb7c[113]][_0xdb7c[115]][_0xdb7c[117]][_0xdb7c[17]][_0xdb7c[19]]=_0xdb7c[118]};this[_0xdb7c[119]]=mxUtils[_0xdb7c[120]](IMAGE_PATH+_0xdb7c[39]);this[_0xdb7c[119]][_0xdb7c[17]][_0xdb7c[19]]=_0xdb7c[20];this[_0xdb7c[119]][_0xdb7c[17]][_0xdb7c[121]]=_0xdb7c[122];this[_0xdb7c[119]][_0xdb7c[17]][_0xdb7c[123]]=_0xdb7c[124];document[_0xdb7c[22]][_0xdb7c[21]](this[_0xdb7c[119]])};this[_0xdb7c[110]][_0xdb7c[17]][_0xdb7c[125]]=_0xdb7c[126];this[_0xdb7c[113]][_0xdb7c[127]]=(_0xa1dexa==null||_0xa1dexa);this[_0xdb7c[113]][_0xdb7c[129]][_0xdb7c[128]]();this[_0xdb7c[113]][_0xdb7c[130]](_0xa1dex8);var _0xa1dexc=this[_0xdb7c[113]][_0xdb7c[131]]();var _0xa1dexd=_0xa1dexc[_0xdb7c[121]]+2*this[_0xdb7c[95]];var _0xa1dexe=_0xa1dexc[_0xdb7c[123]]+2*this[_0xdb7c[95]];if(mxClient[_0xdb7c[132]]){_0xa1dexd+=4;_0xa1dexe+=4;this[_0xdb7c[110]][_0xdb7c[17]][_0xdb7c[133]]=_0xdb7c[18]}else {this[_0xdb7c[110]][_0xdb7c[17]][_0xdb7c[133]]=_0xdb7c[134]};this[_0xdb7c[119]][_0xdb7c[17]][_0xdb7c[16]]=_0xdb7c[134];this[_0xdb7c[110]][_0xdb7c[17]][_0xdb7c[121]]=_0xa1dexd+_0xdb7c[135];if(this[_0xdb7c[106]]&&_0xa1dex9!=null&&_0xa1dex9[_0xdb7c[136]]>0){if(this[_0xdb7c[137]]==null){this[_0xdb7c[137]]=document[_0xdb7c[7]](_0xdb7c[6]);this[_0xdb7c[137]][_0xdb7c[17]][_0xdb7c[138]]=_0xdb7c[139];this[_0xdb7c[137]][_0xdb7c[17]][_0xdb7c[140]]=_0xdb7c[141];this[_0xdb7c[137]][_0xdb7c[17]][_0xdb7c[121]]=_0xdb7c[142];this[_0xdb7c[137]][_0xdb7c[17]][_0xdb7c[133]]=_0xdb7c[18];if(mxClient[_0xdb7c[116]]){this[_0xdb7c[137]][_0xdb7c[17]][_0xdb7c[143]]=_0xdb7c[144]}else {this[_0xdb7c[137]][_0xdb7c[17]][_0xdb7c[19]]=_0xdb7c[20];this[_0xdb7c[137]][_0xdb7c[17]][_0xdb7c[143]]=_0xdb7c[145]};this[_0xdb7c[110]][_0xdb7c[21]](this[_0xdb7c[137]])}else {this[_0xdb7c[137]][_0xdb7c[146]]=_0xdb7c[147]};this[_0xdb7c[137]][_0xdb7c[17]][_0xdb7c[125]]=_0xdb7c[147];mxUtils[_0xdb7c[148]](this[_0xdb7c[137]],_0xa1dex9);var _0xa1dexf=this[_0xdb7c[137]][_0xdb7c[149]]+10;_0xa1dexe+=_0xa1dexf;if(mxClient[_0xdb7c[116]]){this[_0xdb7c[137]][_0xdb7c[17]][_0xdb7c[150]]=(-_0xa1dexf)+_0xdb7c[135]}else {_0xa1dexe-=6;this[_0xdb7c[137]][_0xdb7c[17]][_0xdb7c[151]]=(_0xa1dexe-_0xa1dexf)+_0xdb7c[135]}}else {if(this[_0xdb7c[137]]!=null&&this[_0xdb7c[137]][_0xdb7c[33]]!=null){this[_0xdb7c[137]][_0xdb7c[17]][_0xdb7c[125]]=_0xdb7c[152]}};this[_0xdb7c[110]][_0xdb7c[17]][_0xdb7c[123]]=_0xa1dexe+_0xdb7c[135];var _0xa1dex10=-Math[_0xdb7c[154]](0,_0xa1dexc[_0xdb7c[153]]-this[_0xdb7c[95]]);var _0xa1dex11=-Math[_0xdb7c[154]](0,_0xa1dexc[_0xdb7c[155]]-this[_0xdb7c[95]]);var _0xa1dex12=this[_0xdb7c[2]][_0xdb7c[156]]+this[_0xdb7c[1]][_0xdb7c[157]]+3;var _0xa1dex13=Math[_0xdb7c[160]](0,(this[_0xdb7c[2]][_0xdb7c[158]]+_0xa1dex7[_0xdb7c[158]]-this[_0xdb7c[2]][_0xdb7c[159]]-_0xa1dexe/2+16));if(mxClient[_0xdb7c[116]]){this[_0xdb7c[113]][_0xdb7c[115]][_0xdb7c[117]][_0xdb7c[165]](_0xdb7c[161],_0xdb7c[162]+_0xa1dex10+_0xdb7c[163]+_0xa1dex11+_0xdb7c[164])}else {this[_0xdb7c[113]][_0xdb7c[115]][_0xdb7c[167]][_0xdb7c[17]][_0xdb7c[166]]=_0xa1dex10+_0xdb7c[135];this[_0xdb7c[113]][_0xdb7c[115]][_0xdb7c[167]][_0xdb7c[17]][_0xdb7c[151]]=_0xa1dex11+_0xdb7c[135]};_0xa1dex12+=document[_0xdb7c[170]](_0xdb7c[169])[_0xdb7c[168]];_0xa1dex13+=90;this[_0xdb7c[110]][_0xdb7c[17]][_0xdb7c[19]]=_0xdb7c[20];this[_0xdb7c[110]][_0xdb7c[17]][_0xdb7c[166]]=_0xa1dex12+_0xdb7c[135];this[_0xdb7c[110]][_0xdb7c[17]][_0xdb7c[151]]=_0xa1dex13+_0xdb7c[135];this[_0xdb7c[119]][_0xdb7c[17]][_0xdb7c[166]]=(_0xa1dex12-13)+_0xdb7c[135];this[_0xdb7c[119]][_0xdb7c[17]][_0xdb7c[151]]=(_0xa1dex13+_0xa1dexe/2-13)+_0xdb7c[135]});if(this[_0xdb7c[110]]!=null&&this[_0xdb7c[110]][_0xdb7c[17]][_0xdb7c[125]]!=_0xdb7c[152]){_0xa1dexb()}else {this[_0xdb7c[108]]=window[_0xdb7c[171]](_0xa1dexb,this[_0xdb7c[97]])};this[_0xdb7c[32]]=_0xa1dex7}}};Sidebar[_0xdb7c[40]][_0xdb7c[29]]=function(){if(this[_0xdb7c[108]]!=null){window[_0xdb7c[109]](this[_0xdb7c[108]]);this[_0xdb7c[108]]=null};if(this[_0xdb7c[110]]!=null){this[_0xdb7c[110]][_0xdb7c[17]][_0xdb7c[125]]=_0xdb7c[152];this[_0xdb7c[119]][_0xdb7c[17]][_0xdb7c[16]]=_0xdb7c[18];this[_0xdb7c[32]]=null}};Sidebar[_0xdb7c[40]][_0xdb7c[172]]=function(_0xa1dex14){var _0xa1dex7=document[_0xdb7c[7]](_0xdb7c[173]);_0xa1dex7[_0xdb7c[165]](_0xdb7c[174],_0xdb7c[175]);_0xa1dex7[_0xdb7c[111]]=_0xdb7c[176];mxUtils[_0xdb7c[148]](_0xa1dex7,_0xa1dex14);return _0xa1dex7};Sidebar[_0xdb7c[40]][_0xdb7c[177]]=function(_0xa1dex8,_0xa1dexd,_0xa1dexe,_0xa1dex15,_0xa1dex9,_0xa1dexa){this[_0xdb7c[5]][_0xdb7c[127]]=(_0xa1dexa==null||_0xa1dexa);this[_0xdb7c[5]][_0xdb7c[115]][_0xdb7c[178]](1,0,0);this[_0xdb7c[5]][_0xdb7c[130]](_0xa1dex8);var _0xa1dexc=this[_0xdb7c[5]][_0xdb7c[131]]();var _0xa1dex16=this[_0xdb7c[96]];var _0xa1dex17=Math[_0xdb7c[154]]((_0xa1dexd-2)/(_0xa1dexc[_0xdb7c[121]]-_0xa1dexc[_0xdb7c[153]]+_0xa1dex16),(_0xa1dexe-2)/(_0xa1dexc[_0xdb7c[123]]-_0xa1dexc[_0xdb7c[155]]+_0xa1dex16));var _0xa1dex10=-Math[_0xdb7c[154]](_0xa1dexc[_0xdb7c[153]],0);var _0xa1dex11=-Math[_0xdb7c[154]](_0xa1dexc[_0xdb7c[155]],0);this[_0xdb7c[5]][_0xdb7c[115]][_0xdb7c[178]](_0xa1dex17,_0xa1dex10,_0xa1dex11);_0xa1dexc=this[_0xdb7c[5]][_0xdb7c[131]]();var _0xa1dex18=Math[_0xdb7c[160]](0,Math[_0xdb7c[179]]((_0xa1dexd-_0xa1dexc[_0xdb7c[121]]-_0xa1dexc[_0xdb7c[153]])/2));var _0xa1dexf=Math[_0xdb7c[160]](0,Math[_0xdb7c[179]]((_0xa1dexe-_0xa1dexc[_0xdb7c[123]]-_0xa1dexc[_0xdb7c[155]])/2));var _0xa1dex19=null;if(this[_0xdb7c[5]][_0xdb7c[180]]==mxConstants[_0xdb7c[181]]&&!mxClient[_0xdb7c[182]]){_0xa1dex19=this[_0xdb7c[5]][_0xdb7c[115]][_0xdb7c[185]]()[_0xdb7c[184]][_0xdb7c[183]](true)}else {_0xa1dex19=this[_0xdb7c[5]][_0xdb7c[2]][_0xdb7c[183]](false);_0xa1dex19[_0xdb7c[146]]=this[_0xdb7c[5]][_0xdb7c[2]][_0xdb7c[146]]};this[_0xdb7c[5]][_0xdb7c[186]]()[_0xdb7c[128]]();if(mxClient[_0xdb7c[187]]){_0xa1dex15[_0xdb7c[17]][_0xdb7c[188]]=_0xdb7c[189]+this[_0xdb7c[1]][_0xdb7c[9]][_0xdb7c[190]]+_0xdb7c[164]};var _0xa1dex1a=3;_0xa1dex19[_0xdb7c[17]][_0xdb7c[19]]=_0xdb7c[118];_0xa1dex19[_0xdb7c[17]][_0xdb7c[133]]=_0xdb7c[18];_0xa1dex19[_0xdb7c[17]][_0xdb7c[191]]=_0xdb7c[192];_0xa1dex19[_0xdb7c[17]][_0xdb7c[166]]=(_0xa1dex18+_0xa1dex1a)+_0xdb7c[135];_0xa1dex19[_0xdb7c[17]][_0xdb7c[151]]=(_0xa1dexf+_0xa1dex1a)+_0xdb7c[135];_0xa1dex19[_0xdb7c[17]][_0xdb7c[121]]=_0xa1dexd+_0xdb7c[135];_0xa1dex19[_0xdb7c[17]][_0xdb7c[123]]=_0xa1dexe+_0xdb7c[135];_0xa1dex19[_0xdb7c[17]][_0xdb7c[16]]=_0xdb7c[147];_0xa1dex19[_0xdb7c[17]][_0xdb7c[193]]=_0xdb7c[147];_0xa1dex19[_0xdb7c[17]][_0xdb7c[194]]=_0xdb7c[147];_0xa1dex15[_0xdb7c[21]](_0xa1dex19);if(this[_0xdb7c[105]]&&_0xa1dex9!=null){var _0xa1dex1b=(mxClient[_0xdb7c[132]])?2*this[_0xdb7c[103]]+2:0;_0xa1dex15[_0xdb7c[17]][_0xdb7c[123]]=(this[_0xdb7c[102]]+_0xa1dex1b+this[_0xdb7c[104]]+8)+_0xdb7c[135];var _0xa1dex1c=document[_0xdb7c[7]](_0xdb7c[6]);_0xa1dex1c[_0xdb7c[17]][_0xdb7c[195]]=this[_0xdb7c[104]]+_0xdb7c[135];_0xa1dex1c[_0xdb7c[17]][_0xdb7c[140]]=_0xdb7c[141];_0xa1dex1c[_0xdb7c[17]][_0xdb7c[196]]=_0xdb7c[197];if(mxClient[_0xdb7c[198]]){_0xa1dex1c[_0xdb7c[17]][_0xdb7c[123]]=(this[_0xdb7c[104]]+12)+_0xdb7c[135]};_0xa1dex1c[_0xdb7c[17]][_0xdb7c[143]]=_0xdb7c[199];mxUtils[_0xdb7c[148]](_0xa1dex1c,_0xa1dex9);_0xa1dex15[_0xdb7c[21]](_0xa1dex1c)}};Sidebar[_0xdb7c[40]][_0xdb7c[200]]=function(_0xa1dex8,_0xa1dex9,_0xa1dexa){var _0xa1dex7=document[_0xdb7c[7]](_0xdb7c[173]);_0xa1dex7[_0xdb7c[165]](_0xdb7c[174],_0xdb7c[175]);_0xa1dex7[_0xdb7c[111]]=_0xdb7c[201];_0xa1dex7[_0xdb7c[17]][_0xdb7c[133]]=_0xdb7c[18];var _0xa1dex1b=(mxClient[_0xdb7c[132]])?8+2*this[_0xdb7c[103]]:6;_0xa1dex7[_0xdb7c[17]][_0xdb7c[121]]=(this[_0xdb7c[101]]+_0xa1dex1b)+_0xdb7c[135];_0xa1dex7[_0xdb7c[17]][_0xdb7c[123]]=(this[_0xdb7c[102]]+_0xa1dex1b)+_0xdb7c[135];_0xa1dex7[_0xdb7c[17]][_0xdb7c[202]]=this[_0xdb7c[103]]+_0xdb7c[135];mxEvent[_0xdb7c[26]](_0xa1dex7,_0xdb7c[203],function(_0xa1dex4){mxEvent[_0xdb7c[204]](_0xa1dex4)});this[_0xdb7c[177]](_0xa1dex8,this[_0xdb7c[101]],this[_0xdb7c[102]],_0xa1dex7,_0xa1dex9,_0xa1dexa);return _0xa1dex7};Sidebar[_0xdb7c[40]][_0xdb7c[205]]=function(_0xa1dex8,_0xa1dex1d){return function(_0xa1dex1e,_0xa1dex4,_0xa1dex1f,_0xa1dex20,_0xa1dex21){if(_0xa1dex1e[_0xdb7c[206]]()){_0xa1dex8=_0xa1dex1e[_0xdb7c[207]](_0xa1dex8);if(_0xa1dex8[_0xdb7c[136]]>0){var _0xa1dex22=(_0xa1dex1f!=null)?_0xa1dex1e[_0xdb7c[208]](_0xa1dex1f,_0xa1dex8,_0xa1dex4):false;var _0xa1dex23=null;if(_0xa1dex1f!=null&& !_0xa1dex22){_0xa1dex1f=null};if(_0xa1dex1d&&_0xa1dex1e[_0xdb7c[209]]()&&_0xa1dex1e[_0xdb7c[210]](_0xa1dex1f,_0xa1dex8,_0xa1dex4)){_0xa1dex1e[_0xdb7c[211]](_0xa1dex1f,_0xa1dex8,null,_0xa1dex20,_0xa1dex21);_0xa1dex23=_0xa1dex8}else {if(_0xa1dex8[_0xdb7c[136]]>0){_0xa1dex23=_0xa1dex1e[_0xdb7c[212]](_0xa1dex8,_0xa1dex20,_0xa1dex21,_0xa1dex1f)}};if(_0xa1dex23!=null&&_0xa1dex23[_0xdb7c[136]]>0){_0xa1dex1e[_0xdb7c[213]](_0xa1dex23[0]);_0xa1dex1e[_0xdb7c[214]](_0xa1dex23)}}}}};Sidebar[_0xdb7c[40]][_0xdb7c[215]]=function(_0xa1dexd,_0xa1dexe){var _0xa1dex7=document[_0xdb7c[7]](_0xdb7c[6]);_0xa1dex7[_0xdb7c[17]][_0xdb7c[216]]=_0xdb7c[217];_0xa1dex7[_0xdb7c[17]][_0xdb7c[121]]=_0xa1dexd+_0xdb7c[135];_0xa1dex7[_0xdb7c[17]][_0xdb7c[123]]=_0xa1dexe+_0xdb7c[135];return _0xa1dex7};Sidebar[_0xdb7c[40]][_0xdb7c[218]]=function(_0xa1dex7,_0xa1dex24,_0xa1dex25){var _0xa1dex26=mxUtils[_0xdb7c[220]](_0xa1dex7,this[_0xdb7c[1]][_0xdb7c[9]][_0xdb7c[5]],_0xa1dex24,_0xa1dex25,0,0,this[_0xdb7c[1]][_0xdb7c[9]][_0xdb7c[5]][_0xdb7c[219]],true,true);_0xa1dex26[_0xdb7c[221]]=function(_0xa1dex1e,_0xa1dex20,_0xa1dex21){var _0xa1dex1f=mxDragSource[_0xdb7c[40]][_0xdb7c[221]][_0xdb7c[222]](this,arguments);if(!_0xa1dex1e[_0xdb7c[223]](_0xa1dex1f)){_0xa1dex1f=null};return _0xa1dex1f};return _0xa1dex26};Sidebar[_0xdb7c[40]][_0xdb7c[224]]=function(_0xa1dex7,_0xa1dex27){var _0xa1dex1e=this[_0xdb7c[1]][_0xdb7c[9]][_0xdb7c[5]];var _0xa1dex28=null;mxEvent[_0xdb7c[227]](_0xa1dex7,function(_0xa1dex4){_0xa1dex28= new mxPoint(mxEvent[_0xdb7c[225]](_0xa1dex4),mxEvent[_0xdb7c[226]](_0xa1dex4))});var _0xa1dex29=_0xa1dex27[_0xdb7c[228]];_0xa1dex27[_0xdb7c[228]]=function(_0xa1dex4){if(!mxEvent[_0xdb7c[229]](_0xa1dex4)&&this[_0xdb7c[230]]==null&&_0xa1dex28!=null){var _0xa1dex2a=_0xa1dex1e[_0xdb7c[231]];if(Math[_0xdb7c[232]](_0xa1dex28[_0xdb7c[153]]-mxEvent[_0xdb7c[225]](_0xa1dex4))<=_0xa1dex2a&&Math[_0xdb7c[232]](_0xa1dex28[_0xdb7c[155]]-mxEvent[_0xdb7c[226]](_0xa1dex4))<=_0xa1dex2a){var _0xa1dex2b=_0xa1dex1e[_0xdb7c[233]]();_0xa1dex27[_0xdb7c[234]](_0xa1dex1e,_0xa1dex4,null,_0xa1dex2b,_0xa1dex2b)}};_0xa1dex29[_0xdb7c[222]](this,arguments);_0xa1dex28=null}};Sidebar[_0xdb7c[40]][_0xdb7c[235]]=function(_0xa1dex2c,_0xa1dex14,_0xa1dex2d,_0xa1dex2e){var _0xa1dex2f=mxUtils[_0xdb7c[235]]();var _0xa1dex19=_0xa1dex2f[_0xdb7c[7]](_0xa1dex2c);_0xa1dex19[_0xdb7c[165]](_0xdb7c[236],_0xa1dex14);_0xa1dex2d[_0xdb7c[237]](function(_0xa1dex30,_0xa1dex31){_0xa1dex19[_0xdb7c[165]](_0xa1dex30,_0xa1dex2e[_0xa1dex31]?_0xa1dex2e[_0xa1dex31]:_0xdb7c[147])});return _0xa1dex19};Sidebar[_0xdb7c[40]][_0xdb7c[238]]=function(_0xa1dex32,_0xa1dexd,_0xa1dexe,_0xa1dex33,_0xa1dex9,_0xa1dexa){var _0xa1dex2d=[];var _0xa1dex2e=[];switch(_0xa1dex33){case _0xdb7c[52]:break;case _0xdb7c[77]:_0xa1dex2d=[_0xdb7c[239],_0xdb7c[129],_0xdb7c[240]];_0xa1dex2e=[_0xdb7c[147],0,_0xdb7c[241]];break;case _0xdb7c[62]:_0xa1dex2d=[_0xdb7c[242],_0xdb7c[243]];_0xa1dex2e=[_0xdb7c[244]];break;case _0xdb7c[249]:_0xa1dex2d=[_0xdb7c[242],_0xdb7c[245],_0xdb7c[246]];_0xa1dex2e=[_0xdb7c[244],_0xdb7c[247],_0xdb7c[248]];break;case _0xdb7c[64]:_0xa1dex2d=[_0xdb7c[242],_0xdb7c[245],_0xdb7c[246],_0xdb7c[250],_0xdb7c[251]];_0xa1dex2e=[_0xdb7c[244],_0xdb7c[247],_0xdb7c[248],_0xdb7c[248],_0xdb7c[244]];break;case _0xdb7c[70]:_0xa1dex2d=[_0xdb7c[242],_0xdb7c[245],_0xdb7c[252],_0xdb7c[253],_0xdb7c[250],_0xdb7c[251]];_0xa1dex2e=[_0xdb7c[244],_0xdb7c[247],_0xdb7c[248],_0xdb7c[254],_0xdb7c[248],_0xdb7c[244]];break;case _0xdb7c[93]:_0xa1dex2d=[_0xdb7c[255],_0xdb7c[256]];_0xa1dex2e=[_0xdb7c[147],_0xdb7c[147]];break;case _0xdb7c[60]:_0xa1dex2d=[_0xdb7c[251],_0xdb7c[257]];_0xa1dex2e=[_0xdb7c[244],_0xdb7c[147]];break;case _0xdb7c[76]:_0xa1dex2d=[_0xdb7c[258],_0xdb7c[259],_0xdb7c[251]];_0xa1dex2e=[_0xdb7c[244],_0xdb7c[147],_0xdb7c[244]];break;case _0xdb7c[89]:_0xa1dex2d=[_0xdb7c[260]];_0xa1dex2e=[];break;case _0xdb7c[80]:_0xa1dex2d=[_0xdb7c[261],_0xdb7c[262]];_0xa1dex2e=[];break;case _0xdb7c[90]:_0xa1dex2d=[_0xdb7c[251],_0xdb7c[263]];_0xa1dex2e=[];break;case _0xdb7c[91]:_0xa1dex2d=[_0xdb7c[264],_0xdb7c[263]];_0xa1dex2e=[];break;case _0xdb7c[81]:_0xa1dex2d=[_0xdb7c[265]];_0xa1dex2e=[];break;case _0xdb7c[82]:_0xa1dex2d=[_0xdb7c[266]];_0xa1dex2e=[_0xdb7c[244]];break;case _0xdb7c[267]:_0xa1dex2d=[_0xdb7c[266]];_0xa1dex2e=[_0xdb7c[244]];break;case _0xdb7c[83]:_0xa1dex2d=[_0xdb7c[251]];_0xa1dex2e=[_0xdb7c[244]];break;case _0xdb7c[65]:_0xa1dex2d=[_0xdb7c[268],_0xdb7c[269]];_0xa1dex2e=[_0xdb7c[147],_0xdb7c[270]];break;case _0xdb7c[66]:_0xa1dex2d=[_0xdb7c[271],_0xdb7c[269]];_0xa1dex2e=[_0xdb7c[147],_0xdb7c[270]];break;case _0xdb7c[67]:_0xa1dex2d=[_0xdb7c[272],_0xdb7c[269]];_0xa1dex2e=[_0xdb7c[147],_0xdb7c[270]];break;case _0xdb7c[73]:_0xa1dex2d=[_0xdb7c[273],_0xdb7c[274],_0xdb7c[269]];_0xa1dex2e=[_0xdb7c[147],_0xdb7c[275],_0xdb7c[270]];break;case _0xdb7c[54]:_0xa1dex2d=[_0xdb7c[276],_0xdb7c[274],_0xdb7c[93],_0xdb7c[277]];_0xa1dex2e=[_0xdb7c[244],_0xdb7c[278]];break;case _0xdb7c[55]:_0xa1dex2d=[_0xdb7c[279],_0xdb7c[280],_0xdb7c[274],_0xdb7c[243],_0xdb7c[277]];_0xa1dex2e=[_0xdb7c[147],_0xdb7c[244],_0xdb7c[278]];break;case _0xdb7c[68]:_0xa1dex2d=[_0xdb7c[272],_0xdb7c[281]];_0xa1dex2e=[_0xdb7c[147],_0xdb7c[282]];break;case _0xdb7c[69]:_0xa1dex2d=[_0xdb7c[272],_0xdb7c[239],_0xdb7c[283]];_0xa1dex2e=[_0xdb7c[147],_0xdb7c[147],_0xdb7c[284]];break;case _0xdb7c[56]:_0xa1dex2d=[_0xdb7c[285],_0xdb7c[243],_0xdb7c[277],_0xdb7c[242],_0xdb7c[274],_0xdb7c[91],_0xdb7c[286],_0xdb7c[287],_0xdb7c[19]];_0xa1dex2e=[_0xdb7c[275],_0xdb7c[147],_0xdb7c[147],_0xdb7c[244],_0xdb7c[288]];break;case _0xdb7c[57]:_0xa1dex2d=[_0xdb7c[289],_0xdb7c[256]];_0xa1dex2e=[_0xdb7c[147],_0xdb7c[147]];break;case _0xdb7c[92]:_0xa1dex2d=[_0xdb7c[290]];_0xa1dex2e=[_0xdb7c[244]];break;case _0xdb7c[61]:_0xa1dex2d=[_0xdb7c[291],_0xdb7c[251]];_0xa1dex2e=[_0xdb7c[147],_0xdb7c[244]];break;case _0xdb7c[300]:_0xa1dex2d=[_0xdb7c[292],_0xdb7c[293],_0xdb7c[294],_0xdb7c[295],_0xdb7c[296],_0xdb7c[297],_0xdb7c[298],_0xdb7c[299]];_0xa1dex2e=[];break;case _0xdb7c[86]:_0xa1dex2d=[_0xdb7c[301]];_0xa1dex2e=[];break;case _0xdb7c[304]:_0xa1dex2d=[_0xdb7c[302]];_0xa1dex2e=[_0xdb7c[244],_0xdb7c[303]];break;default:_0xa1dex2d=[];_0xa1dex2e=[];break};var _0xa1dex19=this[_0xdb7c[235]](_0xa1dex33,_0xa1dex9,_0xa1dex2d,_0xa1dex2e);var _0xa1dex8=[ new mxCell(_0xa1dex19, new mxGeometry(0,0,_0xa1dexd,_0xa1dexe),_0xa1dex32)];_0xa1dex8[0][_0xdb7c[305]]=true;return this[_0xdb7c[306]](_0xa1dex8,_0xa1dexd,_0xa1dexe,_0xa1dex9,_0xa1dexa)};Sidebar[_0xdb7c[40]][_0xdb7c[306]]=function(_0xa1dex8,_0xa1dexd,_0xa1dexe,_0xa1dex9,_0xa1dexa){var _0xa1dex7=this[_0xdb7c[200]](_0xa1dex8,_0xa1dex9,_0xa1dexa);var _0xa1dex27=this[_0xdb7c[218]](_0xa1dex7,this[_0xdb7c[205]](_0xa1dex8,true),this[_0xdb7c[215]](_0xa1dexd,_0xa1dexe));this[_0xdb7c[224]](_0xa1dex7,_0xa1dex27);_0xa1dex27[_0xdb7c[307]]=mxUtils[_0xdb7c[25]](this,function(){return this[_0xdb7c[1]][_0xdb7c[9]][_0xdb7c[5]][_0xdb7c[309]][_0xdb7c[308]]});if(!touchStyle){mxEvent[_0xdb7c[26]](_0xa1dex7,_0xdb7c[30],mxUtils[_0xdb7c[25]](this,function(_0xa1dex4){this[_0xdb7c[107]](_0xa1dex7,_0xa1dex8,_0xa1dex9,_0xa1dexa)}))};return _0xa1dex7};Sidebar[_0xdb7c[40]][_0xdb7c[310]]=function(_0xa1dex32,_0xa1dexd,_0xa1dexe,_0xa1dex33,_0xa1dex9,_0xa1dexa){var _0xa1dex8=[ new mxCell((_0xa1dex33!=null)?_0xa1dex33:_0xdb7c[147], new mxGeometry(0,0,_0xa1dexd,_0xa1dexe),_0xa1dex32)];_0xa1dex8[0][_0xdb7c[312]][_0xdb7c[311]]( new mxPoint(0,_0xa1dexe),true);_0xa1dex8[0][_0xdb7c[312]][_0xdb7c[311]]( new mxPoint(_0xa1dexd,0),false);_0xa1dex8[0][_0xdb7c[312]][_0xdb7c[118]]=true;_0xa1dex8[0][_0xdb7c[313]]=true;return this[_0xdb7c[314]](_0xa1dex8,_0xa1dexd,_0xa1dexe,_0xa1dex9,_0xa1dexa)};Sidebar[_0xdb7c[40]][_0xdb7c[314]]=function(_0xa1dex8,_0xa1dexd,_0xa1dexe,_0xa1dex9,_0xa1dexa){var _0xa1dex7=this[_0xdb7c[200]](_0xa1dex8,_0xa1dex9,_0xa1dexa);this[_0xdb7c[218]](_0xa1dex7,this[_0xdb7c[205]](_0xa1dex8,false),this[_0xdb7c[215]](_0xa1dexd,_0xa1dexe));var _0xa1dex1e=this[_0xdb7c[1]][_0xdb7c[9]][_0xdb7c[5]];mxEvent[_0xdb7c[26]](_0xa1dex7,_0xdb7c[203],mxUtils[_0xdb7c[25]](this,function(_0xa1dex4){if(this[_0xdb7c[98]]){_0xa1dex1e[_0xdb7c[315]](_0xa1dex8[0])};_0xa1dex7[_0xdb7c[17]][_0xdb7c[316]]=_0xdb7c[317];window[_0xdb7c[171]](function(){_0xa1dex7[_0xdb7c[17]][_0xdb7c[316]]=_0xdb7c[147]},300);mxEvent[_0xdb7c[204]](_0xa1dex4)}));if(!touchStyle){mxEvent[_0xdb7c[26]](_0xa1dex7,_0xdb7c[30],mxUtils[_0xdb7c[25]](this,function(_0xa1dex4){this[_0xdb7c[107]](_0xa1dex7,_0xa1dex8,_0xa1dex9,_0xa1dexa)}))};return _0xa1dex7};Sidebar[_0xdb7c[40]][_0xdb7c[318]]=function(_0xa1dex34,_0xa1dex9,_0xa1dex35,_0xa1dex36){var _0xa1dex7=this[_0xdb7c[172]](_0xa1dex9);this[_0xdb7c[2]][_0xdb7c[21]](_0xa1dex7);var _0xa1dex1c=document[_0xdb7c[7]](_0xdb7c[6]);_0xa1dex1c[_0xdb7c[111]]=_0xdb7c[319];if(_0xa1dex35){_0xa1dex36(_0xa1dex1c);_0xa1dex36=null}else {_0xa1dex1c[_0xdb7c[17]][_0xdb7c[125]]=_0xdb7c[152]};this[_0xdb7c[320]](_0xa1dex7,_0xa1dex1c,_0xa1dex36);var _0xa1dex37=document[_0xdb7c[7]](_0xdb7c[6]);_0xa1dex37[_0xdb7c[21]](_0xa1dex1c);this[_0xdb7c[2]][_0xdb7c[21]](_0xa1dex37);if(_0xa1dex34!=null){this[_0xdb7c[3]][_0xa1dex34]=[_0xa1dex7,_0xa1dex37]}};Sidebar[_0xdb7c[40]][_0xdb7c[320]]=function(_0xa1dex9,_0xa1dex38,_0xa1dex39){var _0xa1dex3a=false;_0xa1dex9[_0xdb7c[17]][_0xdb7c[188]]=(_0xa1dex38[_0xdb7c[17]][_0xdb7c[125]]==_0xdb7c[152])?_0xdb7c[189]+IMAGE_PATH+_0xdb7c[321]:_0xdb7c[189]+IMAGE_PATH+_0xdb7c[322];_0xa1dex9[_0xdb7c[17]][_0xdb7c[323]]=_0xdb7c[324];_0xa1dex9[_0xdb7c[17]][_0xdb7c[325]]=_0xdb7c[326];mxEvent[_0xdb7c[26]](_0xa1dex9,_0xdb7c[203],function(_0xa1dex4){if(_0xa1dex38[_0xdb7c[17]][_0xdb7c[125]]==_0xdb7c[152]){if(!_0xa1dex3a){_0xa1dex3a=true;if(_0xa1dex39!=null){_0xa1dex9[_0xdb7c[17]][_0xdb7c[191]]=_0xdb7c[327];window[_0xdb7c[171]](function(){_0xa1dex39(_0xa1dex38);_0xa1dex9[_0xdb7c[17]][_0xdb7c[191]]=_0xdb7c[147]},0)}};_0xa1dex9[_0xdb7c[17]][_0xdb7c[188]]=_0xdb7c[189]+IMAGE_PATH+_0xdb7c[322];_0xa1dex38[_0xdb7c[17]][_0xdb7c[125]]=_0xdb7c[126]}else {_0xa1dex9[_0xdb7c[17]][_0xdb7c[188]]=_0xdb7c[189]+IMAGE_PATH+_0xdb7c[321];_0xa1dex38[_0xdb7c[17]][_0xdb7c[125]]=_0xdb7c[152]};mxEvent[_0xdb7c[204]](_0xa1dex4)})};Sidebar[_0xdb7c[40]][_0xdb7c[328]]=function(_0xa1dex34){var _0xa1dex3b=this[_0xdb7c[3]][_0xa1dex34];if(_0xa1dex3b!=null){this[_0xdb7c[3]][_0xa1dex34]=null;for(var _0xa1dex3c=0;_0xa1dex3c<_0xa1dex3b[_0xdb7c[136]];_0xa1dex3c++){this[_0xdb7c[2]][_0xdb7c[329]](_0xa1dex3b[_0xa1dex3c])};return true};return false};Sidebar[_0xdb7c[40]][_0xdb7c[49]]=function(_0xa1dex34,_0xa1dex9,_0xa1dex3d,_0xa1dex3e,_0xa1dex3f,_0xa1dex40){this[_0xdb7c[318]](_0xa1dex34,_0xa1dex9,(_0xa1dex34===_0xdb7c[42]),mxUtils[_0xdb7c[25]](this,function(_0xa1dex38){var _0xa1dex41=_0xa1dex40!=null;for(var _0xa1dex3c=0;_0xa1dex3c<_0xa1dex3f[_0xdb7c[136]];_0xa1dex3c++){var _0xa1dex42=_0xa1dex3d+_0xa1dex3f[_0xa1dex3c]+_0xa1dex3e;_0xa1dex38[_0xdb7c[21]](this[_0xdb7c[238]](_0xdb7c[330]+_0xa1dex42,80,80,_0xa1dex3f[_0xa1dex3c],(_0xa1dex41)?_0xa1dex40[_0xa1dex3c]:null,_0xa1dex41))}}))}
\ No newline at end of file
+'use strict';
+
+/**
+ * Construcs a new sidebar for the given editor.
+ */
+function Sidebar(editorUi, container) {
+       this.editorUi = editorUi;
+       this.container = container;
+       this.palettes = new Object();
+       this.showTooltips = true;
+       this.graph = new Graph(document.createElement('div'), null, null, this.editorUi
+               .editor.graph.getStylesheet());
+       this.graph.resetViewOnRootChange = false;
+       this.graph.foldingEnabled = false;
+       this.graph.setConnectable(false);
+       this.graph.autoScroll = false;
+       this.graph.setTooltips(false);
+       this.graph.setEnabled(false);
+
+       // Container must be in the DOM for correct HTML rendering
+       this.graph.container.style.visibility = 'hidden';
+       this.graph.container.style.position = 'absolute';
+       document.body.appendChild(this.graph.container);
+
+       if (!mxClient.IS_TOUCH) {
+               mxEvent.addListener(document, 'mouseup', mxUtils.bind(this, function() {
+                       this.showTooltips = true;
+               }));
+
+               // Enables tooltips after scroll
+               mxEvent.addListener(container, 'scroll', mxUtils.bind(this, function() {
+                       this.showTooltips = true;
+               }));
+
+               mxEvent.addListener(document, 'mousedown', mxUtils.bind(this, function() {
+                       this.showTooltips = false;
+                       this.hideTooltip();
+               }));
+
+               mxEvent.addListener(document, 'mousemove', mxUtils.bind(this, function(evt) {
+                       var src = mxEvent.getSource(evt);
+
+                       while (src != null) {
+                               if (src == this.currentElt) {
+                                       return;
+                               }
+
+                               src = src.parentNode;
+                       }
+
+                       this.hideTooltip();
+               }));
+
+               // Handles mouse leaving the window
+               mxEvent.addListener(document, 'mouseout', mxUtils.bind(this, function(evt) {
+                       if (evt.toElement == null && evt.relatedTarget == null) {
+                               this.hideTooltip();
+                       }
+               }));
+       }
+
+       this.init();
+
+       // Pre-fetches tooltip image
+       new Image().src = IMAGE_PATH + '/tooltip.png';
+};
+
+/**
+ * Adds all palettes to the sidebar.
+ */
+Sidebar.prototype.init = function() {
+       var dir = STENCIL_PATH;
+       console.log(dir);
+
+       this.addImagePalette('entry', mxResources.get('entry'), dir + '/entry/',
+               '_128x128.png', ['start', 'finally', 'end'], [mxResources.get('start'),
+                       mxResources.get('finally'), mxResources.get('end')
+               ]);
+       this.addImagePalette('call_management', mxResources.get('call_management'),
+               dir + '/call_management/', '_128x128.png', ['answer', 'hangup', 'dial',
+                       'ext_dial', 'queue', 'voicemail'
+                       // , 'callback'
+               ], [mxResources.get('answer'), mxResources.get('hangup'), mxResources.get(
+                               'dial'), mxResources.get('ext_dial'), mxResources.get('queue'),
+                       mxResources.get('voicemail')
+                       // , mxResources.get('callback')
+               ]);
+       this.addImagePalette('variable', mxResources.get('variable'), dir +
+               '/variable/', '_128x128.png', ['set', 'math'], [mxResources.get('set'),
+                       mxResources.get('math')
+               ]);
+       this.addImagePalette('playback', mxResources.get('playback'), dir +
+               '/playback/', '_128x128.png', ['playback', 'menu',
+                       'saydigits', 'saynumber', 'sayphonetic', 'tts', 'ispeechtts', 'getdigits'
+               ], [mxResources.get('playback'), mxResources
+                       .get('menu'), mxResources.get('saydigits'), mxResources.get('saynumber'),
+                       mxResources.get('sayphonetic'), mxResources.get('tts'), mxResources.get('ispeechtts'), mxResources.get('getdigits')
+               ]);
+       this.addImagePalette('recording', mxResources.get('recording'), dir +
+               '/recording/', '_128x128.png', ['record'], [mxResources.get('record')]);
+       this.addImagePalette('integrationServer', mxResources.get('integrationServer'),
+               dir + '/integration_server/', '_128x128.png', ['database', 'ispeechasr'], [
+                       mxResources.get('database'), mxResources.get('ispeechasr')
+               ]);
+       this.addImagePalette('callflow', mxResources.get('callflow'), dir +
+               '/callflow/', '_128x128.png', ['gotoc', 'gotoif', 'gotoiftime', 'vswitch'], [
+                       mxResources.get('gotoc'), mxResources.get('gotoif'), mxResources.get(
+                               'gotoiftime'), mxResources.get('vswitch')
+               ]);
+       this.addImagePalette('stats', mxResources.get('stats'), dir + '/stats/',
+               '_128x128.png', [
+                       // 'queuelog',
+                       'goal'
+               ], [
+                       // mxResources.get('queuelog'),
+                       mxResources.get('goal')
+               ]);
+       this.addImagePalette('general', mxResources.get('general'), dir + '/general/',
+               '_128x128.png', ['noop', 'system', 'agi', 'subproject', 'custom_app'], [mxResources.get(
+                       'noop'), mxResources.get('system'), mxResources.get('agi'), mxResources.get(
+                       'subproject'), mxResources.get(
+                       'custom_app')]);
+
+};
+
+/**
+ * Specifies if tooltips should be visible. Default is true.
+ */
+Sidebar.prototype.enableTooltips = !mxClient.IS_TOUCH;
+
+/**
+ * Specifies the delay for the tooltip. Default is 16 px.
+ */
+Sidebar.prototype.tooltipBorder = 16;
+
+/**
+ * Specifies the delay for the tooltip. Default is 3 px.
+ */
+Sidebar.prototype.thumbBorder = 3;
+
+/**
+ * Specifies the delay for the tooltip. Default is 300 ms.
+ */
+Sidebar.prototype.tooltipDelay = 300;
+
+/**
+ * Specifies if edges should be used as templates if clicked. Default is true.
+ */
+Sidebar.prototype.installEdges = true;
+
+/**
+ * Specifies the URL of the gear image.
+ */
+Sidebar.prototype.gearImage = STENCIL_PATH + '/clipart/Gear_128x128.png';
+
+/**
+ * Specifies the width of the thumbnails.
+ */
+Sidebar.prototype.thumbWidth = 34;
+
+/**
+ * Specifies the height of the thumbnails.
+ */
+Sidebar.prototype.thumbHeight = 34;
+
+/**
+ * Specifies the padding for the thumbnails. Default is 3.
+ */
+Sidebar.prototype.thumbPadding = 2;
+
+/**
+ * Specifies the size of the sidebar titles.
+ */
+Sidebar.prototype.sidebarTitleSize = 9;
+
+/**
+ * Specifies if titles in the sidebar should be enabled.
+ */
+Sidebar.prototype.sidebarTitles = false;
+
+/**
+ * Specifies if titles in the tooltips should be enabled.
+ */
+Sidebar.prototype.tooltipTitles = false;
+
+/**
+ * Adds all palettes to the sidebar.
+ */
+Sidebar.prototype.showTooltip = function(elt, cells, title, showLabel) {
+       if (this.enableTooltips && this.showTooltips) {
+               if (this.currentElt != elt) {
+                       if (this.thread != null) {
+                               window.clearTimeout(this.thread);
+                               this.thread = null;
+                       }
+
+                       var show = mxUtils.bind(this, function() {
+                               // Lazy creation of the DOM nodes and graph instance
+                               if (this.tooltip == null) {
+                                       this.tooltip = document.createElement('div');
+                                       this.tooltip.className = 'geSidebarTooltip';
+                                       document.body.appendChild(this.tooltip);
+
+                                       this.graph2 = new Graph(this.tooltip, null, null, this.editorUi.editor.graph
+                                               .getStylesheet());
+                                       this.graph2.view.setTranslate(this.tooltipBorder, this.tooltipBorder);
+                                       this.graph2.resetViewOnRootChange = false;
+                                       this.graph2.foldingEnabled = false;
+                                       this.graph2.autoScroll = false;
+                                       this.graph2.setTooltips(false);
+                                       this.graph2.setConnectable(false);
+                                       this.graph2.setEnabled(false);
+
+                                       if (!mxClient.IS_SVG) {
+                                               this.graph2.view.canvas.style.position = 'relative';
+                                       }
+
+                                       this.tooltipImage = mxUtils.createImage(IMAGE_PATH + '/tooltip.png');
+                                       this.tooltipImage.style.position = 'absolute';
+                                       this.tooltipImage.style.width = '14px';
+                                       this.tooltipImage.style.height = '27px';
+
+                                       document.body.appendChild(this.tooltipImage);
+                               }
+
+                               this.tooltip.style.display = 'block';
+                               this.graph2.labelsVisible = (showLabel == null || showLabel);
+                               this.graph2.model.clear();
+                               this.graph2.addCells(cells);
+
+                               var bounds = this.graph2.getGraphBounds();
+                               var width = bounds.width + 2 * this.tooltipBorder;
+                               var height = bounds.height + 2 * this.tooltipBorder;
+
+                               if (mxClient.IS_QUIRKS) {
+                                       width += 4;
+                                       height += 4;
+                                       this.tooltip.style.overflow = 'hidden';
+                               } else {
+                                       this.tooltip.style.overflow = 'visible';
+                               }
+
+                               this.tooltipImage.style.visibility = 'visible';
+                               this.tooltip.style.width = width + 'px';
+
+                               // Adds title for entry
+                               if (this.tooltipTitles && title != null && title.length > 0) {
+                                       if (this.tooltipTitle == null) {
+                                               this.tooltipTitle = document.createElement('div');
+                                               this.tooltipTitle.style.borderTop = '1px solid gray';
+                                               this.tooltipTitle.style.textAlign = 'center';
+                                               this.tooltipTitle.style.width = '100%';
+
+                                               // Oversize titles are cut-off currently. Should make tooltip wider later.
+                                               this.tooltipTitle.style.overflow = 'hidden';
+
+                                               if (mxClient.IS_SVG) {
+                                                       this.tooltipTitle.style.paddingTop = '2px';
+                                               } else {
+                                                       this.tooltipTitle.style.position = 'absolute';
+                                                       this.tooltipTitle.style.paddingTop = '6px';
+                                               }
+
+                                               this.tooltip.appendChild(this.tooltipTitle);
+                                       } else {
+                                               this.tooltipTitle.innerHTML = '';
+                                       }
+
+                                       this.tooltipTitle.style.display = '';
+                                       mxUtils.write(this.tooltipTitle, title);
+
+                                       var dy = this.tooltipTitle.offsetHeight + 10;
+                                       height += dy;
+
+                                       if (mxClient.IS_SVG) {
+                                               this.tooltipTitle.style.marginTop = (-dy) + 'px';
+                                       } else {
+                                               height -= 6;
+                                               this.tooltipTitle.style.top = (height - dy) + 'px';
+                                       }
+                               } else if (this.tooltipTitle != null && this.tooltipTitle.parentNode !=
+                                       null) {
+                                       this.tooltipTitle.style.display = 'none';
+                               }
+
+                               this.tooltip.style.height = height + 'px';
+                               var x0 = -Math.min(0, bounds.x - this.tooltipBorder);
+                               var y0 = -Math.min(0, bounds.y - this.tooltipBorder);
+
+                               var left = this.container.clientWidth + this.editorUi.splitSize + 3;
+                               var top = Math.max(0, (this.container.offsetTop + elt.offsetTop - this.container
+                                       .scrollTop - height / 2 + 16));
+
+                               if (mxClient.IS_SVG) {
+                                       this.graph2.view.canvas.setAttribute('transform', 'translate(' + x0 +
+                                               ',' + y0 + ')');
+                               } else {
+                                       this.graph2.view.drawPane.style.left = x0 + 'px';
+                                       this.graph2.view.drawPane.style.top = y0 + 'px';
+                               }
+
+                               // Workaround for ignored position CSS style in IE9
+                               // (changes to relative without the following line)
+                               // Added width of the page-sidebar
+                               left += document.getElementById('page-sidebar').offsetWidth;
+                               // Added static height of the page-navbar
+                               top += 90;
+
+                               this.tooltip.style.position = 'absolute';
+                               this.tooltip.style.left = left + 'px';
+                               this.tooltip.style.top = top + 'px';
+                               this.tooltipImage.style.left = (left - 13) + 'px';
+                               this.tooltipImage.style.top = (top + height / 2 - 13) + 'px';
+                       });
+
+                       if (this.tooltip != null && this.tooltip.style.display != 'none') {
+                               show();
+                       } else {
+                               this.thread = window.setTimeout(show, this.tooltipDelay);
+                       }
+
+                       this.currentElt = elt;
+               }
+       }
+};
+
+/**
+ * Hides the current tooltip.
+ */
+Sidebar.prototype.hideTooltip = function() {
+       if (this.thread != null) {
+               window.clearTimeout(this.thread);
+               this.thread = null;
+       }
+
+       if (this.tooltip != null) {
+               this.tooltip.style.display = 'none';
+               this.tooltipImage.style.visibility = 'hidden';
+               this.currentElt = null;
+       }
+};
+
+/**
+ * Creates and returns the given title element.
+ */
+Sidebar.prototype.createTitle = function(label) {
+       var elt = document.createElement('a');
+       elt.setAttribute('href', 'javascript:void(0);');
+       elt.className = 'geTitle';
+       mxUtils.write(elt, label);
+
+       return elt;
+};
+
+/**
+ * Creates a thumbnail for the given cells.
+ */
+Sidebar.prototype.createThumb = function(cells, width, height, parent, title,
+       showLabel) {
+       this.graph.labelsVisible = (showLabel == null || showLabel);
+       this.graph.view.scaleAndTranslate(1, 0, 0);
+       this.graph.addCells(cells);
+       var bounds = this.graph.getGraphBounds();
+       var corr = this.thumbBorder;
+       var s = Math.min((width - 2) / (bounds.width - bounds.x + corr), (height - 2) /
+               (bounds.height - bounds.y + corr));
+       var x0 = -Math.min(bounds.x, 0);
+       var y0 = -Math.min(bounds.y, 0);
+       this.graph.view.scaleAndTranslate(s, x0, y0);
+
+       bounds = this.graph.getGraphBounds();
+       var dx = Math.max(0, Math.floor((width - bounds.width - bounds.x) / 2));
+       var dy = Math.max(0, Math.floor((height - bounds.height - bounds.y) / 2));
+
+       var node = null;
+
+       // For supporting HTML labels in IE9 standards mode the container is cloned instead
+       if (this.graph.dialect == mxConstants.DIALECT_SVG && !mxClient.NO_FO) {
+               node = this.graph.view.getCanvas().ownerSVGElement.cloneNode(true);
+       }
+       // LATER: Check if deep clone can be used for quirks if container in DOM
+       else {
+               node = this.graph.container.cloneNode(false);
+               node.innerHTML = this.graph.container.innerHTML;
+       }
+
+       this.graph.getModel().clear();
+
+       // Catch-all event handling
+       if (mxClient.IS_IE6) {
+               parent.style.backgroundImage = 'url(' + this.editorUi.editor.transparentImage +
+                       ')';
+       }
+
+       var dd = 3;
+       node.style.position = 'relative';
+       node.style.overflow = 'hidden';
+       node.style.cursor = 'pointer';
+       node.style.left = (dx + dd) + 'px';
+       node.style.top = (dy + dd) + 'px';
+       node.style.width = width + 'px';
+       node.style.height = height + 'px';
+       node.style.visibility = '';
+       node.style.minWidth = '';
+       node.style.minHeight = '';
+
+       parent.appendChild(node);
+
+       // Adds title for sidebar entries
+       if (this.sidebarTitles && title != null) {
+               var border = (mxClient.IS_QUIRKS) ? 2 * this.thumbPadding + 2 : 0;
+               parent.style.height = (this.thumbHeight + border + this.sidebarTitleSize + 8) +
+                       'px';
+
+               var div = document.createElement('div');
+               div.style.fontSize = this.sidebarTitleSize + 'px';
+               div.style.textAlign = 'center';
+               div.style.whiteSpace = 'nowrap';
+
+               if (mxClient.IS_IE) {
+                       div.style.height = (this.sidebarTitleSize + 12) + 'px';
+               }
+
+               div.style.paddingTop = '4px';
+               mxUtils.write(div, title);
+               parent.appendChild(div);
+       }
+};
+
+/**
+ * Creates and returns a new palette item for the given image.
+ */
+Sidebar.prototype.createItem = function(cells, title, showLabel) {
+       var elt = document.createElement('a');
+       elt.setAttribute('href', 'javascript:void(0);');
+       elt.className = 'geItem';
+       elt.style.overflow = 'hidden';
+       var border = (mxClient.IS_QUIRKS) ? 8 + 2 * this.thumbPadding : 6;
+       elt.style.width = (this.thumbWidth + border) + 'px';
+       elt.style.height = (this.thumbHeight + border) + 'px';
+       elt.style.padding = this.thumbPadding + 'px';
+
+       // Blocks default click action
+       mxEvent.addListener(elt, 'click', function(evt) {
+               mxEvent.consume(evt);
+       });
+
+       this.createThumb(cells, this.thumbWidth, this.thumbHeight, elt, title,
+               showLabel);
+
+       return elt;
+};
+
+/**
+ * Creates a drop handler for inserting the given cells.
+ */
+Sidebar.prototype.createDropHandler = function(cells, allowSplit) {
+       return function(graph, evt, target, x, y) {
+               if (graph.isEnabled()) {
+                       cells = graph.getImportableCells(cells);
+
+                       if (cells.length > 0) {
+                               var validDropTarget = (target != null) ?
+                                       graph.isValidDropTarget(target, cells, evt) : false;
+                               var select = null;
+
+                               if (target != null && !validDropTarget) {
+                                       target = null;
+                               }
+
+                               // Splits the target edge or inserts into target group
+                               if (allowSplit && graph.isSplitEnabled() && graph.isSplitTarget(target,
+                                               cells, evt)) {
+                                       graph.splitEdge(target, cells, null, x, y);
+                                       select = cells;
+                               } else if (cells.length > 0) {
+                                       select = graph.importCells(cells, x, y, target);
+                               }
+
+                               if (select != null && select.length > 0) {
+                                       graph.scrollCellToVisible(select[0]);
+                                       graph.setSelectionCells(select);
+                               }
+                       }
+               }
+       };
+};
+
+/**
+ * Creates and returns a preview element for the given width and height.
+ */
+Sidebar.prototype.createDragPreview = function(width, height) {
+       var elt = document.createElement('div');
+       elt.style.border = '1px dashed black';
+       elt.style.width = width + 'px';
+       elt.style.height = height + 'px';
+
+       return elt;
+};
+
+/**
+ * Creates a drag source for the given element.
+ */
+Sidebar.prototype.createDragSource = function(elt, dropHandler, preview) {
+       var dragSource = mxUtils.makeDraggable(elt, this.editorUi.editor.graph,
+               dropHandler,
+               preview, 0, 0, this.editorUi.editor.graph.autoscroll, true, true);
+
+       // Allows drop into cell only if target is a valid root
+       dragSource.getDropTarget = function(graph, x, y) {
+               var target = mxDragSource.prototype.getDropTarget.apply(this, arguments);
+
+               if (!graph.isValidRoot(target)) {
+                       target = null;
+               }
+
+               return target;
+       };
+
+       return dragSource;
+};
+
+/**
+ * Adds a handler for inserting the cell with a single click.
+ */
+Sidebar.prototype.addClickHandler = function(elt, ds) {
+       var graph = this.editorUi.editor.graph;
+       var first = null;
+
+       mxEvent.addGestureListeners(elt, function(evt) {
+               first = new mxPoint(mxEvent.getClientX(evt), mxEvent.getClientY(evt));
+       });
+
+       var oldMouseUp = ds.mouseUp;
+       ds.mouseUp = function(evt) {
+               if (!mxEvent.isPopupTrigger(evt) && this.currentGraph == null && first !=
+                       null) {
+                       var tol = graph.tolerance;
+
+                       if (Math.abs(first.x - mxEvent.getClientX(evt)) <= tol &&
+                               Math.abs(first.y - mxEvent.getClientY(evt)) <= tol) {
+                               var gs = graph.getGridSize();
+                               ds.drop(graph, evt, null, gs, gs);
+                       }
+               }
+
+               oldMouseUp.apply(this, arguments);
+               first = null;
+       };
+};
+
+/**
+ * Giuseppe Careri
+ * Create xml document vertex
+ */
+Sidebar.prototype.createXmlDocument = function(element, label, variables,
+       values) {
+       var doc = mxUtils.createXmlDocument();
+       var node = doc.createElement(element)
+       node.setAttribute('label', label);
+
+       variables.forEach(function(variable, index) {
+               node.setAttribute(variable, values[index] ? values[index] : '');
+       });
+
+       return node;
+}
+
+/**
+ * Giuseppe Careri
+ * Creates a drop handler for inserting the given cells.
+ */
+Sidebar.prototype.createVertexTemplate = function(style, width, height, value,
+       title, showLabel) {
+       var variables = [];
+       var values = [];
+
+       switch (value) {
+               case 'answer':
+                       break;
+               case 'ispeechasr':
+                       variables = ['key', 'model', 'ispeech_asr_language'];
+                       values = ['', 0, 'it-IT'];
+                       break;
+               case 'playback':
+                       variables = ['file_id', 'opts'];
+                       values = ['0'];
+                       break;
+               case 'background':
+                       variables = ['file_id', 'response', 'digit'];
+                       values = ['0', '5', '1'];
+                       break;
+               case 'menu':
+                       variables = ['file_id', 'response', 'digit', 'retry', 'variable_id'];
+                       values = ['0', '5', '1', '1', '0'];
+                       break;
+               case 'getdigits':
+                       variables = ['file_id', 'response', 'mindigit', 'maxdigit', 'retry', 'variable_id'];
+                       values = ['0', '5', '1', '10', '1', '0'];
+                       break;
+               case 'custom_app':
+                       variables = ['application', 'options'];
+                       values = ['', ''];
+                       break;
+               case 'set':
+                       variables = ['variable_id', 'variable_value'];
+                       values = ['0', ''];
+                       break;
+               case 'database':
+                       variables = ['odbc_id', 'query', 'variable_id'];
+                       values = ['0', '', '0'];
+                       break;
+               case 'noop':
+                       variables = ['output'];
+                       values = [];
+                       break;
+               case 'gotoc':
+                       variables = ['context', 'extension'];
+                       values = [];
+                       break;
+               case 'system':
+                       variables = ['variable_id', 'command'];
+                       values = [];
+                       break;
+               case 'agi':
+                       variables = ['args', 'command'];
+                       values = [];
+                       break;
+               case 'gotoif':
+                       variables = ['condition'];
+                       values = [];
+                       break;
+               case 'gotoiftime':
+                       variables = ['interval_id'];
+                       values = ['0'];
+                       break;
+               case 'gotoifmultitime':
+                       variables = ['interval_id'];
+                       values = ['0'];
+                       break;
+               case 'vswitch':
+                       variables = ['variable_id'];
+                       values = ['0'];
+                       break;
+               case 'saydigits':
+                       variables = ['digits', 'escape_digits'];
+                       values = ['', '#'];
+                       break;
+               case 'saynumber':
+                       variables = ['number', 'escape_digits'];
+                       values = ['', '#'];
+                       break;
+               case 'sayphonetic':
+                       variables = ['text', 'escape_digits'];
+                       values = ['', '#'];
+                       break;
+               case 'record':
+                       variables = ['file', 'timeout', 'escape_digits'];
+                       values = ['', '-1', '#'];
+                       break;
+               case 'dial':
+                       variables = ['sip_id', 'timeout', 'custom_app', 'url'];
+                       values = ['0', '60'];
+                       break;
+               case 'ext_dial':
+                       variables = ['phone', 'trunk_id', 'timeout', 'opts', 'url'];
+                       values = ['', '0', '60'];
+                       break;
+               case 'tts':
+                       variables = ['text', 'google_tts_language'];
+                       values = ['', 'it'];
+                       break;
+               case 'ispeechtts':
+                       variables = ['text', 'key', 'ispeech_tts_language'];
+                       values = ['', '', 'euritalianfemale'];
+                       break;
+               case 'queue':
+                       variables = ['queue_id', 'opts', 'url', 'file_id', 'timeout', 'agi',
+                               'macro', 'gosub', 'position'
+                       ];
+                       values = ['-1', '', '', '0', '300'];
+                       break;
+               case 'voicemail':
+                       variables = ['mailbox', 'options'];
+                       values = ['', ''];
+                       break;
+               case 'subproject':
+                       variables = ['project_id'];
+                       values = ['0'];
+                       break;
+               case 'math':
+                       variables = ['operation', 'variable_id'];
+                       values = ['', '0'];
+                       break;
+               case 'queuelog':
+                       variables = ['queuename', 'agent', 'queue_event', 'data1', 'data2', 'data3',
+                               'data4', 'data5'
+                       ];
+                       values = [];
+                       break;
+               case 'goal':
+                       variables = ['goalname'];
+                       values = [];
+                       break;
+               case 'callback':
+                       variables = ['list_id'];
+                       values = ['0', '{CALLERID(num)}'];
+                       break;
+               default:
+                       variables = [];
+                       values = [];
+                       break;
+       }
+
+       var node = this.createXmlDocument(value, title, variables, values);
+
+       //var cells = [new mxCell((value != null) ? value : '', new mxGeometry(0, 0, width, height), style)];
+       var cells = [new mxCell(node, new mxGeometry(0, 0, width, height), style)];
+       cells[0].vertex = true;
+
+       return this.createVertexTemplateFromCells(cells, width, height, title,
+               showLabel);
+};
+
+/**
+ * Creates a drop handler for inserting the given cells.
+ */
+Sidebar.prototype.createVertexTemplateFromCells = function(cells, width, height,
+       title, showLabel) {
+       var elt = this.createItem(cells, title, showLabel);
+       var ds = this.createDragSource(elt, this.createDropHandler(cells, true), this
+               .createDragPreview(width, height));
+       this.addClickHandler(elt, ds);
+
+       // Uses guides for vertices only if enabled in graph
+       ds.isGuidesEnabled = mxUtils.bind(this, function() {
+               return this.editorUi.editor.graph.graphHandler.guidesEnabled;
+       });
+
+       // Shows a tooltip with the rendered cell
+       if (!touchStyle) {
+               mxEvent.addListener(elt, 'mousemove', mxUtils.bind(this, function(evt) {
+                       this.showTooltip(elt, cells, title, showLabel);
+               }));
+       }
+
+       return elt;
+};
+
+/**
+ * Creates a drop handler for inserting the given cells.
+ */
+Sidebar.prototype.createEdgeTemplate = function(style, width, height, value,
+       title, showLabel) {
+       var cells = [new mxCell((value != null) ? value : '', new mxGeometry(0, 0,
+               width, height), style)];
+       cells[0].geometry.setTerminalPoint(new mxPoint(0, height), true);
+       cells[0].geometry.setTerminalPoint(new mxPoint(width, 0), false);
+       cells[0].geometry.relative = true;
+       cells[0].edge = true;
+
+       return this.createEdgeTemplateFromCells(cells, width, height, title,
+               showLabel);
+};
+
+/**
+ * Creates a drop handler for inserting the given cells.
+ */
+Sidebar.prototype.createEdgeTemplateFromCells = function(cells, width, height,
+       title, showLabel) {
+       var elt = this.createItem(cells, title, showLabel);
+       this.createDragSource(elt, this.createDropHandler(cells, false), this.createDragPreview(
+               width, height));
+
+       // Installs the default edge
+       var graph = this.editorUi.editor.graph;
+       mxEvent.addListener(elt, 'click', mxUtils.bind(this, function(evt) {
+               if (this.installEdges) {
+                       graph.setDefaultEdge(cells[0]);
+               }
+
+               // Highlights the entry for 200ms
+               elt.style.backgroundColor = '#ffffff';
+
+               window.setTimeout(function() {
+                       elt.style.backgroundColor = '';
+               }, 300);
+
+               mxEvent.consume(evt);
+       }));
+
+       // Shows a tooltip with the rendered cell
+       if (!touchStyle) {
+               mxEvent.addListener(elt, 'mousemove', mxUtils.bind(this, function(evt) {
+                       this.showTooltip(elt, cells, title, showLabel);
+               }));
+       }
+
+       return elt;
+};
+
+/**
+ * Adds the given palette.
+ */
+Sidebar.prototype.addPalette = function(id, title, expanded, onInit) {
+       var elt = this.createTitle(title);
+       this.container.appendChild(elt);
+
+       var div = document.createElement('div');
+       div.className = 'geSidebar';
+
+       if (expanded) {
+               onInit(div);
+               onInit = null;
+       } else {
+               div.style.display = 'none';
+       }
+
+       this.addFoldingHandler(elt, div, onInit);
+
+       var outer = document.createElement('div');
+       outer.appendChild(div);
+       this.container.appendChild(outer);
+
+       // Keeps references to the DOM nodes
+       if (id != null) {
+               this.palettes[id] = [elt, outer];
+       }
+};
+
+/**
+ * Create the given title element.
+ */
+Sidebar.prototype.addFoldingHandler = function(title, content, funct) {
+       var initialized = false;
+
+       title.style.backgroundImage = (content.style.display == 'none') ?
+               'url(' + IMAGE_PATH + '/collapsed.gif)' : 'url(' + IMAGE_PATH +
+               '/expanded.gif)';
+       title.style.backgroundRepeat = 'no-repeat';
+       title.style.backgroundPosition = '100% 50%';
+
+       mxEvent.addListener(title, 'click', function(evt) {
+               if (content.style.display == 'none') {
+                       if (!initialized) {
+                               initialized = true;
+
+                               if (funct != null) {
+                                       title.style.cursor = 'wait';
+                                       window.setTimeout(function() {
+                                               funct(content);
+                                               title.style.cursor = '';
+                                       }, 0);
+                               }
+                       }
+
+                       title.style.backgroundImage = 'url(' + IMAGE_PATH + '/expanded.gif)';
+                       content.style.display = 'block';
+               } else {
+                       title.style.backgroundImage = 'url(' + IMAGE_PATH + '/collapsed.gif)';
+                       content.style.display = 'none';
+               }
+
+               mxEvent.consume(evt);
+       });
+};
+
+/**
+ * Removes the palette for the given ID.
+ */
+Sidebar.prototype.removePalette = function(id) {
+       var elts = this.palettes[id];
+
+       if (elts != null) {
+               this.palettes[id] = null;
+
+               for (var i = 0; i < elts.length; i++) {
+                       this.container.removeChild(elts[i]);
+               }
+
+               return true;
+       }
+
+       return false;
+};
+
+/**
+ * Adds the given image palette.
+ */
+Sidebar.prototype.addImagePalette = function(id, title, prefix, postfix, items,
+       titles) {
+       // Giuseppe Careri
+       // Expanded Sidebar only entry
+       this.addPalette(id, title, (id === 'entry'), mxUtils.bind(this, function(
+               content) {
+               var showTitles = titles != null;
+
+               for (var i = 0; i < items.length; i++) {
+                       var icon = prefix + items[i] + postfix;
+                       content.appendChild(this.createVertexTemplate('image;image=' + icon, 80,
+                               80, items[i], (showTitles) ? titles[i] : null, showTitles));
+               }
+       }));
+};
index 91ab96d..7eab562 100644 (file)
@@ -1 +1,407 @@
-var _0x81d3=["\x65\x64\x69\x74\x6F\x72\x55\x69","\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x69\x6E\x69\x74","\x68\x69\x64\x65\x4D\x65\x6E\x75","\x62\x69\x6E\x64","\x61\x64\x64\x47\x65\x73\x74\x75\x72\x65\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x73\x61\x76\x65","\x70\x75\x62\x6C\x69\x73\x68","\x2D","\x70\x72\x69\x6E\x74","\x75\x6E\x64\x6F","\x72\x65\x64\x6F","\x63\x6F\x70\x79","\x63\x75\x74","\x70\x61\x73\x74\x65","\x64\x65\x6C\x65\x74\x65","\x64\x75\x70\x6C\x69\x63\x61\x74\x65","\x61\x63\x74\x75\x61\x6C\x53\x69\x7A\x65","\x7A\x6F\x6F\x6D\x49\x6E","\x7A\x6F\x6F\x6D\x4F\x75\x74","\x61\x64\x64\x49\x74\x65\x6D\x73","\x48\x65\x6C\x76\x65\x74\x69\x63\x61","\x66\x6F\x6E\x74\x46\x61\x6D\x69\x6C\x79","\x67\x65\x74","\x61\x64\x64\x4D\x65\x6E\x75","\x77\x68\x69\x74\x65\x53\x70\x61\x63\x65","\x73\x74\x79\x6C\x65","\x6E\x6F\x77\x72\x61\x70","\x6F\x76\x65\x72\x66\x6C\x6F\x77","\x68\x69\x64\x64\x65\x6E","\x77\x69\x64\x74\x68","\x37\x30\x70\x78","\x61\x64\x64\x53\x65\x70\x61\x72\x61\x74\x6F\x72","\x31\x32","\x66\x6F\x6E\x74\x53\x69\x7A\x65","\x33\x30\x70\x78","\x62\x6F\x6C\x64","\x69\x74\x61\x6C\x69\x63","\x75\x6E\x64\x65\x72\x6C\x69\x6E\x65","\x67\x72\x61\x70\x68","\x65\x64\x69\x74\x6F\x72","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x67\x65\x74\x53\x74\x61\x74\x65","\x67\x65\x74\x56\x69\x65\x77","\x53\x54\x59\x4C\x45\x5F\x46\x4F\x4E\x54\x46\x41\x4D\x49\x4C\x59","\x53\x54\x59\x4C\x45\x5F\x46\x4F\x4E\x54\x53\x49\x5A\x45","\x6C\x65\x6E\x67\x74\x68","\x73\x75\x62\x73\x74\x72\x69\x6E\x67","\x2E\x2E\x2E","\x69\x6E\x6E\x65\x72\x48\x54\x4D\x4C","\x61\x64\x64\x4C\x69\x73\x74\x65\x6E\x65\x72","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x4D\x6F\x64\x65\x6C","\x67\x65\x74\x4D\x6F\x64\x65\x6C","\x63\x75\x72\x72\x65\x6E\x74\x4D\x65\x6E\x75","\x64\x65\x73\x74\x72\x6F\x79","\x6D\x65\x6E\x75\x73","\x66\x75\x6E\x63\x74","\x61\x64\x64\x4D\x65\x6E\x75\x46\x75\x6E\x63\x74\x69\x6F\x6E","\x73\x74\x61\x74\x65\x43\x68\x61\x6E\x67\x65\x64","\x65\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x45\x6E\x61\x62\x6C\x65\x64","\x63\x72\x65\x61\x74\x65\x4C\x61\x62\x65\x6C","\x63\x72\x65\x61\x74\x65\x42\x75\x74\x74\x6F\x6E","\x69\x6E\x69\x74\x45\x6C\x65\x6D\x65\x6E\x74","\x61\x64\x64\x4D\x65\x6E\x75\x48\x61\x6E\x64\x6C\x65\x72","\x61\x70\x70\x65\x6E\x64\x43\x68\x69\x6C\x64","\x64\x69\x76","\x63\x72\x65\x61\x74\x65\x45\x6C\x65\x6D\x65\x6E\x74","\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65","\x67\x65\x53\x65\x70\x61\x72\x61\x74\x6F\x72","\x67\x65\x53\x70\x72\x69\x74\x65\x2D","\x74\x6F\x4C\x6F\x77\x65\x72\x43\x61\x73\x65","\x61\x64\x64\x49\x74\x65\x6D","\x61\x63\x74\x69\x6F\x6E\x73","\x6C\x61\x62\x65\x6C","\x61\x64\x64\x42\x75\x74\x74\x6F\x6E","\x61\x64\x64\x43\x6C\x69\x63\x6B\x48\x61\x6E\x64\x6C\x65\x72","\x61\x64\x64\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x48\x61\x6E\x64\x6C\x65\x72","\x69\x73\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x45\x6D\x70\x74\x79","\x61\x64\x64\x45\x64\x67\x65\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x48\x61\x6E\x64\x6C\x65\x72","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73","\x69\x73\x45\x64\x67\x65","\x74\x61\x62\x69\x6E\x64\x65\x78","\x30","\x73\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x74\x69\x74\x6C\x65","\x61\x64\x64\x45\x6E\x61\x62\x6C\x65\x64\x53\x74\x61\x74\x65","\x20\x67\x65\x44\x69\x73\x61\x62\x6C\x65\x64","\x63\x6C\x69\x63\x6B","\x63\x6F\x6E\x73\x75\x6D\x65","\x61","\x68\x72\x65\x66","\x6A\x61\x76\x61\x73\x63\x72\x69\x70\x74\x3A\x76\x6F\x69\x64\x28\x30\x29\x3B","\x67\x65\x42\x75\x74\x74\x6F\x6E","\x67\x65\x53\x70\x72\x69\x74\x65\x20","\x67\x65\x4C\x61\x62\x65\x6C","\x77\x72\x69\x74\x65","\x70\x61\x6E\x6E\x69\x6E\x67\x48\x61\x6E\x64\x6C\x65\x72","\x20\x67\x65\x54\x6F\x6F\x6C\x62\x61\x72\x4D\x65\x6E\x75","\x73\x68\x6F\x77\x44\x69\x73\x61\x62\x6C\x65\x64","\x6C\x61\x62\x65\x6C\x73","\x61\x75\x74\x6F\x45\x78\x70\x61\x6E\x64","\x6F\x66\x66\x73\x65\x74\x4C\x65\x66\x74","\x6F\x66\x66\x73\x65\x74\x54\x6F\x70","\x6F\x66\x66\x73\x65\x74\x48\x65\x69\x67\x68\x74","\x70\x6F\x70\x75\x70"];function Toolbar(_0x315cx2,_0x315cx3){this[_0x81d3[0]]=_0x315cx2;this[_0x81d3[1]]=_0x315cx3;this[_0x81d3[2]]();mxEvent[_0x81d3[5]](document,mxUtils[_0x81d3[4]](this,function(_0x315cx4){this[_0x81d3[3]]()}))}Toolbar[_0x81d3[6]][_0x81d3[2]]=function(){this[_0x81d3[21]]([_0x81d3[7],_0x81d3[8],_0x81d3[9],_0x81d3[10],_0x81d3[11],_0x81d3[12],_0x81d3[9],_0x81d3[13],_0x81d3[14],_0x81d3[15],_0x81d3[16],_0x81d3[9],_0x81d3[17],_0x81d3[9],_0x81d3[18],_0x81d3[19],_0x81d3[20],_0x81d3[9]]);var _0x315cx5=this[_0x81d3[25]](_0x81d3[22],mxResources[_0x81d3[24]](_0x81d3[23]),true,_0x81d3[23]);_0x315cx5[_0x81d3[27]][_0x81d3[26]]=_0x81d3[28];_0x315cx5[_0x81d3[27]][_0x81d3[29]]=_0x81d3[30];_0x315cx5[_0x81d3[27]][_0x81d3[31]]=_0x81d3[32];this[_0x81d3[33]]();var _0x315cx6=this[_0x81d3[25]](_0x81d3[34],mxResources[_0x81d3[24]](_0x81d3[35]),true,_0x81d3[35]);_0x315cx6[_0x81d3[27]][_0x81d3[26]]=_0x81d3[28];_0x315cx6[_0x81d3[27]][_0x81d3[29]]=_0x81d3[30];_0x315cx6[_0x81d3[27]][_0x81d3[31]]=_0x81d3[36];this[_0x81d3[21]]([_0x81d3[9],_0x81d3[37],_0x81d3[38],_0x81d3[39]]);var _0x315cx7=this[_0x81d3[0]][_0x81d3[41]][_0x81d3[40]];var _0x315cx8=mxUtils[_0x81d3[4]](this,function(){var _0x315cx9=_0x81d3[22];var _0x315cxa=_0x81d3[34];var _0x315cxb=_0x315cx7[_0x81d3[44]]()[_0x81d3[43]](_0x315cx7[_0x81d3[42]]());if(_0x315cxb!=null){_0x315cx9=_0x315cxb[_0x81d3[27]][mxConstants[_0x81d3[45]]]||_0x315cx9;_0x315cxa=_0x315cxb[_0x81d3[27]][mxConstants[_0x81d3[46]]]||_0x315cxa;if(_0x315cx9[_0x81d3[47]]>10){_0x315cx9=_0x315cx9[_0x81d3[48]](0,8)+_0x81d3[49]};_0x315cx5[_0x81d3[50]]=_0x315cx9;_0x315cx6[_0x81d3[50]]=_0x315cxa}});_0x315cx7[_0x81d3[52]]()[_0x81d3[51]](mxEvent.CHANGE,_0x315cx8);_0x315cx7[_0x81d3[53]]()[_0x81d3[51]](mxEvent.CHANGE,_0x315cx8)};Toolbar[_0x81d3[6]][_0x81d3[3]]=function(){if(this[_0x81d3[54]]!=null){this[_0x81d3[54]][_0x81d3[3]]();this[_0x81d3[54]][_0x81d3[55]]();this[_0x81d3[54]]=null}};Toolbar[_0x81d3[6]][_0x81d3[25]]=function(_0x315cxc,_0x315cxd,_0x315cxe,_0x315cxf){var _0x315cx10=this[_0x81d3[0]][_0x81d3[56]][_0x81d3[24]](_0x315cxf);var _0x315cx11=this[_0x81d3[58]](_0x315cxc,_0x315cxd,_0x315cxe,_0x315cx10[_0x81d3[57]]);_0x315cx10[_0x81d3[51]](_0x81d3[59],function(){_0x315cx11[_0x81d3[61]](_0x315cx10[_0x81d3[60]])});return _0x315cx11};Toolbar[_0x81d3[6]][_0x81d3[58]]=function(_0x315cxc,_0x315cxd,_0x315cxe,_0x315cx12){var _0x315cx11=(_0x315cxe)?this[_0x81d3[62]](_0x315cxc):this[_0x81d3[63]](_0x315cxc);this[_0x81d3[64]](_0x315cx11,_0x315cxd);this[_0x81d3[65]](_0x315cx11,_0x315cxe,_0x315cx12);this[_0x81d3[1]][_0x81d3[66]](_0x315cx11);return _0x315cx11};Toolbar[_0x81d3[6]][_0x81d3[33]]=function(){var _0x315cx11=document[_0x81d3[68]](_0x81d3[67]);_0x315cx11[_0x81d3[69]]=_0x81d3[70];this[_0x81d3[1]][_0x81d3[66]](_0x315cx11);return _0x315cx11};Toolbar[_0x81d3[6]][_0x81d3[21]]=function(_0x315cx13){for(var _0x315cx14=0;_0x315cx14<_0x315cx13[_0x81d3[47]];_0x315cx14++){var _0x315cx15=_0x315cx13[_0x315cx14];if(_0x315cx15==_0x81d3[9]){this[_0x81d3[33]]()}else {this[_0x81d3[73]](_0x81d3[71]+_0x315cx15[_0x81d3[72]](),_0x315cx15)}}};Toolbar[_0x81d3[6]][_0x81d3[73]]=function(_0x315cx16,_0x315cx15){var _0x315cx17=this[_0x81d3[0]][_0x81d3[74]][_0x81d3[24]](_0x315cx15);var _0x315cx11=null;if(_0x315cx17!=null){_0x315cx11=this[_0x81d3[76]](_0x315cx16,_0x315cx17[_0x81d3[75]],_0x315cx17[_0x81d3[57]]);_0x315cx11[_0x81d3[61]](_0x315cx17[_0x81d3[60]]);_0x315cx17[_0x81d3[51]](_0x81d3[59],function(){_0x315cx11[_0x81d3[61]](_0x315cx17[_0x81d3[60]])})};return _0x315cx11};Toolbar[_0x81d3[6]][_0x81d3[76]]=function(_0x315cx18,_0x315cxd,_0x315cx12){var _0x315cx11=this[_0x81d3[63]](_0x315cx18);this[_0x81d3[64]](_0x315cx11,_0x315cxd);this[_0x81d3[77]](_0x315cx11,_0x315cx12);this[_0x81d3[1]][_0x81d3[66]](_0x315cx11);return _0x315cx11};Toolbar[_0x81d3[6]][_0x81d3[78]]=function(_0x315cx19){var _0x315cx7=this[_0x81d3[0]][_0x81d3[41]][_0x81d3[40]];var _0x315cx1a=function(){var _0x315cx1b=!_0x315cx7[_0x81d3[79]]();for(var _0x315cx14=0;_0x315cx14<_0x315cx19[_0x81d3[47]];_0x315cx14++){_0x315cx19[_0x315cx14][_0x81d3[61]](_0x315cx1b)}};_0x315cx7[_0x81d3[52]]()[_0x81d3[51]](mxEvent.CHANGE,_0x315cx1a);_0x315cx1a()};Toolbar[_0x81d3[6]][_0x81d3[80]]=function(_0x315cx19){var _0x315cx7=this[_0x81d3[0]][_0x81d3[41]][_0x81d3[40]];var _0x315cx1a=function(){var _0x315cx1c=false;if(!_0x315cx7[_0x81d3[79]]()){var _0x315cx1d=_0x315cx7[_0x81d3[81]]();for(var _0x315cx14=0;_0x315cx14<_0x315cx1d[_0x81d3[47]];_0x315cx14++){if(_0x315cx7[_0x81d3[53]]()[_0x81d3[82]](_0x315cx1d[_0x315cx14])){_0x315cx1c=true;break}}};for(var _0x315cx14=0;_0x315cx14<_0x315cx19[_0x81d3[47]];_0x315cx14++){_0x315cx19[_0x315cx14][_0x81d3[61]](_0x315cx1c)}};_0x315cx7[_0x81d3[52]]()[_0x81d3[51]](mxEvent.CHANGE,_0x315cx1a);_0x315cx1a()};Toolbar[_0x81d3[6]][_0x81d3[64]]=function(_0x315cx11,_0x315cxd){_0x315cx11[_0x81d3[85]](_0x81d3[83],_0x81d3[84]);if(_0x315cxd!=null){_0x315cx11[_0x81d3[85]](_0x81d3[86],_0x315cxd)};this[_0x81d3[87]](_0x315cx11)};Toolbar[_0x81d3[6]][_0x81d3[87]]=function(_0x315cx11){var _0x315cx18=_0x315cx11[_0x81d3[69]];_0x315cx11[_0x81d3[61]]=function(_0x315cx1e){_0x315cx11[_0x81d3[60]]=_0x315cx1e;if(_0x315cx1e){_0x315cx11[_0x81d3[69]]=_0x315cx18}else {_0x315cx11[_0x81d3[69]]=_0x315cx18+_0x81d3[88]}};_0x315cx11[_0x81d3[61]](true)};Toolbar[_0x81d3[6]][_0x81d3[77]]=function(_0x315cx11,_0x315cx12){if(_0x315cx12!=null){mxEvent[_0x81d3[51]](_0x315cx11,_0x81d3[89],function(_0x315cx4){if(_0x315cx11[_0x81d3[60]]){_0x315cx12(_0x315cx4)};mxEvent[_0x81d3[90]](_0x315cx4)})}};Toolbar[_0x81d3[6]][_0x81d3[63]]=function(_0x315cx18){var _0x315cx11=document[_0x81d3[68]](_0x81d3[91]);_0x315cx11[_0x81d3[85]](_0x81d3[92],_0x81d3[93]);_0x315cx11[_0x81d3[69]]=_0x81d3[94];var _0x315cx1f=document[_0x81d3[68]](_0x81d3[67]);_0x315cx1f[_0x81d3[69]]=_0x81d3[95]+_0x315cx18;_0x315cx11[_0x81d3[66]](_0x315cx1f);return _0x315cx11};Toolbar[_0x81d3[6]][_0x81d3[62]]=function(_0x315cxc,_0x315cxd){var _0x315cx11=document[_0x81d3[68]](_0x81d3[91]);_0x315cx11[_0x81d3[85]](_0x81d3[92],_0x81d3[93]);_0x315cx11[_0x81d3[69]]=_0x81d3[96];mxUtils[_0x81d3[97]](_0x315cx11,_0x315cxc);return _0x315cx11};Toolbar[_0x81d3[6]][_0x81d3[65]]=function(_0x315cx11,_0x315cxe,_0x315cx12,_0x315cx20){if(_0x315cx12!=null){var _0x315cx7=this[_0x81d3[0]][_0x81d3[41]][_0x81d3[40]];var _0x315cx10=null;mxEvent[_0x81d3[51]](_0x315cx11,_0x81d3[89],mxUtils[_0x81d3[4]](this,function(_0x315cx4){if(_0x315cx11[_0x81d3[60]]==null||_0x315cx11[_0x81d3[60]]){_0x315cx7[_0x81d3[98]][_0x81d3[3]]();_0x315cx10= new mxPopupMenu(_0x315cx12);_0x315cx10[_0x81d3[67]][_0x81d3[69]]+=_0x81d3[99];_0x315cx10[_0x81d3[100]]=_0x315cx20;_0x315cx10[_0x81d3[101]]=_0x315cxe;_0x315cx10[_0x81d3[102]]=true;_0x315cx10[_0x81d3[106]](_0x315cx11[_0x81d3[103]],_0x315cx11[_0x81d3[104]]+_0x315cx11[_0x81d3[105]]+34,null,_0x315cx4);this[_0x81d3[54]]=_0x315cx10};mxEvent[_0x81d3[90]](_0x315cx4)}))}}
\ No newline at end of file
+/**
+ * $Id: Toolbar.js,v 1.3 2013-02-20 16:21:29 gaudenz Exp $
+ * Copyright (c) 2006-2012, JGraph Ltd
+ */
+/**
+ * Construcs a new toolbar for the given editor.
+ */
+function Toolbar(editorUi, container)
+{
+       this.editorUi = editorUi;
+       this.container = container;
+       this.init();
+
+       // Global handler to hide the current menu
+       mxEvent.addGestureListeners(document, mxUtils.bind(this, function(evt)
+       {
+               this.hideMenu();
+       }));
+};
+
+/**
+ * Adds the toolbar elements.
+ */
+Toolbar.prototype.init = function()
+{
+       this.addItems(['save', 'publish', '-', 'print', 'undo', 'redo', '-', 'copy', 'cut', 'paste', 'delete', '-', 'duplicate', '-', 'actualSize', 'zoomIn', 'zoomOut', '-']);
+       var fontElt = this.addMenu('Helvetica', mxResources.get('fontFamily'), true, 'fontFamily');
+       fontElt.style.whiteSpace = 'nowrap';
+       fontElt.style.overflow = 'hidden';
+       fontElt.style.width = '70px';
+       this.addSeparator();
+       var sizeElt = this.addMenu('12', mxResources.get('fontSize'), true, 'fontSize');
+       sizeElt.style.whiteSpace = 'nowrap';
+       sizeElt.style.overflow = 'hidden';
+       sizeElt.style.width = '30px';
+
+       this.addItems(['-', 'bold', 'italic', 'underline']);
+       // Giuseppe Careri
+       // var align = this.addMenuFunction('geSprite-left', mxResources.get('align'), false, mxUtils.bind(this, function(menu)
+       // {
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ALIGN], [mxConstants.ALIGN_LEFT], 'geIcon geSprite geSprite-left', null).setAttribute('title', mxResources.get('left'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ALIGN], [mxConstants.ALIGN_CENTER], 'geIcon geSprite geSprite-center', null).setAttribute('title', mxResources.get('center'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ALIGN], [mxConstants.ALIGN_RIGHT], 'geIcon geSprite geSprite-right', null).setAttribute('title', mxResources.get('right'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_VERTICAL_ALIGN], [mxConstants.ALIGN_TOP], 'geIcon geSprite geSprite-top', null).setAttribute('title', mxResources.get('top'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_VERTICAL_ALIGN], [mxConstants.ALIGN_MIDDLE], 'geIcon geSprite geSprite-middle', null).setAttribute('title', mxResources.get('middle'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_VERTICAL_ALIGN], [mxConstants.ALIGN_BOTTOM], 'geIcon geSprite geSprite-bottom', null).setAttribute('title', mxResources.get('bottom'));
+       // }));
+       // this.addItems(['fontColor', '-']);
+       // var line = this.addMenuFunction('geSprite-straight', mxResources.get('line'), false, mxUtils.bind(this, function(menu)
+       // {
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_EDGE], [null], 'geIcon geSprite geSprite-straight', null).setAttribute('title', mxResources.get('straight'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_EDGE], ['entityRelationEdgeStyle'], 'geIcon geSprite geSprite-entity', null).setAttribute('title', mxResources.get('entityRelation'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_EDGE, mxConstants.STYLE_ELBOW], ['elbowEdgeStyle', 'horizontal'], 'geIcon geSprite geSprite-helbow', null).setAttribute('title', mxResources.get('horizontal'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_EDGE, mxConstants.STYLE_ELBOW], ['elbowEdgeStyle', 'vertical'], 'geIcon geSprite geSprite-velbow', null).setAttribute('title', mxResources.get('vertical'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_EDGE], ['segmentEdgeStyle'], 'geIcon geSprite geSprite-segment', null).setAttribute('title', mxResources.get('manual'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_EDGE], ['orthogonalEdgeStyle'], 'geIcon geSprite geSprite-orthogonal', null).setAttribute('title', mxResources.get('automatic'));
+       // }));
+       // var linestart = this.addMenuFunction('geSprite-startclassic', mxResources.get('lineend'), false, mxUtils.bind(this, function(menu)
+       // {
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.NONE, 0], 'geIcon geSprite geSprite-noarrow', null).setAttribute('title', mxResources.get('none'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_CLASSIC, 1], 'geIcon geSprite geSprite-startclassic', null).setAttribute('title', mxResources.get('classic'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_OPEN, 1], 'geIcon geSprite geSprite-startopen', null).setAttribute('title', mxResources.get('openArrow'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_BLOCK, 1], 'geIcon geSprite geSprite-startblock', null).setAttribute('title', mxResources.get('block'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_OVAL, 1], 'geIcon geSprite geSprite-startoval', null).setAttribute('title', mxResources.get('oval'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_DIAMOND, 1], 'geIcon geSprite geSprite-startdiamond', null).setAttribute('title', mxResources.get('diamond'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_DIAMOND_THIN, 1], 'geIcon geSprite geSprite-startthindiamond', null).setAttribute('title', mxResources.get('diamondThin'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_CLASSIC, 0], 'geIcon geSprite geSprite-startclassictrans', null).setAttribute('title', mxResources.get('classic'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_BLOCK, 0], 'geIcon geSprite geSprite-startblocktrans', null).setAttribute('title', mxResources.get('block'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_OVAL, 0], 'geIcon geSprite geSprite-startovaltrans', null).setAttribute('title', mxResources.get('oval'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_DIAMOND, 0], 'geIcon geSprite geSprite-startdiamondtrans', null).setAttribute('title', mxResources.get('diamond'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_DIAMOND_THIN, 0], 'geIcon geSprite geSprite-startthindiamondtrans', null).setAttribute('title', mxResources.get('diamondThin'));
+       // }));
+       // var lineend = this.addMenuFunction('geSprite-endclassic', mxResources.get('lineend'), false, mxUtils.bind(this, function(menu)
+       // {
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.NONE, 0], 'geIcon geSprite geSprite-noarrow', null).setAttribute('title', mxResources.get('none'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_CLASSIC, 1], 'geIcon geSprite geSprite-endclassic', null).setAttribute('title', mxResources.get('classic'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_OPEN, 1], 'geIcon geSprite geSprite-endopen', null).setAttribute('title', mxResources.get('openArrow'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_BLOCK, 1], 'geIcon geSprite geSprite-endblock', null).setAttribute('title', mxResources.get('block'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_OVAL, 1], 'geIcon geSprite geSprite-endoval', null).setAttribute('title', mxResources.get('oval'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_DIAMOND, 1], 'geIcon geSprite geSprite-enddiamond', null).setAttribute('title', mxResources.get('diamond'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_DIAMOND_THIN, 1], 'geIcon geSprite geSprite-endthindiamond', null).setAttribute('title', mxResources.get('diamondThin'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_CLASSIC, 0], 'geIcon geSprite geSprite-endclassictrans', null).setAttribute('title', mxResources.get('classic'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_BLOCK, 0], 'geIcon geSprite geSprite-endblocktrans', null).setAttribute('title', mxResources.get('block'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_OVAL, 0], 'geIcon geSprite geSprite-endovaltrans', null).setAttribute('title', mxResources.get('oval'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_DIAMOND, 0], 'geIcon geSprite geSprite-enddiamondtrans', null).setAttribute('title', mxResources.get('diamond'));
+       //      this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_DIAMOND_THIN, 0], 'geIcon geSprite geSprite-endthindiamondtrans', null).setAttribute('title', mxResources.get('diamondThin'));
+       // }));
+       // this.addItems(['-', 'strokeColor', 'image', 'fillColor']);
+       // this.addItem('geSprite-gradientcolor', 'gradientColor').setAttribute('title', mxResources.get('gradient'));
+       // this.addItems(['shadow']);
+
+       var graph = this.editorUi.editor.graph;
+
+       // Update font size and font family labels
+       var update = mxUtils.bind(this, function()
+       {
+               var ff = 'Helvetica';
+               var fs = '12';
+       var state = graph.getView().getState(graph.getSelectionCell());
+
+       if (state != null)
+       {
+               ff = state.style[mxConstants.STYLE_FONTFAMILY] || ff;
+               fs = state.style[mxConstants.STYLE_FONTSIZE] || fs;
+
+               if (ff.length > 10)
+               {
+                       ff = ff.substring(0, 8) + '...';
+               }
+
+               fontElt.innerHTML = ff;
+               sizeElt.innerHTML = fs;
+       }
+       });
+
+    graph.getSelectionModel().addListener(mxEvent.CHANGE, update);
+    graph.getModel().addListener(mxEvent.CHANGE, update);
+
+       // Giuseppe Careri
+       // Updates button states
+  //this.addEdgeSelectionHandler([line, linestart, lineend]);
+       //this.addSelectionHandler([align]);
+};
+
+/**
+ * Hides the current menu.
+ */
+Toolbar.prototype.hideMenu = function()
+{
+       if (this.currentMenu != null)
+       {
+               this.currentMenu.hideMenu();
+               this.currentMenu.destroy();
+               this.currentMenu = null;
+       }
+};
+
+/**
+ * Adds a label to the toolbar.
+ */
+Toolbar.prototype.addMenu = function(label, tooltip, showLabels, name)
+{
+       var menu = this.editorUi.menus.get(name);
+       var elt = this.addMenuFunction(label, tooltip, showLabels, menu.funct);
+
+       menu.addListener('stateChanged', function()
+       {
+               elt.setEnabled(menu.enabled);
+       });
+
+       return elt;
+};
+
+/**
+ * Adds a label to the toolbar.
+ */
+Toolbar.prototype.addMenuFunction = function(label, tooltip, showLabels, funct)
+{
+       var elt = (showLabels) ? this.createLabel(label) : this.createButton(label);
+       this.initElement(elt, tooltip);
+       this.addMenuHandler(elt, showLabels, funct);
+       this.container.appendChild(elt);
+
+       return elt;
+};
+
+/**
+ * Adds a separator to the separator.
+ */
+Toolbar.prototype.addSeparator = function()
+{
+       var elt = document.createElement('div');
+       elt.className = 'geSeparator';
+       this.container.appendChild(elt);
+
+       return elt;
+};
+
+/**
+ * Adds given action item
+ */
+Toolbar.prototype.addItems = function(keys)
+{
+       for (var i = 0; i < keys.length; i++)
+       {
+               var key = keys[i];
+
+               if (key == '-')
+               {
+                       this.addSeparator();
+               }
+               else
+               {
+                       this.addItem('geSprite-' + key.toLowerCase(), key);
+               }
+       }
+};
+
+/**
+ * Adds given action item
+ */
+Toolbar.prototype.addItem = function(sprite, key)
+{
+       var action = this.editorUi.actions.get(key);
+       var elt = null;
+
+       if (action != null)
+       {
+               elt = this.addButton(sprite, action.label, action.funct);
+               elt.setEnabled(action.enabled);
+
+               action.addListener('stateChanged', function()
+               {
+                       elt.setEnabled(action.enabled);
+               });
+       }
+
+       return elt;
+};
+
+/**
+ * Adds a button to the toolbar.
+ */
+Toolbar.prototype.addButton = function(classname, tooltip, funct)
+{
+       var elt = this.createButton(classname);
+
+       this.initElement(elt, tooltip);
+       this.addClickHandler(elt, funct);
+       this.container.appendChild(elt);
+
+       return elt;
+};
+
+/**
+ * Updates the states of the given toolbar items based on the selection.
+ */
+Toolbar.prototype.addSelectionHandler = function(items)
+{
+       var graph = this.editorUi.editor.graph;
+
+       var selectionListener = function()
+    {
+       var selected = !graph.isSelectionEmpty();
+
+       for (var i = 0; i < items.length; i++)
+       {
+               items[i].setEnabled(selected);
+       }
+    };
+
+    graph.getSelectionModel().addListener(mxEvent.CHANGE, selectionListener);
+    selectionListener();
+};
+
+/**
+ * Updates the states of the given toolbar items based on the selection.
+ */
+Toolbar.prototype.addEdgeSelectionHandler = function(items)
+{
+       var graph = this.editorUi.editor.graph;
+
+       var selectionListener = function()
+    {
+               var edgeSelected = false;
+
+               if (!graph.isSelectionEmpty())
+               {
+                       var cells = graph.getSelectionCells();
+
+                       for (var i = 0; i < cells.length; i++)
+                       {
+                               if (graph.getModel().isEdge(cells[i]))
+                               {
+                                       edgeSelected = true;
+                                       break;
+                               }
+                       }
+               }
+
+       for (var i = 0; i < items.length; i++)
+       {
+               items[i].setEnabled(edgeSelected);
+       }
+    };
+
+    graph.getSelectionModel().addListener(mxEvent.CHANGE, selectionListener);
+    selectionListener();
+};
+
+/**
+ * Initializes the given toolbar element.
+ */
+Toolbar.prototype.initElement = function(elt, tooltip)
+{
+       elt.setAttribute('tabindex', '0');
+
+       // Adds tooltip
+       if (tooltip != null)
+       {
+               elt.setAttribute('title', tooltip);
+       }
+
+       this.addEnabledState(elt);
+};
+
+/**
+ * Adds enabled state with setter to DOM node (avoids JS wrapper).
+ */
+Toolbar.prototype.addEnabledState = function(elt)
+{
+       var classname = elt.className;
+
+       elt.setEnabled = function(value)
+       {
+               elt.enabled = value;
+
+               if (value)
+               {
+                       elt.className = classname;
+               }
+               else
+               {
+                       elt.className = classname + ' geDisabled';
+               }
+       };
+
+       elt.setEnabled(true);
+};
+
+/**
+ * Adds enabled state with setter to DOM node (avoids JS wrapper).
+ */
+Toolbar.prototype.addClickHandler = function(elt, funct)
+{
+       if (funct != null)
+       {
+               mxEvent.addListener(elt, 'click', function(evt)
+               {
+                       if (elt.enabled)
+                       {
+                               funct(evt);
+                       }
+
+                       mxEvent.consume(evt);
+               });
+       }
+};
+
+/**
+ * Creates and returns a new button.
+ */
+Toolbar.prototype.createButton = function(classname)
+{
+       var elt = document.createElement('a');
+       elt.setAttribute('href', 'javascript:void(0);');
+       elt.className = 'geButton';
+
+       var inner = document.createElement('div');
+       inner.className = 'geSprite ' + classname;
+       elt.appendChild(inner);
+
+       return elt;
+};
+
+/**
+ * Creates and returns a new button.
+ */
+Toolbar.prototype.createLabel = function(label, tooltip)
+{
+       var elt = document.createElement('a');
+       elt.setAttribute('href', 'javascript:void(0);');
+       elt.className = 'geLabel';
+       mxUtils.write(elt, label);
+
+       return elt;
+};
+
+/**
+ * Adds a handler for showing a menu in the given element.
+ */
+Toolbar.prototype.addMenuHandler = function(elt, showLabels, funct, showAll)
+{
+       if (funct != null)
+       {
+               var graph = this.editorUi.editor.graph;
+               var menu = null;
+
+               mxEvent.addListener(elt, 'click', mxUtils.bind(this, function(evt)
+               {
+                       if (elt.enabled == null || elt.enabled)
+                       {
+                               graph.panningHandler.hideMenu();
+                               menu = new mxPopupMenu(funct);
+                               menu.div.className += ' geToolbarMenu';
+                               menu.showDisabled = showAll;
+                               menu.labels = showLabels;
+                               menu.autoExpand = true;
+
+                               menu.popup(elt.offsetLeft, elt.offsetTop + elt.offsetHeight + 34, null, evt);
+                               this.currentMenu = menu;
+                       }
+
+                       mxEvent.consume(evt);
+               }));
+       }
+};
index 51b02d8..39607c6 100644 (file)
@@ -1 +1,283 @@
-var _0x20ac=["\x68\x72\x65\x66","\x6C\x6F\x63\x61\x74\x69\x6F\x6E","\x3F","\x6C\x61\x73\x74\x49\x6E\x64\x65\x78\x4F\x66","\x26","\x73\x70\x6C\x69\x74","\x73\x75\x62\x73\x74\x72\x69\x6E\x67","\x6C\x65\x6E\x67\x74\x68","\x3D","\x69\x6E\x64\x65\x78\x4F\x66","\x68\x74\x74\x70\x3A\x2F\x2F\x65\x78\x70\x2E\x64\x72\x61\x77\x2E\x69\x6F\x2F\x49\x6D\x61\x67\x65\x45\x78\x70\x6F\x72\x74\x32\x2F\x65\x78\x70\x6F\x72\x74","\x68\x74\x74\x70\x3A\x2F\x2F\x6C\x6F\x63\x61\x6C\x68\x6F\x73\x74\x3A\x33\x30\x30\x30","\x61\x70\x69\x2F\x73\x71\x75\x61\x72\x65\x2F\x70\x72\x6F\x6A\x65\x63\x74\x73\x2F","\x2F\x61\x70\x69\x2F\x76\x61\x72\x69\x61\x62\x6C\x65\x73","\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x73\x71\x75\x61\x72\x65\x2F\x73\x74\x65\x6E\x63\x69\x6C\x73","\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x73\x71\x75\x61\x72\x65\x2F\x73\x68\x61\x70\x65\x73","\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x6D\x78\x67\x72\x61\x70\x68\x2F\x69\x6D\x61\x67\x65\x73","\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x6D\x78\x67\x72\x61\x70\x68\x2F\x73\x74\x79\x6C\x65\x73","\x61\x70\x69\x2F\x73\x71\x75\x61\x72\x65\x2F\x70\x72\x6F\x6A\x65\x63\x74\x73\x2F\x6F\x70\x65\x6E","\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x73\x71\x75\x61\x72\x65\x2F\x74\x65\x6D\x70\x6C\x61\x74\x65\x73","\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x73\x71\x75\x61\x72\x65\x2F\x72\x65\x73\x6F\x75\x72\x63\x65\x73","\x2F\x64\x69\x61","\x63\x75\x73\x74\x6F\x6D","\x4E\x47\x5F\x54\x52\x41\x4E\x53\x4C\x41\x54\x45\x5F\x4C\x41\x4E\x47\x5F\x4B\x45\x59","\x67\x65\x74\x49\x74\x65\x6D","\x6C\x6F\x67","\x65\x6E","\x65\x6E\x5F\x45\x4E","\x69\x74","\x6D\x78\x4C\x61\x6E\x67\x75\x61\x67\x65","\x61\x72","\x62\x73","\x63\x73","\x64\x61","\x64\x65","\x65\x6C","\x65\x73","\x65\x73\x2D\x61\x72","\x66\x72","\x68\x75","\x69\x64","\x6A\x61","\x6B\x6F","\x6E\x6C","\x6E\x6F","\x70\x6C","\x70\x74\x2D\x62\x72","\x70\x74","\x72\x6F","\x72\x75","\x73\x72","\x73\x76","\x74\x68","\x74\x72","\x75\x6B","\x7A\x68","\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x6D\x78\x67\x72\x61\x70\x68","\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x6D\x78\x67\x72\x61\x70\x68\x2F\x6A\x73","\x55\x53\x20\x45\x6E\x67\x6C\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65","\x55\x53\x20\x45\x6E\x67\x6C\x69\x73\x68\x20\x4D\x61\x6C\x65","\x55\x4B\x20\x45\x6E\x67\x6C\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65","\x55\x4B\x20\x45\x6E\x67\x6C\x69\x73\x68\x20\x4D\x61\x6C\x65","\x41\x75\x73\x74\x72\x61\x6C\x69\x61\x6E\x20\x45\x6E\x67\x6C\x69\x73\x68","\x55\x53\x20\x53\x70\x61\x6E\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65","\x55\x53\x20\x53\x70\x61\x6E\x69\x73\x68\x20\x4D\x61\x6C\x65","\x43\x68\x69\x6E\x65\x73\x65\x20\x46\x65\x6D\x61\x6C\x65","\x43\x68\x69\x6E\x65\x73\x65\x20\x4D\x61\x6C\x65","\x48\x6F\x6E\x67\x20\x4B\x6F\x6E\x67\x20\x43\x61\x6E\x74\x6F\x6E\x65\x73\x65\x20\x46\x65\x6D\x61\x6C\x65","\x54\x61\x69\x77\x61\x6E\x20\x43\x68\x69\x6E\x65\x73\x65\x20\x46\x65\x6D\x61\x6C\x65","\x4A\x61\x70\x61\x6E\x65\x73\x65\x20\x46\x65\x6D\x61\x6C\x65","\x4A\x61\x70\x61\x6E\x65\x73\x65\x20\x4D\x61\x6C\x65","\x4B\x6F\x72\x65\x61\x6E\x20\x46\x65\x6D\x61\x6C\x65","\x4B\x6F\x72\x65\x61\x6E\x20\x4D\x61\x6C\x65","\x43\x61\x6E\x61\x64\x69\x61\x6E\x20\x45\x6E\x67\x6C\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65","\x48\x75\x6E\x67\x61\x72\x69\x61\x6E\x20\x46\x65\x6D\x61\x6C\x65","\x42\x72\x61\x7A\x69\x6C\x69\x61\x6E\x20\x50\x6F\x72\x74\x75\x67\x75\x65\x73\x65\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x50\x6F\x72\x74\x75\x67\x75\x65\x73\x65\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x50\x6F\x72\x74\x75\x67\x75\x65\x73\x65\x20\x4D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x53\x70\x61\x6E\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x53\x70\x61\x6E\x69\x73\x68\x20\x4D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x43\x61\x74\x61\x6C\x61\x6E\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x43\x7A\x65\x63\x68\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x44\x61\x6E\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x46\x69\x6E\x6E\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x46\x72\x65\x6E\x63\x68\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x46\x72\x65\x6E\x63\x68\x20\x4D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x4E\x6F\x72\x77\x65\x67\x69\x61\x6E\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x44\x75\x74\x63\x68\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x50\x6F\x6C\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x49\x74\x61\x6C\x69\x61\x6E\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x54\x75\x72\x6B\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65\x09","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x54\x75\x72\x6B\x69\x73\x68\x20\x4D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x47\x65\x72\x6D\x61\x6E\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x47\x65\x72\x6D\x61\x6E\x20\x4D\x61\x6C\x65","\x52\x75\x73\x73\x69\x61\x6E\x20\x46\x65\x6D\x61\x6C\x65","\x52\x75\x73\x73\x69\x61\x6E\x20\x4D\x61\x6C\x65","\x53\x77\x65\x64\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65","\x43\x61\x6E\x61\x64\x69\x61\x6E\x20\x46\x72\x65\x6E\x63\x68\x20\x46\x65\x6D\x61\x6C\x65","\x43\x61\x6E\x61\x64\x69\x61\x6E\x20\x46\x72\x65\x6E\x63\x68\x20\x4D\x61\x6C\x65","\x45\x6E\x67\x6C\x69\x73\x68\x20\x28\x55\x53\x29","\x45\x6E\x67\x6C\x69\x73\x68\x20\x28\x43\x61\x6E\x61\x64\x61\x29","\x45\x6E\x67\x6C\x69\x73\x68\x20\x28\x55\x4B\x29","\x45\x6E\x67\x6C\x69\x73\x68\x20\x28\x41\x75\x73\x74\x72\x61\x6C\x69\x61\x29","\x53\x70\x61\x6E\x69\x73\x68\x20\x28\x53\x70\x61\x69\x6E\x29","\x53\x70\x61\x6E\x69\x73\x68\x20\x28\x4D\x65\x78\x69\x63\x6F\x29","\x49\x74\x61\x6C\x69\x61\x6E\x20\x28\x49\x74\x61\x6C\x79\x29\x20\x2F\x20\x46\x69\x6E\x6E\x69\x73\x68\x20\x28\x46\x69\x6E\x6C\x61\x6E\x64\x29","\x46\x72\x65\x6E\x63\x68\x20\x28\x46\x72\x61\x6E\x63\x65\x29","\x46\x72\x65\x6E\x63\x68\x20\x28\x43\x61\x6E\x61\x64\x61\x29","\x50\x6F\x6C\x69\x73\x68\x20\x28\x50\x6F\x6C\x61\x6E\x64\x29","\x50\x6F\x72\x74\x75\x67\x75\x65\x73\x65\x20\x28\x50\x6F\x72\x74\x75\x67\x61\x6C\x29","\x43\x61\x74\x61\x6C\x61\x6E\x20\x28\x43\x61\x74\x61\x6C\x61\x6E\x29","\x43\x68\x69\x6E\x65\x73\x65\x20\x28\x54\x61\x69\x77\x61\x6E\x29","\x44\x61\x6E\x69\x73\x68\x20\x28\x44\x65\x6E\x6D\x61\x72\x6B\x29","\x47\x65\x72\x6D\x61\x6E\x20\x28\x47\x65\x72\x6D\x61\x6E\x79\x29","\x4A\x61\x70\x61\x6E\x65\x73\x65\x20\x28\x4A\x61\x70\x61\x6E\x29","\x4B\x6F\x72\x65\x61\x6E\x20\x28\x4B\x6F\x72\x65\x61\x29","\x44\x75\x74\x63\x68\x20\x28\x4E\x65\x74\x68\x65\x72\x6C\x61\x6E\x64\x73\x29","\x4E\x6F\x72\x77\x65\x67\x69\x61\x6E\x20\x28\x4E\x6F\x72\x77\x61\x79\x29","\x50\x6F\x72\x74\x75\x67\x75\x65\x73\x65\x20\x28\x42\x72\x61\x7A\x69\x6C\x29","\x52\x75\x73\x73\x69\x61\x6E\x20\x28\x52\x75\x73\x73\x69\x61\x29","\x53\x77\x65\x64\x69\x73\x68\x20\x28\x53\x77\x65\x64\x65\x6E\x29","\x43\x68\x69\x6E\x65\x73\x65\x20\x28\x43\x68\x69\x6E\x61\x29","\x43\x68\x69\x6E\x65\x73\x65\x20\x28\x48\x6F\x6E\x67\x20\x4B\x6F\x6E\x67\x29","\x44\x65\x66\x61\x75\x6C\x74","\x44\x61\x74\x65","\x55\x53\x20\x4D\x6F\x6E\x65\x79","\x4E\x75\x6D\x62\x65\x72\x73\x20\x74\x6F\x20\x39","\x4E\x75\x6D\x62\x65\x72\x73\x20\x74\x6F\x20\x39\x39","\x4E\x75\x6D\x62\x65\x72\x73\x20\x74\x6F\x20\x39\x39\x39","\x54\x69\x6D\x65","\x50\x68\x6F\x6E\x65\x20\x6E\x75\x6D\x62\x65\x72","\x53\x74\x72\x65\x65\x74\x73","\x55\x53\x20\x43\x69\x74\x79\x2F\x53\x74\x61\x74\x65\x73","\x41\x66\x72\x69\x6B\x61\x61\x6E\x73","\x41\x6C\x62\x61\x6E\x69\x61\x6E","\x41\x6D\x68\x61\x72\x69\x63","\x41\x72\x61\x62\x69\x63","\x41\x72\x6D\x65\x6E\x69\x61\x6E","\x41\x7A\x65\x72\x62\x61\x69\x6A\x61\x6E\x69","\x42\x61\x73\x71\x75\x65","\x42\x65\x6C\x61\x72\x75\x73\x69\x61\x6E","\x42\x65\x6E\x67\x61\x6C\x69","\x42\x69\x68\x61\x72\x69","\x42\x6F\x73\x6E\x69\x61\x6E","\x42\x72\x65\x74\x6F\x6E","\x42\x75\x6C\x67\x61\x72\x69\x61\x6E","\x43\x61\x6D\x62\x6F\x64\x69\x61\x6E","\x43\x61\x74\x61\x6C\x61\x6E","\x43\x68\x69\x6E\x65\x73\x65\x20\x28\x53\x69\x6D\x70\x6C\x69\x66\x69\x65\x64\x29","\x43\x68\x69\x6E\x65\x73\x65\x20\x28\x54\x72\x61\x64\x69\x74\x69\x6F\x6E\x61\x6C\x29","\x43\x6F\x72\x73\x69\x63\x61\x6E","\x43\x72\x6F\x61\x74\x69\x61\x6E","\x43\x7A\x65\x63\x68","\x44\x61\x6E\x69\x73\x68","\x44\x75\x74\x63\x68","\x45\x6E\x67\x6C\x69\x73\x68","\x45\x73\x70\x65\x72\x61\x6E\x74\x6F","\x45\x73\x74\x6F\x6E\x69\x61\x6E","\x46\x61\x72\x6F\x65\x73\x65","\x46\x69\x6C\x69\x70\x69\x6E\x6F","\x46\x69\x6E\x6E\x69\x73\x68","\x46\x72\x65\x6E\x63\x68","\x46\x72\x69\x73\x69\x61\x6E","\x47\x61\x6C\x69\x63\x69\x61\x6E","\x47\x65\x6F\x72\x67\x69\x61\x6E","\x47\x65\x72\x6D\x61\x6E","\x47\x72\x65\x65\x6B","\x47\x75\x61\x72\x61\x6E\x69","\x47\x75\x6A\x61\x72\x61\x74\x69","\x48\x61\x63\x6B\x65\x72","\x48\x61\x75\x73\x61","\x48\x65\x62\x72\x65\x77","\x48\x69\x6E\x64\x69","\x48\x75\x6E\x67\x61\x72\x69\x61\x6E","\x49\x63\x65\x6C\x61\x6E\x64\x69\x63","\x49\x6E\x64\x6F\x6E\x65\x73\x69\x61\x6E","\x49\x6E\x74\x65\x72\x6C\x69\x6E\x67\x75\x61","\x49\x72\x69\x73\x68","\x49\x74\x61\x6C\x69\x61\x6E","\x4A\x61\x76\x61\x6E\x65\x73\x65","\x4A\x61\x70\x61\x6E\x65\x73\x65","\x4B\x61\x6E\x6E\x61\x64\x61","\x4B\x61\x7A\x61\x6B\x68","\x4B\x69\x6E\x79\x61\x72\x77\x61\x6E\x64\x61","\x4B\x69\x72\x75\x6E\x64\x69","\x4B\x6C\x69\x6E\x67\x6F\x6E","\x4B\x75\x72\x64\x69\x73\x68","\x4B\x6F\x72\x65\x61\x6E","\x4B\x79\x72\x67\x79\x7A","\x4C\x61\x6F\x74\x68\x69\x61\x6E","\x4C\x61\x74\x69\x6E","\x4C\x61\x74\x76\x69\x61\x6E","\x4C\x69\x6E\x67\x61\x6C\x61","\x4C\x69\x74\x68\x75\x61\x6E\x69\x61\x6E","\x4D\x61\x63\x65\x64\x6F\x6E\x69\x61\x6E","\x4D\x61\x6C\x61\x67\x61\x73\x79","\x4D\x61\x6C\x61\x79","\x4D\x61\x6C\x61\x79\x61\x6C\x61\x6D","\x4D\x61\x6C\x74\x65\x73\x65","\x4D\x61\x6F\x72\x69","\x4D\x61\x72\x61\x74\x68\x69","\x4D\x6F\x6C\x64\x61\x76\x69\x61\x6E","\x4D\x6F\x6E\x67\x6F\x6C\x69\x61\x6E","\x4D\x6F\x6E\x74\x65\x6E\x65\x67\x72\x69\x6E","\x4E\x65\x70\x61\x6C\x69","\x4E\x6F\x72\x77\x65\x67\x69\x61\x6E","\x4E\x6F\x72\x77\x65\x67\x69\x61\x6E\x20\x28\x4E\x79\x6E\x6F\x72\x73\x6B\x29","\x4F\x63\x63\x69\x74\x61\x6E","\x4F\x72\x69\x79\x61","\x4F\x72\x6F\x6D\x6F","\x50\x61\x73\x68\x74\x6F","\x50\x65\x72\x73\x69\x61\x6E","\x50\x69\x72\x61\x74\x65","\x50\x6F\x6C\x69\x73\x68","\x50\x75\x6E\x6A\x61\x62\x69","\x51\x75\x65\x63\x68\x75\x61","\x52\x6F\x6D\x61\x6E\x69\x61\x6E","\x52\x6F\x6D\x61\x6E\x73\x68","\x52\x75\x73\x73\x69\x61\x6E","\x53\x63\x6F\x74\x73\x20\x47\x61\x65\x6C\x69\x63","\x53\x65\x72\x62\x69\x61\x6E","\x53\x65\x72\x62\x6F\x2D\x43\x72\x6F\x61\x74\x69\x61\x6E","\x53\x65\x73\x6F\x74\x68\x6F","\x53\x68\x6F\x6E\x61","\x53\x69\x6E\x64\x68\x69","\x53\x69\x6E\x68\x61\x6C\x65\x73\x65","\x53\x6C\x6F\x76\x61\x6B","\x53\x6C\x6F\x76\x65\x6E\x69\x61\x6E","\x53\x6F\x6D\x61\x6C\x69","\x53\x70\x61\x6E\x69\x73\x68","\x53\x75\x6E\x64\x61\x6E\x65\x73\x65","\x53\x77\x61\x68\x69\x6C\x69","\x53\x77\x65\x64\x69\x73\x68","\x54\x61\x6A\x69\x6B","\x54\x61\x6D\x69\x6C","\x54\x61\x74\x61\x72","\x54\x65\x6C\x75\x67\x75","\x54\x68\x61\x69","\x54\x69\x67\x72\x69\x6E\x79\x61","\x54\x6F\x6E\x67\x61","\x54\x75\x72\x6B\x69\x73\x68","\x54\x75\x72\x6B\x6D\x65\x6E","\x54\x77\x69","\x55\x69\x67\x68\x75\x72","\x55\x6B\x72\x61\x69\x6E\x69\x61\x6E","\x55\x72\x64\x75","\x55\x7A\x62\x65\x6B","\x56\x69\x65\x74\x6E\x61\x6D\x65\x73\x65","\x57\x65\x6C\x73\x68","\x58\x68\x6F\x73\x61","\x59\x69\x64\x64\x69\x73\x68","\x59\x6F\x72\x75\x62\x61","\x5A\x75\x6C\x75"];var urlParams=(function(_0xd08bx2){var _0xd08bx3= new Object();var _0xd08bx4=_0xd08bx2[_0x20ac[3]](_0x20ac[2]);if(_0xd08bx4>0){var _0xd08bx5=_0xd08bx2[_0x20ac[6]](_0xd08bx4+1)[_0x20ac[5]](_0x20ac[4]);for(var _0xd08bx6=0;_0xd08bx6<_0xd08bx5[_0x20ac[7]];_0xd08bx6++){_0xd08bx4=_0xd08bx5[_0xd08bx6][_0x20ac[9]](_0x20ac[8]);if(_0xd08bx4>0){_0xd08bx3[_0xd08bx5[_0xd08bx6][_0x20ac[6]](0,_0xd08bx4)]=_0xd08bx5[_0xd08bx6][_0x20ac[6]](_0xd08bx4+1)}}};return _0xd08bx3})(window[_0x20ac[1]][_0x20ac[0]]);var t0= new Date();var MAX_REQUEST_SIZE=10485760;var MAX_WIDTH=12000;var MAX_HEIGHT=12000;var EXPORT_URL=_0x20ac[10];var SHARE_HOST=_0x20ac[11];var SAVE_URL=_0x20ac[12];var VARIABLE_URL=_0x20ac[13];var STENCIL_PATH=_0x20ac[14];var SHAPES_PATH=_0x20ac[15];var IMAGE_PATH=_0x20ac[16];var STYLE_PATH=_0x20ac[17];var CSS_PATH=_0x20ac[17];var OPEN_FORM=_0x20ac[18];var TEMPLATE_PATH=_0x20ac[19];var RESOURCES_PATH=_0x20ac[20];var RESOURCE_BASE=RESOURCES_PATH+_0x20ac[21];var tapAndHoldStartsConnection=true;var showConnectorImg=true;var mxLoadResources=false;console[_0x20ac[25]](_0x20ac[22],localStorage[_0x20ac[24]](_0x20ac[23]));switch(localStorage[_0x20ac[24]](_0x20ac[23])){case _0x20ac[27]:mxLanguage=_0x20ac[26];break;case _0x20ac[28]:mxLanguage=_0x20ac[28];break;default:mxLanguage=_0x20ac[26]};console[_0x20ac[25]](_0x20ac[29],mxLanguage);var mxLanguages=[_0x20ac[30],_0x20ac[31],_0x20ac[32],_0x20ac[33],_0x20ac[34],_0x20ac[35],_0x20ac[36],_0x20ac[37],_0x20ac[38],_0x20ac[39],_0x20ac[40],_0x20ac[28],_0x20ac[41],_0x20ac[42],_0x20ac[43],_0x20ac[44],_0x20ac[45],_0x20ac[46],_0x20ac[47],_0x20ac[48],_0x20ac[49],_0x20ac[50],_0x20ac[51],_0x20ac[52],_0x20ac[53],_0x20ac[54],_0x20ac[55]];var mxBasePath=_0x20ac[56];var geBasePath=_0x20ac[57];var ISPEECHLANG={usenglishfemale:_0x20ac[58],usenglishmale:_0x20ac[59],ukenglishfemale:_0x20ac[60],ukenglishmale:_0x20ac[61],auenglishfemale:_0x20ac[62],usspanishfemale:_0x20ac[63],usspanishmale:_0x20ac[64],chchinesefemale:_0x20ac[65],chchinesemale:_0x20ac[66],hkchinesefemale:_0x20ac[67],twchinesefemale:_0x20ac[68],jpjapanesefemale:_0x20ac[69],jpjapanesemale:_0x20ac[70],krkoreanfemale:_0x20ac[71],krkoreanmale:_0x20ac[72],caenglishfemale:_0x20ac[73],huhungarianfemale:_0x20ac[74],brportuguesefemale:_0x20ac[75],eurportuguesefemale:_0x20ac[76],eurportuguesemale:_0x20ac[77],eurspanishfemale:_0x20ac[78],eurspanishmale:_0x20ac[79],eurcatalanfemale:_0x20ac[80],eurczechfemale:_0x20ac[81],eurdanishfemale:_0x20ac[82],eurfinnishfemale:_0x20ac[83],eurfrenchfemale:_0x20ac[84],eurfrenchmale:_0x20ac[85],eurnorwegianfemale:_0x20ac[86],eurdutchfemale:_0x20ac[87],eurpolishfemale:_0x20ac[88],euritalianfemale:_0x20ac[89],eurturkishfemale:_0x20ac[90],eurturkishmale:_0x20ac[91],eurgermanfemale:_0x20ac[92],eurgermanmale:_0x20ac[93],rurussianfemale:_0x20ac[94],rurussianmale:_0x20ac[95],swswedishfemale:_0x20ac[96],cafrenchfemale:_0x20ac[97],cafrenchmale:_0x20ac[98]};var ISPEECHASRLANG={"\x65\x6E\x2D\x55\x53":_0x20ac[99],"\x65\x6E\x2D\x43\x41":_0x20ac[100],"\x65\x6E\x2D\x47\x42":_0x20ac[101],"\x65\x6E\x2D\x41\x55":_0x20ac[102],"\x65\x73\x2D\x45\x53":_0x20ac[103],"\x65\x73\x2D\x4D\x58":_0x20ac[104],"\x69\x74\x2D\x49\x54":_0x20ac[105],"\x66\x72\x2D\x46\x52":_0x20ac[106],"\x66\x72\x2D\x43\x41":_0x20ac[107],"\x70\x6C\x2D\x50\x4C":_0x20ac[108],"\x70\x74\x2D\x50\x54":_0x20ac[109],"\x63\x61\x2D\x45\x53":_0x20ac[110],"\x7A\x68\x2D\x54\x57":_0x20ac[111],"\x64\x61\x2D\x44\x4B":_0x20ac[112],"\x66\x72\x2D\x46\x52":_0x20ac[113],"\x6A\x61\x2D\x4A\x50":_0x20ac[114],"\x6B\x6F\x2D\x4B\x52":_0x20ac[115],"\x6E\x6C\x2D\x4E\x4C":_0x20ac[116],"\x6E\x62\x2D\x4E\x4F":_0x20ac[117],"\x70\x74\x2D\x42\x52":_0x20ac[118],"\x72\x75\x2D\x52\x55":_0x20ac[119],"\x73\x76\x2D\x53\x45":_0x20ac[120],"\x7A\x68\x2D\x43\x4E":_0x20ac[121],"\x7A\x68\x2D\x48\x4B":_0x20ac[122]};var ISPEECHASRMODEL={0:_0x20ac[123],date:_0x20ac[124],usmoney:_0x20ac[125],numbersto9:_0x20ac[126],numbersto99:_0x20ac[127],numbersto999:_0x20ac[128],time:_0x20ac[129],phonenumber:_0x20ac[130],streets:_0x20ac[131],citystate:_0x20ac[132]};var GOOGLETTSLANG={"\x61\x66":_0x20ac[133],"\x73\x71":_0x20ac[134],"\x61\x6D":_0x20ac[135],"\x61\x72":_0x20ac[136],"\x68\x79":_0x20ac[137],"\x61\x7A":_0x20ac[138],"\x65\x75":_0x20ac[139],"\x62\x65":_0x20ac[140],"\x62\x6E":_0x20ac[141],"\x62\x68":_0x20ac[142],"\x62\x73":_0x20ac[143],"\x62\x72":_0x20ac[144],"\x62\x67":_0x20ac[145],"\x6B\x6D":_0x20ac[146],"\x63\x61":_0x20ac[147],"\x7A\x68\x2D\x43\x4E":_0x20ac[148],"\x7A\x68\x2D\x54\x57":_0x20ac[149],"\x63\x6F":_0x20ac[150],"\x68\x72":_0x20ac[151],"\x63\x73":_0x20ac[152],"\x64\x61":_0x20ac[153],"\x6E\x6C":_0x20ac[154],"\x65\x6E":_0x20ac[155],"\x65\x6F":_0x20ac[156],"\x65\x74":_0x20ac[157],"\x66\x6F":_0x20ac[158],"\x74\x6C":_0x20ac[159],"\x66\x69":_0x20ac[160],"\x66\x72":_0x20ac[161],"\x66\x79":_0x20ac[162],"\x67\x6C":_0x20ac[163],"\x6B\x61":_0x20ac[164],"\x64\x65":_0x20ac[165],"\x65\x6C":_0x20ac[166],"\x67\x6E":_0x20ac[167],"\x67\x75":_0x20ac[168],"\x78\x78\x2D\x68\x61\x63\x6B\x65\x72":_0x20ac[169],"\x68\x61":_0x20ac[170],"\x69\x77":_0x20ac[171],"\x68\x69":_0x20ac[172],"\x68\x75":_0x20ac[173],"\x69\x73":_0x20ac[174],"\x69\x64":_0x20ac[175],"\x69\x61":_0x20ac[176],"\x67\x61":_0x20ac[177],"\x69\x74":_0x20ac[178],"\x6A\x77":_0x20ac[179],"\x6A\x61":_0x20ac[180],"\x6B\x6E":_0x20ac[181],"\x6B\x6B":_0x20ac[182],"\x72\x77":_0x20ac[183],"\x72\x6E":_0x20ac[184],"\x78\x78\x2D\x6B\x6C\x69\x6E\x67\x6F\x6E":_0x20ac[185],"\x6B\x75":_0x20ac[186],"\x6B\x6F":_0x20ac[187],"\x6B\x79":_0x20ac[188],"\x6C\x6F":_0x20ac[189],"\x6C\x61":_0x20ac[190],"\x6C\x76":_0x20ac[191],"\x6C\x6E":_0x20ac[192],"\x6C\x74":_0x20ac[193],"\x6D\x6B":_0x20ac[194],"\x6D\x67":_0x20ac[195],"\x6D\x73":_0x20ac[196],"\x6D\x6C":_0x20ac[197],"\x6D\x74":_0x20ac[198],"\x6D\x69":_0x20ac[199],"\x6D\x72":_0x20ac[200],"\x6D\x6F":_0x20ac[201],"\x6D\x6E":_0x20ac[202],"\x73\x72\x2D\x4D\x45":_0x20ac[203],"\x6E\x65":_0x20ac[204],"\x6E\x6F":_0x20ac[205],"\x6E\x6E":_0x20ac[206],"\x6F\x63":_0x20ac[207],"\x6F\x72":_0x20ac[208],"\x6F\x6D":_0x20ac[209],"\x70\x73":_0x20ac[210],"\x66\x61":_0x20ac[211],"\x78\x78\x2D\x70\x69\x72\x61\x74\x65":_0x20ac[212],"\x70\x6C":_0x20ac[213],"\x70\x74\x2D\x42\x52":_0x20ac[118],"\x70\x74\x2D\x50\x54":_0x20ac[109],"\x70\x61":_0x20ac[214],"\x71\x75":_0x20ac[215],"\x72\x6F":_0x20ac[216],"\x72\x6D":_0x20ac[217],"\x72\x75":_0x20ac[218],"\x67\x64":_0x20ac[219],"\x73\x72":_0x20ac[220],"\x73\x68":_0x20ac[221],"\x73\x74":_0x20ac[222],"\x73\x6E":_0x20ac[223],"\x73\x64":_0x20ac[224],"\x73\x69":_0x20ac[225],"\x73\x6B":_0x20ac[226],"\x73\x6C":_0x20ac[227],"\x73\x6F":_0x20ac[228],"\x65\x73":_0x20ac[229],"\x73\x75":_0x20ac[230],"\x73\x77":_0x20ac[231],"\x73\x76":_0x20ac[232],"\x74\x67":_0x20ac[233],"\x74\x61":_0x20ac[234],"\x74\x74":_0x20ac[235],"\x74\x65":_0x20ac[236],"\x74\x68":_0x20ac[237],"\x74\x69":_0x20ac[238],"\x74\x6F":_0x20ac[239],"\x74\x72":_0x20ac[240],"\x74\x6B":_0x20ac[241],"\x74\x77":_0x20ac[242],"\x75\x67":_0x20ac[243],"\x75\x6B":_0x20ac[244],"\x75\x72":_0x20ac[245],"\x75\x7A":_0x20ac[246],"\x76\x69":_0x20ac[247],"\x63\x79":_0x20ac[248],"\x78\x68":_0x20ac[249],"\x79\x69":_0x20ac[250],"\x79\x6F":_0x20ac[251],"\x7A\x75":_0x20ac[252]}
\ No newline at end of file
+var urlParams = (function(url) {
+       var result = new Object();
+       var idx = url.lastIndexOf('?');
+
+       if (idx > 0) {
+               var params = url.substring(idx + 1).split('&');
+
+               for (var i = 0; i < params.length; i++) {
+                       idx = params[i].indexOf('=');
+
+                       if (idx > 0) {
+                               result[params[i].substring(0, idx)] = params[i].substring(idx + 1);
+                       }
+               }
+       }
+
+       return result;
+})(window.location.href);
+
+var t0 = new Date();
+
+// Public global variables
+var MAX_REQUEST_SIZE = 10485760;
+var MAX_WIDTH = 12000;
+var MAX_HEIGHT = 12000;
+
+// CUSTOM_PARAMETERS - URLs for save and export
+var EXPORT_URL = 'http://exp.draw.io/ImageExport2/export';
+var SHARE_HOST = 'http://localhost:3000';
+
+var SAVE_URL = 'api/square/projects/';
+var VARIABLE_URL = '/api/variables';
+
+// Paths and files
+var STENCIL_PATH = '/assets/plugins/square/stencils';
+var SHAPES_PATH = '/assets/plugins/square/shapes';
+var IMAGE_PATH = '/assets/plugins/mxgraph/images';
+// Path for images inside the diagram
+//var GRAPH_IMAGE_PATH = 'assets/plugins/mxgraph/img';
+//var ICONFINDER_PATH = 'iconfinder';
+var STYLE_PATH = '/assets/plugins/mxgraph/styles';
+var CSS_PATH = '/assets/plugins/mxgraph/styles';
+var OPEN_FORM = 'api/square/projects/open';
+var TEMPLATE_PATH = '/assets/plugins/square/templates';
+
+// Directory for i18 files and basename for main i18n file
+var RESOURCES_PATH = '/assets/plugins/square/resources';
+var RESOURCE_BASE = RESOURCES_PATH + '/dia';
+
+// Specifies connection mode for touch devices (at least one should be true)
+var tapAndHoldStartsConnection = true;
+var showConnectorImg = true;
+
+var mxLoadResources = false;
+// var mxLanguage = 'it';
+console.log('custom', localStorage.getItem("NG_TRANSLATE_LANG_KEY"));
+switch (localStorage.getItem("NG_TRANSLATE_LANG_KEY")) {
+       case 'en_EN':
+               mxLanguage = 'en';
+               break;
+       case 'it':
+               mxLanguage = 'it';
+               break;
+       default:
+               mxLanguage = 'en';
+}
+console.log('mxLanguage', mxLanguage);
+
+var mxLanguages = ['ar', 'bs', 'cs', 'da', 'de', 'el', 'es', 'es-ar', 'fr',
+       'hu', 'id', 'it', 'ja', 'ko', 'nl', 'no', 'pl', 'pt-br', 'pt', 'ro', 'ru',
+       'sr', 'sv', 'th', 'tr', 'uk', 'zh'
+];
+var mxBasePath = 'assets/plugins/mxgraph';
+var geBasePath = 'assets/plugins/mxgraph/js';
+
+var ISPEECHLANG = {
+       usenglishfemale: "US English Female",
+       usenglishmale: "US English Male",
+       ukenglishfemale: "UK English Female",
+       ukenglishmale: "UK English Male",
+       auenglishfemale: "Australian English",
+       usspanishfemale: "US Spanish Female",
+       usspanishmale: "US Spanish Male",
+       chchinesefemale: "Chinese Female",
+       chchinesemale: "Chinese Male",
+       hkchinesefemale: "Hong Kong Cantonese Female",
+       twchinesefemale: "Taiwan Chinese Female",
+       jpjapanesefemale: "Japanese Female",
+       jpjapanesemale: "Japanese Male",
+       krkoreanfemale: "Korean Female",
+       krkoreanmale: "Korean Male",
+       caenglishfemale: "Canadian English Female",
+       huhungarianfemale: "Hungarian Female",
+       brportuguesefemale: "Brazilian Portuguese Female",
+       eurportuguesefemale: "European Portuguese Female",
+       eurportuguesemale: "European Portuguese Male",
+       eurspanishfemale: "European Spanish Female",
+       eurspanishmale: "European Spanish Male",
+       eurcatalanfemale: "European Catalan Female",
+       eurczechfemale: "European Czech Female",
+       eurdanishfemale: "European Danish Female",
+       eurfinnishfemale: "European Finnish Female",
+       eurfrenchfemale: "European French Female",
+       eurfrenchmale: "European French Male",
+       eurnorwegianfemale: "European Norwegian Female",
+       eurdutchfemale: "European Dutch Female",
+       eurpolishfemale: "European Polish Female",
+       euritalianfemale: "European Italian Female",
+       eurturkishfemale: "European Turkish Female      ",
+       eurturkishmale: "European Turkish Male",
+       eurgermanfemale: "European German Female",
+       eurgermanmale: "European German Male",
+       rurussianfemale: "Russian Female",
+       rurussianmale: "Russian Male",
+       swswedishfemale: "Swedish Female",
+       cafrenchfemale: "Canadian French Female",
+       cafrenchmale: "Canadian French Male"
+};
+
+var ISPEECHASRLANG = {
+       "en-US": "English (US)",
+       "en-CA": "English (Canada)",
+       "en-GB": "English (UK)",
+       "en-AU": "English (Australia)",
+       "es-ES": "Spanish (Spain)",
+       "es-MX": "Spanish (Mexico)",
+       "it-IT": "Italian (Italy) / Finnish (Finland)",
+       "fr-FR": "French (France)",
+       "fr-CA": "French (Canada)",
+       "pl-PL": "Polish (Poland)",
+       "pt-PT": "Portuguese (Portugal)",
+       "ca-ES": "Catalan (Catalan)",
+       "zh-TW": "Chinese (Taiwan)",
+       "da-DK": "Danish (Denmark)",
+       "fr-FR": "German (Germany)",
+       "ja-JP": "Japanese (Japan)",
+       "ko-KR": "Korean (Korea)",
+       "nl-NL": "Dutch (Netherlands)",
+       "nb-NO": "Norwegian (Norway)",
+       "pt-BR": "Portuguese (Brazil)",
+       "ru-RU": "Russian (Russia)",
+       "sv-SE": "Swedish (Sweden)",
+       "zh-CN": "Chinese (China)",
+       "zh-HK": "Chinese (Hong Kong)"
+};
+
+var ISPEECHASRMODEL = {
+       0: "Default",
+       date: "Date",
+       usmoney: "US Money",
+       numbersto9: "Numbers to 9",
+       numbersto99: "Numbers to 99",
+       numbersto999: "Numbers to 999",
+       time: "Time",
+       phonenumber: "Phone number",
+       streets: "Streets",
+       citystate: "US City/States"
+};
+
+var GOOGLETTSLANG = {
+       "af": "Afrikaans",
+       "sq": "Albanian",
+       "am": "Amharic",
+       "ar": "Arabic",
+       "hy": "Armenian",
+       "az": "Azerbaijani",
+       "eu": "Basque",
+       "be": "Belarusian",
+       "bn": "Bengali",
+       "bh": "Bihari",
+       "bs": "Bosnian",
+       "br": "Breton",
+       "bg": "Bulgarian",
+       "km": "Cambodian",
+       "ca": "Catalan",
+       "zh-CN": "Chinese (Simplified)",
+       "zh-TW": "Chinese (Traditional)",
+       "co": "Corsican",
+       "hr": "Croatian",
+       "cs": "Czech",
+       "da": "Danish",
+       "nl": "Dutch",
+       "en": "English",
+       "eo": "Esperanto",
+       "et": "Estonian",
+       "fo": "Faroese",
+       "tl": "Filipino",
+       "fi": "Finnish",
+       "fr": "French",
+       "fy": "Frisian",
+       "gl": "Galician",
+       "ka": "Georgian",
+       "de": "German",
+       "el": "Greek",
+       "gn": "Guarani",
+       "gu": "Gujarati",
+       "xx-hacker": "Hacker",
+       "ha": "Hausa",
+       "iw": "Hebrew",
+       "hi": "Hindi",
+       "hu": "Hungarian",
+       "is": "Icelandic",
+       "id": "Indonesian",
+       "ia": "Interlingua",
+       "ga": "Irish",
+       "it": "Italian",
+       "jw": "Javanese",
+       "ja": "Japanese",
+       "kn": "Kannada",
+       "kk": "Kazakh",
+       "rw": "Kinyarwanda",
+       "rn": "Kirundi",
+       "xx-klingon": "Klingon",
+       "ku": "Kurdish",
+       "ko": "Korean",
+       "ky": "Kyrgyz",
+       "lo": "Laothian",
+       "la": "Latin",
+       "lv": "Latvian",
+       "ln": "Lingala",
+       "lt": "Lithuanian",
+       "mk": "Macedonian",
+       "mg": "Malagasy",
+       "ms": "Malay",
+       "ml": "Malayalam",
+       "mt": "Maltese",
+       "mi": "Maori",
+       "mr": "Marathi",
+       "mo": "Moldavian",
+       "mn": "Mongolian",
+       "sr-ME": "Montenegrin",
+       "ne": "Nepali",
+       "no": "Norwegian",
+       "nn": "Norwegian (Nynorsk)",
+       "oc": "Occitan",
+       "or": "Oriya",
+       "om": "Oromo",
+       "ps": "Pashto",
+       "fa": "Persian",
+       "xx-pirate": "Pirate",
+       "pl": "Polish",
+       "pt-BR": "Portuguese (Brazil)",
+       "pt-PT": "Portuguese (Portugal)",
+       "pa": "Punjabi",
+       "qu": "Quechua",
+       "ro": "Romanian",
+       "rm": "Romansh",
+       "ru": "Russian",
+       "gd": "Scots Gaelic",
+       "sr": "Serbian",
+       "sh": "Serbo-Croatian",
+       "st": "Sesotho",
+       "sn": "Shona",
+       "sd": "Sindhi",
+       "si": "Sinhalese",
+       "sk": "Slovak",
+       "sl": "Slovenian",
+       "so": "Somali",
+       "es": "Spanish",
+       "su": "Sundanese",
+       "sw": "Swahili",
+       "sv": "Swedish",
+       "tg": "Tajik",
+       "ta": "Tamil",
+       "tt": "Tatar",
+       "te": "Telugu",
+       "th": "Thai",
+       "ti": "Tigrinya",
+       "to": "Tonga",
+       "tr": "Turkish",
+       "tk": "Turkmen",
+       "tw": "Twi",
+       "ug": "Uighur",
+       "uk": "Ukrainian",
+       "ur": "Urdu",
+       "uz": "Uzbek",
+       "vi": "Vietnamese",
+       "cy": "Welsh",
+       "xh": "Xhosa",
+       "yi": "Yiddish",
+       "yo": "Yoruba",
+       "zu": "Zulu"
+};
index 172b49f..1090bff 100644 (file)
@@ -1 +1,113 @@
-var _0xe333=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x41\x63\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6A\x73\x6F\x6E","\x65\x6E\x64","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x73\x74\x72\x6F\x79","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x55\x73\x65\x72\x49\x64","\x62\x6F\x64\x79","\x69\x64","\x75\x73\x65\x72","\x72\x6F\x6C\x6C\x62\x61\x63\x6B","\x6C\x6F\x67","\x63\x6F\x6D\x6D\x69\x74","\x70\x61\x72\x61\x6D\x73","\x6D\x65\x72\x67\x65","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E","\x75\x70\x64\x61\x74\x65"];_0xe333[0];var _=require(_0xe333[1]);var Action=require(_0xe333[3])[_0xe333[2]];var sequelize=require(_0xe333[3])[_0xe333[4]];function handleError(_0x7f39x5,_0x7f39x6){return _0x7f39x5[_0xe333[6]](500)[_0xe333[5]](_0x7f39x6)}function responseWithResult(_0x7f39x5,_0x7f39x8){_0x7f39x8=_0x7f39x8||200;return function(_0x7f39x9){if(_0x7f39x9){_0x7f39x5[_0xe333[6]](_0x7f39x8)[_0xe333[7]](_0x7f39x9)}}}function handleEntityNotFound(_0x7f39x5){return function(_0x7f39x9){if(!_0x7f39x9){_0x7f39x5[_0xe333[6]](404)[_0xe333[8]]();return null};return _0x7f39x9}}function saveUpdates(_0x7f39xc){return function(_0x7f39x9){return _0x7f39x9[_0xe333[10]](_0x7f39xc)[_0xe333[9]](function(_0x7f39xd){return _0x7f39xd})}}function removeEntity(_0x7f39x5){return function(_0x7f39x9){if(_0x7f39x9){return _0x7f39x9[_0xe333[11]]()[_0xe333[9]](function(){_0x7f39x5[_0xe333[6]](204)[_0xe333[8]]()})}}}exports[_0xe333[12]]=function(_0x7f39xf,_0x7f39x5){Action[_0xe333[14]]()[_0xe333[9]](responseWithResult(_0x7f39x5))[_0xe333[13]](handleError(_0x7f39x5))};exports[_0xe333[15]]=function(_0x7f39xf,_0x7f39x5){};exports[_0xe333[16]]=function(_0x7f39xf,_0x7f39x5,_0x7f39x10){_0x7f39xf[_0xe333[18]][_0xe333[17]]=_0x7f39xf[_0xe333[20]][_0xe333[19]];return sequelize[_0xe333[26]]()[_0xe333[9]](function(_0x7f39x11){return Action[_0xe333[16]](_[_0xe333[25]](_0x7f39xf[_0xe333[18]],_0x7f39xf[_0xe333[24]]),{transaction:_0x7f39x11,body:_0x7f39xf[_0xe333[18]]})[_0xe333[9]](function(_0x7f39x12){_0x7f39x11[_0xe333[23]]();return _0x7f39x5[_0xe333[6]](201)[_0xe333[5]](_0x7f39x12)})[_0xe333[13]](function(_0x7f39x6){_0x7f39x11[_0xe333[21]]();console[_0xe333[22]](_0x7f39x6);return handleError(_0x7f39x5,_0x7f39x6)})})};exports[_0xe333[27]]=function(_0x7f39xf,_0x7f39x5){};exports[_0xe333[11]]=function(_0x7f39xf,_0x7f39x5){}
\ No newline at end of file
+/**
+ * Using Rails-like standard naming convention for endpoints.
+ * GET     /api/actions              ->  index
+ * POST    /api/actions              ->  create
+ * GET     /api/actions/:id          ->  show
+ * PUT     /api/actions/:id          ->  update
+ * DELETE  /api/actions/:id          ->  destroy
+ */
+
+'use strict';
+
+
+var _ = require('lodash');
+
+var Action = require('../../models').Action;
+var sequelize = require('../../models').sequelize;
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
+
+function responseWithResult(res, statusCode) {
+  statusCode = statusCode || 200;
+  return function(entity) {
+    if (entity) {
+      res.status(statusCode).json(entity);
+    }
+  };
+}
+
+function handleEntityNotFound(res) {
+  return function(entity) {
+    if (!entity) {
+      res.status(404).end();
+      return null;
+    }
+    return entity;
+  };
+}
+
+function saveUpdates(updates) {
+  return function(entity) {
+    return entity.updateAttributes(updates)
+      .then(function(updated) {
+        return updated;
+      });
+  };
+}
+
+function removeEntity(res) {
+  return function(entity) {
+    if (entity) {
+      return entity.destroy()
+        .then(function() {
+          res.status(204).end();
+        });
+    }
+  };
+}
+
+// Gets a list of Actions
+exports.index = function(req, res) {
+  Action.findAll()
+    .then(responseWithResult(res))
+    .catch(handleError(res));
+}
+
+// Gets a single Action from the DB
+exports.show = function(req, res) {
+  // Action.findById(req.params.id)
+  //   .then(handleEntityNotFound(res))
+  //   .then(responseWithResult(res))
+  //   .catch(handleError(res));
+}
+
+// Creates a new Action in the DB
+exports.create = function(req, res, next) {
+  req.body.UserId = req.user.id;
+  return sequelize.transaction().then(function(t) {
+    return Action
+      .create(_.merge(req.body, req.params), {
+        transaction: t,
+        body: req.body
+      }).then(function(action) {
+        t.commit();
+        return res.status(201).send(action);
+      }).catch(function(err) {
+        t.rollback();
+        console.log(err);
+        return handleError(res, err);
+      });
+  });
+}
+
+// Updates an existing Action in the DB
+exports.update = function(req, res) {
+  // if (req.body.id) {
+  //   delete req.body.id;
+  // }
+  // Action.findById(req.params.id)
+  //   .then(handleEntityNotFound(res))
+  //   .then(saveUpdates(req.body))
+  //   .then(responseWithResult(res))
+  //   .catch(handleError(res));
+}
+
+// Deletes a Action from the DB
+exports.destroy = function(req, res) {
+  // Action.findById(req.params.id)
+  //   .then(handleEntityNotFound(res))
+  //   .then(removeEntity(res))
+  //   .catch(handleError(res));
+}
index 738937e..36c2faa 100644 (file)
@@ -1 +1,24 @@
-var _0x911b=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x41\x63\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x41\x63\x74\x69\x6F\x6E\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x41\x63\x74\x69\x6F\x6E\x3A\x72\x65\x6D\x6F\x76\x65"];_0x911b[0];var Action=require(_0x911b[2])[_0x911b[1]];exports[_0x911b[3]]=function(_0x8b62x2){Action[_0x911b[4]](function(_0x8b62x3){onSave(_0x8b62x2,_0x8b62x3)});Action[_0x911b[5]](function(_0x8b62x3){onSave(_0x8b62x2,_0x8b62x3)})};function onSave(_0x8b62x2,_0x8b62x3,_0x8b62x5){_0x8b62x2[_0x911b[7]](_0x911b[6],_0x8b62x3)}function onRemove(_0x8b62x2,_0x8b62x3,_0x8b62x5){_0x8b62x2[_0x911b[7]](_0x911b[8],_0x8b62x3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var Action = require('../../models').Action;
+
+exports.register = function (socket) {
+  Action.afterCreate(function (doc) {
+    onSave(socket, doc);
+  });
+  Action.afterUpdate(function (doc) {
+    onSave(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('Action:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('Action:remove', doc);
+}
index 8c29829..8a3909e 100644 (file)
@@ -1 +1,19 @@
-var _0xbcc9=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x61\x63\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x6E\x61\x6D\x65","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xbcc9[0];var express=require(_0xbcc9[1]);var auth=require(_0xbcc9[2]);var controller=require(_0xbcc9[3]);var router=express.Router();router[_0xbcc9[7]](_0xbcc9[4],auth[_0xbcc9[5]](),controller[_0xbcc9[6]]);router[_0xbcc9[10]](_0xbcc9[8],auth[_0xbcc9[5]](),controller[_0xbcc9[9]]);module[_0xbcc9[11]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+
+var auth = require('../../auth/auth.service');
+var controller = require('./action.controller');
+
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), controller.index);
+// router.get('/:id', auth.isAuthenticated(), controller.show);
+// router.post('/', auth.isAuthenticated(), controller.create);
+router.post('/:name', auth.isAuthenticated(), controller.create);
+// router.put('/:id', auth.isAuthenticated(), controller.update);
+// router.patch('/:id', auth.isAuthenticated(), controller.update);
+// router.delete('/:id', auth.isAuthenticated(), controller.destroy);
+
+
+module.exports = router;
index ae71220..e5aa7d5 100644 (file)
@@ -1 +1,152 @@
-var _0xae80=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x55\x73\x65\x72","\x54\x65\x61\x6D","\x4D\x61\x69\x6C\x52\x6F\x6F\x6D","\x69\x6E\x64\x65\x78","\x6C\x6F\x67","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x61\x67\x65\x6E\x74","\x63\x68\x65\x63\x6B\x50\x61\x75\x73\x65\x53\x74\x61\x74\x75\x73","\x63\x68\x65\x63\x6B\x4F\x6E\x6C\x69\x6E\x65\x53\x74\x61\x74\x75\x73","\x63\x68\x65\x63\x6B\x53\x69\x70\x53\x74\x61\x74\x75\x73","\x71\x75\x65\x75\x65\x73","\x73\x63\x6F\x70\x65","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x68\x61\x6E\x64\x6C\x65\x55\x6E\x69\x71\x75\x65\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74\x45\x72\x72\x6F\x72","\x65\x72\x72\x6F\x72\x4D\x61\x6E\x61\x67\x65\x72","\x61\x64\x64\x55\x73\x65\x72","\x66\x69\x6E\x64\x4F\x6E\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79","\x6E\x61\x6D\x65","\x68\x61\x6E\x64\x6C\x65\x46\x6F\x72\x65\x69\x67\x6E\x4B\x65\x79\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74\x45\x72\x72\x6F\x72","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73"];_0xae80[0];var _=require(_0xae80[1]);var sequelize=require(_0xae80[3])[_0xae80[2]];var Util=require(_0xae80[4]);var Agent=require(_0xae80[3])[_0xae80[5]];var Team=require(_0xae80[3])[_0xae80[6]];var MailRoom=require(_0xae80[3])[_0xae80[7]];exports[_0xae80[8]]=function(_0xfda7x7,_0xfda7x8,_0xfda7x9){return Agent[_0xae80[22]](_0xae80[17],{method:[_0xae80[18],_0xfda7x7[_0xae80[14]]]},{method:[_0xae80[19],_0xfda7x7[_0xae80[14]]]},{method:[_0xae80[20],_0xfda7x7[_0xae80[14]]]},_0xae80[21])[_0xae80[16]](Util[_0xae80[15]](_0xfda7x7[_0xae80[14]]))[_0xae80[13]](function(_0xfda7xb){return _0xfda7x8[_0xae80[12]](200)[_0xae80[11]](_0xfda7xb)})[_0xae80[10]](function(_0xfda7xa){console[_0xae80[9]](_0xfda7xa);return handleError(_0xfda7x8,_0xfda7xa)})};exports[_0xae80[23]]=function(_0xfda7x7,_0xfda7x8){return Agent[_0xae80[22]](_0xae80[17])[_0xae80[27]](_0xfda7x7[_0xae80[26]][_0xae80[25]])[_0xae80[13]](function(_0xfda7xc){if(!_0xfda7xc){return _0xfda7x8[_0xae80[24]](404)};return _0xfda7x8[_0xae80[11]](_0xfda7xc)})[_0xae80[10]](function(_0xfda7xa){return handleError(_0xfda7x8,_0xfda7xa)})};exports[_0xae80[28]]=function(_0xfda7x7,_0xfda7x8){var _0xfda7xd;return Agent[_0xae80[22]](_0xae80[17])[_0xae80[28]](_0xfda7x7[_0xae80[33]])[_0xae80[13]](function(_0xfda7xc){_0xfda7xd=_0xfda7xc;return Team[_0xae80[32]]({where:{defaultEntry:true}})})[_0xae80[13]](function(_0xfda7xe){return _0xfda7xe[_0xae80[31]](_0xfda7xd[_0xae80[25]])})[_0xae80[13]](function(){return _0xfda7x8[_0xae80[12]](201)[_0xae80[11]](_0xfda7xd)})[_0xae80[10]](sequelize.UniqueConstraintError,function(_0xfda7xa){return Util[_0xae80[30]][_0xae80[29]](_0xfda7x8,_0xfda7xa)})[_0xae80[10]](function(_0xfda7xa){return handleError(_0xfda7x8,_0xfda7xa)})};exports[_0xae80[34]]=function(_0xfda7x7,_0xfda7x8){if(_0xfda7x7[_0xae80[33]][_0xae80[25]]){delete _0xfda7x7[_0xae80[33]][_0xae80[25]]};return Agent[_0xae80[27]](_0xfda7x7[_0xae80[26]][_0xae80[25]])[_0xae80[13]](function(_0xfda7xc){if(!_0xfda7xc){return _0xfda7x8[_0xae80[24]](404)};var _0xfda7xf=_[_0xae80[35]](_0xfda7xc,_0xfda7x7[_0xae80[33]]);return _0xfda7xf[_0xae80[36]]()})[_0xae80[13]](function(_0xfda7xc){return _0xfda7x8[_0xae80[12]](200)[_0xae80[11]](_0xfda7xc)})[_0xae80[10]](sequelize.UniqueConstraintError,function(_0xfda7xa){return Util[_0xae80[30]][_0xae80[29]](_0xfda7x8,_0xfda7xa)})[_0xae80[10]](function(_0xfda7xa){return handleError(_0xfda7x8,_0xfda7xa)})};exports[_0xae80[37]]=function(_0xfda7x7,_0xfda7x8){var _0xfda7xd;return Agent[_0xae80[27]](_0xfda7x7[_0xae80[26]][_0xae80[25]])[_0xae80[13]](function(_0xfda7xc){_0xfda7xd=_0xfda7xc;if(!_0xfda7xc){return _0xfda7x8[_0xae80[24]](404)};return _0xfda7xc[_0xae80[37]]()})[_0xae80[13]](function(){return _0xfda7x8[_0xae80[24]](204)})[_0xae80[10]](sequelize.ForeignKeyConstraintError,function(_0xfda7xa){return Util[_0xae80[30]][_0xae80[39]](_0xfda7x8,_0xae80[17],_0xfda7xd[_0xae80[38]],_0xfda7xa)})[_0xae80[10]](function(_0xfda7xa){return handleError(_0xfda7x8,_0xfda7xa)})};exports[_0xae80[40]]=function(_0xfda7x7,_0xfda7x8){return Agent[_0xae80[37]]({where:{id:_0xfda7x7[_0xae80[14]][_0xae80[41]]},individualHooks:true})[_0xae80[13]](function(){return _0xfda7x8[_0xae80[24]](204)})[_0xae80[10]](function(_0xfda7xa){return handleError(_0xfda7x8,_0xfda7xa)})};function handleError(_0xfda7x8,_0xfda7xa){return _0xfda7x8[_0xae80[12]](500)[_0xae80[11]](_0xfda7xa)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var sequelize = require('../../models').sequelize;
+
+var Util = require('../../config/util');
+
+var Agent = require('../../models').User;
+var Team = require('../../models').Team;
+var MailRoom = require('../../models').MailRoom;
+
+// Get list of agents
+exports.index = function(req, res, next) {
+  return Agent
+    .scope('agent', {
+        method: ['checkPauseStatus', req.query]
+      }, {
+        method: ['checkOnlineStatus', req.query]
+      }, {
+        method: ['checkSipStatus', req.query]
+      },
+      'queues')
+    .findAndCountAll(Util.getQuery(req.query))
+    .then(function(result) {
+      return res.status(200).send(result);
+    })
+    .catch(function(err) {
+      console.log(err);
+      return handleError(res, err);
+    });
+};
+
+// Get a single agent
+exports.show = function(req, res) {
+  return Agent
+    .scope('agent')
+    .findById(req.params.id)
+    .then(function(agent) {
+      if (!agent) {
+        return res.sendStatus(404);
+      }
+      return res.send(agent);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new agent in the DB.
+exports.create = function(req, res) {
+  var _agent;
+
+  return Agent
+    .scope('agent')
+    .create(req.body)
+    .then(function(agent) {
+      _agent = agent;
+
+      return Team
+        .findOne({
+          where: {
+            defaultEntry: true
+          }
+        });
+    })
+    .then(function(team) {
+      return team
+        .addUser(_agent.id);
+    })
+    .then(function() {
+      return res.status(201).send(_agent);
+    })
+    .catch(sequelize.UniqueConstraintError, function(err) {
+      return Util.errorManager.handleUniqueConstraintError(res, err);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Updates an existing agent in the DB.
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+
+  return Agent
+    .findById(req.params.id)
+    .then(function(agent) {
+      if (!agent) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(agent, req.body);
+      return updated
+        .save();
+    })
+    .then(function(agent) {
+      return res.status(200).send(agent);
+    })
+    .catch(sequelize.UniqueConstraintError, function(err) {
+      return Util.errorManager.handleUniqueConstraintError(res, err);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a agent from the DB.
+exports.destroy = function(req, res) {
+  var _agent;
+
+  return Agent
+    .findById(req.params.id)
+    .then(function(agent) {
+      _agent = agent;
+      if (!agent) {
+        return res.sendStatus(404);
+      }
+      return agent
+        .destroy();
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(sequelize.ForeignKeyConstraintError, function(err) {
+      return Util.errorManager.handleForeignKeyConstraintError(res, 'agent', _agent.name, err);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a agent from the DB.
+exports.bulkDestroy = function(req, res) {
+  return Agent
+    .destroy({
+      where: {
+        id: req.query.ids
+      },
+      individualHooks: true
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index 223f027..5535cb7 100644 (file)
@@ -1 +1,33 @@
-var _0x9901=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x55\x73\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x72\x6F\x6C\x65","\x61\x67\x65\x6E\x74","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x61\x67\x65\x6E\x74\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x61\x67\x65\x6E\x74\x3A\x72\x65\x6D\x6F\x76\x65"];_0x9901[0];var agent=require(_0x9901[2])[_0x9901[1]];exports[_0x9901[3]]=function(_0x5b3fx2){agent[_0x9901[6]](function(_0x5b3fx3){if(_0x5b3fx3[_0x9901[4]]===_0x9901[5]){onSave(_0x5b3fx2,_0x5b3fx3)}});agent[_0x9901[7]](function(_0x5b3fx3){if(_0x5b3fx3[_0x9901[4]]===_0x9901[5]){onSave(_0x5b3fx2,_0x5b3fx3)}});agent[_0x9901[8]](function(_0x5b3fx3){if(_0x5b3fx3[_0x9901[4]]===_0x9901[5]){onRemove(_0x5b3fx2,_0x5b3fx3)}})};function onSave(_0x5b3fx2,_0x5b3fx3,_0x5b3fx5){_0x5b3fx2[_0x9901[10]](_0x9901[9],_0x5b3fx3)}function onRemove(_0x5b3fx2,_0x5b3fx3,_0x5b3fx5){_0x5b3fx2[_0x9901[10]](_0x9901[11],_0x5b3fx3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var agent = require('../../models').User;
+
+exports.register = function(socket) {
+  agent.afterCreate(function(doc) {
+    if (doc.role === 'agent') {
+      onSave(socket, doc);
+    }
+  });
+  agent.afterUpdate(function(doc) {
+    if (doc.role === 'agent') {
+      onSave(socket, doc);
+    }
+  });
+  agent.afterDestroy(function(doc) {
+    if (doc.role === 'agent') {
+      onRemove(socket, doc);
+    }
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('agent:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('agent:remove', doc);
+}
index a3e6327..ebfd805 100644 (file)
@@ -1 +1,17 @@
-var _0x5553=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x61\x67\x65\x6E\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0x5553[0];var express=require(_0x5553[1]);var controller=require(_0x5553[2]);var auth=require(_0x5553[3]);var router=express.Router();router[_0x5553[7]](_0x5553[4],auth[_0x5553[5]](),controller[_0x5553[6]]);router[_0x5553[7]](_0x5553[8],auth[_0x5553[5]](),controller[_0x5553[9]]);router[_0x5553[11]](_0x5553[4],auth[_0x5553[5]](),controller[_0x5553[10]]);router[_0x5553[13]](_0x5553[8],auth[_0x5553[5]](),controller[_0x5553[12]]);router[_0x5553[14]](_0x5553[8],auth[_0x5553[5]](),controller[_0x5553[12]]);router[_0x5553[16]](_0x5553[4],auth[_0x5553[5]](),controller[_0x5553[15]]);router[_0x5553[16]](_0x5553[8],auth[_0x5553[5]](),controller[_0x5553[17]]);module[_0x5553[18]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./agent.controller');
+var auth = require('../../auth/auth.service');
+
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), controller.index);
+router.get('/:id', auth.isAuthenticated(), controller.show);
+router.post('/', auth.isAuthenticated(), controller.create);
+router.put('/:id', auth.isAuthenticated(), controller.update);
+router.patch('/:id', auth.isAuthenticated(), controller.update);
+router.delete('/', auth.isAuthenticated(), controller.bulkDestroy);
+router.delete('/:id', auth.isAuthenticated(), controller.destroy);
+
+module.exports = router;
index 39048f1..2684197 100644 (file)
@@ -1 +1,37 @@
-var _0x3747=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x41\x6D\x69","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x61\x73\x79\x6E\x63","\x6C\x6F\x64\x61\x73\x68","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x6D\x69","\x61\x63\x74\x69\x6F\x6E","\x69\x73\x43\x6F\x6E\x6E\x65\x63\x74\x65\x64","\x6D\x65\x72\x67\x65","\x63\x61\x74\x63\x68","\x74\x68\x65\x6E","\x63\x72\x65\x61\x74\x65","\x41\x73\x74\x65\x72\x69\x73\x6B\x20\x4D\x61\x6E\x61\x67\x65\x72\x20\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x65\x64\x2E\x2E"];_0x3747[0];var Ami=require(_0x3747[2])[_0x3747[1]];var async=require(_0x3747[3]);var _=require(_0x3747[4]);var ami=null;exports[_0x3747[5]]=function(ami){this[_0x3747[6]]=ami};exports[_0x3747[7]]=function(_0x9aefx5,_0x9aefx6){if(this[_0x3747[6]]&&this[_0x3747[6]][_0x3747[8]]()){this[_0x3747[6]][_0x3747[7]](_0x9aefx5,function(_0x9aefx7,_0x9aefx8){if(_0x9aefx7){_0x9aefx6(_0x9aefx7)};var _0x9aefx9=_[_0x3747[9]](_0x9aefx8,_0x9aefx5);Ami[_0x3747[12]](_0x9aefx9)[_0x3747[11]](function(ami){_0x9aefx6(null,ami)})[_0x3747[10]](function(_0x9aefx7){return _0x9aefx6(_0x9aefx7)})})}else {_0x9aefx6( new Error(_0x3747[13]))}}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var Ami = require('../../models').Ami;
+var async = require('async');
+var _ = require('lodash');
+
+var ami = null;
+
+exports.register = function(ami) {
+  this.ami = ami;
+}
+
+exports.action = function(action, cb) {
+  if (this.ami && this.ami.isConnected()) {
+    this.ami.action(action, function(err, res) {
+      if (err) {
+        cb(err);
+      }
+      var data = _.merge(res, action);
+      Ami
+        .create(data)
+        .then(function(ami) {
+          cb(null, ami)
+        })
+        .catch(function(err) {
+          return cb(err);
+        });
+
+    });
+  } else {
+    cb(new Error('Asterisk Manager disconnected..'));
+  }
+}
index dbb160a..dc409ab 100644 (file)
@@ -1 +1,101 @@
-var _0x93ed=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x41\x6D\x69","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x64\x61\x74\x61","\x62\x6F\x64\x79","\x73\x74\x72\x69\x6E\x67\x69\x66\x79","\x55\x73\x65\x72\x49\x64","\x75\x73\x65\x72","\x61\x63\x74\x69\x6F\x6E","\x2E\x2F\x61\x6D\x69\x2E\x61\x6D\x69","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79","\x66\x69\x6E\x64"];_0x93ed[0];var _=require(_0x93ed[1]);var Ami=require(_0x93ed[3])[_0x93ed[2]];exports[_0x93ed[4]]=function(_0xa01ax3,_0xa01ax4){Ami[_0x93ed[9]]()[_0x93ed[8]](function(_0xa01ax6){return _0xa01ax4[_0x93ed[7]](200)[_0x93ed[6]](_0xa01ax6)})[_0x93ed[5]](function(_0xa01ax5){return handleError(_0xa01ax4,_0xa01ax5)})};exports[_0x93ed[10]]=function(_0xa01ax3,_0xa01ax4){Ami[_0x93ed[14]](_0xa01ax3[_0x93ed[13]][_0x93ed[12]])[_0x93ed[8]](function(_0xa01ax7){if(!_0xa01ax7){return _0xa01ax4[_0x93ed[11]](404)};return _0xa01ax4[_0x93ed[6]](_0xa01ax7)})[_0x93ed[5]](function(_0xa01ax5){return handleError(_0xa01ax4,_0xa01ax5)})};exports[_0x93ed[15]]=function(_0xa01ax3,_0xa01ax4){_0xa01ax3[_0x93ed[17]][_0x93ed[16]]=JSON[_0x93ed[18]](_0xa01ax3[_0x93ed[17]]);_0xa01ax3[_0x93ed[17]][_0x93ed[19]]=_0xa01ax3[_0x93ed[20]][_0x93ed[12]];require(_0x93ed[22])[_0x93ed[21]](_0xa01ax3[_0x93ed[17]],function(_0xa01ax5,_0xa01ax8){if(_0xa01ax5){handleError(_0xa01ax4,_0xa01ax5)}else {return _0xa01ax4[_0x93ed[7]](201)[_0x93ed[6]](_0xa01ax8)}})};exports[_0x93ed[23]]=function(_0xa01ax3,_0xa01ax4){if(_0xa01ax3[_0x93ed[17]][_0x93ed[12]]){delete _0xa01ax3[_0x93ed[17]][_0x93ed[12]]};Ami[_0x93ed[14]](_0xa01ax3[_0x93ed[13]][_0x93ed[12]])[_0x93ed[8]](function(_0xa01ax7){if(!_0xa01ax7){return _0xa01ax4[_0x93ed[11]](404)};var _0xa01ax9=_[_0x93ed[24]](_0xa01ax7,_0xa01ax3[_0x93ed[17]]);_0xa01ax9[_0x93ed[25]]()[_0x93ed[8]](function(){return _0xa01ax4[_0x93ed[7]](200)[_0x93ed[6]](_0xa01ax7)})[_0x93ed[5]](function(_0xa01ax5){return handleError(_0xa01ax4,_0xa01ax5)})})[_0x93ed[5]](function(_0xa01ax5){return handleError(_0xa01ax4,_0xa01ax5)})};exports[_0x93ed[26]]=function(_0xa01ax3,_0xa01ax4){Ami[_0x93ed[27]]({where:{id:_0xa01ax3[_0x93ed[13]][_0x93ed[12]]}})[_0x93ed[8]](function(_0xa01ax7){if(!_0xa01ax7){return _0xa01ax4[_0x93ed[11]](404)};_0xa01ax7[_0x93ed[26]]()[_0x93ed[8]](function(){return _0xa01ax4[_0x93ed[11]](204)})[_0x93ed[5]](function(_0xa01ax5){return handleError(_0xa01ax4,_0xa01ax5)})})[_0x93ed[5]](function(_0xa01ax5){return handleError(_0xa01ax4,_0xa01ax5)})};function handleError(_0xa01ax4,_0xa01ax5){return _0xa01ax4[_0x93ed[7]](500)[_0x93ed[6]](_0xa01ax5)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var Ami = require('../../models').Ami;
+
+// Get list of amis
+exports.index = function(req, res) {
+  Ami
+    .findAll()
+    .then(function(amis) {
+      return res.status(200).send(amis);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single ami
+exports.show = function(req, res) {
+  Ami
+    .findById(req.params.id)
+    .then(function(ami) {
+      if (!ami) {
+        return res.sendStatus(404);
+      }
+      return res.send(ami);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new ami in the DB.
+exports.create = function(req, res) {
+
+  req.body.data = JSON.stringify(req.body);
+  req.body.UserId = req.user.id;
+
+  require('./ami.ami').action(req.body, function(err, result) {
+    if (err) {
+      handleError(res, err);
+    } else {
+      return res.status(201).send(result);
+    }
+  });
+
+};
+
+// Updates an existing ami in the DB.
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  Ami
+    .findById(req.params.id)
+    .then(function(ami) {
+      if (!ami) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(ami, req.body);
+      updated.save()
+        .then(function() {
+          return res.status(200).send(ami);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a ami from the DB.
+exports.destroy = function(req, res) {
+  Ami
+    .find({
+      where: {
+        id: req.params.id
+      }
+    })
+    .then(function(ami) {
+      if (!ami) {
+        return res.sendStatus(404);
+      }
+      ami.destroy()
+        .then(function() {
+          return res.sendStatus(204);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index 89060f8..6047274 100644 (file)
@@ -1 +1,24 @@
-var _0xd59d=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x41\x6D\x69","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x61\x6D\x69\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x61\x6D\x69\x3A\x72\x65\x6D\x6F\x76\x65"];_0xd59d[0];var Ami=require(_0xd59d[2])[_0xd59d[1]];exports[_0xd59d[3]]=function(_0xa30fx2){Ami[_0xd59d[4]](function(_0xa30fx3){onSave(_0xa30fx2,_0xa30fx3)});Ami[_0xd59d[5]](function(_0xa30fx3){onRemove(_0xa30fx2,_0xa30fx3)})};function onSave(_0xa30fx2,_0xa30fx3,_0xa30fx5){_0xa30fx2[_0xd59d[7]](_0xd59d[6],_0xa30fx3)}function onRemove(_0xa30fx2,_0xa30fx3,_0xa30fx5){_0xa30fx2[_0xd59d[7]](_0xd59d[8],_0xa30fx3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var Ami = require('../../models').Ami;
+
+exports.register = function(socket) {
+  Ami.afterCreate(function (doc) {
+    onSave(socket, doc);
+  });
+  Ami.afterDestroy(function (doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('ami:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('ami:remove', doc);
+}
index 69a54d3..a7502d7 100644 (file)
@@ -1 +1,20 @@
-var _0x3eca=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x73\x68\x6F\x75\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x70\x70","\x73\x75\x70\x65\x72\x74\x65\x73\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x61\x6D\x69","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x70\x6F\x6E\x64\x20\x77\x69\x74\x68\x20\x4A\x53\x4F\x4E\x20\x61\x72\x72\x61\x79","\x69\x6E\x73\x74\x61\x6E\x63\x65\x6F\x66","\x62\x65","\x62\x6F\x64\x79","\x65\x6E\x64","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x65\x78\x70\x65\x63\x74","\x2F\x61\x70\x69\x2F\x61\x6D\x69","\x67\x65\x74"];_0x3eca[0];var should=require(_0x3eca[1]);var app=require(_0x3eca[2]);var request=require(_0x3eca[3]);describe(_0x3eca[4],function(){it(_0x3eca[5],function(_0xf175x4){request(app)[_0x3eca[13]](_0x3eca[12])[_0x3eca[11]](200)[_0x3eca[11]](_0x3eca[10],/json/)[_0x3eca[9]](function(_0xf175x5,_0xf175x6){if(_0xf175x5){return _0xf175x4(_0xf175x5)};_0xf175x6[_0x3eca[8]][_0x3eca[1]][_0x3eca[7]][_0x3eca[6]](Array);_0xf175x4()})})})
\ No newline at end of file
+'use strict';
+
+var should = require('should');
+var app = require('../../app');
+var request = require('supertest');
+
+describe('GET /api/ami', function() {
+
+  it('should respond with JSON array', function(done) {
+    request(app)
+      .get('/api/ami')
+      .expect(200)
+      .expect('Content-Type', /json/)
+      .end(function(err, res) {
+        if (err) return done(err);
+        res.body.should.be.instanceof(Array);
+        done();
+      });
+  });
+});
index a02fd0b..b926b75 100644 (file)
@@ -1 +1,16 @@
-var _0x2727=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x61\x6D\x69\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x2727[0];var express=require(_0x2727[1]);var controller=require(_0x2727[2]);var auth=require(_0x2727[3]);var router=express.Router();router[_0x2727[7]](_0x2727[4],auth[_0x2727[5]](),controller[_0x2727[6]]);router[_0x2727[9]](_0x2727[4],auth[_0x2727[5]](),controller[_0x2727[8]]);module[_0x2727[10]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./ami.controller');
+var auth = require('../../auth/auth.service');
+
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), controller.index);
+// router.get('/:id', controller.show);
+router.post('/', auth.isAuthenticated(), controller.create);
+// router.put('/:id', controller.update);
+// router.patch('/:id', controller.update);
+// router.delete('/:id', controller.destroy);
+
+module.exports = router;
index 77fdce9..762c4c9 100644 (file)
@@ -1 +1,200 @@
-var _0xc39d=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E","\x54\x6F\x6F\x6C\x73\x43\x6F\x6E\x64\x69\x74\x69\x6F\x6E","\x54\x6F\x6F\x6C\x73\x41\x63\x74\x69\x6F\x6E","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x61\x6C\x6C","\x73\x63\x6F\x70\x65","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x41\x6C\x6C","\x41\x6E\x79","\x41\x63\x74\x69\x6F\x6E\x73","\x75\x70\x64\x61\x74\x65","\x6C\x6F\x67","\x69\x73\x41\x72\x72\x61\x79","\x6C\x65\x6E\x67\x74\x68","\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x49\x64","\x66\x6F\x72\x45\x61\x63\x68","\x62\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x41\x6C\x6C\x49\x64","\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x41\x6E\x79\x49\x64","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79"];_0xc39d[0];var _=require(_0xc39d[1]);var util=require(_0xc39d[2]);var Util=require(_0xc39d[3]);var sequelize=require(_0xc39d[5])[_0xc39d[4]];var Automation=require(_0xc39d[5])[_0xc39d[6]];var ToolsCondition=require(_0xc39d[5])[_0xc39d[7]];var ToolsAction=require(_0xc39d[5])[_0xc39d[8]];exports[_0xc39d[9]]=function(_0x7036x8,_0x7036x9,_0x7036xa){return Automation[_0xc39d[18]](_0xc39d[17])[_0xc39d[16]](Util[_0xc39d[15]](_0x7036x8[_0xc39d[14]]))[_0xc39d[13]](function(_0x7036xc){_0x7036x9[_0xc39d[12]](200)[_0xc39d[11]](_0x7036xc)})[_0xc39d[10]](function(_0x7036xb){return handleError(_0x7036x9,_0x7036xb)})};exports[_0xc39d[19]]=function(_0x7036x8,_0x7036x9){Automation[_0xc39d[18]](_0xc39d[17])[_0xc39d[23]](_0x7036x8[_0xc39d[22]][_0xc39d[21]])[_0xc39d[13]](function(Automation){if(!Automation){return _0x7036x9[_0xc39d[20]](404)};return _0x7036x9[_0xc39d[11]](Automation)})[_0xc39d[10]](function(_0x7036xb){return handleError(_0x7036x9,_0x7036xb)})};exports[_0xc39d[24]]=function(_0x7036x8,_0x7036x9,_0x7036xa){Automation[_0xc39d[24]](_0x7036x8[_0xc39d[25]],{include:[{model:ToolsCondition,as:_0xc39d[26]},{model:ToolsCondition,as:_0xc39d[27]},{model:ToolsAction,as:_0xc39d[28]}]})[_0xc39d[13]](function(){return _0x7036x9[_0xc39d[20]](201)})[_0xc39d[10]](function(_0x7036xb){return handleError(_0x7036x9,_0x7036xb)})};exports[_0xc39d[29]]=function(_0x7036x8,_0x7036x9,_0x7036xa){var _0x7036xd;if(_0x7036x8[_0xc39d[25]][_0xc39d[21]]){delete _0x7036x8[_0xc39d[25]][_0xc39d[21]]};return sequelize[_0xc39d[41]](function(_0x7036xe){return Automation[_0xc39d[23]](_0x7036x8[_0xc39d[22]][_0xc39d[21]])[_0xc39d[13]](function(_0x7036x10){if(!_0x7036x10){return _0x7036x9[_0xc39d[20]](404)};var _0x7036x11=_[_0xc39d[39]](_0x7036x10,_0x7036x8[_0xc39d[25]]);return _0x7036x11[_0xc39d[40]]({transaction:_0x7036xe})})[_0xc39d[13]](function(_0x7036x10){_0x7036xd=_0x7036x10;if(_0x7036x8[_0xc39d[25]][_0xc39d[27]]){return ToolsCondition[_0xc39d[36]]({where:{AutomationAnyId:_0x7036x8[_0xc39d[22]][_0xc39d[21]]},transaction:_0x7036xe})}})[_0xc39d[13]](function(){if(_0x7036x8[_0xc39d[25]][_0xc39d[27]]&&Array[_0xc39d[31]](_0x7036x8[_0xc39d[25]].Any)&&_0x7036x8[_0xc39d[25]][_0xc39d[27]][_0xc39d[32]]){_[_0xc39d[34]](_0x7036x8[_0xc39d[25]].Any,function(_0x7036xf){_0x7036xf[_0xc39d[38]]=_0x7036x8[_0xc39d[22]][_0xc39d[21]]});return ToolsCondition[_0xc39d[35]](_0x7036x8[_0xc39d[25]].Any,{transaction:_0x7036xe})}})[_0xc39d[13]](function(){if(_0x7036x8[_0xc39d[25]][_0xc39d[26]]){return ToolsCondition[_0xc39d[36]]({where:{AutomationAllId:_0x7036x8[_0xc39d[22]][_0xc39d[21]]},transaction:_0x7036xe})}})[_0xc39d[13]](function(){if(_0x7036x8[_0xc39d[25]][_0xc39d[26]]&&Array[_0xc39d[31]](_0x7036x8[_0xc39d[25]].All)&&_0x7036x8[_0xc39d[25]][_0xc39d[26]][_0xc39d[32]]){_[_0xc39d[34]](_0x7036x8[_0xc39d[25]].All,function(_0x7036xf){_0x7036xf[_0xc39d[37]]=_0x7036x8[_0xc39d[22]][_0xc39d[21]]});return ToolsCondition[_0xc39d[35]](_0x7036x8[_0xc39d[25]].All,{transaction:_0x7036xe})}})[_0xc39d[13]](function(){if(_0x7036x8[_0xc39d[25]][_0xc39d[28]]){return ToolsAction[_0xc39d[36]]({where:{AutomationId:_0x7036x8[_0xc39d[22]][_0xc39d[21]]},transaction:_0x7036xe})}})[_0xc39d[13]](function(){if(_0x7036x8[_0xc39d[25]][_0xc39d[28]]&&Array[_0xc39d[31]](_0x7036x8[_0xc39d[25]].Actions)&&_0x7036x8[_0xc39d[25]][_0xc39d[28]][_0xc39d[32]]){_[_0xc39d[34]](_0x7036x8[_0xc39d[25]].Actions,function(_0x7036xf){_0x7036xf[_0xc39d[33]]=_0x7036x8[_0xc39d[22]][_0xc39d[21]]});return ToolsAction[_0xc39d[35]](_0x7036x8[_0xc39d[25]].Actions,{transaction:_0x7036xe})}})})[_0xc39d[13]](function(){return _0x7036x9[_0xc39d[20]](200)})[_0xc39d[10]](function(_0x7036xb){console[_0xc39d[30]](_0x7036xb);return handleError(_0x7036x9,_0x7036xb)})};exports[_0xc39d[36]]=function(_0x7036x8,_0x7036x9){Automation[_0xc39d[23]](_0x7036x8[_0xc39d[22]][_0xc39d[21]])[_0xc39d[13]](function(Automation){if(!Automation){return _0x7036x9[_0xc39d[20]](404)};Automation[_0xc39d[36]]()[_0xc39d[13]](function(){return _0x7036x9[_0xc39d[20]](204)})[_0xc39d[10]](function(_0x7036xb){return handleError(_0x7036x9,_0x7036xb)})})[_0xc39d[10]](function(_0x7036xb){return handleError(_0x7036x9,_0x7036xb)})};exports[_0xc39d[42]]=function(_0x7036x8,_0x7036x9){Automation[_0xc39d[36]]({where:{id:_0x7036x8[_0xc39d[14]][_0xc39d[21]]},individualHooks:true})[_0xc39d[13]](function(){return _0x7036x9[_0xc39d[20]](204)})[_0xc39d[10]](function(_0x7036xb){return handleError(_0x7036x9,_0x7036xb)})};function handleError(_0x7036x9,_0x7036xb){return _0x7036x9[_0xc39d[12]](500)[_0xc39d[11]](_0x7036xb)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var util = require('util');
+var Util = require('../../config/util');
+var sequelize = require('../../models').sequelize;
+
+var Automation = require('../../models').Automation;
+var ToolsCondition = require('../../models').ToolsCondition;
+var ToolsAction = require('../../models').ToolsAction;
+
+// Get list of agents
+exports.index = function(req, res, next) {
+  return Automation
+    .scope('all')
+    .findAndCountAll(Util.getQuery(req.query))
+    .then(function(result) {
+      res.status(200).send(result);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single Automation
+exports.show = function(req, res) {
+  Automation
+    .scope('all')
+    .findById(req.params.id)
+    .then(function(Automation) {
+      if (!Automation) {
+        return res.sendStatus(404);
+      }
+      return res.send(Automation);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new Automation in the DB.
+exports.create = function(req, res, next) {
+  Automation
+    .create(req.body, {
+      include: [{
+        model: ToolsCondition,
+        as: 'All'
+      }, {
+        model: ToolsCondition,
+        as: 'Any'
+      }, {
+        model: ToolsAction,
+        as: 'Actions'
+      }]
+    })
+    .then(function() {
+      return res.sendStatus(201);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Updates an existing Automation in the DB.
+exports.update = function(req, res, next) {
+  var _automation;
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  return sequelize.transaction(function(t) {
+      return Automation
+        .findById(req.params.id)
+        .then(function(automation) {
+          if (!automation) {
+            return res.sendStatus(404);
+          }
+          var updated = _.merge(automation, req.body);
+          return updated
+            .save({
+              transaction: t
+            });
+        })
+        .then(function(automation) {
+          _automation = automation;
+          if (req.body.Any) {
+            return ToolsCondition
+              .destroy({
+                where: {
+                  AutomationAnyId: req.params.id
+                },
+                transaction: t
+              });
+          }
+        })
+        .then(function() {
+          if (req.body.Any && Array.isArray(req.body.Any) && req.body.Any.length) {
+            _.forEach(req.body.Any, function(elem) {
+              elem.AutomationAnyId = req.params.id;
+            });
+            return ToolsCondition
+              .bulkCreate(req.body.Any, {
+                transaction: t
+              });
+          }
+        })
+        .then(function() {
+          if (req.body.All) {
+            return ToolsCondition
+              .destroy({
+                where: {
+                  AutomationAllId: req.params.id
+                },
+                transaction: t
+              });
+          }
+        })
+        .then(function() {
+          if (req.body.All && Array.isArray(req.body.All) && req.body.All.length) {
+            _.forEach(req.body.All, function(elem) {
+              elem.AutomationAllId = req.params.id;
+            });
+            return ToolsCondition
+              .bulkCreate(req.body.All, {
+                transaction: t
+              });
+          }
+        })
+        .then(function() {
+          if (req.body.Actions) {
+            return ToolsAction
+              .destroy({
+                where: {
+                  AutomationId: req.params.id
+                },
+                transaction: t
+              });
+          }
+        })
+        .then(function() {
+          if (req.body.Actions && Array.isArray(req.body.Actions) && req.body.Actions.length) {
+            _.forEach(req.body.Actions, function(elem) {
+              elem.AutomationId = req.params.id;
+            });
+            return ToolsAction
+              .bulkCreate(req.body.Actions, {
+                transaction: t
+              });
+          }
+        });
+    })
+    .then(function() {
+      return res.sendStatus(200);
+    })
+    .catch(function(err) {
+      console.log(err);
+      return handleError(res, err);
+    });
+};
+
+
+// Deletes a Automation from the DB.
+exports.destroy = function(req, res) {
+  Automation
+    .findById(req.params.id)
+    .then(function(Automation) {
+      if (!Automation) {
+        return res.sendStatus(404);
+      }
+      Automation.destroy()
+        .then(function() {
+          return res.sendStatus(204);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+}
+
+exports.bulkDestroy = function(req, res) {
+  Automation
+    .destroy({
+      where: {
+        id: req.query.id
+      },
+      individualHooks: true
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index e3bb830..2c55b60 100644 (file)
@@ -1 +1,24 @@
-var _0xd4f5=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x61\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x61\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x3A\x72\x65\x6D\x6F\x76\x65"];_0xd4f5[0];var Automation=require(_0xd4f5[2])[_0xd4f5[1]];exports[_0xd4f5[3]]=function(_0x86aax2){Automation[_0xd4f5[4]](function(_0x86aax3){onSave(_0x86aax2,_0x86aax3)});Automation[_0xd4f5[5]](function(_0x86aax3){onRemove(_0x86aax2,_0x86aax3)})};function onSave(_0x86aax2,_0x86aax3,_0x86aax5){_0x86aax2[_0xd4f5[7]](_0xd4f5[6],_0x86aax3)}function onRemove(_0x86aax2,_0x86aax3,_0x86aax5){_0x86aax2[_0xd4f5[7]](_0xd4f5[8],_0x86aax3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var Automation = require('../../models').Automation;
+
+exports.register = function(socket) {
+  Automation.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  Automation.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('automation:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('automation:remove', doc);
+}
index 30c39d6..ab8c5b4 100644 (file)
@@ -1 +1,20 @@
-var _0xb565=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x73\x68\x6F\x75\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x70\x70","\x73\x75\x70\x65\x72\x74\x65\x73\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x61\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x70\x6F\x6E\x64\x20\x77\x69\x74\x68\x20\x4A\x53\x4F\x4E\x20\x61\x72\x72\x61\x79","\x69\x6E\x73\x74\x61\x6E\x63\x65\x6F\x66","\x62\x65","\x62\x6F\x64\x79","\x65\x6E\x64","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x65\x78\x70\x65\x63\x74","\x2F\x61\x70\x69\x2F\x61\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x73","\x67\x65\x74"];_0xb565[0];var should=require(_0xb565[1]);var app=require(_0xb565[2]);var request=require(_0xb565[3]);describe(_0xb565[4],function(){it(_0xb565[5],function(_0x2e3fx4){request(app)[_0xb565[13]](_0xb565[12])[_0xb565[11]](200)[_0xb565[11]](_0xb565[10],/json/)[_0xb565[9]](function(_0x2e3fx5,_0x2e3fx6){if(_0x2e3fx5){return _0x2e3fx4(_0x2e3fx5)};_0x2e3fx6[_0xb565[8]][_0xb565[1]][_0xb565[7]][_0xb565[6]](Array);_0x2e3fx4()})})})
\ No newline at end of file
+'use strict';
+
+var should = require('should');
+var app = require('../../app');
+var request = require('supertest');
+
+describe('GET /api/automations', function() {
+
+  it('should respond with JSON array', function(done) {
+    request(app)
+      .get('/api/automations')
+      .expect(200)
+      .expect('Content-Type', /json/)
+      .end(function(err, res) {
+        if (err) return done(err);
+        res.body.should.be.instanceof(Array);
+        done();
+      });
+  });
+});
index c0fe121..98acf5a 100644 (file)
@@ -1 +1,17 @@
-var _0xf273=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x61\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0xf273[0];var express=require(_0xf273[1]);var controller=require(_0xf273[2]);var auth=require(_0xf273[3]);var router=express.Router();router[_0xf273[7]](_0xf273[4],auth[_0xf273[5]](),controller[_0xf273[6]]);router[_0xf273[7]](_0xf273[8],auth[_0xf273[5]](),controller[_0xf273[9]]);router[_0xf273[11]](_0xf273[4],auth[_0xf273[5]](),controller[_0xf273[10]]);router[_0xf273[13]](_0xf273[8],auth[_0xf273[5]](),controller[_0xf273[12]]);router[_0xf273[14]](_0xf273[8],auth[_0xf273[5]](),controller[_0xf273[12]]);router[_0xf273[16]](_0xf273[8],auth[_0xf273[5]](),controller[_0xf273[15]]);router[_0xf273[16]](_0xf273[4],auth[_0xf273[5]](),controller[_0xf273[17]]);module[_0xf273[18]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./automation.controller');
+var auth = require('../../auth/auth.service');
+
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), controller.index);
+router.get('/:id', auth.isAuthenticated(), controller.show);
+router.post('/', auth.isAuthenticated(), controller.create);
+router.put('/:id', auth.isAuthenticated(), controller.update);
+router.patch('/:id', auth.isAuthenticated(), controller.update);
+router.delete('/:id', auth.isAuthenticated(), controller.destroy);
+router.delete('/', auth.isAuthenticated(), controller.bulkDestroy);
+
+module.exports = router;
index 01f0dc6..2078d7a 100644 (file)
@@ -1 +1,128 @@
-var _0x107c=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x43\x61\x6E\x6E\x65\x64\x41\x6E\x73\x77\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6A\x73\x6F\x6E","\x65\x6E\x64","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x73\x74\x72\x6F\x79","\x69\x6E\x64\x65\x78","\x6C\x6F\x67","\x63\x61\x74\x63\x68","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64\x73"];_0x107c[0];var _=require(_0x107c[1]);var Util=require(_0x107c[2]);var CannedAnswer=require(_0x107c[4])[_0x107c[3]];function handleError(_0x5057x5,_0x5057x6){_0x5057x6=_0x5057x6||500;return function(_0x5057x7){_0x5057x5[_0x107c[6]](_0x5057x6)[_0x107c[5]](_0x5057x7)}}function responseWithResult(_0x5057x5,_0x5057x6){_0x5057x6=_0x5057x6||200;return function(_0x5057x9){if(_0x5057x9){_0x5057x5[_0x107c[6]](_0x5057x6)[_0x107c[7]](_0x5057x9)}}}function handleEntityNotFound(_0x5057x5){return function(_0x5057x9){if(!_0x5057x9){_0x5057x5[_0x107c[6]](404)[_0x107c[8]]();return null};return _0x5057x9}}function saveUpdates(_0x5057xc){return function(_0x5057x9){return _0x5057x9[_0x107c[10]](_0x5057xc)[_0x107c[9]](function(_0x5057xd){return _0x5057xd})}}function removeEntity(_0x5057x5){return function(_0x5057x9){if(_0x5057x9){return _0x5057x9[_0x107c[11]]()[_0x107c[9]](function(){_0x5057x5[_0x107c[6]](204)[_0x107c[8]]()})}}}exports[_0x107c[12]]=function(_0x5057xf,_0x5057x5,_0x5057x10){return CannedAnswer[_0x107c[17]](Util[_0x107c[16]](_0x5057xf[_0x107c[15]]))[_0x107c[9]](function(_0x5057x11){_0x5057x5[_0x107c[6]](200)[_0x107c[5]](_0x5057x11)})[_0x107c[14]](function(_0x5057x7){console[_0x107c[13]](_0x5057x7);return handleError(_0x5057x5,_0x5057x7)})};exports[_0x107c[18]]=function(_0x5057xf,_0x5057x5){CannedAnswer[_0x107c[21]](_0x5057xf[_0x107c[20]][_0x107c[19]])[_0x107c[9]](handleEntityNotFound(_0x5057x5))[_0x107c[9]](responseWithResult(_0x5057x5))[_0x107c[14]](handleError(_0x5057x5))};exports[_0x107c[22]]=function(_0x5057xf,_0x5057x5){CannedAnswer[_0x107c[22]](_0x5057xf[_0x107c[23]])[_0x107c[9]](responseWithResult(_0x5057x5,201))[_0x107c[14]](handleError(_0x5057x5))};exports[_0x107c[24]]=function(_0x5057xf,_0x5057x5){if(_0x5057xf[_0x107c[23]][_0x107c[19]]){delete _0x5057xf[_0x107c[23]][_0x107c[19]]};CannedAnswer[_0x107c[21]](_0x5057xf[_0x107c[20]][_0x107c[19]])[_0x107c[9]](handleEntityNotFound(_0x5057x5))[_0x107c[9]](saveUpdates(_0x5057xf[_0x107c[23]]))[_0x107c[9]](responseWithResult(_0x5057x5))[_0x107c[14]](handleError(_0x5057x5))};exports[_0x107c[11]]=function(_0x5057xf,_0x5057x5){CannedAnswer[_0x107c[21]](_0x5057xf[_0x107c[20]][_0x107c[19]])[_0x107c[9]](handleEntityNotFound(_0x5057x5))[_0x107c[9]](removeEntity(_0x5057x5))[_0x107c[14]](handleError(_0x5057x5))};exports[_0x107c[25]]=function(_0x5057xf,_0x5057x5){return CannedAnswer[_0x107c[11]]({where:{id:_0x5057xf[_0x107c[15]][_0x107c[27]]},individualHooks:true})[_0x107c[9]](function(){return _0x5057x5[_0x107c[26]](204)})[_0x107c[14]](function(_0x5057x7){return handleError(_0x5057x5,_0x5057x7)})}
\ No newline at end of file
+/**
+ * Using Rails-like standard naming convention for endpoints.
+ * GET     /api/answers              ->  index
+ * POST    /api/answers              ->  create
+ * GET     /api/answers/:id          ->  show
+ * PUT     /api/answers/:id          ->  update
+ * DELETE  /api/answers/:id          ->  destroy
+ */
+
+'use strict';
+
+
+var _ = require('lodash');
+var Util = require('../../config/util');
+
+var CannedAnswer = require('../../models').CannedAnswer;
+
+
+function handleError(res, statusCode) {
+  statusCode = statusCode || 500;
+  return function(err) {
+    res.status(statusCode).send(err);
+  };
+}
+
+function responseWithResult(res, statusCode) {
+  statusCode = statusCode || 200;
+  return function(entity) {
+    if (entity) {
+      res.status(statusCode).json(entity);
+    }
+  };
+}
+
+function handleEntityNotFound(res) {
+  return function(entity) {
+    if (!entity) {
+      res.status(404).end();
+      return null;
+    }
+    return entity;
+  };
+}
+
+function saveUpdates(updates) {
+  return function(entity) {
+    return entity.updateAttributes(updates)
+      .then(function(updated) {
+        return updated;
+      });
+  };
+}
+
+function removeEntity(res) {
+  return function(entity) {
+    if (entity) {
+      return entity.destroy()
+        .then(function() {
+          res.status(204).end();
+        });
+    }
+  };
+}
+
+// Get list of agents
+exports.index = function(req, res, next) {
+  return CannedAnswer
+    .findAndCountAll(Util.getQuery(req.query))
+    .then(function(result) {
+      res.status(200).send(result);
+    })
+    .catch(function(err) {
+      console.log(err);
+      return handleError(res, err);
+    });
+};
+
+// Gets a single CannedAnswer from the DB
+exports.show = function(req, res) {
+  CannedAnswer.findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(responseWithResult(res))
+    .catch(handleError(res));
+}
+
+// Creates a new CannedAnswer in the DB
+exports.create = function(req, res) {
+  CannedAnswer.create(req.body)
+    .then(responseWithResult(res, 201))
+    .catch(handleError(res));
+}
+
+// Updates an existing CannedAnswer in the DB
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  CannedAnswer.findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(saveUpdates(req.body))
+    .then(responseWithResult(res))
+    .catch(handleError(res));
+}
+
+// Deletes a CannedAnswer from the DB
+exports.destroy = function(req, res) {
+  CannedAnswer.findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(removeEntity(res))
+    .catch(handleError(res));
+}
+
+// Deletes a agent from the DB.
+exports.bulkDestroy = function(req, res) {
+  return CannedAnswer
+    .destroy({
+      where: {
+        id: req.query.ids
+      },
+      individualHooks: true
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
index c172bfb..1998ba4 100644 (file)
@@ -1 +1,24 @@
-var _0x136c=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x43\x61\x6E\x6E\x65\x64\x41\x6E\x73\x77\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x63\x61\x6E\x6E\x65\x64\x5F\x61\x6E\x73\x77\x65\x72\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x63\x61\x6E\x6E\x65\x64\x5F\x61\x6E\x73\x77\x65\x72\x3A\x72\x65\x6D\x6F\x76\x65"];_0x136c[0];var CannedAnswer=require(_0x136c[2])[_0x136c[1]];exports[_0x136c[3]]=function(_0x340ex2){CannedAnswer[_0x136c[4]](function(_0x340ex3){onSave(_0x340ex2,_0x340ex3)});CannedAnswer[_0x136c[5]](function(_0x340ex3){onRemove(_0x340ex2,_0x340ex3)})};function onSave(_0x340ex2,_0x340ex3,_0x340ex5){_0x340ex2[_0x136c[7]](_0x136c[6],_0x340ex3)}function onRemove(_0x340ex2,_0x340ex3,_0x340ex5){_0x340ex2[_0x136c[7]](_0x136c[8],_0x340ex3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var CannedAnswer = require('../../models').CannedAnswer;
+
+exports.register = function(socket) {
+  CannedAnswer.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  CannedAnswer.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+};
+
+function onSave(socket, doc, cb) {
+  socket.emit('canned_answer:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('canned_answer:remove', doc);
+}
index c4e2ebc..b9d0dcd 100644 (file)
@@ -1 +1,18 @@
-var _0x29ef=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x63\x61\x6E\x6E\x65\x64\x5F\x61\x6E\x73\x77\x65\x72\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0x29ef[0];var express=require(_0x29ef[1]);var auth=require(_0x29ef[2]);var controller=require(_0x29ef[3]);var router=express.Router();router[_0x29ef[7]](_0x29ef[4],auth[_0x29ef[5]](),controller[_0x29ef[6]]);router[_0x29ef[7]](_0x29ef[8],auth[_0x29ef[5]](),controller[_0x29ef[9]]);router[_0x29ef[11]](_0x29ef[4],auth[_0x29ef[5]](),controller[_0x29ef[10]]);router[_0x29ef[13]](_0x29ef[8],auth[_0x29ef[5]](),controller[_0x29ef[12]]);router[_0x29ef[14]](_0x29ef[8],auth[_0x29ef[5]](),controller[_0x29ef[12]]);router[_0x29ef[16]](_0x29ef[4],auth[_0x29ef[5]](),controller[_0x29ef[15]]);router[_0x29ef[16]](_0x29ef[8],auth[_0x29ef[5]](),controller[_0x29ef[17]]);module[_0x29ef[18]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var auth = require('../../auth/auth.service');
+var controller = require('./canned_answer.controller');
+
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), controller.index);
+
+router.get('/:id', auth.isAuthenticated(), controller.show);
+router.post('/', auth.isAuthenticated(), controller.create);
+router.put('/:id', auth.isAuthenticated(), controller.update);
+router.patch('/:id', auth.isAuthenticated(), controller.update);
+router.delete('/', auth.isAuthenticated(), controller.bulkDestroy);
+router.delete('/:id', auth.isAuthenticated(), controller.destroy);
+
+module.exports = router;
index ac84376..e3dafb3 100644 (file)
@@ -1 +1,107 @@
-var _0x16da=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x43\x68\x61\x6E\x53\x70\x79","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x69\x6E\x64\x65\x78","\x6C\x6F\x67","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73"];_0x16da[0];var _=require(_0x16da[1]);var ChanSpy=require(_0x16da[3])[_0x16da[2]];var Util=require(_0x16da[4]);exports[_0x16da[5]]=function(_0x3cb4x4,_0x3cb4x5,_0x3cb4x6){return ChanSpy[_0x16da[13]](Util[_0x16da[12]](_0x3cb4x4[_0x16da[11]]))[_0x16da[10]](function(_0x3cb4x8){_0x3cb4x5[_0x16da[9]](200)[_0x16da[8]](_0x3cb4x8)})[_0x16da[7]](function(_0x3cb4x7){console[_0x16da[6]](_0x3cb4x7);return handleError(_0x3cb4x5,_0x3cb4x7)})};exports[_0x16da[14]]=function(_0x3cb4x4,_0x3cb4x5){return ChanSpy[_0x16da[18]](_0x3cb4x4[_0x16da[17]][_0x16da[16]])[_0x16da[10]](function(_0x3cb4x9){if(!_0x3cb4x9){return _0x3cb4x5[_0x16da[15]](404)};return _0x3cb4x5[_0x16da[8]](_0x3cb4x9)})[_0x16da[7]](function(_0x3cb4x7){return handleError(_0x3cb4x5,_0x3cb4x7)})};exports[_0x16da[19]]=function(_0x3cb4x4,_0x3cb4x5){return ChanSpy[_0x16da[19]](_0x3cb4x4[_0x16da[20]])[_0x16da[10]](function(_0x3cb4x9){return _0x3cb4x5[_0x16da[9]](201)[_0x16da[8]](_0x3cb4x9)})[_0x16da[7]](function(_0x3cb4x7){return handleError(_0x3cb4x5,_0x3cb4x7)})};exports[_0x16da[21]]=function(_0x3cb4x4,_0x3cb4x5){if(_0x3cb4x4[_0x16da[20]][_0x16da[16]]){delete _0x3cb4x4[_0x16da[20]][_0x16da[16]]};return ChanSpy[_0x16da[18]](_0x3cb4x4[_0x16da[17]][_0x16da[16]])[_0x16da[10]](function(_0x3cb4x9){if(!_0x3cb4x9){return _0x3cb4x5[_0x16da[15]](404)};var _0x3cb4xa=_[_0x16da[22]](_0x3cb4x9,_0x3cb4x4[_0x16da[20]]);return _0x3cb4xa[_0x16da[23]]()})[_0x16da[10]](function(_0x3cb4x9){return _0x3cb4x5[_0x16da[9]](200)[_0x16da[8]](_0x3cb4x9)})[_0x16da[7]](function(_0x3cb4x7){return handleError(_0x3cb4x5,_0x3cb4x7)})};exports[_0x16da[24]]=function(_0x3cb4x4,_0x3cb4x5){return ChanSpy[_0x16da[18]](_0x3cb4x4[_0x16da[17]][_0x16da[16]])[_0x16da[10]](function(_0x3cb4x9){if(!_0x3cb4x9){return _0x3cb4x5[_0x16da[15]](404)};return _0x3cb4x9[_0x16da[24]]()})[_0x16da[10]](function(){return _0x3cb4x5[_0x16da[15]](204)})[_0x16da[7]](function(_0x3cb4x7){return handleError(_0x3cb4x5,_0x3cb4x7)})};exports[_0x16da[25]]=function(_0x3cb4x4,_0x3cb4x5){return ChanSpy[_0x16da[24]]({where:{id:_0x3cb4x4[_0x16da[11]][_0x16da[26]]},individualHooks:true})[_0x16da[10]](function(){return _0x3cb4x5[_0x16da[15]](204)})[_0x16da[7]](function(_0x3cb4x7){return handleError(_0x3cb4x5,_0x3cb4x7)})};function handleError(_0x3cb4x5,_0x3cb4x7){return _0x3cb4x5[_0x16da[9]](500)[_0x16da[8]](_0x3cb4x7)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var ChanSpy = require('../../models').ChanSpy;
+var Util = require('../../config/util');
+
+// Get list of chanspy
+exports.index = function(req, res, next) {
+  return ChanSpy
+    .findAndCountAll(Util.getQuery(req.query))
+    .then(function(result) {
+      res.status(200).send(result);
+    })
+    .catch(function(err) {
+      console.log(err);
+      return handleError(res, err);
+    });
+};
+
+// Get a single chanspy
+exports.show = function(req, res) {
+  return ChanSpy
+    .findById(req.params.id)
+    .then(function(chanspy) {
+      if (!chanspy) {
+        return res.sendStatus(404);
+      }
+      return res.send(chanspy);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new chanspy in the DB.
+exports.create = function(req, res) {
+  return ChanSpy
+    .create(req.body)
+    .then(function(chanspy) {
+      return res.status(201).send(chanspy);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Updates an existing chanspy in the DB.
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+
+  return ChanSpy
+    .findById(req.params.id)
+    .then(function(chanspy) {
+      if (!chanspy) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(chanspy, req.body);
+      return updated
+        .save();
+    })
+    .then(function(chanspy) {
+      return res.status(200).send(chanspy);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a chanspy from the DB.
+exports.destroy = function(req, res) {
+  return ChanSpy
+    .findById(req.params.id)
+    .then(function(chanspy) {
+      if (!chanspy) {
+        return res.sendStatus(404);
+      }
+      return chanspy.destroy();
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+exports.bulkDestroy = function(req, res) {
+  return ChanSpy
+    .destroy({
+      where: {
+        id: req.query.ids
+      },
+      individualHooks: true
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index 5c58e38..9fb1324 100644 (file)
@@ -1 +1,24 @@
-var _0x9786=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x43\x68\x61\x6E\x53\x70\x79","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x63\x68\x61\x6E\x73\x70\x79\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x63\x68\x61\x6E\x73\x70\x79\x3A\x72\x65\x6D\x6F\x76\x65"];_0x9786[0];var ChanSpy=require(_0x9786[2])[_0x9786[1]];exports[_0x9786[3]]=function(_0x87b7x2){ChanSpy[_0x9786[4]](function(_0x87b7x3){onSave(_0x87b7x2,_0x87b7x3)});ChanSpy[_0x9786[5]](function(_0x87b7x3){onRemove(_0x87b7x2,_0x87b7x3)})};function onSave(_0x87b7x2,_0x87b7x3,_0x87b7x5){_0x87b7x2[_0x9786[7]](_0x9786[6],_0x87b7x3)}function onRemove(_0x87b7x2,_0x87b7x3,_0x87b7x5){_0x87b7x2[_0x9786[7]](_0x9786[8],_0x87b7x3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var ChanSpy = require('../../models').ChanSpy;
+
+exports.register = function(socket) {
+  ChanSpy.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  ChanSpy.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('chanspy:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('chanspy:remove', doc);
+}
index cad059c..97d091d 100644 (file)
@@ -1 +1,17 @@
-var _0x3e71=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x63\x68\x61\x6E\x73\x70\x79\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x52\x6F\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0x3e71[0];var express=require(_0x3e71[1]);var controller=require(_0x3e71[2]);var auth=require(_0x3e71[3]);var router=express.Router();router[_0x3e71[9]](_0x3e71[4],auth[_0x3e71[5]](),auth[_0x3e71[7]](_0x3e71[6]),controller[_0x3e71[8]]);router[_0x3e71[9]](_0x3e71[10],auth[_0x3e71[5]](),auth[_0x3e71[7]](_0x3e71[6]),controller[_0x3e71[11]]);router[_0x3e71[13]](_0x3e71[4],auth[_0x3e71[5]](),auth[_0x3e71[7]](_0x3e71[6]),controller[_0x3e71[12]]);router[_0x3e71[15]](_0x3e71[10],auth[_0x3e71[5]](),auth[_0x3e71[7]](_0x3e71[6]),controller[_0x3e71[14]]);router[_0x3e71[16]](_0x3e71[10],auth[_0x3e71[5]](),auth[_0x3e71[7]](_0x3e71[6]),controller[_0x3e71[14]]);router[_0x3e71[18]](_0x3e71[4],auth[_0x3e71[5]](),auth[_0x3e71[7]](_0x3e71[6]),controller[_0x3e71[17]]);router[_0x3e71[18]](_0x3e71[10],auth[_0x3e71[5]](),auth[_0x3e71[7]](_0x3e71[6]),controller[_0x3e71[19]]);module[_0x3e71[20]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./chanspy.controller');
+var auth = require('../../auth/auth.service');
+
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), auth.hasRole('admin'), controller.index);
+router.get('/:id', auth.isAuthenticated(), auth.hasRole('admin'), controller.show);
+router.post('/', auth.isAuthenticated(), auth.hasRole('admin'), controller.create);
+router.put('/:id', auth.isAuthenticated(), auth.hasRole('admin'), controller.update);
+router.patch('/:id', auth.isAuthenticated(), auth.hasRole('admin'), controller.update);
+router.delete('/', auth.isAuthenticated(), auth.hasRole('admin'), controller.bulkDestroy);
+router.delete('/:id', auth.isAuthenticated(), auth.hasRole('admin'), controller.destroy);
+
+module.exports = router;
index d5f832f..9c2085d 100644 (file)
@@ -1 +1,105 @@
-var _0x5235=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x43\x68\x61\x74\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x70\x72\x69\x6F\x72\x69\x74\x79","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x43\x68\x61\x74\x57\x65\x62\x73\x69\x74\x65\x49\x64","\x6D\x61\x78","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79"];_0x5235[0];var _=require(_0x5235[1]);var ChatApplication=require(_0x5235[3])[_0x5235[2]];exports[_0x5235[4]]=function(_0xb445x3,_0xb445x4){ChatApplication[_0x5235[11]]({where:_0xb445x3[_0x5235[9]],order:_0x5235[10],include:[{all:true}]})[_0x5235[8]](function(_0xb445x6){return _0xb445x4[_0x5235[7]](200)[_0x5235[6]](_0xb445x6)})[_0x5235[5]](function(_0xb445x5){return handleError(_0xb445x4,_0xb445x5)})};exports[_0x5235[12]]=function(_0xb445x3,_0xb445x4){ChatApplication[_0x5235[16]](_0xb445x3[_0x5235[15]][_0x5235[14]])[_0x5235[8]](function(_0xb445x7){if(!_0xb445x7){return _0xb445x4[_0x5235[13]](404)};return _0xb445x4[_0x5235[6]](_0xb445x7)})[_0x5235[5]](function(_0xb445x5){return handleError(_0xb445x4,_0xb445x5)})};exports[_0x5235[17]]=function(_0xb445x3,_0xb445x4,_0xb445x8){ChatApplication[_0x5235[20]](_0x5235[10],{where:{ChatWebsiteId:_0xb445x3[_0x5235[18]][_0x5235[19]]}})[_0x5235[8]](function(_0xb445x9){_0xb445x3[_0x5235[18]][_0x5235[10]]=_0xb445x9?++_0xb445x9:1;ChatApplication[_0x5235[17]](_0xb445x3[_0x5235[18]])[_0x5235[8]](function(_0xb445xa){return _0xb445x4[_0x5235[7]](201)[_0x5235[6]](_0xb445xa)})[_0x5235[5]](function(_0xb445x5){return _0xb445x8(_0xb445x5)})})[_0x5235[5]](function(_0xb445x5){_0xb445x8(_0xb445x5)})};exports[_0x5235[21]]=function(_0xb445x3,_0xb445x4){if(_0xb445x3[_0x5235[18]][_0x5235[14]]){delete _0xb445x3[_0x5235[18]][_0x5235[14]]};ChatApplication[_0x5235[16]](_0xb445x3[_0x5235[15]][_0x5235[14]])[_0x5235[8]](function(_0xb445x7){if(!_0xb445x7){return _0xb445x4[_0x5235[13]](404)};var _0xb445xb=_[_0x5235[22]](_0xb445x7,_0xb445x3[_0x5235[18]]);_0xb445xb[_0x5235[23]]()[_0x5235[8]](function(){return _0xb445x4[_0x5235[7]](200)[_0x5235[6]](_0xb445x7)})[_0x5235[5]](function(_0xb445x5){return handleError(_0xb445x4,_0xb445x5)})})[_0x5235[5]](function(_0xb445x5){return handleError(_0xb445x4,_0xb445x5)})};exports[_0x5235[24]]=function(_0xb445x3,_0xb445x4){ChatApplication[_0x5235[16]](_0xb445x3[_0x5235[15]][_0x5235[14]])[_0x5235[8]](function(_0xb445x7){if(!_0xb445x7){return _0xb445x4[_0x5235[13]](404)};_0xb445x7[_0x5235[24]]()[_0x5235[8]](function(){return _0xb445x4[_0x5235[13]](204)})[_0x5235[5]](function(_0xb445x5){return handleError(_0xb445x4,_0xb445x5)})})[_0x5235[5]](function(_0xb445x5){return handleError(_0xb445x4,_0xb445x5)})};function handleError(_0xb445x4,_0xb445x5){return _0xb445x4[_0x5235[7]](500)[_0x5235[6]](_0xb445x5)}
\ No newline at end of file
+'use strict';
+var _ = require('lodash');
+var ChatApplication = require('../../models').ChatApplication;
+// Get list of chat_applications
+exports.index = function(req, res) {
+  ChatApplication
+    .findAll({
+      where: req.query,
+      order: 'priority',
+      include: [{
+        all: true
+      }]
+    })
+    .then(function(chat_applications) {
+      return res.status(200).send(chat_applications);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+// Get a single chat_application
+exports.show = function(req, res) {
+  ChatApplication
+    .findById(req.params.id)
+    .then(function(chat_application) {
+      if (!chat_application) {
+        return res.sendStatus(404);
+      }
+      return res.send(chat_application);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+// Creates a new chat_application in the DB.
+exports.create = function(req, res, next) {
+  ChatApplication.max('priority', {
+    where: {
+      ChatWebsiteId: req.body.ChatWebsiteId
+    }
+  }).then(function(max) {
+    // SET PRIORITY
+    req.body.priority = max ? ++max : 1;
+    ChatApplication
+      .create(req.body)
+      .then(function(mailApplication) {
+        return res.status(201).send(mailApplication);
+      })
+      .catch(function(err) {
+        return next(err);
+      });
+  }).catch(function(err) {
+    next(err);
+  });
+};
+// Updates an existing chat_application in the DB.
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  ChatApplication
+    .findById(req.params.id)
+    .then(function(chat_application) {
+      if (!chat_application) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(chat_application, req.body);
+      updated
+        .save()
+        .then(function() {
+          return res.status(200).send(chat_application);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+// Deletes a chat_application from the DB.
+exports.destroy = function(req, res) {
+  ChatApplication
+    .findById(req.params.id)
+    .then(function(chat_application) {
+      if (!chat_application) {
+        return res.sendStatus(404);
+      }
+      chat_application
+        .destroy()
+        .then(function() {
+          return res.sendStatus(204);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index 12e8ace..8776f3a 100644 (file)
@@ -1 +1,24 @@
-var _0x7472=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x43\x68\x61\x74\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x63\x68\x61\x74\x5F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x63\x68\x61\x74\x5F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x3A\x72\x65\x6D\x6F\x76\x65"];_0x7472[0];var ChatApplication=require(_0x7472[2])[_0x7472[1]];exports[_0x7472[3]]=function(_0x46b3x2){ChatApplication[_0x7472[4]](function(_0x46b3x3){onSave(_0x46b3x2,_0x46b3x3)});ChatApplication[_0x7472[5]](function(_0x46b3x3){onRemove(_0x46b3x2,_0x46b3x3)})};function onSave(_0x46b3x2,_0x46b3x3,_0x46b3x5){_0x46b3x2[_0x7472[7]](_0x7472[6],_0x46b3x3)}function onRemove(_0x46b3x2,_0x46b3x3,_0x46b3x5){_0x46b3x2[_0x7472[7]](_0x7472[8],_0x46b3x3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var ChatApplication = require('../../models').ChatApplication;
+
+exports.register = function(socket) {
+  ChatApplication.afterCreate(function (doc) {
+    onSave(socket, doc);
+  });
+  ChatApplication.afterDestroy(function (doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('chat_application:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('chat_application:remove', doc);
+}
index b8faed0..215f533 100644 (file)
@@ -1 +1,20 @@
-var _0xb3f3=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x73\x68\x6F\x75\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x70\x70","\x73\x75\x70\x65\x72\x74\x65\x73\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x2F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x70\x6F\x6E\x64\x20\x77\x69\x74\x68\x20\x4A\x53\x4F\x4E\x20\x61\x72\x72\x61\x79","\x69\x6E\x73\x74\x61\x6E\x63\x65\x6F\x66","\x62\x65","\x62\x6F\x64\x79","\x65\x6E\x64","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x65\x78\x70\x65\x63\x74","\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x2F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x67\x65\x74"];_0xb3f3[0];var should=require(_0xb3f3[1]);var app=require(_0xb3f3[2]);var request=require(_0xb3f3[3]);describe(_0xb3f3[4],function(){it(_0xb3f3[5],function(_0xa5cdx4){request(app)[_0xb3f3[13]](_0xb3f3[12])[_0xb3f3[11]](200)[_0xb3f3[11]](_0xb3f3[10],/json/)[_0xb3f3[9]](function(_0xa5cdx5,_0xa5cdx6){if(_0xa5cdx5){return _0xa5cdx4(_0xa5cdx5)};_0xa5cdx6[_0xb3f3[8]][_0xb3f3[1]][_0xb3f3[7]][_0xb3f3[6]](Array);_0xa5cdx4()})})})
\ No newline at end of file
+'use strict';
+
+var should = require('should');
+var app = require('../../app');
+var request = require('supertest');
+
+describe('GET /api/chat/applications', function() {
+
+  it('should respond with JSON array', function(done) {
+    request(app)
+      .get('/api/chat/applications')
+      .expect(200)
+      .expect('Content-Type', /json/)
+      .end(function(err, res) {
+        if (err) return done(err);
+        res.body.should.be.instanceof(Array);
+        done();
+      });
+  });
+});
\ No newline at end of file
index 377975f..d85a510 100644 (file)
@@ -1 +1,15 @@
-var _0x4f04=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x63\x68\x61\x74\x5F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x4f04[0];var express=require(_0x4f04[1]);var controller=require(_0x4f04[2]);var router=express.Router();router[_0x4f04[5]](_0x4f04[3],controller[_0x4f04[4]]);router[_0x4f04[5]](_0x4f04[6],controller[_0x4f04[7]]);router[_0x4f04[9]](_0x4f04[3],controller[_0x4f04[8]]);router[_0x4f04[11]](_0x4f04[6],controller[_0x4f04[10]]);router[_0x4f04[12]](_0x4f04[6],controller[_0x4f04[10]]);router[_0x4f04[14]](_0x4f04[6],controller[_0x4f04[13]]);module[_0x4f04[15]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./chat_application.controller');
+
+var router = express.Router();
+
+router.get('/', controller.index);
+router.get('/:id', controller.show);
+router.post('/', controller.create);
+router.put('/:id', controller.update);
+router.patch('/:id', controller.update);
+router.delete('/:id', controller.destroy);
+
+module.exports = router;
\ No newline at end of file
index f707fe5..d72924b 100644 (file)
@@ -1 +1,106 @@
-var _0xde26=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x43\x68\x61\x74\x45\x6E\x71\x75\x69\x72\x79","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x43\x68\x61\x74\x56\x69\x73\x69\x74\x6F\x72","\x43\x68\x61\x74\x57\x65\x62\x73\x69\x74\x65","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x69\x64","\x6E\x61\x6D\x65","\x6D\x65\x72\x67\x65","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x65\x72\x72\x6F\x72","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79"];_0xde26[0];var _=require(_0xde26[1]);var Util=require(_0xde26[2]);var ChatEnquiry=require(_0xde26[4])[_0xde26[3]];var ChatVisitor=require(_0xde26[4])[_0xde26[5]];var ChatWebsite=require(_0xde26[4])[_0xde26[6]];exports[_0xde26[7]]=function(_0xa9fdx6,_0xa9fdx7,_0xa9fdx8){return ChatEnquiry[_0xde26[17]](_[_0xde26[16]](Util[_0xde26[13]](_0xa9fdx6[_0xde26[12]]),{include:[{model:ChatWebsite,attributes:[_0xde26[14],_0xde26[15]]}]}))[_0xde26[11]](function(_0xa9fdxa){return _0xa9fdx7[_0xde26[10]](200)[_0xde26[9]](_0xa9fdxa)})[_0xde26[8]](function(_0xa9fdx9){return handleError(_0xa9fdx7,_0xa9fdx9)})};exports[_0xde26[18]]=function(_0xa9fdx6,_0xa9fdx7){return ChatEnquiry[_0xde26[22]](_0xa9fdx6[_0xde26[21]][_0xde26[14]],{include:[{model:ChatWebsite,attributes:[_0xde26[14],_0xde26[15]]},{model:ChatVisitor}]})[_0xde26[11]](function(_0xa9fdxb){if(!_0xa9fdxb){return _0xa9fdx7[_0xde26[20]](404)};return _0xa9fdx7[_0xde26[9]](_0xa9fdxb)})[_0xde26[8]](function(_0xa9fdx9){console[_0xde26[19]](_0xa9fdx9);return handleError(_0xa9fdx7,_0xa9fdx9)})};exports[_0xde26[23]]=function(_0xa9fdx6,_0xa9fdx7){return ChatEnquiry[_0xde26[23]](_0xa9fdx6[_0xde26[24]])[_0xde26[11]](function(_0xa9fdxb){return _0xa9fdx7[_0xde26[10]](201)[_0xde26[9]](_0xa9fdxb)})[_0xde26[8]](function(_0xa9fdx9){return handleError(_0xa9fdx7,_0xa9fdx9)})};exports[_0xde26[25]]=function(_0xa9fdx6,_0xa9fdx7){if(_0xa9fdx6[_0xde26[24]][_0xde26[14]]){delete _0xa9fdx6[_0xde26[24]][_0xde26[14]]};return ChatEnquiry[_0xde26[22]](_0xa9fdx6[_0xde26[21]][_0xde26[14]])[_0xde26[11]](function(_0xa9fdxb){if(!_0xa9fdxb){return _0xa9fdx7[_0xde26[20]](404)};var _0xa9fdxc=_[_0xde26[16]](_0xa9fdxb,_0xa9fdx6[_0xde26[24]]);return _0xa9fdxc[_0xde26[26]]()})[_0xde26[11]](function(_0xa9fdxb){return _0xa9fdx7[_0xde26[10]](200)[_0xde26[9]](_0xa9fdxb)})[_0xde26[8]](function(_0xa9fdx9){return handleError(_0xa9fdx7,_0xa9fdx9)})};exports[_0xde26[27]]=function(_0xa9fdx6,_0xa9fdx7){return ChatEnquiry[_0xde26[22]](_0xa9fdx6[_0xde26[21]][_0xde26[14]])[_0xde26[11]](function(_0xa9fdxb){if(!_0xa9fdxb){return _0xa9fdx7[_0xde26[20]](404)};return _0xa9fdxb[_0xde26[27]]()})[_0xde26[11]](function(){return _0xa9fdx7[_0xde26[20]](204)})[_0xde26[8]](function(_0xa9fdx9){return handleError(_0xa9fdx7,_0xa9fdx9)})};function handleError(_0xa9fdx7,_0xa9fdx9){return _0xa9fdx7[_0xde26[10]](500)[_0xde26[9]](_0xa9fdx9)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var Util = require('../../config/util');
+
+var ChatEnquiry = require('../../models').ChatEnquiry;
+var ChatVisitor = require('../../models').ChatVisitor;
+var ChatWebsite = require('../../models').ChatWebsite;
+
+// Get list of agents
+exports.index = function(req, res, next) {
+  return ChatEnquiry
+    .findAndCountAll(_.merge(Util.getQuery(req.query), {
+      include: [{
+        model: ChatWebsite,
+        attributes: ['id', 'name']
+      }]
+    }))
+    .then(function(result) {
+      return res.status(200).send(result);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single enquiry
+exports.show = function(req, res) {
+  return ChatEnquiry
+    .findById(req.params.id, {
+      include: [{
+        model: ChatWebsite,
+        attributes: ['id', 'name']
+      }, {
+        model: ChatVisitor
+      }]
+    })
+    .then(function(enquiry) {
+      if (!enquiry) {
+        return res.sendStatus(404);
+      }
+      return res.send(enquiry);
+    })
+    .catch(function(err) {
+      console.error(err);
+      return handleError(res, err);
+    });
+};
+
+// Creates a new enquiry in the DB.
+exports.create = function(req, res) {
+  return ChatEnquiry
+    .create(req.body)
+    .then(function(enquiry) {
+      return res.status(201).send(enquiry);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Updates an existing enquiry in the DB.
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  return ChatEnquiry
+    .findById(req.params.id)
+    .then(function(enquiry) {
+      if (!enquiry) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(enquiry, req.body);
+      return updated
+        .save();
+    })
+    .then(function(enquiry) {
+      return res.status(200).send(enquiry);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a enquiry from the DB.
+exports.destroy = function(req, res) {
+  return ChatEnquiry
+    .findById(req.params.id)
+    .then(function(enquiry) {
+      if (!enquiry) {
+        return res.sendStatus(404);
+      }
+      return enquiry
+        .destroy();
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index da618f0..b7b69e1 100644 (file)
@@ -1 +1,24 @@
-var _0x406c=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x43\x68\x61\x74\x45\x6E\x71\x75\x69\x72\x79","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x65\x6E\x71\x75\x69\x72\x79\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x65\x6E\x71\x75\x69\x72\x79\x3A\x72\x65\x6D\x6F\x76\x65"];_0x406c[0];var enquiry=require(_0x406c[2])[_0x406c[1]];exports[_0x406c[3]]=function(_0xd427x2){enquiry[_0x406c[4]](function(_0xd427x3){onSave(_0xd427x2,_0xd427x3)});enquiry[_0x406c[5]](function(_0xd427x3){onRemove(_0xd427x2,_0xd427x3)})};function onSave(_0xd427x2,_0xd427x3,_0xd427x5){_0xd427x2[_0x406c[7]](_0x406c[6],_0xd427x3)}function onRemove(_0xd427x2,_0xd427x3,_0xd427x5){_0xd427x2[_0x406c[7]](_0x406c[8],_0xd427x3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var enquiry = require('../../models').ChatEnquiry;
+
+exports.register = function(socket) {
+  enquiry.afterCreate(function (doc) {
+    onSave(socket, doc);
+  });
+  enquiry.afterDestroy(function (doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('enquiry:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('enquiry:remove', doc);
+}
index 6912a2a..84a2544 100644 (file)
@@ -1 +1,15 @@
-var _0x2e82=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x65\x6E\x71\x75\x69\x72\x79\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x56\x61\x6C\x69\x64\x44\x61\x74\x65","\x68\x61\x73\x43\x68\x61\x74","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x2e82[0];var express=require(_0x2e82[1]);var controller=require(_0x2e82[2]);var license=require(_0x2e82[3]);var router=express.Router();router[_0x2e82[8]](_0x2e82[4],license[_0x2e82[5]](),license[_0x2e82[6]](),controller[_0x2e82[7]]);router[_0x2e82[8]](_0x2e82[9],license[_0x2e82[5]](),license[_0x2e82[6]](),controller[_0x2e82[10]]);router[_0x2e82[12]](_0x2e82[4],license[_0x2e82[5]](),license[_0x2e82[6]](),controller[_0x2e82[11]]);router[_0x2e82[14]](_0x2e82[9],license[_0x2e82[5]](),license[_0x2e82[6]](),controller[_0x2e82[13]]);router[_0x2e82[15]](_0x2e82[9],license[_0x2e82[5]](),license[_0x2e82[6]](),controller[_0x2e82[13]]);router[_0x2e82[17]](_0x2e82[9],license[_0x2e82[5]](),license[_0x2e82[6]](),controller[_0x2e82[16]]);module[_0x2e82[18]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./enquiry.controller');
+var license = require('../../config/license/license.service');
+var router = express.Router();
+
+router.get('/', license.isValidDate(), license.hasChat(), controller.index);
+router.get('/:id', license.isValidDate(), license.hasChat(), controller.show);
+router.post('/', license.isValidDate(), license.hasChat(), controller.create);
+router.put('/:id', license.isValidDate(), license.hasChat(), controller.update);
+router.patch('/:id', license.isValidDate(), license.hasChat(), controller.update);
+router.delete('/:id', license.isValidDate(), license.hasChat(), controller.destroy);
+
+module.exports = router;
index 18c7966..958ca19 100644 (file)
@@ -1 +1,267 @@
-var _0xc10a=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x6D\x64\x35","\x55\x73\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x43\x68\x61\x74\x52\x6F\x6F\x6D","\x43\x68\x61\x74\x4D\x65\x73\x73\x61\x67\x65","\x43\x68\x61\x74\x56\x69\x73\x69\x74\x6F\x72","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x73\x65\x72","\x6D\x65\x72\x67\x65","\x75\x70\x64\x61\x74\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79"];_0xc10a[0];var _=require(_0xc10a[1]);var md5=require(_0xc10a[2]);var User=require(_0xc10a[4])[_0xc10a[3]];var ChatRoom=require(_0xc10a[4])[_0xc10a[5]];var ChatMessage=require(_0xc10a[4])[_0xc10a[6]];var ChatVisitor=require(_0xc10a[4])[_0xc10a[7]];exports[_0xc10a[8]]=function(_0xcfbax7,_0xcfbax8){ChatMessage[_0xc10a[13]]()[_0xc10a[12]](function(_0xcfbaxa){return _0xcfbax8[_0xc10a[11]](200)[_0xc10a[10]](_0xcfbaxa)})[_0xc10a[9]](function(_0xcfbax9){return handleError(_0xcfbax8,_0xcfbax9)})};exports[_0xc10a[14]]=function(_0xcfbax7,_0xcfbax8){ChatMessage[_0xc10a[18]](_0xcfbax7[_0xc10a[17]][_0xc10a[16]])[_0xc10a[12]](function(_0xcfbaxb){if(!_0xcfbaxb){return _0xcfbax8[_0xc10a[15]](404)};return _0xcfbax8[_0xc10a[10]](_0xcfbaxb)})[_0xc10a[9]](function(_0xcfbax9){return handleError(_0xcfbax8,_0xcfbax9)})};exports[_0xc10a[19]]=function(_0xcfbax7,_0xcfbax8,_0xcfbaxc){ChatMessage[_0xc10a[19]](_[_0xc10a[22]](_0xcfbax7[_0xc10a[20]],{UserId:_0xcfbax7[_0xc10a[21]][_0xc10a[16]]}))[_0xc10a[12]](function(_0xcfbaxb){return _0xcfbax8[_0xc10a[11]](201)[_0xc10a[10]](_0xcfbaxb)})[_0xc10a[9]](function(_0xcfbax9){return handleError(_0xcfbax8,_0xcfbax9)})};exports[_0xc10a[23]]=function(_0xcfbax7,_0xcfbax8){if(_0xcfbax7[_0xc10a[20]][_0xc10a[16]]){delete _0xcfbax7[_0xc10a[20]][_0xc10a[16]]};return ChatMessage[_0xc10a[18]](_0xcfbax7[_0xc10a[17]][_0xc10a[16]])[_0xc10a[12]](function(_0xcfbaxb){if(!_0xcfbaxb){return _0xcfbax8[_0xc10a[15]](404)};var _0xcfbaxd=_[_0xc10a[22]](_0xcfbaxb,_0xcfbax7[_0xc10a[20]]);return _0xcfbaxd[_0xc10a[24]]()})[_0xc10a[12]](function(_0xcfbaxb){return _0xcfbax8[_0xc10a[11]](200)[_0xc10a[10]](_0xcfbaxb)})[_0xc10a[9]](function(_0xcfbax9){return handleError(_0xcfbax8,_0xcfbax9)})};exports[_0xc10a[25]]=function(_0xcfbax7,_0xcfbax8){ChatMessage[_0xc10a[18]](_0xcfbax7[_0xc10a[17]][_0xc10a[16]])[_0xc10a[12]](function(_0xcfbaxb){if(!_0xcfbaxb){return _0xcfbax8[_0xc10a[15]](404)};_0xcfbaxb[_0xc10a[25]]()[_0xc10a[12]](function(){return _0xcfbax8[_0xc10a[15]](204)})[_0xc10a[9]](function(_0xcfbax9){return handleError(_0xcfbax8,_0xcfbax9)})})[_0xc10a[9]](function(_0xcfbax9){return handleError(_0xcfbax8,_0xcfbax9)})};function handleError(_0xcfbax8,_0xcfbax9){return _0xcfbax8[_0xc10a[11]](500)[_0xc10a[10]](_0xcfbax9)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var md5 = require('md5');
+
+var User = require('../../models').User;
+var ChatRoom = require('../../models').ChatRoom;
+var ChatMessage = require('../../models').ChatMessage;
+var ChatVisitor = require('../../models').ChatVisitor;
+
+// Get list of chat_messages
+exports.index = function (req, res) {
+  ChatMessage
+    .findAll()
+    .then(function (chat_messages) {
+      return res.status(200).send(chat_messages);
+    })
+    .catch(function (err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single chatMessage
+exports.show = function (req, res) {
+  ChatMessage
+    .findById(req.params.id)
+    .then(function (chatMessage) {
+      if (!chatMessage) {
+        return res.sendStatus(404);
+      }
+      return res.send(chatMessage);
+    })
+    .catch(function (err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new chatMessage in the DB.
+exports.create = function (req, res, next) {
+  // if (req.body.ChatRoomId && req.body.to) {
+  //   return handleError(res, new Error('Select ChatRoomId or to'));
+  // } else if (req.body.to) {
+  //
+  //   switch (req.body.type) {
+  //     case 'internal':
+  //       User
+  //         .findOne({
+  //           where: {
+  //             $or: [{
+  //               id: {
+  //                 $like: req.body.to
+  //               }
+  //             }, {
+  //               name: req.body.to
+  //             }]
+  //           }
+  //         })
+  //         .then(function(user) {
+  //           if (user) {
+  //
+  //             var users = _.sortBy([user, req.user], 'id');
+  //             var participants = {
+  //               users: {
+  //                 ids: [users[0].id, users[1].id]
+  //               },
+  //               visitors: {
+  //                 ids: []
+  //               }
+  //             };
+  //
+  //             var token = md5(JSON.stringify(participants)).toString(
+  //               'base64');
+  //
+  //             participants.users.fullnames = [users[0].fullname, users[1].fullname];
+  //             participants.visitors.fullnames = [];
+  //
+  //             ChatRoom
+  //               .findOrCreate({
+  //                 where: {
+  //                   token: token
+  //                 },
+  //                 defaults: {
+  //                   type: req.body.type,
+  //                   token: token,
+  //                   participants: JSON.stringify(participants)
+  //                 }
+  //               })
+  //               .spread(function(chatRoom, created) {
+  //
+  //                 chatRoom
+  //                   .updateAttributes({
+  //                     participants: JSON.stringify(participants)
+  //                   });
+  //
+  //                 ChatMessage
+  //                   .create({
+  //                     body: req.body.body,
+  //                     fullname: req.user.fullname,
+  //                     email: req.user.email,
+  //                     ChatRoomId: chatRoom.id,
+  //                     userId: req.user.id
+  //                   })
+  //                   .then(function(chatMessage) {
+  //                     return res.status(201).send(chatMessage);
+  //                   })
+  //                   .catch(function(err) {
+  //                     return handleError(res, err);
+  //                   });
+  //               });
+  //
+  //           } else {
+  //             return handleError(res, new Error('User not found'));
+  //           }
+  //         })
+  //         .catch(function(err) {
+  //           return handleError(res, err);
+  //         });
+  //
+  //       break;
+  //     case 'external':
+  //       ChatVisitor
+  //         .findOne({
+  //           where: {
+  //             $or: [{
+  //               id: {
+  //                 $like: req.body.to
+  //               }
+  //             }, {
+  //               fullname: req.body.to
+  //             }]
+  //           }
+  //         })
+  //         .then(function(chatVisitor) {
+  //           if (chatVisitor) {
+  //
+  //             var participants = {
+  //               users: {
+  //                 ids: [req.user.id]
+  //               },
+  //               visitors: {
+  //                 ids: [chatVisitor.id]
+  //               }
+  //             };
+  //
+  //             var token = md5(JSON.stringify(participants)).toString(
+  //               'base64');
+  //
+  //             participants.users.fullnames = [req.user.fullname];
+  //             participants.visitors.fullnames = [chatVisitor.fullname];
+  //
+  //             ChatRoom
+  //               .findOrCreate({
+  //                 where: {
+  //                   token: token
+  //                 },
+  //                 defaults: {
+  //                   type: req.body.type,
+  //                   token: token,
+  //                   participants: JSON.stringify(participants)
+  //                 }
+  //               })
+  //               .spread(function(chatRoom, created) {
+  //
+  //                 chatRoom
+  //                   .updateAttributes({
+  //                     participants: JSON.stringify(participants)
+  //                   });
+  //
+  //                 ChatMessage
+  //                   .create({
+  //                     body: req.body.body,
+  //                     fullname: req.user.fullname,
+  //                     email: req.user.email,
+  //                     ChatRoomId: chatRoom.id,
+  //                     userId: req.user.id
+  //                   })
+  //                   .then(function(chatMessage) {
+  //                     return res.status(201).send(chatMessage);
+  //                   })
+  //                   .catch(function(err) {
+  //                     return handleError(res, err);
+  //                   });
+  //               });
+  //           }
+  //         });
+  //       break;
+  //     default:
+  //       return handleError(res, new Error('Room type unsupported'));
+  //   }
+  //
+  //
+  // } else if (req.body.ChatRoomId) {
+  //
+  //   ChatMessage
+  //     .create(_.merge({
+  //       userId: req.user.id,
+  //       email: req.user.email,
+  //       fullname: req.user.fullname
+  //     }, req.body))
+  //     .then(function(chatMessage) {
+  //       return res.status(201).send(chatMessage);
+  //     })
+  //     .catch(function(err) {
+  //       return handleError(res, err);
+  //     });
+  // } else {
+  //   return handleError(res, new Error('Select ChatRoomId or to'));
+  // }
+  ChatMessage
+    .create(_.merge(req.body, {
+      UserId: req.user.id
+    }))
+    .then(function (chatMessage) {
+      return res.status(201).send(chatMessage);
+    })
+    .catch(function (err) {
+      return handleError(res, err);
+    });
+};
+
+// Updates an existing chatMessage in the DB.
+exports.update = function (req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+
+  return ChatMessage
+    .findById(req.params.id)
+    .then(function (chatMessage) {
+      if (!chatMessage) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(chatMessage, req.body);
+      return updated.save();
+    })
+    .then(function (chatMessage) {
+      return res.status(200).send(chatMessage);
+    })
+    .catch(function (err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a chatMessage from the DB.
+exports.destroy = function (req, res) {
+  ChatMessage
+    .findById(req.params.id)
+    .then(function (chatMessage) {
+      if (!chatMessage) {
+        return res.sendStatus(404);
+      }
+      chatMessage.destroy()
+        .then(function () {
+          return res.sendStatus(204);
+        })
+        .catch(function (err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function (err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index a60816e..dccab23 100644 (file)
@@ -1 +1,59 @@
-var _0xacc9=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x43\x68\x61\x74\x4D\x65\x73\x73\x61\x67\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x6C\x6F\x64\x61\x73\x68","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x55\x73\x65\x72\x49\x64","\x66\x69\x6E\x64","\x75\x73\x65\x72\x49\x64","\x69\x64","\x63\x68\x61\x74\x5F\x6D\x65\x73\x73\x61\x67\x65\x3A\x73\x61\x76\x65","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x6D\x65\x72\x67\x65","\x65\x6D\x69\x74","\x66\x6F\x72\x45\x61\x63\x68","\x73\x70\x72\x65\x61\x64","\x6E\x61\x6D\x65","\x66\x75\x6C\x6C\x6E\x61\x6D\x65","\x65\x6D\x61\x69\x6C","\x72\x6F\x6C\x65","\x69\x6E\x74\x65\x72\x6E\x61\x6C","\x67\x65\x74\x55\x73\x65\x72\x73","\x67\x65\x74\x43\x68\x61\x74\x56\x69\x73\x69\x74\x6F\x72","\x74\x68\x65\x6E","\x67\x65\x74\x43\x68\x61\x74\x52\x6F\x6F\x6D","\x63\x68\x61\x74\x5F\x6D\x65\x73\x73\x61\x67\x65\x3A\x72\x65\x6D\x6F\x76\x65"];_0xacc9[0];var chat_message=require(_0xacc9[2])[_0xacc9[1]];var _=require(_0xacc9[3]);exports[_0xacc9[4]]=function(_0x3ea7x3){chat_message[_0xacc9[5]](function(_0x3ea7x4){onSave(_0x3ea7x3,_0x3ea7x4)});chat_message[_0xacc9[6]](function(_0x3ea7x4){onSave(_0x3ea7x3,_0x3ea7x4)});chat_message[_0xacc9[7]](function(_0x3ea7x4){onRemove(_0x3ea7x3,_0x3ea7x4)})};function onSave(_0x3ea7x3,_0x3ea7x4,_0x3ea7x6){return _0x3ea7x4[_0xacc9[28]]()[_0xacc9[27]](function(_0x3ea7xc){return [_0x3ea7xc[_0xacc9[25]]({attributes:[_0xacc9[13],_0xacc9[20],_0xacc9[21],_0xacc9[22],_0xacc9[23],_0xacc9[24]],raw:true}),_0x3ea7xc[_0xacc9[26]]({attributes:[_0xacc9[13],_0xacc9[21],_0xacc9[22]],raw:true})]})[_0xacc9[19]](function(_0x3ea7x8,_0x3ea7x9){var _0x3ea7xa=_[_0xacc9[11]](_0x3ea7x8,{id:_0x3ea7x4[_0xacc9[10]]});_0x3ea7x8[_0xacc9[18]](function(_0x3ea7xb){if(_0x3ea7x3[_0xacc9[12]]==_0x3ea7xb[_0xacc9[13]]&&(_0x3ea7xa||_0x3ea7x9)){_0x3ea7x3[_0xacc9[17]](_0xacc9[14],_[_0xacc9[16]](_0x3ea7x4[_0xacc9[15]],{User:_0x3ea7xa,ChatVisitor:_0x3ea7x9}))}})})[_0xacc9[9]](function(_0x3ea7x7){console[_0xacc9[8]](_0x3ea7x7)})}function onRemove(_0x3ea7x3,_0x3ea7x4,_0x3ea7x6){_0x3ea7x3[_0xacc9[17]](_0xacc9[29],_0x3ea7x4)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var chat_message = require('../../models').ChatMessage;
+var _ = require('lodash');
+
+exports.register = function (socket) {
+  chat_message.afterCreate(function (doc) {
+    onSave(socket, doc);
+  });
+  chat_message.afterUpdate(function (doc) {
+    onSave(socket, doc);
+  });
+  chat_message.afterDestroy(function (doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  return doc
+    .getChatRoom()
+    .then(function (chatRoom) {
+      return [chatRoom
+        .getUsers({
+          attributes: ['id', 'name', 'fullname', 'email', 'role', 'internal'],
+          raw: true
+        }), chatRoom
+        .getChatVisitor({
+          attributes: ['id', 'fullname', 'email'],
+          raw: true
+        })
+      ];
+    })
+    .spread(function (users, visitor) {
+      var sender = _.find(users, {
+        id: doc.UserId
+      });
+
+      users.forEach(function (user) {
+        // SOCKET FILTER
+        if (socket.userId == user.id && (sender || visitor)) {
+          socket.emit('chat_message:save', _.merge(doc.dataValues, {
+            User: sender, // TODO modify to sender
+            ChatVisitor: visitor // TODO modify to visitor
+          }));
+        }
+      });
+    })
+    .catch(function (err) {
+      console.error(err);
+    });
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('chat_message:remove', doc);
+}
index 91f30f1..f646838 100644 (file)
@@ -1 +1,20 @@
-var _0xaf5c=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x73\x68\x6F\x75\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x70\x70","\x73\x75\x70\x65\x72\x74\x65\x73\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x2F\x6D\x65\x73\x73\x61\x67\x65\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x70\x6F\x6E\x64\x20\x77\x69\x74\x68\x20\x4A\x53\x4F\x4E\x20\x61\x72\x72\x61\x79","\x69\x6E\x73\x74\x61\x6E\x63\x65\x6F\x66","\x62\x65","\x62\x6F\x64\x79","\x65\x6E\x64","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x65\x78\x70\x65\x63\x74","\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x2F\x6D\x65\x73\x73\x61\x67\x65\x73","\x67\x65\x74"];_0xaf5c[0];var should=require(_0xaf5c[1]);var app=require(_0xaf5c[2]);var request=require(_0xaf5c[3]);describe(_0xaf5c[4],function(){it(_0xaf5c[5],function(_0xccfex4){request(app)[_0xaf5c[13]](_0xaf5c[12])[_0xaf5c[11]](200)[_0xaf5c[11]](_0xaf5c[10],/json/)[_0xaf5c[9]](function(_0xccfex5,_0xccfex6){if(_0xccfex5){return _0xccfex4(_0xccfex5)};_0xccfex6[_0xaf5c[8]][_0xaf5c[1]][_0xaf5c[7]][_0xaf5c[6]](Array);_0xccfex4()})})})
\ No newline at end of file
+'use strict';
+
+var should = require('should');
+var app = require('../../app');
+var request = require('supertest');
+
+describe('GET /api/chat/messages', function() {
+
+  it('should respond with JSON array', function(done) {
+    request(app)
+      .get('/api/chat/messages')
+      .expect(200)
+      .expect('Content-Type', /json/)
+      .end(function(err, res) {
+        if (err) return done(err);
+        res.body.should.be.instanceof(Array);
+        done();
+      });
+  });
+});
\ No newline at end of file
index 57067a8..efcb4e1 100644 (file)
@@ -1 +1,15 @@
-var _0x42ed=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x63\x68\x61\x74\x5F\x6D\x65\x73\x73\x61\x67\x65\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x56\x61\x6C\x69\x64\x44\x61\x74\x65","\x68\x61\x73\x43\x68\x61\x74","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x42ed[0];var express=require(_0x42ed[1]);var controller=require(_0x42ed[2]);var auth=require(_0x42ed[3]);var license=require(_0x42ed[4]);var router=express.Router();router[_0x42ed[9]](_0x42ed[5],license[_0x42ed[6]](),license[_0x42ed[7]](),controller[_0x42ed[8]]);router[_0x42ed[9]](_0x42ed[10],license[_0x42ed[6]](),license[_0x42ed[7]](),controller[_0x42ed[11]]);router[_0x42ed[14]](_0x42ed[5],license[_0x42ed[6]](),license[_0x42ed[7]](),auth[_0x42ed[12]](),controller[_0x42ed[13]]);router[_0x42ed[16]](_0x42ed[10],license[_0x42ed[6]](),license[_0x42ed[7]](),controller[_0x42ed[15]]);router[_0x42ed[18]](_0x42ed[10],license[_0x42ed[6]](),license[_0x42ed[7]](),controller[_0x42ed[17]]);module[_0x42ed[19]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./chat_message.controller');
+var auth = require('../../auth/auth.service');
+var license = require('../../config/license/license.service');
+var router = express.Router();
+
+router.get('/', license.isValidDate(), license.hasChat(), controller.index);
+router.get('/:id', license.isValidDate(), license.hasChat(), controller.show);
+router.post('/', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), controller.create);
+router.put('/:id', license.isValidDate(), license.hasChat(), controller.update);
+router.delete('/:id', license.isValidDate(), license.hasChat(), controller.destroy);
+
+module.exports = router;
index e8c33e0..8e3b8ba 100644 (file)
@@ -1 +1,112 @@
-var _0xa6e6=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x43\x68\x61\x74\x50\x72\x6F\x61\x63\x74\x69\x76\x65\x41\x63\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6A\x73\x6F\x6E","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x65\x6E\x64","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x73\x74\x72\x6F\x79","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65"];_0xa6e6[0];var _=require(_0xa6e6[1]);var Util=require(_0xa6e6[2]);var ChatProactiveAction=require(_0xa6e6[4])[_0xa6e6[3]];function handleError(_0x397cx5,_0x397cx6){_0x397cx6=_0x397cx6||500;return function(_0x397cx7){_0x397cx5[_0xa6e6[6]](_0x397cx6)[_0xa6e6[5]](_0x397cx7)}}function responseWithResult(_0x397cx5,_0x397cx6){_0x397cx6=_0x397cx6||200;return function(_0x397cx9){if(_0x397cx9){_0x397cx5[_0xa6e6[6]](_0x397cx6)[_0xa6e6[7]](_0x397cx9)}}}function responseWithoutResult(_0x397cx5,_0x397cx6){_0x397cx6=_0x397cx6||204;return function(){_0x397cx5[_0xa6e6[8]](_0x397cx6)}}function handleEntityNotFound(_0x397cx5){return function(_0x397cx9){if(!_0x397cx9){_0x397cx5[_0xa6e6[6]](404)[_0xa6e6[9]]();return null};return _0x397cx9}}function saveUpdates(_0x397cxd){return function(_0x397cx9){return _0x397cx9[_0xa6e6[11]](_0x397cxd)[_0xa6e6[10]](function(_0x397cxe){return _0x397cxe})}}function removeEntity(_0x397cx5){return function(_0x397cx9){if(_0x397cx9){return _0x397cx9[_0xa6e6[12]]()[_0xa6e6[10]](function(){_0x397cx5[_0xa6e6[6]](204)[_0xa6e6[9]]()})}}}exports[_0xa6e6[13]]=function(_0x397cx10,_0x397cx5){return ChatProactiveAction[_0xa6e6[17]](Util[_0xa6e6[16]](_0x397cx10[_0xa6e6[15]]))[_0xa6e6[10]](responseWithResult(_0x397cx5))[_0xa6e6[14]](handleError(_0x397cx5))};exports[_0xa6e6[18]]=function(_0x397cx10,_0x397cx5){return ChatProactiveAction[_0xa6e6[21]](_0x397cx10[_0xa6e6[20]][_0xa6e6[19]])[_0xa6e6[10]](handleEntityNotFound(_0x397cx5))[_0xa6e6[10]](responseWithResult(_0x397cx5))[_0xa6e6[14]](handleError(_0x397cx5))};exports[_0xa6e6[22]]=function(_0x397cx10,_0x397cx5){return ChatProactiveAction[_0xa6e6[22]](_0x397cx10[_0xa6e6[23]])[_0xa6e6[10]](responseWithResult(_0x397cx5,201))[_0xa6e6[14]](handleError(_0x397cx5))};exports[_0xa6e6[24]]=function(_0x397cx10,_0x397cx5){if(_0x397cx10[_0xa6e6[23]][_0xa6e6[19]]){delete _0x397cx10[_0xa6e6[23]][_0xa6e6[19]]};return ChatProactiveAction[_0xa6e6[21]](_0x397cx10[_0xa6e6[20]][_0xa6e6[19]])[_0xa6e6[10]](handleEntityNotFound(_0x397cx5))[_0xa6e6[10]](saveUpdates(_0x397cx10[_0xa6e6[23]]))[_0xa6e6[10]](responseWithResult(_0x397cx5))[_0xa6e6[14]](handleError(_0x397cx5))};exports[_0xa6e6[12]]=function(_0x397cx10,_0x397cx5){return ChatProactiveAction[_0xa6e6[21]](_0x397cx10[_0xa6e6[20]][_0xa6e6[19]])[_0xa6e6[10]](handleEntityNotFound(_0x397cx5))[_0xa6e6[10]](removeEntity(_0x397cx5))[_0xa6e6[14]](handleError(_0x397cx5))}
\ No newline at end of file
+/**
+ * Using Rails-like standard naming convention for endpoints.
+ * GET     /api/chat/proactives              ->  index
+ * POST    /api/chat/proactives              ->  create
+ * GET     /api/chat/proactives/:id          ->  show
+ * PUT     /api/chat/proactives/:id          ->  update
+ * DELETE  /api/chat/proactives/:id          ->  destroy
+ */
+
+'use strict';
+
+
+var _ = require('lodash');
+var Util = require('../../config/util');
+
+var ChatProactiveAction = require('../../models').ChatProactiveAction;
+
+
+function handleError(res, statusCode) {
+  statusCode = statusCode || 500;
+  return function(err) {
+    res.status(statusCode).send(err);
+  };
+}
+
+function responseWithResult(res, statusCode) {
+  statusCode = statusCode || 200;
+  return function(entity) {
+    if (entity) {
+      res.status(statusCode).json(entity);
+    }
+  };
+}
+
+function responseWithoutResult(res, statusCode) {
+  statusCode = statusCode || 204;
+  return function() {
+    res.sendStatus(statusCode);
+  };
+}
+
+function handleEntityNotFound(res) {
+  return function(entity) {
+    if (!entity) {
+      res.status(404).end();
+      return null;
+    }
+    return entity;
+  };
+}
+
+function saveUpdates(updates) {
+  return function(entity) {
+    return entity.updateAttributes(updates)
+      .then(function(updated) { 
+        return updated;
+      });
+  };
+}
+
+function removeEntity(res) {
+  return function(entity) {
+    if (entity) {
+      return entity.destroy()
+        .then(function() {
+          res.status(204).end();
+        });
+    }
+  };
+}
+
+// Gets a list of ChatProactiveActions
+exports.index = function(req, res) {
+  return ChatProactiveAction.findAll(Util.getQuery(req.query))
+    .then(responseWithResult(res))
+    .catch(handleError(res));
+}
+
+// Gets a single ChatProactiveAction from the DB
+exports.show = function(req, res) {
+  return ChatProactiveAction.findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(responseWithResult(res))
+    .catch(handleError(res));
+}
+
+// Creates a new ChatProactiveAction in the DB
+exports.create = function(req, res) {
+  return ChatProactiveAction.create(req.body)
+    .then(responseWithResult(res, 201))
+    .catch(handleError(res));
+}
+
+// Updates an existing ChatProactiveAction in the DB
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  return ChatProactiveAction.findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(saveUpdates(req.body))
+    .then(responseWithResult(res))
+    .catch(handleError(res));
+}
+
+// Deletes a ChatProactiveAction from the DB
+exports.destroy = function(req, res) {
+  return ChatProactiveAction.findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(removeEntity(res))
+    .catch(handleError(res));
+}
index 2224c38..ca71aaf 100644 (file)
@@ -1 +1,24 @@
-var _0xccbb=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x43\x68\x61\x74\x50\x72\x6F\x61\x63\x74\x69\x76\x65\x41\x63\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x63\x68\x61\x74\x5F\x70\x72\x6F\x61\x63\x74\x69\x76\x65\x5F\x61\x63\x74\x69\x6F\x6E\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x63\x68\x61\x74\x5F\x70\x72\x6F\x61\x63\x74\x69\x76\x65\x5F\x61\x63\x74\x69\x6F\x6E\x3A\x72\x65\x6D\x6F\x76\x65"];_0xccbb[0];var ChatProactiveAction=require(_0xccbb[2])[_0xccbb[1]];exports[_0xccbb[3]]=function(_0x6bd2x2){ChatProactiveAction[_0xccbb[4]](function(_0x6bd2x3){onSave(_0x6bd2x2,_0x6bd2x3)});ChatProactiveAction[_0xccbb[5]](function(_0x6bd2x3){onRemove(_0x6bd2x2,_0x6bd2x3)})};function onSave(_0x6bd2x2,_0x6bd2x3,_0x6bd2x5){_0x6bd2x2[_0xccbb[7]](_0xccbb[6],_0x6bd2x3)}function onRemove(_0x6bd2x2,_0x6bd2x3,_0x6bd2x5){_0x6bd2x2[_0xccbb[7]](_0xccbb[8],_0x6bd2x3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var ChatProactiveAction = require('../../models').ChatProactiveAction;
+
+exports.register = function(socket) {
+  ChatProactiveAction.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  ChatProactiveAction.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+};
+
+function onSave(socket, doc, cb) {
+  socket.emit('chat_proactive_action:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('chat_proactive_action:remove', doc);
+}
index 610ffd7..f38d95e 100644 (file)
@@ -1 +1,16 @@
-var _0x9e52=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x63\x68\x61\x74\x5F\x70\x72\x6F\x61\x63\x74\x69\x76\x65\x5F\x61\x63\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x9e52[0];var express=require(_0x9e52[1]);var auth=require(_0x9e52[2]);var controller=require(_0x9e52[3]);var router=express.Router();router[_0x9e52[7]](_0x9e52[4],auth[_0x9e52[5]](),controller[_0x9e52[6]]);router[_0x9e52[7]](_0x9e52[8],auth[_0x9e52[5]](),controller[_0x9e52[9]]);router[_0x9e52[11]](_0x9e52[4],auth[_0x9e52[5]](),controller[_0x9e52[10]]);router[_0x9e52[13]](_0x9e52[8],auth[_0x9e52[5]](),controller[_0x9e52[12]]);router[_0x9e52[14]](_0x9e52[8],auth[_0x9e52[5]](),controller[_0x9e52[12]]);router[_0x9e52[16]](_0x9e52[8],auth[_0x9e52[5]](),controller[_0x9e52[15]]);module[_0x9e52[17]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var auth = require('../../auth/auth.service');
+var controller = require('./chat_proactive_action.controller');
+
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), controller.index);
+router.get('/:id', auth.isAuthenticated(), controller.show);
+router.post('/', auth.isAuthenticated(), controller.create);
+router.put('/:id', auth.isAuthenticated(), controller.update);
+router.patch('/:id', auth.isAuthenticated(), controller.update);
+router.delete('/:id', auth.isAuthenticated(), controller.destroy);
+
+module.exports = router;
index 379c2aa..2b9c66a 100644 (file)
@@ -1 +1,97 @@
-var _0x1891=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6E\x6F\x50\x72\x65\x73\x65\x72\x76\x65\x43\x61\x63\x68\x65","\x70\x72\x6F\x78\x79\x71\x75\x69\x72\x65","\x63\x68\x61\x74\x50\x72\x6F\x61\x63\x74\x69\x76\x65\x41\x63\x74\x69\x6F\x6E\x43\x74\x72\x6C\x2E\x69\x6E\x64\x65\x78","\x63\x68\x61\x74\x50\x72\x6F\x61\x63\x74\x69\x76\x65\x41\x63\x74\x69\x6F\x6E\x43\x74\x72\x6C\x2E\x73\x68\x6F\x77","\x63\x68\x61\x74\x50\x72\x6F\x61\x63\x74\x69\x76\x65\x41\x63\x74\x69\x6F\x6E\x43\x74\x72\x6C\x2E\x63\x72\x65\x61\x74\x65","\x63\x68\x61\x74\x50\x72\x6F\x61\x63\x74\x69\x76\x65\x41\x63\x74\x69\x6F\x6E\x43\x74\x72\x6C\x2E\x75\x70\x64\x61\x74\x65","\x63\x68\x61\x74\x50\x72\x6F\x61\x63\x74\x69\x76\x65\x41\x63\x74\x69\x6F\x6E\x43\x74\x72\x6C\x2E\x64\x65\x73\x74\x72\x6F\x79","\x73\x70\x79","\x2E\x2F\x69\x6E\x64\x65\x78\x2E\x6A\x73","\x43\x68\x61\x74\x50\x72\x6F\x61\x63\x74\x69\x76\x65\x41\x63\x74\x69\x6F\x6E\x20\x41\x50\x49\x20\x52\x6F\x75\x74\x65\x72\x3A","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x74\x75\x72\x6E\x20\x61\x6E\x20\x65\x78\x70\x72\x65\x73\x73\x20\x72\x6F\x75\x74\x65\x72\x20\x69\x6E\x73\x74\x61\x6E\x63\x65","\x65\x71\x75\x61\x6C","\x74\x6F","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x2F\x70\x72\x6F\x61\x63\x74\x69\x76\x65\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x63\x68\x61\x74\x50\x72\x6F\x61\x63\x74\x69\x76\x65\x41\x63\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x69\x6E\x64\x65\x78","\x63\x61\x6C\x6C\x65\x64\x4F\x6E\x63\x65","\x62\x65\x65\x6E","\x68\x61\x76\x65","\x2F","\x77\x69\x74\x68\x41\x72\x67\x73","\x67\x65\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x2F\x70\x72\x6F\x61\x63\x74\x69\x76\x65\x73\x2F\x3A\x69\x64","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x63\x68\x61\x74\x50\x72\x6F\x61\x63\x74\x69\x76\x65\x41\x63\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x73\x68\x6F\x77","\x2F\x3A\x69\x64","\x50\x4F\x53\x54\x20\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x2F\x70\x72\x6F\x61\x63\x74\x69\x76\x65\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x63\x68\x61\x74\x50\x72\x6F\x61\x63\x74\x69\x76\x65\x41\x63\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x50\x55\x54\x20\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x2F\x70\x72\x6F\x61\x63\x74\x69\x76\x65\x73\x2F\x3A\x69\x64","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x63\x68\x61\x74\x50\x72\x6F\x61\x63\x74\x69\x76\x65\x41\x63\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x50\x41\x54\x43\x48\x20\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x2F\x70\x72\x6F\x61\x63\x74\x69\x76\x65\x73\x2F\x3A\x69\x64","\x70\x61\x74\x63\x68","\x44\x45\x4C\x45\x54\x45\x20\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x2F\x70\x72\x6F\x61\x63\x74\x69\x76\x65\x73\x2F\x3A\x69\x64","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x63\x68\x61\x74\x50\x72\x6F\x61\x63\x74\x69\x76\x65\x41\x63\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65"];_0x1891[0];var proxyquire=require(_0x1891[2])[_0x1891[1]]();var chatProactiveActionCtrlStub={index:_0x1891[3],show:_0x1891[4],create:_0x1891[5],update:_0x1891[6],destroy:_0x1891[7]};var routerStub={get:sinon[_0x1891[8]](),put:sinon[_0x1891[8]](),patch:sinon[_0x1891[8]](),post:sinon[_0x1891[8]](),delete:sinon[_0x1891[8]]()};var chatProactiveActionIndex=proxyquire(_0x1891[9],{"\x65\x78\x70\x72\x65\x73\x73":{Router:function(){return routerStub}},"\x2E\x2F\x63\x68\x61\x74\x5F\x70\x72\x6F\x61\x63\x74\x69\x76\x65\x5F\x61\x63\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72":chatProactiveActionCtrlStub});describe(_0x1891[10],function(){it(_0x1891[11],function(){expect(chatProactiveActionIndex)[_0x1891[13]][_0x1891[12]](routerStub)});describe(_0x1891[14],function(){it(_0x1891[15],function(){expect(routerStub[_0x1891[21]][_0x1891[20]](_0x1891[19],_0x1891[3]))[_0x1891[13]][_0x1891[18]][_0x1891[17]][_0x1891[16]]})});describe(_0x1891[22],function(){it(_0x1891[23],function(){expect(routerStub[_0x1891[21]][_0x1891[20]](_0x1891[24],_0x1891[4]))[_0x1891[13]][_0x1891[18]][_0x1891[17]][_0x1891[16]]})});describe(_0x1891[25],function(){it(_0x1891[26],function(){expect(routerStub[_0x1891[27]][_0x1891[20]](_0x1891[19],_0x1891[5]))[_0x1891[13]][_0x1891[18]][_0x1891[17]][_0x1891[16]]})});describe(_0x1891[28],function(){it(_0x1891[29],function(){expect(routerStub[_0x1891[30]][_0x1891[20]](_0x1891[24],_0x1891[6]))[_0x1891[13]][_0x1891[18]][_0x1891[17]][_0x1891[16]]})});describe(_0x1891[31],function(){it(_0x1891[29],function(){expect(routerStub[_0x1891[32]][_0x1891[20]](_0x1891[24],_0x1891[6]))[_0x1891[13]][_0x1891[18]][_0x1891[17]][_0x1891[16]]})});describe(_0x1891[33],function(){it(_0x1891[34],function(){expect(routerStub[_0x1891[35]][_0x1891[20]](_0x1891[24],_0x1891[7]))[_0x1891[13]][_0x1891[18]][_0x1891[17]][_0x1891[16]]})})})
\ No newline at end of file
+'use strict';
+
+var proxyquire = require('proxyquire').noPreserveCache();
+
+var chatProactiveActionCtrlStub = {
+  index: 'chatProactiveActionCtrl.index',
+  show: 'chatProactiveActionCtrl.show',
+  create: 'chatProactiveActionCtrl.create',
+  update: 'chatProactiveActionCtrl.update',
+  destroy: 'chatProactiveActionCtrl.destroy'
+};
+
+var routerStub = {
+  get: sinon.spy(),
+  put: sinon.spy(),
+  patch: sinon.spy(),
+  post: sinon.spy(),
+  delete: sinon.spy()
+};
+
+// require the index with our stubbed out modules
+var chatProactiveActionIndex = proxyquire('./index.js', {
+  'express': {
+    Router: function() {
+      return routerStub;
+    }
+  },
+  './chat_proactive_action.controller': chatProactiveActionCtrlStub
+});
+
+describe('ChatProactiveAction API Router:', function() {
+
+  it('should return an express router instance', function() {
+    expect(chatProactiveActionIndex).to.equal(routerStub);
+  });
+
+  describe('GET /api/chat/proactives', function() {
+
+    it('should route to chatProactiveAction.controller.index', function() {
+      expect(routerStub.get
+        .withArgs('/', 'chatProactiveActionCtrl.index')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('GET /api/chat/proactives/:id', function() {
+
+    it('should route to chatProactiveAction.controller.show', function() {
+      expect(routerStub.get
+        .withArgs('/:id', 'chatProactiveActionCtrl.show')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('POST /api/chat/proactives', function() {
+
+    it('should route to chatProactiveAction.controller.create', function() {
+      expect(routerStub.post
+        .withArgs('/', 'chatProactiveActionCtrl.create')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('PUT /api/chat/proactives/:id', function() {
+
+    it('should route to chatProactiveAction.controller.update', function() {
+      expect(routerStub.put
+        .withArgs('/:id', 'chatProactiveActionCtrl.update')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('PATCH /api/chat/proactives/:id', function() {
+
+    it('should route to chatProactiveAction.controller.update', function() {
+      expect(routerStub.patch
+        .withArgs('/:id', 'chatProactiveActionCtrl.update')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('DELETE /api/chat/proactives/:id', function() {
+
+    it('should route to chatProactiveAction.controller.destroy', function() {
+      expect(routerStub.delete
+        .withArgs('/:id', 'chatProactiveActionCtrl.destroy')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+});
index 80d0bfb..e7c8ffd 100644 (file)
@@ -1 +1,200 @@
-var _0x3f9a=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x43\x68\x61\x74\x51\x75\x65\x75\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x55\x73\x65\x72","\x55\x73\x65\x72\x48\x61\x73\x43\x68\x61\x74\x51\x75\x65\x75\x65","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x64\x65\x66\x61\x75\x6C\x74","\x73\x63\x6F\x70\x65","\x6D\x65","\x69\x64","\x75\x73\x65\x72","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x73\x68\x6F\x77\x41\x67\x65\x6E\x74\x73","\x61\x67\x65\x6E\x74","\x6E\x61\x6D\x65","\x66\x75\x6C\x6C\x6E\x61\x6D\x65","\x65\x6D\x61\x69\x6C","\x67\x65\x74\x55\x73\x65\x72\x73","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x61\x64\x64\x41\x67\x65\x6E\x74\x73","\x61\x67\x65\x6E\x74\x73","\x70\x65\x6E\x61\x6C\x74\x79","\x61\x64\x64\x55\x73\x65\x72\x73","\x72\x65\x6D\x6F\x76\x65\x41\x67\x65\x6E\x74\x73","\x72\x65\x6D\x6F\x76\x65\x55\x73\x65\x72\x73","\x64\x65\x73\x74\x72\x6F\x79","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73"];_0x3f9a[0];var _=require(_0x3f9a[1]);var Util=require(_0x3f9a[2]);var ChatQueue=require(_0x3f9a[4])[_0x3f9a[3]];var User=require(_0x3f9a[4])[_0x3f9a[5]];var UserHasChatQueue=require(_0x3f9a[4])[_0x3f9a[6]];exports[_0x3f9a[7]]=function(_0x4402x6,_0x4402x7){return ChatQueue[_0x3f9a[16]](_0x3f9a[15])[_0x3f9a[14]](Util[_0x3f9a[13]](_0x4402x6[_0x3f9a[12]]))[_0x3f9a[11]](function(_0x4402x9){_0x4402x7[_0x3f9a[10]](200)[_0x3f9a[9]](_0x4402x9)})[_0x3f9a[8]](function(_0x4402x8){return handleError(_0x4402x7,_0x4402x8)})};exports[_0x3f9a[17]]=function(_0x4402x6,_0x4402x7,_0x4402xa){UserHasChatQueue[_0x3f9a[20]]({where:{UserId:_0x4402x6[_0x3f9a[19]][_0x3f9a[18]]}})[_0x3f9a[11]](function(_0x4402xb){return _0x4402x7[_0x3f9a[10]](200)[_0x3f9a[9]](_0x4402xb)})[_0x3f9a[8]](function(_0x4402x8){return handleError(_0x4402x7,_0x4402x8)})};exports[_0x3f9a[21]]=function(_0x4402x6,_0x4402x7){ChatQueue[_0x3f9a[24]](_0x4402x6[_0x3f9a[23]][_0x3f9a[18]])[_0x3f9a[11]](function(_0x4402xc){if(!_0x4402xc){return _0x4402x7[_0x3f9a[22]](404)};return _0x4402x7[_0x3f9a[9]](_0x4402xc)})[_0x3f9a[8]](function(_0x4402x8){return handleError(_0x4402x7,_0x4402x8)})};exports[_0x3f9a[25]]=function(_0x4402x6,_0x4402x7){return ChatQueue[_0x3f9a[24]](_0x4402x6[_0x3f9a[23]][_0x3f9a[18]])[_0x3f9a[11]](function(_0x4402xe){if(!_0x4402xe){return _0x4402x7[_0x3f9a[22]](404)};return _0x4402xe[_0x3f9a[30]]({where:{role:_0x3f9a[26]},attributes:[_0x3f9a[18],_0x3f9a[27],_0x3f9a[28],_0x3f9a[29]]})})[_0x3f9a[11]](function(_0x4402xd){return _0x4402x7[_0x3f9a[10]](200)[_0x3f9a[9]](_0x4402xd)})[_0x3f9a[8]](function(_0x4402x8){return handleError(_0x4402x7,_0x4402x8)})};exports[_0x3f9a[31]]=function(_0x4402x6,_0x4402x7){return ChatQueue[_0x3f9a[31]](_0x4402x6[_0x3f9a[32]])[_0x3f9a[11]](function(_0x4402xc){return _0x4402x7[_0x3f9a[10]](201)[_0x3f9a[9]](_0x4402xc)})[_0x3f9a[8]](function(_0x4402x8){return handleError(_0x4402x7,_0x4402x8)})};exports[_0x3f9a[33]]=function(_0x4402x6,_0x4402x7){if(_0x4402x6[_0x3f9a[32]][_0x3f9a[18]]){delete _0x4402x6[_0x3f9a[32]][_0x3f9a[18]]};return ChatQueue[_0x3f9a[24]](_0x4402x6[_0x3f9a[23]][_0x3f9a[18]])[_0x3f9a[11]](function(_0x4402xc){if(!_0x4402xc){return _0x4402x7[_0x3f9a[22]](404)};var _0x4402xf=_[_0x3f9a[34]](_0x4402xc,_0x4402x6[_0x3f9a[32]]);_0x4402xf[_0x3f9a[35]]()[_0x3f9a[11]](function(){return _0x4402x7[_0x3f9a[10]](200)[_0x3f9a[9]](_0x4402xc)})[_0x3f9a[8]](function(_0x4402x8){return handleError(_0x4402x7,_0x4402x8)})})[_0x3f9a[8]](function(_0x4402x8){return handleError(_0x4402x7,_0x4402x8)})};exports[_0x3f9a[36]]=function(_0x4402x6,_0x4402x7,_0x4402xa){return ChatQueue[_0x3f9a[24]](_0x4402x6[_0x3f9a[23]][_0x3f9a[18]])[_0x3f9a[11]](function(_0x4402x10){if(!_0x4402x10){return _0x4402x7[_0x3f9a[22]](404)};return _0x4402x10[_0x3f9a[39]](_0x4402x6[_0x3f9a[32]][_0x3f9a[37]],{penalty:_0x4402x6[_0x3f9a[32]][_0x3f9a[38]],queue:_0x4402x10[_0x3f9a[27]]},{individualHooks:true})})[_0x3f9a[11]](function(){return _0x4402x7[_0x3f9a[22]](200)})[_0x3f9a[8]](function(_0x4402x8){return handleError(_0x4402x7,_0x4402x8)})};exports[_0x3f9a[40]]=function(_0x4402x6,_0x4402x7,_0x4402xa){return ChatQueue[_0x3f9a[24]](_0x4402x6[_0x3f9a[23]][_0x3f9a[18]])[_0x3f9a[11]](function(_0x4402x10){if(!_0x4402x10){return _0x4402x7[_0x3f9a[22]](404)};return _0x4402x10[_0x3f9a[41]](_0x4402x6[_0x3f9a[12]][_0x3f9a[37]],{individualHooks:true})})[_0x3f9a[11]](function(){return _0x4402x7[_0x3f9a[22]](200)})[_0x3f9a[8]](function(_0x4402x8){return handleError(_0x4402x7,_0x4402x8)})};exports[_0x3f9a[42]]=function(_0x4402x6,_0x4402x7){ChatQueue[_0x3f9a[24]](_0x4402x6[_0x3f9a[23]][_0x3f9a[18]])[_0x3f9a[11]](function(_0x4402xc){if(!_0x4402xc){return _0x4402x7[_0x3f9a[22]](404)};_0x4402xc[_0x3f9a[42]]()[_0x3f9a[11]](function(){return _0x4402x7[_0x3f9a[22]](204)})[_0x3f9a[8]](function(_0x4402x8){return handleError(_0x4402x7,_0x4402x8)})})[_0x3f9a[8]](function(_0x4402x8){return handleError(_0x4402x7,_0x4402x8)})};exports[_0x3f9a[43]]=function(_0x4402x6,_0x4402x7){return ChatQueue[_0x3f9a[42]]({where:{id:_0x4402x6[_0x3f9a[12]][_0x3f9a[44]]},individualHooks:true})[_0x3f9a[11]](function(){return _0x4402x7[_0x3f9a[22]](204)})[_0x3f9a[8]](function(_0x4402x8){return handleError(_0x4402x7,_0x4402x8)})};function handleError(_0x4402x7,_0x4402x8){return _0x4402x7[_0x3f9a[10]](500)[_0x3f9a[9]](_0x4402x8)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var Util = require('../../config/util');
+
+var ChatQueue = require('../../models').ChatQueue;
+var User = require('../../models').User;
+var UserHasChatQueue = require('../../models').UserHasChatQueue;
+
+// Get list of mailQueues
+exports.index = function(req, res) {
+  return ChatQueue
+    .scope('default')
+    .findAndCountAll(Util.getQuery(req.query))
+    .then(function(result) {
+      res.status(200).send(result);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get list of my chat_rooms
+exports.me = function(req, res, next) {
+  UserHasChatQueue
+    .findAll({
+      where: {
+        UserId: req.user.id
+      }
+    })
+    .then(function(userHasChatQueues) {
+      return res.status(200).send(userHasChatQueues);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single chat_queue
+exports.show = function(req, res) {
+  ChatQueue
+    .findById(req.params.id)
+    .then(function(chat_queue) {
+      if (!chat_queue) {
+        return res.sendStatus(404);
+      }
+      return res.send(chat_queue);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single queue
+exports.showAgents = function(req, res) {
+  return ChatQueue
+    .findById(req.params.id)
+    .then(function(queue) {
+      if (!queue) {
+        return res.sendStatus(404);
+      }
+      return queue
+        .getUsers({
+          where: {
+            role: 'agent'
+          },
+          attributes: ['id', 'name', 'fullname', 'email']
+        });
+    })
+    .then(function(agents) {
+      return res.status(200).send(agents);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new chat_queue in the DB.
+exports.create = function(req, res) {
+  return ChatQueue
+    .create(req.body)
+    .then(function(chat_queue) {
+      return res.status(201).send(chat_queue);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Updates an existing chat_queue in the DB.
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  return ChatQueue
+    .findById(req.params.id)
+    .then(function(chat_queue) {
+      if (!chat_queue) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(chat_queue, req.body);
+      updated.save()
+        .then(function() {
+          return res.status(200).send(chat_queue);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Add agents to chat queues
+exports.addAgents = function(req, res, next) {
+
+  return ChatQueue
+    .findById(req.params.id)
+    .then(function(chatQueue) {
+      if (!chatQueue) {
+        return res.sendStatus(404);
+      }
+      return chatQueue
+        .addUsers(req.body.agents, {
+          penalty: req.body.penalty,
+          queue: chatQueue.name
+        }, {
+          individualHooks: true
+        });
+    })
+    .then(function() {
+      return res.sendStatus(200);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+exports.removeAgents = function(req, res, next) {
+  return ChatQueue
+    .findById(req.params.id)
+    .then(function(chatQueue) {
+      if (!chatQueue) {
+        return res.sendStatus(404);
+      }
+      return chatQueue
+        .removeUsers(req.query.agents, {
+          individualHooks: true
+        });
+    })
+    .then(function() {
+      return res.sendStatus(200);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a chat_queue from the DB.
+exports.destroy = function(req, res) {
+  ChatQueue
+    .findById(req.params.id)
+    .then(function(chat_queue) {
+      if (!chat_queue) {
+        return res.sendStatus(404);
+      }
+      chat_queue.destroy()
+        .then(function() {
+          return res.sendStatus(204);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a agent from the DB.
+exports.bulkDestroy = function(req, res) {
+  return ChatQueue
+    .destroy({
+      where: {
+        id: req.query.ids
+      },
+      individualHooks: true
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index 46d19b2..2e7f5d4 100644 (file)
@@ -1 +1,24 @@
-var _0xe5c3=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x43\x68\x61\x74\x51\x75\x65\x75\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x63\x68\x61\x74\x5F\x71\x75\x65\x75\x65\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x63\x68\x61\x74\x5F\x71\x75\x65\x75\x65\x3A\x72\x65\x6D\x6F\x76\x65"];_0xe5c3[0];var chatQueue=require(_0xe5c3[2])[_0xe5c3[1]];exports[_0xe5c3[3]]=function(_0x6f1ax2){chatQueue[_0xe5c3[4]](function(_0x6f1ax3){onSave(_0x6f1ax2,_0x6f1ax3)});chatQueue[_0xe5c3[5]](function(_0x6f1ax3){onRemove(_0x6f1ax2,_0x6f1ax3)})};function onSave(_0x6f1ax2,_0x6f1ax3,_0x6f1ax5){_0x6f1ax2[_0xe5c3[7]](_0xe5c3[6],_0x6f1ax3)}function onRemove(_0x6f1ax2,_0x6f1ax3,_0x6f1ax5){_0x6f1ax2[_0xe5c3[7]](_0xe5c3[8],_0x6f1ax3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var chatQueue = require('../../models').ChatQueue;
+
+exports.register = function (socket) {
+  chatQueue.afterCreate(function (doc) {
+    onSave(socket, doc);
+  });
+  chatQueue.afterDestroy(function (doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('chat_queue:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('chat_queue:remove', doc);
+}
index 6c91e2b..d4cc855 100644 (file)
@@ -1 +1,21 @@
-var _0x53c6=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x63\x68\x61\x74\x5F\x71\x75\x65\x75\x65\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x56\x61\x6C\x69\x64\x44\x61\x74\x65","\x68\x61\x73\x43\x68\x61\x74","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x6D\x65","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x6D\x65","\x2F\x3A\x69\x64\x2F\x61\x67\x65\x6E\x74\x73","\x73\x68\x6F\x77\x41\x67\x65\x6E\x74\x73","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x61\x64\x64\x41\x67\x65\x6E\x74\x73","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x72\x65\x6D\x6F\x76\x65\x41\x67\x65\x6E\x74\x73","\x64\x65\x6C\x65\x74\x65","\x70\x61\x74\x63\x68","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0x53c6[0];var express=require(_0x53c6[1]);var controller=require(_0x53c6[2]);var auth=require(_0x53c6[3]);var license=require(_0x53c6[4]);var router=express.Router();router[_0x53c6[9]](_0x53c6[5],license[_0x53c6[6]](),license[_0x53c6[7]](),controller[_0x53c6[8]]);router[_0x53c6[9]](_0x53c6[10],license[_0x53c6[6]](),license[_0x53c6[7]](),auth[_0x53c6[11]](),controller[_0x53c6[12]]);router[_0x53c6[9]](_0x53c6[13],auth[_0x53c6[11]](),license[_0x53c6[7]](),controller[_0x53c6[14]]);router[_0x53c6[9]](_0x53c6[15],license[_0x53c6[6]](),license[_0x53c6[7]](),controller[_0x53c6[16]]);router[_0x53c6[18]](_0x53c6[5],license[_0x53c6[6]](),license[_0x53c6[7]](),controller[_0x53c6[17]]);router[_0x53c6[18]](_0x53c6[13],license[_0x53c6[6]](),license[_0x53c6[7]](),controller[_0x53c6[19]]);router[_0x53c6[21]](_0x53c6[15],license[_0x53c6[6]](),license[_0x53c6[7]](),controller[_0x53c6[20]]);router[_0x53c6[23]](_0x53c6[13],license[_0x53c6[6]](),license[_0x53c6[7]](),controller[_0x53c6[22]]);router[_0x53c6[24]](_0x53c6[15],license[_0x53c6[6]](),license[_0x53c6[7]](),controller[_0x53c6[20]]);router[_0x53c6[23]](_0x53c6[5],license[_0x53c6[6]](),license[_0x53c6[7]](),controller[_0x53c6[25]]);router[_0x53c6[23]](_0x53c6[15],license[_0x53c6[6]](),license[_0x53c6[7]](),controller[_0x53c6[26]]);module[_0x53c6[27]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./chat_queue.controller');
+var auth = require('../../auth/auth.service');
+var license = require('../../config/license/license.service');
+var router = express.Router();
+
+router.get('/', license.isValidDate(), license.hasChat(), controller.index);
+router.get('/me', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), controller.me);
+router.get('/:id/agents', auth.isAuthenticated(), license.hasChat(), controller.showAgents);
+router.get('/:id', license.isValidDate(), license.hasChat(), controller.show);
+router.post('/', license.isValidDate(), license.hasChat(), controller.create);
+router.post('/:id/agents', license.isValidDate(), license.hasChat(), controller.addAgents);
+router.put('/:id', license.isValidDate(), license.hasChat(), controller.update);
+router.delete('/:id/agents', license.isValidDate(), license.hasChat(), controller.removeAgents);
+router.patch('/:id', license.isValidDate(), license.hasChat(), controller.update);
+router.delete('/', license.isValidDate(), license.hasChat(), controller.bulkDestroy);
+router.delete('/:id', license.isValidDate(), license.hasChat(), controller.destroy);
+
+module.exports = router;
index 470d72b..efdde6b 100644 (file)
@@ -1 +1,499 @@
-var _0x5bd6=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x6D\x64\x35","\x6D\x6F\x6D\x65\x6E\x74","\x74\x6F\x2D\x63\x73\x76","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x55\x73\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x43\x68\x61\x74\x52\x6F\x6F\x6D","\x43\x68\x61\x74\x4D\x65\x73\x73\x61\x67\x65","\x43\x68\x61\x74\x56\x69\x73\x69\x74\x6F\x72","\x55\x73\x65\x72\x48\x61\x73\x43\x68\x61\x74\x52\x6F\x6F\x6D","\x69\x6E\x64\x65\x78","\x6C\x6F\x67","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x69\x64","\x6E\x61\x6D\x65","\x66\x75\x6C\x6C\x6E\x61\x6D\x65","\x65\x6D\x61\x69\x6C","\x72\x6F\x6C\x65","\x69\x6E\x74\x65\x72\x6E\x61\x6C","\x6D\x65\x72\x67\x65","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x6D\x65","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x67\x65\x74\x43\x68\x61\x74\x52\x6F\x6F\x6D\x73","\x75\x73\x65\x72","\x66\x69\x6E\x64\x42\x79\x49\x64","\x73\x68\x6F\x77","\x70\x61\x72\x61\x6D\x73","\x75\x73\x65\x72\x70\x69\x63","\x67\x65\x74\x52\x6F\x6F\x6D\x42\x79\x55\x73\x65\x72\x73","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x67\x65\x74\x55\x73\x65\x72\x73","\x75\x73\x65\x72\x73","\x73\x65\x74\x55\x73\x65\x72\x73","\x73\x70\x72\x65\x61\x64","\x62\x61\x73\x65\x36\x34","\x73\x6F\x72\x74","\x73\x74\x72\x69\x6E\x67\x69\x66\x79","\x4F\x50\x45\x4E","\x66\x69\x6E\x64\x4F\x72\x43\x72\x65\x61\x74\x65","\x65\x78\x70\x6F\x72\x74","\x20","\x72\x65\x70\x6C\x61\x63\x65","\x62\x6F\x64\x79","\x63\x72\x65\x61\x74\x65\x64\x41\x74","\x70\x75\x73\x68","\x66\x6F\x72\x45\x61\x63\x68","\x43\x68\x61\x74\x4D\x65\x73\x73\x61\x67\x65\x73","\x74\x65\x78\x74\x2F\x63\x73\x76","\x74\x79\x70\x65","\x67\x65\x74\x52\x6F\x6F\x6D\x42\x79\x54\x79\x70\x65","\x67\x65\x74\x52\x6F\x6F\x6D\x47\x72\x6F\x75\x70\x73","\x63\x72\x65\x61\x74\x65","\x75\x70\x64\x61\x74\x65","\x73\x61\x76\x65","\x75\x70\x64\x61\x74\x65\x55\x73\x65\x72\x73","\x64\x65\x73\x74\x72\x6F\x79"];_0x5bd6[0];var _=require(_0x5bd6[1]);var md5=require(_0x5bd6[2]);var moment=require(_0x5bd6[3]);var csv=require(_0x5bd6[4]);var Util=require(_0x5bd6[5]);var User=require(_0x5bd6[7])[_0x5bd6[6]];var ChatRoom=require(_0x5bd6[7])[_0x5bd6[8]];var ChatMessage=require(_0x5bd6[7])[_0x5bd6[9]];var ChatVisitor=require(_0x5bd6[7])[_0x5bd6[10]];var UserHasChatRoom=require(_0x5bd6[7])[_0x5bd6[11]];exports[_0x5bd6[12]]=function(_0x1c24xb,_0x1c24xc,_0x1c24xd){return ChatRoom[_0x5bd6[27]](_[_0x5bd6[26]](Util[_0x5bd6[19]](_0x1c24xb[_0x5bd6[18]]),{include:[{model:User,attributes:[_0x5bd6[20],_0x5bd6[21],_0x5bd6[22],_0x5bd6[23],_0x5bd6[24],_0x5bd6[25]]},{model:ChatMessage},{model:ChatVisitor}]}))[_0x5bd6[17]](function(_0x1c24xf){_0x1c24xc[_0x5bd6[16]](200)[_0x5bd6[15]](_0x1c24xf)})[_0x5bd6[14]](function(_0x1c24xe){console[_0x5bd6[13]](_0x1c24xe);return handleError(_0x1c24xc,_0x1c24xe)})};exports[_0x5bd6[28]]=function(_0x1c24xb,_0x1c24xc){return User[_0x5bd6[32]](_0x1c24xb[_0x5bd6[31]][_0x5bd6[20]])[_0x5bd6[17]](function(_0x1c24x11){return _0x1c24x11[_0x5bd6[30]]({include:[{model:ChatVisitor,attributes:[_0x5bd6[20],_0x5bd6[22],_0x5bd6[23]]},{model:User,attributes:[_0x5bd6[20],_0x5bd6[21],_0x5bd6[22],_0x5bd6[23],_0x5bd6[24],_0x5bd6[25]]}]})})[_0x5bd6[17]](function(_0x1c24x10){if(!_0x1c24x10){return _0x1c24xc[_0x5bd6[29]](404)};return _0x1c24xc[_0x5bd6[15]](_0x1c24x10)})[_0x5bd6[14]](function(_0x1c24xe){return handleError(_0x1c24xc,_0x1c24xe)})};exports[_0x5bd6[33]]=function(_0x1c24xb,_0x1c24xc){return ChatRoom[_0x5bd6[32]](_0x1c24xb[_0x5bd6[34]][_0x5bd6[20]],{include:[{model:ChatMessage,include:[{model:ChatVisitor,attributes:[_0x5bd6[20],_0x5bd6[23],_0x5bd6[22]]},{model:User,attributes:[_0x5bd6[20],_0x5bd6[23],_0x5bd6[21],_0x5bd6[22],_0x5bd6[35]]}]},{model:User,attributes:[_0x5bd6[20],_0x5bd6[23],_0x5bd6[21],_0x5bd6[22]]},{model:ChatVisitor}]})[_0x5bd6[17]](function(_0x1c24x12){if(!_0x1c24x12){return _0x1c24xc[_0x5bd6[29]](404)};return _0x1c24xc[_0x5bd6[15]](_0x1c24x12)})[_0x5bd6[14]](function(_0x1c24xe){return handleError(_0x1c24xc,_0x1c24xe)})};exports[_0x5bd6[36]]=function(_0x1c24xb,_0x1c24xc,_0x1c24xd){var _0x1c24x13;return ChatRoom[_0x5bd6[46]]({where:{token:md5(JSON[_0x5bd6[44]](_0x1c24xb[_0x5bd6[18]][_0x5bd6[39]][_0x5bd6[43]]())).toString(_0x5bd6[42])},defaults:{type:_0x5bd6[25],token:md5(JSON[_0x5bd6[44]](_0x1c24xb[_0x5bd6[18]][_0x5bd6[39]][_0x5bd6[43]]())).toString(_0x5bd6[42]),status:_0x5bd6[45]},include:[{model:ChatMessage,include:[{model:ChatVisitor,attributes:[_0x5bd6[20],_0x5bd6[23],_0x5bd6[22]]},{model:User,attributes:[_0x5bd6[20],_0x5bd6[21],_0x5bd6[22],_0x5bd6[23],_0x5bd6[24],_0x5bd6[25]]}]},{model:User,attributes:[_0x5bd6[20],_0x5bd6[21],_0x5bd6[22],_0x5bd6[23],_0x5bd6[24],_0x5bd6[25]]}]})[_0x5bd6[41]](function(_0x1c24x12,_0x1c24x15){_0x1c24x13=_0x1c24x12;if(_0x1c24x15){return _0x1c24x13[_0x5bd6[40]](_0x1c24xb[_0x5bd6[18]][_0x5bd6[39]])}else {return}})[_0x5bd6[17]](function(){return _0x1c24x13[_0x5bd6[38]]()})[_0x5bd6[17]](function(_0x1c24x14){return _0x1c24xc[_0x5bd6[16]](200)[_0x5bd6[15]](_[_0x5bd6[26]](_0x1c24x13[_0x5bd6[37]],{Users:_0x1c24x14}))})[_0x5bd6[14]](function(_0x1c24xe){return handleError(_0x1c24xc,_0x1c24xe)})};exports[_0x5bd6[47]]=function(_0x1c24xb,_0x1c24xc,_0x1c24xd){console[_0x5bd6[13]](_0x5bd6[47]);return ChatRoom[_0x5bd6[32]](_0x1c24xb[_0x5bd6[34]][_0x5bd6[20]],{include:[{model:ChatMessage,include:[{model:ChatVisitor,attributes:[_0x5bd6[20],_0x5bd6[22]]},{model:User,attributes:[_0x5bd6[20],_0x5bd6[22]]}]}]})[_0x5bd6[17]](function(_0x1c24x12){var _0x1c24x16=[];_0x1c24x12[_0x5bd6[54]][_0x5bd6[53]](function(_0x1c24x17){_0x1c24x16[_0x5bd6[52]]({name:_0x1c24x17[_0x5bd6[6]]?_0x1c24x17[_0x5bd6[6]][_0x5bd6[22]]:_0x1c24x17[_0x5bd6[10]][_0x5bd6[22]],text:_0x1c24x17[_0x5bd6[50]][_0x5bd6[49]](/(\r\n|\n|\r)/gm,_0x5bd6[48]),date:_0x1c24x17[_0x5bd6[51]]})});return _0x1c24xc[_0x5bd6[56]](_0x5bd6[55])[_0x5bd6[16]](200)[_0x5bd6[15]](csv(_0x1c24x16))})[_0x5bd6[14]](function(_0x1c24xe){return handleError(_0x1c24xc,_0x1c24xe)})};exports[_0x5bd6[57]]=function(_0x1c24xb,_0x1c24xc){User[_0x5bd6[32]](_0x1c24xb[_0x5bd6[31]][_0x5bd6[20]])[_0x5bd6[17]](function(_0x1c24x11){_0x1c24x11[_0x5bd6[30]]({where:{type:_0x1c24xb[_0x5bd6[34]][_0x5bd6[56]]},include:[{model:ChatVisitor,attributes:[_0x5bd6[20],_0x5bd6[22],_0x5bd6[23]]}]})[_0x5bd6[17]](function(_0x1c24x10){if(!_0x1c24x10){return _0x1c24xc[_0x5bd6[29]](404)};return _0x1c24xc[_0x5bd6[15]](_0x1c24x10)})[_0x5bd6[14]](function(_0x1c24xe){return handleError(_0x1c24xc,_0x1c24xe)})})[_0x5bd6[14]](function(_0x1c24xe){return handleError(_0x1c24xc,_0x1c24xe)})};exports[_0x5bd6[58]]=function(_0x1c24xb,_0x1c24xc){User[_0x5bd6[32]](_0x1c24xb[_0x5bd6[31]][_0x5bd6[20]])[_0x5bd6[17]](function(_0x1c24x11){_0x1c24x11[_0x5bd6[30]]({include:[{model:ChatVisitor,attributes:[_0x5bd6[20],_0x5bd6[22],_0x5bd6[23]]},{model:User,attributes:[_0x5bd6[20],_0x5bd6[21],_0x5bd6[22],_0x5bd6[23],_0x5bd6[24],_0x5bd6[25]]}]})[_0x5bd6[17]](function(_0x1c24x10){if(!_0x1c24x10){return _0x1c24xc[_0x5bd6[29]](404)};return _0x1c24xc[_0x5bd6[15]](_0x1c24x10)})[_0x5bd6[14]](function(_0x1c24xe){return handleError(_0x1c24xc,_0x1c24xe)})})[_0x5bd6[14]](function(_0x1c24xe){return handleError(_0x1c24xc,_0x1c24xe)})};exports[_0x5bd6[59]]=function(_0x1c24xb,_0x1c24xc){};exports[_0x5bd6[60]]=function(_0x1c24xb,_0x1c24xc){if(_0x1c24xb[_0x5bd6[50]][_0x5bd6[20]]){delete _0x1c24xb[_0x5bd6[50]][_0x5bd6[20]]};ChatRoom[_0x5bd6[32]](_0x1c24xb[_0x5bd6[34]][_0x5bd6[20]])[_0x5bd6[17]](function(_0x1c24x12){if(!_0x1c24x12){return _0x1c24xc[_0x5bd6[29]](404)};var _0x1c24x18=_[_0x5bd6[26]](_0x1c24x12,_0x1c24xb[_0x5bd6[50]]);_0x1c24x18[_0x5bd6[61]]()[_0x5bd6[17]](function(){return _0x1c24xc[_0x5bd6[16]](200)[_0x5bd6[15]](_0x1c24x12)})[_0x5bd6[14]](function(_0x1c24xe){return handleError(_0x1c24xc,_0x1c24xe)})})[_0x5bd6[14]](function(_0x1c24xe){return handleError(_0x1c24xc,_0x1c24xe)})};exports[_0x5bd6[62]]=function(_0x1c24xb,_0x1c24xc){var _0x1c24x13;if(_0x1c24xb[_0x5bd6[50]][_0x5bd6[20]]){delete _0x1c24xb[_0x5bd6[50]][_0x5bd6[20]]};return ChatRoom[_0x5bd6[32]](_0x1c24xb[_0x5bd6[34]][_0x5bd6[20]])[_0x5bd6[17]](function(_0x1c24x12){if(!_0x1c24x12||!_0x1c24xb[_0x5bd6[50]][_0x5bd6[39]]){return _0x1c24xc[_0x5bd6[29]](404)};return _0x1c24x12})[_0x5bd6[17]](function(_0x1c24x12){return _0x1c24x12[_0x5bd6[60]]({token:md5(JSON[_0x5bd6[44]](_0x1c24xb[_0x5bd6[50]][_0x5bd6[39]][_0x5bd6[43]]())).toString(_0x5bd6[42])})})[_0x5bd6[17]](function(_0x1c24x12){_0x1c24x13=_0x1c24x12;return _0x1c24x12[_0x5bd6[40]](_0x1c24xb[_0x5bd6[50]][_0x5bd6[39]][_0x5bd6[43]](),{individualHooks:true})})[_0x5bd6[17]](function(){return _0x1c24x13[_0x5bd6[38]]()})[_0x5bd6[17]](function(_0x1c24x14){return _0x1c24xc[_0x5bd6[16]](200)[_0x5bd6[15]](_[_0x5bd6[26]](_0x1c24x13[_0x5bd6[37]],{Users:_0x1c24x14,ChatMessages:[]}))})[_0x5bd6[14]](function(_0x1c24xe){return handleError(_0x1c24xc,_0x1c24xe)})};exports[_0x5bd6[63]]=function(_0x1c24xb,_0x1c24xc){ChatRoom[_0x5bd6[32]](_0x1c24xb[_0x5bd6[34]][_0x5bd6[20]])[_0x5bd6[17]](function(_0x1c24x12){if(!_0x1c24x12){return _0x1c24xc[_0x5bd6[29]](404)};_0x1c24x12[_0x5bd6[63]]()[_0x5bd6[17]](function(){return _0x1c24xc[_0x5bd6[29]](204)})[_0x5bd6[14]](function(_0x1c24xe){return handleError(_0x1c24xc,_0x1c24xe)})})[_0x5bd6[14]](function(_0x1c24xe){return handleError(_0x1c24xc,_0x1c24xe)})};function handleError(_0x1c24xc,_0x1c24xe){return _0x1c24xc[_0x5bd6[16]](500)[_0x5bd6[15]](_0x1c24xe)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var md5 = require('md5');
+var moment = require('moment');
+var csv = require('to-csv');
+
+var Util = require('../../config/util');
+
+var User = require('../../models').User;
+var ChatRoom = require('../../models').ChatRoom;
+var ChatMessage = require('../../models').ChatMessage;
+var ChatVisitor = require('../../models').ChatVisitor;
+var UserHasChatRoom = require('../../models').UserHasChatRoom;
+
+
+// Get list of chat_rooms
+exports.index = function(req, res, next) {
+  return ChatRoom
+    .findAndCountAll(_.merge(Util.getQuery(req.query), {
+      include: [{
+        model: User,
+        attributes: ['id', 'name', 'fullname', 'email', 'role', 'internal']
+      }, {
+        model: ChatMessage
+      }, {
+        model: ChatVisitor
+      }]
+    }))
+    .then(function(result) {
+      res.status(200).send(result);
+    })
+    .catch(function(err) {
+      console.log(err);
+      return handleError(res, err);
+    });
+};
+
+// Get list of my chat_rooms
+exports.me = function(req, res) {
+  return User
+    .findById(req.user.id)
+    .then(function(user) {
+      return user
+        .getChatRooms({
+          include: [{
+            model: ChatVisitor,
+            attributes: ['id', 'fullname', 'email']
+          }, {
+            model: User,
+            attributes: ['id', 'name', 'fullname', 'email', 'role', 'internal']
+          }]
+        });
+    })
+    .then(function(chatRooms) {
+      if (!chatRooms) {
+        return res.sendStatus(404);
+      }
+      return res.send(chatRooms);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single chatRoom
+exports.show = function(req, res) {
+  return ChatRoom
+    .findById(req.params.id, {
+      include: [{
+        model: ChatMessage,
+        include: [{
+          model: ChatVisitor,
+          attributes: ['id', 'email', 'fullname']
+        }, {
+          model: User,
+          attributes: ['id', 'email', 'name', 'fullname', 'userpic']
+        }]
+      }, {
+        model: User,
+        attributes: ['id', 'email', 'name', 'fullname']
+      }, {
+        model: ChatVisitor
+      }]
+    })
+    .then(function(chatRoom) {
+      if (!chatRoom) {
+        return res.sendStatus(404);
+      }
+      return res.send(chatRoom);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single chatRoom by users
+exports.getRoomByUsers = function(req, res, next) {
+
+  var _chatRoom;
+
+  return ChatRoom
+    .findOrCreate({
+      where: {
+        token: md5(JSON.stringify(req.query.users.sort())).toString('base64')
+      },
+      defaults: {
+        type: 'internal',
+        token: md5(JSON.stringify(req.query.users.sort())).toString('base64'),
+        status: 'OPEN'
+      },
+      include: [{
+        model: ChatMessage,
+        include: [{
+          model: ChatVisitor,
+          attributes: ['id', 'email', 'fullname']
+        }, {
+          model: User,
+          attributes: ['id', 'name', 'fullname', 'email', 'role', 'internal']
+        }]
+      }, {
+        model: User,
+        attributes: ['id', 'name', 'fullname', 'email', 'role', 'internal']
+      }]
+    })
+    .spread(function(chatRoom, created) {
+      _chatRoom = chatRoom;
+      // _chatRoom.dataValues.ChatMessages = [];
+      if (created) {
+        return _chatRoom
+          .setUsers(req.query.users);
+      } else {
+        return;
+      }
+    })
+    .then(function() {
+      return _chatRoom
+        .getUsers();
+    })
+    .then(function(users) {
+      return res.status(200).send(_.merge(_chatRoom.dataValues, {
+        Users: users
+      }));
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+exports.export = function(req, res, next) {
+  console.log('export');
+  return ChatRoom
+    .findById(req.params.id, {
+      include: [{
+        model: ChatMessage,
+        include: [{
+          model: ChatVisitor,
+          attributes: ['id', 'fullname']
+        }, {
+          model: User,
+          attributes: ['id', 'fullname']
+        }]
+      }]
+    })
+    .then(function(chatRoom) {
+      var chatMessageForCSV = [];
+      chatRoom.ChatMessages.forEach(function(chatMessage) {
+        chatMessageForCSV.push({
+          name: chatMessage.User ? chatMessage.User.fullname : chatMessage.ChatVisitor.fullname,
+          text: chatMessage.body.replace(/(\r\n|\n|\r)/gm, " "),
+          date: chatMessage.createdAt
+        });
+      });
+      return res.type('text/csv').status(200).send(csv(chatMessageForCSV));
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single chatRoom
+exports.getRoomByType = function(req, res) {
+  User
+    .findById(req.user.id)
+    .then(function(user) {
+      user
+        .getChatRooms({
+          where: {
+            type: req.params.type
+          },
+          include: [{
+            model: ChatVisitor,
+            attributes: ['id', 'fullname', 'email']
+          }]
+        })
+        .then(function(chatRooms) {
+          if (!chatRooms) {
+            return res.sendStatus(404);
+          }
+          return res.send(chatRooms);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single chatRoom
+exports.getRoomGroups = function(req, res) {
+  User
+    .findById(req.user.id)
+    .then(function(user) {
+      user
+        .getChatRooms({
+          include: [{
+            model: ChatVisitor,
+            attributes: ['id', 'fullname', 'email']
+          }, {
+            model: User,
+            attributes: ['id', 'name', 'fullname', 'email', 'role', 'internal']
+          }]
+        })
+        .then(function(chatRooms) {
+          if (!chatRooms) {
+            return res.sendStatus(404);
+          }
+          return res.send(chatRooms);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new chatRoom in the DB.
+exports.create = function(req, res) {
+  // if (req.body.to) {
+  //
+  //   var token;
+  //   var participants = {
+  //     users: {
+  //       ids: []
+  //     },
+  //     visitor: {}
+  //   };
+  //
+  //   switch (req.body.type) {
+  //     case 'internal':
+  //
+  //       if (!req.body.to.isArray) {
+  //         req.body.to = [parseInt(req.body.to, 10)];
+  //       }
+  //
+  //       participants.users.ids = req.body.to;
+  //
+  //       if (!_.contains(req.body.to, req.user.id)) {
+  //         participants.users.ids.push(req.user.id);
+  //       }
+  //
+  //       participants.users.ids.sort();
+  //
+  //       token = md5(JSON.stringify(participants)).toString(
+  //         'base64');
+  //
+  //       participants.users.fullnames = [];
+  //
+  //       User
+  //         .findAll({
+  //           where: {
+  //             id: {
+  //               $in: req.body.to
+  //             }
+  //           },
+  //           attributes: ['id', 'fullname']
+  //         })
+  //         .then(function(users) {
+  //
+  //           _.sortBy(users, 'id').forEach(function(item, index) {
+  //             participants.users.fullnames.push(item.fullname);
+  //           });
+  //
+  //           ChatRoom
+  //             .findOrCreate({
+  //               where: {
+  //                 token: token
+  //               },
+  //               defaults: _.merge({
+  //                 token: token,
+  //                 participants: JSON.stringify(participants)
+  //               }, req.body),
+  //               include: [{
+  //                 model: ChatMessage
+  //               }]
+  //             })
+  //             .spread(function(chatRoom, created) {
+  //
+  //               if (created) {
+  //                 chatRoom
+  //                   .setUsers(participants.users.ids)
+  //                   .then(function() {
+  //                     return res.status(201).send(chatRoom);
+  //                   })
+  //                   .catch(function(err) {
+  //                     return handleError(res, err);
+  //                   });
+  //               } else {
+  //                 return res.status(201).send(chatRoom);
+  //               }
+  //
+  //             })
+  //             .catch(function(err) {
+  //               return handleError(res, err);
+  //             });
+  //         })
+  //         .catch(function(err) {
+  //           return handleError(res, err);
+  //         });
+  //
+  //       break;
+  //     case 'external':
+  //
+  //       participants.visitor.id = req.body.to;
+  //       participants.users.ids.push(req.user.id);
+  //       participants.users.ids.sort();
+  //
+  //       token = md5(JSON.stringify(participants)).toString('base64');
+  //
+  //       participants.users.fullnames = [req.user.fullname];
+  //
+  //       ChatVisitor
+  //         .findById(req.body.to, {
+  //           attributes: ['id', 'fullname', 'email', 'referer']
+  //         })
+  //         .then(function(chatVisitor) {
+  //           participants.visitor.fullname = chatVisitor.fullname;
+  //           participants.visitor.referer = chatVisitor.referer;
+  //           participants.visitor.email = chatVisitor.email;
+  //
+  //           ChatRoom
+  //             .findOrCreate({
+  //               where: {
+  //                 token: token
+  //               },
+  //               defaults: _.merge({
+  //                 token: token,
+  //                 participants: JSON.stringify(participants)
+  //               }, req.body),
+  //               include: [{
+  //                 model: ChatMessage
+  //               }, {
+  //                 model: ChatVisitor
+  //               }, {
+  //                 model: User,
+  //               }]
+  //             })
+  //             .spread(function(chatRoom, created) {
+  //               if (created) {
+  //
+  //                 chatRoom
+  //                   .setUsers(participants.users.ids, {
+  //                     individualHooks: true
+  //                   })
+  //                   .then(function() {
+  //                     chatRoom
+  //                       .setChatVisitor(participants.visitor.id)
+  //                       .then(function() {
+  //                         return res.status(201).send(chatRoom);
+  //                       })
+  //                       .catch(function(err) {
+  //                         return handleError(res, err);
+  //                       });
+  //                   })
+  //                   .catch(function(err) {
+  //                     return handleError(res, err);
+  //                   });
+  //               } else {
+  //                 return res.status(201).send(chatRoom);
+  //               }
+  //
+  //             })
+  //             .catch(function(err) {
+  //               return handleError(res, err);
+  //             });
+  //         })
+  //         .catch(function(err) {
+  //           return handleError(res, err);
+  //         });
+  //
+  //       break;
+  //     default:
+  //   }
+  // } else {
+  //   return handleError(res, new Error('field "to" omitted'));
+  // }
+};
+
+// Updates an existing chatRoom in the DB.
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+
+  ChatRoom
+    .findById(req.params.id)
+    .then(function(chatRoom) {
+      if (!chatRoom) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(chatRoom, req.body);
+      updated
+        .save()
+        .then(function() {
+          return res.status(200).send(chatRoom);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Updates an existing chatRoom in the DB.
+exports.updateUsers = function(req, res) {
+  var _chatRoom;
+
+  if (req.body.id) {
+    delete req.body.id;
+  }
+
+  return ChatRoom
+    .findById(req.params.id)
+    .then(function(chatRoom) {
+      if (!chatRoom || !req.body.users) {
+        return res.sendStatus(404);
+      }
+      return chatRoom;
+    })
+    .then(function(chatRoom) {
+      return chatRoom
+        .update({
+          token: md5(JSON.stringify(req.body.users.sort())).toString('base64')
+        });
+    })
+    .then(function(chatRoom) {
+      _chatRoom = chatRoom;
+      return chatRoom
+        .setUsers(req.body.users.sort(), {
+          individualHooks: true
+        });
+    })
+    .then(function() {
+      return _chatRoom
+        .getUsers();
+    })
+    .then(function(users) {
+      return res.status(200).send(_.merge(_chatRoom.dataValues, {
+        Users: users,
+        ChatMessages: []
+      }));
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a chatRoom from the DB.
+exports.destroy = function(req, res) {
+  ChatRoom
+    .findById(req.params.id)
+    .then(function(chatRoom) {
+      if (!chatRoom) {
+        return res.sendStatus(404);
+      }
+
+      chatRoom
+        .destroy()
+        .then(function() {
+          return res.sendStatus(204);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index 9bb273f..2f75a98 100644 (file)
@@ -1 +1,30 @@
-var _0xa72e=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x55\x73\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x43\x68\x61\x74\x52\x6F\x6F\x6D","\x43\x68\x61\x74\x4D\x65\x73\x73\x61\x67\x65","\x43\x68\x61\x74\x56\x69\x73\x69\x74\x6F\x72","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x63\x68\x61\x74\x5F\x72\x6F\x6F\x6D\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x63\x68\x61\x74\x5F\x72\x6F\x6F\x6D\x3A\x72\x65\x6D\x6F\x76\x65"];_0xa72e[0];var User=require(_0xa72e[2])[_0xa72e[1]];var ChatRoom=require(_0xa72e[2])[_0xa72e[3]];var ChatMessage=require(_0xa72e[2])[_0xa72e[4]];var ChatVisitor=require(_0xa72e[2])[_0xa72e[5]];exports[_0xa72e[6]]=function(_0xad40x5){ChatRoom[_0xa72e[7]](function(_0xad40x6){onSave(_0xad40x5,_0xad40x6)});ChatRoom[_0xa72e[8]](function(_0xad40x6){onSave(_0xad40x5,_0xad40x6)});ChatRoom[_0xa72e[9]](function(_0xad40x6){onRemove(_0xad40x5,_0xad40x6)})};function onSave(_0xad40x5,_0xad40x6,_0xad40x8){_0xad40x5[_0xa72e[11]](_0xa72e[10],_0xad40x6)}function onRemove(_0xad40x5,_0xad40x6,_0xad40x8){_0xad40x5[_0xa72e[11]](_0xa72e[12],_0xad40x6)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var User = require('../../models').User;
+var ChatRoom = require('../../models').ChatRoom;
+var ChatMessage = require('../../models').ChatMessage;
+var ChatVisitor = require('../../models').ChatVisitor;
+
+exports.register = function (socket) {
+  ChatRoom.afterCreate(function (doc) {
+    onSave(socket, doc);
+  });
+  ChatRoom.afterUpdate(function (doc) {
+    onSave(socket, doc);
+  });
+  ChatRoom.afterDestroy(function (doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('chat_room:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('chat_room:remove', doc);
+}
index 4bc6405..731381f 100644 (file)
@@ -1 +1,22 @@
-var _0x9f87=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x63\x68\x61\x74\x5F\x72\x6F\x6F\x6D\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x56\x61\x6C\x69\x64\x44\x61\x74\x65","\x68\x61\x73\x43\x68\x61\x74","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x6D\x65","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x6D\x65","\x2F\x75\x73\x65\x72\x73","\x67\x65\x74\x52\x6F\x6F\x6D\x42\x79\x55\x73\x65\x72\x73","\x2F\x67\x72\x6F\x75\x70\x73","\x67\x65\x74\x52\x6F\x6F\x6D\x47\x72\x6F\x75\x70\x73","\x2F\x74\x79\x70\x65\x2F\x3A\x74\x79\x70\x65","\x67\x65\x74\x52\x6F\x6F\x6D\x42\x79\x54\x79\x70\x65","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x2F\x3A\x69\x64\x2F\x65\x78\x70\x6F\x72\x74","\x65\x78\x70\x6F\x72\x74","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x2F\x3A\x69\x64\x2F\x75\x73\x65\x72\x73","\x75\x70\x64\x61\x74\x65\x55\x73\x65\x72\x73","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x9f87[0];var express=require(_0x9f87[1]);var controller=require(_0x9f87[2]);var auth=require(_0x9f87[3]);var license=require(_0x9f87[4]);var router=express.Router();router[_0x9f87[9]](_0x9f87[5],license[_0x9f87[6]](),license[_0x9f87[7]](),controller[_0x9f87[8]]);router[_0x9f87[9]](_0x9f87[10],license[_0x9f87[6]](),license[_0x9f87[7]](),auth[_0x9f87[11]](),controller[_0x9f87[12]]);router[_0x9f87[9]](_0x9f87[13],license[_0x9f87[6]](),license[_0x9f87[7]](),auth[_0x9f87[11]](),controller[_0x9f87[14]]);router[_0x9f87[9]](_0x9f87[15],license[_0x9f87[6]](),license[_0x9f87[7]](),auth[_0x9f87[11]](),controller[_0x9f87[16]]);router[_0x9f87[9]](_0x9f87[17],license[_0x9f87[6]](),license[_0x9f87[7]](),auth[_0x9f87[11]](),controller[_0x9f87[18]]);router[_0x9f87[9]](_0x9f87[19],license[_0x9f87[6]](),license[_0x9f87[7]](),controller[_0x9f87[20]]);router[_0x9f87[9]](_0x9f87[21],license[_0x9f87[6]](),license[_0x9f87[7]](),controller[_0x9f87[22]]);router[_0x9f87[24]](_0x9f87[5],license[_0x9f87[6]](),license[_0x9f87[7]](),auth[_0x9f87[11]](),controller[_0x9f87[23]]);router[_0x9f87[26]](_0x9f87[19],license[_0x9f87[6]](),license[_0x9f87[7]](),controller[_0x9f87[25]]);router[_0x9f87[26]](_0x9f87[27],license[_0x9f87[6]](),license[_0x9f87[7]](),controller[_0x9f87[28]]);router[_0x9f87[29]](_0x9f87[19],license[_0x9f87[6]](),license[_0x9f87[7]](),controller[_0x9f87[25]]);router[_0x9f87[31]](_0x9f87[19],license[_0x9f87[6]](),license[_0x9f87[7]](),controller[_0x9f87[30]]);module[_0x9f87[32]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./chat_room.controller');
+var auth = require('../../auth/auth.service');
+var license = require('../../config/license/license.service');
+var router = express.Router();
+
+router.get('/', license.isValidDate(), license.hasChat(), controller.index);
+router.get('/me', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), controller.me);
+router.get('/users', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), controller.getRoomByUsers);
+router.get('/groups', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), controller.getRoomGroups);
+router.get('/type/:type', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), controller.getRoomByType);
+router.get('/:id', license.isValidDate(), license.hasChat(), controller.show);
+router.get('/:id/export', license.isValidDate(), license.hasChat(), controller.export);
+router.post('/', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), controller.create);
+router.put('/:id', license.isValidDate(), license.hasChat(), controller.update);
+router.put('/:id/users', license.isValidDate(), license.hasChat(), controller.updateUsers);
+router.patch('/:id', license.isValidDate(), license.hasChat(), controller.update);
+router.delete('/:id', license.isValidDate(), license.hasChat(), controller.destroy);
+
+module.exports = router;
index 2cb2ecd..38e5d14 100644 (file)
@@ -1 +1,104 @@
-var _0x875c=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x43\x68\x61\x74\x56\x69\x73\x69\x74\x6F\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x43\x68\x61\x74\x45\x6E\x71\x75\x69\x72\x79","\x43\x68\x61\x74\x57\x65\x62\x73\x69\x74\x65","\x69\x6E\x64\x65\x78","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x6D\x65\x72\x67\x65","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79"];_0x875c[0];var _=require(_0x875c[1]);var Util=require(_0x875c[2]);var ChatVisitor=require(_0x875c[4])[_0x875c[3]];var ChatEnquiry=require(_0x875c[4])[_0x875c[5]];var ChatWebsite=require(_0x875c[4])[_0x875c[6]];exports[_0x875c[7]]=function(_0xb658x6,_0xb658x7,_0xb658x8){return ChatVisitor[_0x875c[16]](_[_0x875c[15]](Util[_0x875c[14]](_0xb658x6[_0x875c[13]]),{include:[{model:ChatWebsite}]}))[_0x875c[12]](function(_0xb658xa){_0xb658x7[_0x875c[11]](200)[_0x875c[10]](_0xb658xa)})[_0x875c[9]](function(_0xb658x9){console[_0x875c[8]](_0xb658x9);return handleError(_0xb658x7,_0xb658x9)})};exports[_0x875c[17]]=function(_0xb658x6,_0xb658x7){return ChatVisitor[_0x875c[21]](_0xb658x6[_0x875c[20]][_0x875c[19]],{include:[{model:ChatEnquiry},{model:ChatWebsite}]})[_0x875c[12]](function(_0xb658xb){if(!_0xb658xb){return _0xb658x7[_0x875c[18]](404)};return _0xb658x7[_0x875c[10]](_0xb658xb)})[_0x875c[9]](function(_0xb658x9){return handleError(_0xb658x7,_0xb658x9)})};exports[_0x875c[22]]=function(_0xb658x6,_0xb658x7){return ChatVisitor[_0x875c[22]](_0xb658x6[_0x875c[23]])[_0x875c[12]](function(_0xb658xb){return _0xb658x7[_0x875c[11]](201)[_0x875c[10]](_0xb658xb)})[_0x875c[9]](function(_0xb658x9){return handleError(_0xb658x7,_0xb658x9)})};exports[_0x875c[24]]=function(_0xb658x6,_0xb658x7){if(_0xb658x6[_0x875c[23]][_0x875c[19]]){delete _0xb658x6[_0x875c[23]][_0x875c[19]]};return ChatVisitor[_0x875c[21]](_0xb658x6[_0x875c[20]][_0x875c[19]])[_0x875c[12]](function(_0xb658xb){if(!_0xb658xb){return _0xb658x7[_0x875c[18]](404)};var _0xb658xc=_[_0x875c[15]](_0xb658xb,_0xb658x6[_0x875c[23]]);return _0xb658xc[_0x875c[25]]()})[_0x875c[12]](function(_0xb658xb){return _0xb658x7[_0x875c[11]](200)[_0x875c[10]](_0xb658xb)})[_0x875c[9]](function(_0xb658x9){return handleError(_0xb658x7,_0xb658x9)})};exports[_0x875c[26]]=function(_0xb658x6,_0xb658x7){return ChatVisitor[_0x875c[21]](_0xb658x6[_0x875c[20]][_0x875c[19]])[_0x875c[12]](function(_0xb658xb){if(!_0xb658xb){return _0xb658x7[_0x875c[18]](404)};return _0xb658xb[_0x875c[26]]()})[_0x875c[12]](function(){return _0xb658x7[_0x875c[18]](204)})[_0x875c[9]](function(_0xb658x9){return handleError(_0xb658x7,_0xb658x9)})};function handleError(_0xb658x7,_0xb658x9){return _0xb658x7[_0x875c[11]](500)[_0x875c[10]](_0xb658x9)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var Util = require('../../config/util');
+
+var ChatVisitor = require('../../models').ChatVisitor;
+var ChatEnquiry = require('../../models').ChatEnquiry;
+var ChatWebsite = require('../../models').ChatWebsite;
+
+// Get list of agents
+exports.index = function(req, res, next) {
+  return ChatVisitor
+    .findAndCountAll(_.merge(Util.getQuery(req.query), {
+      include: [{
+        model: ChatWebsite
+      }]
+    }))
+    .then(function(result) {
+      res.status(200).send(result);
+    })
+    .catch(function(err) {
+      console.error(err);
+      return handleError(res, err);
+    });
+};
+
+// Get a single chatVisitor
+exports.show = function(req, res) {
+  return ChatVisitor
+    .findById(req.params.id, {
+      include: [{
+        model: ChatEnquiry
+      }, {
+        model: ChatWebsite
+      }]
+    })
+    .then(function(chatVisitor) {
+      if (!chatVisitor) {
+        return res.sendStatus(404);
+      }
+      return res.send(chatVisitor);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new chatVisitor in the DB.
+exports.create = function(req, res) {
+  return ChatVisitor
+    .create(req.body)
+    .then(function(chatVisitor) {
+      return res.status(201).send(chatVisitor);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Updates an existing chatVisitor in the DB.
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  return ChatVisitor
+    .findById(req.params.id)
+    .then(function(chatVisitor) {
+      if (!chatVisitor) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(chatVisitor, req.body);
+      return updated
+        .save();
+    })
+    .then(function(chatVisitor) {
+      return res.status(200).send(chatVisitor);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a chatVisitor from the DB.
+exports.destroy = function(req, res) {
+  return ChatVisitor
+    .findById(req.params.id)
+    .then(function(chatVisitor) {
+      if (!chatVisitor) {
+        return res.sendStatus(404);
+      }
+      return chatVisitor
+        .destroy();
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index 7efe761..a283bfc 100644 (file)
@@ -1 +1,27 @@
-var _0x7927=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x43\x68\x61\x74\x56\x69\x73\x69\x74\x6F\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x63\x68\x61\x74\x5F\x76\x69\x73\x69\x74\x6F\x72\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x63\x68\x61\x74\x5F\x76\x69\x73\x69\x74\x6F\x72\x3A\x72\x65\x6D\x6F\x76\x65"];_0x7927[0];var chat_visitor=require(_0x7927[2])[_0x7927[1]];exports[_0x7927[3]]=function(_0xdfa4x2){chat_visitor[_0x7927[4]](function(_0xdfa4x3){onSave(_0xdfa4x2,_0xdfa4x3)});chat_visitor[_0x7927[5]](function(_0xdfa4x3){onSave(_0xdfa4x2,_0xdfa4x3)});chat_visitor[_0x7927[6]](function(_0xdfa4x3){onRemove(_0xdfa4x2,_0xdfa4x3)})};function onSave(_0xdfa4x2,_0xdfa4x3,_0xdfa4x5){_0xdfa4x2[_0x7927[8]](_0x7927[7],_0xdfa4x3)}function onRemove(_0xdfa4x2,_0xdfa4x3,_0xdfa4x5){_0xdfa4x2[_0x7927[8]](_0x7927[9],_0xdfa4x3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var chat_visitor = require('../../models').ChatVisitor;
+
+exports.register = function(socket) {
+  chat_visitor.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  chat_visitor.afterUpdate(function(doc) {
+    onSave(socket, doc);
+  });
+  chat_visitor.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('chat_visitor:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('chat_visitor:remove', doc);
+}
index 1723ead..c58a917 100644 (file)
@@ -1 +1,15 @@
-var _0xc43f=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x63\x68\x61\x74\x5F\x76\x69\x73\x69\x74\x6F\x72\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x56\x61\x6C\x69\x64\x44\x61\x74\x65","\x68\x61\x73\x43\x68\x61\x74","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0xc43f[0];var express=require(_0xc43f[1]);var controller=require(_0xc43f[2]);var license=require(_0xc43f[3]);var router=express.Router();router[_0xc43f[8]](_0xc43f[4],license[_0xc43f[5]](),license[_0xc43f[6]](),controller[_0xc43f[7]]);router[_0xc43f[8]](_0xc43f[9],license[_0xc43f[5]](),license[_0xc43f[6]](),controller[_0xc43f[10]]);router[_0xc43f[12]](_0xc43f[4],license[_0xc43f[5]](),license[_0xc43f[6]](),controller[_0xc43f[11]]);router[_0xc43f[14]](_0xc43f[9],license[_0xc43f[5]](),license[_0xc43f[6]](),controller[_0xc43f[13]]);router[_0xc43f[15]](_0xc43f[9],license[_0xc43f[5]](),license[_0xc43f[6]](),controller[_0xc43f[13]]);router[_0xc43f[17]](_0xc43f[9],license[_0xc43f[5]](),license[_0xc43f[6]](),controller[_0xc43f[16]]);module[_0xc43f[18]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./chat_visitor.controller');
+var license = require('../../config/license/license.service');
+var router = express.Router();
+
+router.get('/', license.isValidDate(), license.hasChat(), controller.index);
+router.get('/:id', license.isValidDate(), license.hasChat(), controller.show);
+router.post('/', license.isValidDate(), license.hasChat(), controller.create);
+router.put('/:id', license.isValidDate(), license.hasChat(), controller.update);
+router.patch('/:id', license.isValidDate(), license.hasChat(), controller.update);
+router.delete('/:id', license.isValidDate(), license.hasChat(), controller.destroy);
+
+module.exports = router;
index 4222f6b..084d688 100644 (file)
@@ -1 +1,383 @@
-var _0x2a6a=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x61\x73\x79\x6E\x63","\x6D\x75\x73\x74\x61\x63\x68\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x43\x68\x61\x74\x57\x65\x62\x73\x69\x74\x65","\x43\x68\x61\x74\x51\x75\x65\x75\x65","\x55\x73\x65\x72","\x43\x68\x61\x74\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x43\x68\x61\x74\x57\x65\x62\x73\x69\x74\x65\x73\x46\x69\x65\x6C\x64","\x43\x68\x61\x74\x50\x72\x6F\x61\x63\x74\x69\x76\x65\x41\x63\x74\x69\x6F\x6E","\x73\x6E\x69\x70\x70\x65\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6D\x70\x6F\x6E\x65\x6E\x74\x73\x2F\x78\x63\x68\x61\x74\x74\x79","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x73\x68\x6F\x77\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x6C\x6F\x67","\x6C\x65\x6E\x67\x74\x68","\x6E\x61\x6D\x65","\x6D\x65\x72\x67\x65","\x67\x65\x74\x43\x68\x61\x74\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x73\x68\x6F\x77\x50\x72\x6F\x61\x63\x74\x69\x76\x65\x41\x63\x74\x69\x6F\x6E\x73","\x67\x65\x74\x43\x68\x61\x74\x50\x72\x6F\x61\x63\x74\x69\x76\x65\x41\x63\x74\x69\x6F\x6E\x73","\x67\x65\x74\x53\x6E\x69\x70\x70\x65\x74\x43\x6F\x64\x65","\x72\x65\x6D\x6F\x74\x65","\x72\x65\x6E\x64\x65\x72","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x75\x70\x64\x61\x74\x65\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x63\x72\x65\x61\x74\x65\x64\x41\x74","\x75\x70\x64\x61\x74\x65\x64\x41\x74","\x70\x72\x69\x6F\x72\x69\x74\x79","\x66\x6F\x72\x45\x61\x63\x68","\x62\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x77\x65\x62\x73\x69\x74\x65\x73","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x69\x64\x73","\x64\x65\x73\x74\x72\x6F\x79\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x61\x70\x70\x49\x64","\x67\x65\x74\x46\x6F\x72\x6D\x73","\x6A\x73\x6F\x6E","\x66\x69\x6E\x64\x41\x6C\x6C","\x74\x79\x70\x65","\x73\x63\x6F\x70\x65","\x75\x70\x64\x61\x74\x65\x46\x6F\x72\x6D\x73","\x6F\x6E\x6C\x69\x6E\x65","\x4F\x6E\x6C\x69\x6E\x65\x49\x64","\x6F\x66\x66\x6C\x69\x6E\x65","\x4F\x66\x66\x6C\x69\x6E\x65\x49\x64","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79\x50\x72\x6F\x61\x63\x74\x69\x76\x65\x41\x63\x74\x69\x6F\x6E\x73","\x64\x65\x73\x74\x72\x6F\x79\x50\x72\x6F\x61\x63\x74\x69\x76\x65\x41\x63\x74\x69\x6F\x6E","\x70\x61\x63\x74\x69\x6F\x6E\x49\x64","\x63\x72\x65\x61\x74\x65\x50\x72\x6F\x61\x63\x74\x69\x76\x65\x41\x63\x74\x69\x6F\x6E","\x43\x68\x61\x74\x57\x65\x62\x73\x69\x74\x65\x49\x64","\x75\x70\x64\x61\x74\x65\x50\x72\x6F\x61\x63\x74\x69\x76\x65\x41\x63\x74\x69\x6F\x6E"];_0x2a6a[0];var _=require(_0x2a6a[1]);var util=require(_0x2a6a[2]);var async=require(_0x2a6a[3]);var Mustache=require(_0x2a6a[4]);var Util=require(_0x2a6a[5]);var sequelize=require(_0x2a6a[7])[_0x2a6a[6]];var ChatWebsite=require(_0x2a6a[7])[_0x2a6a[8]];var ChatQueue=require(_0x2a6a[7])[_0x2a6a[9]];var User=require(_0x2a6a[7])[_0x2a6a[10]];var ChatApplication=require(_0x2a6a[7])[_0x2a6a[11]];var ChatWebsitesField=require(_0x2a6a[7])[_0x2a6a[12]];var ChatProactiveAction=require(_0x2a6a[7])[_0x2a6a[13]];var snippet=require(_0x2a6a[15])[_0x2a6a[14]];exports[_0x2a6a[16]]=function(_0xeddaxe,_0xeddaxf,_0xeddax10){return ChatWebsite[_0x2a6a[23]](Util[_0x2a6a[22]](_0xeddaxe[_0x2a6a[21]]))[_0x2a6a[20]](function(_0xeddax12){_0xeddaxf[_0x2a6a[19]](200)[_0x2a6a[18]](_0xeddax12)})[_0x2a6a[17]](function(_0xeddax11){return handleError(_0xeddaxf,_0xeddax11)})};exports[_0x2a6a[24]]=function(_0xeddaxe,_0xeddaxf){return ChatWebsite[_0x2a6a[28]](_0xeddaxe[_0x2a6a[27]][_0x2a6a[26]])[_0x2a6a[20]](function(_0xeddax13){if(!_0xeddax13){return _0xeddaxf[_0x2a6a[25]](404)};return _0xeddaxf[_0x2a6a[18]](_0xeddax13)})[_0x2a6a[17]](function(_0xeddax11){return handleError(_0xeddaxf,_0xeddax11)})};exports[_0x2a6a[29]]=function(_0xeddaxe,_0xeddaxf,_0xeddax10){return ChatWebsite[_0x2a6a[28]](_0xeddaxe[_0x2a6a[27]][_0x2a6a[26]])[_0x2a6a[20]](function(_0xeddax15){if(!_0xeddax15){return _0xeddaxf[_0x2a6a[25]](404)};return _0xeddax15[_0x2a6a[34]](_[_0x2a6a[33]](Util[_0x2a6a[22]](_0xeddaxe[_0x2a6a[21]]),{include:[{model:ChatQueue,attributes:[_0x2a6a[26],_0x2a6a[32]]},{model:User,attributes:[_0x2a6a[26],_0x2a6a[32]]}]}))})[_0x2a6a[20]](function(_0xeddax14){return _0xeddaxf[_0x2a6a[18]]({count:_0xeddax14[_0x2a6a[31]],rows:_0xeddax14})})[_0x2a6a[17]](function(_0xeddax11){console[_0x2a6a[30]](_0xeddax11);return handleError(_0xeddaxf,_0xeddax11)})};exports[_0x2a6a[35]]=function(_0xeddaxe,_0xeddaxf,_0xeddax10){return ChatWebsite[_0x2a6a[28]](_0xeddaxe[_0x2a6a[27]][_0x2a6a[26]])[_0x2a6a[20]](function(_0xeddax15){if(!_0xeddax15){return _0xeddaxf[_0x2a6a[25]](404)};return _0xeddax15[_0x2a6a[36]](Util[_0x2a6a[22]](_0xeddaxe[_0x2a6a[21]]))})[_0x2a6a[20]](function(_0xeddax16){return _0xeddaxf[_0x2a6a[18]]({count:_0xeddax16[_0x2a6a[31]],rows:_0xeddax16})})[_0x2a6a[17]](function(_0xeddax11){return handleError(_0xeddaxf,_0xeddax11)})};exports[_0x2a6a[37]]=function(_0xeddaxe,_0xeddaxf){return ChatWebsite[_0x2a6a[28]](_0xeddaxe[_0x2a6a[27]][_0x2a6a[26]])[_0x2a6a[20]](function(_0xeddax13){var _0xeddax17={remote:_0xeddax13[_0x2a6a[38]],websiteId:_0xeddaxe[_0x2a6a[27]][_0x2a6a[26]]};var _0xeddax18=Mustache[_0x2a6a[39]](snippet,_0xeddax17);return _0xeddaxf[_0x2a6a[19]](200)[_0x2a6a[18]]({html:_0xeddax18})})[_0x2a6a[17]](function(_0xeddax11){return handleError(_0xeddaxf,_0xeddax11)})};exports[_0x2a6a[40]]=function(_0xeddaxe,_0xeddaxf){return ChatWebsite[_0x2a6a[40]](_0xeddaxe[_0x2a6a[41]])[_0x2a6a[20]](function(_0xeddax13){return _0xeddaxf[_0x2a6a[19]](201)[_0x2a6a[18]](_0xeddax13)})[_0x2a6a[17]](function(_0xeddax11){return handleError(_0xeddaxf,_0xeddax11)})};exports[_0x2a6a[42]]=function(_0xeddaxe,_0xeddaxf){if(_0xeddaxe[_0x2a6a[41]][_0x2a6a[26]]){delete _0xeddaxe[_0x2a6a[41]][_0x2a6a[26]]};return ChatWebsite[_0x2a6a[28]](_0xeddaxe[_0x2a6a[27]][_0x2a6a[26]])[_0x2a6a[20]](function(_0xeddax13){if(!_0xeddax13){return _0xeddaxf[_0x2a6a[25]](404)};return _0xeddax13[_0x2a6a[42]](_0xeddaxe[_0x2a6a[41]])[_0x2a6a[20]](function(_0xeddax13){return _0xeddaxf[_0x2a6a[19]](200)[_0x2a6a[18]](_0xeddax13)})})[_0x2a6a[17]](function(_0xeddax11){return handleError(_0xeddaxf,_0xeddax11)})};exports[_0x2a6a[43]]=function(_0xeddaxe,_0xeddaxf){var _0xeddax19=0;var _0xeddax1a=_0xeddaxe[_0x2a6a[41]];_0xeddax1a[_0x2a6a[47]](function(_0xeddax1b){delete _0xeddax1b[_0x2a6a[26]];delete _0xeddax1b[_0x2a6a[44]];delete _0xeddax1b[_0x2a6a[45]];_0xeddax1b[_0x2a6a[46]]= ++_0xeddax19});return sequelize[_0x2a6a[50]](function(_0xeddax1c){return ChatApplication[_0x2a6a[49]]({where:{ChatWebsiteId:_0xeddaxe[_0x2a6a[27]][_0x2a6a[26]]},individualHooks:true,transaction:_0xeddax1c})[_0x2a6a[20]](function(){return ChatApplication[_0x2a6a[48]](_0xeddax1a,{individualHooks:true,transaction:_0xeddax1c})})})[_0x2a6a[20]](function(_0xeddax14){return _0xeddaxf[_0x2a6a[19]](200)[_0x2a6a[18]]({count:_0xeddax14[_0x2a6a[31]],rows:_0xeddax14})})[_0x2a6a[17]](function(_0xeddax11){return handleError(_0xeddaxf,_0xeddax11)})};exports[_0x2a6a[49]]=function(_0xeddaxe,_0xeddaxf){return ChatWebsite[_0x2a6a[28]](_0xeddaxe[_0x2a6a[27]][_0x2a6a[26]])[_0x2a6a[20]](function(_0xeddax13){if(!_0xeddax13){return _0xeddaxf[_0x2a6a[25]](404)};return _0xeddax13[_0x2a6a[49]]()})[_0x2a6a[20]](function(){return _0xeddaxf[_0x2a6a[25]](204)})[_0x2a6a[17]](function(_0xeddax11){return handleError(_0xeddaxf,_0xeddax11)})};exports[_0x2a6a[51]]=function(_0xeddaxe,_0xeddaxf){return ChatWebsite[_0x2a6a[49]]({where:{id:_0xeddaxe[_0x2a6a[21]][_0x2a6a[52]]},individualHooks:true})[_0x2a6a[20]](function(){return _0xeddaxf[_0x2a6a[25]](204)})[_0x2a6a[17]](function(_0xeddax11){return handleError(_0xeddaxf,_0xeddax11)})};exports[_0x2a6a[53]]=function(_0xeddaxe,_0xeddaxf){return ChatApplication[_0x2a6a[49]]({where:{id:_0xeddaxe[_0x2a6a[21]][_0x2a6a[54]]},individualHooks:true})[_0x2a6a[20]](function(){return _0xeddaxf[_0x2a6a[25]](204)})[_0x2a6a[17]](function(_0xeddax11){return handleError(_0xeddaxf,_0xeddax11)})};exports[_0x2a6a[55]]=function(_0xeddaxe,_0xeddaxf,_0xeddax10){return ChatApplication[_0x2a6a[28]](_0xeddaxe[_0x2a6a[27]][_0x2a6a[56]])[_0x2a6a[20]](function(_0xeddax1d){if(!_0xeddax1d){return _0xeddaxf[_0x2a6a[25]](404)};return _0xeddax1d[_0x2a6a[49]]()})[_0x2a6a[20]](function(){return _0xeddaxf[_0x2a6a[25]](204)})[_0x2a6a[17]](function(_0xeddax11){return handleError(_0xeddaxf,_0xeddax11)})};exports[_0x2a6a[57]]=function(_0xeddaxe,_0xeddaxf){return ChatWebsitesField[_0x2a6a[61]]({method:[_0xeddaxe[_0x2a6a[27]][_0x2a6a[60]],_0xeddaxe[_0x2a6a[27]][_0x2a6a[26]]]})[_0x2a6a[59]]()[_0x2a6a[20]](function(_0xeddax1e){return _0xeddaxf[_0x2a6a[19]](200)[_0x2a6a[58]](_0xeddax1e)})[_0x2a6a[17]](function(_0xeddax11){return handleError(_0xeddaxf,_0xeddax11)})};exports[_0x2a6a[62]]=function(_0xeddaxe,_0xeddaxf,_0xeddax10){return ChatWebsitesField[_0x2a6a[49]]({where:_0xeddaxe[_0x2a6a[27]][_0x2a6a[60]]===_0x2a6a[63]?{OnlineId:_0xeddaxe[_0x2a6a[27]][_0x2a6a[26]]}:{OfflineId:_0xeddaxe[_0x2a6a[27]][_0x2a6a[26]]}})[_0x2a6a[20]](function(){_[_0x2a6a[47]](_0xeddaxe[_0x2a6a[41]],function(_0xeddax20){if(_0xeddaxe[_0x2a6a[27]][_0x2a6a[60]]===_0x2a6a[63]){_0xeddax20[_0x2a6a[64]]=_0xeddaxe[_0x2a6a[27]][_0x2a6a[26]]}else {if(_0xeddaxe[_0x2a6a[27]][_0x2a6a[60]]===_0x2a6a[65]){_0xeddax20[_0x2a6a[66]]=_0xeddaxe[_0x2a6a[27]][_0x2a6a[26]]}}});return ChatWebsitesField[_0x2a6a[48]](_0xeddaxe[_0x2a6a[41]])})[_0x2a6a[20]](function(_0xeddax1f){_0xeddaxf[_0x2a6a[19]](201)[_0x2a6a[58]](_0xeddax1f)})[_0x2a6a[17]](function(_0xeddax11){return handleError(_0xeddaxf,_0xeddax11)})};exports[_0x2a6a[67]]=function(_0xeddaxe,_0xeddaxf){return ChatProactiveAction[_0x2a6a[49]]({where:{id:_0xeddaxe[_0x2a6a[21]][_0x2a6a[54]]},individualHooks:true})[_0x2a6a[20]](function(){return _0xeddaxf[_0x2a6a[25]](204)})[_0x2a6a[17]](function(_0xeddax11){return handleError(_0xeddaxf,_0xeddax11)})};exports[_0x2a6a[68]]=function(_0xeddaxe,_0xeddaxf,_0xeddax10){return ChatProactiveAction[_0x2a6a[28]](_0xeddaxe[_0x2a6a[27]][_0x2a6a[69]])[_0x2a6a[20]](function(_0xeddax21){if(!_0xeddax21){return _0xeddaxf[_0x2a6a[25]](404)};return _0xeddax21[_0x2a6a[49]]()})[_0x2a6a[20]](function(){return _0xeddaxf[_0x2a6a[25]](204)})[_0x2a6a[17]](function(_0xeddax11){return handleError(_0xeddaxf,_0xeddax11)})};exports[_0x2a6a[70]]=function(_0xeddaxe,_0xeddaxf,_0xeddax10){return ChatWebsite[_0x2a6a[28]](_0xeddaxe[_0x2a6a[27]][_0x2a6a[26]])[_0x2a6a[20]](function(_0xeddax15){if(!_0xeddax15){return _0xeddaxf[_0x2a6a[25]](404)};_0xeddaxe[_0x2a6a[41]][_0x2a6a[71]]=_0xeddax15[_0x2a6a[26]];return ChatProactiveAction[_0x2a6a[40]](_0xeddaxe[_0x2a6a[41]])})[_0x2a6a[20]](function(_0xeddax21){return _0xeddaxf[_0x2a6a[19]](201)[_0x2a6a[18]](_0xeddax21)})[_0x2a6a[17]](function(_0xeddax11){return handleError(_0xeddaxf,_0xeddax11)})};exports[_0x2a6a[72]]=function(_0xeddaxe,_0xeddaxf){if(_0xeddaxe[_0x2a6a[41]][_0x2a6a[26]]){delete _0xeddaxe[_0x2a6a[41]][_0x2a6a[26]]};return ChatProactiveAction[_0x2a6a[28]](_0xeddaxe[_0x2a6a[27]][_0x2a6a[69]])[_0x2a6a[20]](function(_0xeddax21){if(!_0xeddax21){return _0xeddaxf[_0x2a6a[25]](404)};return _0xeddax21[_0x2a6a[42]](_0xeddaxe[_0x2a6a[41]])[_0x2a6a[20]](function(_0xeddax21){console[_0x2a6a[30]](_0xeddax21);return _0xeddaxf[_0x2a6a[19]](200)[_0x2a6a[18]](_0xeddax21)})})[_0x2a6a[17]](function(_0xeddax11){return handleError(_0xeddaxf,_0xeddax11)})};function handleError(_0xeddaxf,_0xeddax11){return _0xeddaxf[_0x2a6a[19]](500)[_0x2a6a[18]](_0xeddax11)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var util = require('util');
+var async = require('async');
+var Mustache = require('mustache');
+var Util = require('../../config/util');
+
+var sequelize = require('../../models').sequelize;
+var ChatWebsite = require('../../models').ChatWebsite;
+var ChatQueue = require('../../models').ChatQueue;
+var User = require('../../models').User;
+var ChatApplication = require('../../models').ChatApplication;
+var ChatWebsitesField = require('../../models').ChatWebsitesField;
+var ChatProactiveAction = require('../../models').ChatProactiveAction;
+var snippet = require('../../components/xchatty').snippet;
+
+// Get list of agents
+exports.index = function(req, res, next) {
+  return ChatWebsite
+    .findAndCountAll(Util.getQuery(req.query))
+    .then(function(result) {
+      res.status(200).send(result);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+// Get a single chat_website
+exports.show = function(req, res) {
+  return ChatWebsite
+    .findById(req.params.id)
+    .then(function(chat_website) {
+      if (!chat_website) {
+        return res.sendStatus(404);
+      }
+      return res.send(chat_website);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single mailAccount
+exports.showApplications = function(req, res, next) {
+  return ChatWebsite
+    // .scope('default')
+    .findById(req.params.id)
+    .then(function(chatWebsite) {
+      if (!chatWebsite) {
+        return res.sendStatus(404);
+      }
+      return chatWebsite
+        .getChatApplications(_.merge(Util.getQuery(req.query), {
+          include: [{
+            model: ChatQueue,
+            attributes: ['id', 'name']
+          }, {
+            model: User,
+            attributes: ['id', 'name']
+          }]
+        }));
+    })
+    .then(function(chatApplications) {
+      return res.send({
+        count: chatApplications.length,
+        rows: chatApplications
+      });
+    })
+    .catch(function(err) {
+      console.log(err);
+      return handleError(res, err);
+    });
+};
+
+exports.showProactiveActions = function(req, res, next) {
+  return ChatWebsite
+    .findById(req.params.id)
+    .then(function(chatWebsite) {
+      if (!chatWebsite) {
+        return res.sendStatus(404);
+      }
+      return chatWebsite
+        .getChatProactiveActions(Util.getQuery(req.query));
+    })
+    .then(function(chatProactiveActions) {
+      return res.send({
+        count: chatProactiveActions.length,
+        rows: chatProactiveActions
+      });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a snippet for chat_website
+exports.getSnippetCode = function(req, res) {
+  return ChatWebsite
+    .findById(req.params.id)
+    .then(function(chat_website) {
+      var configSnippet = {
+        remote: chat_website.remote,
+        websiteId: req.params.id
+      };
+      var html = Mustache.render(snippet, configSnippet);
+      return res.status(200).send({
+        html: html
+      });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new chat_website in the DB.
+exports.create = function(req, res) {
+  return ChatWebsite
+    .create(req.body)
+    .then(function(chat_website) {
+      return res.status(201).send(chat_website);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Updates an existing chat_website in the DB.
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+
+  return ChatWebsite
+    .findById(req.params.id)
+    .then(function(chat_website) {
+      if (!chat_website) {
+        return res.sendStatus(404);
+      }
+
+      return chat_website
+        .update(req.body)
+        .then(function(chat_website) {
+          return res.status(200).send(chat_website);
+        })
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Updates an existing mailAccount in the DB.
+exports.updateApplications = function(req, res) {
+
+  var priority = 0;
+  var apps = req.body;
+
+  apps.forEach(function(app) {
+    delete app.id;
+    delete app.createdAt;
+    delete app.updatedAt;
+
+    app.priority = ++priority;
+  });
+
+  return sequelize.transaction(function(t) {
+    return ChatApplication
+      .destroy({
+        where: {
+          ChatWebsiteId: req.params.id
+        },
+        individualHooks: true,
+        transaction: t
+      }).then(function() {
+        return ChatApplication
+          .bulkCreate(apps, {
+            individualHooks: true,
+            transaction: t
+          });
+      });
+  }).then(function(chatApplications) {
+    return res.status(200).send({
+      count: chatApplications.length,
+      rows: chatApplications
+    });
+  }).catch(function(err) {
+    return handleError(res, err);
+  });
+};
+
+// Deletes a chat_website from the DB.
+exports.destroy = function(req, res) {
+  return ChatWebsite
+    .findById(req.params.id)
+    .then(function(chat_website) {
+      if (!chat_website) {
+        return res.sendStatus(404);
+      }
+      return chat_website
+        .destroy();
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a agent from the DB.
+exports.bulkDestroy = function(req, res) {
+  return ChatWebsite
+    .destroy({
+      where: {
+        id: req.query.websites
+      },
+      individualHooks: true
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a agent from the DB.
+exports.bulkDestroyApplications = function(req, res) {
+  return ChatApplication
+    .destroy({
+      where: {
+        id: req.query.ids
+      },
+      individualHooks: true
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a mailAccount from the DB.
+exports.destroyApplication = function(req, res, next) {
+  return ChatApplication
+    .findById(req.params.appId)
+    .then(function(mailApplication) {
+      if (!mailApplication) {
+        return res.sendStatus(404);
+      }
+
+      return mailApplication
+        .destroy();
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+exports.getForms = function(req, res) {
+  return ChatWebsitesField
+    .scope({
+      method: [req.params.type, req.params.id]
+    })
+    .findAll()
+    .then(function(data) {
+      return res.status(200).json(data);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+}
+
+exports.updateForms = function(req, res, next) {
+  return ChatWebsitesField
+    .destroy({
+      where: req.params.type === 'online' ? {
+        OnlineId: req.params.id
+      } : {
+        OfflineId: req.params.id
+      }
+    })
+    .then(function() {
+      _.forEach(req.body, function(value) {
+        if (req.params.type === 'online') {
+          value.OnlineId = req.params.id;
+        } else if (req.params.type === 'offline') {
+          value.OfflineId = req.params.id;
+        }
+      });
+      return ChatWebsitesField.bulkCreate(req.body);
+    })
+    .then(function(fields) {
+      res.status(201).json(fields);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+}
+
+exports.bulkDestroyProactiveActions = function(req, res) {
+  return ChatProactiveAction
+    .destroy({
+      where: {
+        id: req.query.ids
+      },
+      individualHooks: true
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a mailAccount from the DB.
+exports.destroyProactiveAction = function(req, res, next) {
+  return ChatProactiveAction
+    .findById(req.params.pactionId)
+    .then(function(chatProactiveAction) {
+      if (!chatProactiveAction) {
+        return res.sendStatus(404);
+      }
+      return chatProactiveAction.destroy();
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+exports.createProactiveAction = function(req, res, next) {
+  return ChatWebsite
+    .findById(req.params.id)
+    .then(function(chatWebsite) {
+      if (!chatWebsite) {
+        return res.sendStatus(404);
+      }
+      req.body.ChatWebsiteId = chatWebsite.id;
+      return ChatProactiveAction.create(req.body);
+    })
+    .then(function(chatProactiveAction) {
+      return res.status(201).send(chatProactiveAction);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+exports.updateProactiveAction = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+
+  return ChatProactiveAction
+    .findById(req.params.pactionId)
+    .then(function(chatProactiveAction) {
+      if (!chatProactiveAction) {
+        return res.sendStatus(404);
+      }
+
+      return chatProactiveAction
+        .update(req.body)
+        .then(function(chatProactiveAction) {
+          console.log(chatProactiveAction);
+          return res.status(200).send(chatProactiveAction);
+        })
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index 124f733..49f62d6 100644 (file)
@@ -1 +1,24 @@
-var _0xe136=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x43\x68\x61\x74\x57\x65\x62\x73\x69\x74\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x63\x68\x61\x74\x5F\x77\x65\x62\x73\x69\x74\x65\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x63\x68\x61\x74\x5F\x77\x65\x62\x73\x69\x74\x65\x3A\x72\x65\x6D\x6F\x76\x65"];_0xe136[0];var chat_website=require(_0xe136[2])[_0xe136[1]];exports[_0xe136[3]]=function(_0x6033x2){chat_website[_0xe136[4]](function(_0x6033x3){onSave(_0x6033x2,_0x6033x3)});chat_website[_0xe136[5]](function(_0x6033x3){onRemove(_0x6033x2,_0x6033x3)})};function onSave(_0x6033x2,_0x6033x3,_0x6033x5){_0x6033x2[_0xe136[7]](_0xe136[6],_0x6033x3)}function onRemove(_0x6033x2,_0x6033x3,_0x6033x5){_0x6033x2[_0xe136[7]](_0xe136[8],_0x6033x3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var chat_website = require('../../models').ChatWebsite;
+
+exports.register = function(socket) {
+  chat_website.afterCreate(function (doc) {
+    onSave(socket, doc);
+  });
+  chat_website.afterDestroy(function (doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('chat_website:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('chat_website:remove', doc);
+}
index ae5afe6..b7d89c0 100644 (file)
@@ -1 +1,29 @@
-var _0xf0ed=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x63\x68\x61\x74\x5F\x77\x65\x62\x73\x69\x74\x65\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x2F\x3A\x69\x64\x2F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x73\x68\x6F\x77\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x2F\x3A\x69\x64\x2F\x70\x72\x6F\x61\x63\x74\x69\x76\x65","\x73\x68\x6F\x77\x50\x72\x6F\x61\x63\x74\x69\x76\x65\x41\x63\x74\x69\x6F\x6E\x73","\x2F\x3A\x69\x64\x2F\x66\x69\x65\x6C\x64\x73\x2F\x3A\x74\x79\x70\x65","\x67\x65\x74\x46\x6F\x72\x6D\x73","\x2F\x3A\x69\x64\x2F\x73\x6E\x69\x70\x70\x65\x74","\x67\x65\x74\x53\x6E\x69\x70\x70\x65\x74\x43\x6F\x64\x65","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x63\x72\x65\x61\x74\x65\x50\x72\x6F\x61\x63\x74\x69\x76\x65\x41\x63\x74\x69\x6F\x6E","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x75\x70\x64\x61\x74\x65\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x2F\x3A\x69\x64\x2F\x70\x72\x6F\x61\x63\x74\x69\x76\x65\x2F\x3A\x70\x61\x63\x74\x69\x6F\x6E\x49\x64","\x75\x70\x64\x61\x74\x65\x50\x72\x6F\x61\x63\x74\x69\x76\x65\x41\x63\x74\x69\x6F\x6E","\x75\x70\x64\x61\x74\x65\x46\x6F\x72\x6D\x73","\x70\x61\x74\x63\x68","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79\x50\x72\x6F\x61\x63\x74\x69\x76\x65\x41\x63\x74\x69\x6F\x6E\x73","\x2F\x3A\x69\x64\x2F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73\x2F\x3A\x61\x70\x70\x49\x64","\x64\x65\x73\x74\x72\x6F\x79\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x64\x65\x73\x74\x72\x6F\x79\x50\x72\x6F\x61\x63\x74\x69\x76\x65\x41\x63\x74\x69\x6F\x6E","\x65\x78\x70\x6F\x72\x74\x73"];_0xf0ed[0];var express=require(_0xf0ed[1]);var controller=require(_0xf0ed[2]);var auth=require(_0xf0ed[3]);var license=require(_0xf0ed[4]);var router=express.Router();router[_0xf0ed[8]](_0xf0ed[5],auth[_0xf0ed[6]](),controller[_0xf0ed[7]]);router[_0xf0ed[8]](_0xf0ed[9],auth[_0xf0ed[6]](),controller[_0xf0ed[10]]);router[_0xf0ed[8]](_0xf0ed[11],auth[_0xf0ed[6]](),controller[_0xf0ed[12]]);router[_0xf0ed[8]](_0xf0ed[13],auth[_0xf0ed[6]](),controller[_0xf0ed[14]]);router[_0xf0ed[8]](_0xf0ed[15],auth[_0xf0ed[6]](),controller[_0xf0ed[16]]);router[_0xf0ed[8]](_0xf0ed[17],auth[_0xf0ed[6]](),controller[_0xf0ed[18]]);router[_0xf0ed[20]](_0xf0ed[5],auth[_0xf0ed[6]](),controller[_0xf0ed[19]]);router[_0xf0ed[20]](_0xf0ed[13],auth[_0xf0ed[6]](),controller[_0xf0ed[21]]);router[_0xf0ed[23]](_0xf0ed[9],auth[_0xf0ed[6]](),controller[_0xf0ed[22]]);router[_0xf0ed[23]](_0xf0ed[11],auth[_0xf0ed[6]](),controller[_0xf0ed[24]]);router[_0xf0ed[23]](_0xf0ed[25],auth[_0xf0ed[6]](),controller[_0xf0ed[26]]);router[_0xf0ed[23]](_0xf0ed[15],auth[_0xf0ed[6]](),controller[_0xf0ed[27]]);router[_0xf0ed[28]](_0xf0ed[9],auth[_0xf0ed[6]](),controller[_0xf0ed[22]]);router[_0xf0ed[30]](_0xf0ed[5],auth[_0xf0ed[6]](),controller[_0xf0ed[29]]);router[_0xf0ed[30]](_0xf0ed[9],auth[_0xf0ed[6]](),controller[_0xf0ed[31]]);router[_0xf0ed[30]](_0xf0ed[11],auth[_0xf0ed[6]](),controller[_0xf0ed[32]]);router[_0xf0ed[30]](_0xf0ed[13],auth[_0xf0ed[6]](),controller[_0xf0ed[33]]);router[_0xf0ed[30]](_0xf0ed[34],auth[_0xf0ed[6]](),controller[_0xf0ed[35]]);router[_0xf0ed[30]](_0xf0ed[25],auth[_0xf0ed[6]](),controller[_0xf0ed[36]]);module[_0xf0ed[37]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./chat_website.controller');
+var auth = require('../../auth/auth.service');
+var license = require('../../config/license/license.service');
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), controller.index);
+router.get('/:id', auth.isAuthenticated(), controller.show);
+router.get('/:id/applications', auth.isAuthenticated(), controller.showApplications);
+router.get('/:id/proactive', auth.isAuthenticated(), controller.showProactiveActions);
+router.get('/:id/fields/:type', auth.isAuthenticated(), controller.getForms);
+router.get('/:id/snippet', auth.isAuthenticated(), controller.getSnippetCode);
+router.post('/', auth.isAuthenticated(), controller.create);
+router.post('/:id/proactive', auth.isAuthenticated(), controller.createProactiveAction);
+router.put('/:id', auth.isAuthenticated(), controller.update);
+router.put('/:id/applications', auth.isAuthenticated(), controller.updateApplications);
+router.put('/:id/proactive/:pactionId', auth.isAuthenticated(), controller.updateProactiveAction);
+router.put('/:id/fields/:type', auth.isAuthenticated(), controller.updateForms);
+router.patch('/:id', auth.isAuthenticated(), controller.update);
+router.delete('/', auth.isAuthenticated(), controller.bulkDestroy);
+router.delete('/:id', auth.isAuthenticated(), controller.destroy);
+router.delete('/:id/applications', auth.isAuthenticated(), controller.bulkDestroyApplications);
+router.delete('/:id/proactive', auth.isAuthenticated(), controller.bulkDestroyProactiveActions);
+router.delete('/:id/applications/:appId', auth.isAuthenticated(), controller.destroyApplication);
+router.delete('/:id/proactive/:pactionId', auth.isAuthenticated(), controller.destroyProactiveAction);
+
+module.exports = router;
index 81205c2..78c9c47 100644 (file)
@@ -1 +1,112 @@
-var _0x64b5=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x43\x68\x61\x74\x57\x65\x62\x73\x69\x74\x65\x73\x46\x69\x65\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6A\x73\x6F\x6E","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x65\x6E\x64","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x73\x74\x72\x6F\x79","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65"];_0x64b5[0];var _=require(_0x64b5[1]);var Util=require(_0x64b5[2]);var ChatWebsitesField=require(_0x64b5[4])[_0x64b5[3]];function handleError(_0xdc09x5,_0xdc09x6){_0xdc09x6=_0xdc09x6||500;return function(_0xdc09x7){_0xdc09x5[_0x64b5[6]](_0xdc09x6)[_0x64b5[5]](_0xdc09x7)}}function responseWithResult(_0xdc09x5,_0xdc09x6){_0xdc09x6=_0xdc09x6||200;return function(_0xdc09x9){if(_0xdc09x9){_0xdc09x5[_0x64b5[6]](_0xdc09x6)[_0x64b5[7]](_0xdc09x9)}}}function responseWithoutResult(_0xdc09x5,_0xdc09x6){_0xdc09x6=_0xdc09x6||204;return function(){_0xdc09x5[_0x64b5[8]](_0xdc09x6)}}function handleEntityNotFound(_0xdc09x5){return function(_0xdc09x9){if(!_0xdc09x9){_0xdc09x5[_0x64b5[6]](404)[_0x64b5[9]]();return null};return _0xdc09x9}}function saveUpdates(_0xdc09xd){return function(_0xdc09x9){return _0xdc09x9[_0x64b5[11]](_0xdc09xd)[_0x64b5[10]](function(_0xdc09xe){return _0xdc09xe})}}function removeEntity(_0xdc09x5){return function(_0xdc09x9){if(_0xdc09x9){return _0xdc09x9[_0x64b5[12]]()[_0x64b5[10]](function(){_0xdc09x5[_0x64b5[6]](204)[_0x64b5[9]]()})}}}exports[_0x64b5[13]]=function(_0xdc09x10,_0xdc09x5){return ChatWebsitesField[_0x64b5[17]](Util[_0x64b5[16]](_0xdc09x10[_0x64b5[15]]))[_0x64b5[10]](responseWithResult(_0xdc09x5))[_0x64b5[14]](handleError(_0xdc09x5))};exports[_0x64b5[18]]=function(_0xdc09x10,_0xdc09x5){return ChatWebsitesField[_0x64b5[21]](_0xdc09x10[_0x64b5[20]][_0x64b5[19]])[_0x64b5[10]](handleEntityNotFound(_0xdc09x5))[_0x64b5[10]](responseWithResult(_0xdc09x5))[_0x64b5[14]](handleError(_0xdc09x5))};exports[_0x64b5[22]]=function(_0xdc09x10,_0xdc09x5){return ChatWebsitesField[_0x64b5[22]](_0xdc09x10[_0x64b5[23]])[_0x64b5[10]](responseWithResult(_0xdc09x5,201))[_0x64b5[14]](handleError(_0xdc09x5))};exports[_0x64b5[24]]=function(_0xdc09x10,_0xdc09x5){if(_0xdc09x10[_0x64b5[23]][_0x64b5[19]]){delete _0xdc09x10[_0x64b5[23]][_0x64b5[19]]};return ChatWebsitesField[_0x64b5[21]](_0xdc09x10[_0x64b5[20]][_0x64b5[19]])[_0x64b5[10]](handleEntityNotFound(_0xdc09x5))[_0x64b5[10]](saveUpdates(_0xdc09x10[_0x64b5[23]]))[_0x64b5[10]](responseWithResult(_0xdc09x5))[_0x64b5[14]](handleError(_0xdc09x5))};exports[_0x64b5[12]]=function(_0xdc09x10,_0xdc09x5){return ChatWebsitesField[_0x64b5[21]](_0xdc09x10[_0x64b5[20]][_0x64b5[19]])[_0x64b5[10]](handleEntityNotFound(_0xdc09x5))[_0x64b5[10]](removeEntity(_0xdc09x5))[_0x64b5[14]](handleError(_0xdc09x5))}
\ No newline at end of file
+/**
+ * Using Rails-like standard naming convention for endpoints.
+ * GET     /api/chat/websites/fields              ->  index
+ * POST    /api/chat/websites/fields              ->  create
+ * GET     /api/chat/websites/fields/:id          ->  show
+ * PUT     /api/chat/websites/fields/:id          ->  update
+ * DELETE  /api/chat/websites/fields/:id          ->  destroy
+ */
+
+'use strict';
+
+
+var _ = require('lodash');
+var Util = require('../../config/util');
+
+var ChatWebsitesField = require('../../models').ChatWebsitesField;
+
+
+function handleError(res, statusCode) {
+  statusCode = statusCode || 500;
+  return function(err) {
+    res.status(statusCode).send(err);
+  };
+}
+
+function responseWithResult(res, statusCode) {
+  statusCode = statusCode || 200;
+  return function(entity) {
+    if (entity) {
+      res.status(statusCode).json(entity);
+    }
+  };
+}
+
+function responseWithoutResult(res, statusCode) {
+  statusCode = statusCode || 204;
+  return function() {
+    res.sendStatus(statusCode);
+  };
+}
+
+function handleEntityNotFound(res) {
+  return function(entity) {
+    if (!entity) {
+      res.status(404).end();
+      return null;
+    }
+    return entity;
+  };
+}
+
+function saveUpdates(updates) {
+  return function(entity) {
+    return entity.updateAttributes(updates)
+      .then(function(updated) { 
+        return updated;
+      });
+  };
+}
+
+function removeEntity(res) {
+  return function(entity) {
+    if (entity) {
+      return entity.destroy()
+        .then(function() {
+          res.status(204).end();
+        });
+    }
+  };
+}
+
+// Gets a list of ChatWebsitesFields
+exports.index = function(req, res) {
+  return ChatWebsitesField.findAll(Util.getQuery(req.query))
+    .then(responseWithResult(res))
+    .catch(handleError(res));
+}
+
+// Gets a single ChatWebsitesField from the DB
+exports.show = function(req, res) {
+  return ChatWebsitesField.findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(responseWithResult(res))
+    .catch(handleError(res));
+}
+
+// Creates a new ChatWebsitesField in the DB
+exports.create = function(req, res) {
+  return ChatWebsitesField.create(req.body)
+    .then(responseWithResult(res, 201))
+    .catch(handleError(res));
+}
+
+// Updates an existing ChatWebsitesField in the DB
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  return ChatWebsitesField.findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(saveUpdates(req.body))
+    .then(responseWithResult(res))
+    .catch(handleError(res));
+}
+
+// Deletes a ChatWebsitesField from the DB
+exports.destroy = function(req, res) {
+  return ChatWebsitesField.findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(removeEntity(res))
+    .catch(handleError(res));
+}
index 0d3df74..e6f0f21 100644 (file)
@@ -1 +1,24 @@
-var _0x8cd0=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x43\x68\x61\x74\x57\x65\x62\x73\x69\x74\x65\x73\x46\x69\x65\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x63\x68\x61\x74\x5F\x77\x65\x62\x73\x69\x74\x65\x73\x5F\x66\x69\x65\x6C\x64\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x63\x68\x61\x74\x5F\x77\x65\x62\x73\x69\x74\x65\x73\x5F\x66\x69\x65\x6C\x64\x3A\x72\x65\x6D\x6F\x76\x65"];_0x8cd0[0];var ChatWebsitesField=require(_0x8cd0[2])[_0x8cd0[1]];exports[_0x8cd0[3]]=function(_0xf222x2){ChatWebsitesField[_0x8cd0[4]](function(_0xf222x3){onSave(_0xf222x2,_0xf222x3)});ChatWebsitesField[_0x8cd0[5]](function(_0xf222x3){onRemove(_0xf222x2,_0xf222x3)})};function onSave(_0xf222x2,_0xf222x3,_0xf222x5){_0xf222x2[_0x8cd0[7]](_0x8cd0[6],_0xf222x3)}function onRemove(_0xf222x2,_0xf222x3,_0xf222x5){_0xf222x2[_0x8cd0[7]](_0x8cd0[8],_0xf222x3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var ChatWebsitesField = require('../../models').ChatWebsitesField;
+
+exports.register = function(socket) {
+  ChatWebsitesField.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  ChatWebsitesField.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+};
+
+function onSave(socket, doc, cb) {
+  socket.emit('chat_websites_field:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('chat_websites_field:remove', doc);
+}
index 82b24e4..dccf6d7 100644 (file)
@@ -1 +1,16 @@
-var _0x15d3=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x63\x68\x61\x74\x5F\x77\x65\x62\x73\x69\x74\x65\x73\x5F\x66\x69\x65\x6C\x64\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x15d3[0];var express=require(_0x15d3[1]);var auth=require(_0x15d3[2]);var controller=require(_0x15d3[3]);var router=express.Router();router[_0x15d3[7]](_0x15d3[4],auth[_0x15d3[5]](),controller[_0x15d3[6]]);router[_0x15d3[7]](_0x15d3[8],auth[_0x15d3[5]](),controller[_0x15d3[9]]);router[_0x15d3[11]](_0x15d3[4],auth[_0x15d3[5]](),controller[_0x15d3[10]]);router[_0x15d3[13]](_0x15d3[8],auth[_0x15d3[5]](),controller[_0x15d3[12]]);router[_0x15d3[14]](_0x15d3[8],auth[_0x15d3[5]](),controller[_0x15d3[12]]);router[_0x15d3[16]](_0x15d3[8],auth[_0x15d3[5]](),controller[_0x15d3[15]]);module[_0x15d3[17]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var auth = require('../../auth/auth.service');
+var controller = require('./chat_websites_field.controller');
+
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), controller.index);
+router.get('/:id', auth.isAuthenticated(), controller.show);
+router.post('/', auth.isAuthenticated(), controller.create);
+router.put('/:id', auth.isAuthenticated(), controller.update);
+router.patch('/:id', auth.isAuthenticated(), controller.update);
+router.delete('/:id', auth.isAuthenticated(), controller.destroy);
+
+module.exports = router;
index 46819ae..c50e6e0 100644 (file)
@@ -1 +1,97 @@
-var _0x38b6=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6E\x6F\x50\x72\x65\x73\x65\x72\x76\x65\x43\x61\x63\x68\x65","\x70\x72\x6F\x78\x79\x71\x75\x69\x72\x65","\x63\x68\x61\x74\x57\x65\x62\x73\x69\x74\x65\x73\x46\x69\x65\x6C\x64\x43\x74\x72\x6C\x2E\x69\x6E\x64\x65\x78","\x63\x68\x61\x74\x57\x65\x62\x73\x69\x74\x65\x73\x46\x69\x65\x6C\x64\x43\x74\x72\x6C\x2E\x73\x68\x6F\x77","\x63\x68\x61\x74\x57\x65\x62\x73\x69\x74\x65\x73\x46\x69\x65\x6C\x64\x43\x74\x72\x6C\x2E\x63\x72\x65\x61\x74\x65","\x63\x68\x61\x74\x57\x65\x62\x73\x69\x74\x65\x73\x46\x69\x65\x6C\x64\x43\x74\x72\x6C\x2E\x75\x70\x64\x61\x74\x65","\x63\x68\x61\x74\x57\x65\x62\x73\x69\x74\x65\x73\x46\x69\x65\x6C\x64\x43\x74\x72\x6C\x2E\x64\x65\x73\x74\x72\x6F\x79","\x73\x70\x79","\x2E\x2F\x69\x6E\x64\x65\x78\x2E\x6A\x73","\x43\x68\x61\x74\x57\x65\x62\x73\x69\x74\x65\x73\x46\x69\x65\x6C\x64\x20\x41\x50\x49\x20\x52\x6F\x75\x74\x65\x72\x3A","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x74\x75\x72\x6E\x20\x61\x6E\x20\x65\x78\x70\x72\x65\x73\x73\x20\x72\x6F\x75\x74\x65\x72\x20\x69\x6E\x73\x74\x61\x6E\x63\x65","\x65\x71\x75\x61\x6C","\x74\x6F","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x2F\x77\x65\x62\x73\x69\x74\x65\x73\x2F\x66\x69\x65\x6C\x64\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x63\x68\x61\x74\x57\x65\x62\x73\x69\x74\x65\x73\x46\x69\x65\x6C\x64\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x69\x6E\x64\x65\x78","\x63\x61\x6C\x6C\x65\x64\x4F\x6E\x63\x65","\x62\x65\x65\x6E","\x68\x61\x76\x65","\x2F","\x77\x69\x74\x68\x41\x72\x67\x73","\x67\x65\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x2F\x77\x65\x62\x73\x69\x74\x65\x73\x2F\x66\x69\x65\x6C\x64\x73\x2F\x3A\x69\x64","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x63\x68\x61\x74\x57\x65\x62\x73\x69\x74\x65\x73\x46\x69\x65\x6C\x64\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x73\x68\x6F\x77","\x2F\x3A\x69\x64","\x50\x4F\x53\x54\x20\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x2F\x77\x65\x62\x73\x69\x74\x65\x73\x2F\x66\x69\x65\x6C\x64\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x63\x68\x61\x74\x57\x65\x62\x73\x69\x74\x65\x73\x46\x69\x65\x6C\x64\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x50\x55\x54\x20\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x2F\x77\x65\x62\x73\x69\x74\x65\x73\x2F\x66\x69\x65\x6C\x64\x73\x2F\x3A\x69\x64","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x63\x68\x61\x74\x57\x65\x62\x73\x69\x74\x65\x73\x46\x69\x65\x6C\x64\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x50\x41\x54\x43\x48\x20\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x2F\x77\x65\x62\x73\x69\x74\x65\x73\x2F\x66\x69\x65\x6C\x64\x73\x2F\x3A\x69\x64","\x70\x61\x74\x63\x68","\x44\x45\x4C\x45\x54\x45\x20\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x2F\x77\x65\x62\x73\x69\x74\x65\x73\x2F\x66\x69\x65\x6C\x64\x73\x2F\x3A\x69\x64","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x63\x68\x61\x74\x57\x65\x62\x73\x69\x74\x65\x73\x46\x69\x65\x6C\x64\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65"];_0x38b6[0];var proxyquire=require(_0x38b6[2])[_0x38b6[1]]();var chatWebsitesFieldCtrlStub={index:_0x38b6[3],show:_0x38b6[4],create:_0x38b6[5],update:_0x38b6[6],destroy:_0x38b6[7]};var routerStub={get:sinon[_0x38b6[8]](),put:sinon[_0x38b6[8]](),patch:sinon[_0x38b6[8]](),post:sinon[_0x38b6[8]](),delete:sinon[_0x38b6[8]]()};var chatWebsitesFieldIndex=proxyquire(_0x38b6[9],{"\x65\x78\x70\x72\x65\x73\x73":{Router:function(){return routerStub}},"\x2E\x2F\x63\x68\x61\x74\x5F\x77\x65\x62\x73\x69\x74\x65\x73\x5F\x66\x69\x65\x6C\x64\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72":chatWebsitesFieldCtrlStub});describe(_0x38b6[10],function(){it(_0x38b6[11],function(){expect(chatWebsitesFieldIndex)[_0x38b6[13]][_0x38b6[12]](routerStub)});describe(_0x38b6[14],function(){it(_0x38b6[15],function(){expect(routerStub[_0x38b6[21]][_0x38b6[20]](_0x38b6[19],_0x38b6[3]))[_0x38b6[13]][_0x38b6[18]][_0x38b6[17]][_0x38b6[16]]})});describe(_0x38b6[22],function(){it(_0x38b6[23],function(){expect(routerStub[_0x38b6[21]][_0x38b6[20]](_0x38b6[24],_0x38b6[4]))[_0x38b6[13]][_0x38b6[18]][_0x38b6[17]][_0x38b6[16]]})});describe(_0x38b6[25],function(){it(_0x38b6[26],function(){expect(routerStub[_0x38b6[27]][_0x38b6[20]](_0x38b6[19],_0x38b6[5]))[_0x38b6[13]][_0x38b6[18]][_0x38b6[17]][_0x38b6[16]]})});describe(_0x38b6[28],function(){it(_0x38b6[29],function(){expect(routerStub[_0x38b6[30]][_0x38b6[20]](_0x38b6[24],_0x38b6[6]))[_0x38b6[13]][_0x38b6[18]][_0x38b6[17]][_0x38b6[16]]})});describe(_0x38b6[31],function(){it(_0x38b6[29],function(){expect(routerStub[_0x38b6[32]][_0x38b6[20]](_0x38b6[24],_0x38b6[6]))[_0x38b6[13]][_0x38b6[18]][_0x38b6[17]][_0x38b6[16]]})});describe(_0x38b6[33],function(){it(_0x38b6[34],function(){expect(routerStub[_0x38b6[35]][_0x38b6[20]](_0x38b6[24],_0x38b6[7]))[_0x38b6[13]][_0x38b6[18]][_0x38b6[17]][_0x38b6[16]]})})})
\ No newline at end of file
+'use strict';
+
+var proxyquire = require('proxyquire').noPreserveCache();
+
+var chatWebsitesFieldCtrlStub = {
+  index: 'chatWebsitesFieldCtrl.index',
+  show: 'chatWebsitesFieldCtrl.show',
+  create: 'chatWebsitesFieldCtrl.create',
+  update: 'chatWebsitesFieldCtrl.update',
+  destroy: 'chatWebsitesFieldCtrl.destroy'
+};
+
+var routerStub = {
+  get: sinon.spy(),
+  put: sinon.spy(),
+  patch: sinon.spy(),
+  post: sinon.spy(),
+  delete: sinon.spy()
+};
+
+// require the index with our stubbed out modules
+var chatWebsitesFieldIndex = proxyquire('./index.js', {
+  'express': {
+    Router: function() {
+      return routerStub;
+    }
+  },
+  './chat_websites_field.controller': chatWebsitesFieldCtrlStub
+});
+
+describe('ChatWebsitesField API Router:', function() {
+
+  it('should return an express router instance', function() {
+    expect(chatWebsitesFieldIndex).to.equal(routerStub);
+  });
+
+  describe('GET /api/chat/websites/fields', function() {
+
+    it('should route to chatWebsitesField.controller.index', function() {
+      expect(routerStub.get
+        .withArgs('/', 'chatWebsitesFieldCtrl.index')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('GET /api/chat/websites/fields/:id', function() {
+
+    it('should route to chatWebsitesField.controller.show', function() {
+      expect(routerStub.get
+        .withArgs('/:id', 'chatWebsitesFieldCtrl.show')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('POST /api/chat/websites/fields', function() {
+
+    it('should route to chatWebsitesField.controller.create', function() {
+      expect(routerStub.post
+        .withArgs('/', 'chatWebsitesFieldCtrl.create')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('PUT /api/chat/websites/fields/:id', function() {
+
+    it('should route to chatWebsitesField.controller.update', function() {
+      expect(routerStub.put
+        .withArgs('/:id', 'chatWebsitesFieldCtrl.update')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('PATCH /api/chat/websites/fields/:id', function() {
+
+    it('should route to chatWebsitesField.controller.update', function() {
+      expect(routerStub.patch
+        .withArgs('/:id', 'chatWebsitesFieldCtrl.update')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('DELETE /api/chat/websites/fields/:id', function() {
+
+    it('should route to chatWebsitesField.controller.destroy', function() {
+      expect(routerStub.delete
+        .withArgs('/:id', 'chatWebsitesFieldCtrl.destroy')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+});
index 44c0164..3229f81 100644 (file)
@@ -1 +1,156 @@
-var _0x6733=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x43\x6F\x6D\x70\x61\x6E\x79","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x75\x74\x69\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x63\x6F\x6D\x70\x61\x6E\x79\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E","\x62\x6F\x64\x79","\x6C\x6F\x67","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x6E\x61\x6D\x65","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x75\x70\x64\x61\x74\x65","\x6C\x65\x6E\x67\x74\x68","\x4D\x45\x53\x53\x41\x47\x45\x5F\x45\x58\x49\x53\x54\x5F\x43\x4F\x4D\x50\x41\x4E\x59","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x66\x69\x6E\x64","\x64\x65\x73\x74\x72\x6F\x79","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79"];_0x6733[0];var _=require(_0x6733[1]);var Company=require(_0x6733[3])[_0x6733[2]];var util=require(_0x6733[4]);var Util=require(_0x6733[5]);exports[_0x6733[6]]=function(_0x3485x5,_0x3485x6,_0x3485x7){return Company[_0x6733[13]](Util[_0x6733[12]](_0x3485x5[_0x6733[11]]))[_0x6733[10]](function(_0x3485x9){_0x3485x6[_0x6733[9]](200)[_0x6733[8]](_0x3485x9)})[_0x6733[7]](function(_0x3485x8){return handleError(_0x3485x6,_0x3485x8)})};exports[_0x6733[14]]=function(_0x3485x5,_0x3485x6){console[_0x6733[16]](_0x3485x5[_0x6733[15]]);Company[_0x6733[19]]({where:{name:_0x3485x5[_0x6733[15]][_0x6733[18]]}})[_0x6733[10]](function(_0x3485xa){if(!_0x3485xa){return _0x3485x6[_0x6733[17]](404)};return _0x3485x6[_0x6733[8]](_0x3485xa)})[_0x6733[7]](function(_0x3485x8){return handleError(_0x3485x6,_0x3485x8)})};exports[_0x6733[20]]=function(_0x3485x5,_0x3485x6){Company[_0x6733[23]](_0x3485x5[_0x6733[22]][_0x6733[21]])[_0x6733[10]](function(_0x3485xb){if(!_0x3485xb){return _0x3485x6[_0x6733[17]](404)};return _0x3485x6[_0x6733[8]](_0x3485xb)})[_0x6733[7]](function(_0x3485x8){return handleError(_0x3485x6,_0x3485x8)})};exports[_0x6733[24]]=function(_0x3485x5,_0x3485x6){Company[_0x6733[24]](_0x3485x5[_0x6733[15]])[_0x6733[10]](function(_0x3485xb){return _0x3485x6[_0x6733[9]](201)[_0x6733[8]](_0x3485xb)})[_0x6733[7]](function(_0x3485x8){return handleError(_0x3485x6,_0x3485x8)})};exports[_0x6733[25]]=function(_0x3485x5,_0x3485x6){Company[_0x6733[19]]({where:{name:_0x3485x5[_0x6733[15]][_0x6733[18]],id:{$ne:_0x3485x5[_0x6733[15]][_0x6733[21]]}}})[_0x6733[10]](function(_0x3485xa){if(!_0x3485xa){return _0x3485x6[_0x6733[17]](404)};if(_0x3485xa[_0x6733[26]]>0){return _0x3485x6[_0x6733[9]](500)[_0x6733[8]]({message:_0x6733[27]})};if(_0x3485x5[_0x6733[15]][_0x6733[21]]){delete _0x3485x5[_0x6733[15]][_0x6733[21]]};Company[_0x6733[30]]({where:{id:_0x3485x5[_0x6733[22]][_0x6733[21]]}})[_0x6733[10]](function(_0x3485xb){if(!_0x3485xb){return _0x3485x6[_0x6733[17]](404)};var _0x3485xc=_[_0x6733[28]](_0x3485xb,_0x3485x5[_0x6733[15]]);_0x3485xc[_0x6733[29]]()[_0x6733[10]](function(){return _0x3485x6[_0x6733[9]](200)[_0x6733[8]](_0x3485xb)})[_0x6733[7]](function(_0x3485x8){return handleError(_0x3485x6,_0x3485x8)})})[_0x6733[7]](function(_0x3485x8){return handleError(_0x3485x6,_0x3485x8)})})[_0x6733[7]](function(_0x3485x8){return handleError(_0x3485x6,_0x3485x8)})};exports[_0x6733[31]]=function(_0x3485x5,_0x3485x6){Company[_0x6733[23]](_0x3485x5[_0x6733[22]][_0x6733[21]])[_0x6733[10]](function(_0x3485xb){if(!_0x3485xb){return _0x3485x6[_0x6733[17]](404)};_0x3485xb[_0x6733[31]]()[_0x6733[10]](function(){return _0x3485x6[_0x6733[17]](204)})[_0x6733[7]](function(_0x3485x8){return handleError(_0x3485x6,_0x3485x8)})})[_0x6733[7]](function(_0x3485x8){return handleError(_0x3485x6,_0x3485x8)})};exports[_0x6733[32]]=function(_0x3485x5,_0x3485x6){Company[_0x6733[31]]({where:{id:_0x3485x5[_0x6733[11]][_0x6733[21]]},individualHooks:true})[_0x6733[10]](function(){return _0x3485x6[_0x6733[17]](204)})[_0x6733[7]](function(_0x3485x8){return handleError(_0x3485x6,_0x3485x8)})};function handleError(_0x3485x6,_0x3485x8){return _0x3485x6[_0x6733[9]](500)[_0x6733[8]](_0x3485x8)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var Company = require('../../models').Company;
+var util = require('util');
+var Util = require('../../config/util');
+
+// Get list of companies
+exports.index = function(req, res, next) {
+  return Company
+    .findAndCountAll(Util.getQuery(req.query))
+    .then(function(result) {
+      res.status(200).send(result);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+exports.companyValidation = function(req, res) {
+  console.log(req.body);
+  Company
+    .findAll({
+      where: {
+        name: req.body.name
+      }
+    })
+    .then(function(companies) {
+      if (!companies) {
+        return res.sendStatus(404);
+      }
+      return res.send(companies);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single company
+exports.show = function(req, res) {
+  Company
+    .findById(req.params.id)
+    .then(function(company) {
+      if (!company) {
+        return res.sendStatus(404);
+      }
+      return res.send(company);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new company in the DB.
+exports.create = function(req, res) {
+  Company
+    .create(req.body)
+    .then(function(company) {
+      return res.status(201).send(company);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Updates an existing company in the DB.
+exports.update = function(req, res) {
+  Company
+    .findAll({
+      where: {
+        name: req.body.name,
+        id: {
+          $ne: req.body.id
+        }
+      }
+    })
+    .then(function(companies) {
+      if (!companies) {
+        return res.sendStatus(404);
+      }
+      if (companies.length > 0) {
+        return res.status(500).send({
+          message: 'MESSAGE_EXIST_COMPANY'
+        })
+      }
+      if (req.body.id) {
+        delete req.body.id;
+      }
+      Company
+        .find({
+          where: {
+            id: req.params.id
+          }
+        })
+        .then(function(company) {
+          if (!company) {
+            return res.sendStatus(404);
+          }
+          var updated = _.merge(company, req.body);
+          updated.save()
+            .then(function() {
+              return res.status(200).send(company);
+            })
+            .catch(function(err) {
+              return handleError(res, err);
+            });
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a company from the DB.
+exports.destroy = function(req, res) {
+  Company
+    .findById(req.params.id)
+    .then(function(company) {
+      if (!company) {
+        return res.sendStatus(404);
+      }
+      company.destroy()
+        .then(function() {
+          return res.sendStatus(204);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+exports.bulkDestroy = function(req, res) {
+  Company
+    .destroy({
+      where: {
+        id: req.query.id
+      },
+      individualHooks: true
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index 7c85792..850be4a 100644 (file)
@@ -1 +1,24 @@
-var _0x965d=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x43\x6F\x6D\x70\x61\x6E\x79","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x63\x6F\x6D\x70\x61\x6E\x79\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x63\x6F\x6D\x70\x61\x6E\x79\x3A\x72\x65\x6D\x6F\x76\x65"];_0x965d[0];var Company=require(_0x965d[2])[_0x965d[1]];exports[_0x965d[3]]=function(_0x3b1cx2){Company[_0x965d[4]](function(_0x3b1cx3){onSave(_0x3b1cx2,_0x3b1cx3)});Company[_0x965d[5]](function(_0x3b1cx3){onRemove(_0x3b1cx2,_0x3b1cx3)})};function onSave(_0x3b1cx2,_0x3b1cx3,_0x3b1cx5){_0x3b1cx2[_0x965d[7]](_0x965d[6],_0x3b1cx3)}function onRemove(_0x3b1cx2,_0x3b1cx3,_0x3b1cx5){_0x3b1cx2[_0x965d[7]](_0x965d[8],_0x3b1cx3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var Company = require('../../models').Company;
+
+exports.register = function(socket) {
+  Company.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  Company.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('company:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('company:remove', doc);
+}
index a5f77cc..37c8889 100644 (file)
@@ -1 +1,20 @@
-var _0x6901=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x73\x68\x6F\x75\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x70\x70","\x73\x75\x70\x65\x72\x74\x65\x73\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x63\x6F\x6E\x74\x61\x63\x74\x6D\x61\x6E\x61\x67\x65\x72\x2F\x63\x6F\x6D\x70\x61\x6E\x69\x65\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x70\x6F\x6E\x64\x20\x77\x69\x74\x68\x20\x4A\x53\x4F\x4E\x20\x61\x72\x72\x61\x79","\x69\x6E\x73\x74\x61\x6E\x63\x65\x6F\x66","\x62\x65","\x62\x6F\x64\x79","\x65\x6E\x64","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x65\x78\x70\x65\x63\x74","\x2F\x61\x70\x69\x2F\x63\x6F\x6E\x74\x61\x63\x74\x6D\x61\x6E\x61\x67\x65\x72\x2F\x63\x6F\x6D\x70\x61\x6E\x69\x65\x73","\x67\x65\x74"];_0x6901[0];var should=require(_0x6901[1]);var app=require(_0x6901[2]);var request=require(_0x6901[3]);describe(_0x6901[4],function(){it(_0x6901[5],function(_0x2ef7x4){request(app)[_0x6901[13]](_0x6901[12])[_0x6901[11]](200)[_0x6901[11]](_0x6901[10],/json/)[_0x6901[9]](function(_0x2ef7x5,_0x2ef7x6){if(_0x2ef7x5){return _0x2ef7x4(_0x2ef7x5)};_0x2ef7x6[_0x6901[8]][_0x6901[1]][_0x6901[7]][_0x6901[6]](Array);_0x2ef7x4()})})})
\ No newline at end of file
+'use strict';
+
+var should = require('should');
+var app = require('../../app');
+var request = require('supertest');
+
+describe('GET /api/contactmanager/companies', function() {
+
+  it('should respond with JSON array', function(done) {
+    request(app)
+      .get('/api/contactmanager/companies')
+      .expect(200)
+      .expect('Content-Type', /json/)
+      .end(function(err, res) {
+        if (err) return done(err);
+        res.body.should.be.instanceof(Array);
+        done();
+      });
+  });
+});
index 80f79a5..734f562 100644 (file)
@@ -1 +1,18 @@
-var _0x22d4=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x63\x6F\x6D\x70\x61\x6E\x79\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x2F\x76\x61\x6C\x69\x64\x61\x74\x65","\x63\x6F\x6D\x70\x61\x6E\x79\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0x22d4[0];var express=require(_0x22d4[1]);var controller=require(_0x22d4[2]);var auth=require(_0x22d4[3]);var router=express.Router();router[_0x22d4[7]](_0x22d4[4],auth[_0x22d4[5]](),controller[_0x22d4[6]]);router[_0x22d4[7]](_0x22d4[8],auth[_0x22d4[5]](),controller[_0x22d4[9]]);router[_0x22d4[11]](_0x22d4[4],auth[_0x22d4[5]](),controller[_0x22d4[10]]);router[_0x22d4[11]](_0x22d4[12],auth[_0x22d4[5]](),controller[_0x22d4[13]]);router[_0x22d4[15]](_0x22d4[8],auth[_0x22d4[5]](),controller[_0x22d4[14]]);router[_0x22d4[16]](_0x22d4[8],auth[_0x22d4[5]](),controller[_0x22d4[14]]);router[_0x22d4[18]](_0x22d4[4],auth[_0x22d4[5]](),controller[_0x22d4[17]]);router[_0x22d4[18]](_0x22d4[8],auth[_0x22d4[5]](),controller[_0x22d4[19]]);module[_0x22d4[20]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./company.controller');
+var auth = require('../../auth/auth.service');
+
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), controller.index);
+router.get('/:id', auth.isAuthenticated(), controller.show);
+router.post('/', auth.isAuthenticated(), controller.create);
+router.post('/validate', auth.isAuthenticated(), controller.companyValidation);
+router.put('/:id', auth.isAuthenticated(), controller.update);
+router.patch('/:id', auth.isAuthenticated(), controller.update);
+router.delete('/', auth.isAuthenticated(), controller.bulkDestroy);
+router.delete('/:id', auth.isAuthenticated(), controller.destroy);
+
+module.exports = router;
index e0fc3c3..9457eb1 100644 (file)
@@ -1 +1,429 @@
-var _0x585f=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x43\x6F\x6E\x74\x61\x63\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x43\x6F\x6E\x74\x61\x63\x74\x50\x68\x6F\x6E\x65","\x43\x6F\x6E\x74\x61\x63\x74\x45\x6D\x61\x69\x6C","\x43\x75\x73\x74\x6F\x6D\x46\x69\x65\x6C\x64","\x52\x65\x70\x6F\x72\x74\x43\x61\x6C\x6C","\x52\x65\x70\x6F\x72\x74\x49\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x53\x65\x72\x76\x69\x63\x65","\x52\x65\x70\x6F\x72\x74\x43\x61\x6C\x6C\x48\x69\x73\x74\x6F\x72\x79","\x68\x69\x73\x74\x6F\x72\x79","\x52\x65\x70\x6F\x72\x74\x4D\x61\x69\x6C\x53\x65\x73\x73\x69\x6F\x6E","\x52\x65\x70\x6F\x72\x74\x4D\x61\x69\x6C\x53\x65\x73\x73\x69\x6F\x6E\x48\x69\x73\x74\x6F\x72\x79","\x54\x61\x67","\x73\x74\x72\x65\x61\x6D","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x75\x74\x69\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x65\x72\x76\x69\x63\x65","\x73\x63\x6F\x70\x65","\x73\x68\x6F\x77","\x6C\x6F\x67","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x50\x68\x6F\x6E\x65\x73","\x49\x6E\x62\x6F\x75\x6E\x64\x73","\x4F\x75\x74\x62\x6F\x75\x6E\x64\x73","\x48\x69\x73\x74\x6F\x72\x79\x49\x6E\x62\x6F\x75\x6E\x64\x73","\x48\x69\x73\x74\x6F\x72\x79\x4F\x75\x74\x62\x6F\x75\x6E\x64\x73","\x45\x6D\x61\x69\x6C\x73","\x49\x6E\x62\x6F\x75\x6E\x64\x4D\x65\x73\x73\x61\x67\x65\x73","\x4F\x75\x74\x62\x6F\x75\x6E\x64\x4D\x65\x73\x73\x61\x67\x65\x73","\x48\x69\x73\x74\x6F\x72\x79\x49\x6E\x62\x6F\x75\x6E\x64\x4D\x65\x73\x73\x61\x67\x65\x73","\x48\x69\x73\x74\x6F\x72\x79\x4F\x75\x74\x62\x6F\x75\x6E\x64\x4D\x65\x73\x73\x61\x67\x65\x73","\x43\x75\x73\x74\x6F\x6D\x46\x69\x65\x6C\x64\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x67\x65\x74\x45\x76\x65\x6E\x74\x43\x6F\x6E\x74\x61\x63\x74\x73","\x63\x61\x6C\x6C\x65\x72\x69\x64\x6E\x75\x6D","\x76\x6F\x69\x63\x65","\x66\x72\x6F\x6D","\x6D\x61\x69\x6C","\x65\x76\x65\x6E\x74\x43\x68\x61\x6E\x6E\x65\x6C","\x75\x73\x65\x72","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x6D\x61\x70","\x66\x69\x6E\x64\x41\x6C\x6C","\x63\x6F\x6E\x74\x61\x63\x74\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E","\x70\x68\x6F\x6E\x65\x73","\x62\x6F\x64\x79","\x65\x6D\x61\x69\x6C\x73","\x63\x72\x65\x61\x74\x65","\x73\x70\x72\x65\x61\x64","\x43\x6F\x6E\x74\x61\x63\x74\x48\x61\x73\x43\x75\x73\x74\x6F\x6D\x46\x69\x65\x6C\x64","\x66\x6F\x72\x45\x61\x63\x68","\x73\x65\x74\x43\x75\x73\x74\x6F\x6D\x46\x69\x65\x6C\x64\x73","\x6B\x65\x79\x73","\x73\x65\x74\x45\x6D\x61\x69\x6C\x73","\x73\x65\x74\x50\x68\x6F\x6E\x65\x73","\x63\x75\x73\x74\x6F\x6D\x46\x69\x65\x6C\x64\x73","\x63\x6C\x6F\x6E\x65","\x61\x6C\x6C","\x65\x6D\x61\x69\x6C","\x75\x6E\x69\x71","\x66\x69\x6E\x64\x4F\x72\x43\x72\x65\x61\x74\x65","\x70\x75\x73\x68","\x6E\x61\x6D\x65","\x74\x61\x67\x73","\x2C","\x73\x70\x6C\x69\x74","\x69\x6E\x63\x6C\x75\x64\x65\x73","\x6C\x65\x6E\x67\x74\x68","\x62\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x55\x73\x65\x72\x49\x64","\x70\x68\x6F\x6E\x65","\x75\x70\x64\x61\x74\x65","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x73\x74\x72\x6F\x79","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79"];_0x585f[0];var _=require(_0x585f[1]);var Contact=require(_0x585f[3])[_0x585f[2]];var ContactPhone=require(_0x585f[3])[_0x585f[4]];var ContactEmail=require(_0x585f[3])[_0x585f[5]];var CustomField=require(_0x585f[3])[_0x585f[6]];var ReportCall=require(_0x585f[3])[_0x585f[7]];var ReportIntegration=require(_0x585f[3])[_0x585f[8]];var Service=require(_0x585f[3])[_0x585f[9]];var ReportCallHistory=require(_0x585f[3])[_0x585f[11]][_0x585f[10]];var ReportMailSession=require(_0x585f[3])[_0x585f[12]];var ReportMailSessionHistory=require(_0x585f[3])[_0x585f[11]][_0x585f[13]];var Tag=require(_0x585f[3])[_0x585f[14]];var stream=require(_0x585f[15]);var sequelize=require(_0x585f[3])[_0x585f[16]];var util=require(_0x585f[17]);var Util=require(_0x585f[18]);exports[_0x585f[19]]=function(_0x7186x11,_0x7186x12,_0x7186x13){return Contact[_0x585f[28]](_0x585f[27])[_0x585f[26]](Util[_0x585f[25]](_0x7186x11[_0x585f[24]]))[_0x585f[23]](function(_0x7186x15){_0x7186x12[_0x585f[22]](200)[_0x585f[21]](_0x7186x15)})[_0x585f[20]](function(_0x7186x14){return handleError(_0x7186x12,_0x7186x14)})};exports[_0x585f[29]]=function(_0x7186x11,_0x7186x12){Contact[_0x585f[45]](_0x7186x11[_0x585f[33]][_0x585f[32]],{include:[{model:ContactPhone,as:_0x585f[34],include:[{model:ReportCall,as:_0x585f[35],include:[{all:true}]},{model:ReportCall,as:_0x585f[36],include:[{all:true}]},{model:ReportCallHistory,as:_0x585f[37],include:[{all:true}]},{model:ReportCallHistory,as:_0x585f[38],include:[{all:true}]}]},{model:ContactEmail,as:_0x585f[39],include:[{model:ReportMailSession,as:_0x585f[40],include:[{all:true}]},{model:ReportMailSession,as:_0x585f[41],include:[{all:true}]},{model:ReportMailSessionHistory,as:_0x585f[42],include:[{all:true}]},{model:ReportMailSessionHistory,as:_0x585f[43],include:[{all:true}]}]},{model:CustomField,as:_0x585f[44]},{model:Service}]})[_0x585f[23]](function(_0x7186x16){if(!_0x7186x16){return _0x7186x12[_0x585f[31]](404)};return _0x7186x12[_0x585f[22]](200)[_0x585f[21]](_0x7186x16)})[_0x585f[20]](function(_0x7186x14){console[_0x585f[30]](_0x7186x14);return handleError(_0x7186x12,_0x7186x14)})};exports[_0x585f[46]]=function(_0x7186x11,_0x7186x12){ReportIntegration[_0x585f[45]](_0x7186x11[_0x585f[33]][_0x585f[32]])[_0x585f[23]](function(_0x7186x18){var _0x7186x19={};switch(_0x7186x18[_0x585f[51]]){case _0x585f[48]:_0x7186x19={model:ContactPhone,as:_0x585f[34],where:{phone:_0x7186x18[_0x585f[47]]}};break;case _0x585f[50]:_0x7186x19={model:ContactEmail,as:_0x585f[39],where:{email:_0x7186x18[_0x585f[49]]}};break;default:};return Contact[_0x585f[55]]({include:[_0x7186x19,{model:Service,where:{id:_[_0x585f[54]](_[_0x585f[54]](_0x7186x11[_0x585f[52]].Services,_0x585f[53]),_0x585f[32])}}]})})[_0x585f[23]](function(_0x7186x17){return _0x7186x12[_0x585f[22]](200)[_0x585f[21]](_0x7186x17)})[_0x585f[20]](function(_0x7186x14){console[_0x585f[30]](_0x7186x14);return handleError(_0x7186x12,_0x7186x14)})};exports[_0x585f[56]]=function(_0x7186x11,_0x7186x12){Contact[_0x585f[55]]({where:{$or:{"\x24\x50\x68\x6F\x6E\x65\x73\x2E\x70\x68\x6F\x6E\x65\x24":_0x7186x11[_0x585f[58]][_0x585f[57]],"\x24\x45\x6D\x61\x69\x6C\x73\x2E\x65\x6D\x61\x69\x6C\x24":_0x7186x11[_0x585f[58]][_0x585f[59]]}},include:[{all:true}]})[_0x585f[23]](function(_0x7186x17){console[_0x585f[30]](_0x7186x17);return _0x7186x12[_0x585f[22]](200)[_0x585f[21]](_0x7186x17)})[_0x585f[20]](function(_0x7186x14){console[_0x585f[30]](_0x7186x14);return handleError(_0x7186x12,_0x7186x14)})};exports[_0x585f[60]]=function(_0x7186x11,_0x7186x12,_0x7186x13){var _0x7186x1a=[],_0x7186x1b=[],_0x7186x1c={};Tag[_0x585f[55]]()[_0x585f[23]](function(_0x7186x23){var _0x7186x24=[];var _0x7186x25=_[_0x585f[54]](_[_0x585f[54]](_0x7186x23,_0x585f[53]),_0x585f[75]);if(_0x7186x11[_0x585f[58]][_0x585f[76]]){var _0x7186x26=_0x7186x11[_0x585f[58]][_0x585f[76]][_0x585f[78]](_0x585f[77]);_0x7186x26[_0x585f[63]](function(_0x7186x1f){if(!_[_0x585f[79]](_0x7186x23,_0x7186x1f)){_0x7186x24[_0x585f[74]]({name:_0x7186x1f})}});if(_0x7186x24[_0x585f[80]]){Tag[_0x585f[81]](_0x7186x24,{individualHooks:true})}};_0x7186x11[_0x585f[58]][_0x585f[82]]=_0x7186x11[_0x585f[52]][_0x585f[32]];var _0x7186x27=_[_0x585f[72]](_[_0x585f[54]](_0x7186x11[_0x585f[58]].Phones,_0x585f[83]));var _0x7186x28=[];_0x7186x27[_0x585f[63]](function(_0x7186x1f){_0x7186x28[_0x585f[74]](ContactPhone[_0x585f[73]]({where:{phone:_0x7186x1f},defaults:{phone:_0x7186x1f}}))});return _0x7186x28})[_0x585f[70]]()[_0x585f[23]](function(_0x7186x12){_0x7186x1a=_[_0x585f[54]](_0x7186x12,function(_0x7186x1f){return _0x7186x1f[0]});var _0x7186x21=[];var _0x7186x22=_[_0x585f[72]](_[_0x585f[54]](_0x7186x11[_0x585f[58]].Emails,_0x585f[71]));_0x7186x22[_0x585f[63]](function(_0x7186x1f){_0x7186x21[_0x585f[74]](ContactEmail[_0x585f[73]]({where:{email:_0x7186x1f},defaults:{email:_0x7186x1f}}))});return _0x7186x21})[_0x585f[70]]()[_0x585f[23]](function(_0x7186x12){_0x7186x1b=_[_0x585f[54]](_0x7186x12,function(_0x7186x1f){return _0x7186x1f[0]});delete _0x7186x11[_0x585f[58]][_0x585f[34]];delete _0x7186x11[_0x585f[58]][_0x585f[39]];_0x7186x1c=_[_0x585f[69]](_0x7186x11[_0x585f[58]][_0x585f[68]]);delete _0x7186x11[_0x585f[58]][_0x585f[68]];return Contact[_0x585f[60]](_0x7186x11[_0x585f[58]])})[_0x585f[23]](function(_0x7186x1d){return [_0x7186x1d,_0x7186x1d[_0x585f[67]](_0x7186x1a)]})[_0x585f[61]](function(_0x7186x1d){return [_0x7186x1d,_0x7186x1d[_0x585f[66]](_0x7186x1b)]})[_0x585f[61]](function(_0x7186x1d){var _0x7186x20=_[_0x585f[65]](_0x7186x1c);return [_0x7186x1d,CustomField[_0x585f[55]]({where:{id:_0x7186x20}})]})[_0x585f[61]](function(_0x7186x1d,_0x7186x1e){_0x7186x1e[_0x585f[63]](function(_0x7186x1f){_0x7186x1f[_0x585f[62]]={value:_0x7186x1c[String(_0x7186x1f[_0x585f[32]])]}});return [_0x7186x1d,_0x7186x1d[_0x585f[64]](_0x7186x1e)]})[_0x585f[61]](function(_0x7186x1d){return _0x7186x12[_0x585f[22]](201)[_0x585f[21]](_0x7186x1d)})[_0x585f[20]](function(_0x7186x14){console[_0x585f[30]](_0x7186x14);return _0x7186x13(_0x7186x14)})};exports[_0x585f[84]]=function(_0x7186x11,_0x7186x12,_0x7186x13){var _0x7186x1a=[],_0x7186x1b=[],_0x7186x1c={};Tag[_0x585f[55]]()[_0x585f[23]](function(_0x7186x23){var _0x7186x24=[];var _0x7186x25=_[_0x585f[54]](_[_0x585f[54]](_0x7186x23,_0x585f[53]),_0x585f[75]);if(_0x7186x11[_0x585f[58]][_0x585f[76]]){var _0x7186x26=_0x7186x11[_0x585f[58]][_0x585f[76]][_0x585f[78]](_0x585f[77]);_0x7186x26[_0x585f[63]](function(_0x7186x1f){if(!_[_0x585f[79]](_0x7186x23,_0x7186x1f)){_0x7186x24[_0x585f[74]]({name:_0x7186x1f})}});if(_0x7186x24[_0x585f[80]]){Tag[_0x585f[81]](_0x7186x24,{individualHooks:true})}};var _0x7186x28=[];var _0x7186x27=_[_0x585f[72]](_[_0x585f[54]](_0x7186x11[_0x585f[58]].Phones,_0x585f[83]));_0x7186x27[_0x585f[63]](function(_0x7186x1f){_0x7186x28[_0x585f[74]](ContactPhone[_0x585f[73]]({where:{phone:_0x7186x1f},defaults:{phone:_0x7186x1f}}))});return _0x7186x28})[_0x585f[70]]()[_0x585f[23]](function(_0x7186x12){_0x7186x1a=_[_0x585f[54]](_0x7186x12,function(_0x7186x1f){return _0x7186x1f[0]});var _0x7186x21=[];var _0x7186x22=_[_0x585f[72]](_[_0x585f[54]](_0x7186x11[_0x585f[58]].Emails,_0x585f[71]));_0x7186x22[_0x585f[63]](function(_0x7186x1f){_0x7186x21[_0x585f[74]](ContactEmail[_0x585f[73]]({where:{email:_0x7186x1f},defaults:{email:_0x7186x1f}}))});return _0x7186x21})[_0x585f[70]]()[_0x585f[23]](function(_0x7186x12){_0x7186x1b=_[_0x585f[54]](_0x7186x12,function(_0x7186x1f){return _0x7186x1f[0]});delete _0x7186x11[_0x585f[58]][_0x585f[34]];delete _0x7186x11[_0x585f[58]][_0x585f[39]];_0x7186x1c=_[_0x585f[69]](_0x7186x11[_0x585f[58]][_0x585f[68]]);delete _0x7186x11[_0x585f[58]][_0x585f[68]];delete _0x7186x11[_0x585f[58]][_0x585f[44]];var _0x7186x29=_0x7186x11[_0x585f[58]][_0x585f[32]];delete _0x7186x11[_0x585f[58]][_0x585f[32]];return Contact[_0x585f[45]](_0x7186x29)})[_0x585f[23]](function(_0x7186x1d){return [_0x7186x1d,_0x7186x1d[_0x585f[67]](_0x7186x1a)]})[_0x585f[61]](function(_0x7186x1d){return [_0x7186x1d,_0x7186x1d[_0x585f[66]](_0x7186x1b)]})[_0x585f[61]](function(_0x7186x1d){var _0x7186x20=_[_0x585f[65]](_0x7186x1c);return [_0x7186x1d,CustomField[_0x585f[55]]({where:{id:_0x7186x20}})]})[_0x585f[61]](function(_0x7186x1d,_0x7186x1e){_0x7186x1e[_0x585f[63]](function(_0x7186x1f){_0x7186x1f[_0x585f[62]]={value:_0x7186x1c[String(_0x7186x1f[_0x585f[32]])]}});return [_0x7186x1d,_0x7186x1d[_0x585f[64]](_0x7186x1e)]})[_0x585f[61]](function(_0x7186x1d){return _0x7186x1d[_0x585f[85]](_0x7186x11[_0x585f[58]])})[_0x585f[23]](function(_0x7186x1d){return _0x7186x12[_0x585f[22]](200)[_0x585f[21]](_0x7186x1d)})[_0x585f[20]](function(_0x7186x14){console[_0x585f[30]](_0x7186x14);return handleError(_0x7186x12,_0x7186x14)})};exports[_0x585f[86]]=function(_0x7186x11,_0x7186x12){Contact[_0x585f[45]](_0x7186x11[_0x585f[33]][_0x585f[32]])[_0x585f[23]](function(_0x7186x16){if(!_0x7186x16){return _0x7186x12[_0x585f[31]](404)};_0x7186x16[_0x585f[86]]()[_0x585f[23]](function(){return _0x7186x12[_0x585f[31]](204)})[_0x585f[20]](function(_0x7186x14){return handleError(_0x7186x12,_0x7186x14)})})[_0x585f[20]](function(_0x7186x14){return handleError(_0x7186x12,_0x7186x14)})};exports[_0x585f[87]]=function(_0x7186x11,_0x7186x12){Contact[_0x585f[86]]({where:{id:_0x7186x11[_0x585f[24]][_0x585f[32]]},individualHooks:true})[_0x585f[23]](function(){return _0x7186x12[_0x585f[31]](204)})[_0x585f[20]](function(_0x7186x14){return handleError(_0x7186x12,_0x7186x14)})};function handleError(_0x7186x12,_0x7186x14){return _0x7186x12[_0x585f[22]](500)[_0x585f[21]](_0x7186x14)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var Contact = require('../../models').Contact;
+var ContactPhone = require('../../models').ContactPhone;
+var ContactEmail = require('../../models').ContactEmail;
+var CustomField = require('../../models').CustomField;
+var ReportCall = require('../../models').ReportCall;
+var ReportIntegration = require('../../models').ReportIntegration;
+var Service = require('../../models').Service;
+var ReportCallHistory = require('../../models').history.ReportCallHistory;
+var ReportMailSession = require('../../models').ReportMailSession;
+var ReportMailSessionHistory = require('../../models').history.ReportMailSessionHistory;
+var Tag = require('../../models').Tag;
+var stream = require('stream');
+var sequelize = require('../../models').sequelize;
+var util = require('util');
+var Util = require('../../config/util');
+
+// Get list of contacts
+exports.index = function(req, res, next) {
+  return Contact
+    .scope('service')
+    .findAndCountAll(Util.getQuery(req.query))
+    .then(function(result) {
+      res.status(200).send(result);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single managed_contact
+exports.show = function(req, res) {
+  Contact
+    .findById(req.params.id, {
+      include: [{
+        model: ContactPhone,
+        as: 'Phones',
+        include: [{
+          model: ReportCall,
+          as: 'Inbounds',
+          include: [{
+            all: true
+          }]
+        }, {
+          model: ReportCall,
+          as: 'Outbounds',
+          include: [{
+            all: true
+          }]
+        }, {
+          model: ReportCallHistory,
+          as: 'HistoryInbounds',
+          include: [{
+            all: true
+          }]
+        }, {
+          model: ReportCallHistory,
+          as: 'HistoryOutbounds',
+          include: [{
+            all: true
+          }]
+        }]
+      }, {
+        model: ContactEmail,
+        as: 'Emails',
+        include: [{
+          model: ReportMailSession,
+          as: 'InboundMessages',
+          include: [{
+            all: true
+          }]
+        }, {
+          model: ReportMailSession,
+          as: 'OutboundMessages',
+          include: [{
+            all: true
+          }]
+        }, {
+          model: ReportMailSessionHistory,
+          as: 'HistoryInboundMessages',
+          include: [{
+            all: true
+          }]
+        }, {
+          model: ReportMailSessionHistory,
+          as: 'HistoryOutboundMessages',
+          include: [{
+            all: true
+          }]
+        }]
+      }, {
+        model: CustomField,
+        as: 'CustomFields'
+      }, {
+        model: Service
+      }]
+    })
+    .then(function(managed_contact) {
+      if (!managed_contact) {
+        return res.sendStatus(404);
+      }
+      return res.status(200).send(managed_contact);
+    })
+    .catch(function(err) {
+      console.log(err);
+      return handleError(res, err);
+    });
+};
+
+exports.getEventContacts = function(req, res) {
+  ReportIntegration
+    .findById(req.params.id)
+    .then(function(event) {
+      var modelInclude = {};
+      switch (event.eventChannel) {
+        case 'voice':
+          modelInclude = {
+            model: ContactPhone,
+            as: 'Phones',
+            where: {
+              phone: event.calleridnum
+            }
+          };
+          break;
+        case 'mail':
+          modelInclude = {
+            model: ContactEmail,
+            as: 'Emails',
+            where: {
+              email: event.from
+            }
+          };
+          break;
+        default:
+      }
+      return Contact.findAll({
+        include: [modelInclude, {
+          model: Service,
+          where: {
+            id: _.map(_.map(req.user.Services, 'dataValues'), 'id')
+          }
+        }]
+      });
+    })
+    .then(function(contacts) {
+      return res.status(200).send(contacts);
+    })
+    .catch(function(err) {
+      console.log(err);
+      return handleError(res, err);
+    });
+
+};
+
+// validate contact uniqueness
+exports.contactValidation = function(req, res) {
+  Contact.findAll({
+      where: {
+        $or: {
+          '$Phones.phone$': req.body.phones,
+          '$Emails.email$': req.body.emails
+        }
+      },
+      include: [{
+        all: true
+      }]
+    })
+    .then(function(contacts) {
+      console.log(contacts);
+      return res.status(200).send(contacts);
+    })
+    .catch(function(err) {
+      console.log(err);
+      return handleError(res, err);
+    });
+};
+
+// Creates a new managed_contact in the DB.
+exports.create = function(req, res, next) {
+  var newPhones = [],
+    newEmails = [],
+    newCustomFields = {};
+  Tag.findAll()
+    .then(function(tags) {
+      var newTags = [];
+      var tagList = _.map(_.map(tags, 'dataValues'), 'name');
+      if (req.body.tags) {
+        var contactTags = req.body.tags.split(',');
+        contactTags.forEach(function(elem) {
+          if (!_.includes(tags, elem)) {
+            newTags.push({
+              name: elem
+            });
+          }
+        });
+        if (newTags.length) {
+          Tag.bulkCreate(newTags, {
+            individualHooks: true
+          });
+        }
+      }
+      req.body.UserId = req.user.id;
+      var phones = _.uniq(_.map(req.body.Phones, 'phone'));
+      var contactPhones = [];
+      phones.forEach(function(elem) {
+        contactPhones.push(ContactPhone.findOrCreate({
+          where: {
+            phone: elem
+          },
+          defaults: {
+            phone: elem
+          }
+        }));
+      });
+      return contactPhones;
+    })
+    .all()
+    .then(function(res) {
+      newPhones = _.map(res, function(elem) {
+        return elem[0];
+      });
+
+      var contactEmails = [];
+      var emails = _.uniq(_.map(req.body.Emails, 'email'));
+      emails.forEach(function(elem) {
+        contactEmails.push(ContactEmail.findOrCreate({
+          where: {
+            email: elem
+          },
+          defaults: {
+            email: elem
+          }
+        }));
+      });
+      return contactEmails;
+    })
+    .all()
+    .then(function(res) {
+      newEmails = _.map(res, function(elem) {
+        return elem[0];
+      });
+      delete req.body.Phones;
+      delete req.body.Emails;
+      newCustomFields = _.clone(req.body.customFields);
+      delete req.body.customFields;
+
+      return Contact.create(req.body);
+    })
+    .then(function(contact) {
+      return [contact, contact.setPhones(newPhones)];
+    })
+    .spread(function(contact) {
+      return [contact, contact.setEmails(newEmails)];
+    })
+    .spread(function(contact) {
+      var customFieldsIds = _.keys(newCustomFields);
+      return [contact, CustomField.findAll({
+        where: {
+          id: customFieldsIds
+        }
+      })];
+    })
+    .spread(function(contact, customFields) {
+      customFields.forEach(function(elem) {
+        elem.ContactHasCustomField = {
+          value: newCustomFields[String(elem.id)]
+        }
+      });
+      return [contact, contact.setCustomFields(customFields)];
+    })
+    .spread(function(contact) {
+      return res.status(201).send(contact);
+    })
+    .catch(function(err) {
+      console.log(err);
+      return next(err);
+    });
+};
+
+// Updates an existing managed_contact in the DB.
+exports.update = function(req, res, next) {
+  var newPhones = [],
+    newEmails = [],
+    newCustomFields = {};
+  Tag.findAll()
+    .then(function(tags) {
+      var newTags = [];
+      var tagList = _.map(_.map(tags, 'dataValues'), 'name');
+      if (req.body.tags) {
+        var contactTags = req.body.tags.split(',');
+        contactTags.forEach(function(elem) {
+          if (!_.includes(tags, elem)) {
+            newTags.push({
+              name: elem
+            });
+          }
+        });
+        if (newTags.length) {
+          Tag.bulkCreate(newTags, {
+            individualHooks: true
+          });
+        }
+      }
+      var contactPhones = [];
+      var phones = _.uniq(_.map(req.body.Phones, 'phone'));
+      phones.forEach(function(elem) {
+        contactPhones.push(ContactPhone.findOrCreate({
+          where: {
+            phone: elem
+          },
+          defaults: {
+            phone: elem
+          }
+        }));
+      });
+      return contactPhones;
+    })
+    .all()
+    .then(function(res) {
+      newPhones = _.map(res, function(elem) {
+        return elem[0];
+      });
+
+      var contactEmails = [];
+      var emails = _.uniq(_.map(req.body.Emails, 'email'));
+      emails.forEach(function(elem) {
+        contactEmails.push(ContactEmail.findOrCreate({
+          where: {
+            email: elem
+          },
+          defaults: {
+            email: elem
+          }
+        }));
+      });
+      return contactEmails;
+    })
+    .all()
+    .then(function(res) {
+      newEmails = _.map(res, function(elem) {
+        return elem[0];
+      });
+      delete req.body.Phones;
+      delete req.body.Emails;
+      newCustomFields = _.clone(req.body.customFields);
+      delete req.body.customFields;
+      delete req.body.CustomFields;
+      var updateId = req.body.id;
+      delete req.body.id;
+
+      return Contact.findById(updateId);
+    })
+    .then(function(contact) {
+      return [contact, contact.setPhones(newPhones)];
+    })
+    .spread(function(contact) {
+      return [contact, contact.setEmails(newEmails)];
+    })
+    .spread(function(contact) {
+      var customFieldsIds = _.keys(newCustomFields);
+      return [contact, CustomField.findAll({
+        where: {
+          id: customFieldsIds
+        }
+      })];
+    })
+    .spread(function(contact, customFields) {
+      customFields.forEach(function(elem) {
+        elem.ContactHasCustomField = {
+          value: newCustomFields[String(elem.id)]
+        }
+      });
+      return [contact, contact.setCustomFields(customFields)];
+    })
+    .spread(function(contact) {
+      return contact.updateAttributes(req.body)
+    })
+    .then(function(contact) {
+      return res.status(200).send(contact);
+    })
+    .catch(function(err) {
+      console.log(err);
+      return handleError(res, err);
+    });
+};
+
+// Deletes a managed_contact from the DB.
+exports.destroy = function(req, res) {
+  Contact
+    .findById(req.params.id)
+    .then(function(managed_contact) {
+      if (!managed_contact) {
+        return res.sendStatus(404);
+      }
+      managed_contact.destroy()
+        .then(function() {
+          return res.sendStatus(204);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a managed_contact from the DB.
+exports.bulkDestroy = function(req, res) {
+  Contact
+    .destroy({
+      where: {
+        id: req.query.id
+      },
+      individualHooks: true
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index 65fc24d..addfca0 100644 (file)
@@ -1 +1,24 @@
-var _0xbe68=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x43\x6F\x6E\x74\x61\x63\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x63\x6F\x6E\x74\x61\x63\x74\x5F\x6D\x61\x6E\x61\x67\x65\x72\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x63\x6F\x6E\x74\x61\x63\x74\x5F\x6D\x61\x6E\x61\x67\x65\x72\x3A\x72\x65\x6D\x6F\x76\x65"];_0xbe68[0];var Contact=require(_0xbe68[2])[_0xbe68[1]];exports[_0xbe68[3]]=function(_0x6134x2){Contact[_0xbe68[4]](function(_0x6134x3){onSave(_0x6134x2,_0x6134x3)});Contact[_0xbe68[5]](function(_0x6134x3){onRemove(_0x6134x2,_0x6134x3)})};function onSave(_0x6134x2,_0x6134x3,_0x6134x5){_0x6134x2[_0xbe68[7]](_0xbe68[6],_0x6134x3)}function onRemove(_0x6134x2,_0x6134x3,_0x6134x5){_0x6134x2[_0xbe68[7]](_0xbe68[8],_0x6134x3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var Contact = require('../../models').Contact;
+
+exports.register = function(socket) {
+  Contact.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  Contact.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('contact_manager:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('contact_manager:remove', doc);
+}
index 0fa46e5..f212dfb 100644 (file)
@@ -1 +1,20 @@
-var _0xf917=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x73\x68\x6F\x75\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x70\x70","\x73\x75\x70\x65\x72\x74\x65\x73\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x63\x6F\x6E\x74\x61\x63\x74\x6D\x61\x6E\x61\x67\x65\x72\x2F\x63\x6F\x6E\x74\x61\x63\x74\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x70\x6F\x6E\x64\x20\x77\x69\x74\x68\x20\x4A\x53\x4F\x4E\x20\x61\x72\x72\x61\x79","\x69\x6E\x73\x74\x61\x6E\x63\x65\x6F\x66","\x62\x65","\x62\x6F\x64\x79","\x65\x6E\x64","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x65\x78\x70\x65\x63\x74","\x2F\x61\x70\x69\x2F\x63\x6F\x6E\x74\x61\x63\x74\x6D\x61\x6E\x61\x67\x65\x72","\x67\x65\x74"];_0xf917[0];var should=require(_0xf917[1]);var app=require(_0xf917[2]);var request=require(_0xf917[3]);describe(_0xf917[4],function(){it(_0xf917[5],function(_0x1386x4){request(app)[_0xf917[13]](_0xf917[12])[_0xf917[11]](200)[_0xf917[11]](_0xf917[10],/json/)[_0xf917[9]](function(_0x1386x5,_0x1386x6){if(_0x1386x5){return _0x1386x4(_0x1386x5)};_0x1386x6[_0xf917[8]][_0xf917[1]][_0xf917[7]][_0xf917[6]](Array);_0x1386x4()})})})
\ No newline at end of file
+'use strict';
+
+var should = require('should');
+var app = require('../../app');
+var request = require('supertest');
+
+describe('GET /api/contactmanager/contacts', function() {
+
+  it('should respond with JSON array', function(done) {
+    request(app)
+      .get('/api/contactmanager')
+      .expect(200)
+      .expect('Content-Type', /json/)
+      .end(function(err, res) {
+        if (err) return done(err);
+        res.body.should.be.instanceof(Array);
+        done();
+      });
+  });
+});
index 3e0bb55..18623b0 100644 (file)
@@ -1 +1,19 @@
-var _0x9528=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x63\x6F\x6E\x74\x61\x63\x74\x5F\x6D\x61\x6E\x61\x67\x65\x72\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64\x2F\x63\x68\x65\x63\x6B\x65\x76\x65\x6E\x74","\x67\x65\x74\x45\x76\x65\x6E\x74\x43\x6F\x6E\x74\x61\x63\x74\x73","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x2F\x76\x61\x6C\x69\x64\x61\x74\x65","\x63\x6F\x6E\x74\x61\x63\x74\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0x9528[0];var express=require(_0x9528[1]);var controller=require(_0x9528[2]);var auth=require(_0x9528[3]);var router=express.Router();router[_0x9528[7]](_0x9528[4],auth[_0x9528[5]](),controller[_0x9528[6]]);router[_0x9528[7]](_0x9528[8],auth[_0x9528[5]](),controller[_0x9528[9]]);router[_0x9528[7]](_0x9528[10],auth[_0x9528[5]](),controller[_0x9528[11]]);router[_0x9528[13]](_0x9528[4],auth[_0x9528[5]](),controller[_0x9528[12]]);router[_0x9528[13]](_0x9528[14],auth[_0x9528[5]](),controller[_0x9528[15]]);router[_0x9528[17]](_0x9528[10],auth[_0x9528[5]](),controller[_0x9528[16]]);router[_0x9528[18]](_0x9528[10],auth[_0x9528[5]](),controller[_0x9528[16]]);router[_0x9528[20]](_0x9528[4],auth[_0x9528[5]](),controller[_0x9528[19]]);router[_0x9528[20]](_0x9528[10],auth[_0x9528[5]](),controller[_0x9528[21]]);module[_0x9528[22]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./contact_manager.controller');
+var auth = require('../../auth/auth.service');
+
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), controller.index);
+router.get('/:id/checkevent', auth.isAuthenticated(), controller.getEventContacts);
+router.get('/:id', auth.isAuthenticated(), controller.show);
+router.post('/', auth.isAuthenticated(), controller.create);
+router.post('/validate', auth.isAuthenticated(), controller.contactValidation);
+router.put('/:id', auth.isAuthenticated(), controller.update);
+router.patch('/:id', auth.isAuthenticated(), controller.update);
+router.delete('/', auth.isAuthenticated(), controller.bulkDestroy);
+router.delete('/:id', auth.isAuthenticated(), controller.destroy);
+
+module.exports = router;
index 64b9643..12e3404 100644 (file)
@@ -1 +1,326 @@
-var _0x8c97=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74","\x52\x65\x70\x6F\x72\x74\x46\x69\x65\x6C\x64","\x4D\x65\x74\x72\x69\x63","\x45\x78\x74\x72\x61\x63\x74\x65\x64\x52\x65\x70\x6F\x72\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x75\x74\x69\x6C\x73\x2F\x72\x65\x70\x6F\x72\x74\x5F\x65\x78\x74\x72\x61\x63\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x75\x74\x69\x6C\x73\x2F\x72\x65\x70\x6F\x72\x74\x5F\x62\x75\x69\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x70\x61\x72\x61\x6D\x73","\x6D\x65\x72\x67\x65","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x70\x72\x65\x76\x69\x65\x77","\x6C\x6F\x67","\x6C\x65\x6E\x67\x74\x68","\x6C\x69\x6D\x69\x74","\x76\x61\x6C\x75\x65","\x74\x61\x6B\x65","\x6F\x66\x66\x73\x65\x74","\x73\x6C\x69\x63\x65","\x66\x6F\x75\x6E\x64\x20\x72\x65\x70\x6F\x72\x74","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x62\x75\x69\x6C\x64\x52\x65\x70\x6F\x72\x74","\x53\x45\x4C\x45\x43\x54","\x51\x75\x65\x72\x79\x54\x79\x70\x65\x73","\x69\x64","\x66\x69\x6E\x64\x42\x79\x49\x64","\x66\x69\x65\x6C\x64\x73","\x73\x63\x6F\x70\x65","\x65\x78\x74\x72\x61\x63\x74\x50\x64\x66","\x50\x44\x46","\x65\x78\x74\x72\x61\x63\x74\x43\x73\x76","\x43\x53\x56","\x65\x78\x74\x72\x61\x63\x74","\x73\x70\x72\x65\x61\x64","\x6E\x61\x6D\x65","\x73\x74\x61\x72\x74\x44\x61\x74\x65","\x65\x6E\x64\x44\x61\x74\x65","\x63\x72\x65\x61\x74\x65","\x73\x68\x6F\x77","\x63\x6F\x70\x79","\x63\x72\x65\x61\x74\x65\x64\x41\x74","\x75\x70\x64\x61\x74\x65\x64\x41\x74","\x70\x61\x72\x65\x6E\x74","\x62\x6F\x64\x79","\x6D\x61\x70","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E","\x46\x69\x65\x6C\x64\x73","\x75\x70\x64\x61\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x73\x61\x76\x65","\x69\x73\x41\x72\x72\x61\x79","\x74\x61\x62\x6C\x65","\x61\x6C\x6C","\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64","\x4D\x65\x74\x72\x69\x63\x49\x64","\x66\x69\x6E\x64","\x66\x69\x65\x6C\x64","\x6D\x65\x74\x72\x69\x63","\x70\x75\x73\x68","\x54\x68\x65\x20\x6D\x65\x74\x72\x69\x63\x20\x77\x69\x74\x68\x20\x69\x64\x20","\x20\x79\x6F\x75\x20\x73\x70\x65\x63\x69\x66\x69\x65\x64\x20\x64\x6F\x65\x73\x20\x6E\x6F\x74\x20\x65\x78\x69\x73\x74","\x69\x6E\x63\x6C\x75\x64\x65\x73","\x54\x68\x65\x20\x66\x69\x65\x6C\x64\x20","\x20\x79\x6F\x75\x20\x73\x70\x65\x63\x69\x66\x69\x65\x64\x20\x64\x6F\x65\x73\x20\x6E\x6F\x74\x20\x65\x78\x69\x73\x74\x20\x69\x6E\x20\x74\x68\x65\x20\x74\x61\x62\x6C\x65","\x66\x6F\x72\x45\x61\x63\x68","\x6B\x65\x79\x73","\x66\x69\x6E\x64\x41\x6C\x6C","\x64\x65\x73\x63\x72\x69\x62\x65","\x59\x6F\x75\x20\x68\x61\x76\x65\x20\x6E\x6F\x74\x20\x73\x70\x65\x63\x69\x66\x69\x65\x64\x20\x74\x68\x65\x20\x74\x61\x62\x6C\x65\x20\x6F\x72\x20\x74\x68\x65\x20\x74\x61\x62\x6C\x65\x20\x64\x6F\x65\x73\x20\x6E\x6F\x74\x20\x65\x78\x69\x73\x74","\x52\x65\x70\x6F\x72\x74\x41\x67\x65\x6E\x74\x48\x69\x73\x74\x6F\x72\x79","\x68\x69\x73\x74\x6F\x72\x79","\x72\x65\x70\x6F\x72\x74\x5F\x61\x67\x65\x6E\x74\x5F\x68\x69\x73\x74\x6F\x72\x79","\x52\x65\x70\x6F\x72\x74\x4D\x61\x69\x6C\x53\x65\x73\x73\x69\x6F\x6E\x48\x69\x73\x74\x6F\x72\x79","\x72\x65\x70\x6F\x72\x74\x5F\x6D\x61\x69\x6C\x5F\x73\x65\x73\x73\x69\x6F\x6E\x5F\x68\x69\x73\x74\x6F\x72\x79","\x52\x65\x70\x6F\x72\x74\x51\x75\x65\x75\x65\x48\x69\x73\x74\x6F\x72\x79","\x72\x65\x70\x6F\x72\x74\x5F\x71\x75\x65\x75\x65\x5F\x68\x69\x73\x74\x6F\x72\x79","\x52\x65\x70\x6F\x72\x74\x43\x68\x61\x74\x53\x65\x73\x73\x69\x6F\x6E\x48\x69\x73\x74\x6F\x72\x79","\x72\x65\x70\x6F\x72\x74\x5F\x63\x68\x61\x74\x5F\x73\x65\x73\x73\x69\x6F\x6E\x5F\x68\x69\x73\x74\x6F\x72\x79","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73"];_0x8c97[0];var _=require(_0x8c97[1]);var util=require(_0x8c97[2]);var sequelize=require(_0x8c97[4])[_0x8c97[3]];var CustomReport=require(_0x8c97[4])[_0x8c97[5]];var ReportField=require(_0x8c97[4])[_0x8c97[6]];var Metric=require(_0x8c97[4])[_0x8c97[7]];var ExtractedReport=require(_0x8c97[4])[_0x8c97[8]];var extractUtils=require(_0x8c97[9]);var reportBuildUtils=require(_0x8c97[10]);var Util=require(_0x8c97[11]);exports[_0x8c97[12]]=function(_0x2ef5xb,_0x2ef5xc,_0x2ef5xd){return CustomReport[_0x8c97[21]](Util[_0x8c97[20]](_[_0x8c97[19]](_0x2ef5xb[_0x8c97[17]],_0x2ef5xb[_0x8c97[18]])))[_0x8c97[16]](function(_0x2ef5xf){_0x2ef5xc[_0x8c97[15]](200)[_0x8c97[14]](_0x2ef5xf)})[_0x8c97[13]](function(_0x2ef5xe){return handleError(_0x2ef5xc,_0x2ef5xe)})};exports[_0x8c97[22]]=function(_0x2ef5xb,_0x2ef5xc){var _0x2ef5x10;return CustomReport[_0x8c97[39]](_0x8c97[38])[_0x8c97[37]](_0x2ef5xb[_0x8c97[18]][_0x8c97[36]])[_0x8c97[16]](function(_0x2ef5x12){console[_0x8c97[23]](_0x8c97[30]);if(!_0x2ef5x12){return _0x2ef5xc[_0x8c97[31]](404)};var _0x2ef5x13=reportBuildUtils[_0x8c97[33]](_0x2ef5x12[_0x8c97[32]],_0x2ef5xb[_0x8c97[17]]);return sequelize[_0x8c97[17]](_0x2ef5x13,{type:sequelize[_0x8c97[35]][_0x8c97[34]]})})[_0x8c97[16]](function(_0x2ef5x11){_0x2ef5x10=_0x2ef5x11[_0x8c97[24]];if(_0x2ef5xb[_0x8c97[17]][_0x8c97[25]]){_0x2ef5x11=_(_0x2ef5x11)[_0x8c97[29]](_0x2ef5xb[_0x8c97[17]][_0x8c97[28]]||0)[_0x8c97[27]](_0x2ef5xb[_0x8c97[17]][_0x8c97[25]])[_0x8c97[26]]()};_0x2ef5xc[_0x8c97[15]](200)[_0x8c97[14]]({rows:_0x2ef5x11,count:_0x2ef5x10})})[_0x8c97[13]](function(_0x2ef5xe){console[_0x8c97[23]](_0x2ef5xe);return handleError(_0x2ef5xc,_0x2ef5xe)})};exports[_0x8c97[40]]=function(_0x2ef5xb,_0x2ef5xc){docExtract(_0x2ef5xb,_0x2ef5xc,_0x8c97[41])};exports[_0x8c97[42]]=function(_0x2ef5xb,_0x2ef5xc){docExtract(_0x2ef5xb,_0x2ef5xc,_0x8c97[43])};function docExtract(_0x2ef5xb,_0x2ef5xc,_0x2ef5x15){CustomReport[_0x8c97[39]](_0x8c97[38])[_0x8c97[37]](_0x2ef5xb[_0x8c97[18]][_0x8c97[36]])[_0x8c97[16]](function(_0x2ef5x12){if(!_0x2ef5x12){return _0x2ef5xc[_0x8c97[31]](404)};return [_0x2ef5x12,ExtractedReport[_0x8c97[49]]({name:_0x2ef5x12[_0x8c97[46]],startDate:_0x2ef5xb[_0x8c97[17]][_0x8c97[47]]||null,endDate:_0x2ef5xb[_0x8c97[17]][_0x8c97[48]]||null,output:_0x2ef5x15})]})[_0x8c97[45]](function(_0x2ef5x12,_0x2ef5x16){extractUtils[_0x8c97[44]+_0x2ef5x15](_0x2ef5x12,_0x2ef5xb[_0x8c97[17]],_0x2ef5x16[_0x8c97[36]])})[_0x8c97[13]](function(_0x2ef5xe){console[_0x8c97[23]](_0x2ef5xe);return handleError(_0x2ef5xc,_0x2ef5xe)});return _0x2ef5xc[_0x8c97[31]](200)}exports[_0x8c97[50]]=function(_0x2ef5xb,_0x2ef5xc){return CustomReport[_0x8c97[39]](_0x8c97[38])[_0x8c97[37]](_0x2ef5xb[_0x8c97[18]][_0x8c97[36]])[_0x8c97[16]](function(_0x2ef5x12){if(!_0x2ef5x12){return _0x2ef5xc[_0x8c97[31]](404)};return _0x2ef5xc[_0x8c97[14]](_0x2ef5x12)})[_0x8c97[13]](function(_0x2ef5xe){return handleError(_0x2ef5xc,_0x2ef5xe)})};exports[_0x8c97[51]]=function(_0x2ef5xb,_0x2ef5xc){var _0x2ef5x17;return sequelize[_0x8c97[57]](function(_0x2ef5x18){return CustomReport[_0x8c97[39]](_0x8c97[38])[_0x8c97[37]](_0x2ef5xb[_0x8c97[18]][_0x8c97[36]])[_0x8c97[16]](function(_0x2ef5x12){if(!_0x2ef5x12){return _0x2ef5xc[_0x8c97[31]](404)};var _0x2ef5x19=_0x2ef5x12[_0x8c97[32]];delete _0x2ef5x19[_0x8c97[36]];delete _0x2ef5x19[_0x8c97[52]];delete _0x2ef5x19[_0x8c97[53]];_0x2ef5x19[_0x8c97[54]]=_0x2ef5xb[_0x8c97[55]][_0x8c97[54]];_0x2ef5x17=_[_0x8c97[56]](_0x2ef5x19.Fields,_0x8c97[32]);return CustomReport[_0x8c97[49]](_0x2ef5x19,{transaction:_0x2ef5x18})})[_0x8c97[16]](function(_0x2ef5x12){return [_0x2ef5x12,_0x2ef5x17]})[_0x8c97[45]](createFields(_0x2ef5x18))})[_0x8c97[16]](function(){return _0x2ef5xc[_0x8c97[31]](201)})[_0x8c97[13]](function(_0x2ef5xe){console[_0x8c97[23]](_0x2ef5xe);return handleError(_0x2ef5xc,_0x2ef5xe)})};exports[_0x8c97[49]]=function(_0x2ef5xb,_0x2ef5xc){var _0x2ef5x1a;return sequelize[_0x8c97[57]](function(_0x2ef5x18){return CustomReport[_0x8c97[49]](_0x2ef5xb[_0x8c97[55]],{transaction:_0x2ef5x18})[_0x8c97[16]](function(_0x2ef5x12){_0x2ef5x1a=_0x2ef5x12;return [_0x2ef5x1a,_0x2ef5xb[_0x8c97[55]][_0x8c97[58]]]})[_0x8c97[45]](createFields(_0x2ef5x18))})[_0x8c97[16]](function(){return _0x2ef5xc[_0x8c97[15]](201)[_0x8c97[14]](_0x2ef5x1a)})[_0x8c97[13]](function(_0x2ef5xe){console[_0x8c97[23]](_0x2ef5xe);return handleError(_0x2ef5xc,_0x2ef5xe)})};exports[_0x8c97[59]]=function(_0x2ef5xb,_0x2ef5xc){if(_0x2ef5xb[_0x8c97[55]][_0x8c97[36]]){delete _0x2ef5xb[_0x8c97[55]][_0x8c97[36]]};var _0x2ef5x1a;return sequelize[_0x8c97[57]](function(_0x2ef5x18){return CustomReport[_0x8c97[37]](_0x2ef5xb[_0x8c97[18]][_0x8c97[36]])[_0x8c97[16]](function(_0x2ef5x12){if(!_0x2ef5x12){return _0x2ef5xc[_0x8c97[31]](404)};var _0x2ef5x1b=_[_0x8c97[19]](_0x2ef5x12,_0x2ef5xb[_0x8c97[55]]);return _0x2ef5x12[_0x8c97[61]]({transaction:_0x2ef5x18})})[_0x8c97[16]](function(_0x2ef5x12){_0x2ef5x1a=_0x2ef5x12;if(_0x2ef5xb[_0x8c97[55]][_0x8c97[58]]){return ReportField[_0x8c97[60]]({where:{CustomReportId:_0x2ef5xb[_0x8c97[18]][_0x8c97[36]]},transaction:_0x2ef5x18})}})[_0x8c97[16]](function(){return [_0x2ef5x1a,_0x2ef5xb[_0x8c97[55]][_0x8c97[58]]]})[_0x8c97[45]](createFields(_0x2ef5x18))})[_0x8c97[16]](function(){return _0x2ef5xc[_0x8c97[31]](200)})[_0x8c97[13]](function(_0x2ef5xe){console[_0x8c97[23]](_0x2ef5xe);return handleError(_0x2ef5xc,_0x2ef5xe)})};function createFields(_0x2ef5x18){return function(_0x2ef5x12,_0x2ef5x1d){if(_0x2ef5x1d&&Array[_0x8c97[62]](_0x2ef5x1d)&&_0x2ef5x1d[_0x8c97[24]]){var _0x2ef5x1e=getTable(_0x2ef5x12[_0x8c97[63]]);if(_0x2ef5x1e){var _0x2ef5x1f;return _0x2ef5x1e[_0x8c97[79]]()[_0x8c97[16]](function(_0x2ef5x24){_0x2ef5x1f=_[_0x8c97[77]](_0x2ef5x24);return Metric[_0x8c97[78]]()})[_0x8c97[16]](function(_0x2ef5x20){var _0x2ef5x21=[];_0x2ef5x20=_[_0x8c97[56]](_0x2ef5x20,_0x8c97[32]);_0x2ef5x1d[_0x8c97[76]](function(_0x2ef5x22){_0x2ef5x22[_0x8c97[65]]=_0x2ef5x12[_0x8c97[36]];if(_0x2ef5x22[_0x8c97[66]]){var _0x2ef5x23=_[_0x8c97[67]](_0x2ef5x20,{id:_0x2ef5x22[_0x8c97[66]]});if(_0x2ef5x23){_0x2ef5x22[_0x8c97[68]]=_0x2ef5x23[_0x8c97[69]];_0x2ef5x21[_0x8c97[70]](ReportField[_0x8c97[49]](_0x2ef5x22,{transaction:_0x2ef5x18}))}else {throw  new Error(_0x8c97[71]+_0x2ef5x22[_0x8c97[66]]+_0x8c97[72])}}else {if(_[_0x8c97[73]](_0x2ef5x1f,_0x2ef5x22[_0x8c97[68]])){_0x2ef5x21[_0x8c97[70]](ReportField[_0x8c97[49]](_0x2ef5x22,{transaction:_0x2ef5x18}))}else {throw  new Error(_0x8c97[74]+_0x2ef5x22[_0x8c97[68]]+_0x8c97[75])}}});return _0x2ef5x21})[_0x8c97[64]]()}else {throw  new Error(_0x8c97[80])}}}}function getTable(_0x2ef5x26){var _0x2ef5x1e;switch(_0x2ef5x26){case _0x8c97[83]:_0x2ef5x1e=require(_0x8c97[4])[_0x8c97[82]][_0x8c97[81]];break;case _0x8c97[85]:_0x2ef5x1e=require(_0x8c97[4])[_0x8c97[82]][_0x8c97[84]];break;case _0x8c97[87]:_0x2ef5x1e=require(_0x8c97[4])[_0x8c97[82]][_0x8c97[86]];break;case _0x8c97[89]:_0x2ef5x1e=require(_0x8c97[4])[_0x8c97[82]][_0x8c97[88]];break;default:};return _0x2ef5x1e}exports[_0x8c97[60]]=function(_0x2ef5xb,_0x2ef5xc){CustomReport[_0x8c97[37]](_0x2ef5xb[_0x8c97[18]][_0x8c97[36]])[_0x8c97[16]](function(_0x2ef5x12){if(!_0x2ef5x12){return _0x2ef5xc[_0x8c97[31]](404)};_0x2ef5x12[_0x8c97[60]]()[_0x8c97[16]](function(){return _0x2ef5xc[_0x8c97[31]](204)})[_0x8c97[13]](function(_0x2ef5xe){return handleError(_0x2ef5xc,_0x2ef5xe)})})[_0x8c97[13]](function(_0x2ef5xe){return handleError(_0x2ef5xc,_0x2ef5xe)})};exports[_0x8c97[90]]=function(_0x2ef5xb,_0x2ef5xc){CustomReport[_0x8c97[60]]({where:{id:_0x2ef5xb[_0x8c97[17]][_0x8c97[91]]},individualHooks:true})[_0x8c97[16]](function(){return _0x2ef5xc[_0x8c97[31]](204)})[_0x8c97[13]](function(_0x2ef5xe){return handleError(_0x2ef5xc,_0x2ef5xe)})};function handleError(_0x2ef5xc,_0x2ef5xe){return _0x2ef5xc[_0x8c97[15]](500)[_0x8c97[14]](_0x2ef5xe)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var util = require('util');
+var sequelize = require('../../models').sequelize;
+var CustomReport = require('../../models').CustomReport;
+var ReportField = require('../../models').ReportField;
+var Metric = require('../../models').Metric;
+var ExtractedReport = require('../../models').ExtractedReport;
+var extractUtils = require('../../utils/report_extraction');
+var reportBuildUtils = require('../../utils/report_build');
+var Util = require('../../config/util');
+
+// Get list of agents
+exports.index = function(req, res, next) {
+  return CustomReport
+    .findAndCountAll(Util.getQuery(_.merge(req.query, req.params)))
+    .then(function(result) {
+      res.status(200).send(result);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+exports.preview = function(req, res) {
+  var _countAll;
+  return CustomReport
+    .scope('fields')
+    .findById(req.params.id)
+    .then(function(report) {
+      console.log('found report');
+      if (!report) {
+        return res.sendStatus(404);
+      }
+      var query = reportBuildUtils.buildReport(report.dataValues, req.query);
+      // console.log(query);
+      return sequelize.query(query, {
+        type: sequelize.QueryTypes.SELECT
+      });
+    })
+    .then(function(results) {
+      _countAll = results.length;
+      if (req.query.limit) {
+        results = _(results).slice(req.query.offset || 0).take(req.query.limit).value();
+      }
+      res.status(200).send({
+        rows: results,
+        count: _countAll
+      });
+    })
+    .catch(function(err) {
+      console.log(err);
+      return handleError(res, err);
+    });
+};
+
+exports.extractPdf = function(req, res) {
+  // console.log('extractPdf api function');
+  docExtract(req, res, 'PDF')
+};
+
+exports.extractCsv = function(req, res) {
+  // console.log('extractCsv api function');
+  docExtract(req, res, 'CSV');
+};
+
+function docExtract(req, res, typeFunction) {
+  // console.log('common docExtract api function');
+  CustomReport
+    .scope('fields')
+    .findById(req.params.id)
+    .then(function(report) {
+      if (!report) {
+        return res.sendStatus(404);
+      }
+      // console.log('found the report, creating the new DB row for extracted reports..');
+      //CREATE A DB ROW IN A TABLE WITH THE REPORT INFO, QUERY DATES, AND THE STATUS 'ELABORATING'
+      return [report, ExtractedReport.create({
+        name: report.name,
+        startDate: req.query.startDate || null,
+        endDate: req.query.endDate || null,
+        output: typeFunction
+      })]
+    })
+    .spread(function(report, extractedReport) {
+      // console.log('created new extracted reports db entry, calling external extraction function: ' + typeFunction);
+      extractUtils['extract' + typeFunction](report, req.query, extractedReport.id);
+    })
+    .catch(function(err) {
+      console.log(err);
+      return handleError(res, err);
+    });
+  return res.sendStatus(200);
+}
+
+// Get a single report
+exports.show = function(req, res) {
+  return CustomReport
+    .scope('fields')
+    .findById(req.params.id)
+    .then(function(report) {
+      if (!report) {
+        return res.sendStatus(404);
+      }
+      return res.send(report);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Copy a custom report
+exports.copy = function(req, res) {
+  var _fields;
+  return sequelize.transaction(function(t) {
+      return CustomReport
+        .scope('fields')
+        .findById(req.params.id)
+        .then(function(report) {
+          if (!report) {
+            return res.sendStatus(404);
+          }
+          var newReport = report.dataValues;
+          delete newReport.id;
+          delete newReport.createdAt;
+          delete newReport.updatedAt;
+          newReport.parent = req.body.parent;
+          _fields = _.map(newReport.Fields, 'dataValues');
+          return CustomReport
+            .create(newReport, {
+              transaction: t
+            });
+        })
+        .then(function(report) {
+          return [report, _fields];
+        })
+        .spread(createFields(t));
+    })
+    .then(function() {
+      return res.sendStatus(201);
+    })
+    .catch(function(err) {
+      console.log(err);
+      return handleError(res, err);
+    });
+};
+
+// Creates a new report in the DB.
+exports.create = function(req, res) {
+  var _report;
+  return sequelize.transaction(function(t) {
+      return CustomReport
+        .create(req.body, {
+          transaction: t
+        })
+        .then(function(report) {
+          _report = report;
+          return [_report, req.body.Fields];
+        })
+        .spread(createFields(t));
+    })
+    .then(function() {
+      return res.status(201).send(_report);
+    })
+    .catch(function(err) {
+      console.log(err);
+      return handleError(res, err);
+    });
+};
+
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  var _report;
+  return sequelize.transaction(function(t) {
+      return CustomReport
+        .findById(req.params.id)
+        .then(function(report) {
+          if (!report) {
+            return res.sendStatus(404);
+          }
+          var updated = _.merge(report, req.body);
+          return report
+            .save({
+              transaction: t
+            });
+        })
+        .then(function(report) {
+          _report = report;
+          if (req.body.Fields) {
+            return ReportField.destroy({
+              where: {
+                CustomReportId: req.params.id
+              },
+              transaction: t
+            });
+          }
+        })
+        .then(function() {
+          return [_report, req.body.Fields];
+        })
+        .spread(createFields(t));
+    })
+    .then(function() {
+      return res.sendStatus(200);
+    })
+    .catch(function(err) {
+      console.log(err);
+      return handleError(res, err);
+    });
+}
+
+function createFields(t) {
+  return function(report, fields) {
+    if (fields && Array.isArray(fields) && fields.length) {
+      var tableModel = getTable(report.table);
+      if (tableModel) {
+        var _tableFields;
+        return tableModel
+          .describe()
+          .then(function(tableFields) {
+            _tableFields = _.keys(tableFields);
+            return Metric
+              .findAll();
+          })
+          .then(function(metrics) {
+            var bulkFields = [];
+            metrics = _.map(metrics, 'dataValues');
+            fields.forEach(function(elem) {
+              elem.CustomReportId = report.id;
+              if (elem.MetricId) {
+                var metric = _.find(metrics, {
+                  id: elem.MetricId
+                });
+                if (metric) {
+                  elem.field = metric.metric;
+                  bulkFields.push(ReportField
+                    .create(elem, {
+                      transaction: t
+                    }));
+                } else {
+                  throw new Error("The metric with id " + elem.MetricId + " you specified does not exist");
+                }
+              } else {
+                if (_.includes(_tableFields, elem.field)) {
+                  bulkFields.push(ReportField
+                    .create(elem, {
+                      transaction: t
+                    }));
+                } else {
+                  throw new Error("The field " + elem.field + " you specified does not exist in the table");
+                }
+              }
+            });
+            return bulkFields;
+          })
+          .all();
+      } else {
+        throw new Error("You have not specified the table or the table does not exist");
+      }
+    }
+  }
+}
+
+function getTable(table) {
+  var tableModel;
+  switch (table) {
+    case 'report_agent_history':
+      tableModel = require('../../models').history.ReportAgentHistory;
+      break;
+    case 'report_mail_session_history':
+      tableModel = require('../../models').history.ReportMailSessionHistory;
+      break;
+    case 'report_queue_history':
+      tableModel = require('../../models').history.ReportQueueHistory;
+      break;
+    case 'report_chat_session_history':
+      tableModel = require('../../models').history.ReportChatSessionHistory;
+      break;
+    default:
+  }
+  return tableModel;
+}
+
+// Deletes a report from the DB.
+exports.destroy = function(req, res) {
+  CustomReport
+    .findById(req.params.id)
+    .then(function(report) {
+      if (!report) {
+        return res.sendStatus(404);
+      }
+      report.destroy()
+        .then(function() {
+          return res.sendStatus(204);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+exports.bulkDestroy = function(req, res) {
+  CustomReport
+    .destroy({
+      where: {
+        id: req.query.ids
+      },
+      individualHooks: true
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index 6f92b11..07bf827 100644 (file)
@@ -1 +1,24 @@
-var _0xbb70=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x63\x75\x73\x74\x6F\x6D\x5F\x72\x65\x70\x6F\x72\x74\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x63\x75\x73\x74\x6F\x6D\x5F\x72\x65\x70\x6F\x72\x74\x3A\x72\x65\x6D\x6F\x76\x65"];_0xbb70[0];var CustomReport=require(_0xbb70[2])[_0xbb70[1]];exports[_0xbb70[3]]=function(_0x8c38x2){CustomReport[_0xbb70[4]](function(_0x8c38x3){onSave(_0x8c38x2,_0x8c38x3)});CustomReport[_0xbb70[5]](function(_0x8c38x3){onRemove(_0x8c38x2,_0x8c38x3)})};function onSave(_0x8c38x2,_0x8c38x3,_0x8c38x5){_0x8c38x2[_0xbb70[7]](_0xbb70[6],_0x8c38x3)}function onRemove(_0x8c38x2,_0x8c38x3,_0x8c38x5){_0x8c38x2[_0xbb70[7]](_0xbb70[8],_0x8c38x3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var CustomReport = require('../../models').CustomReport;
+
+exports.register = function(socket) {
+  CustomReport.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  CustomReport.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('custom_report:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('custom_report:remove', doc);
+}
index 6ff1c15..905f802 100644 (file)
@@ -1 +1,20 @@
-var _0x3033=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x73\x68\x6F\x75\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x70\x70","\x73\x75\x70\x65\x72\x74\x65\x73\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x61\x6E\x61\x6C\x79\x74\x69\x63\x73\x2F\x72\x65\x70\x6F\x72\x74\x73\x2F\x63\x75\x73\x74\x6F\x6D","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x70\x6F\x6E\x64\x20\x77\x69\x74\x68\x20\x4A\x53\x4F\x4E\x20\x61\x72\x72\x61\x79","\x69\x6E\x73\x74\x61\x6E\x63\x65\x6F\x66","\x62\x65","\x62\x6F\x64\x79","\x65\x6E\x64","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x65\x78\x70\x65\x63\x74","\x2F\x61\x70\x69\x2F\x61\x6E\x61\x6C\x79\x74\x69\x63\x2F\x72\x65\x70\x6F\x72\x74\x73\x2F\x63\x75\x73\x74\x6F\x6D","\x67\x65\x74"];_0x3033[0];var should=require(_0x3033[1]);var app=require(_0x3033[2]);var request=require(_0x3033[3]);describe(_0x3033[4],function(){it(_0x3033[5],function(_0xbd7cx4){request(app)[_0x3033[13]](_0x3033[12])[_0x3033[11]](200)[_0x3033[11]](_0x3033[10],/json/)[_0x3033[9]](function(_0xbd7cx5,_0xbd7cx6){if(_0xbd7cx5){return _0xbd7cx4(_0xbd7cx5)};_0xbd7cx6[_0x3033[8]][_0x3033[1]][_0x3033[7]][_0x3033[6]](Array);_0xbd7cx4()})})})
\ No newline at end of file
+'use strict';
+
+var should = require('should');
+var app = require('../../app');
+var request = require('supertest');
+
+describe('GET /api/analytics/reports/custom', function() {
+
+  it('should respond with JSON array', function(done) {
+    request(app)
+      .get('/api/analytic/reports/custom')
+      .expect(200)
+      .expect('Content-Type', /json/)
+      .end(function(err, res) {
+        if (err) return done(err);
+        res.body.should.be.instanceof(Array);
+        done();
+      });
+  });
+});
index 9fd6f1e..132d3cc 100644 (file)
@@ -1 +1,21 @@
-var _0x906f=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x63\x75\x73\x74\x6F\x6D\x5F\x72\x65\x70\x6F\x72\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64\x2F\x70\x72\x65\x76\x69\x65\x77","\x70\x72\x65\x76\x69\x65\x77","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x2F\x3A\x69\x64\x2F\x65\x78\x74\x72\x61\x63\x74\x2F\x70\x64\x66","\x65\x78\x74\x72\x61\x63\x74\x50\x64\x66","\x2F\x3A\x69\x64\x2F\x65\x78\x74\x72\x61\x63\x74\x2F\x63\x73\x76","\x65\x78\x74\x72\x61\x63\x74\x43\x73\x76","\x2F\x69\x6D\x70\x6F\x72\x74","\x2F\x3A\x69\x64\x2F\x63\x6F\x70\x79","\x63\x6F\x70\x79","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0x906f[0];var express=require(_0x906f[1]);var controller=require(_0x906f[2]);var router=express.Router();router[_0x906f[5]](_0x906f[3],controller[_0x906f[4]]);router[_0x906f[5]](_0x906f[6],controller[_0x906f[7]]);router[_0x906f[5]](_0x906f[8],controller[_0x906f[9]]);router[_0x906f[11]](_0x906f[3],controller[_0x906f[10]]);router[_0x906f[5]](_0x906f[12],controller[_0x906f[13]]);router[_0x906f[5]](_0x906f[14],controller[_0x906f[15]]);router[_0x906f[11]](_0x906f[16],controller[_0x906f[10]]);router[_0x906f[11]](_0x906f[17],controller[_0x906f[18]]);router[_0x906f[20]](_0x906f[8],controller[_0x906f[19]]);router[_0x906f[21]](_0x906f[8],controller[_0x906f[19]]);router[_0x906f[23]](_0x906f[3],controller[_0x906f[22]]);router[_0x906f[23]](_0x906f[8],controller[_0x906f[24]]);module[_0x906f[25]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./custom_report.controller');
+
+var router = express.Router();
+
+router.get('/', controller.index);
+router.get('/:id/preview', controller.preview);
+router.get('/:id', controller.show);
+router.post('/', controller.create);
+router.get('/:id/extract/pdf', controller.extractPdf);
+router.get('/:id/extract/csv', controller.extractCsv);
+router.post('/import', controller.create);
+router.post('/:id/copy', controller.copy);
+router.put('/:id', controller.update);
+router.patch('/:id', controller.update);
+router.delete('/', controller.bulkDestroy);
+router.delete('/:id', controller.destroy);
+
+module.exports = router;
index 84cc0b7..4eb8756 100644 (file)
@@ -1 +1,147 @@
-var _0xb93d=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x44\x61\x73\x68\x62\x6F\x61\x72\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x61\x6C\x6C","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x63\x6C\x6F\x6E\x65","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x65\x64\x69\x74\x61\x62\x6C\x65","\x64\x65\x66\x61\x75\x6C\x74\x45\x6E\x74\x72\x79","\x6E\x61\x6D\x65","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73"];_0xb93d[0];var _=require(_0xb93d[1]);var util=require(_0xb93d[2]);var Dashboard=require(_0xb93d[4])[_0xb93d[3]];var Util=require(_0xb93d[5]);exports[_0xb93d[6]]=function(_0xeefdx5,_0xeefdx6,_0xeefdx7){return Dashboard[_0xb93d[13]](Util[_0xb93d[12]](_0xeefdx5[_0xb93d[11]]))[_0xb93d[10]](function(_0xeefdx9){_0xeefdx6[_0xb93d[9]](200)[_0xb93d[8]](_0xeefdx9)})[_0xb93d[7]](function(_0xeefdx8){return handleError(_0xeefdx6,_0xeefdx8)})};exports[_0xb93d[14]]=function(_0xeefdx5,_0xeefdx6){Dashboard[_0xb93d[16]]()[_0xb93d[10]](function(_0xeefdxa){if(!_0xeefdxa){return _0xeefdx6[_0xb93d[15]](404)};return _0xeefdx6[_0xb93d[9]](200)[_0xb93d[8]](_0xeefdxa)})[_0xb93d[7]](function(_0xeefdx8){return handleError(_0xeefdx6,_0xeefdx8)})};exports[_0xb93d[17]]=function(_0xeefdx5,_0xeefdx6){Dashboard[_0xb93d[20]](_0xeefdx5[_0xb93d[19]][_0xb93d[18]])[_0xb93d[10]](function(_0xeefdxb){if(!_0xeefdxb){return _0xeefdx6[_0xb93d[15]](404)};return _0xeefdx6[_0xb93d[8]](_0xeefdxb)})[_0xb93d[7]](function(_0xeefdx8){return handleError(_0xeefdx6,_0xeefdx8)})};exports[_0xb93d[21]]=function(_0xeefdx5,_0xeefdx6){Dashboard[_0xb93d[21]](_0xeefdx5[_0xb93d[22]])[_0xb93d[10]](function(_0xeefdxb){return _0xeefdx6[_0xb93d[9]](201)[_0xb93d[8]](_0xeefdxb)})[_0xb93d[7]](function(_0xeefdx8){return handleError(_0xeefdx6,_0xeefdx8)})};exports[_0xb93d[23]]=function(_0xeefdx5,_0xeefdx6){Dashboard[_0xb93d[20]](_0xeefdx5[_0xb93d[19]][_0xb93d[18]])[_0xb93d[10]](function(_0xeefdxb){var _0xeefdxc=_0xeefdxb[_0xb93d[24]];delete _0xeefdxc[_0xb93d[18]];_0xeefdxc[_0xb93d[25]]=true;_0xeefdxc[_0xb93d[26]]=false;_0xeefdxc[_0xb93d[27]]=_0xeefdx5[_0xb93d[22]][_0xb93d[27]]||_0xeefdxc[_0xb93d[27]];return Dashboard[_0xb93d[21]](_0xeefdxc)})[_0xb93d[10]](function(_0xeefdxb){return _0xeefdx6[_0xb93d[9]](201)[_0xb93d[8]](_0xeefdxb)})[_0xb93d[7]](function(_0xeefdx8){return handleError(_0xeefdx6,_0xeefdx8)})};exports[_0xb93d[28]]=function(_0xeefdx5,_0xeefdx6){if(_0xeefdx5[_0xb93d[22]][_0xb93d[18]]){delete _0xeefdx5[_0xb93d[22]][_0xb93d[18]]};Dashboard[_0xb93d[20]](_0xeefdx5[_0xb93d[19]][_0xb93d[18]])[_0xb93d[10]](function(_0xeefdxb){if(!_0xeefdxb){return _0xeefdx6[_0xb93d[15]](404)};var _0xeefdxd=_[_0xb93d[29]](_0xeefdxb,_0xeefdx5[_0xb93d[22]]);_0xeefdxd[_0xb93d[30]]()[_0xb93d[10]](function(){return _0xeefdx6[_0xb93d[9]](200)[_0xb93d[8]](_0xeefdxb)})[_0xb93d[7]](function(_0xeefdx8){return handleError(_0xeefdx6,_0xeefdx8)})})[_0xb93d[7]](function(_0xeefdx8){return handleError(_0xeefdx6,_0xeefdx8)})};exports[_0xb93d[31]]=function(_0xeefdx5,_0xeefdx6){Dashboard[_0xb93d[20]](_0xeefdx5[_0xb93d[19]][_0xb93d[18]])[_0xb93d[10]](function(_0xeefdxb){if(!_0xeefdxb){return _0xeefdx6[_0xb93d[15]](404)};_0xeefdxb[_0xb93d[31]]()[_0xb93d[10]](function(){return _0xeefdx6[_0xb93d[15]](204)})[_0xb93d[7]](function(_0xeefdx8){return handleError(_0xeefdx6,_0xeefdx8)})})[_0xb93d[7]](function(_0xeefdx8){return handleError(_0xeefdx6,_0xeefdx8)})};exports[_0xb93d[32]]=function(_0xeefdx5,_0xeefdx6){Dashboard[_0xb93d[31]]({where:{id:_0xeefdx5[_0xb93d[11]][_0xb93d[33]]},individualHooks:true})[_0xb93d[10]](function(){return _0xeefdx6[_0xb93d[15]](204)})[_0xb93d[7]](function(_0xeefdx8){return handleError(_0xeefdx6,_0xeefdx8)})};function handleError(_0xeefdx6,_0xeefdx8){return _0xeefdx6[_0xb93d[9]](500)[_0xb93d[8]](_0xeefdx8)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var util = require('util');
+var Dashboard = require('../../models').Dashboard;
+var Util = require('../../config/util');
+
+// Get list of dashboards
+exports.index = function(req, res, next) {
+  return Dashboard
+    .findAndCountAll(Util.getQuery(req.query))
+    .then(function(result) {
+      res.status(200).send(result);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single dashboard
+exports.all = function(req, res) {
+  Dashboard
+    .findAll()
+    .then(function(dashboards) {
+      if (!dashboards) {
+        return res.sendStatus(404);
+      }
+      return res.status(200).send(dashboards);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single dashboard
+exports.show = function(req, res) {
+  Dashboard
+    .findById(req.params.id)
+    .then(function(dashboard) {
+      if (!dashboard) {
+        return res.sendStatus(404);
+      }
+      return res.send(dashboard);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new dashboard in the DB.
+exports.create = function(req, res) {
+  Dashboard
+    .create(req.body)
+    .then(function(dashboard) {
+      return res.status(201).send(dashboard);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Clone a dashboard in the DB.
+exports.clone = function(req, res) {
+  Dashboard
+    .findById(req.params.id)
+    .then(function(dashboard) {
+      var newDashboard = dashboard.dataValues;
+      delete newDashboard.id;
+      newDashboard.editable = true;
+      newDashboard.defaultEntry = false;
+      newDashboard.name = req.body.name || newDashboard.name;
+      return Dashboard
+        .create(newDashboard);
+    })
+    .then(function(dashboard) {
+      return res.status(201).send(dashboard);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Updates an existing dashboard in the DB.
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  Dashboard
+    .findById(req.params.id)
+    .then(function(dashboard) {
+      if (!dashboard) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(dashboard, req.body);
+      updated.save()
+        .then(function() {
+          return res.status(200).send(dashboard);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a dashboard from the DB.
+exports.destroy = function(req, res) {
+  Dashboard
+    .findById(req.params.id)
+    .then(function(dashboard) {
+      if (!dashboard) {
+        return res.sendStatus(404);
+      }
+      dashboard.destroy()
+        .then(function() {
+          return res.sendStatus(204);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+exports.bulkDestroy = function(req, res) {
+  Dashboard
+    .destroy({
+      where: {
+        id: req.query.ids
+      },
+      individualHooks: true
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index fe1a684..9bf2215 100644 (file)
@@ -1 +1,27 @@
-var _0xcf2f=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x44\x61\x73\x68\x62\x6F\x61\x72\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x3A\x72\x65\x6D\x6F\x76\x65"];_0xcf2f[0];var Dashboard=require(_0xcf2f[2])[_0xcf2f[1]];exports[_0xcf2f[3]]=function(_0xe2eex2){Dashboard[_0xcf2f[4]](function(_0xe2eex3){onSave(_0xe2eex2,_0xe2eex3)});Dashboard[_0xcf2f[5]](function(_0xe2eex3){onSave(_0xe2eex2,_0xe2eex3)});Dashboard[_0xcf2f[6]](function(_0xe2eex3){onRemove(_0xe2eex2,_0xe2eex3)})};function onSave(_0xe2eex2,_0xe2eex3,_0xe2eex5){_0xe2eex2[_0xcf2f[8]](_0xcf2f[7],_0xe2eex3)}function onRemove(_0xe2eex2,_0xe2eex3,_0xe2eex5){_0xe2eex2[_0xcf2f[8]](_0xcf2f[9],_0xe2eex3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var Dashboard = require('../../models').Dashboard;
+
+exports.register = function(socket) {
+  Dashboard.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  Dashboard.afterUpdate(function(doc) {
+    onSave(socket, doc);
+  });
+  Dashboard.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('dashboard:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('dashboard:remove', doc);
+}
index c1aea37..4784e74 100644 (file)
@@ -1 +1,20 @@
-var _0x88f1=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x73\x68\x6F\x75\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x70\x70","\x73\x75\x70\x65\x72\x74\x65\x73\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x70\x6F\x6E\x64\x20\x77\x69\x74\x68\x20\x4A\x53\x4F\x4E\x20\x61\x72\x72\x61\x79","\x69\x6E\x73\x74\x61\x6E\x63\x65\x6F\x66","\x62\x65","\x62\x6F\x64\x79","\x65\x6E\x64","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x65\x78\x70\x65\x63\x74","\x2F\x61\x70\x69\x2F\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x73","\x67\x65\x74"];_0x88f1[0];var should=require(_0x88f1[1]);var app=require(_0x88f1[2]);var request=require(_0x88f1[3]);describe(_0x88f1[4],function(){it(_0x88f1[5],function(_0x3ca4x4){request(app)[_0x88f1[13]](_0x88f1[12])[_0x88f1[11]](200)[_0x88f1[11]](_0x88f1[10],/json/)[_0x88f1[9]](function(_0x3ca4x5,_0x3ca4x6){if(_0x3ca4x5){return _0x3ca4x4(_0x3ca4x5)};_0x3ca4x6[_0x88f1[8]][_0x88f1[1]][_0x88f1[7]][_0x88f1[6]](Array);_0x3ca4x4()})})})
\ No newline at end of file
+'use strict';
+
+var should = require('should');
+var app = require('../../app');
+var request = require('supertest');
+
+describe('GET /api/dashboards', function() {
+
+  it('should respond with JSON array', function(done) {
+    request(app)
+      .get('/api/dashboards')
+      .expect(200)
+      .expect('Content-Type', /json/)
+      .end(function(err, res) {
+        if (err) return done(err);
+        res.body.should.be.instanceof(Array);
+        done();
+      });
+  });
+});
\ No newline at end of file
index 67c11af..393fb11 100644 (file)
@@ -1 +1,19 @@
-var _0xb132=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x61\x6C\x6C","\x61\x6C\x6C","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x2F\x3A\x69\x64\x2F\x63\x6C\x6F\x6E\x65","\x63\x6C\x6F\x6E\x65","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0xb132[0];var express=require(_0xb132[1]);var controller=require(_0xb132[2]);var auth=require(_0xb132[3]);var router=express.Router();router[_0xb132[7]](_0xb132[4],auth[_0xb132[5]](),controller[_0xb132[6]]);router[_0xb132[7]](_0xb132[8],auth[_0xb132[5]](),controller[_0xb132[9]]);router[_0xb132[7]](_0xb132[10],auth[_0xb132[5]](),controller[_0xb132[11]]);router[_0xb132[13]](_0xb132[4],auth[_0xb132[5]](),controller[_0xb132[12]]);router[_0xb132[13]](_0xb132[14],auth[_0xb132[5]](),controller[_0xb132[15]]);router[_0xb132[17]](_0xb132[10],auth[_0xb132[5]](),controller[_0xb132[16]]);router[_0xb132[18]](_0xb132[10],auth[_0xb132[5]](),controller[_0xb132[16]]);router[_0xb132[20]](_0xb132[4],auth[_0xb132[5]](),controller[_0xb132[19]]);router[_0xb132[20]](_0xb132[10],auth[_0xb132[5]](),controller[_0xb132[21]]);module[_0xb132[22]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./dashboard.controller');
+var auth = require('../../auth/auth.service');
+
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), controller.index);
+router.get('/all', auth.isAuthenticated(), controller.all);
+router.get('/:id', auth.isAuthenticated(), controller.show);
+router.post('/', auth.isAuthenticated(), controller.create);
+router.post('/:id/clone', auth.isAuthenticated(), controller.clone);
+router.put('/:id', auth.isAuthenticated(), controller.update);
+router.patch('/:id', auth.isAuthenticated(), controller.update);
+router.delete('/', auth.isAuthenticated(), controller.bulkDestroy);
+router.delete('/:id', auth.isAuthenticated(), controller.destroy);
+
+module.exports = router;
index d09915d..4fc95af 100644 (file)
@@ -1 +1,234 @@
-var _0xa024=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74","\x45\x78\x74\x72\x61\x63\x74\x65\x64\x52\x65\x70\x6F\x72\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x75\x74\x69\x6C\x73\x2F\x72\x65\x70\x6F\x72\x74\x5F\x65\x78\x74\x72\x61\x63\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x75\x74\x69\x6C\x73\x2F\x72\x65\x70\x6F\x72\x74\x5F\x62\x75\x69\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x70\x61\x72\x61\x6D\x73","\x6D\x65\x72\x67\x65","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x70\x72\x65\x76\x69\x65\x77","\x6C\x6F\x67","\x6C\x65\x6E\x67\x74\x68","\x6C\x69\x6D\x69\x74","\x76\x61\x6C\x75\x65","\x74\x61\x6B\x65","\x6F\x66\x66\x73\x65\x74","\x73\x6C\x69\x63\x65","\x66\x6F\x75\x6E\x64\x20\x72\x65\x70\x6F\x72\x74","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x62\x75\x69\x6C\x64\x52\x65\x70\x6F\x72\x74","\x53\x45\x4C\x45\x43\x54","\x51\x75\x65\x72\x79\x54\x79\x70\x65\x73","\x69\x64","\x66\x69\x6E\x64\x42\x79\x49\x64","\x65\x78\x74\x72\x61\x63\x74\x50\x64\x66","\x50\x44\x46","\x65\x78\x74\x72\x61\x63\x74\x43\x73\x76","\x43\x53\x56","\x65\x78\x74\x72\x61\x63\x74","\x73\x70\x72\x65\x61\x64","\x6E\x61\x6D\x65","\x73\x74\x61\x72\x74\x44\x61\x74\x65","\x65\x6E\x64\x44\x61\x74\x65","\x63\x72\x65\x61\x74\x65","","\x28","\x72\x75\x6C\x65\x73","\x20","\x6F\x70\x65\x72\x61\x74\x6F\x72","\x67\x72\x6F\x75\x70","\x66\x69\x65\x6C\x64","\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E","\x20\x27","\x4C\x49\x4B\x45","\x25","\x27","\x29","\x73\x68\x6F\x77","\x63\x6F\x70\x79","\x63\x72\x65\x61\x74\x65\x64\x41\x74","\x75\x70\x64\x61\x74\x65\x64\x41\x74","\x70\x61\x72\x65\x6E\x74","\x62\x6F\x64\x79","\x46\x69\x65\x6C\x64\x73","\x6D\x61\x70","\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64","\x66\x6F\x72\x45\x61\x63\x68","\x75\x70\x64\x61\x74\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79"];_0xa024[0];var _=require(_0xa024[1]);var util=require(_0xa024[2]);var DefaultReport=require(_0xa024[4])[_0xa024[3]];var sequelize=require(_0xa024[4])[_0xa024[5]];var CustomReport=require(_0xa024[4])[_0xa024[6]];var ExtractedReport=require(_0xa024[4])[_0xa024[7]];var extractUtils=require(_0xa024[8]);var reportBuildUtils=require(_0xa024[9]);var Util=require(_0xa024[10]);exports[_0xa024[11]]=function(_0x966fxa,_0x966fxb,_0x966fxc){return DefaultReport[_0xa024[20]](Util[_0xa024[19]](_[_0xa024[18]](_0x966fxa[_0xa024[16]],_0x966fxa[_0xa024[17]])))[_0xa024[15]](function(_0x966fxe){_0x966fxb[_0xa024[14]](200)[_0xa024[13]](_0x966fxe)})[_0xa024[12]](function(_0x966fxd){return handleError(_0x966fxb,_0x966fxd)})};exports[_0xa024[21]]=function(_0x966fxa,_0x966fxb){var _0x966fxf;DefaultReport[_0xa024[36]](_0x966fxa[_0xa024[17]][_0xa024[35]],{include:[{all:true}]})[_0xa024[15]](function(_0x966fx11){console[_0xa024[22]](_0xa024[29]);if(!_0x966fx11){return _0x966fxb[_0xa024[30]](404)};var _0x966fx12=reportBuildUtils[_0xa024[32]](_0x966fx11[_0xa024[31]],_0x966fxa[_0xa024[16]]);return sequelize[_0xa024[16]](_0x966fx12,{type:sequelize[_0xa024[34]][_0xa024[33]]})})[_0xa024[15]](function(_0x966fx10){_0x966fxf=_0x966fx10[_0xa024[23]];if(_0x966fxa[_0xa024[16]][_0xa024[24]]){var _0x966fx10=_(_0x966fx10)[_0xa024[28]](_0x966fxa[_0xa024[16]][_0xa024[27]]||0)[_0xa024[26]](_0x966fxa[_0xa024[16]][_0xa024[24]])[_0xa024[25]]()};_0x966fxb[_0xa024[14]](200)[_0xa024[13]]({rows:_0x966fx10,count:_0x966fxf})})[_0xa024[12]](function(_0x966fxd){console[_0xa024[22]](_0x966fxd);return handleError(_0x966fxb,_0x966fxd)})};exports[_0xa024[37]]=function(_0x966fxa,_0x966fxb){docExtract(_0x966fxa,_0x966fxb,_0xa024[38])};exports[_0xa024[39]]=function(_0x966fxa,_0x966fxb){docExtract(_0x966fxa,_0x966fxb,_0xa024[40])};function docExtract(_0x966fxa,_0x966fxb,_0x966fx14){DefaultReport[_0xa024[36]](_0x966fxa[_0xa024[17]][_0xa024[35]],{include:[{all:true}]})[_0xa024[15]](function(_0x966fx11){if(!_0x966fx11){return _0x966fxb[_0xa024[30]](404)};return [_0x966fx11,ExtractedReport[_0xa024[46]]({name:_0x966fx11[_0xa024[43]],startDate:_0x966fxa[_0xa024[16]][_0xa024[44]]||null,endDate:_0x966fxa[_0xa024[16]][_0xa024[45]]||null,output:_0x966fx14})]})[_0xa024[42]](function(_0x966fx11,_0x966fx15){extractUtils[_0xa024[41]+_0x966fx14](_0x966fx11,_0x966fxa[_0xa024[16]],_0x966fx15[_0xa024[35]])})[_0xa024[12]](function(_0x966fxd){console[_0xa024[22]](_0x966fxd);return handleError(_0x966fxb,_0x966fxd)});return _0x966fxb[_0xa024[30]](200)}function getConditions(_0x966fx17){if(!_0x966fx17){return _0xa024[47]};for(var _0x966fx18=_0xa024[48],_0x966fx19=0;_0x966fx19<_0x966fx17[_0xa024[49]][_0xa024[23]];_0x966fx19++){_0x966fx19>0&&(_0x966fx18+=_0xa024[50]+_0x966fx17[_0xa024[51]]+_0xa024[50]);_0x966fx18+=_0x966fx17[_0xa024[49]][_0x966fx19][_0xa024[52]]?getConditions(_0x966fx17[_0xa024[49]][_0x966fx19][_0xa024[52]]):_0x966fx17[_0xa024[49]][_0x966fx19][_0xa024[53]]+_0xa024[50]+_0x966fx17[_0xa024[49]][_0x966fx19][_0xa024[54]]+_0xa024[55]+(_0x966fx17[_0xa024[49]][_0x966fx19][_0xa024[54]]===_0xa024[56]?_0xa024[57]+_0x966fx17[_0xa024[49]][_0x966fx19][_0xa024[25]]+_0xa024[57]:_0x966fx17[_0xa024[49]][_0x966fx19][_0xa024[25]])+_0xa024[58]};return _0x966fx18+_0xa024[59]}exports[_0xa024[60]]=function(_0x966fxa,_0x966fxb){DefaultReport[_0xa024[36]](_0x966fxa[_0xa024[17]][_0xa024[35]],{include:[{all:true}]})[_0xa024[15]](function(_0x966fx11){if(!_0x966fx11){return _0x966fxb[_0xa024[30]](404)};return _0x966fxb[_0xa024[13]](_0x966fx11)})[_0xa024[12]](function(_0x966fxd){return handleError(_0x966fxb,_0x966fxd)})};exports[_0xa024[61]]=function(_0x966fxa,_0x966fxb){DefaultReport[_0xa024[36]](_0x966fxa[_0xa024[17]][_0xa024[35]],{include:[{all:true}]})[_0xa024[15]](function(_0x966fx11){if(!_0x966fx11){return _0x966fxb[_0xa024[30]](404)};var _0x966fx1a=_0x966fx11[_0xa024[31]];delete _0x966fx1a[_0xa024[35]];delete _0x966fx1a[_0xa024[62]];delete _0x966fx1a[_0xa024[63]];_0x966fx1a[_0xa024[64]]=_0x966fxa[_0xa024[65]][_0xa024[64]];_0x966fx1a[_0xa024[66]]=_[_0xa024[67]](_0x966fx1a.Fields,_0xa024[31]);_[_0xa024[69]](_0x966fx1a.Fields,function(_0x966fx1b){delete _0x966fx1b[_0xa024[35]];delete _0x966fx1b[_0xa024[68]];delete _0x966fx1b[_0xa024[62]];delete _0x966fx1b[_0xa024[63]]});return CustomReport[_0xa024[46]](_0x966fx1a,{include:[{all:true}]})})[_0xa024[15]](function(){return _0x966fxb[_0xa024[30]](201)})[_0xa024[12]](function(_0x966fxd){console[_0xa024[22]](_0x966fxd);return handleError(_0x966fxb,_0x966fxd)})};exports[_0xa024[46]]=function(_0x966fxa,_0x966fxb){DefaultReport[_0xa024[46]](_0x966fxa[_0xa024[65]])[_0xa024[15]](function(_0x966fx11){return _0x966fxb[_0xa024[14]](201)[_0xa024[13]](_0x966fx11)})[_0xa024[12]](function(_0x966fxd){return handleError(_0x966fxb,_0x966fxd)})};exports[_0xa024[70]]=function(_0x966fxa,_0x966fxb){if(_0x966fxa[_0xa024[65]][_0xa024[35]]){delete _0x966fxa[_0xa024[65]][_0xa024[35]]};DefaultReport[_0xa024[36]](_0x966fxa[_0xa024[17]][_0xa024[35]])[_0xa024[15]](function(_0x966fx11){if(!_0x966fx11){return _0x966fxb[_0xa024[30]](404)};var _0x966fx1c=_[_0xa024[18]](_0x966fx11,_0x966fxa[_0xa024[65]]);_0x966fx1c[_0xa024[71]]()[_0xa024[15]](function(){return _0x966fxb[_0xa024[14]](200)[_0xa024[13]](_0x966fx11)})[_0xa024[12]](function(_0x966fxd){return handleError(_0x966fxb,_0x966fxd)})})[_0xa024[12]](function(_0x966fxd){return handleError(_0x966fxb,_0x966fxd)})};exports[_0xa024[72]]=function(_0x966fxa,_0x966fxb){DefaultReport[_0xa024[36]](_0x966fxa[_0xa024[17]][_0xa024[35]])[_0xa024[15]](function(_0x966fx11){if(!_0x966fx11){return _0x966fxb[_0xa024[30]](404)};_0x966fx11[_0xa024[72]]()[_0xa024[15]](function(){return _0x966fxb[_0xa024[30]](204)})[_0xa024[12]](function(_0x966fxd){return handleError(_0x966fxb,_0x966fxd)})})[_0xa024[12]](function(_0x966fxd){return handleError(_0x966fxb,_0x966fxd)})};function handleError(_0x966fxb,_0x966fxd){return _0x966fxb[_0xa024[14]](500)[_0xa024[13]](_0x966fxd)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var util = require('util');
+var DefaultReport = require('../../models').DefaultReport;
+var sequelize = require('../../models').sequelize;
+var CustomReport = require('../../models').CustomReport;
+var ExtractedReport = require('../../models').ExtractedReport;
+var extractUtils = require('../../utils/report_extraction');
+var reportBuildUtils = require('../../utils/report_build');
+var Util = require('../../config/util');
+
+// Get list of agents
+exports.index = function(req, res, next) {
+  return DefaultReport
+    .findAndCountAll(Util.getQuery(_.merge(req.query, req.params)))
+    .then(function(result) {
+      res.status(200).send(result);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+
+exports.preview = function(req, res) {
+  var _countAll;
+  DefaultReport
+    .findById(req.params.id, {
+      include: [{
+        all: true
+      }]
+    })
+    .then(function(report) {
+      console.log('found report');
+      if (!report) {
+        return res.sendStatus(404);
+      }
+      var query = reportBuildUtils.buildReport(report.dataValues, req.query);
+      // console.log(query);
+      return sequelize.query(query, {
+        type: sequelize.QueryTypes.SELECT
+      });
+    })
+    .then(function(results) {
+      _countAll = results.length;
+      if (req.query.limit) {
+        var results = _(results).slice(req.query.offset || 0).take(req.query.limit).value();
+      }
+      res.status(200).send({
+        rows: results,
+        count: _countAll
+      });
+    })
+    .catch(function(err) {
+      console.log(err);
+      return handleError(res, err);
+    });
+};
+
+exports.extractPdf = function(req, res) {
+  // console.log('extractPdf api function');
+  docExtract(req, res, 'PDF')
+};
+
+exports.extractCsv = function(req, res) {
+  // console.log('extractCsv api function');
+  docExtract(req, res, 'CSV');
+};
+
+function docExtract(req, res, typeFunction) {
+  // console.log('common docExtract api function');
+  DefaultReport
+    .findById(req.params.id, {
+      include: [{
+        all: true
+      }]
+    })
+    .then(function(report) {
+      if (!report) {
+        return res.sendStatus(404);
+      }
+      // console.log('found the report, creating the new DB row for extracted reports..');
+      //CREATE A DB ROW IN A TABLE WITH THE REPORT INFO, QUERY DATES, AND THE STATUS 'ELABORATING'
+      return [report, ExtractedReport.create({
+        name: report.name,
+        startDate: req.query.startDate || null,
+        endDate: req.query.endDate || null,
+        output: typeFunction
+      })]
+    })
+    .spread(function(report, extractedReport) {
+      // console.log('created new extracted reports db entry, calling external extraction function: ' + typeFunction);
+      extractUtils['extract' + typeFunction](report, req.query, extractedReport.id);
+    })
+    .catch(function(err) {
+      console.log(err);
+      return handleError(res, err);
+    });
+  return res.sendStatus(200);
+}
+
+function getConditions(group) {
+  if (!group) return "";
+  for (var str = "(", i = 0; i < group.rules.length; i++) {
+    i > 0 && (str += " " + group.operator + " ");
+    str += group.rules[i].group ?
+      getConditions(group.rules[i].group) :
+      group.rules[i].field + " " + group.rules[i].condition + " '" + (group.rules[i].condition === 'LIKE' ? "%" + group.rules[i].value + "%" : group.rules[i].value) + "'";
+  }
+
+  return str + ')';
+}
+
+// Get a single report
+exports.show = function(req, res) {
+  DefaultReport
+    .findById(req.params.id, {
+      include: [{
+        all: true
+      }]
+    })
+    .then(function(report) {
+      if (!report) {
+        return res.sendStatus(404);
+      }
+      return res.send(report);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Copy a default report
+exports.copy = function(req, res) {
+  DefaultReport
+    .findById(req.params.id, {
+      include: [{
+        all: true
+      }]
+    })
+    .then(function(report) {
+      if (!report) {
+        return res.sendStatus(404);
+      }
+      var newReport = report.dataValues;
+      delete newReport.id;
+      delete newReport.createdAt;
+      delete newReport.updatedAt;
+      newReport.parent = req.body.parent;
+      newReport.Fields = _.map(newReport.Fields, 'dataValues');
+      _.forEach(newReport.Fields, function(elem) {
+        delete elem.id;
+        delete elem.DefaultReportId;
+        delete elem.createdAt;
+        delete elem.updatedAt;
+      });
+
+      return CustomReport.create(newReport, {
+        include: [{
+          all: true
+        }]
+      })
+    })
+    .then(function() {
+      return res.sendStatus(201);
+    })
+    .catch(function(err) {
+      console.log(err);
+      return handleError(res, err);
+    });
+};
+
+// Creates a new report in the DB.
+exports.create = function(req, res) {
+  DefaultReport
+    .create(req.body)
+    .then(function(report) {
+      return res.status(201).send(report);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Updates an existing report in the DB.
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  DefaultReport
+    .findById(req.params.id)
+    .then(function(report) {
+      if (!report) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(report, req.body);
+      updated.save()
+        .then(function() {
+          return res.status(200).send(report);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a report from the DB.
+exports.destroy = function(req, res) {
+  DefaultReport
+    .findById(req.params.id)
+    .then(function(report) {
+      if (!report) {
+        return res.sendStatus(404);
+      }
+      report.destroy()
+        .then(function() {
+          return res.sendStatus(204);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index aba6d5e..2acd563 100644 (file)
@@ -1 +1,24 @@
-var _0x48cf=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x66\x61\x75\x6C\x74\x5F\x72\x65\x70\x6F\x72\x74\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x64\x65\x66\x61\x75\x6C\x74\x5F\x72\x65\x70\x6F\x72\x74\x3A\x72\x65\x6D\x6F\x76\x65"];_0x48cf[0];var DefaultReport=require(_0x48cf[2])[_0x48cf[1]];exports[_0x48cf[3]]=function(_0x716dx2){DefaultReport[_0x48cf[4]](function(_0x716dx3){onSave(_0x716dx2,_0x716dx3)});DefaultReport[_0x48cf[5]](function(_0x716dx3){onRemove(_0x716dx2,_0x716dx3)})};function onSave(_0x716dx2,_0x716dx3,_0x716dx5){_0x716dx2[_0x48cf[7]](_0x48cf[6],_0x716dx3)}function onRemove(_0x716dx2,_0x716dx3,_0x716dx5){_0x716dx2[_0x48cf[7]](_0x48cf[8],_0x716dx3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var DefaultReport = require('../../models').DefaultReport;
+
+exports.register = function(socket) {
+  DefaultReport.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  DefaultReport.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('default_report:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('default_report:remove', doc);
+}
index be499e8..2a6c81d 100644 (file)
@@ -1 +1,20 @@
-var _0x5396=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x73\x68\x6F\x75\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x70\x70","\x73\x75\x70\x65\x72\x74\x65\x73\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x61\x6E\x61\x6C\x79\x74\x69\x63\x73\x2F\x72\x65\x70\x6F\x72\x74\x73\x2F\x64\x65\x66\x61\x75\x6C\x74","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x70\x6F\x6E\x64\x20\x77\x69\x74\x68\x20\x4A\x53\x4F\x4E\x20\x61\x72\x72\x61\x79","\x69\x6E\x73\x74\x61\x6E\x63\x65\x6F\x66","\x62\x65","\x62\x6F\x64\x79","\x65\x6E\x64","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x65\x78\x70\x65\x63\x74","\x2F\x61\x70\x69\x2F\x61\x6E\x61\x6C\x79\x74\x69\x63\x2F\x72\x65\x70\x6F\x72\x74\x73\x2F\x64\x65\x66\x61\x75\x6C\x74","\x67\x65\x74"];_0x5396[0];var should=require(_0x5396[1]);var app=require(_0x5396[2]);var request=require(_0x5396[3]);describe(_0x5396[4],function(){it(_0x5396[5],function(_0x77e0x4){request(app)[_0x5396[13]](_0x5396[12])[_0x5396[11]](200)[_0x5396[11]](_0x5396[10],/json/)[_0x5396[9]](function(_0x77e0x5,_0x77e0x6){if(_0x77e0x5){return _0x77e0x4(_0x77e0x5)};_0x77e0x6[_0x5396[8]][_0x5396[1]][_0x5396[7]][_0x5396[6]](Array);_0x77e0x4()})})})
\ No newline at end of file
+'use strict';
+
+var should = require('should');
+var app = require('../../app');
+var request = require('supertest');
+
+describe('GET /api/analytics/reports/default', function() {
+
+  it('should respond with JSON array', function(done) {
+    request(app)
+      .get('/api/analytic/reports/default')
+      .expect(200)
+      .expect('Content-Type', /json/)
+      .end(function(err, res) {
+        if (err) return done(err);
+        res.body.should.be.instanceof(Array);
+        done();
+      });
+  });
+});
index 633728a..550ecd6 100644 (file)
@@ -1 +1,19 @@
-var _0x1611=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x64\x65\x66\x61\x75\x6C\x74\x5F\x72\x65\x70\x6F\x72\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64\x2F\x70\x72\x65\x76\x69\x65\x77","\x70\x72\x65\x76\x69\x65\x77","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x2F\x3A\x69\x64\x2F\x65\x78\x74\x72\x61\x63\x74\x2F\x70\x64\x66","\x65\x78\x74\x72\x61\x63\x74\x50\x64\x66","\x2F\x3A\x69\x64\x2F\x65\x78\x74\x72\x61\x63\x74\x2F\x63\x73\x76","\x65\x78\x74\x72\x61\x63\x74\x43\x73\x76","\x2F\x3A\x69\x64\x2F\x63\x6F\x70\x79","\x63\x6F\x70\x79","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x1611[0];var express=require(_0x1611[1]);var controller=require(_0x1611[2]);var router=express.Router();router[_0x1611[5]](_0x1611[3],controller[_0x1611[4]]);router[_0x1611[5]](_0x1611[6],controller[_0x1611[7]]);router[_0x1611[5]](_0x1611[8],controller[_0x1611[9]]);router[_0x1611[11]](_0x1611[3],controller[_0x1611[10]]);router[_0x1611[5]](_0x1611[12],controller[_0x1611[13]]);router[_0x1611[5]](_0x1611[14],controller[_0x1611[15]]);router[_0x1611[11]](_0x1611[16],controller[_0x1611[17]]);router[_0x1611[19]](_0x1611[8],controller[_0x1611[18]]);router[_0x1611[20]](_0x1611[8],controller[_0x1611[18]]);router[_0x1611[22]](_0x1611[8],controller[_0x1611[21]]);module[_0x1611[23]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./default_report.controller');
+
+var router = express.Router();
+
+router.get('/', controller.index);
+router.get('/:id/preview', controller.preview);
+router.get('/:id', controller.show);
+router.post('/', controller.create);
+router.get('/:id/extract/pdf', controller.extractPdf);
+router.get('/:id/extract/csv', controller.extractCsv);
+router.post('/:id/copy', controller.copy);
+router.put('/:id', controller.update);
+router.patch('/:id', controller.update);
+router.delete('/:id', controller.destroy);
+
+module.exports = router;
index 680efa0..78e1902 100644 (file)
@@ -1 +1,256 @@
-var _0x35a6=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x64\x65\x73\x6B\x2E\x6A\x73","\x44\x65\x73\x6B\x41\x63\x63\x6F\x75\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x69\x6E\x64\x65\x78","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x6E\x61\x6D\x65","\x75\x73\x65\x72\x6E\x61\x6D\x65","\x72\x65\x6D\x6F\x74\x65\x55\x72\x69","\x70\x65\x72\x5F\x70\x61\x67\x65","\x71\x75\x65\x72\x79","\x70\x61\x67\x65","\x6F\x72\x64\x65\x72","\x25\x73\x20\x25\x73","\x73\x6F\x72\x74\x5F\x62\x79","\x73\x6F\x72\x74\x5F\x6F\x72\x64\x65\x72","\x41\x53\x43","\x66\x6F\x72\x6D\x61\x74","\x24\x6F\x72","\x77\x68\x65\x72\x65","\x25","\x70\x75\x73\x68","\x66\x6F\x72\x45\x61\x63\x68","\x24","\x24\x6C\x69\x6B\x65","\x66\x6F\x72\x49\x6E","\x53\x6F\x6D\x65\x74\x68\x69\x6E\x67\x20\x62\x6C\x65\x77\x20\x75\x70\x21","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x63\x61\x74\x63\x68","\x63\x6F\x75\x6E\x74","\x63\x65\x69\x6C","\x6F\x66\x66\x73\x65\x74","\x25\x73\x3A\x2F\x2F\x25\x73\x25\x73\x3F\x70\x61\x67\x65\x3D\x25\x64","\x70\x72\x6F\x74\x6F\x63\x6F\x6C","\x68\x6F\x73\x74","\x68\x65\x61\x64\x65\x72\x73","\x62\x61\x73\x65\x55\x72\x6C","\x72\x6F\x77\x73","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79","\x63\x68\x65\x63\x6B\x41\x63\x63\x6F\x75\x6E\x74","\x61\x75\x74\x68\x54\x79\x70\x65","\x62\x61\x73\x69\x63","\x70\x61\x73\x73\x77\x6F\x72\x64","\x6F\x61\x75\x74\x68","\x63\x6F\x6E\x73\x75\x6D\x65\x72\x4B\x65\x79","\x63\x6F\x6E\x73\x75\x6D\x65\x72\x53\x65\x63\x72\x65\x74","\x74\x6F\x6B\x65\x6E","\x74\x6F\x6B\x65\x6E\x53\x65\x63\x72\x65\x74","\x63\x72\x65\x61\x74\x65\x43\x6C\x69\x65\x6E\x74","\x2F\x61\x70\x69\x2F\x76\x32\x2F\x75\x73\x65\x72\x73\x2F\x6D\x65","\x67\x65\x74","\x64\x65\x73\x6B\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E","\x66\x69\x65\x6C\x64","\x76\x61\x6C\x75\x65","\x67\x65\x74\x46\x69\x65\x6C\x64\x73","\x2F\x61\x70\x69\x2F\x76\x32\x2F\x63\x75\x73\x74\x6F\x6D\x5F\x66\x69\x65\x6C\x64\x73","\x65\x6E\x74\x72\x69\x65\x73","\x5F\x65\x6D\x62\x65\x64\x64\x65\x64","\x6A\x73\x6F\x6E","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x73\x75\x62\x73\x74\x72","\x2F","\x6C\x65\x6E\x67\x74\x68"];_0x35a6[0];var _=require(_0x35a6[1]);var util=require(_0x35a6[2]);var desk=require(_0x35a6[3]);var DeskAccount=require(_0x35a6[5])[_0x35a6[4]];exports[_0x35a6[6]]=function(_0x7438x5,_0x7438x6){var _0x7438x7=[_0x35a6[7],_0x35a6[8],_0x35a6[9],_0x35a6[10]];var _0x7438x8=_0x7438x5[_0x35a6[12]][_0x35a6[11]]?parseInt(_0x7438x5[_0x35a6[12]][_0x35a6[11]],10):100;var _0x7438x9=_0x7438x5[_0x35a6[12]][_0x35a6[13]]?parseInt(_0x7438x5[_0x35a6[12]][_0x35a6[13]],10):0;var _0x7438xa={where:{},limit:_0x7438x8,offset:_0x7438x9*_0x7438x8};_[_0x35a6[27]](_0x7438x5[_0x35a6[12]],function(_0x7438xb,_0x7438xc){switch(_0x7438xc){case _0x35a6[11]:;case _0x35a6[13]:break;case _0x35a6[16]:_0x7438xa[_0x35a6[14]]=util[_0x35a6[19]](_0x35a6[15],_0x7438x5[_0x35a6[12]][_0x35a6[16]],_0x7438x5[_0x35a6[12]][_0x35a6[17]]||_0x35a6[18])||null;break;case _0x35a6[17]:break;case _0x35a6[25]:_0x7438xa[_0x35a6[21]][_0x35a6[20]]=[];_0x7438x7[_0x35a6[24]](function(_0x7438xd){var _0x7438xe={};_0x7438xe[_0x7438xd]={$like:_0x35a6[22]+_0x7438xb+_0x35a6[22]};_0x7438xa[_0x35a6[21]][_0x35a6[20]][_0x35a6[23]](_0x7438xe)});break;default:_0x7438xa[_0x35a6[21]][_0x7438xc]={$like:{}};_0x7438xa[_0x35a6[21]][_0x7438xc][_0x35a6[26]]=_0x35a6[22]+_0x7438xb+_0x35a6[22]}});DeskAccount[_0x35a6[42]](_0x7438xa)[_0x35a6[41]](function(_0x7438x10){var _0x7438x11=Math[_0x35a6[33]](_0x7438x10[_0x35a6[32]]/_0x7438x8);var _0x7438x12=_0x7438x11>(_0x7438xa[_0x35a6[34]]+1)?util[_0x35a6[19]](_0x35a6[35],_0x7438x5[_0x35a6[36]],_0x7438x5[_0x35a6[38]][_0x35a6[37]],_0x7438x5[_0x35a6[39]],_0x7438x9+1):null;var _0x7438x13=_0x7438x9>0?util[_0x35a6[19]](_0x35a6[35],_0x7438x5[_0x35a6[36]],_0x7438x5[_0x35a6[38]][_0x35a6[37]],_0x7438x5[_0x35a6[39]],_0x7438x9-1):null;return _0x7438x6[_0x35a6[30]](200)[_0x35a6[29]]({count:_0x7438x10[_0x35a6[32]],rows:_0x7438x10[_0x35a6[40]],next_page:_0x7438x12,previous_page:_0x7438x13,total_pages:_0x7438x11})})[_0x35a6[31]](function(_0x7438xf){return _0x7438x6[_0x35a6[30]](500)[_0x35a6[29]]({error:_0x35a6[28]})})};exports[_0x35a6[43]]=function(_0x7438x5,_0x7438x6){DeskAccount[_0x35a6[47]](_0x7438x5[_0x35a6[46]][_0x35a6[45]])[_0x35a6[41]](function(_0x7438x14){if(!_0x7438x14){return _0x7438x6[_0x35a6[44]](404)};return _0x7438x6[_0x35a6[29]](_0x7438x14)})[_0x35a6[31]](function(_0x7438xf){return handleError(_0x7438x6,_0x7438xf)})};exports[_0x35a6[48]]=function(_0x7438x5,_0x7438x6,_0x7438x15){DeskAccount[_0x35a6[48]](_0x7438x5[_0x35a6[49]])[_0x35a6[41]](function(_0x7438x14){return _0x7438x6[_0x35a6[30]](201)[_0x35a6[29]](_0x7438x14)})[_0x35a6[31]](function(_0x7438xf){return handleError(_0x7438x6,_0x7438xf)})};exports[_0x35a6[50]]=function(_0x7438x5,_0x7438x6){if(_0x7438x5[_0x35a6[49]][_0x35a6[45]]){delete _0x7438x5[_0x35a6[49]][_0x35a6[45]]};DeskAccount[_0x35a6[47]](_0x7438x5[_0x35a6[46]][_0x35a6[45]])[_0x35a6[41]](function(_0x7438x14){if(!_0x7438x14){return _0x7438x6[_0x35a6[44]](404)};var _0x7438x16=_[_0x35a6[51]](_0x7438x14,_0x7438x5[_0x35a6[49]]);_0x7438x16[_0x35a6[52]]()[_0x35a6[41]](function(){return _0x7438x6[_0x35a6[30]](200)[_0x35a6[29]](_0x7438x14)})[_0x35a6[31]](function(_0x7438xf){return handleError(_0x7438x6,_0x7438xf)})})[_0x35a6[31]](function(_0x7438xf){return handleError(_0x7438x6,_0x7438xf)})};exports[_0x35a6[53]]=function(_0x7438x5,_0x7438x6){DeskAccount[_0x35a6[47]](_0x7438x5[_0x35a6[46]][_0x35a6[45]])[_0x35a6[41]](function(_0x7438x14){if(!_0x7438x14){return _0x7438x6[_0x35a6[44]](404)};_0x7438x14[_0x35a6[53]]()[_0x35a6[41]](function(){return _0x7438x6[_0x35a6[44]](204)})[_0x35a6[31]](function(_0x7438xf){return handleError(_0x7438x6,_0x7438xf)})})[_0x35a6[31]](function(_0x7438xf){return handleError(_0x7438x6,_0x7438xf)})};exports[_0x35a6[54]]=function(_0x7438x5,_0x7438x6){DeskAccount[_0x35a6[47]](_0x7438x5[_0x35a6[46]][_0x35a6[45]])[_0x35a6[41]](function(_0x7438x17){var _0x7438x14={endpoint:stripTrailingSlash(_0x7438x17[_0x35a6[10]]),retry:false};if(_0x7438x17[_0x35a6[55]]===_0x35a6[56]){_0x7438x14[_0x35a6[9]]=_0x7438x17[_0x35a6[9]];_0x7438x14[_0x35a6[57]]=_0x7438x17[_0x35a6[57]]}else {if(_0x7438x17[_0x35a6[55]]===_0x35a6[58]){_0x7438x14[_0x35a6[59]]=_0x7438x17[_0x35a6[59]];_0x7438x14[_0x35a6[60]]=_0x7438x17[_0x35a6[60]];_0x7438x14[_0x35a6[61]]=_0x7438x17[_0x35a6[61]];_0x7438x14[_0x35a6[62]]=_0x7438x17[_0x35a6[62]]}};var _0x7438x18=desk[_0x35a6[63]](_0x7438x14);_0x7438x18[_0x35a6[65]](_0x35a6[64],function(_0x7438xf,_0x7438x19,_0x7438x1a){if(_0x7438xf){return handleError(_0x7438x6,_0x7438xf)};return _0x7438x6[_0x35a6[44]](200)})})[_0x35a6[31]](function(_0x7438xf){return handleError(_0x7438x6,_0x7438xf)})};exports[_0x35a6[66]]=function(_0x7438x5,_0x7438x6){var _0x7438x1b={};_0x7438x1b[_0x7438x5[_0x35a6[46]][_0x35a6[67]]]=_0x7438x5[_0x35a6[49]][_0x35a6[68]];DeskAccount[_0x35a6[42]]({where:_0x7438x1b})[_0x35a6[41]](function(_0x7438x10){if(_0x7438x10[_0x35a6[32]]){return _0x7438x6[_0x35a6[30]](200)[_0x35a6[29]]({isValid:false,value:_0x7438x5[_0x35a6[49]][_0x35a6[68]]})};return _0x7438x6[_0x35a6[30]](200)[_0x35a6[29]]({isValid:true,value:_0x7438x5[_0x35a6[49]][_0x35a6[68]]})})[_0x35a6[31]](function(_0x7438xf){return handleError(_0x7438x6,_0x7438xf)})};exports[_0x35a6[69]]=function(_0x7438x5,_0x7438x6){DeskAccount[_0x35a6[47]](_0x7438x5[_0x35a6[46]][_0x35a6[45]])[_0x35a6[41]](function(_0x7438x17){var _0x7438x14={endpoint:stripTrailingSlash(_0x7438x17[_0x35a6[10]]),retry:false};if(_0x7438x17[_0x35a6[55]]===_0x35a6[56]){_0x7438x14[_0x35a6[9]]=_0x7438x17[_0x35a6[9]];_0x7438x14[_0x35a6[57]]=_0x7438x17[_0x35a6[57]]}else {if(_0x7438x17[_0x35a6[55]]===_0x35a6[58]){_0x7438x14[_0x35a6[59]]=_0x7438x17[_0x35a6[59]];_0x7438x14[_0x35a6[60]]=_0x7438x17[_0x35a6[60]];_0x7438x14[_0x35a6[61]]=_0x7438x17[_0x35a6[61]];_0x7438x14[_0x35a6[62]]=_0x7438x17[_0x35a6[62]]}};var _0x7438x18=desk[_0x35a6[63]](_0x7438x14);_0x7438x18[_0x35a6[65]](_0x35a6[70],function(_0x7438xf,_0x7438x19,_0x7438x1a){if(_0x7438xf){return handleError(_0x7438x6,_0x7438xf)};return _0x7438x6[_0x35a6[30]](200)[_0x35a6[73]](_0x7438x19[_0x35a6[72]][_0x35a6[71]])})})[_0x35a6[31]](function(_0x7438xf){return handleError(_0x7438x6,_0x7438xf)})};exports[_0x35a6[74]]=function(_0x7438x5,_0x7438x6){DeskAccount[_0x35a6[53]]({where:{id:_0x7438x5[_0x35a6[12]][_0x35a6[45]]},individualHooks:true})[_0x35a6[41]](function(){return _0x7438x6[_0x35a6[44]](204)})[_0x35a6[31]](function(_0x7438xf){return handleError(_0x7438x6,_0x7438xf)})};function stripTrailingSlash(_0x7438x1d){if(_0x7438x1d[_0x35a6[75]](-1)===_0x35a6[76]){return _0x7438x1d[_0x35a6[75]](0,_0x7438x1d[_0x35a6[77]]-1)};return _0x7438x1d}function handleError(_0x7438x6,_0x7438xf){return _0x7438x6[_0x35a6[30]](500)[_0x35a6[29]](_0x7438xf)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var util = require('util');
+var desk = require('desk.js');
+
+var DeskAccount = require('../../models').DeskAccount;
+
+// Get list of desk_accounts
+exports.index = function(req, res) {
+  var attributes = ['description', 'name', 'username', 'remoteUri'];
+  var per_page = req.query.per_page ? parseInt(req.query.per_page, 10) : 100;
+  var page = req.query.page ? parseInt(req.query.page, 10) : 0;
+
+  var query = {
+    where: {},
+    limit: per_page,
+    offset: page * per_page
+  };
+
+  _.forIn(req.query, function(value, key) {
+    switch (key) {
+      case 'per_page':
+      case 'page':
+        break;
+      case 'sort_by':
+        query.order = util.format('%s %s', req.query.sort_by, req.query.sort_order || 'ASC') || null;
+        break;
+      case 'sort_order':
+        break;
+      case '$':
+        query.where.$or = [];
+        attributes.forEach(function(attribute) {
+          var tmp = {};
+          tmp[attribute] = {
+            $like: '%' + value + '%'
+          };
+
+          query.where.$or.push(tmp);
+        });
+        break;
+      default:
+        query.where[key] = {
+          $like: {}
+        };
+        query.where[key].$like = '%' + value + '%';
+    }
+  });
+
+  DeskAccount
+    .findAndCountAll(query)
+    .then(function(result) {
+
+      var total_pages = Math.ceil(result.count / per_page);
+      var next_page = total_pages > (query.offset + 1) ? util.format('%s://%s%s?page=%d', req.protocol, req.headers.host, req.baseUrl, page + 1) : null;
+      var previous_page = page > 0 ? util.format('%s://%s%s?page=%d', req.protocol, req.headers.host, req.baseUrl, page - 1) : null;
+
+      return res.status(200).send({
+        count: result.count,
+        rows: result.rows,
+        next_page: next_page,
+        previous_page: previous_page,
+        total_pages: total_pages
+      });
+
+    })
+    .catch(function(err) {
+      return res.status(500).send({
+        error: 'Something blew up!'
+      });
+    });
+};
+
+// Get a single desk_account
+exports.show = function(req, res) {
+  DeskAccount
+    .findById(req.params.id)
+    .then(function(desk_account) {
+      if (!desk_account) {
+        return res.sendStatus(404);
+      }
+      return res.send(desk_account);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new desk_account in the DB.
+exports.create = function(req, res, next) {
+  DeskAccount
+    .create(req.body)
+    .then(function(desk_account) {
+      return res.status(201).send(desk_account);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Updates an existing desk_account in the DB.
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  DeskAccount
+    .findById(req.params.id)
+    .then(function(desk_account) {
+      if (!desk_account) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(desk_account, req.body);
+      updated.save()
+        .then(function() {
+          return res.status(200).send(desk_account);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a desk_account from the DB.
+exports.destroy = function(req, res) {
+  DeskAccount
+    .findById(req.params.id)
+    .then(function(desk_account) {
+      if (!desk_account) {
+        return res.sendStatus(404);
+      }
+      desk_account.destroy()
+        .then(function() {
+          return res.sendStatus(204);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+exports.checkAccount = function(req, res) {
+  DeskAccount
+    .findById(req.params.id)
+    .then(function(account) {
+      var desk_account = {
+        endpoint: stripTrailingSlash(account.remoteUri),
+        retry: false
+      };
+      if (account.authType === 'basic') {
+        desk_account.username = account.username;
+        desk_account.password = account.password;
+      } else if (account.authType === 'oauth') {
+        desk_account.consumerKey = account.consumerKey;
+        desk_account.consumerSecret = account.consumerSecret;
+        desk_account.token = account.token;
+        desk_account.tokenSecret = account.tokenSecret;
+      }
+      var client = desk.createClient(desk_account);
+      client.get('/api/v2/users/me', function(err, body, response) {
+        if (err) {
+          return handleError(res, err);
+        }
+        return res.sendStatus(200);
+      });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+exports.deskValidation = function(req, res) {
+  var where = {};
+  where[req.params.field] = req.body.value;
+  DeskAccount
+    .findAndCountAll({
+      where: where
+    })
+    .then(function(result) {
+      if (result.count) {
+        return res.status(200).send({
+          isValid: false,
+          value: req.body.value
+        });
+      }
+      return res.status(200).send({
+        isValid: true,
+        value: req.body.value
+      });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+exports.getFields = function(req, res) {
+  DeskAccount
+    .findById(req.params.id)
+    .then(function(account) {
+      var desk_account = {
+        endpoint: stripTrailingSlash(account.remoteUri),
+        retry: false
+      };
+      if (account.authType === 'basic') {
+        desk_account.username = account.username;
+        desk_account.password = account.password;
+      } else if (account.authType === 'oauth') {
+        desk_account.consumerKey = account.consumerKey;
+        desk_account.consumerSecret = account.consumerSecret;
+        desk_account.token = account.token;
+        desk_account.tokenSecret = account.tokenSecret;
+      }
+      var client = desk.createClient(desk_account);
+      client.get('/api/v2/custom_fields', function(err, body, response) {
+        if (err) {
+          return handleError(res, err);
+        }
+        return res.status(200).json(body._embedded.entries);
+      });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+}
+
+exports.bulkDestroy = function(req, res) {
+  DeskAccount
+    .destroy({
+      where: {
+        id: req.query.id
+      },
+      individualHooks: true
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function stripTrailingSlash(str) {
+  if (str.substr(-1) === '/') {
+    return str.substr(0, str.length - 1);
+  }
+  return str;
+}
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index c723273..3f7badd 100644 (file)
@@ -1 +1,24 @@
-var _0xfb40=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x44\x65\x73\x6B\x41\x63\x63\x6F\x75\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x73\x6B\x5F\x61\x63\x63\x6F\x75\x6E\x74\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x64\x65\x73\x6B\x5F\x61\x63\x63\x6F\x75\x6E\x74\x3A\x72\x65\x6D\x6F\x76\x65"];_0xfb40[0];var DeskAccount=require(_0xfb40[2])[_0xfb40[1]];exports[_0xfb40[3]]=function(_0x9075x2){DeskAccount[_0xfb40[4]](function(_0x9075x3){onSave(_0x9075x2,_0x9075x3)});DeskAccount[_0xfb40[5]](function(_0x9075x3){onRemove(_0x9075x2,_0x9075x3)})};function onSave(_0x9075x2,_0x9075x3,_0x9075x5){_0x9075x2[_0xfb40[7]](_0xfb40[6],_0x9075x3)}function onRemove(_0x9075x2,_0x9075x3,_0x9075x5){_0x9075x2[_0xfb40[7]](_0xfb40[8],_0x9075x3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var DeskAccount = require('../../models').DeskAccount;
+
+exports.register = function(socket) {
+  DeskAccount.afterCreate(function (doc) {
+    onSave(socket, doc);
+  });
+  DeskAccount.afterDestroy(function (doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('desk_account:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('desk_account:remove', doc);
+}
index acba779..a56fc11 100644 (file)
@@ -1 +1,20 @@
-var _0x45fc=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x73\x68\x6F\x75\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x70\x70","\x73\x75\x70\x65\x72\x74\x65\x73\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x64\x65\x73\x6B\x2F\x61\x63\x63\x6F\x75\x6E\x74\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x70\x6F\x6E\x64\x20\x77\x69\x74\x68\x20\x4A\x53\x4F\x4E\x20\x61\x72\x72\x61\x79","\x69\x6E\x73\x74\x61\x6E\x63\x65\x6F\x66","\x62\x65","\x62\x6F\x64\x79","\x65\x6E\x64","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x65\x78\x70\x65\x63\x74","\x2F\x61\x70\x69\x2F\x64\x65\x73\x6B\x2F\x61\x63\x63\x6F\x75\x6E\x74\x73","\x67\x65\x74"];_0x45fc[0];var should=require(_0x45fc[1]);var app=require(_0x45fc[2]);var request=require(_0x45fc[3]);describe(_0x45fc[4],function(){it(_0x45fc[5],function(_0xd201x4){request(app)[_0x45fc[13]](_0x45fc[12])[_0x45fc[11]](200)[_0x45fc[11]](_0x45fc[10],/json/)[_0x45fc[9]](function(_0xd201x5,_0xd201x6){if(_0xd201x5){return _0xd201x4(_0xd201x5)};_0xd201x6[_0x45fc[8]][_0x45fc[1]][_0x45fc[7]][_0x45fc[6]](Array);_0xd201x4()})})})
\ No newline at end of file
+'use strict';
+
+var should = require('should');
+var app = require('../../app');
+var request = require('supertest');
+
+describe('GET /api/desk/accounts', function() {
+
+  it('should respond with JSON array', function(done) {
+    request(app)
+      .get('/api/desk/accounts')
+      .expect(200)
+      .expect('Content-Type', /json/)
+      .end(function(err, res) {
+        if (err) return done(err);
+        res.body.should.be.instanceof(Array);
+        done();
+      });
+  });
+});
\ No newline at end of file
index 0a93455..4a593d0 100644 (file)
@@ -1 +1,19 @@
-var _0x22bd=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x64\x65\x73\x6B\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x2F\x3A\x69\x64\x2F\x63\x68\x65\x63\x6B","\x63\x68\x65\x63\x6B\x41\x63\x63\x6F\x75\x6E\x74","\x2F\x3A\x69\x64\x2F\x66\x69\x65\x6C\x64\x73","\x67\x65\x74\x46\x69\x65\x6C\x64\x73","\x2F\x76\x61\x6C\x69\x64\x61\x74\x65\x2F\x3A\x66\x69\x65\x6C\x64","\x64\x65\x73\x6B\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E","\x70\x6F\x73\x74","\x63\x72\x65\x61\x74\x65","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0x22bd[0];var express=require(_0x22bd[1]);var controller=require(_0x22bd[2]);var auth=require(_0x22bd[3]);var router=express.Router();router[_0x22bd[7]](_0x22bd[4],auth[_0x22bd[5]](),controller[_0x22bd[6]]);router[_0x22bd[7]](_0x22bd[8],auth[_0x22bd[5]](),controller[_0x22bd[9]]);router[_0x22bd[7]](_0x22bd[10],auth[_0x22bd[5]](),controller[_0x22bd[11]]);router[_0x22bd[7]](_0x22bd[12],auth[_0x22bd[5]](),controller[_0x22bd[13]]);router[_0x22bd[16]](_0x22bd[14],auth[_0x22bd[5]](),controller[_0x22bd[15]]);router[_0x22bd[16]](_0x22bd[4],auth[_0x22bd[5]](),controller[_0x22bd[17]]);router[_0x22bd[19]](_0x22bd[8],auth[_0x22bd[5]](),controller[_0x22bd[18]]);router[_0x22bd[20]](_0x22bd[8],auth[_0x22bd[5]](),controller[_0x22bd[18]]);router[_0x22bd[22]](_0x22bd[4],auth[_0x22bd[5]](),controller[_0x22bd[21]]);router[_0x22bd[22]](_0x22bd[8],auth[_0x22bd[5]](),controller[_0x22bd[23]]);module[_0x22bd[24]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./desk_account.controller');
+var auth = require('../../auth/auth.service');
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), controller.index);
+router.get('/:id', auth.isAuthenticated(), controller.show);
+router.get('/:id/check', auth.isAuthenticated(), controller.checkAccount);
+router.get('/:id/fields', auth.isAuthenticated(), controller.getFields);
+router.post('/validate/:field', auth.isAuthenticated(), controller.deskValidation);
+router.post('/', auth.isAuthenticated(), controller.create);
+router.put('/:id', auth.isAuthenticated(), controller.update);
+router.patch('/:id', auth.isAuthenticated(), controller.update);
+router.delete('/', auth.isAuthenticated(), controller.bulkDestroy);
+router.delete('/:id', auth.isAuthenticated(), controller.destroy);
+
+module.exports = router;
index 5367d3d..3824ca1 100644 (file)
@@ -1 +1,145 @@
-var _0xc4d5=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x44\x65\x73\x6B\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x44\x65\x73\x6B\x46\x69\x65\x6C\x64","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6A\x73\x6F\x6E","\x65\x6E\x64","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x73\x74\x72\x6F\x79","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x71\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x53\x75\x62\x6A\x65\x63\x74","\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x46\x69\x65\x6C\x64","\x66\x69\x6E\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x66\x69\x6E\x64\x42\x79\x49\x64","\x61\x64\x64\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x46\x69\x65\x6C\x64","\x73\x70\x72\x65\x61\x64","\x61\x64\x64\x53\x75\x62\x6A\x65\x63\x74","\x73\x75\x62\x6A\x65\x63\x74","\x61\x64\x64\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x61\x64\x64\x46\x69\x65\x6C\x64","\x66\x69\x65\x6C\x64","\x74\x79\x70\x65"];_0xc4d5[0];var _=require(_0xc4d5[1]);var DeskConfiguration=require(_0xc4d5[3])[_0xc4d5[2]];var DeskField=require(_0xc4d5[3])[_0xc4d5[4]];function handleError(_0x85f4x5,_0x85f4x6){_0x85f4x6=_0x85f4x6||500;return function(_0x85f4x7){_0x85f4x5[_0xc4d5[6]](_0x85f4x6)[_0xc4d5[5]](_0x85f4x7)}}function responseWithResult(_0x85f4x5,_0x85f4x6){_0x85f4x6=_0x85f4x6||200;return function(_0x85f4x9){if(_0x85f4x9){_0x85f4x5[_0xc4d5[6]](_0x85f4x6)[_0xc4d5[7]](_0x85f4x9)}}}function handleEntityNotFound(_0x85f4x5){return function(_0x85f4x9){if(!_0x85f4x9){_0x85f4x5[_0xc4d5[6]](404)[_0xc4d5[8]]();return null};return _0x85f4x9}}function saveUpdates(_0x85f4xc){return function(_0x85f4x9){return _0x85f4x9[_0xc4d5[10]](_0x85f4xc)[_0xc4d5[9]](function(_0x85f4xd){return _0x85f4xd})}}function removeEntity(_0x85f4x5){return function(_0x85f4x9){if(_0x85f4x9){return _0x85f4x9[_0xc4d5[11]]()[_0xc4d5[9]](function(){_0x85f4x5[_0xc4d5[6]](204)[_0xc4d5[8]]()})}}}exports[_0xc4d5[12]]=function(_0x85f4xf,_0x85f4x5){DeskConfiguration[_0xc4d5[15]]({where:_0x85f4xf[_0xc4d5[14]]})[_0xc4d5[9]](responseWithResult(_0x85f4x5))[_0xc4d5[13]](handleError(_0x85f4x5))};exports[_0xc4d5[16]]=function(_0x85f4xf,_0x85f4x5){DeskConfiguration[_0xc4d5[22]]({where:{id:_0x85f4xf[_0xc4d5[18]][_0xc4d5[17]]},include:[{model:DeskField,as:_0xc4d5[19]},{model:DeskField,as:_0xc4d5[20]},{model:DeskField,as:_0xc4d5[21]}]})[_0xc4d5[9]](handleEntityNotFound(_0x85f4x5))[_0xc4d5[9]](responseWithResult(_0x85f4x5))[_0xc4d5[13]](handleError(_0x85f4x5))};exports[_0xc4d5[23]]=function(_0x85f4xf,_0x85f4x5){DeskConfiguration[_0xc4d5[23]](_0x85f4xf[_0xc4d5[24]])[_0xc4d5[9]](responseWithResult(_0x85f4x5,201))[_0xc4d5[13]](handleError(_0x85f4x5))};exports[_0xc4d5[25]]=function(_0x85f4xf,_0x85f4x5){if(_0x85f4xf[_0xc4d5[24]][_0xc4d5[17]]){delete _0x85f4xf[_0xc4d5[24]][_0xc4d5[17]]};DeskConfiguration[_0xc4d5[26]](_0x85f4xf[_0xc4d5[18]][_0xc4d5[17]])[_0xc4d5[9]](handleEntityNotFound(_0x85f4x5))[_0xc4d5[9]](saveUpdates(_0x85f4xf[_0xc4d5[24]]))[_0xc4d5[9]](responseWithResult(_0x85f4x5))[_0xc4d5[13]](handleError(_0x85f4x5))};exports[_0xc4d5[11]]=function(_0x85f4xf,_0x85f4x5){DeskConfiguration[_0xc4d5[26]](_0x85f4xf[_0xc4d5[18]][_0xc4d5[17]])[_0xc4d5[9]](handleEntityNotFound(_0x85f4x5))[_0xc4d5[9]](removeEntity(_0x85f4x5))[_0xc4d5[13]](handleError(_0x85f4x5))};exports[_0xc4d5[27]]=function(_0x85f4xf,_0x85f4x5,_0x85f4x10){var _0x85f4x11;DeskConfiguration[_0xc4d5[26]](_0x85f4xf[_0xc4d5[18]][_0xc4d5[17]])[_0xc4d5[9]](handleEntityNotFound(_0x85f4x5))[_0xc4d5[9]](function(_0x85f4x14){_0x85f4x11=_0x85f4x14;return DeskField[_0xc4d5[23]](_0x85f4xf[_0xc4d5[24]])})[_0xc4d5[9]](function(_0x85f4x13){switch(_0x85f4xf[_0xc4d5[18]][_0xc4d5[35]]){case _0xc4d5[30]:return [_0x85f4x11[_0xc4d5[29]](_0x85f4x13),_0x85f4x13];case _0xc4d5[32]:return [_0x85f4x11[_0xc4d5[31]](_0x85f4x13),_0x85f4x13];case _0xc4d5[34]:return [_0x85f4x11[_0xc4d5[33]](_0x85f4x13),_0x85f4x13]}})[_0xc4d5[28]](function(_0x85f4x12,_0x85f4x13){return _0x85f4x5[_0xc4d5[6]](201)[_0xc4d5[7]](_0x85f4x13)})[_0xc4d5[13]](handleError(_0x85f4x5))}
\ No newline at end of file
+/**
+ * Using Rails-like standard naming convention for endpoints.
+ * GET     /api/desk/configurations              ->  index
+ * POST    /api/desk/configurations              ->  create
+ * GET     /api/desk/configurations/:id          ->  show
+ * PUT     /api/desk/configurations/:id          ->  update
+ * DELETE  /api/desk/configurations/:id          ->  destroy
+ */
+
+'use strict';
+
+var _ = require('lodash');
+
+var DeskConfiguration = require('../../models').DeskConfiguration;
+var DeskField = require('../../models').DeskField;
+
+function handleError(res, statusCode) {
+  statusCode = statusCode || 500;
+  return function(err) {
+    res.status(statusCode).send(err);
+  };
+}
+
+function responseWithResult(res, statusCode) {
+  statusCode = statusCode || 200;
+  return function(entity) {
+    if (entity) {
+      res.status(statusCode).json(entity);
+    }
+  };
+}
+
+function handleEntityNotFound(res) {
+  return function(entity) {
+    if (!entity) {
+      res.status(404).end();
+      return null;
+    }
+    return entity;
+  };
+}
+
+function saveUpdates(updates) {
+  return function(entity) {
+    return entity.updateAttributes(updates)
+      .then(function(updated) {
+        return updated;
+      });
+  };
+}
+
+function removeEntity(res) {
+  return function(entity) {
+    if (entity) {
+      return entity.destroy()
+        .then(function() {
+          res.status(204).end();
+        });
+    }
+  };
+}
+
+// Gets a list of DeskConfigurations
+exports.index = function(req, res) {
+  DeskConfiguration.findAll({
+      where: req.query
+    })
+    .then(responseWithResult(res))
+    .catch(handleError(res));
+}
+
+// Gets a single DeskConfiguration from the DB
+exports.show = function(req, res) {
+  DeskConfiguration.find({
+      where: {
+        id: req.params.id
+      },
+      include: [{
+        model: DeskField,
+        as: 'Subject'
+      }, {
+        model: DeskField,
+        as: 'Description'
+      }, {
+        model: DeskField,
+        as: 'Field'
+      }]
+    })
+    .then(handleEntityNotFound(res))
+    .then(responseWithResult(res))
+    .catch(handleError(res));
+}
+
+// Creates a new DeskConfiguration in the DB
+exports.create = function(req, res) {
+  DeskConfiguration.create(req.body)
+    .then(responseWithResult(res, 201))
+    .catch(handleError(res));
+}
+
+// Updates an existing DeskConfiguration in the DB
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  DeskConfiguration.findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(saveUpdates(req.body))
+    .then(responseWithResult(res))
+    .catch(handleError(res));
+}
+
+// Deletes a DeskConfiguration from the DB
+exports.destroy = function(req, res) {
+  DeskConfiguration.findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(removeEntity(res))
+    .catch(handleError(res));
+}
+
+exports.addConfigurationField = function(req, res, next) {
+  // console.log(req.params);
+  var deskConfiguration;
+  DeskConfiguration
+    .findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(function(desk_configuration) {
+      deskConfiguration = desk_configuration;
+      return DeskField.create(req.body)
+    })
+    .then(function(deskField) {
+      switch (req.params.type) {
+        case 'subject':
+          return [deskConfiguration.addSubject(deskField), deskField];
+        case 'description':
+          return [deskConfiguration.addDescription(deskField), deskField];
+        case 'field':
+          return [deskConfiguration.addField(deskField), deskField];
+      }
+    })
+    .spread(function(data, deskField) {
+      return res.status(201).json(deskField);
+    })
+    .catch(handleError(res));
+};
index 3a34d03..d26e4f6 100644 (file)
@@ -1 +1,24 @@
-var _0x3ac8=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x44\x65\x73\x6B\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x73\x6B\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x64\x65\x73\x6B\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x3A\x72\x65\x6D\x6F\x76\x65"];_0x3ac8[0];var DeskConfiguration=require(_0x3ac8[2])[_0x3ac8[1]];exports[_0x3ac8[3]]=function(_0xcb1fx2){DeskConfiguration[_0x3ac8[4]](function(_0xcb1fx3){onSave(_0xcb1fx2,_0xcb1fx3)});DeskConfiguration[_0x3ac8[5]](function(_0xcb1fx3){onRemove(_0xcb1fx2,_0xcb1fx3)})};function onSave(_0xcb1fx2,_0xcb1fx3,_0xcb1fx5){_0xcb1fx2[_0x3ac8[7]](_0x3ac8[6],_0xcb1fx3)}function onRemove(_0xcb1fx2,_0xcb1fx3,_0xcb1fx5){_0xcb1fx2[_0x3ac8[7]](_0x3ac8[8],_0xcb1fx3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var DeskConfiguration = require('../../models').DeskConfiguration;
+
+exports.register = function(socket) {
+  DeskConfiguration.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  DeskConfiguration.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+};
+
+function onSave(socket, doc, cb) {
+  socket.emit('desk_configuration:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('desk_configuration:remove', doc);
+}
index 719acd1..91adaf0 100644 (file)
@@ -1 +1,19 @@
-var _0xb7db=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x64\x65\x73\x6B\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x2F\x3A\x69\x64\x2F\x3A\x74\x79\x70\x65","\x61\x64\x64\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x46\x69\x65\x6C\x64","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0xb7db[0];var express=require(_0xb7db[1]);var auth=require(_0xb7db[2]);var controller=require(_0xb7db[3]);var router=express.Router();router[_0xb7db[7]](_0xb7db[4],auth[_0xb7db[5]](),controller[_0xb7db[6]]);router[_0xb7db[7]](_0xb7db[8],auth[_0xb7db[5]](),controller[_0xb7db[9]]);router[_0xb7db[11]](_0xb7db[4],auth[_0xb7db[5]](),controller[_0xb7db[10]]);router[_0xb7db[13]](_0xb7db[8],auth[_0xb7db[5]](),controller[_0xb7db[12]]);router[_0xb7db[11]](_0xb7db[14],auth[_0xb7db[5]](),controller[_0xb7db[15]]);router[_0xb7db[16]](_0xb7db[8],auth[_0xb7db[5]](),controller[_0xb7db[12]]);router[_0xb7db[18]](_0xb7db[8],auth[_0xb7db[5]](),controller[_0xb7db[17]]);module[_0xb7db[19]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var auth = require('../../auth/auth.service');
+var controller = require('./desk_configuration.controller');
+
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), controller.index);
+
+router.get('/:id', auth.isAuthenticated(), controller.show);
+router.post('/', auth.isAuthenticated(), controller.create);
+router.put('/:id', auth.isAuthenticated(), controller.update);
+router.post('/:id/:type', auth.isAuthenticated(), controller.addConfigurationField);
+router.patch('/:id', auth.isAuthenticated(), controller.update);
+router.delete('/:id', auth.isAuthenticated(), controller.destroy);
+
+
+module.exports = router;
index a99767d..fd6b650 100644 (file)
@@ -1 +1,97 @@
-var _0xd309=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6E\x6F\x50\x72\x65\x73\x65\x72\x76\x65\x43\x61\x63\x68\x65","\x70\x72\x6F\x78\x79\x71\x75\x69\x72\x65","\x64\x65\x73\x6B\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x43\x74\x72\x6C\x2E\x69\x6E\x64\x65\x78","\x64\x65\x73\x6B\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x43\x74\x72\x6C\x2E\x73\x68\x6F\x77","\x64\x65\x73\x6B\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x43\x74\x72\x6C\x2E\x63\x72\x65\x61\x74\x65","\x64\x65\x73\x6B\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x43\x74\x72\x6C\x2E\x75\x70\x64\x61\x74\x65","\x64\x65\x73\x6B\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x43\x74\x72\x6C\x2E\x64\x65\x73\x74\x72\x6F\x79","\x73\x70\x79","\x2E\x2F\x69\x6E\x64\x65\x78\x2E\x6A\x73","\x44\x65\x73\x6B\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x20\x41\x50\x49\x20\x52\x6F\x75\x74\x65\x72\x3A","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x74\x75\x72\x6E\x20\x61\x6E\x20\x65\x78\x70\x72\x65\x73\x73\x20\x72\x6F\x75\x74\x65\x72\x20\x69\x6E\x73\x74\x61\x6E\x63\x65","\x65\x71\x75\x61\x6C","\x74\x6F","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x64\x65\x73\x6B\x2F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x64\x65\x73\x6B\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x69\x6E\x64\x65\x78","\x63\x61\x6C\x6C\x65\x64\x4F\x6E\x63\x65","\x62\x65\x65\x6E","\x68\x61\x76\x65","\x2F","\x77\x69\x74\x68\x41\x72\x67\x73","\x67\x65\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x64\x65\x73\x6B\x2F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73\x2F\x3A\x69\x64","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x64\x65\x73\x6B\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x73\x68\x6F\x77","\x2F\x3A\x69\x64","\x50\x4F\x53\x54\x20\x2F\x61\x70\x69\x2F\x64\x65\x73\x6B\x2F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x64\x65\x73\x6B\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x50\x55\x54\x20\x2F\x61\x70\x69\x2F\x64\x65\x73\x6B\x2F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73\x2F\x3A\x69\x64","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x64\x65\x73\x6B\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x50\x41\x54\x43\x48\x20\x2F\x61\x70\x69\x2F\x64\x65\x73\x6B\x2F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73\x2F\x3A\x69\x64","\x70\x61\x74\x63\x68","\x44\x45\x4C\x45\x54\x45\x20\x2F\x61\x70\x69\x2F\x64\x65\x73\x6B\x2F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73\x2F\x3A\x69\x64","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x64\x65\x73\x6B\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65"];_0xd309[0];var proxyquire=require(_0xd309[2])[_0xd309[1]]();var deskConfigurationCtrlStub={index:_0xd309[3],show:_0xd309[4],create:_0xd309[5],update:_0xd309[6],destroy:_0xd309[7]};var routerStub={get:sinon[_0xd309[8]](),put:sinon[_0xd309[8]](),patch:sinon[_0xd309[8]](),post:sinon[_0xd309[8]](),delete:sinon[_0xd309[8]]()};var deskConfigurationIndex=proxyquire(_0xd309[9],{"\x65\x78\x70\x72\x65\x73\x73":{Router:function(){return routerStub}},"\x2E\x2F\x64\x65\x73\x6B\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72":deskConfigurationCtrlStub});describe(_0xd309[10],function(){it(_0xd309[11],function(){expect(deskConfigurationIndex)[_0xd309[13]][_0xd309[12]](routerStub)});describe(_0xd309[14],function(){it(_0xd309[15],function(){expect(routerStub[_0xd309[21]][_0xd309[20]](_0xd309[19],_0xd309[3]))[_0xd309[13]][_0xd309[18]][_0xd309[17]][_0xd309[16]]})});describe(_0xd309[22],function(){it(_0xd309[23],function(){expect(routerStub[_0xd309[21]][_0xd309[20]](_0xd309[24],_0xd309[4]))[_0xd309[13]][_0xd309[18]][_0xd309[17]][_0xd309[16]]})});describe(_0xd309[25],function(){it(_0xd309[26],function(){expect(routerStub[_0xd309[27]][_0xd309[20]](_0xd309[19],_0xd309[5]))[_0xd309[13]][_0xd309[18]][_0xd309[17]][_0xd309[16]]})});describe(_0xd309[28],function(){it(_0xd309[29],function(){expect(routerStub[_0xd309[30]][_0xd309[20]](_0xd309[24],_0xd309[6]))[_0xd309[13]][_0xd309[18]][_0xd309[17]][_0xd309[16]]})});describe(_0xd309[31],function(){it(_0xd309[29],function(){expect(routerStub[_0xd309[32]][_0xd309[20]](_0xd309[24],_0xd309[6]))[_0xd309[13]][_0xd309[18]][_0xd309[17]][_0xd309[16]]})});describe(_0xd309[33],function(){it(_0xd309[34],function(){expect(routerStub[_0xd309[35]][_0xd309[20]](_0xd309[24],_0xd309[7]))[_0xd309[13]][_0xd309[18]][_0xd309[17]][_0xd309[16]]})})})
\ No newline at end of file
+'use strict';
+
+var proxyquire = require('proxyquire').noPreserveCache();
+
+var deskConfigurationCtrlStub = {
+  index: 'deskConfigurationCtrl.index',
+  show: 'deskConfigurationCtrl.show',
+  create: 'deskConfigurationCtrl.create',
+  update: 'deskConfigurationCtrl.update',
+  destroy: 'deskConfigurationCtrl.destroy'
+};
+
+var routerStub = {
+  get: sinon.spy(),
+  put: sinon.spy(),
+  patch: sinon.spy(),
+  post: sinon.spy(),
+  delete: sinon.spy()
+};
+
+// require the index with our stubbed out modules
+var deskConfigurationIndex = proxyquire('./index.js', {
+  'express': {
+    Router: function() {
+      return routerStub;
+    }
+  },
+  './desk_configuration.controller': deskConfigurationCtrlStub
+});
+
+describe('DeskConfiguration API Router:', function() {
+
+  it('should return an express router instance', function() {
+    expect(deskConfigurationIndex).to.equal(routerStub);
+  });
+
+  describe('GET /api/desk/configurations', function() {
+
+    it('should route to deskConfiguration.controller.index', function() {
+      expect(routerStub.get
+        .withArgs('/', 'deskConfigurationCtrl.index')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('GET /api/desk/configurations/:id', function() {
+
+    it('should route to deskConfiguration.controller.show', function() {
+      expect(routerStub.get
+        .withArgs('/:id', 'deskConfigurationCtrl.show')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('POST /api/desk/configurations', function() {
+
+    it('should route to deskConfiguration.controller.create', function() {
+      expect(routerStub.post
+        .withArgs('/', 'deskConfigurationCtrl.create')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('PUT /api/desk/configurations/:id', function() {
+
+    it('should route to deskConfiguration.controller.update', function() {
+      expect(routerStub.put
+        .withArgs('/:id', 'deskConfigurationCtrl.update')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('PATCH /api/desk/configurations/:id', function() {
+
+    it('should route to deskConfiguration.controller.update', function() {
+      expect(routerStub.patch
+        .withArgs('/:id', 'deskConfigurationCtrl.update')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('DELETE /api/desk/configurations/:id', function() {
+
+    it('should route to deskConfiguration.controller.destroy', function() {
+      expect(routerStub.delete
+        .withArgs('/:id', 'deskConfigurationCtrl.destroy')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+});
index 57808e7..6b39f83 100644 (file)
@@ -1 +1,104 @@
-var _0x2ad0=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x44\x65\x73\x6B\x46\x69\x65\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6A\x73\x6F\x6E","\x65\x6E\x64","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x73\x74\x72\x6F\x79","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65"];_0x2ad0[0];var _=require(_0x2ad0[1]);var DeskField=require(_0x2ad0[3])[_0x2ad0[2]];function handleError(_0x7280x4,_0x7280x5){_0x7280x5=_0x7280x5||500;return function(_0x7280x6){_0x7280x4[_0x2ad0[5]](_0x7280x5)[_0x2ad0[4]](_0x7280x6)}}function responseWithResult(_0x7280x4,_0x7280x5){_0x7280x5=_0x7280x5||200;return function(_0x7280x8){if(_0x7280x8){_0x7280x4[_0x2ad0[5]](_0x7280x5)[_0x2ad0[6]](_0x7280x8)}}}function handleEntityNotFound(_0x7280x4){return function(_0x7280x8){if(!_0x7280x8){_0x7280x4[_0x2ad0[5]](404)[_0x2ad0[7]]();return null};return _0x7280x8}}function saveUpdates(_0x7280xb){return function(_0x7280x8){return _0x7280x8[_0x2ad0[9]](_0x7280xb)[_0x2ad0[8]](function(_0x7280xc){return _0x7280xc})}}function removeEntity(_0x7280x4){return function(_0x7280x8){if(_0x7280x8){return _0x7280x8[_0x2ad0[10]]()[_0x2ad0[8]](function(){_0x7280x4[_0x2ad0[5]](204)[_0x2ad0[7]]()})}}}exports[_0x2ad0[11]]=function(_0x7280xe,_0x7280x4){DeskField[_0x2ad0[13]]()[_0x2ad0[8]](responseWithResult(_0x7280x4))[_0x2ad0[12]](handleError(_0x7280x4))};exports[_0x2ad0[14]]=function(_0x7280xe,_0x7280x4){DeskField[_0x2ad0[17]](_0x7280xe[_0x2ad0[16]][_0x2ad0[15]])[_0x2ad0[8]](handleEntityNotFound(_0x7280x4))[_0x2ad0[8]](responseWithResult(_0x7280x4))[_0x2ad0[12]](handleError(_0x7280x4))};exports[_0x2ad0[18]]=function(_0x7280xe,_0x7280x4){DeskField[_0x2ad0[18]](_0x7280xe[_0x2ad0[19]])[_0x2ad0[8]](responseWithResult(_0x7280x4,201))[_0x2ad0[12]](handleError(_0x7280x4))};exports[_0x2ad0[20]]=function(_0x7280xe,_0x7280x4){if(_0x7280xe[_0x2ad0[19]][_0x2ad0[15]]){delete _0x7280xe[_0x2ad0[19]][_0x2ad0[15]]};DeskField[_0x2ad0[17]](_0x7280xe[_0x2ad0[16]][_0x2ad0[15]])[_0x2ad0[8]](handleEntityNotFound(_0x7280x4))[_0x2ad0[8]](saveUpdates(_0x7280xe[_0x2ad0[19]]))[_0x2ad0[8]](responseWithResult(_0x7280x4))[_0x2ad0[12]](handleError(_0x7280x4))};exports[_0x2ad0[10]]=function(_0x7280xe,_0x7280x4){DeskField[_0x2ad0[17]](_0x7280xe[_0x2ad0[16]][_0x2ad0[15]])[_0x2ad0[8]](handleEntityNotFound(_0x7280x4))[_0x2ad0[8]](removeEntity(_0x7280x4))[_0x2ad0[12]](handleError(_0x7280x4))}
\ No newline at end of file
+/**
+ * Using Rails-like standard naming convention for endpoints.
+ * GET     /api/desk/fields              ->  index
+ * POST    /api/desk/fields              ->  create
+ * GET     /api/desk/fields/:id          ->  show
+ * PUT     /api/desk/fields/:id          ->  update
+ * DELETE  /api/desk/fields/:id          ->  destroy
+ */
+
+'use strict';
+
+
+var _ = require('lodash');
+
+var DeskField = require('../../models').DeskField;
+
+
+function handleError(res, statusCode) {
+  statusCode = statusCode || 500;
+  return function(err) {
+    res.status(statusCode).send(err);
+  };
+}
+
+function responseWithResult(res, statusCode) {
+  statusCode = statusCode || 200;
+  return function(entity) {
+    if (entity) {
+      res.status(statusCode).json(entity);
+    }
+  };
+}
+
+function handleEntityNotFound(res) {
+  return function(entity) {
+    if (!entity) {
+      res.status(404).end();
+      return null;
+    }
+    return entity;
+  };
+}
+
+function saveUpdates(updates) {
+  return function(entity) {
+    return entity.updateAttributes(updates)
+      .then(function(updated) {
+        return updated;
+      });
+  };
+}
+
+function removeEntity(res) {
+  return function(entity) {
+    if (entity) {
+      return entity.destroy()
+        .then(function() {
+          res.status(204).end();
+        });
+    }
+  };
+}
+
+// Gets a list of DeskFields
+exports.index = function(req, res) {
+  DeskField.findAll()
+    .then(responseWithResult(res))
+    .catch(handleError(res));
+}
+
+// Gets a single DeskField from the DB
+exports.show = function(req, res) {
+  DeskField.findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(responseWithResult(res))
+    .catch(handleError(res));
+}
+
+// Creates a new DeskField in the DB
+exports.create = function(req, res) {
+  DeskField.create(req.body)
+    .then(responseWithResult(res, 201))
+    .catch(handleError(res));
+}
+
+// Updates an existing DeskField in the DB
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  DeskField.findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(saveUpdates(req.body))
+    .then(responseWithResult(res))
+    .catch(handleError(res));
+}
+
+// Deletes a DeskField from the DB
+exports.destroy = function(req, res) {
+  DeskField.findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(removeEntity(res))
+    .catch(handleError(res));
+}
index bd62d16..b01d8f1 100644 (file)
@@ -1 +1,24 @@
-var _0x37fe=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x44\x65\x73\x6B\x46\x69\x65\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x73\x6B\x5F\x66\x69\x65\x6C\x64\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x64\x65\x73\x6B\x5F\x66\x69\x65\x6C\x64\x3A\x72\x65\x6D\x6F\x76\x65"];_0x37fe[0];var DeskField=require(_0x37fe[2])[_0x37fe[1]];exports[_0x37fe[3]]=function(_0x4c2ex2){DeskField[_0x37fe[4]](function(_0x4c2ex3){onSave(_0x4c2ex2,_0x4c2ex3)});DeskField[_0x37fe[5]](function(_0x4c2ex3){onRemove(_0x4c2ex2,_0x4c2ex3)})};function onSave(_0x4c2ex2,_0x4c2ex3,_0x4c2ex5){_0x4c2ex2[_0x37fe[7]](_0x37fe[6],_0x4c2ex3)}function onRemove(_0x4c2ex2,_0x4c2ex3,_0x4c2ex5){_0x4c2ex2[_0x37fe[7]](_0x37fe[8],_0x4c2ex3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var DeskField = require('../../models').DeskField;
+
+exports.register = function(socket) {
+  DeskField.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  DeskField.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+};
+
+function onSave(socket, doc, cb) {
+  socket.emit('desk_field:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('desk_field:remove', doc);
+}
index fe6988e..266676c 100644 (file)
@@ -1 +1,18 @@
-var _0xb2fb=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x64\x65\x73\x6B\x5F\x66\x69\x65\x6C\x64\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0xb2fb[0];var express=require(_0xb2fb[1]);var auth=require(_0xb2fb[2]);var controller=require(_0xb2fb[3]);var router=express.Router();router[_0xb2fb[7]](_0xb2fb[4],auth[_0xb2fb[5]](),controller[_0xb2fb[6]]);router[_0xb2fb[7]](_0xb2fb[8],auth[_0xb2fb[5]](),controller[_0xb2fb[9]]);router[_0xb2fb[11]](_0xb2fb[4],auth[_0xb2fb[5]](),controller[_0xb2fb[10]]);router[_0xb2fb[13]](_0xb2fb[8],auth[_0xb2fb[5]](),controller[_0xb2fb[12]]);router[_0xb2fb[14]](_0xb2fb[8],auth[_0xb2fb[5]](),controller[_0xb2fb[12]]);router[_0xb2fb[16]](_0xb2fb[8],auth[_0xb2fb[5]](),controller[_0xb2fb[15]]);module[_0xb2fb[17]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var auth = require('../../auth/auth.service');
+var controller = require('./desk_field.controller');
+
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), controller.index);
+
+router.get('/:id', auth.isAuthenticated(), controller.show);
+router.post('/', auth.isAuthenticated(), controller.create);
+router.put('/:id', auth.isAuthenticated(), controller.update);
+router.patch('/:id', auth.isAuthenticated(), controller.update);
+router.delete('/:id', auth.isAuthenticated(), controller.destroy);
+
+
+module.exports = router;
index c6c5c44..fef888c 100644 (file)
@@ -1 +1,97 @@
-var _0x985e=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6E\x6F\x50\x72\x65\x73\x65\x72\x76\x65\x43\x61\x63\x68\x65","\x70\x72\x6F\x78\x79\x71\x75\x69\x72\x65","\x64\x65\x73\x6B\x46\x69\x65\x6C\x64\x43\x74\x72\x6C\x2E\x69\x6E\x64\x65\x78","\x64\x65\x73\x6B\x46\x69\x65\x6C\x64\x43\x74\x72\x6C\x2E\x73\x68\x6F\x77","\x64\x65\x73\x6B\x46\x69\x65\x6C\x64\x43\x74\x72\x6C\x2E\x63\x72\x65\x61\x74\x65","\x64\x65\x73\x6B\x46\x69\x65\x6C\x64\x43\x74\x72\x6C\x2E\x75\x70\x64\x61\x74\x65","\x64\x65\x73\x6B\x46\x69\x65\x6C\x64\x43\x74\x72\x6C\x2E\x64\x65\x73\x74\x72\x6F\x79","\x73\x70\x79","\x2E\x2F\x69\x6E\x64\x65\x78\x2E\x6A\x73","\x44\x65\x73\x6B\x46\x69\x65\x6C\x64\x20\x41\x50\x49\x20\x52\x6F\x75\x74\x65\x72\x3A","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x74\x75\x72\x6E\x20\x61\x6E\x20\x65\x78\x70\x72\x65\x73\x73\x20\x72\x6F\x75\x74\x65\x72\x20\x69\x6E\x73\x74\x61\x6E\x63\x65","\x65\x71\x75\x61\x6C","\x74\x6F","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x64\x65\x73\x6B\x2F\x66\x69\x65\x6C\x64\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x64\x65\x73\x6B\x46\x69\x65\x6C\x64\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x69\x6E\x64\x65\x78","\x63\x61\x6C\x6C\x65\x64\x4F\x6E\x63\x65","\x62\x65\x65\x6E","\x68\x61\x76\x65","\x2F","\x77\x69\x74\x68\x41\x72\x67\x73","\x67\x65\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x64\x65\x73\x6B\x2F\x66\x69\x65\x6C\x64\x73\x2F\x3A\x69\x64","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x64\x65\x73\x6B\x46\x69\x65\x6C\x64\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x73\x68\x6F\x77","\x2F\x3A\x69\x64","\x50\x4F\x53\x54\x20\x2F\x61\x70\x69\x2F\x64\x65\x73\x6B\x2F\x66\x69\x65\x6C\x64\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x64\x65\x73\x6B\x46\x69\x65\x6C\x64\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x50\x55\x54\x20\x2F\x61\x70\x69\x2F\x64\x65\x73\x6B\x2F\x66\x69\x65\x6C\x64\x73\x2F\x3A\x69\x64","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x64\x65\x73\x6B\x46\x69\x65\x6C\x64\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x50\x41\x54\x43\x48\x20\x2F\x61\x70\x69\x2F\x64\x65\x73\x6B\x2F\x66\x69\x65\x6C\x64\x73\x2F\x3A\x69\x64","\x70\x61\x74\x63\x68","\x44\x45\x4C\x45\x54\x45\x20\x2F\x61\x70\x69\x2F\x64\x65\x73\x6B\x2F\x66\x69\x65\x6C\x64\x73\x2F\x3A\x69\x64","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x64\x65\x73\x6B\x46\x69\x65\x6C\x64\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65"];_0x985e[0];var proxyquire=require(_0x985e[2])[_0x985e[1]]();var deskFieldCtrlStub={index:_0x985e[3],show:_0x985e[4],create:_0x985e[5],update:_0x985e[6],destroy:_0x985e[7]};var routerStub={get:sinon[_0x985e[8]](),put:sinon[_0x985e[8]](),patch:sinon[_0x985e[8]](),post:sinon[_0x985e[8]](),delete:sinon[_0x985e[8]]()};var deskFieldIndex=proxyquire(_0x985e[9],{"\x65\x78\x70\x72\x65\x73\x73":{Router:function(){return routerStub}},"\x2E\x2F\x64\x65\x73\x6B\x5F\x66\x69\x65\x6C\x64\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72":deskFieldCtrlStub});describe(_0x985e[10],function(){it(_0x985e[11],function(){expect(deskFieldIndex)[_0x985e[13]][_0x985e[12]](routerStub)});describe(_0x985e[14],function(){it(_0x985e[15],function(){expect(routerStub[_0x985e[21]][_0x985e[20]](_0x985e[19],_0x985e[3]))[_0x985e[13]][_0x985e[18]][_0x985e[17]][_0x985e[16]]})});describe(_0x985e[22],function(){it(_0x985e[23],function(){expect(routerStub[_0x985e[21]][_0x985e[20]](_0x985e[24],_0x985e[4]))[_0x985e[13]][_0x985e[18]][_0x985e[17]][_0x985e[16]]})});describe(_0x985e[25],function(){it(_0x985e[26],function(){expect(routerStub[_0x985e[27]][_0x985e[20]](_0x985e[19],_0x985e[5]))[_0x985e[13]][_0x985e[18]][_0x985e[17]][_0x985e[16]]})});describe(_0x985e[28],function(){it(_0x985e[29],function(){expect(routerStub[_0x985e[30]][_0x985e[20]](_0x985e[24],_0x985e[6]))[_0x985e[13]][_0x985e[18]][_0x985e[17]][_0x985e[16]]})});describe(_0x985e[31],function(){it(_0x985e[29],function(){expect(routerStub[_0x985e[32]][_0x985e[20]](_0x985e[24],_0x985e[6]))[_0x985e[13]][_0x985e[18]][_0x985e[17]][_0x985e[16]]})});describe(_0x985e[33],function(){it(_0x985e[34],function(){expect(routerStub[_0x985e[35]][_0x985e[20]](_0x985e[24],_0x985e[7]))[_0x985e[13]][_0x985e[18]][_0x985e[17]][_0x985e[16]]})})})
\ No newline at end of file
+'use strict';
+
+var proxyquire = require('proxyquire').noPreserveCache();
+
+var deskFieldCtrlStub = {
+  index: 'deskFieldCtrl.index',
+  show: 'deskFieldCtrl.show',
+  create: 'deskFieldCtrl.create',
+  update: 'deskFieldCtrl.update',
+  destroy: 'deskFieldCtrl.destroy'
+};
+
+var routerStub = {
+  get: sinon.spy(),
+  put: sinon.spy(),
+  patch: sinon.spy(),
+  post: sinon.spy(),
+  delete: sinon.spy()
+};
+
+// require the index with our stubbed out modules
+var deskFieldIndex = proxyquire('./index.js', {
+  'express': {
+    Router: function() {
+      return routerStub;
+    }
+  },
+  './desk_field.controller': deskFieldCtrlStub
+});
+
+describe('DeskField API Router:', function() {
+
+  it('should return an express router instance', function() {
+    expect(deskFieldIndex).to.equal(routerStub);
+  });
+
+  describe('GET /api/desk/fields', function() {
+
+    it('should route to deskField.controller.index', function() {
+      expect(routerStub.get
+        .withArgs('/', 'deskFieldCtrl.index')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('GET /api/desk/fields/:id', function() {
+
+    it('should route to deskField.controller.show', function() {
+      expect(routerStub.get
+        .withArgs('/:id', 'deskFieldCtrl.show')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('POST /api/desk/fields', function() {
+
+    it('should route to deskField.controller.create', function() {
+      expect(routerStub.post
+        .withArgs('/', 'deskFieldCtrl.create')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('PUT /api/desk/fields/:id', function() {
+
+    it('should route to deskField.controller.update', function() {
+      expect(routerStub.put
+        .withArgs('/:id', 'deskFieldCtrl.update')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('PATCH /api/desk/fields/:id', function() {
+
+    it('should route to deskField.controller.update', function() {
+      expect(routerStub.patch
+        .withArgs('/:id', 'deskFieldCtrl.update')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('DELETE /api/desk/fields/:id', function() {
+
+    it('should route to deskField.controller.destroy', function() {
+      expect(routerStub.delete
+        .withArgs('/:id', 'deskFieldCtrl.destroy')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+});
index 165a970..3d57d37 100644 (file)
@@ -1 +1,197 @@
-var _0x155e=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x45\x78\x74\x72\x61\x63\x74\x65\x64\x52\x65\x70\x6F\x72\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x75\x74\x69\x6C","\x70\x61\x74\x68","\x6D\x6F\x6D\x65\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x66\x69\x6C\x65\x2D\x62\x61\x73\x65\x36\x34","\x66\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x64\x6F\x77\x6E\x6C\x6F\x61\x64","\x6C\x6F\x67","\x72\x6F\x6F\x74","\x73\x65\x72\x76\x65\x72","\x66\x69\x6C\x65\x73","\x72\x65\x70\x6F\x72\x74\x73","\x73\x61\x76\x65\x6E\x61\x6D\x65","\x6A\x6F\x69\x6E","\x65\x6E\x63\x6F\x64\x65","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x6E\x61\x6D\x65","\x66\x69\x6E\x64\x41\x6C\x6C","\x64\x65\x73\x74\x72\x6F\x79","\x52\x5F\x4F\x4B","\x57\x5F\x4F\x4B","\x46\x69\x6C\x65\x20\x64\x6F\x65\x73\x20\x6E\x6F\x74\x20\x65\x78\x69\x73\x74\x20\x6F\x72\x20\x6F\x70\x65\x72\x61\x74\x69\x6F\x6E\x20\x6E\x6F\x74\x20\x70\x65\x72\x6D\x69\x74\x74\x65\x64","\x65\x72\x72\x6F\x72","\x65\x72\x72\x6F\x72\x20\x64\x65\x6C\x65\x74\x69\x6E\x67\x20\x66\x69\x6C\x65\x20\x3A","\x66\x69\x6C\x65\x20\x64\x65\x6C\x65\x74\x65\x64","\x75\x6E\x6C\x69\x6E\x6B","\x61\x63\x63\x65\x73\x73","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x66\x6F\x72\x45\x61\x63\x68","\x69\x64\x73"];_0x155e[0];var _=require(_0x155e[1]);var ExtractedReport=require(_0x155e[3])[_0x155e[2]];var util=require(_0x155e[4]);var path=require(_0x155e[5]);var moment=require(_0x155e[6]);var config=require(_0x155e[7]);var base64=require(_0x155e[8]);var fs=require(_0x155e[9]);var Util=require(_0x155e[10]);exports[_0x155e[11]]=function(_0x9292xa,_0x9292xb,_0x9292xc){return ExtractedReport[_0x155e[18]](Util[_0x155e[17]](_0x9292xa[_0x155e[16]]))[_0x155e[15]](function(_0x9292xe){_0x9292xb[_0x155e[14]](200)[_0x155e[13]](_0x9292xe)})[_0x155e[12]](function(_0x9292xd){return handleError(_0x9292xb,_0x9292xd)})};exports[_0x155e[19]]=function(_0x9292xa,_0x9292xb){ExtractedReport[_0x155e[23]](_0x9292xa[_0x155e[22]][_0x155e[21]])[_0x155e[15]](function(_0x9292xf){if(!_0x9292xf){return _0x9292xb[_0x155e[20]](404)};return _0x9292xb[_0x155e[13]](_0x9292xf)})[_0x155e[12]](function(_0x9292xd){return handleError(_0x9292xb,_0x9292xd)})};exports[_0x155e[24]]=function(_0x9292xa,_0x9292xb){ExtractedReport[_0x155e[23]](_0x9292xa[_0x155e[22]][_0x155e[21]])[_0x155e[15]](function(_0x9292x10){if(!_0x9292x10){return _0x9292xb[_0x155e[14]](404)[_0x155e[13]](_0x9292x10)};var _0x9292x11=path[_0x155e[31]](config[_0x155e[26]],_0x155e[27],_0x155e[28],_0x155e[29],_0x9292x10[_0x155e[30]]);base64[_0x155e[32]](_0x9292x11,function(_0x9292xd,_0x9292x12){if(_0x9292xd){console[_0x155e[25]](_0x9292xd);return handleError(_0x9292xb,_0x9292xd)}else {return _0x9292xb[_0x155e[14]](200)[_0x155e[13]]({downloadString:_0x9292x12})}})})[_0x155e[12]](function(_0x9292xd){console[_0x155e[25]](_0x9292xd);return handleError(_0x9292xb,_0x9292xd)})};exports[_0x155e[33]]=function(_0x9292xa,_0x9292xb){ExtractedReport[_0x155e[33]](_0x9292xa[_0x155e[34]])[_0x155e[15]](function(_0x9292xf){return _0x9292xb[_0x155e[14]](201)[_0x155e[13]](_0x9292xf)})[_0x155e[12]](function(_0x9292xd){return handleError(_0x9292xb,_0x9292xd)})};exports[_0x155e[35]]=function(_0x9292xa,_0x9292xb){ExtractedReport[_0x155e[39]]({where:{name:_0x9292xa[_0x155e[34]][_0x155e[38]],id:{$ne:_0x9292xa[_0x155e[34]][_0x155e[21]]}}})[_0x155e[15]](function(_0x9292x13){if(!_0x9292x13){return _0x9292xb[_0x155e[20]](404)};if(_0x9292xa[_0x155e[34]][_0x155e[21]]){delete _0x9292xa[_0x155e[34]][_0x155e[21]]};ExtractedReport[_0x155e[23]](_0x9292xa[_0x155e[22]][_0x155e[21]])[_0x155e[15]](function(_0x9292xf){if(!_0x9292xf){return _0x9292xb[_0x155e[20]](404)};var _0x9292x14=_[_0x155e[36]](_0x9292xf,_0x9292xa[_0x155e[34]]);_0x9292x14[_0x155e[37]]()[_0x155e[15]](function(){return _0x9292xb[_0x155e[14]](200)[_0x155e[13]](_0x9292xf)})[_0x155e[12]](function(_0x9292xd){return handleError(_0x9292xb,_0x9292xd)})})[_0x155e[12]](function(_0x9292xd){return handleError(_0x9292xb,_0x9292xd)})})[_0x155e[12]](function(_0x9292xd){return handleError(_0x9292xb,_0x9292xd)})};exports[_0x155e[40]]=function(_0x9292xa,_0x9292xb){var _0x9292x15;ExtractedReport[_0x155e[23]](_0x9292xa[_0x155e[22]][_0x155e[21]])[_0x155e[15]](function(_0x9292xf){_0x9292x15=_0x9292xf;if(!_0x9292xf){return _0x9292xb[_0x155e[20]](404)};return _0x9292xf[_0x155e[40]]()})[_0x155e[15]](function(){if(_0x9292x15[_0x155e[30]]){var _0x9292x11=path[_0x155e[31]](config[_0x155e[26]],_0x155e[27],_0x155e[28],_0x155e[29],_0x9292x15[_0x155e[30]]);fs[_0x155e[48]](_0x9292x11,fs[_0x155e[41]]|fs[_0x155e[42]],function(_0x9292xd){if(_0x9292xd){console[_0x155e[44]](_0x155e[43])}else {fs[_0x155e[47]](_0x9292x11,function(_0x9292xd){if(_0x9292xd){console[_0x155e[44]](_0x155e[45],_0x9292xd)}else {console[_0x155e[25]](_0x155e[46])}})}})};return _0x9292xb[_0x155e[20]](204)})[_0x155e[12]](function(_0x9292xd){console[_0x155e[25]](_0x9292xd);return handleError(_0x9292xb,_0x9292xd)})};exports[_0x155e[49]]=function(_0x9292xa,_0x9292xb){ExtractedReport[_0x155e[39]]({where:{id:_0x9292xa[_0x155e[16]][_0x155e[51]]}})[_0x155e[15]](function(_0x9292x16){_0x9292x16[_0x155e[50]](function(_0x9292xf){_0x9292xf[_0x155e[40]]()[_0x155e[15]](function(){if(_0x9292xf[_0x155e[30]]){var _0x9292x11=path[_0x155e[31]](config[_0x155e[26]],_0x155e[27],_0x155e[28],_0x155e[29],_0x9292xf[_0x155e[30]]);fs[_0x155e[48]](_0x9292x11,fs[_0x155e[41]]|fs[_0x155e[42]],function(_0x9292xd){if(_0x9292xd){console[_0x155e[44]](_0x155e[43])}else {fs[_0x155e[47]](_0x9292x11,function(_0x9292xd){if(_0x9292xd){console[_0x155e[44]](_0x155e[45],_0x9292xd)}else {console[_0x155e[25]](_0x155e[46])}})}})}})[_0x155e[12]](function(_0x9292xd){console[_0x155e[25]](_0x9292xd)})});return _0x9292xb[_0x155e[20]](204)})[_0x155e[12]](function(_0x9292xd){return handleError(_0x9292xb,_0x9292xd)})};function handleError(_0x9292xb,_0x9292xd){return _0x9292xb[_0x155e[14]](500)[_0x155e[13]](_0x9292xd)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var ExtractedReport = require('../../models').ExtractedReport;
+var util = require('util');
+var path = require('path');
+var moment = require('moment');
+var config = require('../../config/environment');
+var base64 = require('file-base64');
+var fs = require('fs');
+var Util = require('../../config/util');
+
+// Get list of extracted_reports
+exports.index = function(req, res, next) {
+  return ExtractedReport
+    .findAndCountAll(Util.getQuery(req.query))
+    .then(function(result) {
+      res.status(200).send(result);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single extracted_reports
+exports.show = function(req, res) {
+  ExtractedReport
+    .findById(req.params.id)
+    .then(function(extracted) {
+      if (!extracted) {
+        return res.sendStatus(404);
+      }
+      return res.send(extracted);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+exports.download = function(req, res) {
+  ExtractedReport
+    .findById(req.params.id)
+    .then(function(extract) {
+      if (!extract) {
+        return res.status(404).send(extract);
+      }
+      var filepath = path.join(config.root, 'server', 'files', 'reports', extract.savename);
+      base64.encode(filepath, function(err, base64String) {
+        if (err) {
+          console.log(err);
+          return handleError(res, err);
+        } else {
+          return res.status(200).send({
+            downloadString: base64String
+          });
+        }
+      });
+    })
+    .catch(function(err) {
+      console.log(err);
+      return handleError(res, err);
+    });
+};
+
+// Creates a new extracted_report in the DB.
+exports.create = function(req, res) {
+  ExtractedReport
+    .create(req.body)
+    .then(function(extracted) {
+      return res.status(201).send(extracted);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Updates an existing extracted_report in the DB.
+exports.update = function(req, res) {
+  ExtractedReport
+    .findAll({
+      where: {
+        name: req.body.name,
+        id: {
+          $ne: req.body.id
+        }
+      }
+    })
+    .then(function(extracted_reports) {
+      if (!extracted_reports) {
+        return res.sendStatus(404);
+      }
+      if (req.body.id) {
+        delete req.body.id;
+      }
+      ExtractedReport
+        .findById(req.params.id)
+        .then(function(extracted) {
+          if (!extracted) {
+            return res.sendStatus(404);
+          }
+          var updated = _.merge(extracted, req.body);
+          updated.save()
+            .then(function() {
+              return res.status(200).send(extracted);
+            })
+            .catch(function(err) {
+              return handleError(res, err);
+            });
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes an extracted_report from the DB.
+exports.destroy = function(req, res) {
+  var _extracted;
+  ExtractedReport
+    .findById(req.params.id)
+    .then(function(extracted) {
+      _extracted = extracted;
+      if (!extracted) {
+        return res.sendStatus(404);
+      }
+      return extracted.destroy();
+    })
+    .then(function() {
+      if (_extracted.savename) {
+        var filepath = path.join(config.root, 'server', 'files', 'reports', _extracted.savename);
+        fs.access(filepath, fs.R_OK | fs.W_OK, function(err) {
+          if (err) {
+            console.error('File does not exist or operation not permitted');
+          } else {
+            fs.unlink(filepath, function(err) {
+              if (err) {
+                console.error('error deleting file :', err);
+              } else {
+                console.log('file deleted');
+              }
+            })
+          }
+        });
+      }
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      console.log(err);
+      return handleError(res, err);
+    });
+};
+
+exports.bulkDestroy = function(req, res) {
+  ExtractedReport
+    .findAll({
+      where: {
+        id: req.query.ids
+      }
+    })
+    .then(function(extracts) {
+      extracts.forEach(function(extracted) {
+        extracted.destroy()
+          .then(function() {
+            if (extracted.savename) {
+              var filepath = path.join(config.root, 'server', 'files', 'reports', extracted.savename);
+              fs.access(filepath, fs.R_OK | fs.W_OK, function(err) {
+                if (err) {
+                  console.error('File does not exist or operation not permitted');
+                } else {
+                  fs.unlink(filepath, function(err) {
+                    if (err) {
+                      console.error('error deleting file :', err);
+                    } else {
+                      console.log('file deleted');
+                    }
+                  })
+                }
+              });
+            }
+          })
+          .catch(function(err) {
+            console.log(err);
+          });
+      });
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index 36143b3..faf3482 100644 (file)
@@ -1 +1,24 @@
-var _0x7760=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x45\x78\x74\x72\x61\x63\x74\x65\x64\x52\x65\x70\x6F\x72\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x65\x78\x74\x72\x61\x63\x74\x65\x64\x5F\x72\x65\x70\x6F\x72\x74\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x65\x78\x74\x72\x61\x63\x74\x65\x64\x5F\x72\x65\x70\x6F\x72\x74\x3A\x72\x65\x6D\x6F\x76\x65"];_0x7760[0];var ExtractedReport=require(_0x7760[2])[_0x7760[1]];exports[_0x7760[3]]=function(_0x7d9ex2){ExtractedReport[_0x7760[4]](function(_0x7d9ex3){onSave(_0x7d9ex2,_0x7d9ex3)});ExtractedReport[_0x7760[5]](function(_0x7d9ex3){onRemove(_0x7d9ex2,_0x7d9ex3)})};function onSave(_0x7d9ex2,_0x7d9ex3,_0x7d9ex5){_0x7d9ex2[_0x7760[7]](_0x7760[6],_0x7d9ex3)}function onRemove(_0x7d9ex2,_0x7d9ex3,_0x7d9ex5){_0x7d9ex2[_0x7760[7]](_0x7760[8],_0x7d9ex3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var ExtractedReport = require('../../models').ExtractedReport;
+
+exports.register = function(socket) {
+  ExtractedReport.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  ExtractedReport.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('extracted_report:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('extracted_report:remove', doc);
+}
index d82b009..0830865 100644 (file)
@@ -1 +1,20 @@
-var _0x6df1=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x73\x68\x6F\x75\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x70\x70","\x73\x75\x70\x65\x72\x74\x65\x73\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x61\x6E\x61\x6C\x79\x74\x69\x63\x73\x2F\x65\x78\x74\x72\x61\x63\x74\x65\x64","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x70\x6F\x6E\x64\x20\x77\x69\x74\x68\x20\x4A\x53\x4F\x4E\x20\x61\x72\x72\x61\x79","\x69\x6E\x73\x74\x61\x6E\x63\x65\x6F\x66","\x62\x65","\x62\x6F\x64\x79","\x65\x6E\x64","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x65\x78\x70\x65\x63\x74","\x2F\x61\x70\x69\x2F\x61\x6E\x61\x6C\x79\x74\x69\x63\x73\x2F\x65\x78\x74\x72\x61\x63\x74\x65\x64","\x67\x65\x74"];_0x6df1[0];var should=require(_0x6df1[1]);var app=require(_0x6df1[2]);var request=require(_0x6df1[3]);describe(_0x6df1[4],function(){it(_0x6df1[5],function(_0x2c69x4){request(app)[_0x6df1[13]](_0x6df1[12])[_0x6df1[11]](200)[_0x6df1[11]](_0x6df1[10],/json/)[_0x6df1[9]](function(_0x2c69x5,_0x2c69x6){if(_0x2c69x5){return _0x2c69x4(_0x2c69x5)};_0x2c69x6[_0x6df1[8]][_0x6df1[1]][_0x6df1[7]][_0x6df1[6]](Array);_0x2c69x4()})})})
\ No newline at end of file
+'use strict';
+
+var should = require('should');
+var app = require('../../app');
+var request = require('supertest');
+
+describe('GET /api/analytics/extracted', function() {
+
+  it('should respond with JSON array', function(done) {
+    request(app)
+      .get('/api/analytics/extracted')
+      .expect(200)
+      .expect('Content-Type', /json/)
+      .end(function(err, res) {
+        if (err) return done(err);
+        res.body.should.be.instanceof(Array);
+        done();
+      });
+  });
+});
index 2418f60..21b8e1c 100644 (file)
@@ -1 +1,18 @@
-var _0x53c7=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x65\x78\x74\x72\x61\x63\x74\x65\x64\x5F\x72\x65\x70\x6F\x72\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64\x2F\x64\x6F\x77\x6E\x6C\x6F\x61\x64","\x64\x6F\x77\x6E\x6C\x6F\x61\x64","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0x53c7[0];var express=require(_0x53c7[1]);var controller=require(_0x53c7[2]);var auth=require(_0x53c7[3]);var router=express.Router();router[_0x53c7[7]](_0x53c7[4],auth[_0x53c7[5]](),controller[_0x53c7[6]]);router[_0x53c7[7]](_0x53c7[8],auth[_0x53c7[5]](),controller[_0x53c7[9]]);router[_0x53c7[7]](_0x53c7[10],auth[_0x53c7[5]](),controller[_0x53c7[11]]);router[_0x53c7[13]](_0x53c7[4],auth[_0x53c7[5]](),controller[_0x53c7[12]]);router[_0x53c7[15]](_0x53c7[10],auth[_0x53c7[5]](),controller[_0x53c7[14]]);router[_0x53c7[16]](_0x53c7[10],auth[_0x53c7[5]](),controller[_0x53c7[14]]);router[_0x53c7[18]](_0x53c7[4],auth[_0x53c7[5]](),controller[_0x53c7[17]]);router[_0x53c7[18]](_0x53c7[10],auth[_0x53c7[5]](),controller[_0x53c7[19]]);module[_0x53c7[20]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./extracted_report.controller');
+var auth = require('../../auth/auth.service');
+
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), controller.index);
+router.get('/:id/download', auth.isAuthenticated(), controller.download);
+router.get('/:id', auth.isAuthenticated(), controller.show);
+router.post('/', auth.isAuthenticated(), controller.create);
+router.put('/:id', auth.isAuthenticated(), controller.update);
+router.patch('/:id', auth.isAuthenticated(), controller.update);
+router.delete('/', auth.isAuthenticated(), controller.bulkDestroy);
+router.delete('/:id', auth.isAuthenticated(), controller.destroy);
+
+module.exports = router;
index 7b00e78..d550303 100644 (file)
@@ -1 +1,374 @@
-var _0x7a69=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x61\x73\x79\x6E\x63","\x54\x72\x75\x6E\x6B","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x46\x61\x78\x41\x63\x63\x6F\x75\x6E\x74","\x46\x61\x78\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x56\x6F\x69\x63\x65\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x69\x6E\x64\x65\x78","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x6E\x61\x6D\x65","\x70\x68\x6F\x6E\x65","\x70\x65\x72\x5F\x70\x61\x67\x65","\x71\x75\x65\x72\x79","\x70\x61\x67\x65","\x6F\x72\x64\x65\x72","\x25\x73\x20\x25\x73","\x73\x6F\x72\x74\x5F\x62\x79","\x73\x6F\x72\x74\x5F\x6F\x72\x64\x65\x72","\x41\x53\x43","\x66\x6F\x72\x6D\x61\x74","\x24\x6F\x72","\x77\x68\x65\x72\x65","\x25","\x70\x75\x73\x68","\x66\x6F\x72\x45\x61\x63\x68","\x24","\x24\x6C\x69\x6B\x65","\x66\x6F\x72\x49\x6E","\x53\x6F\x6D\x65\x74\x68\x69\x6E\x67\x20\x62\x6C\x65\x77\x20\x75\x70\x21","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x63\x61\x74\x63\x68","\x63\x6F\x75\x6E\x74","\x63\x65\x69\x6C","\x6F\x66\x66\x73\x65\x74","\x25\x73\x3A\x2F\x2F\x25\x73\x25\x73\x3F\x70\x61\x67\x65\x3D\x25\x64","\x70\x72\x6F\x74\x6F\x63\x6F\x6C","\x68\x6F\x73\x74","\x68\x65\x61\x64\x65\x72\x73","\x62\x61\x73\x65\x55\x72\x6C","\x72\x6F\x77\x73","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x63\x6F\x6E\x74\x65\x78\x74","\x47\x6F\x74\x6F","\x69\x6E\x62\x6F\x75\x6E\x64\x2D\x66\x61\x78\x2C\x73\x2C\x31","\x69\x6E\x62\x6F\x75\x6E\x64\x2D\x66\x61\x78","\x6C\x6F\x67","\x72\x6F\x6C\x6C\x62\x61\x63\x6B","\x6F\x6B","\x63\x6F\x6D\x6D\x69\x74","\x77\x61\x74\x65\x72\x66\x61\x6C\x6C","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E","\x75\x70\x64\x61\x74\x65","\x66\x69\x6E\x64\x4F\x6E\x65","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x76\x6F\x69\x63\x65\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E\x20\x65\x64\x69\x74\x65\x64","\x55\x73\x65\x72\x49\x64","\x6D\x65\x72\x67\x65","\x66\x61\x78\x41\x63\x63\x6F\x75\x6E\x74\x20\x73\x61\x76\x65\x64","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79","\x66\x69\x6E\x64","\x61\x64\x64\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x6C\x65\x6E\x67\x74\x68","\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x70\x72\x69\x6F\x72\x69\x74\x79","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x62\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x66\x69\x6E\x64\x41\x6C\x6C","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79"];_0x7a69[0];var _=require(_0x7a69[1]);var util=require(_0x7a69[2]);var async=require(_0x7a69[3]);var Trunk=require(_0x7a69[5])[_0x7a69[4]];var FaxAccount=require(_0x7a69[5])[_0x7a69[6]];var FaxApplication=require(_0x7a69[5])[_0x7a69[7]];var VoiceExtension=require(_0x7a69[5])[_0x7a69[8]];var sequelize=require(_0x7a69[5])[_0x7a69[9]];exports[_0x7a69[10]]=function(_0xef6ex9,_0xef6exa,_0xef6exb){var _0xef6exc=[_0x7a69[11],_0x7a69[12],_0x7a69[13]];var _0xef6exd=_0xef6ex9[_0x7a69[15]][_0x7a69[14]]?parseInt(_0xef6ex9[_0x7a69[15]][_0x7a69[14]],10):100;var _0xef6exe=_0xef6ex9[_0x7a69[15]][_0x7a69[16]]?parseInt(_0xef6ex9[_0x7a69[15]][_0x7a69[16]],10):0;var _0xef6exf={where:{},limit:_0xef6exd,offset:_0xef6exe*_0xef6exd};_[_0x7a69[30]](_0xef6ex9[_0x7a69[15]],function(_0xef6ex10,_0xef6ex11){switch(_0xef6ex11){case _0x7a69[14]:;case _0x7a69[16]:break;case _0x7a69[19]:_0xef6exf[_0x7a69[17]]=util[_0x7a69[22]](_0x7a69[18],_0xef6ex9[_0x7a69[15]][_0x7a69[19]],_0xef6ex9[_0x7a69[15]][_0x7a69[20]]||_0x7a69[21])||null;break;case _0x7a69[20]:break;case _0x7a69[28]:_0xef6exf[_0x7a69[24]][_0x7a69[23]]=[];_0xef6exc[_0x7a69[27]](function(_0xef6ex12){var _0xef6ex13={};_0xef6ex13[_0xef6ex12]={$like:_0x7a69[25]+_0xef6ex10+_0x7a69[25]};_0xef6exf[_0x7a69[24]][_0x7a69[23]][_0x7a69[26]](_0xef6ex13)});break;default:_0xef6exf[_0x7a69[24]][_0xef6ex11]={$like:{}};_0xef6exf[_0x7a69[24]][_0xef6ex11][_0x7a69[29]]=_0x7a69[25]+_0xef6ex10+_0x7a69[25]}});FaxAccount[_0x7a69[45]](_0xef6exf)[_0x7a69[44]](function(_0xef6ex15){var _0xef6ex16=Math[_0x7a69[36]](_0xef6ex15[_0x7a69[35]]/_0xef6exd);var _0xef6ex17=_0xef6ex16>(_0xef6exf[_0x7a69[37]]+1)?util[_0x7a69[22]](_0x7a69[38],_0xef6ex9[_0x7a69[39]],_0xef6ex9[_0x7a69[41]][_0x7a69[40]],_0xef6ex9[_0x7a69[42]],_0xef6exe+1):null;var _0xef6ex18=_0xef6exe>0?util[_0x7a69[22]](_0x7a69[38],_0xef6ex9[_0x7a69[39]],_0xef6ex9[_0x7a69[41]][_0x7a69[40]],_0xef6ex9[_0x7a69[42]],_0xef6exe-1):null;_0xef6exa[_0x7a69[33]](200)[_0x7a69[32]]({count:_0xef6ex15[_0x7a69[35]],rows:_0xef6ex15[_0x7a69[43]],next_page:_0xef6ex17,previous_page:_0xef6ex18,total_pages:_0xef6ex16})})[_0x7a69[34]](function(_0xef6ex14){_0xef6exa[_0x7a69[33]](500)[_0x7a69[32]]({error:_0x7a69[31]})})};exports[_0x7a69[46]]=function(_0xef6ex9,_0xef6exa,_0xef6exb){FaxAccount[_0x7a69[50]](_0xef6ex9[_0x7a69[49]][_0x7a69[48]])[_0x7a69[44]](function(_0xef6ex19){if(!_0xef6ex19){return _0xef6exa[_0x7a69[47]](404)};return _0xef6exa[_0x7a69[32]](_0xef6ex19)})[_0x7a69[34]](function(_0xef6ex14){return _0xef6exb(_0xef6ex14)})};exports[_0x7a69[51]]=function(_0xef6ex9,_0xef6exa,_0xef6exb){return sequelize[_0x7a69[62]]()[_0x7a69[44]](function(_0xef6ex1a){async[_0x7a69[61]]([function(_0xef6ex1b){return FaxAccount[_0x7a69[51]](_0xef6ex9[_0x7a69[52]],{transaction:_0xef6ex1a})[_0x7a69[44]](function(_0xef6ex19){_0xef6ex1b(null,_0xef6ex19)})[_0x7a69[34]](function(_0xef6ex14){_0xef6ex1b(_0xef6ex14)})},function(_0xef6ex19,_0xef6ex1b){return Trunk[_0x7a69[50]](_0xef6ex9[_0x7a69[52]].TrunkId,{transaction:_0xef6ex1a})[_0x7a69[44]](function(_0xef6ex1c){_0xef6ex1b(null,_0xef6ex19,_0xef6ex1c)})[_0x7a69[34]](function(_0xef6ex14){_0xef6ex1b(_0xef6ex14)})},function(_0xef6ex19,_0xef6ex1c,_0xef6ex1b){return VoiceExtension[_0x7a69[51]]({context:_0xef6ex1c[_0x7a69[53]],exten:_0xef6ex9[_0x7a69[52]][_0x7a69[13]],priority:1,app:_0x7a69[54],appdata:_0x7a69[55],type:_0x7a69[56],TrunkId:_0xef6ex1c[_0x7a69[48]]},{transaction:_0xef6ex1a})[_0x7a69[44]](function(_0xef6ex1d){_0xef6ex1b(null,_0xef6ex19)})[_0x7a69[34]](function(_0xef6ex14){_0xef6ex1b(_0xef6ex14)})}],function(_0xef6ex14,_0xef6ex19){if(_0xef6ex14){console[_0x7a69[57]](_0xef6ex14);_0xef6ex1a[_0x7a69[58]]();return _0xef6exa[_0x7a69[33]](404)[_0x7a69[32]](_0xef6ex14)}else {console[_0x7a69[57]](_0x7a69[59]);_0xef6ex1a[_0x7a69[60]]();return _0xef6exa[_0x7a69[33]](201)[_0x7a69[32]](_0xef6ex19)}})})};exports[_0x7a69[63]]=function(_0xef6ex9,_0xef6exa,_0xef6exb){if(_0xef6ex9[_0x7a69[52]][_0x7a69[48]]){delete _0xef6ex9[_0x7a69[52]][_0x7a69[48]]};return sequelize[_0x7a69[62]]()[_0x7a69[44]](function(_0xef6ex1a){async[_0x7a69[61]]([function(_0xef6ex1b){return FaxAccount[_0x7a69[64]]({where:{id:_0xef6ex9[_0x7a69[49]][_0x7a69[48]]},include:[{model:Trunk}]},{transaction:_0xef6ex1a})[_0x7a69[44]](function(_0xef6ex19){_0xef6ex1b(null,_0xef6ex19)})[_0x7a69[34]](function(_0xef6ex14){_0xef6ex1b(_0xef6ex14)})},function(_0xef6ex19,_0xef6ex1b){return Trunk[_0x7a69[50]](_0xef6ex9[_0x7a69[52]].TrunkId,{transaction:_0xef6ex1a})[_0x7a69[44]](function(_0xef6ex1e){return _0xef6ex19[_0x7a69[65]]({TrunkId:_0xef6ex1e[_0x7a69[48]]},{transaction:_0xef6ex1a})[_0x7a69[44]](function(_0xef6ex1f){_0xef6ex1b(null,_0xef6ex19,_0xef6ex1e)})[_0x7a69[34]](function(_0xef6ex14){_0xef6ex1b(_0xef6ex14)})})[_0x7a69[34]](function(_0xef6ex14){_0xef6ex1b(_0xef6ex14)})},function(_0xef6ex19,_0xef6ex1e,_0xef6ex1b){return VoiceExtension[_0x7a69[64]]({where:{priority:1,exten:_0xef6ex19[_0x7a69[13]],context:_0xef6ex19[_0x7a69[4]][_0x7a69[53]]}},{transaction:_0xef6ex1a})[_0x7a69[44]](function(_0xef6ex1d){if(!_0xef6ex1d){_0xef6ex1b(null,_0xef6ex19)};return _0xef6ex1d[_0x7a69[65]]({exten:_0xef6ex9[_0x7a69[52]][_0x7a69[13]],context:_0xef6ex1e[_0x7a69[53]],TrunkId:_0xef6ex9[_0x7a69[52]][_0x7a69[67]]},{transaction:_0xef6ex1a})[_0x7a69[44]](function(){console[_0x7a69[57]](_0x7a69[66]);_0xef6ex1b(null,_0xef6ex19)})[_0x7a69[34]](function(_0xef6ex14){_0xef6ex1b(_0xef6ex14)})})[_0x7a69[34]](function(_0xef6ex14){_0xef6ex1b(_0xef6ex14)})},function(_0xef6ex19,_0xef6ex1b){var _0xef6ex20=_[_0x7a69[68]](_0xef6ex19,_0xef6ex9[_0x7a69[52]]);return _0xef6ex20[_0x7a69[70]]({transaction:_0xef6ex1a})[_0x7a69[44]](function(){console[_0x7a69[57]](_0x7a69[69]);_0xef6ex1b(null,_0xef6ex19)})[_0x7a69[34]](function(_0xef6ex14){_0xef6ex1b(_0xef6ex14)})}],function(_0xef6ex14,_0xef6ex19){if(_0xef6ex14){console[_0x7a69[57]](_0xef6ex14);_0xef6ex1a[_0x7a69[58]]();return _0xef6exa[_0x7a69[33]](404)[_0x7a69[32]](_0xef6ex14)}else {console[_0x7a69[57]](_0x7a69[59]);_0xef6ex1a[_0x7a69[60]]();return _0xef6exa[_0x7a69[33]](201)[_0x7a69[32]](_0xef6ex19)}})})};exports[_0x7a69[71]]=function(_0xef6ex9,_0xef6exa,_0xef6exb){FaxAccount[_0x7a69[72]]({where:{id:_0xef6ex9[_0x7a69[49]][_0x7a69[48]]}})[_0x7a69[44]](function(_0xef6ex19){if(!_0xef6ex19){return _0xef6exa[_0x7a69[47]](404)};_0xef6ex19[_0x7a69[71]]()[_0x7a69[44]](function(){return _0xef6exa[_0x7a69[47]](204)})[_0x7a69[34]](function(_0xef6ex14){_0xef6exb(_0xef6ex14)})})[_0x7a69[34]](function(_0xef6ex14){_0xef6exb(_0xef6ex14)})};exports[_0x7a69[73]]=function(_0xef6ex9,_0xef6exa,_0xef6exb){FaxApplication[_0x7a69[79]]({where:{id:_0xef6ex9[_0x7a69[52]][_0x7a69[75]]}})[_0x7a69[44]](function(_0xef6ex21){var _0xef6ex22=_0xef6ex21;return sequelize[_0x7a69[62]](function(_0xef6ex1a){return FaxApplication[_0x7a69[71]]({where:{id:_0xef6ex9[_0x7a69[52]][_0x7a69[75]]}},{transaction:_0xef6ex1a})[_0x7a69[44]](function(){var _0xef6ex23=[];for(var _0xef6ex24=0;_0xef6ex24<_0xef6ex9[_0x7a69[52]][_0x7a69[75]][_0x7a69[74]];_0xef6ex24++){var _0xef6ex25=_[_0x7a69[72]](_0xef6ex22,{"\x69\x64":_0xef6ex9[_0x7a69[52]][_0x7a69[75]][_0xef6ex24]});if(_0xef6ex25){_0xef6ex25[_0x7a69[76]]=_0xef6ex24+1;_0xef6ex23[_0x7a69[26]](_0xef6ex25[_0x7a69[77]])}};return FaxApplication[_0x7a69[78]](_0xef6ex23,{transaction:_0xef6ex1a})[_0x7a69[44]](function(_0xef6ex1f){return _0xef6ex1f})})})[_0x7a69[44]](function(_0xef6ex15){return _0xef6exa[_0x7a69[33]](200)[_0x7a69[32]](_0xef6ex15)})[_0x7a69[34]](function(_0xef6ex14){return handleError(_0xef6exa,_0xef6ex14)})})[_0x7a69[34]](function(_0xef6ex14){return _0xef6exb(_0xef6ex14)})};exports[_0x7a69[80]]=function(_0xef6ex9,_0xef6exa){FaxAccount[_0x7a69[71]]({where:{id:_0xef6ex9[_0x7a69[15]][_0x7a69[48]]},individualHooks:true})[_0x7a69[44]](function(){return _0xef6exa[_0x7a69[47]](204)})[_0x7a69[34]](function(_0xef6ex14){return handleError(_0xef6exa,_0xef6ex14)})};function handleError(_0xef6exa,_0xef6ex14){return _0xef6exa[_0x7a69[33]](500)[_0x7a69[32]](_0xef6ex14)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var util = require('util');
+var async = require('async');
+
+var Trunk = require('../../models').Trunk;
+var FaxAccount = require('../../models').FaxAccount;
+var FaxApplication = require('../../models').FaxApplication;
+var VoiceExtension = require('../../models').VoiceExtension;
+var sequelize = require('../../models').sequelize;
+
+// Get list of agents
+exports.index = function(req, res, next) {
+
+  var attributes = ['description', 'name', 'phone'];
+  var per_page = req.query.per_page ? parseInt(req.query.per_page, 10) : 100;
+  var page = req.query.page ? parseInt(req.query.page, 10) : 0;
+
+  var query = {
+    where: {},
+    limit: per_page,
+    offset: page * per_page
+  };
+
+  _.forIn(req.query, function(value, key) {
+    switch (key) {
+      case 'per_page':
+      case 'page':
+        break;
+      case 'sort_by':
+        query.order = util.format('%s %s', req.query.sort_by, req.query.sort_order || 'ASC') || null;
+        break;
+      case 'sort_order':
+        break;
+      case '$':
+        query.where.$or = [];
+        attributes.forEach(function(attribute) {
+          var tmp = {};
+          tmp[attribute] = {
+            $like: '%' + value + '%'
+          };
+
+          query.where.$or.push(tmp);
+        });
+        break;
+      default:
+        query.where[key] = {
+          $like: {}
+        };
+        query.where[key].$like = '%' + value + '%';
+    }
+  });
+
+  FaxAccount
+    .findAndCountAll(query)
+    .then(function(result) {
+
+      var total_pages = Math.ceil(result.count / per_page);
+      var next_page = total_pages > (query.offset + 1) ? util.format('%s://%s%s?page=%d', req.protocol, req.headers.host, req.baseUrl, page + 1) : null;
+      var previous_page = page > 0 ? util.format('%s://%s%s?page=%d', req.protocol, req.headers.host, req.baseUrl, page - 1) : null;
+
+      res.status(200).send({
+        count: result.count,
+        rows: result.rows,
+        next_page: next_page,
+        previous_page: previous_page,
+        total_pages: total_pages
+      });
+
+    })
+    .catch(function(err) {
+      res.status(500).send({
+        error: 'Something blew up!'
+      });
+    });
+};
+
+// Get a single faxAccount
+exports.show = function(req, res, next) {
+  FaxAccount
+    .findById(req.params.id)
+    .then(function(faxAccount) {
+      if (!faxAccount) {
+        return res.sendStatus(404);
+      }
+      return res.send(faxAccount);
+    })
+    .catch(function(err) {
+      return next(err);
+    });
+};
+
+// Creates a new faxAccount in the DB.
+exports.create = function(req, res, next) {
+  // console.log(req.body);
+  return sequelize
+    .transaction()
+    .then(function(t) {
+      async.waterfall([
+        function(callback) {
+          return FaxAccount
+            .create(req.body, {
+              transaction: t
+            })
+            .then(function(faxAccount) {
+              callback(null, faxAccount);
+            })
+            .catch(function(err) {
+              callback(err);
+            });
+        },
+        function(faxAccount, callback) {
+          return Trunk
+            .findById(req.body.TrunkId, {
+              transaction: t
+            })
+            .then(function(faxTrunk) {
+              callback(null, faxAccount, faxTrunk);
+            })
+            .catch(function(err) {
+              callback(err);
+            });
+        },
+        function(faxAccount, faxTrunk, callback) {
+          return VoiceExtension
+            .create({
+              context: faxTrunk.context,
+              exten: req.body.phone,
+              priority: 1,
+              app: 'Goto',
+              appdata: 'inbound-fax,s,1',
+              type: 'inbound-fax',
+              TrunkId: faxTrunk.id
+            }, {
+              transaction: t
+            })
+            .then(function(voiceExtension) {
+              callback(null, faxAccount);
+            })
+            .catch(function(err) {
+              callback(err);
+            });
+        }
+      ], function(err, faxAccount) {
+        if (err) {
+          console.log(err);
+          t.rollback();
+          return res.status(404).send(err);
+        } else {
+          console.log('ok');
+          t.commit();
+          return res.status(201).send(faxAccount);
+        }
+      })
+    });
+};
+
+// Updates an existing faxAccount in the DB.
+exports.update = function(req, res, next) {
+  // console.log(req.body);
+  // console.log(req.params);
+
+  if (req.body.id) {
+    delete req.body.id;
+  }
+
+  return sequelize
+    .transaction()
+    .then(function(t) {
+      async.waterfall([
+        function(callback) {
+          return FaxAccount
+            .findOne({
+              where: {
+                id: req.params.id
+              },
+              include: [{
+                model: Trunk
+              }]
+            }, {
+              transaction: t
+            })
+            .then(function(faxAccount) {
+              callback(null, faxAccount);
+            })
+            .catch(function(err) {
+              callback(err);
+            });
+        },
+        function(faxAccount, callback) {
+          return Trunk
+            .findById(req.body.TrunkId, {
+              transaction: t
+            })
+            .then(function(trunk) {
+              return faxAccount
+                .updateAttributes({
+                  TrunkId: trunk.id
+                }, {
+                  transaction: t
+                })
+                .then(function(data) {
+                  callback(null, faxAccount, trunk);
+                })
+                .catch(function(err) {
+                  callback(err);
+                });
+            })
+            .catch(function(err) {
+              callback(err);
+            });
+        },
+        function(faxAccount, trunk, callback) {
+          return VoiceExtension
+            .findOne({
+              where: {
+                priority: 1,
+                exten: faxAccount.phone,
+                context: faxAccount.Trunk.context
+              }
+            }, {
+              transaction: t
+            })
+            .then(function(voiceExtension) {
+              if (!voiceExtension) {
+                callback(null, faxAccount);
+              }
+              return voiceExtension
+                .updateAttributes({
+                  exten: req.body.phone,
+                  context: trunk.context,
+                  TrunkId: req.body.UserId
+                }, {
+                  transaction: t
+                })
+                .then(function() {
+                  console.log('voiceExtension edited');
+                  callback(null, faxAccount);
+                })
+                .catch(function(err) {
+                  callback(err);
+                });
+            })
+            .catch(function(err) {
+              callback(err);
+            });
+        },
+        function(faxAccount, callback) {
+          var updated = _.merge(faxAccount, req.body);
+          return updated.save({
+              transaction: t
+            })
+            .then(function() {
+              console.log('faxAccount saved');
+              callback(null, faxAccount);
+            })
+            .catch(function(err) {
+              callback(err);
+            });
+        }
+      ], function(err, faxAccount) {
+        if (err) {
+          console.log(err);
+          t.rollback();
+          return res.status(404).send(err);
+        } else {
+          console.log('ok');
+          t.commit();
+          return res.status(201).send(faxAccount);
+        }
+      })
+    });
+};
+
+// Deletes a faxAccount from the DB.
+exports.destroy = function(req, res, next) {
+  FaxAccount
+    .find({
+      where: {
+        id: req.params.id
+      }
+    })
+    .then(function(faxAccount) {
+      if (!faxAccount) {
+        return res.sendStatus(404);
+      }
+      faxAccount.destroy()
+        .then(function() {
+          return res.sendStatus(204);
+        })
+        .catch(function(err) {
+          next(err);
+        });
+    })
+    .catch(function(err) {
+      next(err);
+    });
+};
+
+exports.addApplications = function(req, res, next) {
+
+  FaxApplication
+    .findAll({
+      where: {
+        id: req.body.applications
+      }
+    })
+    .then(function(faxApplications) {
+      var tmpFaxApplications = faxApplications;
+
+      return sequelize.transaction(function(t) {
+        return FaxApplication.destroy({
+          where: {
+            id: req.body.applications
+          }
+        }, {
+          transaction: t
+        }).then(function() {
+
+          var sortedApplications = [];
+
+          for (var i = 0; i < req.body.applications.length; i++) {
+
+            var tmpFaxApplication = _.find(tmpFaxApplications, {
+              'id': req.body.applications[i]
+            });
+
+            if (tmpFaxApplication) {
+              tmpFaxApplication.priority = i + 1;
+              sortedApplications.push(tmpFaxApplication.dataValues);
+            }
+          }
+
+          return FaxApplication.bulkCreate(sortedApplications, {
+            transaction: t
+          }).then(function(data) {
+            return data;
+          });
+        });
+      }).then(function(result) {
+        return res.status(200).send(result);
+        // Transaction has been committed
+        // result is whatever the result of the promise chain returned to the transaction callback
+      }).catch(function(err) {
+        return handleError(res, err);
+        // Transaction has been rolled back
+        // err is whatever rejected the promise chain returned to the transaction callback
+      });
+    })
+    .catch(function(err) {
+      return next(err);
+    });
+};
+
+exports.bulkDestroy = function(req, res) {
+  FaxAccount
+    .destroy({
+      where: {
+        id: req.query.id
+      },
+      individualHooks: true
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index 335899e..e28dde9 100644 (file)
@@ -1 +1,24 @@
-var _0x8b68=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x46\x61\x78\x41\x63\x63\x6F\x75\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x66\x61\x78\x5F\x61\x63\x63\x6F\x75\x6E\x74\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x66\x61\x78\x5F\x61\x63\x63\x6F\x75\x6E\x74\x3A\x72\x65\x6D\x6F\x76\x65"];_0x8b68[0];var fax_account=require(_0x8b68[2])[_0x8b68[1]];exports[_0x8b68[3]]=function(_0x67c9x2){fax_account[_0x8b68[4]](function(_0x67c9x3){onSave(_0x67c9x2,_0x67c9x3)});fax_account[_0x8b68[5]](function(_0x67c9x3){onRemove(_0x67c9x2,_0x67c9x3)})};function onSave(_0x67c9x2,_0x67c9x3,_0x67c9x5){_0x67c9x2[_0x8b68[7]](_0x8b68[6],_0x67c9x3)}function onRemove(_0x67c9x2,_0x67c9x3,_0x67c9x5){_0x67c9x2[_0x8b68[7]](_0x8b68[8],_0x67c9x3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var fax_account = require('../../models').FaxAccount;
+
+exports.register = function(socket) {
+  fax_account.afterCreate(function (doc) {
+    onSave(socket, doc);
+  });
+  fax_account.afterDestroy(function (doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('fax_account:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('fax_account:remove', doc);
+}
index 0acef82..0399e33 100644 (file)
@@ -1 +1,20 @@
-var _0xc67c=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x73\x68\x6F\x75\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x70\x70","\x73\x75\x70\x65\x72\x74\x65\x73\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x66\x61\x78\x2F\x61\x63\x63\x6F\x75\x6E\x74\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x70\x6F\x6E\x64\x20\x77\x69\x74\x68\x20\x4A\x53\x4F\x4E\x20\x61\x72\x72\x61\x79","\x69\x6E\x73\x74\x61\x6E\x63\x65\x6F\x66","\x62\x65","\x62\x6F\x64\x79","\x65\x6E\x64","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x65\x78\x70\x65\x63\x74","\x2F\x61\x70\x69\x2F\x66\x61\x78\x2F\x61\x63\x63\x6F\x75\x6E\x74\x73","\x67\x65\x74"];_0xc67c[0];var should=require(_0xc67c[1]);var app=require(_0xc67c[2]);var request=require(_0xc67c[3]);describe(_0xc67c[4],function(){it(_0xc67c[5],function(_0x4404x4){request(app)[_0xc67c[13]](_0xc67c[12])[_0xc67c[11]](200)[_0xc67c[11]](_0xc67c[10],/json/)[_0xc67c[9]](function(_0x4404x5,_0x4404x6){if(_0x4404x5){return _0x4404x4(_0x4404x5)};_0x4404x6[_0xc67c[8]][_0xc67c[1]][_0xc67c[7]][_0xc67c[6]](Array);_0x4404x4()})})})
\ No newline at end of file
+'use strict';
+
+var should = require('should');
+var app = require('../../app');
+var request = require('supertest');
+
+describe('GET /api/fax/accounts', function() {
+
+  it('should respond with JSON array', function(done) {
+    request(app)
+      .get('/api/fax/accounts')
+      .expect(200)
+      .expect('Content-Type', /json/)
+      .end(function(err, res) {
+        if (err) return done(err);
+        res.body.should.be.instanceof(Array);
+        done();
+      });
+  });
+});
\ No newline at end of file
index c85a803..15886c9 100644 (file)
@@ -1 +1,17 @@
-var _0x590e=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x66\x61\x78\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x2F\x3A\x69\x64\x2F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x61\x64\x64\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0x590e[0];var express=require(_0x590e[1]);var controller=require(_0x590e[2]);var auth=require(_0x590e[3]);var router=express.Router();router[_0x590e[7]](_0x590e[4],auth[_0x590e[5]](),controller[_0x590e[6]]);router[_0x590e[7]](_0x590e[8],controller[_0x590e[9]]);router[_0x590e[11]](_0x590e[4],controller[_0x590e[10]]);router[_0x590e[11]](_0x590e[12],controller[_0x590e[13]]);router[_0x590e[15]](_0x590e[8],controller[_0x590e[14]]);router[_0x590e[16]](_0x590e[8],controller[_0x590e[14]]);router[_0x590e[18]](_0x590e[4],controller[_0x590e[17]]);router[_0x590e[18]](_0x590e[8],controller[_0x590e[19]]);module[_0x590e[20]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./fax_account.controller');
+var auth = require('../../auth/auth.service');
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), controller.index);
+router.get('/:id', controller.show);
+router.post('/', controller.create);
+router.post('/:id/applications', controller.addApplications);
+router.put('/:id', controller.update);
+router.patch('/:id', controller.update);
+router.delete('/', controller.bulkDestroy);
+router.delete('/:id', controller.destroy);
+
+module.exports = router;
index 53c814f..59b09cb 100644 (file)
@@ -1 +1,94 @@
-var _0x1c8f=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x46\x61\x78\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x6C\x6F\x67","\x70\x72\x69\x6F\x72\x69\x74\x79","\x46\x61\x78\x41\x63\x63\x6F\x75\x6E\x74\x49\x64","\x6D\x61\x78","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79","\x66\x69\x6E\x64"];_0x1c8f[0];var _=require(_0x1c8f[1]);var FaxApplication=require(_0x1c8f[3])[_0x1c8f[2]];exports[_0x1c8f[4]]=function(_0x5fa0x3,_0x5fa0x4){FaxApplication[_0x1c8f[10]]({where:_0x5fa0x3[_0x1c8f[9]]})[_0x1c8f[8]](function(_0x5fa0x6){return _0x5fa0x4[_0x1c8f[7]](200)[_0x1c8f[6]](_0x5fa0x6)})[_0x1c8f[5]](function(_0x5fa0x5){return handleError(_0x5fa0x4,_0x5fa0x5)})};exports[_0x1c8f[11]]=function(_0x5fa0x3,_0x5fa0x4){FaxApplication[_0x1c8f[15]](_0x5fa0x3[_0x1c8f[14]][_0x1c8f[13]])[_0x1c8f[8]](function(_0x5fa0x7){if(!_0x5fa0x7){return _0x5fa0x4[_0x1c8f[12]](404)};return _0x5fa0x4[_0x1c8f[6]](_0x5fa0x7)})[_0x1c8f[5]](function(_0x5fa0x5){return handleError(_0x5fa0x4,_0x5fa0x5)})};exports[_0x1c8f[16]]=function(_0x5fa0x3,_0x5fa0x4,_0x5fa0x8){console[_0x1c8f[18]](_0x5fa0x3[_0x1c8f[17]]);FaxApplication[_0x1c8f[21]](_0x1c8f[19],{where:{FaxAccountId:_0x5fa0x3[_0x1c8f[17]][_0x1c8f[20]]}})[_0x1c8f[8]](function(_0x5fa0x9){_0x5fa0x3[_0x1c8f[17]][_0x1c8f[19]]=_0x5fa0x9?++_0x5fa0x9:1;FaxApplication[_0x1c8f[16]](_0x5fa0x3[_0x1c8f[17]])[_0x1c8f[8]](function(_0x5fa0xa){return _0x5fa0x4[_0x1c8f[7]](201)[_0x1c8f[6]](_0x5fa0xa)})[_0x1c8f[5]](function(_0x5fa0x5){return _0x5fa0x8(_0x5fa0x5)});console[_0x1c8f[18]](_0x5fa0x9)})[_0x1c8f[5]](function(_0x5fa0x5){_0x5fa0x8(_0x5fa0x5)})};exports[_0x1c8f[22]]=function(_0x5fa0x3,_0x5fa0x4){if(_0x5fa0x3[_0x1c8f[17]][_0x1c8f[13]]){delete _0x5fa0x3[_0x1c8f[17]][_0x1c8f[13]]};FaxApplication[_0x1c8f[15]](_0x5fa0x3[_0x1c8f[14]][_0x1c8f[13]])[_0x1c8f[8]](function(_0x5fa0x7){if(!_0x5fa0x7){return _0x5fa0x4[_0x1c8f[12]](404)};var _0x5fa0xb=_[_0x1c8f[23]](_0x5fa0x7,_0x5fa0x3[_0x1c8f[17]]);_0x5fa0xb[_0x1c8f[24]]()[_0x1c8f[8]](function(){return _0x5fa0x4[_0x1c8f[7]](200)[_0x1c8f[6]](_0x5fa0x7)})[_0x1c8f[5]](function(_0x5fa0x5){return handleError(_0x5fa0x4,_0x5fa0x5)})})[_0x1c8f[5]](function(_0x5fa0x5){return handleError(_0x5fa0x4,_0x5fa0x5)})};exports[_0x1c8f[25]]=function(_0x5fa0x3,_0x5fa0x4){FaxApplication[_0x1c8f[26]]({where:{id:_0x5fa0x3[_0x1c8f[14]][_0x1c8f[13]]}})[_0x1c8f[8]](function(_0x5fa0x7){if(!_0x5fa0x7){return _0x5fa0x4[_0x1c8f[12]](404)};_0x5fa0x7[_0x1c8f[25]]()[_0x1c8f[8]](function(){return _0x5fa0x4[_0x1c8f[12]](204)})[_0x1c8f[5]](function(_0x5fa0x5){return handleError(_0x5fa0x4,_0x5fa0x5)})})[_0x1c8f[5]](function(_0x5fa0x5){return handleError(_0x5fa0x4,_0x5fa0x5)})};function handleError(_0x5fa0x4,_0x5fa0x5){return _0x5fa0x4[_0x1c8f[7]](500)[_0x1c8f[6]](_0x5fa0x5)}
\ No newline at end of file
+'use strict';
+var _ = require('lodash');
+var FaxApplication = require('../../models').FaxApplication;
+// Get list of fax_applications
+exports.index = function(req, res) {
+  FaxApplication.findAll({
+    where: req.query
+  }).then(function(fax_applications) {
+    return res.status(200).send(fax_applications);
+  }).catch(function(err) {
+    return handleError(res, err);
+  });
+};
+// Get a single fax_application
+exports.show = function(req, res) {
+  FaxApplication.findById(req.params.id).then(function(fax_application) {
+    if (!fax_application) {
+      return res.sendStatus(404);
+    }
+    return res.send(fax_application);
+  }).catch(function(err) {
+    return handleError(res, err);
+  });
+};
+// Creates a new fax_application in the DB.
+exports.create = function(req, res, next) {
+  console.log(req.body);
+  FaxApplication.max('priority', {
+    where: {
+      FaxAccountId: req.body.FaxAccountId
+    }
+  }).then(function(max) {
+    // SET PRIORITY
+    req.body.priority = max ? ++max : 1;
+    FaxApplication.create(req.body).then(function(faxApplication) {
+      return res.status(201).send(faxApplication);
+    }).catch(function(err) {
+      return next(err);
+    });
+    console.log(max);
+  }).catch(function(err) {
+    next(err);
+  });
+  // FaxApplication
+  // .create(req.body)
+  // .then(function(fax_application) {
+  //   return res.status(201).send(fax_application);
+  // })
+  // .catch(function(err) {
+  //   return handleError(res, err);
+  // });
+};
+// Updates an existing fax_application in the DB.
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  FaxApplication.findById(req.params.id).then(function(fax_application) {
+    if (!fax_application) {
+      return res.sendStatus(404);
+    }
+    var updated = _.merge(fax_application, req.body);
+    updated.save().then(function() {
+      return res.status(200).send(fax_application);
+    }).catch(function(err) {
+      return handleError(res, err);
+    });
+  }).catch(function(err) {
+    return handleError(res, err);
+  });
+};
+// Deletes a fax_application from the DB.
+exports.destroy = function(req, res) {
+  FaxApplication.find({
+    where: {
+      id: req.params.id
+    }
+  }).then(function(fax_application) {
+    if (!fax_application) {
+      return res.sendStatus(404);
+    }
+    fax_application.destroy().then(function() {
+      return res.sendStatus(204);
+    }).catch(function(err) {
+      return handleError(res, err);
+    });
+  }).catch(function(err) {
+    return handleError(res, err);
+  });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index 09d3c45..2a677d7 100644 (file)
@@ -1 +1,24 @@
-var _0xcfcd=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x46\x61\x78\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x66\x61\x78\x5F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x66\x61\x78\x5F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x3A\x72\x65\x6D\x6F\x76\x65"];_0xcfcd[0];var fax_application=require(_0xcfcd[2])[_0xcfcd[1]];exports[_0xcfcd[3]]=function(_0x10e5x2){fax_application[_0xcfcd[4]](function(_0x10e5x3){onSave(_0x10e5x2,_0x10e5x3)});fax_application[_0xcfcd[5]](function(_0x10e5x3){onRemove(_0x10e5x2,_0x10e5x3)})};function onSave(_0x10e5x2,_0x10e5x3,_0x10e5x5){_0x10e5x2[_0xcfcd[7]](_0xcfcd[6],_0x10e5x3)}function onRemove(_0x10e5x2,_0x10e5x3,_0x10e5x5){_0x10e5x2[_0xcfcd[7]](_0xcfcd[8],_0x10e5x3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var fax_application = require('../../models').FaxApplication;
+
+exports.register = function(socket) {
+  fax_application.afterCreate(function (doc) {
+    onSave(socket, doc);
+  });
+  fax_application.afterDestroy(function (doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('fax_application:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('fax_application:remove', doc);
+}
index c8c5e62..9eeaee8 100644 (file)
@@ -1 +1,20 @@
-var _0xfc26=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x73\x68\x6F\x75\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x70\x70","\x73\x75\x70\x65\x72\x74\x65\x73\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x66\x61\x78\x2F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x70\x6F\x6E\x64\x20\x77\x69\x74\x68\x20\x4A\x53\x4F\x4E\x20\x61\x72\x72\x61\x79","\x69\x6E\x73\x74\x61\x6E\x63\x65\x6F\x66","\x62\x65","\x62\x6F\x64\x79","\x65\x6E\x64","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x65\x78\x70\x65\x63\x74","\x2F\x61\x70\x69\x2F\x66\x61\x78\x2F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x67\x65\x74"];_0xfc26[0];var should=require(_0xfc26[1]);var app=require(_0xfc26[2]);var request=require(_0xfc26[3]);describe(_0xfc26[4],function(){it(_0xfc26[5],function(_0xf61bx4){request(app)[_0xfc26[13]](_0xfc26[12])[_0xfc26[11]](200)[_0xfc26[11]](_0xfc26[10],/json/)[_0xfc26[9]](function(_0xf61bx5,_0xf61bx6){if(_0xf61bx5){return _0xf61bx4(_0xf61bx5)};_0xf61bx6[_0xfc26[8]][_0xfc26[1]][_0xfc26[7]][_0xfc26[6]](Array);_0xf61bx4()})})})
\ No newline at end of file
+'use strict';
+
+var should = require('should');
+var app = require('../../app');
+var request = require('supertest');
+
+describe('GET /api/fax/applications', function() {
+
+  it('should respond with JSON array', function(done) {
+    request(app)
+      .get('/api/fax/applications')
+      .expect(200)
+      .expect('Content-Type', /json/)
+      .end(function(err, res) {
+        if (err) return done(err);
+        res.body.should.be.instanceof(Array);
+        done();
+      });
+  });
+});
\ No newline at end of file
index acc2519..b27e419 100644 (file)
@@ -1 +1,15 @@
-var _0xd976=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x66\x61\x78\x5F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0xd976[0];var express=require(_0xd976[1]);var controller=require(_0xd976[2]);var router=express.Router();router[_0xd976[5]](_0xd976[3],controller[_0xd976[4]]);router[_0xd976[5]](_0xd976[6],controller[_0xd976[7]]);router[_0xd976[9]](_0xd976[3],controller[_0xd976[8]]);router[_0xd976[11]](_0xd976[6],controller[_0xd976[10]]);router[_0xd976[12]](_0xd976[6],controller[_0xd976[10]]);router[_0xd976[14]](_0xd976[6],controller[_0xd976[13]]);module[_0xd976[15]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./fax_application.controller');
+
+var router = express.Router();
+
+router.get('/', controller.index);
+router.get('/:id', controller.show);
+router.post('/', controller.create);
+router.put('/:id', controller.update);
+router.patch('/:id', controller.update);
+router.delete('/:id', controller.destroy);
+
+module.exports = router;
\ No newline at end of file
index ff5ff99..2d69e42 100644 (file)
@@ -1 +1,64 @@
-var _0xd561=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x46\x61\x78\x4D\x65\x73\x73\x61\x67\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x55\x73\x65\x72","\x72\x65\x67\x69\x73\x74\x65\x72","\x46\x61\x78\x4D\x65\x73\x73\x61\x67\x65\x20\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x6C\x6F\x67","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x73\x74\x61\x74\x75\x73","\x4E\x4F\x54\x20\x53\x45\x4E\x54","\x61\x63\x74\x69\x6F\x6E\x69\x64","\x62\x6F\x64\x79","\x70\x61\x72\x73\x65","\x66\x61\x78\x42\x6F\x64\x79","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x6F\x72\x69\x67\x69\x6E\x61\x74\x65","\x66\x72\x6F\x6D","\x25\x73\x2F\x25\x73\x40\x25\x73","\x74\x65\x63\x68\x6E\x6F\x6C\x6F\x67\x79","\x74\x6F","\x6E\x61\x6D\x65","\x66\x6F\x72\x6D\x61\x74","\x6F\x75\x74\x62\x6F\x75\x6E\x64\x2D\x66\x61\x78","\x73","\x74\x72\x75\x65","\x6D\x61\x78\x72\x61\x74\x65","\x6D\x69\x6E\x72\x61\x74\x65","\x65\x63\x6D","\x79\x65\x73","\x6E\x6F","\x66\x61\x78\x5F\x6C\x6F\x63\x61\x6C\x69\x64","\x66\x61\x78\x5F\x66\x69\x6C\x65","\x66\x61\x78\x5F\x68\x65\x61\x64\x65\x72","\x75\x75\x69\x64","\x46\x41\x49\x4C\x45\x44","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x72\x65\x73\x70\x6F\x6E\x73\x65","\x61\x63\x74\x69\x6F\x6E","\x74\x68\x65\x6E","\x69\x64","\x74\x72\x75\x6E\x6B","\x66\x69\x6E\x64\x42\x79\x49\x64"];_0xd561[0];var _=require(_0xd561[1]);var util=require(_0xd561[2]);var FaxMessage=require(_0xd561[4])[_0xd561[3]];var Trunk=require(_0xd561[4])[_0xd561[5]];exports[_0xd561[6]]=function(_0x4dfdx5){FaxMessage[_0xd561[9]](function(_0x4dfdx6){console[_0xd561[8]](_0xd561[7]);onSave(_0x4dfdx5,_0x4dfdx6)})};function onSave(_0x4dfdx5,_0x4dfdx6,_0x4dfdx8){if(_0x4dfdx6[_0xd561[10]]===_0xd561[11]&&!_0x4dfdx6[_0xd561[12]]){var _0x4dfdx9=JSON[_0xd561[14]](_0x4dfdx6[_0xd561[13]]);console[_0xd561[8]](_0xd561[15],_0x4dfdx9);Trunk[_0xd561[44]](_0x4dfdx9[_0xd561[43]][_0xd561[42]])[_0xd561[41]](function(_0x4dfdxb){var _0x4dfdxc={Action:_0xd561[18],CallerID:_0x4dfdx9[_0xd561[19]],Channel:util[_0xd561[24]](_0xd561[20],_0x4dfdx9[_0xd561[21]],_0x4dfdx9[_0xd561[22]],_0x4dfdxb[_0xd561[23]]),Context:_0xd561[25],Exten:_0xd561[26],Priority:1,Async:_0xd561[27],Variable:{MAXRATE:_0x4dfdx9[_0xd561[28]],MINRATE:_0x4dfdx9[_0xd561[29]],ECM:_0x4dfdx9[_0xd561[30]]?_0xd561[31]:_0xd561[32],LOCALID:_0x4dfdx9[_0xd561[33]],FAXFILE:_0x4dfdx9[_0xd561[34]],FAXHEADER:_0x4dfdx9[_0xd561[35]],FAXUUID:_0x4dfdx9[_0xd561[36]]}};_0x4dfdx5[_0xd561[40]](_0x4dfdxc,function(_0x4dfdxa,_0x4dfdxd){if(_0x4dfdxa){_0x4dfdx6[_0xd561[38]]({status:_0xd561[37]})}else {if(_0x4dfdxd[_0xd561[39]]&&_0x4dfdxd[_0xd561[12]]){_0x4dfdx6[_0xd561[38]]({actionid:_0x4dfdxd[_0xd561[12]]})}}})})[_0xd561[17]](function(_0x4dfdxa){console[_0xd561[16]](_0x4dfdxa)})}}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var util = require('util');
+
+var FaxMessage = require('../../models').FaxMessage;
+var Trunk = require('../../models').User;
+
+exports.register = function(ami) {
+
+  FaxMessage.afterCreate(function(doc) {
+    console.log('FaxMessage afterCreate');
+    onSave(ami, doc);
+  });
+};
+
+function onSave(ami, doc, cb) {
+  if (doc.status === 'NOT SENT' && !doc.actionid) {
+    // I have to send the fax with the Originate
+    var faxBody = JSON.parse(doc.body);
+    console.log('faxBody', faxBody);
+
+    Trunk
+      .findById(faxBody.trunk.id)
+      .then(function(trunk) {
+        var action = {
+          Action: 'originate',
+          CallerID: faxBody.from,
+          Channel: util.format('%s/%s@%s', faxBody.technology, faxBody.to, trunk.name),
+          Context: 'outbound-fax',
+          Exten: 's',
+          Priority: 1,
+          Async: 'true',
+          Variable: {
+            MAXRATE: faxBody.maxrate,
+            MINRATE: faxBody.minrate,
+            ECM: faxBody.ecm ? 'yes' : 'no',
+            LOCALID: faxBody.fax_localid,
+            FAXFILE: faxBody.fax_file,
+            // 'FAXFILE': 'test.tiff', // Scommentare se si fanno prove in locale!
+            FAXHEADER: faxBody.fax_header,
+            FAXUUID: faxBody.uuid
+          }
+        };
+
+        ami.action(action, function(err, res) {
+          if (err) {
+            doc.updateAttributes({
+              status: 'FAILED'
+            });
+          } else {
+            if (res.response && res.actionid) {
+              doc.updateAttributes({
+                actionid: res.actionid
+              });
+            }
+          }
+        });
+      })
+      .catch(function(err) {
+        console.error(err);
+      });
+  }
+}
index a45dd86..e354d5f 100644 (file)
@@ -1 +1,422 @@
-var _0x68e3=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x66\x73","\x70\x61\x74\x68","\x75\x70\x6C\x6F\x61\x64\x2D\x66\x69\x6C\x65","\x6E\x6F\x64\x65\x2D\x75\x75\x69\x64","\x68\x74\x6D\x6C\x2D\x70\x64\x66","\x73\x70\x69\x6E\x64\x72\x69\x66\x74","\x66\x6F\x72\x6D\x69\x64\x61\x62\x6C\x65","\x65\x78\x65\x63","\x63\x68\x69\x6C\x64\x5F\x70\x72\x6F\x63\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x46\x61\x78\x4D\x65\x73\x73\x61\x67\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x46\x61\x78\x52\x6F\x6F\x6D","\x46\x61\x78\x41\x63\x63\x6F\x75\x6E\x74","\x43\x6F\x6E\x74\x61\x63\x74","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x63\x72\x65\x61\x74\x65\x64\x41\x74\x20\x44\x45\x53\x43","\x46\x72\x6F\x6D","\x54\x6F","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x4F\x6E\x65","\x63\x72\x65\x61\x74\x65","\x75\x70\x6C\x6F\x61\x64\x44\x69\x72","\x72\x6F\x6F\x74","\x73\x65\x72\x76\x65\x72\x2F\x66\x69\x6C\x65\x73\x2F\x66\x61\x78\x2F\x6F\x75\x74\x62\x6F\x75\x6E\x64\x2F\x6F\x72\x69\x67\x69\x6E\x61\x6C","\x6A\x6F\x69\x6E","\x6B\x65\x65\x70\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E\x73","\x6D\x75\x6C\x74\x69\x70\x6C\x65\x73","\x6F\x6E\x6C\x79\x54\x65\x78\x74","\x62\x6F\x64\x79","\x68\x74\x6D\x6C","\x76\x34","\x2E\x70\x64\x66","\x46\x61\x78\x3A\x20\x48\x54\x4D\x4C\x20\x43\x6F\x6E\x76\x65\x72\x74\x65\x64","\x6C\x6F\x67","\x74\x6F\x46\x69\x6C\x65","\x66\x69\x6C\x65\x6E\x61\x6D\x65","\x66\x69\x6C\x65","\x63\x72\x65\x61\x74\x65\x57\x72\x69\x74\x65\x53\x74\x72\x65\x61\x6D","\x70\x69\x70\x65","\x70\x64\x66\x53\x74\x72\x65\x61\x6D","\x46\x61\x78\x3A\x20\x48\x54\x4D\x4C\x20\x6A\x6F\x69\x6E\x65\x64\x20\x77\x69\x74\x68\x20\x50\x44\x46\x20\x75\x70\x6C\x6F\x61\x64\x65\x64","\x65\x72\x72\x6F\x72","\x46\x61\x78\x3A\x20\x50\x44\x46\x20\x52\x65\x6E\x61\x6D\x65","\x72\x65\x6E\x61\x6D\x65","\x70\x61\x72\x73\x65","\x73\x65\x72\x76\x65\x72","\x66\x69\x6C\x65\x73","\x66\x61\x78","\x6F\x75\x74\x62\x6F\x75\x6E\x64","\x6F\x72\x69\x67\x69\x6E\x61\x6C","\x63\x6F\x6E\x76\x65\x72\x74\x65\x64","\x2E\x74\x69\x66","\x67\x73","\x20\x2D\x71\x20\x2D\x64\x4E\x4F\x50\x41\x55\x53\x45\x20\x2D\x64\x42\x41\x54\x43\x48\x20\x2D\x73\x44\x45\x56\x49\x43\x45\x3D\x74\x69\x66\x66\x67\x34\x20","\x2D\x73\x50\x41\x50\x45\x52\x53\x49\x5A\x45\x3D\x6C\x65\x74\x74\x65\x72\x20\x2D\x73\x4F\x75\x74\x70\x75\x74\x46\x69\x6C\x65\x3D","\x20","\x53\x49\x50","\x74\x6F\x4E\x75\x6D","\x70\x68\x6F\x6E\x65","\x66\x61\x78\x68\x65\x61\x64\x65\x72","\x6C\x6F\x63\x61\x6C\x69\x64","\x6D\x61\x78\x72\x61\x74\x65","\x6D\x69\x6E\x72\x61\x74\x65","\x65\x63\x6D","\x54\x72\x75\x6E\x6B\x49\x64","\x46\x69\x6C\x65\x20\x6E\x6F\x74\x20\x65\x78\x69\x73\x74\x73","\x46\x61\x78\x3A\x20\x50\x44\x46\x20\x63\x6F\x6E\x76\x65\x72\x74\x65\x64\x20\x74\x6F\x20\x54\x49\x46\x46","\x72\x6F\x6F\x6D\x49\x64","\x73\x65\x74\x46\x72\x6F\x6D","\x73\x70\x72\x65\x61\x64","\x66\x72\x6F\x6D","\x66\x69\x6E\x64\x4F\x72\x43\x72\x65\x61\x74\x65","\x73\x65\x74\x54\x6F","\x74\x6F","\x4E\x4F\x54\x20\x53\x45\x4E\x54","\x73\x74\x72\x69\x6E\x67\x69\x66\x79","\x4F\x50\x45\x4E","\x61\x63\x63\x6F\x75\x6E\x74\x49\x64","\x75\x73\x65\x72\x49\x64","\x63\x68\x6D\x6F\x64","\x65\x78\x69\x73\x74\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79","\x66\x69\x6E\x64","\x67\x65\x74\x43\x6F\x6E\x74\x65\x6E\x74\x46\x72\x6F\x6D\x4D\x65\x73\x73\x61\x67\x65","\x66\x69\x6C\x65\x6E\x61\x6D\x65\x50\x44\x46","\x52\x45\x43\x45\x49\x56\x45\x44","\x69\x6E\x62\x6F\x75\x6E\x64","\x73\x65\x6E\x64\x46\x69\x6C\x65","\x64\x69\x72\x65\x63\x74\x6F\x72\x79","\x53\x45\x4E\x54","\x46\x41\x49\x4C\x45\x44"];_0x68e3[0];var _=require(_0x68e3[1]);var fs=require(_0x68e3[2]);var path=require(_0x68e3[3]);var uploadFile=require(_0x68e3[4]);var uuidLib=require(_0x68e3[5]);var pdf=require(_0x68e3[6]);var spindrift=require(_0x68e3[7]);var formidable=require(_0x68e3[8]);var exec=require(_0x68e3[10])[_0x68e3[9]];var config=require(_0x68e3[11]);var FaxMessage=require(_0x68e3[13])[_0x68e3[12]];var FaxRoom=require(_0x68e3[13])[_0x68e3[14]];var FaxAccount=require(_0x68e3[13])[_0x68e3[15]];var Contact=require(_0x68e3[13])[_0x68e3[16]];exports[_0x68e3[17]]=function(_0x1e2exf,_0x1e2ex10){FaxMessage[_0x68e3[26]]({where:_0x1e2exf[_0x68e3[22]],order:_0x68e3[23],include:[{model:Contact,as:_0x68e3[24]},{model:Contact,as:_0x68e3[25]},{model:FaxRoom,include:[{model:FaxAccount}]}]})[_0x68e3[21]](function(_0x1e2ex12){return _0x1e2ex10[_0x68e3[20]](200)[_0x68e3[19]](_0x1e2ex12)})[_0x68e3[18]](function(_0x1e2ex11){return handleError(_0x1e2ex10,_0x1e2ex11)})};exports[_0x68e3[27]]=function(_0x1e2exf,_0x1e2ex10){FaxMessage[_0x68e3[31]]({where:{id:_0x1e2exf[_0x68e3[30]][_0x68e3[29]]},include:[{model:Contact,as:_0x68e3[24]},{model:Contact,as:_0x68e3[25]}]})[_0x68e3[21]](function(_0x1e2ex13){if(!_0x1e2ex13){return _0x1e2ex10[_0x68e3[28]](404)};return _0x1e2ex10[_0x68e3[19]](_0x1e2ex13)})[_0x68e3[18]](function(_0x1e2ex11){return handleError(_0x1e2ex10,_0x1e2ex11)})};exports[_0x68e3[32]]=function(_0x1e2exf,_0x1e2ex10,_0x1e2ex14){var _0x1e2ex15= new formidable.IncomingForm();_0x1e2ex15[_0x68e3[33]]=path[_0x68e3[36]](config[_0x68e3[34]],_0x68e3[35]);_0x1e2ex15[_0x68e3[37]]=true;_0x1e2ex15[_0x68e3[38]]=false;if(_0x1e2exf[_0x68e3[40]][_0x68e3[39]]){if(_0x1e2exf[_0x68e3[40]][_0x68e3[41]]){var _0x1e2ex16=uuidLib[_0x68e3[42]]();var _0x1e2ex17=path[_0x68e3[36]](config[_0x68e3[34]],_0x68e3[35],_0x1e2ex16+_0x68e3[43]);pdf[_0x68e3[32]](_0x1e2exf[_0x68e3[40]][_0x68e3[41]],{"\x74\x69\x6D\x65\x6F\x75\x74":30000})[_0x68e3[46]](_0x1e2ex17,function(_0x1e2ex11,_0x1e2ex18){console[_0x68e3[45]](_0x68e3[44]);convertPdfAndSendFax(_0x1e2exf,_0x1e2ex10,_0x1e2ex16,_0x1e2exf[_0x68e3[40]])})}}else {_0x1e2ex15[_0x68e3[56]](_0x1e2exf,function(_0x1e2ex11,_0x1e2ex19,_0x1e2ex1a){if(_0x1e2ex11){return handleError(_0x1e2ex10,_0x1e2ex11)};if(_0x1e2ex19[_0x68e3[41]]){var _0x1e2ex16=uuidLib[_0x68e3[42]]();var _0x1e2ex17=path[_0x68e3[36]](config[_0x68e3[34]],_0x68e3[35],_0x1e2ex16+_0x68e3[43]);pdf[_0x68e3[32]](_0x1e2ex19[_0x68e3[41]],{"\x74\x69\x6D\x65\x6F\x75\x74":30000})[_0x68e3[46]](_0x1e2ex17,function(_0x1e2ex11,_0x1e2ex18){console[_0x68e3[45]](_0x68e3[44]);var _0x1e2ex1b=spindrift(_0x1e2ex18[_0x68e3[47]]);var _0x1e2ex1c=spindrift(_0x1e2ex1a[_0x68e3[48]][_0x68e3[3]]);var _0x1e2ex16=uuidLib[_0x68e3[42]]();spindrift[_0x68e3[36]](_0x1e2ex1b,_0x1e2ex1c)[_0x68e3[51]]()[_0x68e3[50]](fs[_0x68e3[49]](path[_0x68e3[36]](config[_0x68e3[34]],_0x68e3[35],_0x1e2ex16+_0x68e3[43])));console[_0x68e3[45]](_0x68e3[52]);convertPdfAndSendFax(_0x1e2exf,_0x1e2ex10,_0x1e2ex16,_0x1e2ex19)})}else {var _0x1e2ex16=uuidLib[_0x68e3[42]]();var _0x1e2ex17=path[_0x68e3[36]](config[_0x68e3[34]],_0x68e3[35],_0x1e2ex16+_0x68e3[43]);fs[_0x68e3[55]](_0x1e2ex1a[_0x68e3[48]][_0x68e3[3]],_0x1e2ex17,function(_0x1e2ex11){if(_0x1e2ex11){console[_0x68e3[53]](_0x1e2ex11);return handleError(_0x1e2ex10,_0x1e2exf)};console[_0x68e3[45]](_0x68e3[54]);convertPdfAndSendFax(_0x1e2exf,_0x1e2ex10,_0x1e2ex16,_0x1e2ex19)})}})}};function convertPdfAndSendFax(_0x1e2exf,_0x1e2ex10,_0x1e2ex1e,_0x1e2ex19){var _0x1e2ex1f=path[_0x68e3[36]](config[_0x68e3[34]],_0x68e3[57],_0x68e3[58],_0x68e3[59],_0x68e3[60],_0x68e3[61],_0x1e2ex1e+_0x68e3[43]);var _0x1e2ex20=path[_0x68e3[36]](config[_0x68e3[34]],_0x68e3[57],_0x68e3[58],_0x68e3[59],_0x68e3[60],_0x68e3[62],_0x1e2ex1e+_0x68e3[63]);var _0x1e2ex21=_0x68e3[64]+_0x68e3[65]+_0x68e3[66]+_0x1e2ex20+_0x68e3[67]+_0x1e2ex1f;var _0x1e2ex22=uuidLib[_0x68e3[42]]();FaxAccount[_0x68e3[93]](_0x1e2ex19[_0x68e3[89]])[_0x68e3[21]](function(_0x1e2ex23){if(_0x1e2ex23){var _0x1e2ex24={technology:_0x68e3[68],to:_0x1e2ex19[_0x68e3[69]],from:_0x1e2ex23[_0x68e3[70]],fax_file:_0x1e2ex20,fax_header:_0x1e2ex23[_0x68e3[71]],fax_localid:_0x1e2ex23[_0x68e3[72]],maxrate:_0x1e2ex23[_0x68e3[73]],minrate:_0x1e2ex23[_0x68e3[74]],ecm:_0x1e2ex23[_0x68e3[75]],uuid:_0x1e2ex22,trunk:{id:_0x1e2ex23[_0x68e3[76]]}};fs[_0x68e3[92]](_0x1e2ex1f,function(_0x1e2ex25){if(!_0x1e2ex25){handleError(_0x1e2ex10, new Error(_0x68e3[77]))}else {exec(_0x1e2ex21,function(_0x1e2ex11){if(_0x1e2ex11){console[_0x68e3[53]](_0x1e2ex11);handleError(_0x1e2ex10,_0x1e2ex11)}else {console[_0x68e3[45]](_0x68e3[78]);fs[_0x68e3[91]](_0x1e2ex20,511,function(_0x1e2ex11){if(_0x1e2ex19[_0x68e3[79]]){FaxRoom[_0x68e3[83]]({where:{id:_0x1e2ex19[_0x68e3[79]]},defaults:{}})[_0x68e3[81]](function(_0x1e2ex26,_0x1e2ex27){FaxMessage[_0x68e3[32]]({status:_0x68e3[86],read:true,filenamePDF:_0x1e2ex1e+_0x68e3[43],filename:_0x1e2ex1e+_0x68e3[63],body:JSON[_0x68e3[87]](_0x1e2ex24),uuid:_0x1e2ex22,FaxRoomId:_0x1e2ex26[_0x68e3[29]]})[_0x68e3[21]](function(_0x1e2ex28){Contact[_0x68e3[83]]({where:{phone:_0x1e2ex24[_0x68e3[82]]},defaults:{phone:_0x1e2ex24[_0x68e3[82]],fullname:_0x1e2ex24[_0x68e3[82]]}})[_0x68e3[81]](function(_0x1e2ex29,_0x1e2ex27){_0x1e2ex28[_0x68e3[80]](_0x1e2ex29)});Contact[_0x68e3[83]]({where:{phone:_0x1e2ex24[_0x68e3[85]]},defaults:{phone:_0x1e2ex24[_0x68e3[85]],fullname:_0x1e2ex24[_0x68e3[85]]}})[_0x68e3[81]](function(_0x1e2ex29,_0x1e2ex27){_0x1e2ex28[_0x68e3[84]](_0x1e2ex29)});return _0x1e2ex10[_0x68e3[20]](200)[_0x68e3[19]](_0x1e2ex28)})[_0x68e3[18]](function(_0x1e2ex11){handleError(_0x1e2ex10,_0x1e2ex11)})})}else {FaxRoom[_0x68e3[32]]({status:_0x68e3[88],from:_0x1e2ex19[_0x68e3[69]],FaxAccountId:_0x1e2ex19[_0x68e3[89]],UserId:_0x1e2ex19[_0x68e3[90]]})[_0x68e3[21]](function(_0x1e2ex26){FaxMessage[_0x68e3[32]]({status:_0x68e3[86],read:true,filenamePDF:_0x1e2ex1e+_0x68e3[43],filename:_0x1e2ex1e+_0x68e3[63],body:JSON[_0x68e3[87]](_0x1e2ex24),uuid:_0x1e2ex22,FaxRoomId:_0x1e2ex26[_0x68e3[29]]})[_0x68e3[21]](function(_0x1e2ex28){Contact[_0x68e3[83]]({where:{phone:_0x1e2ex24[_0x68e3[82]]},defaults:{phone:_0x1e2ex24[_0x68e3[82]],fullname:_0x1e2ex24[_0x68e3[82]]}})[_0x68e3[81]](function(_0x1e2ex29,_0x1e2ex27){_0x1e2ex28[_0x68e3[80]](_0x1e2ex29)});Contact[_0x68e3[83]]({where:{phone:_0x1e2ex24[_0x68e3[85]]},defaults:{phone:_0x1e2ex24[_0x68e3[85]],fullname:_0x1e2ex24[_0x68e3[85]]}})[_0x68e3[81]](function(_0x1e2ex29,_0x1e2ex27){_0x1e2ex28[_0x68e3[84]](_0x1e2ex29)});return _0x1e2ex10[_0x68e3[20]](200)[_0x68e3[19]](_0x1e2ex28)})[_0x68e3[18]](function(_0x1e2ex11){handleError(_0x1e2ex10,_0x1e2ex11)})})[_0x68e3[18]](function(_0x1e2ex11){handleError(_0x1e2ex10,_0x1e2ex11)})}})}})}})}})}exports[_0x68e3[94]]=function(_0x1e2exf,_0x1e2ex10){if(_0x1e2exf[_0x68e3[40]][_0x68e3[29]]){delete _0x1e2exf[_0x68e3[40]][_0x68e3[29]]};FaxMessage[_0x68e3[31]]({where:{id:_0x1e2exf[_0x68e3[30]][_0x68e3[29]]},include:[{model:Contact,as:_0x68e3[24]},{model:Contact,as:_0x68e3[25]}]})[_0x68e3[21]](function(_0x1e2ex13){if(!_0x1e2ex13){return _0x1e2ex10[_0x68e3[28]](404)};var _0x1e2ex2a=_[_0x68e3[95]](_0x1e2ex13,_0x1e2exf[_0x68e3[40]]);_0x1e2ex2a[_0x68e3[96]]()[_0x68e3[21]](function(){return _0x1e2ex10[_0x68e3[20]](200)[_0x68e3[19]](_0x1e2ex13)})[_0x68e3[18]](function(_0x1e2ex11){return handleError(_0x1e2ex10,_0x1e2ex11)})})[_0x68e3[18]](function(_0x1e2ex11){return handleError(_0x1e2ex10,_0x1e2ex11)})};exports[_0x68e3[97]]=function(_0x1e2exf,_0x1e2ex10){FaxMessage[_0x68e3[98]]({where:{id:_0x1e2exf[_0x68e3[30]][_0x68e3[29]]}})[_0x68e3[21]](function(_0x1e2ex13){if(!_0x1e2ex13){return _0x1e2ex10[_0x68e3[28]](404)};_0x1e2ex13[_0x68e3[97]]()[_0x68e3[21]](function(){return _0x1e2ex10[_0x68e3[28]](204)})[_0x68e3[18]](function(_0x1e2ex11){return handleError(_0x1e2ex10,_0x1e2ex11)})})[_0x68e3[18]](function(_0x1e2ex11){return handleError(_0x1e2ex10,_0x1e2ex11)})};exports[_0x68e3[99]]=function(_0x1e2exf,_0x1e2ex10){FaxMessage[_0x68e3[93]](_0x1e2exf[_0x68e3[30]][_0x68e3[29]])[_0x68e3[21]](function(_0x1e2ex13){if(!_0x1e2ex13){return _0x1e2ex10[_0x68e3[28]](404)};if(_0x1e2ex13[_0x68e3[100]]){if(_0x1e2ex13[_0x68e3[20]]===_0x68e3[101]){var _0x1e2ex2b=path[_0x68e3[36]](config[_0x68e3[34]],_0x68e3[57],_0x68e3[58],_0x68e3[59],_0x68e3[102],_0x1e2ex13[_0x68e3[100]]);fs[_0x68e3[92]](_0x1e2ex2b,function(_0x1e2ex25){if(_0x1e2ex25){return _0x1e2ex10[_0x68e3[103]](_0x1e2ex2b)}else {return _0x1e2ex10[_0x68e3[28]](404)}})}else {if(_0x1e2ex13[_0x68e3[20]]===_0x68e3[86]||_0x1e2ex13[_0x68e3[104]]===_0x68e3[105]||_0x1e2ex13[_0x68e3[20]]===_0x68e3[106]){var _0x1e2ex2b=path[_0x68e3[36]](config[_0x68e3[34]],_0x68e3[57],_0x68e3[58],_0x68e3[59],_0x68e3[60],_0x68e3[61],_0x1e2ex13[_0x68e3[100]]);fs[_0x68e3[92]](_0x1e2ex2b,function(_0x1e2ex25){if(_0x1e2ex25){return _0x1e2ex10[_0x68e3[103]](_0x1e2ex2b)}else {return _0x1e2ex10[_0x68e3[28]](404)}})}}}else {_0x1e2ex10[_0x68e3[28]](404)}})[_0x68e3[18]](function(_0x1e2ex11){return handleError(_0x1e2ex10,_0x1e2ex11)})};function handleError(_0x1e2ex10,_0x1e2ex11){return _0x1e2ex10[_0x68e3[20]](500)[_0x68e3[19]](_0x1e2ex11)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var fs = require('fs');
+var path = require('path');
+var uploadFile = require('upload-file');
+var uuidLib = require('node-uuid');
+var pdf = require('html-pdf');
+var spindrift = require('spindrift');
+var formidable = require('formidable');
+var exec = require('child_process').exec;
+var config = require('../../config/environment');
+
+var FaxMessage = require('../../models').FaxMessage;
+var FaxRoom = require('../../models').FaxRoom;
+var FaxAccount = require('../../models').FaxAccount;
+var Contact = require('../../models').Contact;
+
+// Get list of fax_messages
+exports.index = function(req, res) {
+  FaxMessage
+    .findAll({
+      where: req.query,
+      order: 'createdAt DESC',
+      include: [{
+        model: Contact,
+        as: 'From'
+      }, {
+        model: Contact,
+        as: 'To'
+      }, {
+        model: FaxRoom,
+        include: [{
+          model: FaxAccount
+        }]
+      }]
+    })
+    .then(function(fax_messages) {
+      return res.status(200).send(fax_messages);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single fax_message
+exports.show = function(req, res) {
+  FaxMessage
+    .findOne({
+      where: {
+        id: req.params.id
+      },
+      include: [{
+        model: Contact,
+        as: 'From'
+      }, {
+        model: Contact,
+        as: 'To'
+      }]
+    })
+    .then(function(fax_message) {
+      if (!fax_message) {
+        return res.sendStatus(404);
+      }
+      return res.send(fax_message);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new fax_message in the DB.
+exports.create = function(req, res, next) {
+  // FaxMessage
+  //   .create(req.body)
+  //   .then(function(fax_message) {
+  //     return res.status(201).send(fax_message);
+  //   })
+  //   .catch(function(err) {
+  //     return handleError(res, err);
+  //   });
+
+  var form = new formidable.IncomingForm();
+  // form.encoding = 'utf-8';
+  form.uploadDir = path.join(config.root, 'server/files/fax/outbound/original');
+  form.keepExtensions = true;
+  form.multiples = false;
+
+  if (req.body.onlyText) {
+    //There is not file, only text
+    // console.log(req.body);
+    if (req.body.html) {
+      //There is the html message -> convert
+      var uuid = uuidLib.v4()
+      var dest = path.join(config.root, 'server/files/fax/outbound/original', uuid + '.pdf');
+      pdf.create(req.body.html, {
+        "timeout": 30000
+      }).toFile(dest, function(err, result) {
+        console.log('Fax: HTML Converted');
+        convertPdfAndSendFax(req, res, uuid, req.body);
+      });
+    }
+  } else {
+    form.parse(req, function(err, fields, files) {
+      if (err) {
+        return handleError(res, err);
+      }
+
+      if (fields.html) {
+        //There is HTML with PDF
+        var uuid = uuidLib.v4();
+        var dest = path.join(config.root, 'server/files/fax/outbound/original', uuid + '.pdf');
+        pdf.create(fields.html, {
+          "timeout": 30000
+        }).toFile(dest, function(err, result) {
+          console.log('Fax: HTML Converted');
+          var pdfHTML = spindrift(result.filename);
+          var pdfUploaded = spindrift(files.file.path);
+          var uuid = uuidLib.v4();
+          spindrift.join(pdfHTML, pdfUploaded).pdfStream().pipe(fs.createWriteStream(path.join(config.root, 'server/files/fax/outbound/original', uuid + '.pdf')));
+          console.log('Fax: HTML joined with PDF uploaded');
+          convertPdfAndSendFax(req, res, uuid, fields);
+        });
+      } else {
+        //There is only PDF
+        var uuid = uuidLib.v4();
+        var dest = path.join(config.root, 'server/files/fax/outbound/original', uuid + '.pdf');
+        fs.rename(files.file.path, dest, function(err) {
+          if (err) {
+            console.error(err);
+            return handleError(res, req);
+            // return next(err);
+          }
+          console.log('Fax: PDF Rename');
+          convertPdfAndSendFax(req, res, uuid, fields);
+        });
+      }
+
+    });
+  }
+};
+
+function convertPdfAndSendFax(req, res, filenameInput, fields) {
+  var inputPath = path.join(config.root, 'server', 'files', 'fax', 'outbound', 'original', filenameInput + '.pdf');
+  var resultPath = path.join(config.root, 'server', 'files', 'fax', 'outbound', 'converted', filenameInput + '.tif');
+  var command = 'gs' + ' -q -dNOPAUSE -dBATCH -sDEVICE=tiffg4 ' + '-sPAPERSIZE=letter -sOutputFile=' + resultPath + ' ' + inputPath;
+  // console.log(inputPath, resultPath, command);
+
+  var uuidFax = uuidLib.v4();
+  FaxAccount
+    .findById(fields.accountId)
+    .then(function(faxAccount) {
+      // console.log('FaxAccount', faxAccount);
+
+      if (faxAccount) {
+        var faxBody = {
+          technology: 'SIP',
+          to: fields.toNum,
+          from: faxAccount.phone,
+          fax_file: resultPath,
+          fax_header: faxAccount.faxheader,
+          fax_localid: faxAccount.localid,
+          maxrate: faxAccount.maxrate,
+          minrate: faxAccount.minrate,
+          ecm: faxAccount.ecm,
+          uuid: uuidFax,
+          trunk: {
+            id: faxAccount.TrunkId
+          }
+        };
+
+        fs.exists(inputPath, function(exists) {
+          if (!exists) {
+            // console.log('File not exist');
+            handleError(res, new Error('File not exists'));
+          } else {
+            exec(command, function(err) {
+              if (err) {
+                console.error(err);
+                handleError(res, err);
+              } else {
+                console.log('Fax: PDF converted to TIFF');
+                fs.chmod(resultPath, 511, function(err) {
+                  if (fields.roomId) {
+                    // Room already exists -> create new message and associate
+                    FaxRoom
+                      .findOrCreate({
+                        where: {
+                          id: fields.roomId
+                        },
+                        defaults: {}
+                      })
+                      .spread(function(faxRoom, created) {
+                        // TODO Verify if we have to manage also the created
+                        FaxMessage
+                          .create({
+                            status: 'NOT SENT',
+                            read: true,
+                            filenamePDF: filenameInput + '.pdf',
+                            filename: filenameInput + '.tif',
+                            body: JSON.stringify(faxBody),
+                            uuid: uuidFax,
+                            FaxRoomId: faxRoom.id
+                          })
+                          .then(function(faxMessage) {
+                            // Fax message created, now association
+                            Contact
+                              .findOrCreate({
+                                where: {
+                                  phone: faxBody.from
+                                },
+                                defaults: {
+                                  phone: faxBody.from,
+                                  fullname: faxBody.from
+                                }
+                              })
+                              .spread(function(contact, created) {
+                                // console.log('Set relationship with from', created);
+                                faxMessage.setFrom(contact);
+                              });
+
+                            Contact
+                              .findOrCreate({
+                                where: {
+                                  phone: faxBody.to
+                                },
+                                defaults: {
+                                  phone: faxBody.to,
+                                  fullname: faxBody.to
+                                }
+                              })
+                              .spread(function(contact, created) {
+                                // console.log('Set relationship with to', created);
+                                faxMessage.setTo(contact);
+                              });
+
+                            return res.status(200).send(faxMessage);
+                          })
+                          .catch(function(err) {
+                            handleError(res, err);
+                            // console.error(err);
+                            // next(err);
+                          });
+                      });
+                  } else {
+                    // Room not exists -> create room, message and associate
+                    FaxRoom
+                      .create({
+                        status: 'OPEN',
+                        from: fields.toNum,
+                        FaxAccountId: fields.accountId,
+                        UserId: fields.userId
+                      })
+                      .then(function(faxRoom) {
+                        // Room created, now message
+                        FaxMessage
+                          .create({
+                            status: 'NOT SENT',
+                            read: true,
+                            filenamePDF: filenameInput + '.pdf',
+                            filename: filenameInput + '.tif',
+                            body: JSON.stringify(faxBody),
+                            uuid: uuidFax,
+                            FaxRoomId: faxRoom.id
+                          })
+                          .then(function(faxMessage) {
+                            // Fax message created, now association
+
+                            Contact
+                              .findOrCreate({
+                                where: {
+                                  phone: faxBody.from
+                                },
+                                defaults: {
+                                  phone: faxBody.from,
+                                  fullname: faxBody.from
+                                }
+                              })
+                              .spread(function(contact, created) {
+                                faxMessage.setFrom(contact);
+                              });
+
+                            Contact
+                              .findOrCreate({
+                                where: {
+                                  phone: faxBody.to
+                                },
+                                defaults: {
+                                  phone: faxBody.to,
+                                  fullname: faxBody.to
+                                }
+                              })
+                              .spread(function(contact, created) {
+                                faxMessage.setTo(contact);
+                              });
+
+                            return res.status(200).send(
+                              faxMessage);
+                          })
+                          .catch(function(err) {
+                            handleError(res, err);
+                          });
+                      })
+                      .catch(function(err) {
+                        handleError(res, err);
+                      });
+                  }
+                });
+              }
+            });
+          }
+        });
+      }
+    });
+}
+
+// Updates an existing fax_message in the DB.
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  FaxMessage
+    .findOne({
+      where: {
+        id: req.params.id
+      },
+      include: [{
+        model: Contact,
+        as: 'From'
+      }, {
+        model: Contact,
+        as: 'To'
+      }]
+    })
+    .then(function(fax_message) {
+      if (!fax_message) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(fax_message, req.body);
+      updated.save()
+        .then(function() {
+          return res.status(200).send(fax_message);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a fax_message from the DB.
+exports.destroy = function(req, res) {
+  FaxMessage
+    .find({
+      where: {
+        id: req.params.id
+      }
+    })
+    .then(function(fax_message) {
+      if (!fax_message) {
+        return res.sendStatus(404);
+      }
+      fax_message.destroy()
+        .then(function() {
+          return res.sendStatus(204);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+exports.getContentFromMessage = function(req, res) {
+
+  FaxMessage
+    .findById(req.params.id)
+    .then(function(fax_message) {
+
+      // console.log(fax_message);
+
+      if (!fax_message) {
+        return res.sendStatus(404);
+      }
+
+      if (fax_message.filenamePDF) {
+
+        if (fax_message.status === 'RECEIVED') {
+          var pdfPath = path.join(config.root, 'server', 'files', 'fax', 'inbound', fax_message.filenamePDF);
+          fs.exists(pdfPath, function(exists) {
+            if (exists)
+              return res.sendFile(pdfPath);
+            else
+              return res.sendStatus(404);
+          });
+        } else if (fax_message.status === 'NOT SENT' || fax_message.directory ===
+          'SENT' || fax_message.status === 'FAILED') {
+          var pdfPath = path.join(config.root, 'server', 'files', 'fax', 'outbound', 'original', fax_message.filenamePDF);
+          fs.exists(pdfPath, function(exists) {
+            if (exists)
+              return res.sendFile(pdfPath);
+            else
+              return res.sendStatus(404);
+          });
+        }
+      } else {
+        res.sendStatus(404);
+      }
+
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index 50a41de..79a31ad 100644 (file)
@@ -1 +1,85 @@
-var _0x1d6e=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x46\x61\x78\x4D\x65\x73\x73\x61\x67\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x43\x6F\x6E\x74\x61\x63\x74","\x46\x61\x78\x52\x6F\x6F\x6D","\x46\x61\x78\x41\x63\x63\x6F\x75\x6E\x74","\x72\x65\x67\x69\x73\x74\x65\x72","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x74\x68\x65\x6E","\x69\x64","\x46\x72\x6F\x6D","\x54\x6F","\x66\x69\x6E\x64\x4F\x6E\x65","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x66\x61\x78\x5F\x6D\x65\x73\x73\x61\x67\x65\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x66\x61\x78\x5F\x6D\x65\x73\x73\x61\x67\x65\x3A\x75\x70\x64\x61\x74\x65","\x66\x61\x78\x5F\x6D\x65\x73\x73\x61\x67\x65\x3A\x72\x65\x6D\x6F\x76\x65"];_0x1d6e[0];var FaxMessage=require(_0x1d6e[2])[_0x1d6e[1]];var Contact=require(_0x1d6e[2])[_0x1d6e[3]];var FaxRoom=require(_0x1d6e[2])[_0x1d6e[4]];var FaxAccount=require(_0x1d6e[2])[_0x1d6e[5]];exports[_0x1d6e[6]]=function(_0x325bx5){FaxMessage[_0x1d6e[14]](function(_0x325bx6){FaxMessage[_0x1d6e[13]]({where:{id:_0x325bx6[_0x1d6e[10]]},include:[{model:Contact,as:_0x1d6e[11]},{model:Contact,as:_0x1d6e[12]},{model:FaxRoom,include:[{model:FaxAccount}]}]})[_0x1d6e[9]](function(_0x325bx8){onSave(_0x325bx5,_0x325bx8)})[_0x1d6e[8]](function(_0x325bx7){console[_0x1d6e[7]](_0x325bx7)})});FaxMessage[_0x1d6e[15]](function(_0x325bx6){FaxMessage[_0x1d6e[13]]({where:{id:_0x325bx6[_0x1d6e[10]]},include:[{model:Contact,as:_0x1d6e[11]},{model:Contact,as:_0x1d6e[12]},{model:FaxRoom,include:[{model:FaxAccount}]}]})[_0x1d6e[9]](function(_0x325bx8){onSave(_0x325bx5,_0x325bx8);onUpdate(_0x325bx5,_0x325bx8)})[_0x1d6e[8]](function(_0x325bx7){console[_0x1d6e[7]](_0x325bx7)})});FaxMessage[_0x1d6e[16]](function(_0x325bx6){onRemove(_0x325bx5,_0x325bx6)})};function onSave(_0x325bx5,_0x325bx6,_0x325bxa){_0x325bx5[_0x1d6e[18]](_0x1d6e[17],_0x325bx6)}function onUpdate(_0x325bx5,_0x325bx6,_0x325bxa){_0x325bx5[_0x1d6e[18]](_0x1d6e[19],_0x325bx6)}function onRemove(_0x325bx5,_0x325bx6,_0x325bxa){_0x325bx5[_0x1d6e[18]](_0x1d6e[20],_0x325bx6)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var FaxMessage = require('../../models').FaxMessage;
+var Contact = require('../../models').Contact;
+var FaxRoom = require('../../models').FaxRoom;
+var FaxAccount = require('../../models').FaxAccount;
+
+exports.register = function(socket) {
+  FaxMessage.afterCreate(function(doc) {
+    FaxMessage
+      .findOne({
+        where: {
+          id: doc.id
+        },
+        include: [{
+          model: Contact,
+          as: 'From'
+        }, {
+          model: Contact,
+          as: 'To'
+        }, {
+          model: FaxRoom,
+          include: [{
+            model: FaxAccount
+          }]
+        }]
+      })
+      .then(function(faxMessage) {
+        onSave(socket, faxMessage);
+      })
+      .catch(function(err) {
+        console.error(err);
+      });
+  });
+
+  FaxMessage.afterUpdate(function(doc) {
+    FaxMessage
+      .findOne({
+        where: {
+          id: doc.id
+        },
+        include: [{
+          model: Contact,
+          as: 'From'
+        }, {
+          model: Contact,
+          as: 'To'
+        }, {
+          model: FaxRoom,
+          include: [{
+            model: FaxAccount
+          }]
+        }]
+      })
+      .then(function(faxMessage) {
+        onSave(socket, faxMessage);
+        onUpdate(socket, faxMessage);
+      })
+      .catch(function(err) {
+        console.error(err);
+      });
+  });
+
+  FaxMessage.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('fax_message:save', doc);
+  // socket.emit('fax_message:' + doc.directory + ':save', doc);
+}
+
+function onUpdate(socket, doc, cb) {
+  socket.emit('fax_message:update', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('fax_message:remove', doc);
+  // socket.emit('fax_message:' + doc.directory + ':remove', doc);
+}
index ceae706..d61f66e 100644 (file)
@@ -1 +1,20 @@
-var _0x6888=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x73\x68\x6F\x75\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x70\x70","\x73\x75\x70\x65\x72\x74\x65\x73\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x66\x61\x78\x2F\x6D\x65\x73\x73\x61\x67\x65\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x70\x6F\x6E\x64\x20\x77\x69\x74\x68\x20\x4A\x53\x4F\x4E\x20\x61\x72\x72\x61\x79","\x69\x6E\x73\x74\x61\x6E\x63\x65\x6F\x66","\x62\x65","\x62\x6F\x64\x79","\x65\x6E\x64","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x65\x78\x70\x65\x63\x74","\x2F\x61\x70\x69\x2F\x66\x61\x78\x2F\x6D\x65\x73\x73\x61\x67\x65\x73","\x67\x65\x74"];_0x6888[0];var should=require(_0x6888[1]);var app=require(_0x6888[2]);var request=require(_0x6888[3]);describe(_0x6888[4],function(){it(_0x6888[5],function(_0x2780x4){request(app)[_0x6888[13]](_0x6888[12])[_0x6888[11]](200)[_0x6888[11]](_0x6888[10],/json/)[_0x6888[9]](function(_0x2780x5,_0x2780x6){if(_0x2780x5){return _0x2780x4(_0x2780x5)};_0x2780x6[_0x6888[8]][_0x6888[1]][_0x6888[7]][_0x6888[6]](Array);_0x2780x4()})})})
\ No newline at end of file
+'use strict';
+
+var should = require('should');
+var app = require('../../app');
+var request = require('supertest');
+
+describe('GET /api/fax/messages', function() {
+
+  it('should respond with JSON array', function(done) {
+    request(app)
+      .get('/api/fax/messages')
+      .expect(200)
+      .expect('Content-Type', /json/)
+      .end(function(err, res) {
+        if (err) return done(err);
+        res.body.should.be.instanceof(Array);
+        done();
+      });
+  });
+});
\ No newline at end of file
index 802fd3e..b237a79 100644 (file)
@@ -1 +1,16 @@
-var _0xd909=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x66\x61\x78\x5F\x6D\x65\x73\x73\x61\x67\x65\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64\x2F\x63\x6F\x6E\x74\x65\x6E\x74","\x67\x65\x74\x43\x6F\x6E\x74\x65\x6E\x74\x46\x72\x6F\x6D\x4D\x65\x73\x73\x61\x67\x65","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0xd909[0];var express=require(_0xd909[1]);var controller=require(_0xd909[2]);var router=express.Router();router[_0xd909[5]](_0xd909[3],controller[_0xd909[4]]);router[_0xd909[5]](_0xd909[6],controller[_0xd909[7]]);router[_0xd909[5]](_0xd909[8],controller[_0xd909[9]]);router[_0xd909[11]](_0xd909[3],controller[_0xd909[10]]);router[_0xd909[13]](_0xd909[8],controller[_0xd909[12]]);router[_0xd909[14]](_0xd909[8],controller[_0xd909[12]]);router[_0xd909[16]](_0xd909[8],controller[_0xd909[15]]);module[_0xd909[17]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./fax_message.controller');
+
+var router = express.Router();
+
+router.get('/', controller.index);
+router.get('/:id/content', controller.getContentFromMessage);
+router.get('/:id', controller.show);
+router.post('/', controller.create);
+router.put('/:id', controller.update);
+router.patch('/:id', controller.update);
+router.delete('/:id', controller.destroy);
+
+module.exports = router;
index 01fa25b..65cffaf 100644 (file)
@@ -1 +1,185 @@
-var _0xa5d6=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x46\x61\x78\x51\x75\x65\x75\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x66\x69\x6E\x64","\x64\x65\x73\x74\x72\x6F\x79","\x61\x64\x64\x41\x67\x65\x6E\x74\x73","\x61\x67\x65\x6E\x74\x73","\x70\x65\x6E\x61\x6C\x74\x79","\x6E\x61\x6D\x65","\x61\x64\x64\x55\x73\x65\x72\x73","\x73\x68\x6F\x77\x41\x67\x65\x6E\x74\x73","\x61\x67\x65\x6E\x74","\x66\x75\x6C\x6C\x6E\x61\x6D\x65","\x65\x6D\x61\x69\x6C","\x67\x65\x74\x55\x73\x65\x72\x73","\x72\x65\x6D\x6F\x76\x65\x41\x67\x65\x6E\x74\x73","\x72\x65\x6D\x6F\x76\x65\x55\x73\x65\x72","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73"];_0xa5d6[0];var _=require(_0xa5d6[1]);var Util=require(_0xa5d6[2]);var FaxQueue=require(_0xa5d6[4])[_0xa5d6[3]];exports[_0xa5d6[5]]=function(_0x2e0ax4,_0x2e0ax5){return FaxQueue[_0xa5d6[12]](Util[_0xa5d6[11]](_0x2e0ax4[_0xa5d6[10]]))[_0xa5d6[9]](function(_0x2e0ax7){_0x2e0ax5[_0xa5d6[8]](200)[_0xa5d6[7]](_0x2e0ax7)})[_0xa5d6[6]](function(_0x2e0ax6){return handleError(_0x2e0ax5,_0x2e0ax6)})};exports[_0xa5d6[13]]=function(_0x2e0ax4,_0x2e0ax5){FaxQueue[_0xa5d6[17]](_0x2e0ax4[_0xa5d6[16]][_0xa5d6[15]])[_0xa5d6[9]](function(_0x2e0ax8){if(!_0x2e0ax8){return _0x2e0ax5[_0xa5d6[14]](404)};return _0x2e0ax5[_0xa5d6[7]](_0x2e0ax8)})[_0xa5d6[6]](function(_0x2e0ax6){return handleError(_0x2e0ax5,_0x2e0ax6)})};exports[_0xa5d6[18]]=function(_0x2e0ax4,_0x2e0ax5){FaxQueue[_0xa5d6[18]](_0x2e0ax4[_0xa5d6[19]])[_0xa5d6[9]](function(_0x2e0ax8){return _0x2e0ax5[_0xa5d6[8]](201)[_0xa5d6[7]](_0x2e0ax8)})[_0xa5d6[6]](function(_0x2e0ax6){return handleError(_0x2e0ax5,_0x2e0ax6)})};exports[_0xa5d6[20]]=function(_0x2e0ax4,_0x2e0ax5){if(_0x2e0ax4[_0xa5d6[19]][_0xa5d6[15]]){delete _0x2e0ax4[_0xa5d6[19]][_0xa5d6[15]]};FaxQueue[_0xa5d6[23]]({where:{id:_0x2e0ax4[_0xa5d6[16]][_0xa5d6[15]]}})[_0xa5d6[9]](function(_0x2e0ax8){if(!_0x2e0ax8){return _0x2e0ax5[_0xa5d6[14]](404)};var _0x2e0ax9=_[_0xa5d6[21]](_0x2e0ax8,_0x2e0ax4[_0xa5d6[19]]);_0x2e0ax9[_0xa5d6[22]]()[_0xa5d6[9]](function(){return _0x2e0ax5[_0xa5d6[8]](200)[_0xa5d6[7]](_0x2e0ax8)})[_0xa5d6[6]](function(_0x2e0ax6){return handleError(_0x2e0ax5,_0x2e0ax6)})})[_0xa5d6[6]](function(_0x2e0ax6){return handleError(_0x2e0ax5,_0x2e0ax6)})};exports[_0xa5d6[24]]=function(_0x2e0ax4,_0x2e0ax5){FaxQueue[_0xa5d6[23]]({where:{id:_0x2e0ax4[_0xa5d6[16]][_0xa5d6[15]]}})[_0xa5d6[9]](function(_0x2e0ax8){if(!_0x2e0ax8){return _0x2e0ax5[_0xa5d6[14]](404)};_0x2e0ax8[_0xa5d6[24]]()[_0xa5d6[9]](function(){return _0x2e0ax5[_0xa5d6[14]](204)})[_0xa5d6[6]](function(_0x2e0ax6){return handleError(_0x2e0ax5,_0x2e0ax6)})})[_0xa5d6[6]](function(_0x2e0ax6){return handleError(_0x2e0ax5,_0x2e0ax6)})};exports[_0xa5d6[25]]=function(_0x2e0ax4,_0x2e0ax5,_0x2e0axa){return FaxQueue[_0xa5d6[17]](_0x2e0ax4[_0xa5d6[16]][_0xa5d6[15]])[_0xa5d6[9]](function(_0x2e0axb){if(!_0x2e0axb){return _0x2e0ax5[_0xa5d6[14]](404)};return _0x2e0axb[_0xa5d6[29]](_0x2e0ax4[_0xa5d6[19]][_0xa5d6[26]],{penalty:_0x2e0ax4[_0xa5d6[19]][_0xa5d6[27]],queue:_0x2e0axb[_0xa5d6[28]]},{individualHooks:true})})[_0xa5d6[9]](function(){return _0x2e0ax5[_0xa5d6[14]](200)})[_0xa5d6[6]](function(_0x2e0ax6){return handleError(_0x2e0ax5,_0x2e0ax6)})};exports[_0xa5d6[30]]=function(_0x2e0ax4,_0x2e0ax5){return FaxQueue[_0xa5d6[17]](_0x2e0ax4[_0xa5d6[16]][_0xa5d6[15]])[_0xa5d6[9]](function(_0x2e0axd){if(!_0x2e0axd){return _0x2e0ax5[_0xa5d6[14]](404)};return _0x2e0axd[_0xa5d6[34]]({where:{role:_0xa5d6[31]},attributes:[_0xa5d6[15],_0xa5d6[28],_0xa5d6[32],_0xa5d6[33]]})})[_0xa5d6[9]](function(_0x2e0axc){return _0x2e0ax5[_0xa5d6[8]](200)[_0xa5d6[7]](_0x2e0axc)})[_0xa5d6[6]](function(_0x2e0ax6){return handleError(_0x2e0ax5,_0x2e0ax6)})};exports[_0xa5d6[35]]=function(_0x2e0ax4,_0x2e0ax5,_0x2e0axa){return FaxQueue[_0xa5d6[17]](_0x2e0ax4[_0xa5d6[16]][_0xa5d6[15]])[_0xa5d6[9]](function(_0x2e0axd){if(!_0x2e0axd){return _0x2e0ax5[_0xa5d6[14]](404)};return _0x2e0axd[_0xa5d6[36]](_0x2e0ax4[_0xa5d6[10]][_0xa5d6[26]])})[_0xa5d6[9]](function(){return _0x2e0ax5[_0xa5d6[14]](202)})[_0xa5d6[6]](function(_0x2e0ax6){return _0x2e0axa(_0x2e0ax6)})};exports[_0xa5d6[37]]=function(_0x2e0ax4,_0x2e0ax5){FaxQueue[_0xa5d6[24]]({where:{id:_0x2e0ax4[_0xa5d6[10]][_0xa5d6[38]]},individualHooks:true})[_0xa5d6[9]](function(){return _0x2e0ax5[_0xa5d6[14]](204)})[_0xa5d6[6]](function(_0x2e0ax6){return handleError(_0x2e0ax5,_0x2e0ax6)})};function handleError(_0x2e0ax5,_0x2e0ax6){return _0x2e0ax5[_0xa5d6[8]](500)[_0xa5d6[7]](_0x2e0ax6)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var Util = require('../../config/util');
+
+var FaxQueue = require('../../models').FaxQueue;
+
+// Get list of fax_queues
+exports.index = function(req, res) {
+  return FaxQueue
+    .findAndCountAll(Util.getQuery(req.query))
+    .then(function(result) {
+      res.status(200).send(result);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single fax_queue
+exports.show = function(req, res) {
+  FaxQueue
+    .findById(req.params.id)
+    .then(function(fax_queue) {
+      if (!fax_queue) {
+        return res.sendStatus(404);
+      }
+      return res.send(fax_queue);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new fax_queue in the DB.
+exports.create = function(req, res) {
+  FaxQueue
+    .create(req.body)
+    .then(function(fax_queue) {
+      return res.status(201).send(fax_queue);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Updates an existing fax_queue in the DB.
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  FaxQueue
+    .find({
+      where: {
+        id: req.params.id
+      }
+    })
+    .then(function(fax_queue) {
+      if (!fax_queue) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(fax_queue, req.body);
+      updated.save()
+        .then(function() {
+          return res.status(200).send(fax_queue);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a fax_queue from the DB.
+exports.destroy = function(req, res) {
+  FaxQueue
+    .find({
+      where: {
+        id: req.params.id
+      }
+    })
+    .then(function(fax_queue) {
+      if (!fax_queue) {
+        return res.sendStatus(404);
+      }
+      fax_queue.destroy()
+        .then(function() {
+          return res.sendStatus(204);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+exports.addAgents = function(req, res, next) {
+
+  return FaxQueue
+    .findById(req.params.id)
+    .then(function(faxQueue) {
+      if (!faxQueue) {
+        return res.sendStatus(404);
+      }
+      return faxQueue
+        .addUsers(req.body.agents, {
+          penalty: req.body.penalty,
+          queue: faxQueue.name
+        }, {
+          individualHooks: true
+        });
+    })
+    .then(function() {
+      return res.sendStatus(200);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+exports.showAgents = function(req, res) {
+  return FaxQueue
+    .findById(req.params.id)
+    .then(function(queue) {
+      if (!queue) {
+        return res.sendStatus(404);
+      }
+      return queue
+        .getUsers({
+          where: {
+            role: 'agent'
+          },
+          attributes: ['id', 'name', 'fullname', 'email']
+        });
+    })
+    .then(function(agents) {
+      return res.status(200).send(agents);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+exports.removeAgents = function(req, res, next) {
+  return FaxQueue
+    .findById(req.params.id)
+    .then(function(queue) {
+      if (!queue) {
+        return res.sendStatus(404);
+      }
+      return queue
+        .removeUser(req.query.agents);
+    })
+    .then(function() {
+      return res.sendStatus(202);
+    })
+    .catch(function(err) {
+      return next(err);
+    });
+};
+
+// Deletes a agent from the DB.
+exports.bulkDestroy = function(req, res) {
+  FaxQueue
+    .destroy({
+      where: {
+        id: req.query.ids
+      },
+      individualHooks: true
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index fac783d..243ed07 100644 (file)
@@ -1 +1,24 @@
-var _0x8dc9=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x46\x61\x78\x51\x75\x65\x75\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x66\x61\x78\x5F\x71\x75\x65\x75\x65\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x66\x61\x78\x5F\x71\x75\x65\x75\x65\x3A\x72\x65\x6D\x6F\x76\x65"];_0x8dc9[0];var fax_queue=require(_0x8dc9[2])[_0x8dc9[1]];exports[_0x8dc9[3]]=function(_0x9f37x2){fax_queue[_0x8dc9[4]](function(_0x9f37x3){onSave(_0x9f37x2,_0x9f37x3)});fax_queue[_0x8dc9[5]](function(_0x9f37x3){onRemove(_0x9f37x2,_0x9f37x3)})};function onSave(_0x9f37x2,_0x9f37x3,_0x9f37x5){_0x9f37x2[_0x8dc9[7]](_0x8dc9[6],_0x9f37x3)}function onRemove(_0x9f37x2,_0x9f37x3,_0x9f37x5){_0x9f37x2[_0x8dc9[7]](_0x8dc9[8],_0x9f37x3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var fax_queue = require('../../models').FaxQueue;
+
+exports.register = function(socket) {
+  fax_queue.afterCreate(function (doc) {
+    onSave(socket, doc);
+  });
+  fax_queue.afterDestroy(function (doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('fax_queue:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('fax_queue:remove', doc);
+}
index 971d412..9148967 100644 (file)
@@ -1 +1,20 @@
-var _0x52e0=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x73\x68\x6F\x75\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x70\x70","\x73\x75\x70\x65\x72\x74\x65\x73\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x66\x61\x78\x2F\x71\x75\x65\x75\x65\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x70\x6F\x6E\x64\x20\x77\x69\x74\x68\x20\x4A\x53\x4F\x4E\x20\x61\x72\x72\x61\x79","\x69\x6E\x73\x74\x61\x6E\x63\x65\x6F\x66","\x62\x65","\x62\x6F\x64\x79","\x65\x6E\x64","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x65\x78\x70\x65\x63\x74","\x2F\x61\x70\x69\x2F\x66\x61\x78\x2F\x71\x75\x65\x75\x65\x73","\x67\x65\x74"];_0x52e0[0];var should=require(_0x52e0[1]);var app=require(_0x52e0[2]);var request=require(_0x52e0[3]);describe(_0x52e0[4],function(){it(_0x52e0[5],function(_0xdcccx4){request(app)[_0x52e0[13]](_0x52e0[12])[_0x52e0[11]](200)[_0x52e0[11]](_0x52e0[10],/json/)[_0x52e0[9]](function(_0xdcccx5,_0xdcccx6){if(_0xdcccx5){return _0xdcccx4(_0xdcccx5)};_0xdcccx6[_0x52e0[8]][_0x52e0[1]][_0x52e0[7]][_0x52e0[6]](Array);_0xdcccx4()})})})
\ No newline at end of file
+'use strict';
+
+var should = require('should');
+var app = require('../../app');
+var request = require('supertest');
+
+describe('GET /api/fax/queues', function() {
+
+  it('should respond with JSON array', function(done) {
+    request(app)
+      .get('/api/fax/queues')
+      .expect(200)
+      .expect('Content-Type', /json/)
+      .end(function(err, res) {
+        if (err) return done(err);
+        res.body.should.be.instanceof(Array);
+        done();
+      });
+  });
+});
\ No newline at end of file
index 2e2bc22..9f1fac3 100644 (file)
@@ -1 +1,20 @@
-var _0x724a=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x66\x61\x78\x5F\x71\x75\x65\x75\x65\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x2F\x3A\x69\x64\x2F\x61\x67\x65\x6E\x74\x73","\x73\x68\x6F\x77\x41\x67\x65\x6E\x74\x73","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x61\x64\x64\x41\x67\x65\x6E\x74\x73","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x72\x65\x6D\x6F\x76\x65\x41\x67\x65\x6E\x74\x73","\x65\x78\x70\x6F\x72\x74\x73"];_0x724a[0];var express=require(_0x724a[1]);var controller=require(_0x724a[2]);var auth=require(_0x724a[3]);var router=express.Router();router[_0x724a[7]](_0x724a[4],auth[_0x724a[5]](),controller[_0x724a[6]]);router[_0x724a[7]](_0x724a[8],auth[_0x724a[5]](),controller[_0x724a[9]]);router[_0x724a[7]](_0x724a[10],auth[_0x724a[5]](),controller[_0x724a[11]]);router[_0x724a[13]](_0x724a[4],auth[_0x724a[5]](),controller[_0x724a[12]]);router[_0x724a[13]](_0x724a[10],auth[_0x724a[5]](),controller[_0x724a[14]]);router[_0x724a[16]](_0x724a[8],auth[_0x724a[5]](),controller[_0x724a[15]]);router[_0x724a[17]](_0x724a[8],auth[_0x724a[5]](),controller[_0x724a[15]]);router[_0x724a[19]](_0x724a[4],auth[_0x724a[5]](),controller[_0x724a[18]]);router[_0x724a[19]](_0x724a[8],auth[_0x724a[5]](),controller[_0x724a[20]]);router[_0x724a[19]](_0x724a[10],auth[_0x724a[5]](),controller[_0x724a[21]]);module[_0x724a[22]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./fax_queue.controller');
+var auth = require('../../auth/auth.service');
+
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), controller.index);
+router.get('/:id', auth.isAuthenticated(), controller.show);
+router.get('/:id/agents', auth.isAuthenticated(), controller.showAgents);
+router.post('/', auth.isAuthenticated(), controller.create);
+router.post('/:id/agents', auth.isAuthenticated(), controller.addAgents);
+router.put('/:id', auth.isAuthenticated(), controller.update);
+router.patch('/:id', auth.isAuthenticated(), controller.update);
+router.delete('/', auth.isAuthenticated(), controller.bulkDestroy);
+router.delete('/:id', auth.isAuthenticated(), controller.destroy);
+router.delete('/:id/agents', auth.isAuthenticated(), controller.removeAgents);
+
+module.exports = router;
index 325a9de..a139fd5 100644 (file)
@@ -1 +1,151 @@
-var _0xb557=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x46\x61\x78\x52\x6F\x6F\x6D","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x46\x61\x78\x41\x63\x63\x6F\x75\x6E\x74","\x46\x61\x78\x4D\x65\x73\x73\x61\x67\x65","\x43\x6F\x6E\x74\x61\x63\x74","\x55\x73\x65\x72","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x69\x64","\x66\x69\x6E\x64\x41\x6C\x6C","\x61\x67\x65\x6E\x74\x49\x6E\x64\x65\x78","\x70\x61\x72\x61\x6D\x73","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x46\x72\x6F\x6D","\x54\x6F","\x63\x72\x65\x61\x74\x65\x64\x41\x74","\x44\x45\x53\x43","\x66\x69\x6E\x64\x4F\x6E\x65","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x66\x69\x6E\x64\x42\x79\x49\x64","\x64\x65\x73\x74\x72\x6F\x79"];_0xb557[0];var _=require(_0xb557[1]);var FaxRoom=require(_0xb557[3])[_0xb557[2]];var FaxAccount=require(_0xb557[3])[_0xb557[4]];var FaxMessage=require(_0xb557[3])[_0xb557[5]];var Contact=require(_0xb557[3])[_0xb557[6]];var User=require(_0xb557[3])[_0xb557[7]];exports[_0xb557[8]]=function(_0x57f7x7,_0x57f7x8){FaxRoom[_0xb557[14]]({include:[{model:FaxMessage,attributes:[_0xb557[13]]},{model:FaxAccount},{model:User}]})[_0xb557[12]](function(_0x57f7xa){return _0x57f7x8[_0xb557[11]](200)[_0xb557[10]](_0x57f7xa)})[_0xb557[9]](function(_0x57f7x9){return handleError(_0x57f7x8,_0x57f7x9)})};exports[_0xb557[15]]=function(_0x57f7x7,_0x57f7x8,_0x57f7xb){FaxRoom[_0xb557[14]]({where:{UserId:_0x57f7x7[_0xb557[16]][_0xb557[13]]},include:[{model:FaxAccount},{model:User}]})[_0xb557[12]](function(_0x57f7xc){return _0x57f7x8[_0xb557[11]](200)[_0xb557[10]](_0x57f7xc)})[_0xb557[9]](function(_0x57f7x9){return _0x57f7xb(_0x57f7x9)})};exports[_0xb557[17]]=function(_0x57f7x7,_0x57f7x8){FaxRoom[_0xb557[23]]({where:{id:_0x57f7x7[_0xb557[16]][_0xb557[13]]},include:[{model:FaxMessage,include:[{model:FaxRoom,include:[{model:FaxAccount}]},{model:Contact,as:_0xb557[19]},{model:Contact,as:_0xb557[20]}]},{model:FaxAccount}],order:[[FaxMessage,_0xb557[21],_0xb557[22]]]})[_0xb557[12]](function(_0x57f7xd){if(!_0x57f7xd){return _0x57f7x8[_0xb557[18]](404)};return _0x57f7x8[_0xb557[10]](_0x57f7xd)})[_0xb557[9]](function(_0x57f7x9){return handleError(_0x57f7x8,_0x57f7x9)})};exports[_0xb557[24]]=function(_0x57f7x7,_0x57f7x8){FaxRoom[_0xb557[24]](_0x57f7x7[_0xb557[25]])[_0xb557[12]](function(_0x57f7xd){return _0x57f7x8[_0xb557[11]](201)[_0xb557[10]](_0x57f7xd)})[_0xb557[9]](function(_0x57f7x9){return handleError(_0x57f7x8,_0x57f7x9)})};exports[_0xb557[26]]=function(_0x57f7x7,_0x57f7x8){FaxRoom[_0xb557[29]](_0x57f7x7[_0xb557[16]][_0xb557[13]])[_0xb557[12]](function(_0x57f7xd){if(!_0x57f7xd){return _0x57f7x8[_0xb557[18]](404)};var _0x57f7xe=_[_0xb557[27]](_0x57f7xd,_0x57f7x7[_0xb557[25]]);_0x57f7xe[_0xb557[28]]()[_0xb557[12]](function(){return _0x57f7x8[_0xb557[11]](200)[_0xb557[10]](_0x57f7xd)})[_0xb557[9]](function(_0x57f7x9){return handleError(_0x57f7x8,_0x57f7x9)})})[_0xb557[9]](function(_0x57f7x9){return handleError(_0x57f7x8,_0x57f7x9)})};exports[_0xb557[30]]=function(_0x57f7x7,_0x57f7x8){FaxRoom[_0xb557[29]](_0x57f7x7[_0xb557[16]][_0xb557[13]])[_0xb557[12]](function(_0x57f7xd){if(!_0x57f7xd){return _0x57f7x8[_0xb557[18]](404)};_0x57f7xd[_0xb557[30]]()[_0xb557[12]](function(){return _0x57f7x8[_0xb557[18]](204)})[_0xb557[9]](function(_0x57f7x9){return handleError(_0x57f7x8,_0x57f7x9)})})[_0xb557[9]](function(_0x57f7x9){return handleError(_0x57f7x8,_0x57f7x9)})};function handleError(_0x57f7x8,_0x57f7x9){return _0x57f7x8[_0xb557[11]](500)[_0xb557[10]](_0x57f7x9)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var FaxRoom = require('../../models').FaxRoom;
+var FaxAccount = require('../../models').FaxAccount;
+var FaxMessage = require('../../models').FaxMessage;
+var Contact = require('../../models').Contact;
+var User = require('../../models').User;
+
+// Get list of fax_rooms
+exports.index = function(req, res) {
+  FaxRoom
+    .findAll({
+      include: [{
+        model: FaxMessage,
+        attributes: ['id']
+      }, {
+        model: FaxAccount
+      }, {
+        model: User
+      }]
+    })
+    .then(function(fax_rooms) {
+      return res.status(200).send(fax_rooms);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get list of agent mailRooms
+exports.agentIndex = function(req, res, next) {
+  FaxRoom
+    .findAll({
+      where: {
+        UserId: req.params.id
+      },
+      include: [{
+        model: FaxAccount
+      }, {
+        model: User
+      }]
+    })
+    .then(function(faxRooms) {
+      return res.status(200).send(faxRooms);
+    })
+    .catch(function(err) {
+      return next(err);
+    });
+};
+
+// Get a single fax_room
+exports.show = function(req, res) {
+  FaxRoom
+    .findOne({
+      where: {
+        id: req.params.id
+      },
+      include: [{
+        model: FaxMessage,
+        include: [{
+          model: FaxRoom,
+          include: [{
+            model: FaxAccount
+          }]
+        }, {
+          model: Contact,
+          as: 'From'
+        }, {
+          model: Contact,
+          as: 'To'
+        }]
+      }, {
+        model: FaxAccount
+      }],
+      order: [
+        [FaxMessage, 'createdAt', 'DESC']
+      ]
+    })
+    .then(function(fax_room) {
+      if (!fax_room) {
+        return res.sendStatus(404);
+      }
+      return res.send(fax_room);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new fax_room in the DB.
+exports.create = function(req, res) {
+  FaxRoom
+    .create(req.body)
+    .then(function(fax_room) {
+      return res.status(201).send(fax_room);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Updates an existing fax_room in the DB.
+exports.update = function(req, res) {
+  // if (req.body.id) {
+  //   delete req.body.id;
+  // }
+  FaxRoom
+    .findById(req.params.id)
+    .then(function(fax_room) {
+      if (!fax_room) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(fax_room, req.body);
+      updated.save()
+        .then(function() {
+          return res.status(200).send(fax_room);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a fax_room from the DB.
+exports.destroy = function(req, res) {
+  FaxRoom
+    .findById(req.params.id)
+    .then(function(fax_room) {
+      if (!fax_room) {
+        return res.sendStatus(404);
+      }
+      fax_room.destroy()
+        .then(function() {
+          return res.sendStatus(204);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index 28a931a..ba9c227 100644 (file)
@@ -1 +1,64 @@
-var _0xe219=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x55\x73\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x46\x61\x78\x52\x6F\x6F\x6D","\x46\x61\x78\x51\x75\x65\x75\x65","\x46\x61\x78\x41\x63\x63\x6F\x75\x6E\x74","\x46\x61\x78\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x73\x74\x61\x74\x75\x73","\x4E\x45\x57","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x69\x64","\x46\x61\x78\x41\x63\x63\x6F\x75\x6E\x74\x49\x64","\x46\x41\x58","\x66\x72\x6F\x6D","\x73\x61\x76\x65","\x66\x61\x78","\x63\x72\x65\x61\x74\x65","\x74\x68\x65\x6E","\x73\x74\x72\x61\x74\x65\x67\x79","\x74\x69\x6D\x65\x6F\x75\x74","\x70\x72\x69\x6F\x72\x69\x74\x79","\x67\x65\x74\x46\x61\x78\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x66\x69\x6E\x64\x42\x79\x49\x64"];_0xe219[0];var User=require(_0xe219[2])[_0xe219[1]];var FaxRoom=require(_0xe219[2])[_0xe219[3]];var FaxQueue=require(_0xe219[2])[_0xe219[4]];var FaxAccount=require(_0xe219[2])[_0xe219[5]];var FaxApplication=require(_0xe219[2])[_0xe219[6]];exports[_0xe219[7]]=function(_0x314cx6){FaxRoom[_0xe219[8]](function(_0x314cx7){onSave(_0x314cx6,_0x314cx7)})};function onSave(_0x314cx6,_0x314cx7,_0x314cx9){if(_0x314cx7[_0xe219[9]]===_0xe219[10]){FaxAccount[_0xe219[25]](_0x314cx7.FaxAccountId)[_0xe219[20]](function(_0x314cxb){_0x314cxb[_0xe219[24]]({include:[{model:User,attributes:[_0xe219[13]]},{model:FaxQueue,attributes:[_0xe219[13],_0xe219[21],_0xe219[22]],include:{model:User,attributes:[_0xe219[13]]}}],order:[[_0xe219[23]]]})[_0xe219[20]](function(_0x314cxc){var _0x314cxd={roomId:_0x314cx7[_0xe219[13]],accountId:_0x314cx7[_0xe219[14]],channel:_0xe219[15],msg:{from:_0x314cx7[_0xe219[16]]},applications:_0x314cxc};_0x314cx6[_0xe219[19]](_0xe219[18],_0x314cxd)[_0xe219[17]]()})[_0xe219[12]](function(_0x314cxa){console[_0xe219[11]](_0x314cxa)})})[_0xe219[12]](function(_0x314cxa){console[_0xe219[11]](_0x314cxa)})}}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var User = require('../../models').User;
+var FaxRoom = require('../../models').FaxRoom;
+var FaxQueue = require('../../models').FaxQueue;
+var FaxAccount = require('../../models').FaxAccount;
+var FaxApplication = require('../../models').FaxApplication;
+
+exports.register = function(queue) {
+  FaxRoom.afterCreate(function(doc) {
+    onSave(queue, doc);
+  });
+}
+
+function onSave(queue, doc, cb) {
+  if (doc.status === 'NEW') {
+    FaxAccount
+      .findById(doc.FaxAccountId)
+      .then(function(faxAccount) {
+        faxAccount
+          .getFaxApplications({
+            include: [{
+              model: User,
+              attributes: ['id']
+            }, {
+              model: FaxQueue,
+              attributes: ['id', 'strategy', 'timeout'],
+              include: {
+                model: User,
+                attributes: ['id']
+              }
+            }],
+            order: [
+              ['priority']
+            ]
+          })
+          .then(function(faxApplications) {
+
+            var data = {
+              roomId: doc.id,
+              accountId: doc.FaxAccountId,
+              channel: 'FAX',
+              msg: {
+                from: doc.from
+              },
+              applications: faxApplications
+            };
+
+            // Create queue process
+            queue.create('fax', data).save();
+          })
+          .catch(function(err) {
+            console.error(err);
+          });
+      })
+      .catch(function(err) {
+        console.error(err);
+      });
+  }
+}
index 36f650a..92f71b0 100644 (file)
@@ -1 +1,24 @@
-var _0x4223=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x46\x61\x78\x52\x6F\x6F\x6D","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x66\x61\x78\x5F\x72\x6F\x6F\x6D\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x66\x61\x78\x5F\x72\x6F\x6F\x6D\x3A\x72\x65\x6D\x6F\x76\x65"];_0x4223[0];var fax_room=require(_0x4223[2])[_0x4223[1]];exports[_0x4223[3]]=function(_0xe419x2){fax_room[_0x4223[4]](function(_0xe419x3){onSave(_0xe419x2,_0xe419x3)});fax_room[_0x4223[5]](function(_0xe419x3){onRemove(_0xe419x2,_0xe419x3)})};function onSave(_0xe419x2,_0xe419x3,_0xe419x5){_0xe419x2[_0x4223[7]](_0x4223[6],_0xe419x3)}function onRemove(_0xe419x2,_0xe419x3,_0xe419x5){_0xe419x2[_0x4223[7]](_0x4223[8],_0xe419x3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var fax_room = require('../../models').FaxRoom;
+
+exports.register = function(socket) {
+  fax_room.afterCreate(function (doc) {
+    onSave(socket, doc);
+  });
+  fax_room.afterDestroy(function (doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('fax_room:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('fax_room:remove', doc);
+}
index 2315f6e..1a5ae47 100644 (file)
@@ -1 +1,20 @@
-var _0xe605=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x73\x68\x6F\x75\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x70\x70","\x73\x75\x70\x65\x72\x74\x65\x73\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x66\x61\x78\x2F\x72\x6F\x6F\x6D\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x70\x6F\x6E\x64\x20\x77\x69\x74\x68\x20\x4A\x53\x4F\x4E\x20\x61\x72\x72\x61\x79","\x69\x6E\x73\x74\x61\x6E\x63\x65\x6F\x66","\x62\x65","\x62\x6F\x64\x79","\x65\x6E\x64","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x65\x78\x70\x65\x63\x74","\x2F\x61\x70\x69\x2F\x66\x61\x78\x2F\x72\x6F\x6F\x6D\x73","\x67\x65\x74"];_0xe605[0];var should=require(_0xe605[1]);var app=require(_0xe605[2]);var request=require(_0xe605[3]);describe(_0xe605[4],function(){it(_0xe605[5],function(_0xde6fx4){request(app)[_0xe605[13]](_0xe605[12])[_0xe605[11]](200)[_0xe605[11]](_0xe605[10],/json/)[_0xe605[9]](function(_0xde6fx5,_0xde6fx6){if(_0xde6fx5){return _0xde6fx4(_0xde6fx5)};_0xde6fx6[_0xe605[8]][_0xe605[1]][_0xe605[7]][_0xe605[6]](Array);_0xde6fx4()})})})
\ No newline at end of file
+'use strict';
+
+var should = require('should');
+var app = require('../../app');
+var request = require('supertest');
+
+describe('GET /api/fax/rooms', function() {
+
+  it('should respond with JSON array', function(done) {
+    request(app)
+      .get('/api/fax/rooms')
+      .expect(200)
+      .expect('Content-Type', /json/)
+      .end(function(err, res) {
+        if (err) return done(err);
+        res.body.should.be.instanceof(Array);
+        done();
+      });
+  });
+});
\ No newline at end of file
index 0cfaec0..73e938a 100644 (file)
@@ -1 +1,17 @@
-var _0xf29a=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x66\x61\x78\x5F\x72\x6F\x6F\x6D\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x56\x61\x6C\x69\x64\x44\x61\x74\x65","\x68\x61\x73\x46\x61\x78","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x61\x67\x65\x6E\x74\x2F\x3A\x69\x64","\x61\x67\x65\x6E\x74\x49\x6E\x64\x65\x78","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0xf29a[0];var express=require(_0xf29a[1]);var controller=require(_0xf29a[2]);var license=require(_0xf29a[3]);var router=express.Router();router[_0xf29a[8]](_0xf29a[4],license[_0xf29a[5]](),license[_0xf29a[6]](),controller[_0xf29a[7]]);router[_0xf29a[8]](_0xf29a[9],controller[_0xf29a[10]]);router[_0xf29a[8]](_0xf29a[11],controller[_0xf29a[12]]);router[_0xf29a[14]](_0xf29a[4],controller[_0xf29a[13]]);router[_0xf29a[16]](_0xf29a[11],controller[_0xf29a[15]]);router[_0xf29a[17]](_0xf29a[11],controller[_0xf29a[15]]);router[_0xf29a[19]](_0xf29a[11],controller[_0xf29a[18]]);module[_0xf29a[20]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./fax_room.controller');
+var license = require('../../config/license/license.service');
+
+var router = express.Router();
+
+router.get('/', license.isValidDate(), license.hasFax(), controller.index);
+router.get('/agent/:id', controller.agentIndex);
+router.get('/:id', controller.show);
+router.post('/', controller.create);
+router.put('/:id', controller.update);
+router.patch('/:id', controller.update);
+router.delete('/:id', controller.destroy);
+
+module.exports = router;
index ddfe36a..ae9ab8a 100644 (file)
@@ -1 +1,239 @@
-var _0x95bf=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x66\x72\x65\x73\x68\x64\x65\x73\x6B","\x46\x72\x65\x73\x68\x64\x65\x73\x6B\x41\x63\x63\x6F\x75\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6A\x73\x6F\x6E","\x65\x6E\x64","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x73\x74\x72\x6F\x79","\x69\x6E\x64\x65\x78","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x6E\x61\x6D\x65","\x75\x73\x65\x72\x6E\x61\x6D\x65","\x72\x65\x6D\x6F\x74\x65\x55\x72\x69","\x70\x65\x72\x5F\x70\x61\x67\x65","\x71\x75\x65\x72\x79","\x70\x61\x67\x65","\x6F\x72\x64\x65\x72","\x25\x73\x20\x25\x73","\x73\x6F\x72\x74\x5F\x62\x79","\x73\x6F\x72\x74\x5F\x6F\x72\x64\x65\x72","\x41\x53\x43","\x66\x6F\x72\x6D\x61\x74","\x24\x6F\x72","\x77\x68\x65\x72\x65","\x25","\x70\x75\x73\x68","\x66\x6F\x72\x45\x61\x63\x68","\x24","\x24\x6C\x69\x6B\x65","\x66\x6F\x72\x49\x6E","\x53\x6F\x6D\x65\x74\x68\x69\x6E\x67\x20\x62\x6C\x65\x77\x20\x75\x70\x21","\x63\x61\x74\x63\x68","\x63\x6F\x75\x6E\x74","\x63\x65\x69\x6C","\x6F\x66\x66\x73\x65\x74","\x25\x73\x3A\x2F\x2F\x25\x73\x25\x73\x3F\x70\x61\x67\x65\x3D\x25\x64","\x70\x72\x6F\x74\x6F\x63\x6F\x6C","\x68\x6F\x73\x74","\x68\x65\x61\x64\x65\x72\x73","\x62\x61\x73\x65\x55\x72\x6C","\x72\x6F\x77\x73","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x63\x68\x65\x63\x6B\x41\x63\x63\x6F\x75\x6E\x74","\x61\x70\x69\x4B\x65\x79","\x70\x61\x72\x73\x65","\x72\x65\x71\x75\x69\x72\x65\x5F\x6C\x6F\x67\x69\x6E","\x6C\x69\x73\x74\x54\x69\x63\x6B\x65\x74\x73","\x61\x63\x63\x6F\x75\x6E\x74\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E","\x66\x69\x65\x6C\x64","\x76\x61\x6C\x75\x65","\x67\x65\x74\x46\x69\x65\x6C\x64\x73","\x2F\x74\x69\x63\x6B\x65\x74\x5F\x66\x69\x65\x6C\x64\x73\x2E\x6A\x73\x6F\x6E","\x67\x65\x74"];_0x95bf[0];var _=require(_0x95bf[1]);var util=require(_0x95bf[2]);var _fd=require(_0x95bf[3]);var FreshdeskAccount=require(_0x95bf[5])[_0x95bf[4]];function handleError(_0xb672x6,_0xb672x7){_0xb672x7=_0xb672x7||500;return function(_0xb672x8){_0xb672x6[_0x95bf[7]](_0xb672x7)[_0x95bf[6]](_0xb672x8)}}function responseWithResult(_0xb672x6,_0xb672x7){_0xb672x7=_0xb672x7||200;return function(_0xb672xa){if(_0xb672xa){_0xb672x6[_0x95bf[7]](_0xb672x7)[_0x95bf[8]](_0xb672xa)}}}function handleEntityNotFound(_0xb672x6){return function(_0xb672xa){if(!_0xb672xa){_0xb672x6[_0x95bf[7]](404)[_0x95bf[9]]();return null};return _0xb672xa}}function saveUpdates(_0xb672xd){return function(_0xb672xa){return _0xb672xa[_0x95bf[11]](_0xb672xd)[_0x95bf[10]](function(_0xb672xe){return _0xb672xe})}}function removeEntity(_0xb672x6){return function(_0xb672xa){if(_0xb672xa){return _0xb672xa[_0x95bf[12]]()[_0x95bf[10]](function(){_0xb672x6[_0x95bf[7]](204)[_0x95bf[9]]()})}}}exports[_0x95bf[13]]=function(_0xb672x10,_0xb672x6){var _0xb672x11=[_0x95bf[14],_0x95bf[15],_0x95bf[16],_0x95bf[17]];var _0xb672x12=_0xb672x10[_0x95bf[19]][_0x95bf[18]]?parseInt(_0xb672x10[_0x95bf[19]][_0x95bf[18]],10):100;var _0xb672x13=_0xb672x10[_0x95bf[19]][_0x95bf[20]]?parseInt(_0xb672x10[_0x95bf[19]][_0x95bf[20]],10):0;var _0xb672x14={where:{},limit:_0xb672x12,offset:_0xb672x13*_0xb672x12};_[_0x95bf[34]](_0xb672x10[_0x95bf[19]],function(_0xb672x15,_0xb672x16){switch(_0xb672x16){case _0x95bf[18]:;case _0x95bf[20]:break;case _0x95bf[23]:_0xb672x14[_0x95bf[21]]=util[_0x95bf[26]](_0x95bf[22],_0xb672x10[_0x95bf[19]][_0x95bf[23]],_0xb672x10[_0x95bf[19]][_0x95bf[24]]||_0x95bf[25])||null;break;case _0x95bf[24]:break;case _0x95bf[32]:_0xb672x14[_0x95bf[28]][_0x95bf[27]]=[];_0xb672x11[_0x95bf[31]](function(_0xb672x17){var _0xb672x18={};_0xb672x18[_0xb672x17]={$like:_0x95bf[29]+_0xb672x15+_0x95bf[29]};_0xb672x14[_0x95bf[28]][_0x95bf[27]][_0x95bf[30]](_0xb672x18)});break;default:_0xb672x14[_0x95bf[28]][_0xb672x16]={$like:{}};_0xb672x14[_0x95bf[28]][_0xb672x16][_0x95bf[33]]=_0x95bf[29]+_0xb672x15+_0x95bf[29]}});FreshdeskAccount[_0x95bf[46]](_0xb672x14)[_0x95bf[10]](function(_0xb672x19){var _0xb672x1a=Math[_0x95bf[38]](_0xb672x19[_0x95bf[37]]/_0xb672x12);var _0xb672x1b=_0xb672x1a>(_0xb672x14[_0x95bf[39]]+1)?util[_0x95bf[26]](_0x95bf[40],_0xb672x10[_0x95bf[41]],_0xb672x10[_0x95bf[43]][_0x95bf[42]],_0xb672x10[_0x95bf[44]],_0xb672x13+1):null;var _0xb672x1c=_0xb672x13>0?util[_0x95bf[26]](_0x95bf[40],_0xb672x10[_0x95bf[41]],_0xb672x10[_0x95bf[43]][_0x95bf[42]],_0xb672x10[_0x95bf[44]],_0xb672x13-1):null;return _0xb672x6[_0x95bf[7]](200)[_0x95bf[6]]({count:_0xb672x19[_0x95bf[37]],rows:_0xb672x19[_0x95bf[45]],next_page:_0xb672x1b,previous_page:_0xb672x1c,total_pages:_0xb672x1a})})[_0x95bf[36]](function(_0xb672x8){return _0xb672x6[_0x95bf[7]](500)[_0x95bf[6]]({error:_0x95bf[35]})})};exports[_0x95bf[47]]=function(_0xb672x10,_0xb672x6){FreshdeskAccount[_0x95bf[50]](_0xb672x10[_0x95bf[49]][_0x95bf[48]])[_0x95bf[10]](handleEntityNotFound(_0xb672x6))[_0x95bf[10]](responseWithResult(_0xb672x6))[_0x95bf[36]](handleError(_0xb672x6))};exports[_0x95bf[51]]=function(_0xb672x10,_0xb672x6){FreshdeskAccount[_0x95bf[51]](_0xb672x10[_0x95bf[52]])[_0x95bf[10]](responseWithResult(_0xb672x6,201))[_0x95bf[36]](handleError(_0xb672x6))};exports[_0x95bf[53]]=function(_0xb672x10,_0xb672x6){if(_0xb672x10[_0x95bf[52]][_0x95bf[48]]){delete _0xb672x10[_0x95bf[52]][_0x95bf[48]]};FreshdeskAccount[_0x95bf[50]](_0xb672x10[_0x95bf[49]][_0x95bf[48]])[_0x95bf[10]](handleEntityNotFound(_0xb672x6))[_0x95bf[10]](saveUpdates(_0xb672x10[_0x95bf[52]]))[_0x95bf[10]](responseWithResult(_0xb672x6))[_0x95bf[36]](handleError(_0xb672x6))};exports[_0x95bf[12]]=function(_0xb672x10,_0xb672x6){FreshdeskAccount[_0x95bf[50]](_0xb672x10[_0x95bf[49]][_0x95bf[48]])[_0x95bf[10]](handleEntityNotFound(_0xb672x6))[_0x95bf[10]](removeEntity(_0xb672x6))[_0x95bf[36]](handleError(_0xb672x6))};exports[_0x95bf[54]]=function(_0xb672x10,_0xb672x6){FreshdeskAccount[_0x95bf[12]]({where:{id:_0xb672x10[_0x95bf[19]][_0x95bf[48]]},individualHooks:true})[_0x95bf[10]](function(){return _0xb672x6[_0x95bf[55]](204)})[_0x95bf[36]](function(_0xb672x8){return handleError(_0xb672x6,_0xb672x8)})};exports[_0x95bf[56]]=function(_0xb672x10,_0xb672x6){FreshdeskAccount[_0x95bf[50]](_0xb672x10[_0x95bf[49]][_0x95bf[48]])[_0x95bf[10]](handleEntityNotFound(_0xb672x6))[_0x95bf[10]](function(_0xb672x1d){var _0xb672x1e= new _fd(_0xb672x1d[_0x95bf[17]],_0xb672x1d[_0x95bf[57]]);_0xb672x1e[_0x95bf[60]](function(_0xb672x8,_0xb672x1f,_0xb672x20){if(_0xb672x8){return _0xb672x6[_0x95bf[55]](400)};_0xb672x20=JSON[_0x95bf[58]](_0xb672x20);if(_0xb672x20[_0x95bf[59]]){return _0xb672x6[_0x95bf[55]](400)};return _0xb672x6[_0x95bf[55]](200)})})[_0x95bf[36]](handleError(_0xb672x6))};exports[_0x95bf[61]]=function(_0xb672x10,_0xb672x6){var _0xb672x21={};_0xb672x21[_0xb672x10[_0x95bf[49]][_0x95bf[62]]]=_0xb672x10[_0x95bf[52]][_0x95bf[63]];FreshdeskAccount[_0x95bf[46]]({where:_0xb672x21})[_0x95bf[10]](function(_0xb672x19){if(_0xb672x19[_0x95bf[37]]){return _0xb672x6[_0x95bf[7]](200)[_0x95bf[6]]({isValid:false,value:_0xb672x10[_0x95bf[52]][_0x95bf[63]]})};return _0xb672x6[_0x95bf[7]](200)[_0x95bf[6]]({isValid:true,value:_0xb672x10[_0x95bf[52]][_0x95bf[63]]})})[_0x95bf[36]](function(_0xb672x8){return handleError(_0xb672x6,_0xb672x8)})};exports[_0x95bf[64]]=function(_0xb672x10,_0xb672x6,_0xb672x22){FreshdeskAccount[_0x95bf[50]](_0xb672x10[_0x95bf[49]][_0x95bf[48]])[_0x95bf[10]](handleEntityNotFound(_0xb672x6))[_0x95bf[10]](function(_0xb672x1d){var _0xb672x23= new _fd(_0xb672x1d[_0x95bf[17]],_0xb672x1d[_0x95bf[57]]);_0xb672x23[_0x95bf[66]](_0x95bf[65],function(_0xb672x8,_0xb672x1f,_0xb672x20){if(_0xb672x8){return _0xb672x22(_0xb672x8)};_0xb672x20=JSON[_0x95bf[58]](_0xb672x20);return _0xb672x6[_0x95bf[7]](200)[_0x95bf[6]](_0xb672x20)})})[_0x95bf[36]](handleError(_0xb672x6))}
\ No newline at end of file
+/**
+ * Using Rails-like standard naming convention for endpoints.
+ * GET     /api/freshdesk/accounts              ->  index
+ * POST    /api/freshdesk/accounts              ->  create
+ * GET     /api/freshdesk/accounts/:id          ->  show
+ * PUT     /api/freshdesk/accounts/:id          ->  update
+ * DELETE  /api/freshdesk/accounts/:id          ->  destroy
+ */
+
+'use strict';
+
+
+var _ = require('lodash');
+var util = require('util');
+var _fd = require('freshdesk');
+
+var FreshdeskAccount = require('../../models').FreshdeskAccount;
+
+
+function handleError(res, statusCode) {
+  statusCode = statusCode || 500;
+  return function(err) {
+    res.status(statusCode).send(err);
+  };
+}
+
+function responseWithResult(res, statusCode) {
+  statusCode = statusCode || 200;
+  return function(entity) {
+    if (entity) {
+      res.status(statusCode).json(entity);
+    }
+  };
+}
+
+function handleEntityNotFound(res) {
+  return function(entity) {
+    if (!entity) {
+      res.status(404).end();
+      return null;
+    }
+    return entity;
+  };
+}
+
+function saveUpdates(updates) {
+  return function(entity) {
+    return entity.updateAttributes(updates)
+      .then(function(updated) {
+        return updated;
+      });
+  };
+}
+
+function removeEntity(res) {
+  return function(entity) {
+    if (entity) {
+      return entity.destroy()
+        .then(function() {
+          res.status(204).end();
+        });
+    }
+  };
+}
+
+// Gets a list of FreshdeskAccounts
+exports.index = function(req, res) {
+  var attributes = ['description', 'name', 'username', 'remoteUri'];
+  var per_page = req.query.per_page ? parseInt(req.query.per_page, 10) : 100;
+  var page = req.query.page ? parseInt(req.query.page, 10) : 0;
+
+  var query = {
+    where: {},
+    limit: per_page,
+    offset: page * per_page
+  };
+
+  _.forIn(req.query, function(value, key) {
+    switch (key) {
+      case 'per_page':
+      case 'page':
+        break;
+      case 'sort_by':
+        query.order = util.format('%s %s', req.query.sort_by, req.query.sort_order || 'ASC') || null;
+        break;
+      case 'sort_order':
+        break;
+      case '$':
+        query.where.$or = [];
+        attributes.forEach(function(attribute) {
+          var tmp = {};
+          tmp[attribute] = {
+            $like: '%' + value + '%'
+          };
+
+          query.where.$or.push(tmp);
+        });
+        break;
+      default:
+        query.where[key] = {
+          $like: {}
+        };
+        query.where[key].$like = '%' + value + '%';
+    }
+  });
+
+  FreshdeskAccount
+    .findAndCountAll(query)
+    .then(function(result) {
+
+      var total_pages = Math.ceil(result.count / per_page);
+      var next_page = total_pages > (query.offset + 1) ? util.format('%s://%s%s?page=%d', req.protocol, req.headers.host, req.baseUrl, page + 1) : null;
+      var previous_page = page > 0 ? util.format('%s://%s%s?page=%d', req.protocol, req.headers.host, req.baseUrl, page - 1) : null;
+
+      return res.status(200).send({
+        count: result.count,
+        rows: result.rows,
+        next_page: next_page,
+        previous_page: previous_page,
+        total_pages: total_pages
+      });
+
+    })
+    .catch(function(err) {
+      return res.status(500).send({
+        error: 'Something blew up!'
+      });
+    });
+}
+
+// Gets a single FreshdeskAccount from the DB
+exports.show = function(req, res) {
+  FreshdeskAccount.findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(responseWithResult(res))
+    .catch(handleError(res));
+}
+
+// Creates a new FreshdeskAccount in the DB
+exports.create = function(req, res) {
+  FreshdeskAccount.create(req.body)
+    .then(responseWithResult(res, 201))
+    .catch(handleError(res));
+}
+
+// Updates an existing FreshdeskAccount in the DB
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  FreshdeskAccount.findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(saveUpdates(req.body))
+    .then(responseWithResult(res))
+    .catch(handleError(res));
+}
+
+// Deletes a FreshdeskAccount from the DB
+exports.destroy = function(req, res) {
+  FreshdeskAccount.findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(removeEntity(res))
+    .catch(handleError(res));
+}
+
+exports.bulkDestroy = function(req, res) {
+  FreshdeskAccount
+    .destroy({
+      where: {
+        id: req.query.id
+      },
+      individualHooks: true
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+exports.checkAccount = function(req, res) {
+  FreshdeskAccount.findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(function(account) {
+      var freshdesk = new _fd(account.remoteUri, account.apiKey);
+      freshdesk.listTickets(function(err, response, body) {
+        if (err) {
+          return res.sendStatus(400);
+        }
+        body = JSON.parse(body);
+        if (body.require_login) {
+          return res.sendStatus(400);
+        }
+        return res.sendStatus(200);
+      })
+    })
+    .catch(handleError(res));
+}
+
+exports.accountValidation = function(req, res) {
+  var where = {};
+  where[req.params.field] = req.body.value;
+  FreshdeskAccount
+    .findAndCountAll({
+      where: where
+    })
+    .then(function(result) {
+      if (result.count) {
+        return res.status(200).send({
+          isValid: false,
+          value: req.body.value
+        });
+      }
+      return res.status(200).send({
+        isValid: true,
+        value: req.body.value
+      });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+exports.getFields = function(req, res, next) {
+  FreshdeskAccount.findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(function(account) {
+      var Freshdesk = new _fd(account.remoteUri, account.apiKey);
+      Freshdesk.get('/ticket_fields.json', function(err, response, body) {
+        if (err) {
+          return next(err);
+        }
+        body = JSON.parse(body);
+        return res.status(200).send(body);
+      });
+    })
+    .catch(handleError(res));
+};
index ba48045..2aabaae 100644 (file)
@@ -1 +1,24 @@
-var _0xbd3b=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x46\x72\x65\x73\x68\x64\x65\x73\x6B\x41\x63\x63\x6F\x75\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x5F\x61\x63\x63\x6F\x75\x6E\x74\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x5F\x61\x63\x63\x6F\x75\x6E\x74\x3A\x72\x65\x6D\x6F\x76\x65"];_0xbd3b[0];var FreshdeskAccount=require(_0xbd3b[2])[_0xbd3b[1]];exports[_0xbd3b[3]]=function(_0x4c0cx2){FreshdeskAccount[_0xbd3b[4]](function(_0x4c0cx3){onSave(_0x4c0cx2,_0x4c0cx3)});FreshdeskAccount[_0xbd3b[5]](function(_0x4c0cx3){onRemove(_0x4c0cx2,_0x4c0cx3)})};function onSave(_0x4c0cx2,_0x4c0cx3,_0x4c0cx5){_0x4c0cx2[_0xbd3b[7]](_0xbd3b[6],_0x4c0cx3)}function onRemove(_0x4c0cx2,_0x4c0cx3,_0x4c0cx5){_0x4c0cx2[_0xbd3b[7]](_0xbd3b[8],_0x4c0cx3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var FreshdeskAccount = require('../../models').FreshdeskAccount;
+
+exports.register = function(socket) {
+  FreshdeskAccount.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  FreshdeskAccount.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+};
+
+function onSave(socket, doc, cb) {
+  socket.emit('freshdesk_account:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('freshdesk_account:remove', doc);
+}
index eed04fd..a7385b7 100644 (file)
@@ -1 +1,21 @@
-var _0x2c68=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x2F\x3A\x69\x64\x2F\x66\x69\x65\x6C\x64\x73","\x67\x65\x74\x46\x69\x65\x6C\x64\x73","\x2F\x3A\x69\x64\x2F\x63\x68\x65\x63\x6B","\x63\x68\x65\x63\x6B\x41\x63\x63\x6F\x75\x6E\x74","\x2F\x76\x61\x6C\x69\x64\x61\x74\x65\x2F\x3A\x66\x69\x65\x6C\x64","\x61\x63\x63\x6F\x75\x6E\x74\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E","\x70\x6F\x73\x74","\x63\x72\x65\x61\x74\x65","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0x2c68[0];var express=require(_0x2c68[1]);var auth=require(_0x2c68[2]);var controller=require(_0x2c68[3]);var router=express.Router();router[_0x2c68[7]](_0x2c68[4],auth[_0x2c68[5]](),controller[_0x2c68[6]]);router[_0x2c68[7]](_0x2c68[8],auth[_0x2c68[5]](),controller[_0x2c68[9]]);router[_0x2c68[7]](_0x2c68[10],auth[_0x2c68[5]](),controller[_0x2c68[11]]);router[_0x2c68[7]](_0x2c68[12],auth[_0x2c68[5]](),controller[_0x2c68[13]]);router[_0x2c68[16]](_0x2c68[14],auth[_0x2c68[5]](),controller[_0x2c68[15]]);router[_0x2c68[16]](_0x2c68[4],auth[_0x2c68[5]](),controller[_0x2c68[17]]);router[_0x2c68[19]](_0x2c68[8],auth[_0x2c68[5]](),controller[_0x2c68[18]]);router[_0x2c68[20]](_0x2c68[8],auth[_0x2c68[5]](),controller[_0x2c68[18]]);router[_0x2c68[22]](_0x2c68[4],auth[_0x2c68[5]](),controller[_0x2c68[21]]);router[_0x2c68[22]](_0x2c68[8],auth[_0x2c68[5]](),controller[_0x2c68[23]]);module[_0x2c68[24]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var auth = require('../../auth/auth.service');
+var controller = require('./freshdesk_account.controller');
+
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), controller.index);
+router.get('/:id', auth.isAuthenticated(), controller.show);
+router.get('/:id/fields', auth.isAuthenticated(), controller.getFields);
+router.get('/:id/check', auth.isAuthenticated(), controller.checkAccount);
+router.post('/validate/:field', auth.isAuthenticated(), controller.accountValidation);
+router.post('/', auth.isAuthenticated(), controller.create);
+router.put('/:id', auth.isAuthenticated(), controller.update);
+router.patch('/:id', auth.isAuthenticated(), controller.update);
+router.delete('/', auth.isAuthenticated(), controller.bulkDestroy);
+router.delete('/:id', auth.isAuthenticated(), controller.destroy);
+
+
+module.exports = router;
index 4a3c10e..6d7fc75 100644 (file)
@@ -1 +1,97 @@
-var _0x6add=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6E\x6F\x50\x72\x65\x73\x65\x72\x76\x65\x43\x61\x63\x68\x65","\x70\x72\x6F\x78\x79\x71\x75\x69\x72\x65","\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x41\x63\x63\x6F\x75\x6E\x74\x43\x74\x72\x6C\x2E\x69\x6E\x64\x65\x78","\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x41\x63\x63\x6F\x75\x6E\x74\x43\x74\x72\x6C\x2E\x73\x68\x6F\x77","\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x41\x63\x63\x6F\x75\x6E\x74\x43\x74\x72\x6C\x2E\x63\x72\x65\x61\x74\x65","\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x41\x63\x63\x6F\x75\x6E\x74\x43\x74\x72\x6C\x2E\x75\x70\x64\x61\x74\x65","\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x41\x63\x63\x6F\x75\x6E\x74\x43\x74\x72\x6C\x2E\x64\x65\x73\x74\x72\x6F\x79","\x73\x70\x79","\x2E\x2F\x69\x6E\x64\x65\x78\x2E\x6A\x73","\x46\x72\x65\x73\x68\x64\x65\x73\x6B\x41\x63\x63\x6F\x75\x6E\x74\x20\x41\x50\x49\x20\x52\x6F\x75\x74\x65\x72\x3A","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x74\x75\x72\x6E\x20\x61\x6E\x20\x65\x78\x70\x72\x65\x73\x73\x20\x72\x6F\x75\x74\x65\x72\x20\x69\x6E\x73\x74\x61\x6E\x63\x65","\x65\x71\x75\x61\x6C","\x74\x6F","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x2F\x61\x63\x63\x6F\x75\x6E\x74\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x41\x63\x63\x6F\x75\x6E\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x69\x6E\x64\x65\x78","\x63\x61\x6C\x6C\x65\x64\x4F\x6E\x63\x65","\x62\x65\x65\x6E","\x68\x61\x76\x65","\x2F","\x77\x69\x74\x68\x41\x72\x67\x73","\x67\x65\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x2F\x61\x63\x63\x6F\x75\x6E\x74\x73\x2F\x3A\x69\x64","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x41\x63\x63\x6F\x75\x6E\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x73\x68\x6F\x77","\x2F\x3A\x69\x64","\x50\x4F\x53\x54\x20\x2F\x61\x70\x69\x2F\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x2F\x61\x63\x63\x6F\x75\x6E\x74\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x41\x63\x63\x6F\x75\x6E\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x50\x55\x54\x20\x2F\x61\x70\x69\x2F\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x2F\x61\x63\x63\x6F\x75\x6E\x74\x73\x2F\x3A\x69\x64","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x41\x63\x63\x6F\x75\x6E\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x50\x41\x54\x43\x48\x20\x2F\x61\x70\x69\x2F\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x2F\x61\x63\x63\x6F\x75\x6E\x74\x73\x2F\x3A\x69\x64","\x70\x61\x74\x63\x68","\x44\x45\x4C\x45\x54\x45\x20\x2F\x61\x70\x69\x2F\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x2F\x61\x63\x63\x6F\x75\x6E\x74\x73\x2F\x3A\x69\x64","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x41\x63\x63\x6F\x75\x6E\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65"];_0x6add[0];var proxyquire=require(_0x6add[2])[_0x6add[1]]();var freshdeskAccountCtrlStub={index:_0x6add[3],show:_0x6add[4],create:_0x6add[5],update:_0x6add[6],destroy:_0x6add[7]};var routerStub={get:sinon[_0x6add[8]](),put:sinon[_0x6add[8]](),patch:sinon[_0x6add[8]](),post:sinon[_0x6add[8]](),delete:sinon[_0x6add[8]]()};var freshdeskAccountIndex=proxyquire(_0x6add[9],{"\x65\x78\x70\x72\x65\x73\x73":{Router:function(){return routerStub}},"\x2E\x2F\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72":freshdeskAccountCtrlStub});describe(_0x6add[10],function(){it(_0x6add[11],function(){expect(freshdeskAccountIndex)[_0x6add[13]][_0x6add[12]](routerStub)});describe(_0x6add[14],function(){it(_0x6add[15],function(){expect(routerStub[_0x6add[21]][_0x6add[20]](_0x6add[19],_0x6add[3]))[_0x6add[13]][_0x6add[18]][_0x6add[17]][_0x6add[16]]})});describe(_0x6add[22],function(){it(_0x6add[23],function(){expect(routerStub[_0x6add[21]][_0x6add[20]](_0x6add[24],_0x6add[4]))[_0x6add[13]][_0x6add[18]][_0x6add[17]][_0x6add[16]]})});describe(_0x6add[25],function(){it(_0x6add[26],function(){expect(routerStub[_0x6add[27]][_0x6add[20]](_0x6add[19],_0x6add[5]))[_0x6add[13]][_0x6add[18]][_0x6add[17]][_0x6add[16]]})});describe(_0x6add[28],function(){it(_0x6add[29],function(){expect(routerStub[_0x6add[30]][_0x6add[20]](_0x6add[24],_0x6add[6]))[_0x6add[13]][_0x6add[18]][_0x6add[17]][_0x6add[16]]})});describe(_0x6add[31],function(){it(_0x6add[29],function(){expect(routerStub[_0x6add[32]][_0x6add[20]](_0x6add[24],_0x6add[6]))[_0x6add[13]][_0x6add[18]][_0x6add[17]][_0x6add[16]]})});describe(_0x6add[33],function(){it(_0x6add[34],function(){expect(routerStub[_0x6add[35]][_0x6add[20]](_0x6add[24],_0x6add[7]))[_0x6add[13]][_0x6add[18]][_0x6add[17]][_0x6add[16]]})})})
\ No newline at end of file
+'use strict';
+
+var proxyquire = require('proxyquire').noPreserveCache();
+
+var freshdeskAccountCtrlStub = {
+  index: 'freshdeskAccountCtrl.index',
+  show: 'freshdeskAccountCtrl.show',
+  create: 'freshdeskAccountCtrl.create',
+  update: 'freshdeskAccountCtrl.update',
+  destroy: 'freshdeskAccountCtrl.destroy'
+};
+
+var routerStub = {
+  get: sinon.spy(),
+  put: sinon.spy(),
+  patch: sinon.spy(),
+  post: sinon.spy(),
+  delete: sinon.spy()
+};
+
+// require the index with our stubbed out modules
+var freshdeskAccountIndex = proxyquire('./index.js', {
+  'express': {
+    Router: function() {
+      return routerStub;
+    }
+  },
+  './freshdesk_account.controller': freshdeskAccountCtrlStub
+});
+
+describe('FreshdeskAccount API Router:', function() {
+
+  it('should return an express router instance', function() {
+    expect(freshdeskAccountIndex).to.equal(routerStub);
+  });
+
+  describe('GET /api/freshdesk/accounts', function() {
+
+    it('should route to freshdeskAccount.controller.index', function() {
+      expect(routerStub.get
+        .withArgs('/', 'freshdeskAccountCtrl.index')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('GET /api/freshdesk/accounts/:id', function() {
+
+    it('should route to freshdeskAccount.controller.show', function() {
+      expect(routerStub.get
+        .withArgs('/:id', 'freshdeskAccountCtrl.show')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('POST /api/freshdesk/accounts', function() {
+
+    it('should route to freshdeskAccount.controller.create', function() {
+      expect(routerStub.post
+        .withArgs('/', 'freshdeskAccountCtrl.create')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('PUT /api/freshdesk/accounts/:id', function() {
+
+    it('should route to freshdeskAccount.controller.update', function() {
+      expect(routerStub.put
+        .withArgs('/:id', 'freshdeskAccountCtrl.update')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('PATCH /api/freshdesk/accounts/:id', function() {
+
+    it('should route to freshdeskAccount.controller.update', function() {
+      expect(routerStub.patch
+        .withArgs('/:id', 'freshdeskAccountCtrl.update')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('DELETE /api/freshdesk/accounts/:id', function() {
+
+    it('should route to freshdeskAccount.controller.destroy', function() {
+      expect(routerStub.delete
+        .withArgs('/:id', 'freshdeskAccountCtrl.destroy')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+});
index 6d4aa96..4c3d44d 100644 (file)
@@ -1 +1,146 @@
-var _0x20a4=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x46\x72\x65\x73\x68\x64\x65\x73\x6B\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x46\x72\x65\x73\x68\x64\x65\x73\x6B\x46\x69\x65\x6C\x64","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6A\x73\x6F\x6E","\x65\x6E\x64","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x73\x74\x72\x6F\x79","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x71\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x53\x75\x62\x6A\x65\x63\x74","\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x46\x69\x65\x6C\x64","\x66\x69\x6E\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x66\x69\x6E\x64\x42\x79\x49\x64","\x61\x64\x64\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x46\x69\x65\x6C\x64","\x73\x70\x72\x65\x61\x64","\x61\x64\x64\x53\x75\x62\x6A\x65\x63\x74","\x73\x75\x62\x6A\x65\x63\x74","\x61\x64\x64\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x61\x64\x64\x46\x69\x65\x6C\x64","\x66\x69\x65\x6C\x64","\x74\x79\x70\x65"];_0x20a4[0];var _=require(_0x20a4[1]);var FreshdeskConfiguration=require(_0x20a4[3])[_0x20a4[2]];var FreshdeskField=require(_0x20a4[3])[_0x20a4[4]];function handleError(_0xa33dx5,_0xa33dx6){_0xa33dx6=_0xa33dx6||500;return function(_0xa33dx7){_0xa33dx5[_0x20a4[6]](_0xa33dx6)[_0x20a4[5]](_0xa33dx7)}}function responseWithResult(_0xa33dx5,_0xa33dx6){_0xa33dx6=_0xa33dx6||200;return function(_0xa33dx9){if(_0xa33dx9){_0xa33dx5[_0x20a4[6]](_0xa33dx6)[_0x20a4[7]](_0xa33dx9)}}}function handleEntityNotFound(_0xa33dx5){return function(_0xa33dx9){if(!_0xa33dx9){_0xa33dx5[_0x20a4[6]](404)[_0x20a4[8]]();return null};return _0xa33dx9}}function saveUpdates(_0xa33dxc){return function(_0xa33dx9){return _0xa33dx9[_0x20a4[10]](_0xa33dxc)[_0x20a4[9]](function(_0xa33dxd){return _0xa33dxd})}}function removeEntity(_0xa33dx5){return function(_0xa33dx9){if(_0xa33dx9){return _0xa33dx9[_0x20a4[11]]()[_0x20a4[9]](function(){_0xa33dx5[_0x20a4[6]](204)[_0x20a4[8]]()})}}}exports[_0x20a4[12]]=function(_0xa33dxf,_0xa33dx5){FreshdeskConfiguration[_0x20a4[15]]({where:_0xa33dxf[_0x20a4[14]]})[_0x20a4[9]](responseWithResult(_0xa33dx5))[_0x20a4[13]](handleError(_0xa33dx5))};exports[_0x20a4[16]]=function(_0xa33dxf,_0xa33dx5){FreshdeskConfiguration[_0x20a4[22]]({where:{id:_0xa33dxf[_0x20a4[18]][_0x20a4[17]]},include:[{model:FreshdeskField,as:_0x20a4[19]},{model:FreshdeskField,as:_0x20a4[20]},{model:FreshdeskField,as:_0x20a4[21]}]})[_0x20a4[9]](handleEntityNotFound(_0xa33dx5))[_0x20a4[9]](responseWithResult(_0xa33dx5))[_0x20a4[13]](handleError(_0xa33dx5))};exports[_0x20a4[23]]=function(_0xa33dxf,_0xa33dx5){FreshdeskConfiguration[_0x20a4[23]](_0xa33dxf[_0x20a4[24]])[_0x20a4[9]](responseWithResult(_0xa33dx5,201))[_0x20a4[13]](handleError(_0xa33dx5))};exports[_0x20a4[25]]=function(_0xa33dxf,_0xa33dx5){if(_0xa33dxf[_0x20a4[24]][_0x20a4[17]]){delete _0xa33dxf[_0x20a4[24]][_0x20a4[17]]};FreshdeskConfiguration[_0x20a4[26]](_0xa33dxf[_0x20a4[18]][_0x20a4[17]])[_0x20a4[9]](handleEntityNotFound(_0xa33dx5))[_0x20a4[9]](saveUpdates(_0xa33dxf[_0x20a4[24]]))[_0x20a4[9]](responseWithResult(_0xa33dx5))[_0x20a4[13]](handleError(_0xa33dx5))};exports[_0x20a4[11]]=function(_0xa33dxf,_0xa33dx5){FreshdeskConfiguration[_0x20a4[26]](_0xa33dxf[_0x20a4[18]][_0x20a4[17]])[_0x20a4[9]](handleEntityNotFound(_0xa33dx5))[_0x20a4[9]](removeEntity(_0xa33dx5))[_0x20a4[13]](handleError(_0xa33dx5))};exports[_0x20a4[27]]=function(_0xa33dxf,_0xa33dx5,_0xa33dx10){var _0xa33dx11;FreshdeskConfiguration[_0x20a4[26]](_0xa33dxf[_0x20a4[18]][_0x20a4[17]])[_0x20a4[9]](handleEntityNotFound(_0xa33dx5))[_0x20a4[9]](function(_0xa33dx14){_0xa33dx11=_0xa33dx14;return FreshdeskField[_0x20a4[23]](_0xa33dxf[_0x20a4[24]])})[_0x20a4[9]](function(_0xa33dx13){switch(_0xa33dxf[_0x20a4[18]][_0x20a4[35]]){case _0x20a4[30]:return [_0xa33dx11[_0x20a4[29]](_0xa33dx13),_0xa33dx13];case _0x20a4[32]:return [_0xa33dx11[_0x20a4[31]](_0xa33dx13),_0xa33dx13];case _0x20a4[34]:return [_0xa33dx11[_0x20a4[33]](_0xa33dx13),_0xa33dx13]}})[_0x20a4[28]](function(_0xa33dx12,_0xa33dx13){return _0xa33dx5[_0x20a4[6]](201)[_0x20a4[7]](_0xa33dx13)})[_0x20a4[13]](handleError(_0xa33dx5))}
\ No newline at end of file
+/**
+ * Using Rails-like standard naming convention for endpoints.
+ * GET     /api/freshdesk/configurations              ->  index
+ * POST    /api/freshdesk/configurations              ->  create
+ * GET     /api/freshdesk/configurations/:id          ->  show
+ * PUT     /api/freshdesk/configurations/:id          ->  update
+ * DELETE  /api/freshdesk/configurations/:id          ->  destroy
+ */
+
+'use strict';
+
+
+var _ = require('lodash');
+
+var FreshdeskConfiguration = require('../../models').FreshdeskConfiguration;
+var FreshdeskField = require('../../models').FreshdeskField;
+
+function handleError(res, statusCode) {
+  statusCode = statusCode || 500;
+  return function(err) {
+    res.status(statusCode).send(err);
+  };
+}
+
+function responseWithResult(res, statusCode) {
+  statusCode = statusCode || 200;
+  return function(entity) {
+    if (entity) {
+      res.status(statusCode).json(entity);
+    }
+  };
+}
+
+function handleEntityNotFound(res) {
+  return function(entity) {
+    if (!entity) {
+      res.status(404).end();
+      return null;
+    }
+    return entity;
+  };
+}
+
+function saveUpdates(updates) {
+  return function(entity) {
+    return entity.updateAttributes(updates)
+      .then(function(updated) {
+        return updated;
+      });
+  };
+}
+
+function removeEntity(res) {
+  return function(entity) {
+    if (entity) {
+      return entity.destroy()
+        .then(function() {
+          res.status(204).end();
+        });
+    }
+  };
+}
+
+// Gets a list of FreshdeskConfigurations
+exports.index = function(req, res) {
+  FreshdeskConfiguration.findAll({
+      where: req.query
+    })
+    .then(responseWithResult(res))
+    .catch(handleError(res));
+}
+
+// Gets a single FreshdeskConfiguration from the DB
+exports.show = function(req, res) {
+  FreshdeskConfiguration.find({
+      where: {
+        id: req.params.id
+      },
+      include: [{
+        model: FreshdeskField,
+        as: 'Subject'
+      }, {
+        model: FreshdeskField,
+        as: 'Description'
+      }, {
+        model: FreshdeskField,
+        as: 'Field'
+      }]
+    })
+    .then(handleEntityNotFound(res))
+    .then(responseWithResult(res))
+    .catch(handleError(res));
+}
+
+// Creates a new FreshdeskConfiguration in the DB
+exports.create = function(req, res) {
+  FreshdeskConfiguration.create(req.body)
+    .then(responseWithResult(res, 201))
+    .catch(handleError(res));
+}
+
+// Updates an existing FreshdeskConfiguration in the DB
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  FreshdeskConfiguration.findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(saveUpdates(req.body))
+    .then(responseWithResult(res))
+    .catch(handleError(res));
+}
+
+// Deletes a FreshdeskConfiguration from the DB
+exports.destroy = function(req, res) {
+  FreshdeskConfiguration.findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(removeEntity(res))
+    .catch(handleError(res));
+}
+
+exports.addConfigurationField = function(req, res, next) {
+  // console.log(req.params);
+  var freshdeskConfiguration;
+  FreshdeskConfiguration
+    .findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(function(salesforce_configuration) {
+      freshdeskConfiguration = salesforce_configuration;
+      return FreshdeskField.create(req.body)
+    })
+    .then(function(freshdeskField) {
+      switch (req.params.type) {
+        case 'subject':
+          return [freshdeskConfiguration.addSubject(freshdeskField), freshdeskField];
+        case 'description':
+          return [freshdeskConfiguration.addDescription(freshdeskField), freshdeskField];
+        case 'field':
+          return [freshdeskConfiguration.addField(freshdeskField), freshdeskField];
+      }
+    })
+    .spread(function(data, freshdeskField) {
+      return res.status(201).json(freshdeskField);
+    })
+    .catch(handleError(res));
+};
index cabe8c1..4ce7f30 100644 (file)
@@ -1 +1,24 @@
-var _0x14b4=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x46\x72\x65\x73\x68\x64\x65\x73\x6B\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x3A\x72\x65\x6D\x6F\x76\x65"];_0x14b4[0];var FreshdeskConfiguration=require(_0x14b4[2])[_0x14b4[1]];exports[_0x14b4[3]]=function(_0x313cx2){FreshdeskConfiguration[_0x14b4[4]](function(_0x313cx3){onSave(_0x313cx2,_0x313cx3)});FreshdeskConfiguration[_0x14b4[5]](function(_0x313cx3){onRemove(_0x313cx2,_0x313cx3)})};function onSave(_0x313cx2,_0x313cx3,_0x313cx5){_0x313cx2[_0x14b4[7]](_0x14b4[6],_0x313cx3)}function onRemove(_0x313cx2,_0x313cx3,_0x313cx5){_0x313cx2[_0x14b4[7]](_0x14b4[8],_0x313cx3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var FreshdeskConfiguration = require('../../models').FreshdeskConfiguration;
+
+exports.register = function(socket) {
+  FreshdeskConfiguration.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  FreshdeskConfiguration.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+};
+
+function onSave(socket, doc, cb) {
+  socket.emit('freshdesk_configuration:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('freshdesk_configuration:remove', doc);
+}
index ecd1fdc..e08945f 100644 (file)
@@ -1 +1,19 @@
-var _0xc4c4=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x2F\x3A\x69\x64\x2F\x3A\x74\x79\x70\x65","\x61\x64\x64\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x46\x69\x65\x6C\x64","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0xc4c4[0];var express=require(_0xc4c4[1]);var auth=require(_0xc4c4[2]);var controller=require(_0xc4c4[3]);var router=express.Router();router[_0xc4c4[7]](_0xc4c4[4],auth[_0xc4c4[5]](),controller[_0xc4c4[6]]);router[_0xc4c4[7]](_0xc4c4[8],auth[_0xc4c4[5]](),controller[_0xc4c4[9]]);router[_0xc4c4[11]](_0xc4c4[4],auth[_0xc4c4[5]](),controller[_0xc4c4[10]]);router[_0xc4c4[13]](_0xc4c4[8],auth[_0xc4c4[5]](),controller[_0xc4c4[12]]);router[_0xc4c4[11]](_0xc4c4[14],auth[_0xc4c4[5]](),controller[_0xc4c4[15]]);router[_0xc4c4[16]](_0xc4c4[8],auth[_0xc4c4[5]](),controller[_0xc4c4[12]]);router[_0xc4c4[18]](_0xc4c4[8],auth[_0xc4c4[5]](),controller[_0xc4c4[17]]);module[_0xc4c4[19]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var auth = require('../../auth/auth.service');
+var controller = require('./freshdesk_configuration.controller');
+
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), controller.index);
+
+router.get('/:id', auth.isAuthenticated(), controller.show);
+router.post('/', auth.isAuthenticated(), controller.create);
+router.put('/:id', auth.isAuthenticated(), controller.update);
+router.post('/:id/:type', auth.isAuthenticated(), controller.addConfigurationField);
+router.patch('/:id', auth.isAuthenticated(), controller.update);
+router.delete('/:id', auth.isAuthenticated(), controller.destroy);
+
+
+module.exports = router;
index ebf6801..b297c23 100644 (file)
@@ -1 +1,97 @@
-var _0x6fde=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6E\x6F\x50\x72\x65\x73\x65\x72\x76\x65\x43\x61\x63\x68\x65","\x70\x72\x6F\x78\x79\x71\x75\x69\x72\x65","\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x43\x74\x72\x6C\x2E\x69\x6E\x64\x65\x78","\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x43\x74\x72\x6C\x2E\x73\x68\x6F\x77","\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x43\x74\x72\x6C\x2E\x63\x72\x65\x61\x74\x65","\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x43\x74\x72\x6C\x2E\x75\x70\x64\x61\x74\x65","\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x43\x74\x72\x6C\x2E\x64\x65\x73\x74\x72\x6F\x79","\x73\x70\x79","\x2E\x2F\x69\x6E\x64\x65\x78\x2E\x6A\x73","\x46\x72\x65\x73\x68\x64\x65\x73\x6B\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x20\x41\x50\x49\x20\x52\x6F\x75\x74\x65\x72\x3A","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x74\x75\x72\x6E\x20\x61\x6E\x20\x65\x78\x70\x72\x65\x73\x73\x20\x72\x6F\x75\x74\x65\x72\x20\x69\x6E\x73\x74\x61\x6E\x63\x65","\x65\x71\x75\x61\x6C","\x74\x6F","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x2F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x69\x6E\x64\x65\x78","\x63\x61\x6C\x6C\x65\x64\x4F\x6E\x63\x65","\x62\x65\x65\x6E","\x68\x61\x76\x65","\x2F","\x77\x69\x74\x68\x41\x72\x67\x73","\x67\x65\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x2F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73\x2F\x3A\x69\x64","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x73\x68\x6F\x77","\x2F\x3A\x69\x64","\x50\x4F\x53\x54\x20\x2F\x61\x70\x69\x2F\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x2F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x50\x55\x54\x20\x2F\x61\x70\x69\x2F\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x2F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73\x2F\x3A\x69\x64","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x50\x41\x54\x43\x48\x20\x2F\x61\x70\x69\x2F\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x2F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73\x2F\x3A\x69\x64","\x70\x61\x74\x63\x68","\x44\x45\x4C\x45\x54\x45\x20\x2F\x61\x70\x69\x2F\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x2F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73\x2F\x3A\x69\x64","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65"];_0x6fde[0];var proxyquire=require(_0x6fde[2])[_0x6fde[1]]();var freshdeskConfigurationCtrlStub={index:_0x6fde[3],show:_0x6fde[4],create:_0x6fde[5],update:_0x6fde[6],destroy:_0x6fde[7]};var routerStub={get:sinon[_0x6fde[8]](),put:sinon[_0x6fde[8]](),patch:sinon[_0x6fde[8]](),post:sinon[_0x6fde[8]](),delete:sinon[_0x6fde[8]]()};var freshdeskConfigurationIndex=proxyquire(_0x6fde[9],{"\x65\x78\x70\x72\x65\x73\x73":{Router:function(){return routerStub}},"\x2E\x2F\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72":freshdeskConfigurationCtrlStub});describe(_0x6fde[10],function(){it(_0x6fde[11],function(){expect(freshdeskConfigurationIndex)[_0x6fde[13]][_0x6fde[12]](routerStub)});describe(_0x6fde[14],function(){it(_0x6fde[15],function(){expect(routerStub[_0x6fde[21]][_0x6fde[20]](_0x6fde[19],_0x6fde[3]))[_0x6fde[13]][_0x6fde[18]][_0x6fde[17]][_0x6fde[16]]})});describe(_0x6fde[22],function(){it(_0x6fde[23],function(){expect(routerStub[_0x6fde[21]][_0x6fde[20]](_0x6fde[24],_0x6fde[4]))[_0x6fde[13]][_0x6fde[18]][_0x6fde[17]][_0x6fde[16]]})});describe(_0x6fde[25],function(){it(_0x6fde[26],function(){expect(routerStub[_0x6fde[27]][_0x6fde[20]](_0x6fde[19],_0x6fde[5]))[_0x6fde[13]][_0x6fde[18]][_0x6fde[17]][_0x6fde[16]]})});describe(_0x6fde[28],function(){it(_0x6fde[29],function(){expect(routerStub[_0x6fde[30]][_0x6fde[20]](_0x6fde[24],_0x6fde[6]))[_0x6fde[13]][_0x6fde[18]][_0x6fde[17]][_0x6fde[16]]})});describe(_0x6fde[31],function(){it(_0x6fde[29],function(){expect(routerStub[_0x6fde[32]][_0x6fde[20]](_0x6fde[24],_0x6fde[6]))[_0x6fde[13]][_0x6fde[18]][_0x6fde[17]][_0x6fde[16]]})});describe(_0x6fde[33],function(){it(_0x6fde[34],function(){expect(routerStub[_0x6fde[35]][_0x6fde[20]](_0x6fde[24],_0x6fde[7]))[_0x6fde[13]][_0x6fde[18]][_0x6fde[17]][_0x6fde[16]]})})})
\ No newline at end of file
+'use strict';
+
+var proxyquire = require('proxyquire').noPreserveCache();
+
+var freshdeskConfigurationCtrlStub = {
+  index: 'freshdeskConfigurationCtrl.index',
+  show: 'freshdeskConfigurationCtrl.show',
+  create: 'freshdeskConfigurationCtrl.create',
+  update: 'freshdeskConfigurationCtrl.update',
+  destroy: 'freshdeskConfigurationCtrl.destroy'
+};
+
+var routerStub = {
+  get: sinon.spy(),
+  put: sinon.spy(),
+  patch: sinon.spy(),
+  post: sinon.spy(),
+  delete: sinon.spy()
+};
+
+// require the index with our stubbed out modules
+var freshdeskConfigurationIndex = proxyquire('./index.js', {
+  'express': {
+    Router: function() {
+      return routerStub;
+    }
+  },
+  './freshdesk_configuration.controller': freshdeskConfigurationCtrlStub
+});
+
+describe('FreshdeskConfiguration API Router:', function() {
+
+  it('should return an express router instance', function() {
+    expect(freshdeskConfigurationIndex).to.equal(routerStub);
+  });
+
+  describe('GET /api/freshdesk/configurations', function() {
+
+    it('should route to freshdeskConfiguration.controller.index', function() {
+      expect(routerStub.get
+        .withArgs('/', 'freshdeskConfigurationCtrl.index')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('GET /api/freshdesk/configurations/:id', function() {
+
+    it('should route to freshdeskConfiguration.controller.show', function() {
+      expect(routerStub.get
+        .withArgs('/:id', 'freshdeskConfigurationCtrl.show')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('POST /api/freshdesk/configurations', function() {
+
+    it('should route to freshdeskConfiguration.controller.create', function() {
+      expect(routerStub.post
+        .withArgs('/', 'freshdeskConfigurationCtrl.create')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('PUT /api/freshdesk/configurations/:id', function() {
+
+    it('should route to freshdeskConfiguration.controller.update', function() {
+      expect(routerStub.put
+        .withArgs('/:id', 'freshdeskConfigurationCtrl.update')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('PATCH /api/freshdesk/configurations/:id', function() {
+
+    it('should route to freshdeskConfiguration.controller.update', function() {
+      expect(routerStub.patch
+        .withArgs('/:id', 'freshdeskConfigurationCtrl.update')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('DELETE /api/freshdesk/configurations/:id', function() {
+
+    it('should route to freshdeskConfiguration.controller.destroy', function() {
+      expect(routerStub.delete
+        .withArgs('/:id', 'freshdeskConfigurationCtrl.destroy')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+});
index f44e166..4a35db8 100644 (file)
@@ -1 +1,104 @@
-var _0x4a0a=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x46\x72\x65\x73\x68\x64\x65\x73\x6B\x46\x69\x65\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6A\x73\x6F\x6E","\x65\x6E\x64","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x73\x74\x72\x6F\x79","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65"];_0x4a0a[0];var _=require(_0x4a0a[1]);var FreshdeskField=require(_0x4a0a[3])[_0x4a0a[2]];function handleError(_0x5b67x4,_0x5b67x5){_0x5b67x5=_0x5b67x5||500;return function(_0x5b67x6){_0x5b67x4[_0x4a0a[5]](_0x5b67x5)[_0x4a0a[4]](_0x5b67x6)}}function responseWithResult(_0x5b67x4,_0x5b67x5){_0x5b67x5=_0x5b67x5||200;return function(_0x5b67x8){if(_0x5b67x8){_0x5b67x4[_0x4a0a[5]](_0x5b67x5)[_0x4a0a[6]](_0x5b67x8)}}}function handleEntityNotFound(_0x5b67x4){return function(_0x5b67x8){if(!_0x5b67x8){_0x5b67x4[_0x4a0a[5]](404)[_0x4a0a[7]]();return null};return _0x5b67x8}}function saveUpdates(_0x5b67xb){return function(_0x5b67x8){return _0x5b67x8[_0x4a0a[9]](_0x5b67xb)[_0x4a0a[8]](function(_0x5b67xc){return _0x5b67xc})}}function removeEntity(_0x5b67x4){return function(_0x5b67x8){if(_0x5b67x8){return _0x5b67x8[_0x4a0a[10]]()[_0x4a0a[8]](function(){_0x5b67x4[_0x4a0a[5]](204)[_0x4a0a[7]]()})}}}exports[_0x4a0a[11]]=function(_0x5b67xe,_0x5b67x4){FreshdeskField[_0x4a0a[13]]()[_0x4a0a[8]](responseWithResult(_0x5b67x4))[_0x4a0a[12]](handleError(_0x5b67x4))};exports[_0x4a0a[14]]=function(_0x5b67xe,_0x5b67x4){FreshdeskField[_0x4a0a[17]](_0x5b67xe[_0x4a0a[16]][_0x4a0a[15]])[_0x4a0a[8]](handleEntityNotFound(_0x5b67x4))[_0x4a0a[8]](responseWithResult(_0x5b67x4))[_0x4a0a[12]](handleError(_0x5b67x4))};exports[_0x4a0a[18]]=function(_0x5b67xe,_0x5b67x4){FreshdeskField[_0x4a0a[18]](_0x5b67xe[_0x4a0a[19]])[_0x4a0a[8]](responseWithResult(_0x5b67x4,201))[_0x4a0a[12]](handleError(_0x5b67x4))};exports[_0x4a0a[20]]=function(_0x5b67xe,_0x5b67x4){if(_0x5b67xe[_0x4a0a[19]][_0x4a0a[15]]){delete _0x5b67xe[_0x4a0a[19]][_0x4a0a[15]]};FreshdeskField[_0x4a0a[17]](_0x5b67xe[_0x4a0a[16]][_0x4a0a[15]])[_0x4a0a[8]](handleEntityNotFound(_0x5b67x4))[_0x4a0a[8]](saveUpdates(_0x5b67xe[_0x4a0a[19]]))[_0x4a0a[8]](responseWithResult(_0x5b67x4))[_0x4a0a[12]](handleError(_0x5b67x4))};exports[_0x4a0a[10]]=function(_0x5b67xe,_0x5b67x4){FreshdeskField[_0x4a0a[17]](_0x5b67xe[_0x4a0a[16]][_0x4a0a[15]])[_0x4a0a[8]](handleEntityNotFound(_0x5b67x4))[_0x4a0a[8]](removeEntity(_0x5b67x4))[_0x4a0a[12]](handleError(_0x5b67x4))}
\ No newline at end of file
+/**
+ * Using Rails-like standard naming convention for endpoints.
+ * GET     /api/freshdesk/fields              ->  index
+ * POST    /api/freshdesk/fields              ->  create
+ * GET     /api/freshdesk/fields/:id          ->  show
+ * PUT     /api/freshdesk/fields/:id          ->  update
+ * DELETE  /api/freshdesk/fields/:id          ->  destroy
+ */
+
+'use strict';
+
+
+var _ = require('lodash');
+
+var FreshdeskField = require('../../models').FreshdeskField;
+
+
+function handleError(res, statusCode) {
+  statusCode = statusCode || 500;
+  return function(err) {
+    res.status(statusCode).send(err);
+  };
+}
+
+function responseWithResult(res, statusCode) {
+  statusCode = statusCode || 200;
+  return function(entity) {
+    if (entity) {
+      res.status(statusCode).json(entity);
+    }
+  };
+}
+
+function handleEntityNotFound(res) {
+  return function(entity) {
+    if (!entity) {
+      res.status(404).end();
+      return null;
+    }
+    return entity;
+  };
+}
+
+function saveUpdates(updates) {
+  return function(entity) {
+    return entity.updateAttributes(updates)
+      .then(function(updated) {
+        return updated;
+      });
+  };
+}
+
+function removeEntity(res) {
+  return function(entity) {
+    if (entity) {
+      return entity.destroy()
+        .then(function() {
+          res.status(204).end();
+        });
+    }
+  };
+}
+
+// Gets a list of FreshdeskFields
+exports.index = function(req, res) {
+  FreshdeskField.findAll()
+    .then(responseWithResult(res))
+    .catch(handleError(res));
+}
+
+// Gets a single FreshdeskField from the DB
+exports.show = function(req, res) {
+  FreshdeskField.findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(responseWithResult(res))
+    .catch(handleError(res));
+}
+
+// Creates a new FreshdeskField in the DB
+exports.create = function(req, res) {
+  FreshdeskField.create(req.body)
+    .then(responseWithResult(res, 201))
+    .catch(handleError(res));
+}
+
+// Updates an existing FreshdeskField in the DB
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  FreshdeskField.findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(saveUpdates(req.body))
+    .then(responseWithResult(res))
+    .catch(handleError(res));
+}
+
+// Deletes a FreshdeskField from the DB
+exports.destroy = function(req, res) {
+  FreshdeskField.findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(removeEntity(res))
+    .catch(handleError(res));
+}
index 2ae970b..b351442 100644 (file)
@@ -1 +1,24 @@
-var _0xed3d=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x46\x72\x65\x73\x68\x64\x65\x73\x6B\x46\x69\x65\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x5F\x66\x69\x65\x6C\x64\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x5F\x66\x69\x65\x6C\x64\x3A\x72\x65\x6D\x6F\x76\x65"];_0xed3d[0];var FreshdeskField=require(_0xed3d[2])[_0xed3d[1]];exports[_0xed3d[3]]=function(_0xdf6ex2){FreshdeskField[_0xed3d[4]](function(_0xdf6ex3){onSave(_0xdf6ex2,_0xdf6ex3)});FreshdeskField[_0xed3d[5]](function(_0xdf6ex3){onRemove(_0xdf6ex2,_0xdf6ex3)})};function onSave(_0xdf6ex2,_0xdf6ex3,_0xdf6ex5){_0xdf6ex2[_0xed3d[7]](_0xed3d[6],_0xdf6ex3)}function onRemove(_0xdf6ex2,_0xdf6ex3,_0xdf6ex5){_0xdf6ex2[_0xed3d[7]](_0xed3d[8],_0xdf6ex3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var FreshdeskField = require('../../models').FreshdeskField;
+
+exports.register = function(socket) {
+  FreshdeskField.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  FreshdeskField.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+};
+
+function onSave(socket, doc, cb) {
+  socket.emit('freshdesk_field:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('freshdesk_field:remove', doc);
+}
index 0e063ce..d17268f 100644 (file)
@@ -1 +1,18 @@
-var _0xd4f8=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x5F\x66\x69\x65\x6C\x64\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0xd4f8[0];var express=require(_0xd4f8[1]);var auth=require(_0xd4f8[2]);var controller=require(_0xd4f8[3]);var router=express.Router();router[_0xd4f8[7]](_0xd4f8[4],auth[_0xd4f8[5]](),controller[_0xd4f8[6]]);router[_0xd4f8[7]](_0xd4f8[8],auth[_0xd4f8[5]](),controller[_0xd4f8[9]]);router[_0xd4f8[11]](_0xd4f8[4],auth[_0xd4f8[5]](),controller[_0xd4f8[10]]);router[_0xd4f8[13]](_0xd4f8[8],auth[_0xd4f8[5]](),controller[_0xd4f8[12]]);router[_0xd4f8[14]](_0xd4f8[8],auth[_0xd4f8[5]](),controller[_0xd4f8[12]]);router[_0xd4f8[16]](_0xd4f8[8],auth[_0xd4f8[5]](),controller[_0xd4f8[15]]);module[_0xd4f8[17]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var auth = require('../../auth/auth.service');
+var controller = require('./freshdesk_field.controller');
+
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), controller.index);
+
+router.get('/:id', auth.isAuthenticated(), controller.show);
+router.post('/', auth.isAuthenticated(), controller.create);
+router.put('/:id', auth.isAuthenticated(), controller.update);
+router.patch('/:id', auth.isAuthenticated(), controller.update);
+router.delete('/:id', auth.isAuthenticated(), controller.destroy);
+
+
+module.exports = router;
index c6eaf2b..b5c0fb8 100644 (file)
@@ -1 +1,97 @@
-var _0xf317=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6E\x6F\x50\x72\x65\x73\x65\x72\x76\x65\x43\x61\x63\x68\x65","\x70\x72\x6F\x78\x79\x71\x75\x69\x72\x65","\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x46\x69\x65\x6C\x64\x43\x74\x72\x6C\x2E\x69\x6E\x64\x65\x78","\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x46\x69\x65\x6C\x64\x43\x74\x72\x6C\x2E\x73\x68\x6F\x77","\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x46\x69\x65\x6C\x64\x43\x74\x72\x6C\x2E\x63\x72\x65\x61\x74\x65","\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x46\x69\x65\x6C\x64\x43\x74\x72\x6C\x2E\x75\x70\x64\x61\x74\x65","\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x46\x69\x65\x6C\x64\x43\x74\x72\x6C\x2E\x64\x65\x73\x74\x72\x6F\x79","\x73\x70\x79","\x2E\x2F\x69\x6E\x64\x65\x78\x2E\x6A\x73","\x46\x72\x65\x73\x68\x64\x65\x73\x6B\x46\x69\x65\x6C\x64\x20\x41\x50\x49\x20\x52\x6F\x75\x74\x65\x72\x3A","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x74\x75\x72\x6E\x20\x61\x6E\x20\x65\x78\x70\x72\x65\x73\x73\x20\x72\x6F\x75\x74\x65\x72\x20\x69\x6E\x73\x74\x61\x6E\x63\x65","\x65\x71\x75\x61\x6C","\x74\x6F","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x2F\x66\x69\x65\x6C\x64\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x46\x69\x65\x6C\x64\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x69\x6E\x64\x65\x78","\x63\x61\x6C\x6C\x65\x64\x4F\x6E\x63\x65","\x62\x65\x65\x6E","\x68\x61\x76\x65","\x2F","\x77\x69\x74\x68\x41\x72\x67\x73","\x67\x65\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x2F\x66\x69\x65\x6C\x64\x73\x2F\x3A\x69\x64","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x46\x69\x65\x6C\x64\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x73\x68\x6F\x77","\x2F\x3A\x69\x64","\x50\x4F\x53\x54\x20\x2F\x61\x70\x69\x2F\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x2F\x66\x69\x65\x6C\x64\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x46\x69\x65\x6C\x64\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x50\x55\x54\x20\x2F\x61\x70\x69\x2F\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x2F\x66\x69\x65\x6C\x64\x73\x2F\x3A\x69\x64","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x46\x69\x65\x6C\x64\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x50\x41\x54\x43\x48\x20\x2F\x61\x70\x69\x2F\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x2F\x66\x69\x65\x6C\x64\x73\x2F\x3A\x69\x64","\x70\x61\x74\x63\x68","\x44\x45\x4C\x45\x54\x45\x20\x2F\x61\x70\x69\x2F\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x2F\x66\x69\x65\x6C\x64\x73\x2F\x3A\x69\x64","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x46\x69\x65\x6C\x64\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65"];_0xf317[0];var proxyquire=require(_0xf317[2])[_0xf317[1]]();var freshdeskFieldCtrlStub={index:_0xf317[3],show:_0xf317[4],create:_0xf317[5],update:_0xf317[6],destroy:_0xf317[7]};var routerStub={get:sinon[_0xf317[8]](),put:sinon[_0xf317[8]](),patch:sinon[_0xf317[8]](),post:sinon[_0xf317[8]](),delete:sinon[_0xf317[8]]()};var freshdeskFieldIndex=proxyquire(_0xf317[9],{"\x65\x78\x70\x72\x65\x73\x73":{Router:function(){return routerStub}},"\x2E\x2F\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x5F\x66\x69\x65\x6C\x64\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72":freshdeskFieldCtrlStub});describe(_0xf317[10],function(){it(_0xf317[11],function(){expect(freshdeskFieldIndex)[_0xf317[13]][_0xf317[12]](routerStub)});describe(_0xf317[14],function(){it(_0xf317[15],function(){expect(routerStub[_0xf317[21]][_0xf317[20]](_0xf317[19],_0xf317[3]))[_0xf317[13]][_0xf317[18]][_0xf317[17]][_0xf317[16]]})});describe(_0xf317[22],function(){it(_0xf317[23],function(){expect(routerStub[_0xf317[21]][_0xf317[20]](_0xf317[24],_0xf317[4]))[_0xf317[13]][_0xf317[18]][_0xf317[17]][_0xf317[16]]})});describe(_0xf317[25],function(){it(_0xf317[26],function(){expect(routerStub[_0xf317[27]][_0xf317[20]](_0xf317[19],_0xf317[5]))[_0xf317[13]][_0xf317[18]][_0xf317[17]][_0xf317[16]]})});describe(_0xf317[28],function(){it(_0xf317[29],function(){expect(routerStub[_0xf317[30]][_0xf317[20]](_0xf317[24],_0xf317[6]))[_0xf317[13]][_0xf317[18]][_0xf317[17]][_0xf317[16]]})});describe(_0xf317[31],function(){it(_0xf317[29],function(){expect(routerStub[_0xf317[32]][_0xf317[20]](_0xf317[24],_0xf317[6]))[_0xf317[13]][_0xf317[18]][_0xf317[17]][_0xf317[16]]})});describe(_0xf317[33],function(){it(_0xf317[34],function(){expect(routerStub[_0xf317[35]][_0xf317[20]](_0xf317[24],_0xf317[7]))[_0xf317[13]][_0xf317[18]][_0xf317[17]][_0xf317[16]]})})})
\ No newline at end of file
+'use strict';
+
+var proxyquire = require('proxyquire').noPreserveCache();
+
+var freshdeskFieldCtrlStub = {
+  index: 'freshdeskFieldCtrl.index',
+  show: 'freshdeskFieldCtrl.show',
+  create: 'freshdeskFieldCtrl.create',
+  update: 'freshdeskFieldCtrl.update',
+  destroy: 'freshdeskFieldCtrl.destroy'
+};
+
+var routerStub = {
+  get: sinon.spy(),
+  put: sinon.spy(),
+  patch: sinon.spy(),
+  post: sinon.spy(),
+  delete: sinon.spy()
+};
+
+// require the index with our stubbed out modules
+var freshdeskFieldIndex = proxyquire('./index.js', {
+  'express': {
+    Router: function() {
+      return routerStub;
+    }
+  },
+  './freshdesk_field.controller': freshdeskFieldCtrlStub
+});
+
+describe('FreshdeskField API Router:', function() {
+
+  it('should return an express router instance', function() {
+    expect(freshdeskFieldIndex).to.equal(routerStub);
+  });
+
+  describe('GET /api/freshdesk/fields', function() {
+
+    it('should route to freshdeskField.controller.index', function() {
+      expect(routerStub.get
+        .withArgs('/', 'freshdeskFieldCtrl.index')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('GET /api/freshdesk/fields/:id', function() {
+
+    it('should route to freshdeskField.controller.show', function() {
+      expect(routerStub.get
+        .withArgs('/:id', 'freshdeskFieldCtrl.show')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('POST /api/freshdesk/fields', function() {
+
+    it('should route to freshdeskField.controller.create', function() {
+      expect(routerStub.post
+        .withArgs('/', 'freshdeskFieldCtrl.create')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('PUT /api/freshdesk/fields/:id', function() {
+
+    it('should route to freshdeskField.controller.update', function() {
+      expect(routerStub.put
+        .withArgs('/:id', 'freshdeskFieldCtrl.update')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('PATCH /api/freshdesk/fields/:id', function() {
+
+    it('should route to freshdeskField.controller.update', function() {
+      expect(routerStub.patch
+        .withArgs('/:id', 'freshdeskFieldCtrl.update')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('DELETE /api/freshdesk/fields/:id', function() {
+
+    it('should route to freshdeskField.controller.destroy', function() {
+      expect(routerStub.delete
+        .withArgs('/:id', 'freshdeskFieldCtrl.destroy')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+});
index 11500f3..5789126 100644 (file)
@@ -1 +1,15 @@
-var _0x7e6b=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x7e6b[0];var express=require(_0x7e6b[1]);var controller=require(_0x7e6b[2]);var router=express.Router();router[_0x7e6b[5]](_0x7e6b[3],controller[_0x7e6b[4]]);router[_0x7e6b[5]](_0x7e6b[6],controller[_0x7e6b[7]]);router[_0x7e6b[9]](_0x7e6b[3],controller[_0x7e6b[8]]);router[_0x7e6b[11]](_0x7e6b[6],controller[_0x7e6b[10]]);router[_0x7e6b[12]](_0x7e6b[6],controller[_0x7e6b[10]]);router[_0x7e6b[14]](_0x7e6b[6],controller[_0x7e6b[13]]);module[_0x7e6b[15]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./integration.controller');
+
+var router = express.Router();
+
+router.get('/', controller.index);
+router.get('/:id', controller.show);
+router.post('/', controller.create);
+router.put('/:id', controller.update);
+router.patch('/:id', controller.update);
+router.delete('/:id', controller.destroy);
+
+module.exports = router;
\ No newline at end of file
index 708aef6..cc5e706 100644 (file)
@@ -1 +1,178 @@
-var _0xea94=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x70\x6C\x6F\x61\x64\x2D\x66\x69\x6C\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x70\x61\x74\x68","\x73\x69\x6D\x70\x6C\x65\x2D\x72\x61\x6E\x64\x6F\x6D","\x61\x64\x6D\x2D\x7A\x69\x70","\x73\x74\x72\x69\x6E\x67\x2D\x74\x6F\x2D\x6A\x73\x6F\x6E","\x66\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x49\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x72\x6F\x6F\x74","\x73\x65\x72\x76\x65\x72\x2F\x66\x69\x6C\x65\x73\x2F\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x73","\x6A\x6F\x69\x6E","\x4D\x61\x78\x20\x6E\x75\x6D\x62\x65\x72\x20\x6F\x66\x20\x66\x69\x6C\x65\x73\x20\x75\x70\x6C\x6F\x61\x64\x20\x65\x78\x63\x65\x65\x64\x65\x64","\x4F\x6E\x6C\x79\x20\x7A\x69\x70\x20\x66\x6F\x72\x6D\x61\x74\x20\x61\x63\x63\x65\x70\x74\x65\x64","\x54\x68\x65\x20\x6D\x61\x78\x69\x6D\x75\x6D\x20\x66\x69\x6C\x65\x20\x73\x69\x7A\x65\x20\x69\x73\x20\x35\x20\x4D\x62","\x49\x6E\x76\x61\x6C\x69\x64\x20\x72\x65\x71\x75\x65\x73\x74","\x65\x6E\x64","\x66\x69\x6C\x65","\x67\x65\x74\x45\x6E\x74\x72\x69\x65\x73","\x6E\x61\x6D\x65","\x6D\x61\x6E\x69\x66\x65\x73\x74\x2E\x6A\x73\x6F\x6E","\x75\x74\x66\x38","\x67\x65\x74\x44\x61\x74\x61","\x75\x70\x6C\x6F\x61\x64\x5A\x69\x70","\x6C\x6F\x67","\x70\x61\x72\x73\x65","\x65\x78\x74\x72\x61\x63\x74\x41\x6C\x6C\x54\x6F","\x6D\x65\x72\x67\x65","\x6A\x73\x6F\x6E","\x66\x6F\x72\x45\x61\x63\x68","\x75\x6E\x6C\x69\x6E\x6B\x53\x79\x6E\x63","\x6D\x61\x6E\x69\x66\x65\x73\x74","\x6D\x61\x6E\x69\x66\x65\x73\x74\x2E\x6A\x73\x6F\x6E\x20\x6E\x6F\x74\x20\x66\x6F\x75\x6E\x64","\x6F\x6E","\x65\x72\x72\x6F\x72","\x75\x70\x6C\x6F\x61\x64","\x75\x70\x64\x61\x74\x65","\x62\x6F\x64\x79","\x73\x61\x76\x65","\x66\x69\x6E\x64","\x64\x65\x73\x74\x72\x6F\x79"];_0xea94[0];var _=require(_0xea94[1]);var uploadFile=require(_0xea94[2]);var config=require(_0xea94[3]);var path=require(_0xea94[4]);var sr=require(_0xea94[5]);var admZip=require(_0xea94[6]);var str2json=require(_0xea94[7]);var fs=require(_0xea94[8]);var Util=require(_0xea94[9]);var Integration=require(_0xea94[11])[_0xea94[10]];exports[_0xea94[12]]=function(_0x9cbexb,_0x9cbexc,_0x9cbexd){return Integration[_0xea94[19]](Util[_0xea94[18]](_0x9cbexb[_0xea94[17]]))[_0xea94[16]](function(_0x9cbexf){_0x9cbexc[_0xea94[15]](200)[_0xea94[14]](_0x9cbexf)})[_0xea94[13]](function(_0x9cbexe){return handleError(_0x9cbexc,_0x9cbexe)})};exports[_0xea94[20]]=function(_0x9cbexb,_0x9cbexc){Integration[_0xea94[24]](_0x9cbexb[_0xea94[23]][_0xea94[22]])[_0xea94[16]](function(_0x9cbex10){if(!_0x9cbex10){return _0x9cbexc[_0xea94[21]](404)};return _0x9cbexc[_0xea94[14]](_0x9cbex10)})[_0xea94[13]](function(_0x9cbexe){return handleError(_0x9cbexc,_0x9cbexe)})};exports[_0xea94[25]]=function(_0x9cbexb,_0x9cbexc){var _0x9cbex11= new uploadFile({dest:path[_0xea94[28]](config[_0xea94[26]],_0xea94[27]),maxFileSize:5*1000000,maxNumberOfFiles:1,minNumberOfFiles:1,acceptFileTypes:/(\.|\/)(zip)$/i,messages:{maxNumberOfFiles:_0xea94[29],acceptFileTypes:_0xea94[30],maxFileSize:_0xea94[31],invalidRequest:_0xea94[32]}});_0x9cbex11[_0xea94[50]](_0xea94[33],function(_0x9cbex12,_0x9cbex13){var _0x9cbex14= new admZip(_0x9cbex13[_0xea94[34]][_0xea94[4]]);var _0x9cbex15=false;var _0x9cbex16=_0x9cbex14[_0xea94[35]]();_0x9cbex16[_0xea94[46]](function(_0x9cbex17){if(_0x9cbex17[_0xea94[36]]===_0xea94[37]){var _0x9cbex18=_0x9cbex17[_0xea94[39]]().toString(_0xea94[38]);console[_0xea94[41]](_0xea94[40],_0x9cbex18);try{_0x9cbex15=JSON[_0xea94[42]](_0x9cbex18);console[_0xea94[41]](_0xea94[40],_0x9cbex15);Integration[_0xea94[25]](_[_0xea94[44]](_0x9cbex13[_0xea94[34]],_0x9cbex15))[_0xea94[16]](function(_0x9cbex10){_0x9cbex14[_0xea94[43]](path[_0xea94[28]](config[_0xea94[26]],_0xea94[27]),true);return _0x9cbexc[_0xea94[15]](201)[_0xea94[14]](_0x9cbex10)})[_0xea94[13]](function(_0x9cbexe){return handleError(_0x9cbexc,_0x9cbexe)})}catch(e){console[_0xea94[41]](e);var _0x9cbexe={errors:[{type:_0xea94[45],message:e}]};return handleError(_0x9cbexc,_0x9cbexe)}}});fs[_0xea94[47]](_0x9cbex13[_0xea94[34]][_0xea94[4]]);if(!_0x9cbex15){var _0x9cbexe={errors:[{type:_0xea94[48],message:_0xea94[49]}]};return handleError(_0x9cbexc,_0x9cbexe)}});_0x9cbex11[_0xea94[50]](_0xea94[51],function(_0x9cbex19){var _0x9cbexe={errors:[{type:_0xea94[52],message:_0x9cbex19}]};return handleError(_0x9cbexc,_0x9cbexe)});_0x9cbex11[_0xea94[42]](_0x9cbexb)};exports[_0xea94[53]]=function(_0x9cbexb,_0x9cbexc){if(_0x9cbexb[_0xea94[54]][_0xea94[22]]){delete _0x9cbexb[_0xea94[54]][_0xea94[22]]};Integration[_0xea94[56]]({where:{id:_0x9cbexb[_0xea94[23]][_0xea94[22]]}})[_0xea94[16]](function(_0x9cbex10){if(!_0x9cbex10){return _0x9cbexc[_0xea94[21]](404)};var _0x9cbex1a=_[_0xea94[44]](_0x9cbex10,_0x9cbexb[_0xea94[54]]);_0x9cbex1a[_0xea94[55]]()[_0xea94[16]](function(){return _0x9cbexc[_0xea94[15]](200)[_0xea94[14]](_0x9cbex10)})[_0xea94[13]](function(_0x9cbexe){return handleError(_0x9cbexc,_0x9cbexe)})})[_0xea94[13]](function(_0x9cbexe){return handleError(_0x9cbexc,_0x9cbexe)})};exports[_0xea94[57]]=function(_0x9cbexb,_0x9cbexc){Integration[_0xea94[56]]({where:{id:_0x9cbexb[_0xea94[23]][_0xea94[22]]}})[_0xea94[16]](function(_0x9cbex10){if(!_0x9cbex10){return _0x9cbexc[_0xea94[21]](404)};_0x9cbex10[_0xea94[57]]()[_0xea94[16]](function(){return _0x9cbexc[_0xea94[21]](204)})[_0xea94[13]](function(_0x9cbexe){return handleError(_0x9cbexc,_0x9cbexe)})})[_0xea94[13]](function(_0x9cbexe){return handleError(_0x9cbexc,_0x9cbexe)})};function handleError(_0x9cbexc,_0x9cbexe){return _0x9cbexc[_0xea94[15]](500)[_0xea94[14]](_0x9cbexe)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var uploadFile = require('upload-file');
+var config = require('../../config/environment');
+var path = require('path');
+var sr = require('simple-random');
+var admZip = require('adm-zip');
+var str2json = require('string-to-json');
+var fs = require('fs');
+var Util = require('../../config/util');
+
+var Integration = require('../../models').Integration;
+
+// Get list of Integration
+exports.index = function(req, res, next) {
+  return Integration
+    .findAndCountAll(Util.getQuery(req.query))
+    .then(function(result) {
+      res.status(200).send(result);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single integration
+exports.show = function(req, res) {
+  Integration
+    .findById(req.params.id)
+    .then(function(integration) {
+      if (!integration) {
+        return res.sendStatus(404);
+      }
+      return res.send(integration);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new integration in the DB.
+exports.create = function(req, res) {
+  var upload = new uploadFile({
+    dest: path.join(config.root, 'server/files/integrations'),
+    maxFileSize: 5 * 1000000,
+    maxNumberOfFiles: 1,
+    minNumberOfFiles: 1,
+    acceptFileTypes: /(\.|\/)(zip)$/i,
+    messages: {
+      maxNumberOfFiles: "Max number of files upload exceeded",
+      acceptFileTypes: "Only zip format accepted",
+      maxFileSize: "The maximum file size is 5 Mb",
+      invalidRequest: "Invalid request"
+    }
+  });
+
+  upload.on('end', function(fields, files) {
+    var zip = new admZip(files.file.path);
+
+    var manifest = false;
+    var zipEntries = zip.getEntries();
+    zipEntries.forEach(function(zipEntry) {
+      if (zipEntry.name === 'manifest.json') {
+        var str = zipEntry.getData().toString('utf8');
+        console.log('uploadZip', str);
+        try {
+          manifest = JSON.parse(str);
+          console.log('uploadZip', manifest);
+          Integration
+            .create(_.merge(files.file, manifest))
+            .then(function(integration) {
+
+              // Extract All Zip and overwrite old directory
+              zip.extractAllTo(path.join(config.root,
+                'server/files/integrations'), true);
+
+              return res.status(201).send(integration);
+            })
+            .catch(function(err) {
+              return handleError(res, err);
+            });
+        } catch (e) {
+          console.log(e);
+          var err = {
+            errors: [{
+              type: 'json',
+              message: e
+            }]
+          };
+          return handleError(res, err);
+        }
+      }
+    });
+
+    fs.unlinkSync(files.file.path);
+
+    if (!manifest) {
+      var err = {
+        errors: [{
+          type: 'manifest',
+          message: 'manifest.json not found'
+        }]
+      };
+      return handleError(res, err);
+    }
+  });
+
+  upload.on('error', function(e) {
+    var err = {
+      errors: [{
+        type: 'upload',
+        message: e
+      }]
+    };
+    return handleError(res, err);
+  });
+
+  upload.parse(req);
+};
+
+// Updates an existing integration in the DB.
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  Integration
+    .find({
+      where: {
+        id: req.params.id
+      }
+    })
+    .then(function(integration) {
+      if (!integration) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(integration, req.body);
+      updated.save()
+        .then(function() {
+          return res.status(200).send(integration);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a integration from the DB.
+exports.destroy = function(req, res) {
+  Integration
+    .find({
+      where: {
+        id: req.params.id
+      }
+    })
+    .then(function(integration) {
+      if (!integration) {
+        return res.sendStatus(404);
+      }
+      integration.destroy()
+        .then(function() {
+          return res.sendStatus(204);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index f0945f2..a79af43 100644 (file)
@@ -1 +1,27 @@
-var _0xfdd6=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x49\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x3A\x72\x65\x6D\x6F\x76\x65"];_0xfdd6[0];var Integration=require(_0xfdd6[2])[_0xfdd6[1]];exports[_0xfdd6[3]]=function(_0x25f9x2){Integration[_0xfdd6[4]](function(_0x25f9x3){onSave(_0x25f9x2,_0x25f9x3)});Integration[_0xfdd6[5]](function(_0x25f9x3){onSave(_0x25f9x2,_0x25f9x3)});Integration[_0xfdd6[6]](function(_0x25f9x3){onRemove(_0x25f9x2,_0x25f9x3)})};function onSave(_0x25f9x2,_0x25f9x3,_0x25f9x5){_0x25f9x2[_0xfdd6[8]](_0xfdd6[7],_0x25f9x3)}function onRemove(_0x25f9x2,_0x25f9x3,_0x25f9x5){_0x25f9x2[_0xfdd6[8]](_0xfdd6[9],_0x25f9x3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var Integration = require('../../models').Integration;
+
+exports.register = function(socket) {
+  Integration.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  Integration.afterUpdate(function(doc) {
+    onSave(socket, doc);
+  });
+  Integration.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('integration:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('integration:remove', doc);
+}
index 9fca24c..0d4146d 100644 (file)
@@ -1 +1,20 @@
-var _0xdb31=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x73\x68\x6F\x75\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x70\x70","\x73\x75\x70\x65\x72\x74\x65\x73\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x70\x6F\x6E\x64\x20\x77\x69\x74\x68\x20\x4A\x53\x4F\x4E\x20\x61\x72\x72\x61\x79","\x69\x6E\x73\x74\x61\x6E\x63\x65\x6F\x66","\x62\x65","\x62\x6F\x64\x79","\x65\x6E\x64","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x65\x78\x70\x65\x63\x74","\x2F\x61\x70\x69\x2F\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x73","\x67\x65\x74"];_0xdb31[0];var should=require(_0xdb31[1]);var app=require(_0xdb31[2]);var request=require(_0xdb31[3]);describe(_0xdb31[4],function(){it(_0xdb31[5],function(_0x9047x4){request(app)[_0xdb31[13]](_0xdb31[12])[_0xdb31[11]](200)[_0xdb31[11]](_0xdb31[10],/json/)[_0xdb31[9]](function(_0x9047x5,_0x9047x6){if(_0x9047x5){return _0x9047x4(_0x9047x5)};_0x9047x6[_0xdb31[8]][_0xdb31[1]][_0xdb31[7]][_0xdb31[6]](Array);_0x9047x4()})})})
\ No newline at end of file
+'use strict';
+
+var should = require('should');
+var app = require('../../app');
+var request = require('supertest');
+
+describe('GET /api/integrations', function() {
+
+  it('should respond with JSON array', function(done) {
+    request(app)
+      .get('/api/integrations')
+      .expect(200)
+      .expect('Content-Type', /json/)
+      .end(function(err, res) {
+        if (err) return done(err);
+        res.body.should.be.instanceof(Array);
+        done();
+      });
+  });
+});
\ No newline at end of file
index f72b376..b9f5ab2 100644 (file)
@@ -1 +1,16 @@
-var _0xae0f=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x69\x6E\x74\x65\x72\x76\x61\x6C\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0xae0f[0];var express=require(_0xae0f[1]);var controller=require(_0xae0f[2]);var auth=require(_0xae0f[3]);var router=express.Router();router[_0xae0f[7]](_0xae0f[4],auth[_0xae0f[5]](),controller[_0xae0f[6]]);router[_0xae0f[7]](_0xae0f[8],auth[_0xae0f[5]](),controller[_0xae0f[9]]);router[_0xae0f[11]](_0xae0f[4],auth[_0xae0f[5]](),controller[_0xae0f[10]]);router[_0xae0f[13]](_0xae0f[8],auth[_0xae0f[5]](),controller[_0xae0f[12]]);router[_0xae0f[15]](_0xae0f[4],auth[_0xae0f[5]](),controller[_0xae0f[14]]);router[_0xae0f[15]](_0xae0f[8],auth[_0xae0f[5]](),controller[_0xae0f[16]]);module[_0xae0f[17]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./interval.controller');
+var auth = require('../../auth/auth.service');
+
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), controller.index);
+router.get('/:id', auth.isAuthenticated(), controller.show);
+router.post('/', auth.isAuthenticated(), controller.create);
+router.put('/:id', auth.isAuthenticated(), controller.update);
+router.delete('/', auth.isAuthenticated(), controller.bulkDestroy);
+router.delete('/:id', auth.isAuthenticated(), controller.destroy);
+
+module.exports = router;
index 3d9c837..584391e 100644 (file)
@@ -1 +1,167 @@
-var _0x30a7=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x49\x6E\x74\x65\x72\x76\x61\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x56\x6F\x69\x63\x65\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x69\x6E\x74\x65\x72\x76\x61\x6C\x73","\x73\x75\x62\x69\x6E\x74\x65\x72\x76\x61\x6C\x73","\x73\x63\x6F\x70\x65","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x6C\x6F\x67","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x61\x6C\x6C","\x61\x72\x65\x20\x74\x68\x65\x72\x65\x20\x69\x6E\x74\x65\x72\x76\x61\x6C\x73","\x53\x75\x62\x49\x6E\x74\x65\x72\x76\x61\x6C\x73","\x6C\x65\x6E\x67\x74\x68","\x64\x65\x73\x74\x72\x6F\x79","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E","\x79\x65\x73\x20\x74\x68\x65\x72\x65\x20\x61\x72\x65","\x49\x6E\x74\x65\x72\x76\x61\x6C\x49\x64","\x70\x75\x73\x68","\x66\x6F\x72\x45\x61\x63\x68","\x6D\x65\x73\x73\x61\x67\x65","\x54\x68\x65\x20\x49\x6E\x74\x65\x72\x76\x61\x6C\x20\x69\x73\x20\x61\x73\x73\x6F\x63\x69\x61\x74\x65\x64\x20\x77\x69\x74\x68\x20\x6F\x6E\x65\x20\x6F\x72\x20\x6D\x6F\x72\x65\x20\x72\x6F\x75\x74\x65\x73\x2C\x20\x64\x65\x6C\x65\x74\x65\x20\x74\x68\x65\x6D\x20\x66\x69\x72\x73\x74","\x74\x72\x61\x6E\x73\x6C\x61\x74\x65\x64\x4D\x65\x73\x73\x61\x67\x65","\x4D\x45\x53\x53\x41\x47\x45\x5F\x49\x4E\x54\x45\x52\x56\x41\x4C\x5F\x52\x4F\x55\x54\x45\x5F\x41\x53\x53\x4F\x43\x49\x41\x54\x45\x44","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73"];_0x30a7[0];var _=require(_0x30a7[1]);var Interval=require(_0x30a7[3])[_0x30a7[2]];var VoiceExtension=require(_0x30a7[3])[_0x30a7[4]];var sequelize=require(_0x30a7[3])[_0x30a7[5]];var Util=require(_0x30a7[6]);exports[_0x30a7[7]]=function(_0xd5b7x6,_0xd5b7x7,_0xd5b7x8){return Interval[_0x30a7[17]](_0x30a7[15],_0x30a7[16])[_0x30a7[14]](Util[_0x30a7[13]](_0xd5b7x6[_0x30a7[12]]))[_0x30a7[11]](function(_0xd5b7xa){_0xd5b7x7[_0x30a7[10]](200)[_0x30a7[9]](_0xd5b7xa)})[_0x30a7[8]](function(_0xd5b7x9){return handleError(_0xd5b7x7,_0xd5b7x9)})};exports[_0x30a7[18]]=function(_0xd5b7x6,_0xd5b7x7){return Interval[_0x30a7[17]](_0x30a7[16])[_0x30a7[22]](_0xd5b7x6[_0x30a7[21]][_0x30a7[20]])[_0x30a7[11]](function(_0xd5b7xb){if(!_0xd5b7xb){return _0xd5b7x7[_0x30a7[19]](404)};return _0xd5b7x7[_0x30a7[9]](_0xd5b7xb)})[_0x30a7[8]](function(_0xd5b7x9){return handleError(_0xd5b7x7,_0xd5b7x9)})};exports[_0x30a7[23]]=function(_0xd5b7x6,_0xd5b7x7){return Interval[_0x30a7[17]](_0x30a7[16])[_0x30a7[23]](_0xd5b7x6[_0x30a7[25]])[_0x30a7[11]](function(_0xd5b7xb){return _0xd5b7x7[_0x30a7[10]](201)[_0x30a7[9]](_0xd5b7xb)})[_0x30a7[8]](function(_0xd5b7x9){console[_0x30a7[24]](_0xd5b7x9);return handleError(_0xd5b7x7,_0xd5b7x9)})};exports[_0x30a7[26]]=function(_0xd5b7x6,_0xd5b7x7){console[_0x30a7[24]](_0xd5b7x6[_0x30a7[25]]);return sequelize[_0x30a7[32]](function(_0xd5b7xc){if(_0xd5b7x6[_0x30a7[25]][_0x30a7[20]]){delete _0xd5b7x6[_0x30a7[25]][_0x30a7[20]]};return Interval[_0x30a7[26]](_0xd5b7x6[_0x30a7[25]],{where:{id:_0xd5b7x6[_0x30a7[21]][_0x30a7[20]]},individualHooks:true,transaction:_0xd5b7xc})[_0x30a7[11]](function(){if(_0xd5b7x6[_0x30a7[25]][_0x30a7[29]]){return Interval[_0x30a7[31]]({where:{IntervalId:_0xd5b7x6[_0x30a7[21]][_0x30a7[20]]},transaction:_0xd5b7xc})}})[_0x30a7[11]](function(){console[_0x30a7[24]](_0x30a7[28]);if(_0xd5b7x6[_0x30a7[25]][_0x30a7[29]]&&_0xd5b7x6[_0x30a7[25]][_0x30a7[29]][_0x30a7[30]]){return _0xd5b7x6[_0x30a7[21]][_0x30a7[20]]}})[_0x30a7[11]](bulkCreateSubIntervals(_0xd5b7x6[_0x30a7[25]].SubIntervals,_0xd5b7xc))[_0x30a7[27]]()})[_0x30a7[11]](function(){return _0xd5b7x7[_0x30a7[19]](200)})[_0x30a7[8]](function(_0xd5b7x9){console[_0x30a7[24]](_0xd5b7x9);return handleError(_0xd5b7x7,_0xd5b7x9)})};function bulkCreateSubIntervals(_0xd5b7xe,_0xd5b7xc){return function(_0xd5b7xf){if(_0xd5b7xf){console[_0x30a7[24]](_0x30a7[33]);var _0xd5b7x10=[];_0xd5b7xe[_0x30a7[36]](function(_0xd5b7x11){_0xd5b7x11[_0x30a7[34]]=_0xd5b7xf;_0xd5b7x10[_0x30a7[35]](Interval[_0x30a7[23]](_0xd5b7x11,{transaction:_0xd5b7xc}))});return _0xd5b7x10}else {return []}}}exports[_0x30a7[31]]=function(_0xd5b7x6,_0xd5b7x7){return sequelize[_0x30a7[32]](function(_0xd5b7xc){return Interval[_0x30a7[31]]({where:{id:_0xd5b7x6[_0x30a7[21]][_0x30a7[20]]},individualHooks:true,transaction:_0xd5b7xc})})[_0x30a7[11]](function(){return _0xd5b7x7[_0x30a7[19]](204)})[_0x30a7[8]](sequelize.ForeignKeyConstraintError,function(_0xd5b7x9){_0xd5b7x9[_0x30a7[37]]=_0x30a7[38];_0xd5b7x9[_0x30a7[39]]=_0x30a7[40];return handleError(_0xd5b7x7,_0xd5b7x9)})[_0x30a7[8]](function(_0xd5b7x9){return handleError(_0xd5b7x7,_0xd5b7x9)})};exports[_0x30a7[41]]=function(_0xd5b7x6,_0xd5b7x7){return sequelize[_0x30a7[32]](function(_0xd5b7xc){return Interval[_0x30a7[31]]({where:{id:_0xd5b7x6[_0x30a7[12]][_0x30a7[42]]},individualHooks:true,transaction:_0xd5b7xc})})[_0x30a7[11]](function(){return _0xd5b7x7[_0x30a7[19]](204)})[_0x30a7[8]](sequelize.ForeignKeyConstraintError,function(_0xd5b7x9){_0xd5b7x9[_0x30a7[37]]=_0x30a7[38];_0xd5b7x9[_0x30a7[39]]=_0x30a7[40];return handleError(_0xd5b7x7,_0xd5b7x9)})[_0x30a7[8]](function(_0xd5b7x9){return handleError(_0xd5b7x7,_0xd5b7x9)})};function handleError(_0xd5b7x7,_0xd5b7x9){return _0xd5b7x7[_0x30a7[10]](500)[_0x30a7[9]](_0xd5b7x9)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var Interval = require('../../models').Interval;
+var VoiceExtension = require('../../models').VoiceExtension;
+var sequelize = require('../../models').sequelize;
+
+var Util = require('../../config/util');
+
+// Get list of interval
+exports.index = function(req, res, next) {
+  return Interval
+    .scope('intervals', 'subintervals')
+    .findAndCountAll(Util.getQuery(req.query))
+    .then(function(result) {
+      res.status(200).send(result);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single interval
+exports.show = function(req, res) {
+  return Interval
+    .scope('subintervals')
+    .findById(req.params.id)
+    .then(function(interval) {
+      if (!interval) {
+        return res.sendStatus(404);
+      }
+      return res.send(interval);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new interval in the DB.
+exports.create = function(req, res) {
+  return Interval
+    .scope('subintervals')
+    .create(req.body)
+    .then(function(interval) {
+      return res.status(201).send(interval);
+    })
+    .catch(function(err) {
+      console.log(err);
+      return handleError(res, err);
+    });
+};
+
+// Updates an existing interval in the DB.
+exports.update = function(req, res) {
+  console.log(req.body);
+  return sequelize.transaction(function(t) {
+      if (req.body.id) {
+        delete req.body.id;
+      }
+      return Interval
+        .update(req.body, {
+          where: {
+            id: req.params.id
+          },
+          individualHooks: true,
+          transaction: t
+        })
+        .then(function() {
+          if (req.body.SubIntervals) {
+            return Interval
+              .destroy({
+                where: {
+                  IntervalId: req.params.id
+                },
+                transaction: t
+              });
+          }
+        })
+        .then(function() {
+          console.log('are there intervals');
+          if (req.body.SubIntervals && req.body.SubIntervals.length) {
+            return req.params.id;
+          }
+        })
+        .then(bulkCreateSubIntervals(req.body.SubIntervals, t))
+        .all();
+    })
+    .then(function() {
+      return res.sendStatus(200);
+    })
+    .catch(function(err) {
+      console.log(err);
+      return handleError(res, err);
+    });
+};
+
+function bulkCreateSubIntervals(subIntervals, t) {
+  return function(mainInterval) {
+    if (mainInterval) {
+      console.log('yes there are');
+      var bulkSubInts = [];
+      subIntervals.forEach(function(elem) {
+        elem.IntervalId = mainInterval;
+        bulkSubInts.push(Interval.create(elem, {
+          transaction: t
+        }));
+      });
+      return bulkSubInts;
+    } else {
+      return [];
+    }
+  }
+}
+
+// Deletes a interval from the DB.
+exports.destroy = function(req, res) {
+  return sequelize.transaction(function(t) {
+      return Interval
+        .destroy({
+          where: {
+            id: req.params.id
+          },
+          individualHooks: true,
+          transaction: t
+        });
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(sequelize.ForeignKeyConstraintError, function(err) {
+      err.message = 'The Interval is associated with one or more routes, delete them first';
+      err.translatedMessage = 'MESSAGE_INTERVAL_ROUTE_ASSOCIATED'
+      return handleError(res, err);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes multiple intervals from the DB.
+exports.bulkDestroy = function(req, res) {
+  return sequelize.transaction(function(t) {
+      return Interval
+        .destroy({
+          where: {
+            id: req.query.ids
+          },
+          individualHooks: true,
+          transaction: t
+        });
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(sequelize.ForeignKeyConstraintError, function(err) {
+      err.message = 'The Interval is associated with one or more routes, delete them first';
+      err.translatedMessage = 'MESSAGE_INTERVAL_ROUTE_ASSOCIATED'
+      return handleError(res, err);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index 0967e4e..d8aee27 100644 (file)
@@ -1 +1,31 @@
-var _0xe00a=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x49\x6E\x74\x65\x72\x76\x61\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x69\x6E\x74\x65\x72\x76\x61\x6C\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x69\x6E\x74\x65\x72\x76\x61\x6C\x3A\x72\x65\x6D\x6F\x76\x65","\x69\x6E\x74\x65\x72\x76\x61\x6C\x3A\x75\x70\x64\x61\x74\x65"];_0xe00a[0];var Interval=require(_0xe00a[2])[_0xe00a[1]];exports[_0xe00a[3]]=function(_0xe522x2){Interval[_0xe00a[4]](function(_0xe522x3){onSave(_0xe522x2,_0xe522x3)});Interval[_0xe00a[5]](function(_0xe522x3){onRemove(_0xe522x2,_0xe522x3)});Interval[_0xe00a[6]](function(_0xe522x3){onUpdate(_0xe522x2,_0xe522x3)})};function onSave(_0xe522x2,_0xe522x3,_0xe522x5){_0xe522x2[_0xe00a[8]](_0xe00a[7],_0xe522x3)}function onRemove(_0xe522x2,_0xe522x3,_0xe522x5){_0xe522x2[_0xe00a[8]](_0xe00a[9],_0xe522x3)}function onUpdate(_0xe522x2,_0xe522x3,_0xe522x5){_0xe522x2[_0xe00a[8]](_0xe00a[10],_0xe522x3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var Interval = require('../../models').Interval;
+
+exports.register = function(socket) {
+  Interval.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  Interval.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+  Interval.afterUpdate(function(doc) {
+    onUpdate(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('interval:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('interval:remove', doc);
+}
+
+function onUpdate(socket, doc, cb) {
+  socket.emit('interval:update', doc);
+}
index 6b69557..280cb64 100644 (file)
@@ -1 +1,20 @@
-var _0xd2f5=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x73\x68\x6F\x75\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x70\x70","\x73\x75\x70\x65\x72\x74\x65\x73\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x69\x6E\x74\x65\x72\x76\x61\x6C\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x70\x6F\x6E\x64\x20\x77\x69\x74\x68\x20\x4A\x53\x4F\x4E\x20\x61\x72\x72\x61\x79","\x69\x6E\x73\x74\x61\x6E\x63\x65\x6F\x66","\x62\x65","\x62\x6F\x64\x79","\x65\x6E\x64","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x65\x78\x70\x65\x63\x74","\x2F\x61\x70\x69\x2F\x69\x6E\x74\x65\x72\x76\x61\x6C\x73","\x67\x65\x74"];_0xd2f5[0];var should=require(_0xd2f5[1]);var app=require(_0xd2f5[2]);var request=require(_0xd2f5[3]);describe(_0xd2f5[4],function(){it(_0xd2f5[5],function(_0x7eb2x4){request(app)[_0xd2f5[13]](_0xd2f5[12])[_0xd2f5[11]](200)[_0xd2f5[11]](_0xd2f5[10],/json/)[_0xd2f5[9]](function(_0x7eb2x5,_0x7eb2x6){if(_0x7eb2x5){return _0x7eb2x4(_0x7eb2x5)};_0x7eb2x6[_0xd2f5[8]][_0xd2f5[1]][_0xd2f5[7]][_0xd2f5[6]](Array);_0x7eb2x4()})})})
\ No newline at end of file
+'use strict';
+
+var should = require('should');
+var app = require('../../app');
+var request = require('supertest');
+
+describe('GET /api/intervals', function() {
+
+  it('should respond with JSON array', function(done) {
+    request(app)
+      .get('/api/intervals')
+      .expect(200)
+      .expect('Content-Type', /json/)
+      .end(function(err, res) {
+        if (err) return done(err);
+        res.body.should.be.instanceof(Array);
+        done();
+      });
+  });
+});
index e16d9ab..1ecf642 100644 (file)
@@ -1 +1,33 @@
-var _0xec3a=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x6A\x73\x63\x72\x69\x70\x74\x79\x5F\x70\x72\x6F\x6A\x65\x63\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x2F\x3A\x69\x64\x2F\x64\x6F\x77\x6E\x6C\x6F\x61\x64","\x64\x6F\x77\x6E\x6C\x6F\x61\x64","\x2F\x3A\x69\x64\x2F\x73\x65\x73\x73\x69\x6F\x6E\x73","\x73\x68\x6F\x77\x53\x65\x73\x73\x69\x6F\x6E\x73","\x2F\x3A\x69\x64\x2F\x73\x65\x73\x73\x69\x6F\x6E\x73\x2F\x3A\x73\x65\x73\x73\x69\x6F\x6E\x49\x64","\x73\x68\x6F\x77\x53\x65\x73\x73\x69\x6F\x6E","\x2F\x3A\x69\x64\x2F\x71\x75\x65\x73\x74\x69\x6F\x6E\x73","\x73\x68\x6F\x77\x51\x75\x65\x73\x74\x69\x6F\x6E\x73","\x2F\x3A\x69\x64\x2F\x71\x75\x65\x73\x74\x69\x6F\x6E\x73\x2F\x73\x75\x6D\x6D\x61\x72\x79","\x73\x68\x6F\x77\x53\x75\x6D\x6D\x61\x72\x79","\x2F\x3A\x69\x64\x2F\x71\x75\x65\x73\x74\x69\x6F\x6E\x73\x2F\x64\x65\x74\x61\x69\x6C","\x73\x68\x6F\x77\x44\x65\x74\x61\x69\x6C","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x63\x72\x65\x61\x74\x65\x53\x65\x73\x73\x69\x6F\x6E","\x2F\x3A\x69\x64\x2F\x73\x65\x73\x73\x69\x6F\x6E\x73\x2F\x3A\x73\x65\x73\x73\x69\x6F\x6E\x49\x64\x2F\x71\x75\x65\x73\x74\x69\x6F\x6E\x73","\x63\x72\x65\x61\x74\x65\x51\x75\x65\x73\x74\x69\x6F\x6E\x73","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x75\x70\x64\x61\x74\x65\x53\x65\x73\x73\x69\x6F\x6E","\x70\x61\x74\x63\x68","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0xec3a[0];var express=require(_0xec3a[1]);var auth=require(_0xec3a[2]);var controller=require(_0xec3a[3]);var router=express.Router();router[_0xec3a[7]](_0xec3a[4],auth[_0xec3a[5]](),controller[_0xec3a[6]]);router[_0xec3a[7]](_0xec3a[8],auth[_0xec3a[5]](),controller[_0xec3a[9]]);router[_0xec3a[7]](_0xec3a[10],controller[_0xec3a[11]]);router[_0xec3a[7]](_0xec3a[12],controller[_0xec3a[13]]);router[_0xec3a[7]](_0xec3a[14],controller[_0xec3a[15]]);router[_0xec3a[7]](_0xec3a[16],controller[_0xec3a[17]]);router[_0xec3a[7]](_0xec3a[18],controller[_0xec3a[19]]);router[_0xec3a[7]](_0xec3a[20],controller[_0xec3a[21]]);router[_0xec3a[23]](_0xec3a[4],auth[_0xec3a[5]](),controller[_0xec3a[22]]);router[_0xec3a[23]](_0xec3a[12],auth[_0xec3a[5]](),controller[_0xec3a[24]]);router[_0xec3a[23]](_0xec3a[25],auth[_0xec3a[5]](),controller[_0xec3a[26]]);router[_0xec3a[28]](_0xec3a[8],auth[_0xec3a[5]](),controller[_0xec3a[27]]);router[_0xec3a[28]](_0xec3a[14],auth[_0xec3a[5]](),controller[_0xec3a[29]]);router[_0xec3a[30]](_0xec3a[8],auth[_0xec3a[5]](),controller[_0xec3a[27]]);router[_0xec3a[32]](_0xec3a[4],auth[_0xec3a[5]](),controller[_0xec3a[31]]);router[_0xec3a[32]](_0xec3a[8],auth[_0xec3a[5]](),controller[_0xec3a[33]]);module[_0xec3a[34]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var auth = require('../../auth/auth.service');
+var controller = require('./jscripty_project.controller');
+
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), controller.index);
+router.get('/:id', auth.isAuthenticated(), controller.show);
+router.get('/:id/download', controller.download);
+router.get('/:id/sessions', controller.showSessions);
+router.get('/:id/sessions/:sessionId', controller.showSession);
+
+router.get('/:id/questions', controller.showQuestions);
+
+router.get('/:id/questions/summary', controller.showSummary);
+router.get('/:id/questions/detail', controller.showDetail);
+
+router.post('/', auth.isAuthenticated(), controller.create);
+router.post('/:id/sessions', auth.isAuthenticated(), controller.createSession);
+router.post('/:id/sessions/:sessionId/questions', auth.isAuthenticated(), controller.createQuestions);
+
+router.put('/:id', auth.isAuthenticated(), controller.update);
+router.put('/:id/sessions/:sessionId', auth.isAuthenticated(), controller.updateSession);
+
+router.patch('/:id', auth.isAuthenticated(), controller.update);
+router.delete('/', auth.isAuthenticated(), controller.bulkDestroy);
+router.delete('/:id', auth.isAuthenticated(), controller.destroy);
+
+
+
+module.exports = router;
index 12dd761..3860e91 100644 (file)
@@ -1 +1,97 @@
-var _0x9eda=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6E\x6F\x50\x72\x65\x73\x65\x72\x76\x65\x43\x61\x63\x68\x65","\x70\x72\x6F\x78\x79\x71\x75\x69\x72\x65","\x6A\x73\x63\x72\x69\x70\x74\x79\x50\x72\x6F\x6A\x65\x63\x74\x43\x74\x72\x6C\x2E\x69\x6E\x64\x65\x78","\x6A\x73\x63\x72\x69\x70\x74\x79\x50\x72\x6F\x6A\x65\x63\x74\x43\x74\x72\x6C\x2E\x73\x68\x6F\x77","\x6A\x73\x63\x72\x69\x70\x74\x79\x50\x72\x6F\x6A\x65\x63\x74\x43\x74\x72\x6C\x2E\x63\x72\x65\x61\x74\x65","\x6A\x73\x63\x72\x69\x70\x74\x79\x50\x72\x6F\x6A\x65\x63\x74\x43\x74\x72\x6C\x2E\x75\x70\x64\x61\x74\x65","\x6A\x73\x63\x72\x69\x70\x74\x79\x50\x72\x6F\x6A\x65\x63\x74\x43\x74\x72\x6C\x2E\x64\x65\x73\x74\x72\x6F\x79","\x73\x70\x79","\x2E\x2F\x69\x6E\x64\x65\x78\x2E\x6A\x73","\x4A\x73\x63\x72\x69\x70\x74\x79\x50\x72\x6F\x6A\x65\x63\x74\x20\x41\x50\x49\x20\x52\x6F\x75\x74\x65\x72\x3A","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x74\x75\x72\x6E\x20\x61\x6E\x20\x65\x78\x70\x72\x65\x73\x73\x20\x72\x6F\x75\x74\x65\x72\x20\x69\x6E\x73\x74\x61\x6E\x63\x65","\x65\x71\x75\x61\x6C","\x74\x6F","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x6A\x73\x63\x72\x69\x70\x74\x79\x2F\x70\x72\x6F\x6A\x65\x63\x74\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x6A\x73\x63\x72\x69\x70\x74\x79\x50\x72\x6F\x6A\x65\x63\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x69\x6E\x64\x65\x78","\x63\x61\x6C\x6C\x65\x64\x4F\x6E\x63\x65","\x62\x65\x65\x6E","\x68\x61\x76\x65","\x2F","\x77\x69\x74\x68\x41\x72\x67\x73","\x67\x65\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x6A\x73\x63\x72\x69\x70\x74\x79\x2F\x70\x72\x6F\x6A\x65\x63\x74\x73\x2F\x3A\x69\x64","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x6A\x73\x63\x72\x69\x70\x74\x79\x50\x72\x6F\x6A\x65\x63\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x73\x68\x6F\x77","\x2F\x3A\x69\x64","\x50\x4F\x53\x54\x20\x2F\x61\x70\x69\x2F\x6A\x73\x63\x72\x69\x70\x74\x79\x2F\x70\x72\x6F\x6A\x65\x63\x74\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x6A\x73\x63\x72\x69\x70\x74\x79\x50\x72\x6F\x6A\x65\x63\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x50\x55\x54\x20\x2F\x61\x70\x69\x2F\x6A\x73\x63\x72\x69\x70\x74\x79\x2F\x70\x72\x6F\x6A\x65\x63\x74\x73\x2F\x3A\x69\x64","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x6A\x73\x63\x72\x69\x70\x74\x79\x50\x72\x6F\x6A\x65\x63\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x50\x41\x54\x43\x48\x20\x2F\x61\x70\x69\x2F\x6A\x73\x63\x72\x69\x70\x74\x79\x2F\x70\x72\x6F\x6A\x65\x63\x74\x73\x2F\x3A\x69\x64","\x70\x61\x74\x63\x68","\x44\x45\x4C\x45\x54\x45\x20\x2F\x61\x70\x69\x2F\x6A\x73\x63\x72\x69\x70\x74\x79\x2F\x70\x72\x6F\x6A\x65\x63\x74\x73\x2F\x3A\x69\x64","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x6A\x73\x63\x72\x69\x70\x74\x79\x50\x72\x6F\x6A\x65\x63\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65"];_0x9eda[0];var proxyquire=require(_0x9eda[2])[_0x9eda[1]]();var jscriptyProjectCtrlStub={index:_0x9eda[3],show:_0x9eda[4],create:_0x9eda[5],update:_0x9eda[6],destroy:_0x9eda[7]};var routerStub={get:sinon[_0x9eda[8]](),put:sinon[_0x9eda[8]](),patch:sinon[_0x9eda[8]](),post:sinon[_0x9eda[8]](),delete:sinon[_0x9eda[8]]()};var jscriptyProjectIndex=proxyquire(_0x9eda[9],{"\x65\x78\x70\x72\x65\x73\x73":{Router:function(){return routerStub}},"\x2E\x2F\x6A\x73\x63\x72\x69\x70\x74\x79\x5F\x70\x72\x6F\x6A\x65\x63\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72":jscriptyProjectCtrlStub});describe(_0x9eda[10],function(){it(_0x9eda[11],function(){expect(jscriptyProjectIndex)[_0x9eda[13]][_0x9eda[12]](routerStub)});describe(_0x9eda[14],function(){it(_0x9eda[15],function(){expect(routerStub[_0x9eda[21]][_0x9eda[20]](_0x9eda[19],_0x9eda[3]))[_0x9eda[13]][_0x9eda[18]][_0x9eda[17]][_0x9eda[16]]})});describe(_0x9eda[22],function(){it(_0x9eda[23],function(){expect(routerStub[_0x9eda[21]][_0x9eda[20]](_0x9eda[24],_0x9eda[4]))[_0x9eda[13]][_0x9eda[18]][_0x9eda[17]][_0x9eda[16]]})});describe(_0x9eda[25],function(){it(_0x9eda[26],function(){expect(routerStub[_0x9eda[27]][_0x9eda[20]](_0x9eda[19],_0x9eda[5]))[_0x9eda[13]][_0x9eda[18]][_0x9eda[17]][_0x9eda[16]]})});describe(_0x9eda[28],function(){it(_0x9eda[29],function(){expect(routerStub[_0x9eda[30]][_0x9eda[20]](_0x9eda[24],_0x9eda[6]))[_0x9eda[13]][_0x9eda[18]][_0x9eda[17]][_0x9eda[16]]})});describe(_0x9eda[31],function(){it(_0x9eda[29],function(){expect(routerStub[_0x9eda[32]][_0x9eda[20]](_0x9eda[24],_0x9eda[6]))[_0x9eda[13]][_0x9eda[18]][_0x9eda[17]][_0x9eda[16]]})});describe(_0x9eda[33],function(){it(_0x9eda[34],function(){expect(routerStub[_0x9eda[35]][_0x9eda[20]](_0x9eda[24],_0x9eda[7]))[_0x9eda[13]][_0x9eda[18]][_0x9eda[17]][_0x9eda[16]]})})})
\ No newline at end of file
+'use strict';
+
+var proxyquire = require('proxyquire').noPreserveCache();
+
+var jscriptyProjectCtrlStub = {
+  index: 'jscriptyProjectCtrl.index',
+  show: 'jscriptyProjectCtrl.show',
+  create: 'jscriptyProjectCtrl.create',
+  update: 'jscriptyProjectCtrl.update',
+  destroy: 'jscriptyProjectCtrl.destroy'
+};
+
+var routerStub = {
+  get: sinon.spy(),
+  put: sinon.spy(),
+  patch: sinon.spy(),
+  post: sinon.spy(),
+  delete: sinon.spy()
+};
+
+// require the index with our stubbed out modules
+var jscriptyProjectIndex = proxyquire('./index.js', {
+  'express': {
+    Router: function() {
+      return routerStub;
+    }
+  },
+  './jscripty_project.controller': jscriptyProjectCtrlStub
+});
+
+describe('JscriptyProject API Router:', function() {
+
+  it('should return an express router instance', function() {
+    expect(jscriptyProjectIndex).to.equal(routerStub);
+  });
+
+  describe('GET /api/jscripty/projects', function() {
+
+    it('should route to jscriptyProject.controller.index', function() {
+      expect(routerStub.get
+        .withArgs('/', 'jscriptyProjectCtrl.index')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('GET /api/jscripty/projects/:id', function() {
+
+    it('should route to jscriptyProject.controller.show', function() {
+      expect(routerStub.get
+        .withArgs('/:id', 'jscriptyProjectCtrl.show')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('POST /api/jscripty/projects', function() {
+
+    it('should route to jscriptyProject.controller.create', function() {
+      expect(routerStub.post
+        .withArgs('/', 'jscriptyProjectCtrl.create')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('PUT /api/jscripty/projects/:id', function() {
+
+    it('should route to jscriptyProject.controller.update', function() {
+      expect(routerStub.put
+        .withArgs('/:id', 'jscriptyProjectCtrl.update')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('PATCH /api/jscripty/projects/:id', function() {
+
+    it('should route to jscriptyProject.controller.update', function() {
+      expect(routerStub.patch
+        .withArgs('/:id', 'jscriptyProjectCtrl.update')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('DELETE /api/jscripty/projects/:id', function() {
+
+    it('should route to jscriptyProject.controller.destroy', function() {
+      expect(routerStub.delete
+        .withArgs('/:id', 'jscriptyProjectCtrl.destroy')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+});
index d501ee1..7550756 100644 (file)
@@ -1 +1,389 @@
-var _0x6c41=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x78\x6D\x6C\x32\x6A\x73","\x6C\x6F\x64\x61\x73\x68","\x4A\x73\x63\x72\x69\x70\x74\x79\x50\x72\x6F\x6A\x65\x63\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x52\x65\x70\x6F\x72\x74\x4A\x73\x63\x72\x69\x70\x74\x79\x53\x65\x73\x73\x69\x6F\x6E","\x52\x65\x70\x6F\x72\x74\x4A\x73\x63\x72\x69\x70\x74\x79\x51\x75\x65\x73\x74\x69\x6F\x6E","\x52\x65\x70\x6F\x72\x74\x4A\x73\x63\x72\x69\x70\x74\x79\x49\x6E\x70\x75\x74","\x62\x6C\x75\x65\x62\x69\x72\x64","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6A\x73\x6F\x6E","\x65\x6E\x64","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x73\x74\x72\x6F\x79","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x73\x68\x6F\x77\x53\x65\x73\x73\x69\x6F\x6E\x73","\x6C\x6F\x67","\x71\x75\x65\x73\x74\x69\x6F\x6E\x73\x41\x6E\x64\x49\x6E\x70\x75\x74","\x73\x63\x6F\x70\x65","\x73\x68\x6F\x77\x53\x65\x73\x73\x69\x6F\x6E","\x73\x65\x73\x73\x69\x6F\x6E\x49\x64","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77\x51\x75\x65\x73\x74\x69\x6F\x6E\x73","\x73\x68\x6F\x77\x53\x75\x6D\x6D\x61\x72\x79","\x71\x75\x65\x73\x74\x69\x6F\x6E\x53\x75\x6D\x6D\x61\x72\x79","\x73\x68\x6F\x77\x44\x65\x74\x61\x69\x6C","\x71\x75\x65\x73\x74\x69\x6F\x6E","\x71\x75\x65\x73\x74\x69\x6F\x6E\x5F\x69\x64","\x71\x75\x65\x73\x74\x69\x6F\x6E\x5F\x6C\x61\x62\x65\x6C","\x71\x75\x65\x73\x74\x69\x6F\x6E\x5F\x74\x65\x78\x74","\x71\x75\x65\x73\x74\x69\x6F\x6E\x5F\x61\x6E\x73\x77\x65\x72","\x63\x6F\x75\x6E\x74","\x63\x6F\x6C","\x66\x6E","\x63\x72\x65\x61\x74\x65","\x6E\x61\x6D\x65","\x66\x69\x65\x6C\x64\x73","\x6D\x65\x73\x73\x61\x67\x65","\x50\x72\x6F\x6A\x65\x63\x74\x20\x6E\x61\x6D\x65\x20\x61\x6C\x72\x65\x61\x64\x79\x20\x65\x78\x69\x73\x74\x73","\x74\x72\x61\x6E\x73\x6C\x61\x74\x65\x64\x4D\x65\x73\x73\x61\x67\x65","\x4D\x45\x53\x53\x41\x47\x45\x5F\x45\x58\x49\x53\x54\x5F\x50\x52\x4F\x4A\x45\x43\x54","\x62\x6F\x64\x79","\x63\x72\x65\x61\x74\x65\x53\x65\x73\x73\x69\x6F\x6E","\x63\x72\x65\x61\x74\x65\x51\x75\x65\x73\x74\x69\x6F\x6E\x73","\x72\x65\x71\x2E\x62\x6F\x64\x79","\x70\x75\x73\x68","\x66\x6F\x72\x45\x61\x63\x68","\x61\x6C\x6C","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x75\x70\x64\x61\x74\x65\x53\x65\x73\x73\x69\x6F\x6E","\x66\x69\x6E\x64","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73","\x64\x6F\x77\x6E\x6C\x6F\x61\x64","\x66\x69\x6C\x65\x6E\x61\x6D\x65","\x61\x74\x74\x61\x63\x68\x6D\x65\x6E\x74\x3B\x20\x66\x69\x6C\x65\x6E\x61\x6D\x65\x3D\x22","\x2E\x78\x6D\x6C\x22","\x74\x78\x74\x2F\x78\x6D\x6C","\x73\x65\x74","\x70\x72\x6F\x64\x75\x63\x74\x69\x6F\x6E"];_0x6c41[0];var xml=require(_0x6c41[1]);var _=require(_0x6c41[2]);var JscriptyProject=require(_0x6c41[4])[_0x6c41[3]];var Util=require(_0x6c41[5]);var sequelize=require(_0x6c41[4])[_0x6c41[6]];var ReportJscriptySession=require(_0x6c41[4])[_0x6c41[7]];var ReportJscriptyQuestion=require(_0x6c41[4])[_0x6c41[8]];var ReportJscriptyInput=require(_0x6c41[4])[_0x6c41[9]];var Promise=require(_0x6c41[10]);function handleError(_0x5e57xb,_0x5e57xc){return _0x5e57xb[_0x6c41[12]](500)[_0x6c41[11]](_0x5e57xc)}function responseWithResult(_0x5e57xb,_0x5e57xe){_0x5e57xe=_0x5e57xe||200;return function(_0x5e57xf){if(_0x5e57xf){_0x5e57xb[_0x6c41[12]](_0x5e57xe)[_0x6c41[13]](_0x5e57xf)}}}function handleEntityNotFound(_0x5e57xb){return function(_0x5e57xf){if(!_0x5e57xf){_0x5e57xb[_0x6c41[12]](404)[_0x6c41[14]]();return null};return _0x5e57xf}}function saveUpdates(_0x5e57x12){return function(_0x5e57xf){return _0x5e57xf[_0x6c41[16]](_0x5e57x12)[_0x6c41[15]](function(_0x5e57x13){return _0x5e57x13})}}function removeEntity(_0x5e57xb){return function(_0x5e57xf){if(_0x5e57xf){return _0x5e57xf[_0x6c41[17]]()[_0x6c41[15]](function(){_0x5e57xb[_0x6c41[12]](204)[_0x6c41[14]]()})}}}exports[_0x6c41[18]]=function(_0x5e57x15,_0x5e57xb,_0x5e57x16){return JscriptyProject[_0x6c41[22]](Util[_0x6c41[21]](_0x5e57x15[_0x6c41[20]]))[_0x6c41[15]](function(_0x5e57x17){_0x5e57xb[_0x6c41[12]](200)[_0x6c41[11]](_0x5e57x17)})[_0x6c41[19]](function(_0x5e57xc){return handleError(_0x5e57xb,_0x5e57xc)})};exports[_0x6c41[23]]=function(_0x5e57x15,_0x5e57xb){return JscriptyProject[_0x6c41[27]](_0x5e57x15[_0x6c41[26]][_0x6c41[25]])[_0x6c41[15]](function(_0x5e57x18){if(!_0x5e57x18){return _0x5e57xb[_0x6c41[24]](404)};return _0x5e57xb[_0x6c41[11]](_0x5e57x18)})[_0x6c41[19]](function(_0x5e57xc){return handleError(_0x5e57xb,_0x5e57xc)})};exports[_0x6c41[28]]=function(_0x5e57x15,_0x5e57xb){return ReportJscriptySession[_0x6c41[31]]({method:[_0x6c41[30],_0x5e57x15[_0x6c41[26]][_0x6c41[25]]]})[_0x6c41[22]](Util[_0x6c41[21]](_0x5e57x15[_0x6c41[20]]))[_0x6c41[15]](handleEntityNotFound(_0x5e57xb))[_0x6c41[15]](responseWithResult(_0x5e57xb))[_0x6c41[19]](function(_0x5e57xc){console[_0x6c41[29]](_0x5e57xc);return handleError(_0x5e57xb,_0x5e57xc)})};exports[_0x6c41[32]]=function(_0x5e57x15,_0x5e57xb){return ReportJscriptySession[_0x6c41[34]]({where:{projectId:_0x5e57x15[_0x6c41[26]][_0x6c41[25]],session_id:_0x5e57x15[_0x6c41[26]][_0x6c41[33]]},include:[{model:ReportJscriptyQuestion,include:[{model:ReportJscriptyInput}]}]})[_0x6c41[15]](handleEntityNotFound(_0x5e57xb))[_0x6c41[15]](responseWithResult(_0x5e57xb))[_0x6c41[19]](function(_0x5e57xc){console[_0x6c41[29]](_0x5e57xc);return handleError(_0x5e57xb,_0x5e57xc)})};exports[_0x6c41[35]]=function(_0x5e57x15,_0x5e57xb){return ReportJscriptyQuestion[_0x6c41[34]]({where:{projectId:_0x5e57x15[_0x6c41[26]][_0x6c41[25]]},include:[{model:ReportJscriptyInput}]})[_0x6c41[15]](function(_0x5e57x19){if(!_0x5e57x19){return _0x5e57xb[_0x6c41[24]](404)};return _0x5e57xb[_0x6c41[12]](200)[_0x6c41[11]](_0x5e57x19)})[_0x6c41[15]](handleEntityNotFound(_0x5e57xb))[_0x6c41[19]](function(_0x5e57xc){console[_0x6c41[29]](_0x5e57xc);return handleError(_0x5e57xb,_0x5e57xc)})};exports[_0x6c41[36]]=function(_0x5e57x15,_0x5e57xb){return ReportJscriptyQuestion[_0x6c41[31]]({method:[_0x6c41[37],_0x5e57x15[_0x6c41[26]][_0x6c41[25]]]})[_0x6c41[22]](Util[_0x6c41[21]](_0x5e57x15[_0x6c41[20]]))[_0x6c41[15]](handleEntityNotFound(_0x5e57xb))[_0x6c41[15]](function(_0x5e57x1a){return _0x5e57xb[_0x6c41[12]](200)[_0x6c41[11]](_0x5e57x1a)})[_0x6c41[19]](function(_0x5e57xc){console[_0x6c41[29]](_0x5e57xc);return handleError(_0x5e57xb,_0x5e57xc)})};exports[_0x6c41[38]]=function(_0x5e57x15,_0x5e57xb){return ReportJscriptyQuestion[_0x6c41[34]]({where:{projectId:_0x5e57x15[_0x6c41[26]][_0x6c41[25]],question_type:_0x6c41[39]},attributes:[_0x6c41[40],_0x6c41[41],_0x6c41[42],_0x6c41[43],[sequelize[_0x6c41[46]](_0x6c41[44],sequelize[_0x6c41[45]](_0x6c41[43])),_0x6c41[44]]],group:[_0x6c41[40],_0x6c41[41],_0x6c41[42],_0x6c41[43]]})[_0x6c41[15]](function(_0x5e57x19){return _0x5e57xb[_0x6c41[12]](201)[_0x6c41[11]](_0x5e57x19)})[_0x6c41[19]](function(_0x5e57xc){console[_0x6c41[29]](_0x5e57xc);return handleError(_0x5e57xb,_0x5e57xc)})};exports[_0x6c41[47]]=function(_0x5e57x15,_0x5e57xb){return JscriptyProject[_0x6c41[47]](_0x5e57x15[_0x6c41[54]])[_0x6c41[15]](function(_0x5e57x18){return _0x5e57xb[_0x6c41[12]](201)[_0x6c41[11]](_0x5e57x18)})[_0x6c41[19]](sequelize.UniqueConstraintError,function(_0x5e57xc){if(_0x5e57xc[_0x6c41[49]][_0x6c41[48]]){_0x5e57xc[_0x6c41[50]]=_0x6c41[51];_0x5e57xc[_0x6c41[52]]=_0x6c41[53]};return handleError(_0x5e57xb,_0x5e57xc)})[_0x6c41[19]](function(_0x5e57xc){return handleError(_0x5e57xb,_0x5e57xc)})};exports[_0x6c41[55]]=function(_0x5e57x15,_0x5e57xb){ReportJscriptySession[_0x6c41[47]](_0x5e57x15[_0x6c41[54]])[_0x6c41[15]](function(_0x5e57x1b){return _0x5e57xb[_0x6c41[12]](201)[_0x6c41[11]](_0x5e57x1b)})[_0x6c41[19]](function(_0x5e57xc){return handleError(_0x5e57xb,_0x5e57xc)})};exports[_0x6c41[56]]=function(_0x5e57x15,_0x5e57xb){ReportJscriptyQuestion[_0x6c41[17]]({where:{sessionId:_0x5e57x15[_0x6c41[26]][_0x6c41[33]]}})[_0x6c41[15]](function(){console[_0x6c41[29]](_0x6c41[57],_0x5e57x15[_0x6c41[54]]);var _0x5e57x1d=[];_0x5e57x15[_0x6c41[54]][_0x6c41[59]](function(_0x5e57x1e){_0x5e57x1d[_0x6c41[58]](ReportJscriptyQuestion[_0x6c41[47]](_0x5e57x1e,{include:[{model:ReportJscriptyInput}]}))});return Promise[_0x6c41[60]](_0x5e57x1d)})[_0x6c41[15]](function(_0x5e57x1c){return _0x5e57xb[_0x6c41[12]](201)[_0x6c41[11]](_0x5e57x1c)})[_0x6c41[19]](function(_0x5e57xc){return handleError(_0x5e57xb,_0x5e57xc)})};exports[_0x6c41[61]]=function(_0x5e57x15,_0x5e57xb){if(_0x5e57x15[_0x6c41[54]][_0x6c41[25]]){delete _0x5e57x15[_0x6c41[54]][_0x6c41[25]]};JscriptyProject[_0x6c41[27]](_0x5e57x15[_0x6c41[26]][_0x6c41[25]])[_0x6c41[15]](function(_0x5e57x18){if(!_0x5e57x18){return _0x5e57xb[_0x6c41[24]](404)};var _0x5e57x13=_[_0x6c41[62]](_0x5e57x18,_0x5e57x15[_0x6c41[54]]);_0x5e57x13[_0x6c41[63]]()[_0x6c41[15]](function(){return _0x5e57xb[_0x6c41[12]](200)[_0x6c41[11]](_0x5e57x18)})[_0x6c41[19]](function(_0x5e57xc){return handleError(_0x5e57xb,_0x5e57xc)})})[_0x6c41[19]](function(_0x5e57xc){return handleError(_0x5e57xb,_0x5e57xc)})};exports[_0x6c41[64]]=function(_0x5e57x15,_0x5e57xb){ReportJscriptySession[_0x6c41[61]](_0x5e57x15[_0x6c41[54]],{where:{session_id:_0x5e57x15[_0x6c41[26]][_0x6c41[33]]}})[_0x6c41[15]](function(_0x5e57x1b){return _0x5e57xb[_0x6c41[12]](200)[_0x6c41[11]](_0x5e57x1b)})[_0x6c41[19]](function(_0x5e57xc){return handleError(_0x5e57xb,_0x5e57xc)})};exports[_0x6c41[17]]=function(_0x5e57x15,_0x5e57xb){JscriptyProject[_0x6c41[65]]({where:{id:_0x5e57x15[_0x6c41[26]][_0x6c41[25]]}})[_0x6c41[15]](function(_0x5e57x18){if(!_0x5e57x18){return _0x5e57xb[_0x6c41[24]](404)};_0x5e57x18[_0x6c41[17]]()[_0x6c41[15]](function(){return _0x5e57xb[_0x6c41[24]](204)})[_0x6c41[19]](function(_0x5e57xc){return handleError(_0x5e57xb,_0x5e57xc)})})[_0x6c41[19]](function(_0x5e57xc){return handleError(_0x5e57xb,_0x5e57xc)})};exports[_0x6c41[66]]=function(_0x5e57x15,_0x5e57xb){JscriptyProject[_0x6c41[17]]({where:{id:_0x5e57x15[_0x6c41[20]][_0x6c41[67]]},individualHooks:true})[_0x6c41[15]](function(){return _0x5e57xb[_0x6c41[24]](204)})[_0x6c41[19]](function(_0x5e57xc){return handleError(_0x5e57xb,_0x5e57xc)})};exports[_0x6c41[68]]=function(_0x5e57x15,_0x5e57xb,_0x5e57x16){JscriptyProject[_0x6c41[27]](_0x5e57x15[_0x6c41[26]][_0x6c41[25]])[_0x6c41[15]](function(_0x5e57x18){if(!_0x5e57x18){return _0x5e57xb[_0x6c41[24]](404)};console[_0x6c41[29]](_0x5e57x15[_0x6c41[20]][_0x6c41[69]]);_0x5e57xb[_0x6c41[73]]({"\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E":_0x6c41[70]+_0x5e57x15[_0x6c41[20]][_0x6c41[69]]+_0x6c41[71],"\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65":_0x6c41[72]});return _0x5e57xb[_0x6c41[11]](_0x5e57x18[_0x6c41[74]])})[_0x6c41[19]](function(_0x5e57xc){return handleError(_0x5e57xb,_0x5e57xc)})}
\ No newline at end of file
+/**
+ * Using Rails-like standard naming convention for endpoints.
+ * GET     /api/jscripty/projects              ->  index
+ * POST    /api/jscripty/projects              ->  create
+ * GET     /api/jscripty/projects/:id          ->  show
+ * PUT     /api/jscripty/projects/:id          ->  update
+ * DELETE  /api/jscripty/projects/:id          ->  destroy
+ */
+
+'use strict';
+var xml = require('xml2js');
+
+var _ = require('lodash');
+
+var JscriptyProject = require('../../models').JscriptyProject;
+var Util = require('../../config/util');
+var sequelize = require('../../models').sequelize;
+var ReportJscriptySession = require('../../models').ReportJscriptySession;
+var ReportJscriptyQuestion = require('../../models').ReportJscriptyQuestion;
+var ReportJscriptyInput = require('../../models').ReportJscriptyInput;
+var Promise = require('bluebird');
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
+
+
+
+function responseWithResult(res, statusCode) {
+  statusCode = statusCode || 200;
+  return function(entity) {
+    if (entity) {
+      res.status(statusCode).json(entity);
+    }
+  };
+}
+
+function handleEntityNotFound(res) {
+  return function(entity) {
+    if (!entity) {
+      res.status(404).end();
+      return null;
+    }
+    return entity;
+  };
+}
+
+function saveUpdates(updates) {
+  return function(entity) {
+    return entity.updateAttributes(updates)
+      .then(function(updated) {
+        return updated;
+      });
+  };
+}
+
+function removeEntity(res) {
+  return function(entity) {
+    if (entity) {
+      return entity.destroy()
+        .then(function() {
+          res.status(204).end();
+        });
+    }
+  };
+}
+
+// Gets a list of JscriptyProjects
+
+exports.index = function(req, res, next) {
+  return JscriptyProject
+    .findAndCountAll(Util.getQuery(req.query))
+    .then(function(result) {
+      res.status(200).send(result);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+exports.show = function(req, res) {
+  return JscriptyProject
+    .findById(req.params.id)
+    .then(function(jscripty_project) {
+      if (!jscripty_project) {
+        return res.sendStatus(404);
+      }
+      return res.send(jscripty_project);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+// Gets a all ReportJscriptySession from the DB
+exports.showSessions = function(req, res) {
+    return ReportJscriptySession
+      .scope({
+        method: ['questionsAndInput', req.params.id]
+      })
+      .findAndCountAll(Util.getQuery(req.query))
+      .then(handleEntityNotFound(res))
+      .then(responseWithResult(res))
+      .catch(function(err) {
+        console.log(err);
+        return handleError(res, err);
+      });
+  }
+  // Gets a one ReportJscriptySession from the DB
+exports.showSession = function(req, res) {
+  return ReportJscriptySession
+    .findAll({
+      where: {
+        projectId: req.params.id,
+        session_id: req.params.sessionId
+      },
+      include: [{
+        model: ReportJscriptyQuestion,
+        include: [{
+          model: ReportJscriptyInput
+        }]
+      }]
+
+    })
+    .then(handleEntityNotFound(res))
+    .then(responseWithResult(res))
+    .catch(function(err) {
+      console.log(err);
+      return handleError(res, err);
+    });
+}
+
+// Gets a all ReportJscriptyQuestion from the DB
+exports.showQuestions = function(req, res) {
+  return ReportJscriptyQuestion
+    .findAll({
+      where: {
+        projectId: req.params.id
+      },
+      include: [{
+        model: ReportJscriptyInput
+      }],
+
+    })
+    .then(function(jscripty_questions) {
+      if (!jscripty_questions) {
+        return res.sendStatus(404);
+      }
+      return res.status(200).send(jscripty_questions);
+    })
+    .then(handleEntityNotFound(res))
+    .catch(function(err) {
+      console.log(err);
+      return handleError(res, err);
+    });
+}
+
+
+// Gets summary of ReportJscriptyQuestion from the DB
+
+exports.showSummary = function(req, res) {
+    return ReportJscriptyQuestion
+      .scope({
+        method: ['questionSummary', req.params.id]
+      })
+      .findAndCountAll(Util.getQuery(req.query))
+      .then(handleEntityNotFound(res))
+      .then(function(jscripty_summary) {
+        return res.status(200).send(jscripty_summary);
+      })
+      .catch(function(err) {
+        console.log(err);
+        return handleError(res, err);
+      });
+
+  }
+  // Gets detail of ReportJscriptyQuestion from the DB
+exports.showDetail = function(req, res) {
+
+    return ReportJscriptyQuestion
+      .findAll({
+
+        where: {
+          projectId: req.params.id,
+          question_type: 'question'
+        },
+        attributes: ['question_id', 'question_label', 'question_text', 'question_answer', [sequelize.fn('count', sequelize.col('question_answer')),
+          'count'
+        ]],
+
+        group: ['question_id', 'question_label', 'question_text', 'question_answer']
+
+
+      })
+      .then(function(jscripty_questions) {
+
+        return res.status(201).send(jscripty_questions);
+
+      })
+
+    .catch(function(err) {
+      console.log(err);
+      return handleError(res, err);
+    });
+  }
+  // Creates a new JscriptyProject in the DB
+exports.create = function(req, res) {
+  return JscriptyProject
+    .create(req.body)
+    .then(function(jscripty_project) {
+      return res.status(201).send(jscripty_project);
+    })
+    .catch(sequelize.UniqueConstraintError, function(err) {
+      if (err.fields.name) {
+        err.message = 'Project name already exists';
+        err.translatedMessage = 'MESSAGE_EXIST_PROJECT'
+      }
+      return handleError(res, err);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new ReportJscriptySession in the DB
+exports.createSession = function(req, res) {
+    ReportJscriptySession
+      .create(req.body)
+      .then(function(jscripty_session) {
+        return res.status(201).send(jscripty_session);
+      })
+      .catch(function(err) {
+        return handleError(res, err);
+      });
+
+  }
+  // Creates a new ReportJscriptyQuestions in the DB
+exports.createQuestions = function(req, res) {
+    ReportJscriptyQuestion
+      .destroy({
+        where: {
+          sessionId: req.params.sessionId
+        }
+      })
+      .then(function() {
+        console.log('req.body', req.body);
+        var _promises = [];
+
+        req.body.forEach(function(question) {
+          _promises.push(ReportJscriptyQuestion.create(question, {
+            include: [{
+              model: ReportJscriptyInput
+            }]
+          }));
+        });
+
+        return Promise
+          .all(_promises);
+      })
+      .then(function(jscripty_question) {
+        return res.status(201).send(jscripty_question);
+      })
+      .catch(function(err) {
+        return handleError(res, err);
+      });
+  }
+  // Updates an existing JscriptyProject in the DB
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  JscriptyProject
+    .findById(req.params.id)
+    .then(function(jscripty_project) {
+      if (!jscripty_project) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(jscripty_project, req.body);
+      updated.save()
+        .then(function() {
+          return res.status(200).send(jscripty_project);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+// Updates an existing ReportJscriptySession in the DB
+exports.updateSession = function(req, res) {
+
+  ReportJscriptySession
+    .update(req.body, {
+      where: {
+        session_id: req.params.sessionId
+      }
+
+    })
+    .then(function(jscripty_session) {
+      return res.status(200).send(jscripty_session);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+}
+
+// Deletes a JscriptyProject from the DB
+exports.destroy = function(req, res) {
+  JscriptyProject
+    .find({
+      where: {
+        id: req.params.id
+      }
+    })
+    .then(function(jscripty_project) {
+      if (!jscripty_project) {
+        return res.sendStatus(404);
+      }
+      jscripty_project.destroy()
+        .then(function() {
+          return res.sendStatus(204);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a jscripty_project from the DB.
+exports.bulkDestroy = function(req, res) {
+  JscriptyProject
+    .destroy({
+      where: {
+        id: req.query.ids
+      },
+      individualHooks: true
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+exports.download = function(req, res, next) {
+  JscriptyProject
+    .findById(req.params.id)
+    .then(function(jscripty_project) {
+      if (!jscripty_project) {
+        return res.sendStatus(404);
+      }
+      console.log(req.query.filename);
+      res.set({
+        "Content-Disposition": "attachment; filename=\"" + req.query.filename +
+          ".xml\"",
+        "Content-Type": "txt/xml"
+      });
+      return res.send(jscripty_project.production);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// exports.projectJson = function(req, res, next) {
+//   JscriptyProject
+//     .findById(req.params.id)
+//     .then(function(jscripty_project) {
+//       if (!jscripty_project) {
+//         return res.sendStatus(404);
+//       }
+//
+//       xml.parseString(jscripty_project.production, {
+//         normalizeTags: true,
+//         explicitArray: false
+//       }, function(err, result) {
+//         console.log(result);
+//         return res.status(200).send(result);
+//
+//       });
+//     })
+//     .catch(function(err) {
+//       return handleError(res, err);
+//     });
+// };
index 6217c86..4f5b49e 100644 (file)
@@ -1 +1,24 @@
-var _0x8fc1=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x4A\x73\x63\x72\x69\x70\x74\x79\x50\x72\x6F\x6A\x65\x63\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x6A\x73\x63\x72\x69\x70\x74\x79\x5F\x70\x72\x6F\x6A\x65\x63\x74\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x6A\x73\x63\x72\x69\x70\x74\x79\x5F\x70\x72\x6F\x6A\x65\x63\x74\x3A\x72\x65\x6D\x6F\x76\x65"];_0x8fc1[0];var JscriptyProject=require(_0x8fc1[2])[_0x8fc1[1]];exports[_0x8fc1[3]]=function(_0x78b5x2){JscriptyProject[_0x8fc1[4]](function(_0x78b5x3){onSave(_0x78b5x2,_0x78b5x3)});JscriptyProject[_0x8fc1[5]](function(_0x78b5x3){onRemove(_0x78b5x2,_0x78b5x3)})};function onSave(_0x78b5x2,_0x78b5x3,_0x78b5x5){_0x78b5x2[_0x8fc1[7]](_0x8fc1[6],_0x78b5x3)}function onRemove(_0x78b5x2,_0x78b5x3,_0x78b5x5){_0x78b5x2[_0x8fc1[7]](_0x8fc1[8],_0x78b5x3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var JscriptyProject = require('../../models').JscriptyProject;
+
+exports.register = function(socket) {
+  JscriptyProject.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  JscriptyProject.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+};
+
+function onSave(socket, doc, cb) {
+  socket.emit('jscripty_project:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('jscripty_project:remove', doc);
+}
index 04e25d2..3eb5928 100644 (file)
@@ -1 +1,19 @@
-var _0x958e=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x72\x65\x71\x75\x65\x73\x74","\x72\x65\x71\x75\x65\x73\x74","\x70\x6F\x73\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x958e[0];var express=require(_0x958e[1]);var auth=require(_0x958e[2]);var controller=require(_0x958e[3]);var router=express.Router();router[_0x958e[7]](_0x958e[4],auth[_0x958e[5]](),controller[_0x958e[6]]);router[_0x958e[10]](_0x958e[8],auth[_0x958e[5]](),controller[_0x958e[9]]);module[_0x958e[11]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var auth = require('../../auth/auth.service');
+var controller = require('./license.controller');
+
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), controller.index);
+
+// router.get('/:id', auth.isAuthenticated(), controller.show);
+// router.post('/', auth.isAuthenticated(), controller.create);
+router.post('/request', auth.isAuthenticated(), controller.request);
+// router.put('/:id', auth.isAuthenticated(), controller.update);
+// router.patch('/:id', auth.isAuthenticated(), controller.update);
+// router.delete('/:id', auth.isAuthenticated(), controller.destroy);
+
+
+module.exports = router;
index 323cc9b..3d38afa 100644 (file)
@@ -1 +1,161 @@
-var _0x167f=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x72\x65\x71\x75\x65\x73\x74\x2D\x70\x72\x6F\x6D\x69\x73\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x53\x65\x74\x74\x69\x6E\x67\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x44\x45\x4D\x4F\x20\x4C\x49\x43\x45\x4E\x53\x45","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6C\x69\x63\x65\x6E\x73\x65","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x64\x65\x63\x72\x79\x70\x74","\x70\x61\x72\x73\x65","\x74\x6F\x6B\x65\x6E","\x67\x65\x74\x55\x75\x69\x64","\x6A\x73\x6F\x6E","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x65\x6E\x64","\x64\x65\x73\x74\x72\x6F\x79","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x66\x69\x6E\x64\x42\x79\x49\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x72\x65\x71\x75\x65\x73\x74","\x6C\x6F\x67","\x73\x74\x61\x74\x75\x73\x43\x6F\x64\x65","\x50\x4F\x53\x54","\x70\x72\x6F\x76\x69\x73\x69\x6F\x6E\x69\x6E\x67","\x2F\x73\x65\x72\x76\x65\x72\x73\x2F","\x2F\x72\x65\x71\x75\x65\x73\x74","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65"];_0x167f[0];var _=require(_0x167f[1]);var rp=require(_0x167f[2]);var config=require(_0x167f[3]);var license=require(_0x167f[4]);var Settings=require(_0x167f[6])[_0x167f[5]];var demoLicense={users:1,agents:1,telephones:0,chat:false,mail:false,fax:false,description:_0x167f[7]};function handleError(_0x2412x8,_0x2412x9){_0x2412x9=_0x2412x9||500;return function(_0x2412xa){_0x2412x8[_0x167f[9]](_0x2412x9)[_0x167f[8]](_0x2412xa)}}function responseWithResult(_0x2412x8,_0x2412x9){_0x2412x9=_0x2412x9||200;return function(_0x2412xc){if(_0x2412xc){if(_0x2412xc[_0x167f[10]]){_0x2412xc[_0x167f[11]][_0x167f[10]]=license[_0x167f[12]](_0x2412xc[_0x167f[11]][_0x167f[10]]);_0x2412xc[_0x167f[11]][_0x167f[10]]=JSON[_0x167f[13]](_0x2412xc[_0x167f[11]][_0x167f[10]])}else {_0x2412xc[_0x167f[11]][_0x167f[10]]=demoLicense};_0x2412xc[_0x167f[11]][_0x167f[10]][_0x167f[14]]=license[_0x167f[15]]();_0x2412x8[_0x167f[9]](_0x2412x9)[_0x167f[16]](_0x2412xc)}}}function handleEntityNotFound(_0x2412x8){return function(_0x2412xc){if(!_0x2412xc){_0x2412xc={dataValues:{license:demoLicense}};_0x2412xc[_0x167f[11]][_0x167f[10]][_0x167f[14]]=license[_0x167f[15]]();_0x2412x8[_0x167f[9]](201)[_0x167f[16]](_0x2412xc);return null};return _0x2412xc}}function saveUpdates(_0x2412xf){return function(_0x2412xc){return _0x2412xc[_0x167f[18]](_0x2412xf)[_0x167f[17]](function(_0x2412x10){return _0x2412x10})}}function removeEntity(_0x2412x8){return function(_0x2412xc){if(_0x2412xc){return _0x2412xc[_0x167f[20]]()[_0x167f[17]](function(){_0x2412x8[_0x167f[9]](204)[_0x167f[19]]()})}}}exports[_0x167f[21]]=function(_0x2412x12,_0x2412x8){Settings[_0x167f[23]](1)[_0x167f[17]](handleEntityNotFound(_0x2412x8))[_0x167f[17]](responseWithResult(_0x2412x8))[_0x167f[22]](handleError(_0x2412x8))};exports[_0x167f[24]]=function(_0x2412x12,_0x2412x8){};exports[_0x167f[25]]=function(_0x2412x12,_0x2412x8){};exports[_0x167f[26]]=function(_0x2412x12,_0x2412x8){return rp({method:_0x167f[29],uri:config[_0x167f[30]]+_0x167f[31]+license[_0x167f[15]]()+_0x167f[32],body:_0x2412x12[_0x167f[33]],json:true})[_0x167f[17]](function(_0x2412x13){console[_0x167f[27]](_0x2412x13);_0x2412x8[_0x167f[9]](201)[_0x167f[8]](_0x2412x13)})[_0x167f[22]](function(_0x2412xa){console[_0x167f[27]](_0x2412xa);return _0x2412x8[_0x167f[9]](_0x2412xa[_0x167f[28]]||500)[_0x167f[8]](_0x2412xa)})};exports[_0x167f[34]]=function(_0x2412x12,_0x2412x8){};exports[_0x167f[20]]=function(_0x2412x12,_0x2412x8){}
\ No newline at end of file
+/**
+ * Using Rails-like standard naming convention for endpoints.
+ * GET     /api/licenses              ->  index
+ * POST    /api/licenses              ->  create
+ * GET     /api/licenses/:id          ->  show
+ * PUT     /api/licenses/:id          ->  update
+ * DELETE  /api/licenses/:id          ->  destroy
+ */
+
+'use strict';
+
+var _ = require('lodash');
+var rp = require('request-promise');
+
+var config = require('../../config/environment');
+var license = require('../../config/license/license.service');
+var Settings = require('../../models').Settings;
+
+var demoLicense = {
+  users: 1,
+  agents: 1,
+  telephones: 0,
+  chat: false,
+  mail: false,
+  fax: false,
+  description: 'DEMO LICENSE'
+};
+
+function handleError(res, statusCode) {
+  statusCode = statusCode || 500;
+  return function(err) {
+    res.status(statusCode).send(err);
+  };
+}
+
+function responseWithResult(res, statusCode) {
+  statusCode = statusCode || 200;
+  return function(entity) {
+    if (entity) {
+      if (entity.license) {
+        entity.dataValues.license = license.decrypt(entity.dataValues.license);
+        entity.dataValues.license = JSON.parse(entity.dataValues.license);
+      } else {
+        entity.dataValues.license = demoLicense;
+      }
+
+      entity.dataValues.license.token = license.getUuid();
+      res.status(statusCode).json(entity);
+    }
+  };
+}
+
+function handleEntityNotFound(res) {
+  return function(entity) {
+    if (!entity) {
+      entity = {
+        dataValues: {
+          license: demoLicense
+        }
+      };
+
+      entity.dataValues.license.token = license.getUuid();
+      res.status(201).json(entity);
+      return null;
+    }
+
+    return entity;
+  };
+}
+
+function saveUpdates(updates) {
+  return function(entity) {
+    return entity
+      .updateAttributes(updates)
+      .then(function(updated) {
+        return updated;
+      });
+  };
+}
+
+function removeEntity(res) {
+  return function(entity) {
+    if (entity) {
+      return entity
+        .destroy()
+        .then(function() {
+          res.status(204).end();
+        });
+    }
+  };
+}
+
+// Gets a list of Licenses
+exports.index = function(req, res) {
+  // License.findAll()
+  //   .then(responseWithResult(res))
+  //   .catch(handleError(res));
+
+  Settings
+    .findById(1)
+    .then(handleEntityNotFound(res))
+    .then(responseWithResult(res))
+    .catch(handleError(res));
+}
+
+// Gets a single License from the DB
+exports.show = function(req, res) {
+  // License.findById(req.params.id)
+  //   .then(handleEntityNotFound(res))
+  //   .then(responseWithResult(res))
+  //   .catch(handleError(res));
+}
+
+// Creates a new License in the DB
+exports.create = function(req, res) {
+  // License.create(req.body)
+  //   .then(responseWithResult(res, 201))
+  //   .catch(handleError(res));
+}
+
+// Creates a new License in the DB
+exports.request = function(req, res) {
+  // License.create(req.body)
+  //   .then(responseWithResult(res, 201))
+  //   .catch(handleError(res));
+  return rp({
+      method: 'POST',
+      uri: config.provisioning + '/servers/' + license.getUuid() + '/request',
+      body: req.body,
+      json: true // Automatically stringifies the body to JSON
+    })
+    .then(function(data) {
+      console.log(data);
+      res.status(201).send(data);
+    })
+    .catch(function(err) {
+      console.log(err);
+      return res.status(err.statusCode || 500).send(err);
+    });
+  // .catch(handleError(res));
+}
+
+// Updates an existing License in the DB
+exports.update = function(req, res) {
+  // if (req.body.id) {
+  //   delete req.body.id;
+  // }
+  // License.findById(req.params.id)
+  //   .then(handleEntityNotFound(res))
+  //   .then(saveUpdates(req.body))
+  //   .then(responseWithResult(res))
+  //   .catch(handleError(res));
+}
+
+// Deletes a License from the DB
+exports.destroy = function(req, res) {
+  // License.findById(req.params.id)
+  //   .then(handleEntityNotFound(res))
+  //   .then(removeEntity(res))
+  //   .catch(handleError(res));
+}
index 9d46a54..fb7f746 100644 (file)
@@ -1 +1,24 @@
-var _0xdf26=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x69\x63\x65\x6E\x73\x65\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x6C\x69\x63\x65\x6E\x73\x65\x3A\x72\x65\x6D\x6F\x76\x65"];_0xdf26[0];exports[_0xdf26[1]]=function(_0x89fex1){};function onSave(_0x89fex1,_0x89fex3,_0x89fex4){_0x89fex1[_0xdf26[3]](_0xdf26[2],_0x89fex3)}function onRemove(_0x89fex1,_0x89fex3,_0x89fex4){_0x89fex1[_0xdf26[3]](_0xdf26[4],_0x89fex3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+// var License = require('../../models').License;
+
+exports.register = function (socket) {
+  // License.afterCreate(function(doc) {
+  //   onSave(socket, doc);
+  // });
+  // License.afterDestroy(function(doc) {
+  //   onRemove(socket, doc);
+  // });
+};
+
+function onSave(socket, doc, cb) {
+  socket.emit('license:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('license:remove', doc);
+}
index c9ab84b..92b8162 100644 (file)
@@ -1 +1,23 @@
-var _0x20c1=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x6D\x61\x69\x6C\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x2F\x3A\x69\x64\x2F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x73\x68\x6F\x77\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x75\x70\x64\x61\x74\x65\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x70\x61\x74\x63\x68","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x2F\x3A\x69\x64\x2F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73\x2F\x3A\x61\x70\x70\x49\x64","\x64\x65\x73\x74\x72\x6F\x79\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x65\x78\x70\x6F\x72\x74\x73"];_0x20c1[0];var express=require(_0x20c1[1]);var controller=require(_0x20c1[2]);var auth=require(_0x20c1[3]);var router=express.Router();router[_0x20c1[7]](_0x20c1[4],auth[_0x20c1[5]](),controller[_0x20c1[6]]);router[_0x20c1[7]](_0x20c1[8],auth[_0x20c1[5]](),controller[_0x20c1[9]]);router[_0x20c1[7]](_0x20c1[10],auth[_0x20c1[5]](),controller[_0x20c1[11]]);router[_0x20c1[13]](_0x20c1[4],auth[_0x20c1[5]](),controller[_0x20c1[12]]);router[_0x20c1[15]](_0x20c1[8],auth[_0x20c1[5]](),controller[_0x20c1[14]]);router[_0x20c1[15]](_0x20c1[10],auth[_0x20c1[5]](),controller[_0x20c1[16]]);router[_0x20c1[17]](_0x20c1[8],auth[_0x20c1[5]](),controller[_0x20c1[14]]);router[_0x20c1[19]](_0x20c1[4],auth[_0x20c1[5]](),controller[_0x20c1[18]]);router[_0x20c1[19]](_0x20c1[8],auth[_0x20c1[5]](),controller[_0x20c1[20]]);router[_0x20c1[19]](_0x20c1[10],auth[_0x20c1[5]](),controller[_0x20c1[21]]);router[_0x20c1[19]](_0x20c1[22],auth[_0x20c1[5]](),controller[_0x20c1[23]]);module[_0x20c1[24]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./mail_account.controller');
+var auth = require('../../auth/auth.service');
+
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), controller.index);
+router.get('/:id', auth.isAuthenticated(), controller.show);
+router.get('/:id/applications', auth.isAuthenticated(), controller.showApplications);
+router.post('/', auth.isAuthenticated(), controller.create);
+// router.post('/:id/applications', auth.isAuthenticated(), controller.createApplications);
+router.put('/:id', auth.isAuthenticated(), controller.update);
+router.put('/:id/applications', auth.isAuthenticated(), controller.updateApplications);
+router.patch('/:id', auth.isAuthenticated(), controller.update);
+router.delete('/', auth.isAuthenticated(), controller.bulkDestroy);
+router.delete('/:id', auth.isAuthenticated(), controller.destroy);
+router.delete('/:id/applications', auth.isAuthenticated(), controller.bulkDestroyApplications);
+router.delete('/:id/applications/:appId', auth.isAuthenticated(), controller.destroyApplication);
+
+
+module.exports = router;
index b600b8d..87e8593 100644 (file)
@@ -1 +1,242 @@
-var _0x13da=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x61\x73\x79\x6E\x63","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x55\x73\x65\x72","\x4D\x61\x69\x6C\x51\x75\x65\x75\x65","\x4D\x61\x69\x6C\x41\x63\x63\x6F\x75\x6E\x74","\x4D\x61\x69\x6C\x53\x65\x72\x76\x65\x72\x49\x6E","\x4D\x61\x69\x6C\x53\x65\x72\x76\x65\x72\x4F\x75\x74","\x4D\x61\x69\x6C\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x64\x65\x66\x61\x75\x6C\x74","\x73\x63\x6F\x70\x65","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x73\x68\x6F\x77\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x6C\x65\x6E\x67\x74\x68","\x6E\x61\x6D\x65","\x6F\x6E\x6C\x69\x6E\x65","\x6D\x65\x72\x67\x65","\x67\x65\x74\x4D\x61\x69\x6C\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x63\x72\x65\x61\x74\x65","\x68\x61\x6E\x64\x6C\x65\x55\x6E\x69\x71\x75\x65\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74\x45\x72\x72\x6F\x72","\x65\x72\x72\x6F\x72\x4D\x61\x6E\x61\x67\x65\x72","\x62\x6F\x64\x79","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E","\x75\x70\x64\x61\x74\x65","\x73\x61\x76\x65","\x75\x70\x64\x61\x74\x65\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x63\x72\x65\x61\x74\x65\x64\x41\x74","\x75\x70\x64\x61\x74\x65\x64\x41\x74","\x70\x72\x69\x6F\x72\x69\x74\x79","\x66\x6F\x72\x45\x61\x63\x68","\x62\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x73\x74\x72\x6F\x79\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x61\x70\x70\x49\x64","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73"];_0x13da[0];var _=require(_0x13da[1]);var util=require(_0x13da[2]);var async=require(_0x13da[3]);var Util=require(_0x13da[4]);var sequelize=require(_0x13da[6])[_0x13da[5]];var User=require(_0x13da[6])[_0x13da[7]];var MailQueue=require(_0x13da[6])[_0x13da[8]];var MailAccount=require(_0x13da[6])[_0x13da[9]];var MailServerIn=require(_0x13da[6])[_0x13da[10]];var MailServerOut=require(_0x13da[6])[_0x13da[11]];var MailApplication=require(_0x13da[6])[_0x13da[12]];exports[_0x13da[13]]=function(_0x6190xc,_0x6190xd){return MailAccount[_0x13da[22]](_0x13da[21])[_0x13da[20]](Util[_0x13da[19]](_0x6190xc[_0x13da[18]]))[_0x13da[17]](function(_0x6190xf){_0x6190xd[_0x13da[16]](200)[_0x13da[15]](_0x6190xf)})[_0x13da[14]](function(_0x6190xe){return handleError(_0x6190xd,_0x6190xe)})};exports[_0x13da[23]]=function(_0x6190xc,_0x6190xd,_0x6190x10){return MailAccount[_0x13da[22]](_0x13da[21])[_0x13da[27]](_0x6190xc[_0x13da[26]][_0x13da[25]])[_0x13da[17]](function(_0x6190x11){if(!_0x6190x11){return _0x6190xd[_0x13da[24]](404)};return _0x6190xd[_0x13da[15]](_0x6190x11)})[_0x13da[14]](function(_0x6190xe){return handleError(_0x6190xd,_0x6190xe)})};exports[_0x13da[28]]=function(_0x6190xc,_0x6190xd,_0x6190x10){return MailAccount[_0x13da[22]](_0x13da[21])[_0x13da[27]](_0x6190xc[_0x13da[26]][_0x13da[25]])[_0x13da[17]](function(_0x6190x11){if(!_0x6190x11){return _0x6190xd[_0x13da[24]](404)};return _0x6190x11[_0x13da[33]](_[_0x13da[32]](Util[_0x13da[19]](_0x6190xc[_0x13da[18]]),{include:[{model:MailQueue,attributes:[_0x13da[25],_0x13da[30]]},{model:User,attributes:[_0x13da[25],_0x13da[30],_0x13da[31]]}]}))})[_0x13da[17]](function(_0x6190x12){return _0x6190xd[_0x13da[15]]({count:_0x6190x12[_0x13da[29]],rows:_0x6190x12})})[_0x13da[14]](function(_0x6190xe){return handleError(_0x6190xd,_0x6190xe)})};exports[_0x13da[34]]=function(_0x6190xc,_0x6190xd,_0x6190x10){return sequelize[_0x13da[38]](function(_0x6190x13){return MailAccount[_0x13da[34]](_0x6190xc[_0x13da[37]],{include:[{model:MailServerIn},{model:MailServerOut}],transaction:_0x6190x13})})[_0x13da[17]](function(_0x6190x11){return _0x6190xd[_0x13da[16]](201)[_0x13da[15]](_0x6190x11)})[_0x13da[14]](sequelize.UniqueConstraintError,function(_0x6190xe){return Util[_0x13da[36]][_0x13da[35]](_0x6190xd,_0x6190xe)})[_0x13da[14]](function(_0x6190xe){return handleError(_0x6190xd,_0x6190xe)})};exports[_0x13da[39]]=function(_0x6190xc,_0x6190xd){if(_0x6190xc[_0x13da[37]][_0x13da[25]]){delete _0x6190xc[_0x13da[37]][_0x13da[25]]};return MailAccount[_0x13da[27]](_0x6190xc[_0x13da[26]][_0x13da[25]])[_0x13da[17]](function(_0x6190x11){if(!_0x6190x11){return _0x6190xd[_0x13da[24]](404)};var _0x6190x14=_[_0x13da[32]](_0x6190x11,_0x6190xc[_0x13da[37]]);return _0x6190x14[_0x13da[40]]()})[_0x13da[17]](function(_0x6190x11){return _0x6190xd[_0x13da[16]](200)[_0x13da[15]](_0x6190x11)})[_0x13da[14]](sequelize.UniqueConstraintError,function(_0x6190xe){return Util[_0x13da[36]][_0x13da[35]](_0x6190xd,_0x6190xe)})[_0x13da[14]](function(_0x6190xe){return handleError(_0x6190xd,_0x6190xe)})};exports[_0x13da[41]]=function(_0x6190xc,_0x6190xd){var _0x6190x15=0;var _0x6190x16=_0x6190xc[_0x13da[37]];_0x6190x16[_0x13da[45]](function(_0x6190x17){delete _0x6190x17[_0x13da[25]];delete _0x6190x17[_0x13da[42]];delete _0x6190x17[_0x13da[43]];_0x6190x17[_0x13da[44]]= ++_0x6190x15});return sequelize[_0x13da[38]](function(_0x6190x13){return MailApplication[_0x13da[47]]({where:{MailAccountId:_0x6190xc[_0x13da[26]][_0x13da[25]]},individualHooks:true,transaction:_0x6190x13})[_0x13da[17]](function(_0x6190x19){return MailApplication[_0x13da[46]](_0x6190x16,{individualHooks:true,transaction:_0x6190x13})})})[_0x13da[17]](function(_0x6190x18){return _0x6190xd[_0x13da[16]](200)[_0x13da[15]]({count:_0x6190x18[_0x13da[29]],rows:_0x6190x18})})[_0x13da[14]](function(_0x6190xe){return handleError(_0x6190xd,_0x6190xe)})};exports[_0x13da[47]]=function(_0x6190xc,_0x6190xd,_0x6190x10){return MailAccount[_0x13da[27]](_0x6190xc[_0x13da[26]][_0x13da[25]])[_0x13da[17]](function(_0x6190x11){if(!_0x6190x11){return _0x6190xd[_0x13da[24]](404)};return _0x6190x11[_0x13da[47]]()})[_0x13da[17]](function(){return _0x6190xd[_0x13da[24]](204)})[_0x13da[14]](function(_0x6190xe){return handleError(_0x6190xd,_0x6190xe)})};exports[_0x13da[48]]=function(_0x6190xc,_0x6190xd,_0x6190x10){return MailApplication[_0x13da[27]](_0x6190xc[_0x13da[26]][_0x13da[49]])[_0x13da[17]](function(_0x6190x19){if(!_0x6190x19){return _0x6190xd[_0x13da[24]](404)};return _0x6190x19[_0x13da[47]]()})[_0x13da[17]](function(){return _0x6190xd[_0x13da[24]](204)})[_0x13da[14]](function(_0x6190xe){return handleError(_0x6190xd,_0x6190xe)})};exports[_0x13da[50]]=function(_0x6190xc,_0x6190xd){return MailAccount[_0x13da[47]]({where:{id:_0x6190xc[_0x13da[18]][_0x13da[51]]},individualHooks:true})[_0x13da[17]](function(){return _0x6190xd[_0x13da[24]](204)})[_0x13da[14]](function(_0x6190xe){return handleError(_0x6190xd,_0x6190xe)})};exports[_0x13da[52]]=function(_0x6190xc,_0x6190xd){return MailApplication[_0x13da[47]]({where:{id:_0x6190xc[_0x13da[18]][_0x13da[51]]},individualHooks:true})[_0x13da[17]](function(){return _0x6190xd[_0x13da[24]](204)})[_0x13da[14]](function(_0x6190xe){return handleError(_0x6190xd,_0x6190xe)})};function handleError(_0x6190xd,_0x6190xe){return _0x6190xd[_0x13da[16]](500)[_0x13da[15]](_0x6190xe)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var util = require('util');
+var async = require('async');
+
+var Util = require('../../config/util');
+
+var sequelize = require('../../models').sequelize;
+var User = require('../../models').User;
+var MailQueue = require('../../models').MailQueue;
+var MailAccount = require('../../models').MailAccount;
+var MailServerIn = require('../../models').MailServerIn;
+var MailServerOut = require('../../models').MailServerOut;
+var MailApplication = require('../../models').MailApplication;
+
+// Get list of mailAccounts
+exports.index = function(req, res) {
+  return MailAccount
+    .scope('default')
+    .findAndCountAll(Util.getQuery(req.query))
+    .then(function(result) {
+      res.status(200).send(result);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single mailAccount
+exports.show = function(req, res, next) {
+  return MailAccount
+    .scope('default')
+    .findById(req.params.id)
+    .then(function(mailAccount) {
+      if (!mailAccount) {
+        return res.sendStatus(404);
+      }
+      return res.send(mailAccount);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single mailAccount
+exports.showApplications = function(req, res, next) {
+  return MailAccount
+    .scope('default')
+    .findById(req.params.id)
+    .then(function(mailAccount) {
+      if (!mailAccount) {
+        return res.sendStatus(404);
+      }
+      return mailAccount
+        .getMailApplications(_.merge(Util.getQuery(req.query), {
+          include: [{
+            model: MailQueue,
+            attributes: ['id', 'name']
+          }, {
+            model: User,
+            attributes: ['id', 'name', 'online']
+          }]
+        }));
+    })
+    .then(function(mailApplications) {
+      return res.send({
+        count: mailApplications.length,
+        rows: mailApplications
+      });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new mailAccount in the DB.
+exports.create = function(req, res, next) {
+  return sequelize.transaction(function(t) {
+      return MailAccount
+        .create(req.body, {
+          include: [{
+            model: MailServerIn
+          }, {
+            model: MailServerOut
+          }],
+          transaction: t
+        });
+    }).then(function(mailAccount) {
+      return res.status(201).send(mailAccount);
+    })
+    .catch(sequelize.UniqueConstraintError, function(err) {
+      return Util.errorManager.handleUniqueConstraintError(res, err);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Updates an existing mailAccount in the DB.
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+
+  return MailAccount
+    .findById(req.params.id)
+    .then(function(mailAccount) {
+      if (!mailAccount) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(mailAccount, req.body);
+      return updated
+        .save();
+    })
+    .then(function(mailAccount) {
+      return res.status(200).send(mailAccount);
+    })
+    .catch(sequelize.UniqueConstraintError, function(err) {
+      return Util.errorManager.handleUniqueConstraintError(res, err);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Updates an existing mailAccount in the DB.
+exports.updateApplications = function(req, res) {
+
+  var priority = 0;
+  var apps = req.body;
+
+  apps.forEach(function(app) {
+    delete app.id;
+    delete app.createdAt;
+    delete app.updatedAt;
+
+    app.priority = ++priority;
+  });
+
+  return sequelize.transaction(function(t) {
+    return MailApplication
+      .destroy({
+        where: {
+          MailAccountId: req.params.id
+        },
+        individualHooks: true,
+        transaction: t
+      }).then(function(mailApplication) {
+        return MailApplication
+          .bulkCreate(apps, {
+            individualHooks: true,
+            transaction: t
+          });
+      });
+  }).then(function(mailAccounts) {
+    return res.status(200).send({
+      count: mailAccounts.length,
+      rows: mailAccounts
+    });
+  }).catch(function(err) {
+    return handleError(res, err);
+  });
+};
+
+// Deletes a mailAccount from the DB.
+exports.destroy = function(req, res, next) {
+  return MailAccount
+    .findById(req.params.id)
+    .then(function(mailAccount) {
+      if (!mailAccount) {
+        return res.sendStatus(404);
+      }
+
+      return mailAccount
+        .destroy();
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a mailAccount from the DB.
+exports.destroyApplication = function(req, res, next) {
+  return MailApplication
+    .findById(req.params.appId)
+    .then(function(mailApplication) {
+      if (!mailApplication) {
+        return res.sendStatus(404);
+      }
+
+      return mailApplication
+        .destroy();
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a agent from the DB.
+exports.bulkDestroy = function(req, res) {
+  return MailAccount
+    .destroy({
+      where: {
+        id: req.query.ids
+      },
+      individualHooks: true
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a agent from the DB.
+exports.bulkDestroyApplications = function(req, res) {
+  return MailApplication
+    .destroy({
+      where: {
+        id: req.query.ids
+      },
+      individualHooks: true
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index dfe746f..5b51c79 100644 (file)
@@ -1 +1,27 @@
-var _0xc891=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x4D\x61\x69\x6C\x41\x63\x63\x6F\x75\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x6D\x61\x69\x6C\x5F\x61\x63\x63\x6F\x75\x6E\x74\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x6D\x61\x69\x6C\x5F\x61\x63\x63\x6F\x75\x6E\x74\x3A\x72\x65\x6D\x6F\x76\x65"];_0xc891[0];var MailAccount=require(_0xc891[2])[_0xc891[1]];exports[_0xc891[3]]=function(_0xeab8x2){MailAccount[_0xc891[4]](function(_0xeab8x3){onSave(_0xeab8x2,_0xeab8x3)});MailAccount[_0xc891[5]](function(_0xeab8x3){onSave(_0xeab8x2,_0xeab8x3)});MailAccount[_0xc891[6]](function(_0xeab8x3){onRemove(_0xeab8x2,_0xeab8x3)})};function onSave(_0xeab8x2,_0xeab8x3,_0xeab8x5){_0xeab8x2[_0xc891[8]](_0xc891[7],_0xeab8x3)}function onRemove(_0xeab8x2,_0xeab8x3,_0xeab8x5){_0xeab8x2[_0xc891[8]](_0xc891[9],_0xeab8x3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var MailAccount = require('../../models').MailAccount;
+
+exports.register = function(socket) {
+  MailAccount.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  MailAccount.afterUpdate(function(doc) {
+    onSave(socket, doc);
+  });
+  MailAccount.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('mail_account:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('mail_account:remove', doc);
+}
index 32fed73..3c132bb 100644 (file)
@@ -1 +1,15 @@
-var _0x63d6=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x6D\x61\x69\x6C\x5F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x63d6[0];var express=require(_0x63d6[1]);var controller=require(_0x63d6[2]);var router=express.Router();router[_0x63d6[5]](_0x63d6[3],controller[_0x63d6[4]]);router[_0x63d6[5]](_0x63d6[6],controller[_0x63d6[7]]);router[_0x63d6[9]](_0x63d6[3],controller[_0x63d6[8]]);router[_0x63d6[11]](_0x63d6[6],controller[_0x63d6[10]]);router[_0x63d6[12]](_0x63d6[6],controller[_0x63d6[10]]);router[_0x63d6[14]](_0x63d6[6],controller[_0x63d6[13]]);module[_0x63d6[15]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./mail_application.controller');
+
+var router = express.Router();
+
+router.get('/', controller.index);
+router.get('/:id', controller.show);
+router.post('/', controller.create);
+router.put('/:id', controller.update);
+router.patch('/:id', controller.update);
+router.delete('/:id', controller.destroy);
+
+module.exports = router;
\ No newline at end of file
index a9a2255..260557e 100644 (file)
@@ -1 +1,111 @@
-var _0xbb5a=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x4D\x61\x69\x6C\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x70\x72\x69\x6F\x72\x69\x74\x79","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x4D\x61\x69\x6C\x41\x63\x63\x6F\x75\x6E\x74\x49\x64","\x6D\x61\x78","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79"];_0xbb5a[0];var _=require(_0xbb5a[1]);var MailApplication=require(_0xbb5a[3])[_0xbb5a[2]];exports[_0xbb5a[4]]=function(_0x8b00x3,_0x8b00x4,_0x8b00x5){MailApplication[_0xbb5a[11]]({where:_0x8b00x3[_0xbb5a[9]],order:_0xbb5a[10],include:[{all:true}]})[_0xbb5a[8]](function(_0x8b00x7){return _0x8b00x4[_0xbb5a[7]](200)[_0xbb5a[6]](_0x8b00x7)})[_0xbb5a[5]](function(_0x8b00x6){return handleError(_0x8b00x4,_0x8b00x6)})};exports[_0xbb5a[12]]=function(_0x8b00x3,_0x8b00x4,_0x8b00x5){MailApplication[_0xbb5a[16]](_0x8b00x3[_0xbb5a[15]][_0xbb5a[14]],{include:[{all:true}]})[_0xbb5a[8]](function(_0x8b00x8){if(!_0x8b00x8){return _0x8b00x4[_0xbb5a[13]](404)};return _0x8b00x4[_0xbb5a[6]](_0x8b00x8)})[_0xbb5a[5]](function(_0x8b00x6){return handleError(_0x8b00x4,_0x8b00x6)})};exports[_0xbb5a[17]]=function(_0x8b00x3,_0x8b00x4,_0x8b00x5){MailApplication[_0xbb5a[20]](_0xbb5a[10],{where:{MailAccountId:_0x8b00x3[_0xbb5a[18]][_0xbb5a[19]]}})[_0xbb5a[8]](function(_0x8b00x9){_0x8b00x3[_0xbb5a[18]][_0xbb5a[10]]=_0x8b00x9?++_0x8b00x9:1;MailApplication[_0xbb5a[17]](_0x8b00x3[_0xbb5a[18]])[_0xbb5a[8]](function(_0x8b00x8){return _0x8b00x4[_0xbb5a[7]](201)[_0xbb5a[6]](_0x8b00x8)})[_0xbb5a[5]](function(_0x8b00x6){return handleError(_0x8b00x4,_0x8b00x6)})})[_0xbb5a[5]](function(_0x8b00x6){return handleError(_0x8b00x4,_0x8b00x6)})};exports[_0xbb5a[21]]=function(_0x8b00x3,_0x8b00x4,_0x8b00x5){if(_0x8b00x3[_0xbb5a[18]][_0xbb5a[14]]){delete _0x8b00x3[_0xbb5a[18]][_0xbb5a[14]]};MailApplication[_0xbb5a[16]](_0x8b00x3[_0xbb5a[15]][_0xbb5a[14]])[_0xbb5a[8]](function(_0x8b00x8){if(!_0x8b00x8){return _0x8b00x4[_0xbb5a[13]](404)};var _0x8b00xa=_[_0xbb5a[22]](_0x8b00x8,_0x8b00x3[_0xbb5a[18]]);_0x8b00xa[_0xbb5a[23]]()[_0xbb5a[8]](function(){return _0x8b00x4[_0xbb5a[7]](200)[_0xbb5a[6]](_0x8b00x8)})[_0xbb5a[5]](function(_0x8b00x6){return handleError(_0x8b00x4,_0x8b00x6)})})[_0xbb5a[5]](function(_0x8b00x6){return handleError(_0x8b00x4,_0x8b00x6)})};exports[_0xbb5a[24]]=function(_0x8b00x3,_0x8b00x4,_0x8b00x5){MailApplication[_0xbb5a[16]](_0x8b00x3[_0xbb5a[15]][_0xbb5a[14]])[_0xbb5a[8]](function(_0x8b00x8){if(!_0x8b00x8){return _0x8b00x4[_0xbb5a[13]](404)};_0x8b00x8[_0xbb5a[24]]()[_0xbb5a[8]](function(){return _0x8b00x4[_0xbb5a[13]](204)})[_0xbb5a[5]](function(_0x8b00x6){return handleError(_0x8b00x4,_0x8b00x6)})})[_0xbb5a[5]](function(_0x8b00x6){return handleError(_0x8b00x4,_0x8b00x6)})};function handleError(_0x8b00x4,_0x8b00x6){return _0x8b00x4[_0xbb5a[7]](500)[_0xbb5a[6]](_0x8b00x6)}
\ No newline at end of file
+'use strict';
+var _ = require('lodash');
+var MailApplication = require('../../models').MailApplication;
+// Get list of mailApplications
+exports.index = function(req, res, next) {
+  MailApplication
+    .findAll({
+      where: req.query,
+      order: 'priority',
+      include: [{
+        all: true
+      }]
+    })
+    .then(function(mailApplications) {
+      return res.status(200).send(mailApplications);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+// Get a single mailApplication
+exports.show = function(req, res, next) {
+  MailApplication
+    .findById(req.params.id, {
+      include: [{
+        all: true
+      }]
+    })
+    .then(function(mailApplication) {
+      if (!mailApplication) {
+        return res.sendStatus(404);
+      }
+      return res.send(mailApplication);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+// Creates a new mailApplication in the DB.
+exports.create = function(req, res, next) {
+  MailApplication
+    .max('priority', {
+      where: {
+        MailAccountId: req.body.MailAccountId
+      }
+    }).then(function(max) {
+      // SET PRIORITY
+      req.body.priority = max ? ++max : 1;
+      MailApplication
+        .create(req.body)
+        .then(function(mailApplication) {
+          return res.status(201).send(mailApplication);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+// Updates an existing mailApplication in the DB.
+exports.update = function(req, res, next) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  MailApplication
+    .findById(req.params.id)
+    .then(function(mailApplication) {
+      if (!mailApplication) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(mailApplication, req.body);
+      updated
+        .save()
+        .then(function() {
+          return res.status(200).send(mailApplication);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+// Deletes a mailApplication from the DB.
+exports.destroy = function(req, res, next) {
+  MailApplication
+    .findById(req.params.id)
+    .then(function(mailApplication) {
+      if (!mailApplication) {
+        return res.sendStatus(404);
+      }
+      mailApplication
+        .destroy()
+        .then(function() {
+          return res.sendStatus(204);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index c26bcdf..ead0c90 100644 (file)
@@ -1 +1,24 @@
-var _0xe96e=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x4D\x61\x69\x6C\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x6D\x61\x69\x6C\x5F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x6D\x61\x69\x6C\x5F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x3A\x72\x65\x6D\x6F\x76\x65"];_0xe96e[0];var mailApplication=require(_0xe96e[2])[_0xe96e[1]];exports[_0xe96e[3]]=function(_0x52b9x2){mailApplication[_0xe96e[4]](function(_0x52b9x3){onSave(_0x52b9x2,_0x52b9x3)});mailApplication[_0xe96e[5]](function(_0x52b9x3){onRemove(_0x52b9x2,_0x52b9x3)})};function onSave(_0x52b9x2,_0x52b9x3,_0x52b9x5){_0x52b9x2[_0xe96e[7]](_0xe96e[6],_0x52b9x3)}function onRemove(_0x52b9x2,_0x52b9x3,_0x52b9x5){_0x52b9x2[_0xe96e[7]](_0xe96e[8],_0x52b9x3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var mailApplication = require('../../models').MailApplication;
+
+exports.register = function(socket) {
+  mailApplication.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  mailApplication.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('mail_application:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('mail_application:remove', doc);
+}
index 364f9ff..023b99b 100644 (file)
@@ -1 +1,20 @@
-var _0x3f18=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x73\x68\x6F\x75\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x70\x70","\x73\x75\x70\x65\x72\x74\x65\x73\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x2F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x70\x6F\x6E\x64\x20\x77\x69\x74\x68\x20\x4A\x53\x4F\x4E\x20\x61\x72\x72\x61\x79","\x69\x6E\x73\x74\x61\x6E\x63\x65\x6F\x66","\x62\x65","\x62\x6F\x64\x79","\x65\x6E\x64","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x65\x78\x70\x65\x63\x74","\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x2F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x67\x65\x74"];_0x3f18[0];var should=require(_0x3f18[1]);var app=require(_0x3f18[2]);var request=require(_0x3f18[3]);describe(_0x3f18[4],function(){it(_0x3f18[5],function(_0xd6a3x4){request(app)[_0x3f18[13]](_0x3f18[12])[_0x3f18[11]](200)[_0x3f18[11]](_0x3f18[10],/json/)[_0x3f18[9]](function(_0xd6a3x5,_0xd6a3x6){if(_0xd6a3x5){return _0xd6a3x4(_0xd6a3x5)};_0xd6a3x6[_0x3f18[8]][_0x3f18[1]][_0x3f18[7]][_0x3f18[6]](Array);_0xd6a3x4()})})})
\ No newline at end of file
+'use strict';
+
+var should = require('should');
+var app = require('../../app');
+var request = require('supertest');
+
+describe('GET /api/mail/applications', function() {
+
+  it('should respond with JSON array', function(done) {
+    request(app)
+      .get('/api/mail/applications')
+      .expect(200)
+      .expect('Content-Type', /json/)
+      .end(function(err, res) {
+        if (err) return done(err);
+        res.body.should.be.instanceof(Array);
+        done();
+      });
+  });
+});
\ No newline at end of file
index d438b27..f154de4 100644 (file)
@@ -1 +1,15 @@
-var _0xc726=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x6D\x61\x69\x6C\x5F\x61\x74\x74\x61\x63\x68\x6D\x65\x6E\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0xc726[0];var express=require(_0xc726[1]);var controller=require(_0xc726[2]);var router=express.Router();router[_0xc726[5]](_0xc726[3],controller[_0xc726[4]]);router[_0xc726[5]](_0xc726[6],controller[_0xc726[7]]);router[_0xc726[9]](_0xc726[3],controller[_0xc726[8]]);router[_0xc726[11]](_0xc726[6],controller[_0xc726[10]]);router[_0xc726[12]](_0xc726[6],controller[_0xc726[10]]);router[_0xc726[14]](_0xc726[6],controller[_0xc726[13]]);module[_0xc726[15]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./mail_attachment.controller');
+
+var router = express.Router();
+
+router.get('/', controller.index);
+router.get('/:id', controller.show);
+router.post('/', controller.create);
+router.put('/:id', controller.update);
+router.patch('/:id', controller.update);
+router.delete('/:id', controller.destroy);
+
+module.exports = router;
\ No newline at end of file
index ff92eaf..72d2b7b 100644 (file)
@@ -1 +1,100 @@
-var _0x696f=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x70\x61\x74\x68","\x66\x73","\x66\x6F\x72\x6D\x69\x64\x61\x62\x6C\x65","\x62\x6C\x75\x65\x62\x69\x72\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x4D\x61\x69\x6C\x41\x74\x74\x61\x63\x68\x6D\x65\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x6E\x61\x6D\x65","\x64\x6F\x77\x6E\x6C\x6F\x61\x64","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x75\x70\x6C\x6F\x61\x64\x44\x69\x72","\x72\x6F\x6F\x74","\x73\x65\x72\x76\x65\x72","\x66\x69\x6C\x65\x73","\x61\x74\x74\x61\x63\x68\x6D\x65\x6E\x74\x73","\x6A\x6F\x69\x6E","\x6B\x65\x65\x70\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E\x73","\x6D\x75\x6C\x74\x69\x70\x6C\x65\x73","\x68\x61\x73\x68","\x73\x69\x7A\x65","\x66\x69\x6C\x65","\x74\x79\x70\x65","\x62\x61\x73\x65\x6E\x61\x6D\x65","\x70\x61\x72\x73\x65","\x75\x70\x64\x61\x74\x65","\x62\x6F\x64\x79","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79","\x75\x6E\x6C\x69\x6E\x6B","\x70\x72\x6F\x6D\x69\x73\x69\x66\x79"];_0x696f[0];var _=require(_0x696f[1]);var path=require(_0x696f[2]);var fs=require(_0x696f[3]);var formidable=require(_0x696f[4]);var Promise=require(_0x696f[5]);var config=require(_0x696f[6]);var MailAttachment=require(_0x696f[8])[_0x696f[7]];exports[_0x696f[9]]=function(_0x75ddx8,_0x75ddx9,_0x75ddxa){return MailAttachment[_0x696f[14]]()[_0x696f[13]](function(_0x75ddxc){return _0x75ddx9[_0x696f[12]](200)[_0x696f[11]](_0x75ddxc)})[_0x696f[10]](function(_0x75ddxb){return _0x75ddxa(_0x75ddxb)})};exports[_0x696f[15]]=function(_0x75ddx8,_0x75ddx9,_0x75ddxa){return MailAttachment[_0x696f[20]](_0x75ddx8[_0x696f[19]][_0x696f[18]])[_0x696f[13]](function(_0x75ddxd){return _0x75ddx9[_0x696f[17]](_0x75ddxd[_0x696f[2]],_0x75ddxd[_0x696f[16]])})[_0x696f[10]](function(_0x75ddxb){return _0x75ddxa(_0x75ddxb)})};exports[_0x696f[21]]=function(_0x75ddx8,_0x75ddx9,_0x75ddxa){var _0x75ddxe= new formidable.IncomingForm();_0x75ddxe[_0x696f[22]]=path[_0x696f[27]](config[_0x696f[23]],_0x696f[24],_0x696f[25],_0x696f[26]);_0x75ddxe[_0x696f[28]]=true;_0x75ddxe[_0x696f[29]]=true;_0x75ddxe[_0x696f[30]]=true;_0x75ddxe[_0x696f[35]](_0x75ddx8,function(_0x75ddxb,_0x75ddxe,_0x75ddxf){if(_0x75ddxb){return _0x75ddx9[_0x696f[12]](500)[_0x696f[11]](_0x75ddxb)};return _0x75ddx9[_0x696f[12]](201)[_0x696f[11]]({size:_0x75ddxf[_0x696f[32]][_0x696f[31]],path:_0x75ddxf[_0x696f[32]][_0x696f[2]],name:_0x75ddxf[_0x696f[32]][_0x696f[16]],type:_0x75ddxf[_0x696f[32]][_0x696f[33]],basename:path[_0x696f[34]](_0x75ddxf[_0x696f[32]][_0x696f[2]])})})};exports[_0x696f[36]]=function(_0x75ddx8,_0x75ddx9,_0x75ddxa){if(_0x75ddx8[_0x696f[37]][_0x696f[18]]){delete _0x75ddx8[_0x696f[37]][_0x696f[18]]};MailAttachment[_0x696f[20]](_0x75ddx8[_0x696f[19]][_0x696f[18]])[_0x696f[13]](function(_0x75ddxd){if(!_0x75ddxd){return _0x75ddx9[_0x696f[38]](404)};var _0x75ddx10=_[_0x696f[39]](_0x75ddxd,_0x75ddx8[_0x696f[37]]);_0x75ddx10[_0x696f[40]]()[_0x696f[13]](function(){return _0x75ddx9[_0x696f[12]](200)[_0x696f[11]](_0x75ddxd)})[_0x696f[10]](function(_0x75ddxb){return _0x75ddxa(_0x75ddxb)})})[_0x696f[10]](function(_0x75ddxb){return _0x75ddxa(_0x75ddxb)})};exports[_0x696f[41]]=function(_0x75ddx8,_0x75ddx9,_0x75ddxa){var _0x75ddx11=Promise[_0x696f[43]](require(_0x696f[3])[_0x696f[42]]);var _0x75ddx12=path[_0x696f[27]](config[_0x696f[23]],_0x696f[24],_0x696f[25],_0x696f[26],_0x75ddx8[_0x696f[19]][_0x696f[18]]);return _0x75ddx11(_0x75ddx12)[_0x696f[13]](function(){return _0x75ddx9[_0x696f[38]](204)})[_0x696f[10]](function(_0x75ddxb){return handleError(_0x75ddx9,_0x75ddxb)})};function handleError(_0x75ddx9,_0x75ddxb){return _0x75ddx9[_0x696f[12]](500)[_0x696f[11]](_0x75ddxb)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var path = require('path');
+var fs = require('fs');
+var formidable = require('formidable');
+var Promise = require('bluebird');
+
+var config = require('../../config/environment');
+var MailAttachment = require('../../models').MailAttachment;
+
+// Get list of mailAttachments
+exports.index = function(req, res, next) {
+  return MailAttachment
+    .findAll()
+    .then(function(mailAttachments) {
+      return res.status(200).send(mailAttachments);
+    })
+    .catch(function(err) {
+      return next(err);
+    });
+};
+
+// Get a single mailAttachment
+exports.show = function(req, res, next) {
+  return MailAttachment
+    .findById(req.params.id)
+    .then(function(mailAttachment) {
+      return res.download(mailAttachment.path, mailAttachment.name);
+    })
+    .catch(function(err) {
+      return next(err);
+    });
+};
+
+// Creates a new mailAttachment in the DB.
+exports.create = function(req, res, next) {
+
+  var form = new formidable.IncomingForm();
+  form.uploadDir = path.join(config.root, 'server', 'files', 'attachments');
+  form.keepExtensions = true;
+  form.multiples = true;
+  form.hash = true;
+
+  form.parse(req, function(err, form, wrap) {
+    if (err) {
+      return res.status(500).send(err);
+    }
+    return res.status(201).send({
+      size: wrap.file.size,
+      path: wrap.file.path,
+      name: wrap.file.name,
+      type: wrap.file.type,
+      basename: path.basename(wrap.file.path)
+    });
+  });
+};
+
+// Updates an existing mailAttachment in the DB.
+exports.update = function(req, res, next) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  MailAttachment
+    .findById(req.params.id)
+    .then(function(mailAttachment) {
+      if (!mailAttachment) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(mailAttachment, req.body);
+      updated.save()
+        .then(function() {
+          return res.status(200).send(mailAttachment);
+        })
+        .catch(function(err) {
+          return next(err);
+        });
+    })
+    .catch(function(err) {
+      return next(err);
+    });
+};
+
+// Deletes a mailAttachment from the DB.
+exports.destroy = function(req, res, next) {
+  var unlink = Promise.promisify(require("fs").unlink);
+  var _path = path.join(config.root, 'server', 'files', 'attachments', req.params.id);
+
+  return unlink(_path)
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index a4f6e63..65c9085 100644 (file)
@@ -1 +1,24 @@
-var _0xbe5f=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x4D\x61\x69\x6C\x41\x74\x74\x61\x63\x68\x6D\x65\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x6D\x61\x69\x6C\x5F\x61\x74\x74\x61\x63\x68\x6D\x65\x6E\x74\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x6D\x61\x69\x6C\x5F\x61\x74\x74\x61\x63\x68\x6D\x65\x6E\x74\x3A\x72\x65\x6D\x6F\x76\x65"];_0xbe5f[0];var mail_attachment=require(_0xbe5f[2])[_0xbe5f[1]];exports[_0xbe5f[3]]=function(_0x9e89x2){mail_attachment[_0xbe5f[4]](function(_0x9e89x3){onSave(_0x9e89x2,_0x9e89x3)});mail_attachment[_0xbe5f[5]](function(_0x9e89x3){onRemove(_0x9e89x2,_0x9e89x3)})};function onSave(_0x9e89x2,_0x9e89x3,_0x9e89x5){_0x9e89x2[_0xbe5f[7]](_0xbe5f[6],_0x9e89x3)}function onRemove(_0x9e89x2,_0x9e89x3,_0x9e89x5){_0x9e89x2[_0xbe5f[7]](_0xbe5f[8],_0x9e89x3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var mail_attachment = require('../../models').MailAttachment;
+
+exports.register = function(socket) {
+  mail_attachment.afterCreate(function (doc) {
+    onSave(socket, doc);
+  });
+  mail_attachment.afterDestroy(function (doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('mail_attachment:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('mail_attachment:remove', doc);
+}
index 89bde1c..58b5988 100644 (file)
@@ -1 +1,19 @@
-var _0xbe9d=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x6D\x61\x69\x6C\x5F\x6D\x65\x73\x73\x61\x67\x65\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x2F\x64\x65\x6C\x65\x74\x65\x2F\x62\x75\x6C\x6B","\x62\x75\x6C\x6B\x44\x65\x6C\x65\x74\x65","\x2F\x64\x65\x6C\x65\x74\x65\x2F\x3A\x69\x64","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0xbe9d[0];var express=require(_0xbe9d[1]);var controller=require(_0xbe9d[2]);var auth=require(_0xbe9d[3]);var router=express.Router();router[_0xbe9d[7]](_0xbe9d[4],auth[_0xbe9d[5]](),controller[_0xbe9d[6]]);router[_0xbe9d[7]](_0xbe9d[8],auth[_0xbe9d[5]](),controller[_0xbe9d[9]]);router[_0xbe9d[11]](_0xbe9d[4],auth[_0xbe9d[5]](),controller[_0xbe9d[10]]);router[_0xbe9d[13]](_0xbe9d[4],auth[_0xbe9d[5]](),controller[_0xbe9d[12]]);router[_0xbe9d[13]](_0xbe9d[14],auth[_0xbe9d[5]](),controller[_0xbe9d[15]]);router[_0xbe9d[13]](_0xbe9d[16],auth[_0xbe9d[5]](),controller[_0xbe9d[12]]);router[_0xbe9d[13]](_0xbe9d[8],auth[_0xbe9d[5]](),controller[_0xbe9d[12]]);router[_0xbe9d[17]](_0xbe9d[8],auth[_0xbe9d[5]](),controller[_0xbe9d[12]]);router[_0xbe9d[19]](_0xbe9d[8],auth[_0xbe9d[5]](),controller[_0xbe9d[18]]);module[_0xbe9d[20]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./mail_message.controller');
+var auth = require('../../auth/auth.service');
+
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), controller.index);
+router.get('/:id', auth.isAuthenticated(), controller.show);
+router.post('/', auth.isAuthenticated(), controller.create);
+router.put('/', auth.isAuthenticated(), controller.update);
+router.put('/delete/bulk', auth.isAuthenticated(), controller.bulkDelete);
+router.put('/delete/:id', auth.isAuthenticated(), controller.update);
+router.put('/:id', auth.isAuthenticated(), controller.update);
+router.patch('/:id', auth.isAuthenticated(), controller.update);
+router.delete('/:id', auth.isAuthenticated(), controller.destroy);
+
+module.exports = router;
index 7f9205d..0105703 100644 (file)
@@ -1 +1,179 @@
-var _0x1287=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x61\x73\x79\x6E\x63","\x68\x74\x6D\x6C\x2D\x74\x6F\x2D\x74\x65\x78\x74","\x66\x6F\x72\x6D\x69\x64\x61\x62\x6C\x65","\x70\x61\x74\x68","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x4D\x61\x69\x6C\x4D\x65\x73\x73\x61\x67\x65","\x4D\x61\x69\x6C\x41\x74\x74\x61\x63\x68\x6D\x65\x6E\x74","\x4D\x61\x69\x6C\x52\x6F\x6F\x6D","\x4D\x61\x69\x6C\x41\x63\x63\x6F\x75\x6E\x74","\x43\x6F\x6E\x74\x61\x63\x74\x45\x6D\x61\x69\x6C","\x43\x6F\x6E\x74\x61\x63\x74","\x55\x73\x65\x72","\x69\x6E\x64\x65\x78","\x63\x72\x65\x61\x74\x65\x64\x41\x74\x20\x44\x45\x53\x43","\x77\x68\x65\x72\x65","\x71\x75\x65\x72\x79","\x61\x64\x6D\x69\x6E","\x61\x67\x65\x6E\x74","\x72\x6F\x6C\x65","\x75\x73\x65\x72","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x6E\x61\x6D\x65","\x66\x75\x6C\x6C\x6E\x61\x6D\x65","\x65\x6D\x61\x69\x6C","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x55\x73\x65\x72\x49\x64","\x62\x6F\x64\x79","\x74\x65\x78\x74","\x68\x74\x6D\x6C","\x66\x72\x6F\x6D\x53\x74\x72\x69\x6E\x67","\x65\x72\x72\x6F\x72","\x72\x6F\x6C\x6C\x62\x61\x63\x6B","\x63\x6F\x6D\x6D\x69\x74","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79","\x62\x75\x6C\x6B\x44\x65\x6C\x65\x74\x65","\x54\x52\x41\x53\x48","\x62\x75\x6C\x6B\x55\x70\x64\x61\x74\x65"];_0x1287[0];var _=require(_0x1287[1]);var async=require(_0x1287[2]);var htmlToText=require(_0x1287[3]);var formidable=require(_0x1287[4]);var path=require(_0x1287[5]);var config=require(_0x1287[6]);var sequelize=require(_0x1287[8])[_0x1287[7]];var MailMessage=require(_0x1287[8])[_0x1287[9]];var MailAttachment=require(_0x1287[8])[_0x1287[10]];var MailRoom=require(_0x1287[8])[_0x1287[11]];var MailAccount=require(_0x1287[8])[_0x1287[12]];var ContactEmail=require(_0x1287[8])[_0x1287[13]];var Contact=require(_0x1287[8])[_0x1287[14]];var User=require(_0x1287[8])[_0x1287[15]];exports[_0x1287[16]]=function(_0xa5f0xf,_0xa5f0x10,_0xa5f0x11){var _0xa5f0x12={order:_0x1287[17],include:[{all:true,include:[{all:true}]}]};switch(_0xa5f0xf[_0x1287[23]][_0x1287[22]]){case _0x1287[20]:_0xa5f0x12[_0x1287[18]]=_0xa5f0xf[_0x1287[19]];break;case _0x1287[21]:break;default:};return MailMessage[_0x1287[28]](_0xa5f0x12)[_0x1287[27]](function(_0xa5f0x14){return _0xa5f0x10[_0x1287[26]](200)[_0x1287[25]](_0xa5f0x14)})[_0x1287[24]](function(_0xa5f0x13){return handleError(_0xa5f0x10,_0xa5f0x13,_0xa5f0x11)})};exports[_0x1287[29]]=function(_0xa5f0xf,_0xa5f0x10,_0xa5f0x11){return MailMessage[_0x1287[36]](_0xa5f0xf[_0x1287[32]][_0x1287[31]],{include:[{model:MailAttachment},{model:User,attributes:[_0x1287[31],_0x1287[33],_0x1287[34],_0x1287[35]]}]})[_0x1287[27]](function(_0xa5f0x15){if(!_0xa5f0x15){return _0xa5f0x10[_0x1287[30]](404)};return _0xa5f0x10[_0x1287[25]](_0xa5f0x15)})[_0x1287[24]](function(_0xa5f0x13){return handleError(_0xa5f0x10,_0xa5f0x13,_0xa5f0x11)})};exports[_0x1287[37]]=function(_0xa5f0xf,_0xa5f0x10,_0xa5f0x11){_0xa5f0xf[_0x1287[39]][_0x1287[38]]=_0xa5f0xf[_0x1287[23]][_0x1287[31]];_0xa5f0xf[_0x1287[39]][_0x1287[40]]=_0xa5f0xf[_0x1287[39]][_0x1287[40]]||htmlToText[_0x1287[42]](_0xa5f0xf[_0x1287[39]][_0x1287[41]],{wordwrap:false});return sequelize[_0x1287[46]]()[_0x1287[27]](function(_0xa5f0x16){return MailMessage[_0x1287[37]](_0xa5f0xf[_0x1287[39]],{include:[{model:MailAttachment}],transaction:_0xa5f0x16})[_0x1287[27]](function(_0xa5f0x15){_0xa5f0x16[_0x1287[45]]();return _0xa5f0x10[_0x1287[26]](201)[_0x1287[25]](_0xa5f0x15)})[_0x1287[24]](function(_0xa5f0x13){console[_0x1287[43]](_0xa5f0x13);_0xa5f0x16[_0x1287[44]]();return handleError(_0xa5f0x10,_0xa5f0x13)})})};exports[_0x1287[47]]=function(_0xa5f0xf,_0xa5f0x10,_0xa5f0x11){MailMessage[_0x1287[36]](_0xa5f0xf[_0x1287[32]][_0x1287[31]],{include:[{all:true}]})[_0x1287[27]](function(_0xa5f0x15){if(!_0xa5f0x15){return _0xa5f0x10[_0x1287[30]](404)};var _0xa5f0x17=_[_0x1287[48]](_0xa5f0x15,_0xa5f0xf[_0x1287[39]]);_0xa5f0x17[_0x1287[49]]()[_0x1287[27]](function(){return _0xa5f0x10[_0x1287[26]](200)[_0x1287[25]](_0xa5f0x17)})[_0x1287[24]](function(_0xa5f0x13){return handleError(_0xa5f0x10,_0xa5f0x13,_0xa5f0x11)})})[_0x1287[24]](function(_0xa5f0x13){return handleError(_0xa5f0x10,_0xa5f0x13,_0xa5f0x11)})};exports[_0x1287[50]]=function(_0xa5f0xf,_0xa5f0x10,_0xa5f0x11){MailMessage[_0x1287[36]](_0xa5f0xf[_0x1287[32]][_0x1287[31]])[_0x1287[27]](function(_0xa5f0x15){if(!_0xa5f0x15){return _0xa5f0x10[_0x1287[30]](404)};_0xa5f0x15[_0x1287[50]]()[_0x1287[27]](function(){return _0xa5f0x10[_0x1287[30]](204)})[_0x1287[24]](function(_0xa5f0x13){return handleError(_0xa5f0x10,_0xa5f0x13,_0xa5f0x11)})})[_0x1287[24]](function(_0xa5f0x13){return handleError(_0xa5f0x10,_0xa5f0x13,_0xa5f0x11)})};exports[_0x1287[51]]=function(_0xa5f0xf,_0xa5f0x10,_0xa5f0x11){MailMessage[_0x1287[53]]({where:{id:{$in:_0xa5f0xf[_0x1287[39]][_0x1287[31]]}},attributes:{directory:_0x1287[52]}})[_0x1287[27]](function(_0xa5f0x15){if(!_0xa5f0x15){return _0xa5f0x10[_0x1287[30]](404)};_0xa5f0x15[_0x1287[50]]()[_0x1287[27]](function(){return _0xa5f0x10[_0x1287[30]](204)})[_0x1287[24]](function(_0xa5f0x13){return handleError(_0xa5f0x10,_0xa5f0x13,_0xa5f0x11)})})[_0x1287[24]](function(_0xa5f0x13){return handleError(_0xa5f0x10,_0xa5f0x13,_0xa5f0x11)})};function handleError(_0xa5f0x10,_0xa5f0x13,_0xa5f0x11){return _0xa5f0x10[_0x1287[26]](500)[_0x1287[25]](_0xa5f0x13)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var async = require('async');
+
+var htmlToText = require('html-to-text');
+var formidable = require('formidable');
+var path = require('path');
+
+var config = require('../../config/environment');
+var sequelize = require('../../models').sequelize;
+var MailMessage = require('../../models').MailMessage;
+var MailAttachment = require('../../models').MailAttachment;
+var MailRoom = require('../../models').MailRoom;
+var MailAccount = require('../../models').MailAccount;
+var ContactEmail = require('../../models').ContactEmail;
+var Contact = require('../../models').Contact;
+var User = require('../../models').User;
+
+// Get list of mail_messages
+exports.index = function(req, res, next) {
+  var params = {
+    order: 'createdAt DESC',
+    include: [{
+      all: true,
+      include: [{
+        all: true
+      }]
+    }]
+  };
+
+  switch (req.user.role) {
+    case 'admin':
+      params.where = req.query;
+      break;
+    case 'agent':
+      break;
+    default:
+  }
+
+  return MailMessage
+    .findAll(params)
+    .then(function(mail_messages) {
+      return res.status(200).send(mail_messages);
+    })
+    .catch(function(err) {
+      return handleError(res, err, next);
+    });
+};
+
+// Get a single mailMessage
+exports.show = function(req, res, next) {
+  return MailMessage
+    .findById(req.params.id, {
+      include: [{
+        model: MailAttachment
+      }, {
+        model: User,
+        attributes: ['id', 'name', 'fullname', 'email']
+      }]
+    })
+    .then(function(mailMessage) {
+      if (!mailMessage) {
+        return res.sendStatus(404);
+      }
+      return res.send(mailMessage);
+    })
+    .catch(function(err) {
+      return handleError(res, err, next);
+    });
+};
+
+// Creates a new mailMessage in the DB.
+exports.create = function(req, res, next) {
+  req.body.UserId = req.user.id;
+  req.body.text = req.body.text || htmlToText.fromString(req.body.html, {
+    wordwrap: false
+  });
+
+  return sequelize.transaction().then(function(t) {
+    return MailMessage
+      .create(req.body, {
+        include: [{
+          model: MailAttachment
+        }],
+        transaction: t,
+        // user: req.user
+      }).then(function(mailMessage) {
+        t.commit();
+        return res.status(201).send(mailMessage);
+      }).catch(function(err) {
+        console.error(err);
+        t.rollback();
+        return handleError(res, err);
+      });
+  });
+};
+
+// Updates an existing mailMessage in the DB.
+exports.update = function(req, res, next) {
+
+  MailMessage
+    .findById(req.params.id, {
+      include: [{
+        all: true
+      }]
+    })
+    .then(function(mailMessage) {
+      if (!mailMessage) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(mailMessage, req.body);
+      updated.save()
+        .then(function() {
+          return res.status(200).send(updated);
+        })
+        .catch(function(err) {
+          return handleError(res, err, next);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err, next);
+    });
+};
+
+// Deletes a mailMessage from the DB.
+exports.destroy = function(req, res, next) {
+  MailMessage
+    .findById(req.params.id)
+    .then(function(mailMessage) {
+      if (!mailMessage) {
+        return res.sendStatus(404);
+      }
+      mailMessage.destroy()
+        .then(function() {
+          return res.sendStatus(204);
+        })
+        .catch(function(err) {
+          return handleError(res, err, next);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err, next);
+    });
+};
+
+// Deletes a mailMessage from the DB.
+exports.bulkDelete = function(req, res, next) {
+  MailMessage
+    .bulkUpdate({
+      where: {
+        id: {
+          $in: req.body.id
+        }
+      },
+      attributes: {
+        directory: 'TRASH'
+      }
+    })
+    .then(function(mailMessage) {
+      if (!mailMessage) {
+        return res.sendStatus(404);
+      }
+      mailMessage.destroy()
+        .then(function() {
+          return res.sendStatus(204);
+        })
+        .catch(function(err) {
+          return handleError(res, err, next);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err, next);
+    });
+};
+
+function handleError(res, err, next) {
+  return res.status(500).send(err);
+}
index b068d73..64a5b96 100644 (file)
@@ -1 +1,31 @@
-var _0x6ace=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x4D\x61\x69\x6C\x4D\x65\x73\x73\x61\x67\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x75\x73\x65\x72\x49\x64","\x55\x73\x65\x72\x49\x64","\x72\x6F\x6C\x65","\x61\x64\x6D\x69\x6E","\x6D\x61\x69\x6C\x5F\x6D\x65\x73\x73\x61\x67\x65\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x6D\x61\x69\x6C\x5F\x6D\x65\x73\x73\x61\x67\x65\x3A\x72\x65\x6D\x6F\x76\x65"];_0x6ace[0];var MailMessage=require(_0x6ace[2])[_0x6ace[1]];exports[_0x6ace[3]]=function(_0x1c8cx2){MailMessage[_0x6ace[4]](function(_0x1c8cx3){onSave(_0x1c8cx2,_0x1c8cx3)});MailMessage[_0x6ace[5]](function(_0x1c8cx3){onSave(_0x1c8cx2,_0x1c8cx3)});MailMessage[_0x6ace[6]](function(_0x1c8cx3){onRemove(_0x1c8cx2,_0x1c8cx3)})};function onSave(_0x1c8cx2,_0x1c8cx3,_0x1c8cx5){if(_0x1c8cx2[_0x6ace[7]]===_0x1c8cx3[_0x6ace[8]]||_0x1c8cx2[_0x6ace[9]]===_0x6ace[10]){_0x1c8cx2[_0x6ace[12]](_0x6ace[11],_0x1c8cx3)}}function onRemove(_0x1c8cx2,_0x1c8cx3,_0x1c8cx5){_0x1c8cx2[_0x6ace[12]](_0x6ace[13],_0x1c8cx3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var MailMessage = require('../../models').MailMessage;
+
+exports.register = function(socket) {
+  MailMessage.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+
+  MailMessage.afterUpdate(function(doc) {
+    onSave(socket, doc);
+  });
+
+  MailMessage.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  if (socket.userId === doc.UserId || socket.role === 'admin') {
+    socket.emit('mail_message:save', doc);
+  }
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('mail_message:remove', doc);
+}
index 1cebf5a..1252097 100644 (file)
@@ -1 +1,20 @@
-var _0xadeb=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x6D\x61\x69\x6C\x5F\x71\x75\x65\x75\x65\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x2F\x3A\x69\x64\x2F\x61\x67\x65\x6E\x74\x73","\x73\x68\x6F\x77\x41\x67\x65\x6E\x74\x73","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x61\x64\x64\x41\x67\x65\x6E\x74\x73","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x72\x65\x6D\x6F\x76\x65\x41\x67\x65\x6E\x74\x73","\x65\x78\x70\x6F\x72\x74\x73"];_0xadeb[0];var express=require(_0xadeb[1]);var controller=require(_0xadeb[2]);var auth=require(_0xadeb[3]);var router=express.Router();router[_0xadeb[7]](_0xadeb[4],auth[_0xadeb[5]](),controller[_0xadeb[6]]);router[_0xadeb[7]](_0xadeb[8],auth[_0xadeb[5]](),controller[_0xadeb[9]]);router[_0xadeb[7]](_0xadeb[10],auth[_0xadeb[5]](),controller[_0xadeb[11]]);router[_0xadeb[13]](_0xadeb[4],auth[_0xadeb[5]](),controller[_0xadeb[12]]);router[_0xadeb[13]](_0xadeb[10],auth[_0xadeb[5]](),controller[_0xadeb[14]]);router[_0xadeb[16]](_0xadeb[8],auth[_0xadeb[5]](),controller[_0xadeb[15]]);router[_0xadeb[17]](_0xadeb[8],auth[_0xadeb[5]](),controller[_0xadeb[15]]);router[_0xadeb[19]](_0xadeb[4],auth[_0xadeb[5]](),controller[_0xadeb[18]]);router[_0xadeb[19]](_0xadeb[8],auth[_0xadeb[5]](),controller[_0xadeb[20]]);router[_0xadeb[19]](_0xadeb[10],auth[_0xadeb[5]](),controller[_0xadeb[21]]);module[_0xadeb[22]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./mail_queue.controller');
+var auth = require('../../auth/auth.service');
+
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), controller.index);
+router.get('/:id', auth.isAuthenticated(), controller.show);
+router.get('/:id/agents', auth.isAuthenticated(), controller.showAgents);
+router.post('/', auth.isAuthenticated(), controller.create);
+router.post('/:id/agents', auth.isAuthenticated(), controller.addAgents);
+router.put('/:id', auth.isAuthenticated(), controller.update);
+router.patch('/:id', auth.isAuthenticated(), controller.update);
+router.delete('/', auth.isAuthenticated(), controller.bulkDestroy);
+router.delete('/:id', auth.isAuthenticated(), controller.destroy);
+router.delete('/:id/agents', auth.isAuthenticated(), controller.removeAgents);
+
+module.exports = router;
index caf0185..70cd358 100644 (file)
@@ -1 +1,212 @@
-var _0x1846=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x4D\x61\x69\x6C\x51\x75\x65\x75\x65","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x64\x65\x66\x61\x75\x6C\x74","\x73\x63\x6F\x70\x65","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x68\x61\x6E\x64\x6C\x65\x55\x6E\x69\x71\x75\x65\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74\x45\x72\x72\x6F\x72","\x65\x72\x72\x6F\x72\x4D\x61\x6E\x61\x67\x65\x72","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x61\x64\x64\x41\x67\x65\x6E\x74\x73","\x61\x67\x65\x6E\x74\x73","\x70\x65\x6E\x61\x6C\x74\x79","\x6E\x61\x6D\x65","\x61\x64\x64\x55\x73\x65\x72\x73","\x4D\x61\x69\x6C\x51\x75\x65\x75\x65\x20\x6E\x6F\x74\x20\x66\x6F\x75\x6E\x64","\x72\x65\x6D\x6F\x76\x65\x41\x67\x65\x6E\x74\x73","\x72\x65\x6D\x6F\x76\x65\x55\x73\x65\x72\x73","\x64\x65\x73\x74\x72\x6F\x79","\x65\x72\x72","\x65\x72\x72\x6F\x72","\x71\x75\x65\x75\x65","\x68\x61\x6E\x64\x6C\x65\x46\x6F\x72\x65\x69\x67\x6E\x4B\x65\x79\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74\x45\x72\x72\x6F\x72","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73","\x73\x68\x6F\x77\x41\x67\x65\x6E\x74\x73","\x61\x67\x65\x6E\x74","\x66\x75\x6C\x6C\x6E\x61\x6D\x65","\x65\x6D\x61\x69\x6C","\x67\x65\x74\x55\x73\x65\x72\x73","\x72\x65\x6D\x6F\x76\x65\x55\x73\x65\x72"];_0x1846[0];var _=require(_0x1846[1]);var util=require(_0x1846[2]);var Util=require(_0x1846[3]);var sequelize=require(_0x1846[5])[_0x1846[4]];var MailQueue=require(_0x1846[5])[_0x1846[6]];exports[_0x1846[7]]=function(_0xb9f2x6,_0xb9f2x7){return MailQueue[_0x1846[16]](_0x1846[15])[_0x1846[14]](Util[_0x1846[13]](_0xb9f2x6[_0x1846[12]]))[_0x1846[11]](function(_0xb9f2x9){_0xb9f2x7[_0x1846[10]](200)[_0x1846[9]](_0xb9f2x9)})[_0x1846[8]](function(_0xb9f2x8){return handleError(_0xb9f2x7,_0xb9f2x8)})};exports[_0x1846[17]]=function(_0xb9f2x6,_0xb9f2x7){return MailQueue[_0x1846[16]](_0x1846[15])[_0x1846[21]](_0xb9f2x6[_0x1846[20]][_0x1846[19]])[_0x1846[11]](function(_0xb9f2xa){if(!_0xb9f2xa){return _0xb9f2x7[_0x1846[18]](404)};return _0xb9f2x7[_0x1846[9]](_0xb9f2xa)})[_0x1846[8]](function(_0xb9f2x8){return handleError(_0xb9f2x7,_0xb9f2x8)})};exports[_0x1846[22]]=function(_0xb9f2x6,_0xb9f2x7){return MailQueue[_0x1846[22]](_0xb9f2x6[_0x1846[25]])[_0x1846[11]](function(_0xb9f2xa){return _0xb9f2x7[_0x1846[10]](201)[_0x1846[9]](_0xb9f2xa)})[_0x1846[8]](sequelize.UniqueConstraintError,function(_0xb9f2x8){return Util[_0x1846[24]][_0x1846[23]](_0xb9f2x7,_0xb9f2x8)})[_0x1846[8]](function(_0xb9f2x8){return handleError(_0xb9f2x7,_0xb9f2x8)})};exports[_0x1846[26]]=function(_0xb9f2x6,_0xb9f2x7){if(_0xb9f2x6[_0x1846[25]][_0x1846[19]]){delete _0xb9f2x6[_0x1846[25]][_0x1846[19]]};return MailQueue[_0x1846[21]](_0xb9f2x6[_0x1846[20]][_0x1846[19]])[_0x1846[11]](function(_0xb9f2xa){if(!_0xb9f2xa){return _0xb9f2x7[_0x1846[18]](404)};var _0xb9f2xb=_[_0x1846[27]](_0xb9f2xa,_0xb9f2x6[_0x1846[25]]);return _0xb9f2xb[_0x1846[28]]()})[_0x1846[11]](function(_0xb9f2xa){return _0xb9f2x7[_0x1846[10]](200)[_0x1846[9]](_0xb9f2xa)})[_0x1846[8]](sequelize.UniqueConstraintError,function(_0xb9f2x8){return Util[_0x1846[24]][_0x1846[23]](_0xb9f2x7,_0xb9f2x8)})[_0x1846[8]](function(_0xb9f2x8){return handleError(_0xb9f2x7,_0xb9f2x8)})};exports[_0x1846[29]]=function(_0xb9f2x6,_0xb9f2x7,_0xb9f2xc){return MailQueue[_0x1846[21]](_0xb9f2x6[_0x1846[20]][_0x1846[19]])[_0x1846[11]](function(_0xb9f2xa){if(_0xb9f2xa){return _0xb9f2xa[_0x1846[33]](_0xb9f2x6[_0x1846[25]][_0x1846[30]],{penalty:_0xb9f2x6[_0x1846[25]][_0x1846[31]],queue:_0xb9f2xa[_0x1846[32]]},{individualHooks:true})}else {throw  new Error(_0x1846[34])}})[_0x1846[11]](function(){return _0xb9f2x7[_0x1846[18]](200)})[_0x1846[8]](function(_0xb9f2x8){return handleError(_0xb9f2x7,_0xb9f2x8)})};exports[_0x1846[35]]=function(_0xb9f2x6,_0xb9f2x7){return MailQueue[_0x1846[21]](_0xb9f2x6[_0x1846[20]][_0x1846[19]])[_0x1846[11]](function(_0xb9f2xa){if(_0xb9f2xa){return _0xb9f2xa[_0x1846[36]](_0xb9f2x6[_0x1846[25]][_0x1846[30]],{individualHooks:true})}else {throw  new Error(_0x1846[34])}})[_0x1846[11]](function(){return _0xb9f2x7[_0x1846[18]](200)})[_0x1846[8]](function(_0xb9f2x8){return handleError(_0xb9f2x7,_0xb9f2x8)})};exports[_0x1846[37]]=function(_0xb9f2x6,_0xb9f2x7){var _0xb9f2xd;return MailQueue[_0x1846[21]](_0xb9f2x6[_0x1846[20]][_0x1846[19]])[_0x1846[11]](function(_0xb9f2xa){_0xb9f2xd=_0xb9f2xa;if(!_0xb9f2xa){return _0xb9f2x7[_0x1846[18]](404)};return _0xb9f2xa[_0x1846[37]]()})[_0x1846[11]](function(){return _0xb9f2x7[_0x1846[18]](204)})[_0x1846[8]](sequelize.ForeignKeyConstraintError,function(_0xb9f2x8){return Util[_0x1846[24]][_0x1846[41]](_0xb9f2x7,_0x1846[40],_0xb9f2xd[_0x1846[32]],_0xb9f2x8)})[_0x1846[8]](function(_0xb9f2x8){console[_0x1846[39]](_0x1846[38],_0xb9f2x8);return handleError(_0xb9f2x7,_0xb9f2x8)})};exports[_0x1846[42]]=function(_0xb9f2x6,_0xb9f2x7){return MailQueue[_0x1846[37]]({where:{id:_0xb9f2x6[_0x1846[12]][_0x1846[43]]},individualHooks:true})[_0x1846[11]](function(){return _0xb9f2x7[_0x1846[18]](204)})[_0x1846[8]](function(_0xb9f2x8){return handleError(_0xb9f2x7,_0xb9f2x8)})};exports[_0x1846[44]]=function(_0xb9f2x6,_0xb9f2x7){return MailQueue[_0x1846[21]](_0xb9f2x6[_0x1846[20]][_0x1846[19]])[_0x1846[11]](function(_0xb9f2xf){if(!_0xb9f2xf){return _0xb9f2x7[_0x1846[18]](404)};return _0xb9f2xf[_0x1846[48]]({where:{role:_0x1846[45]},attributes:[_0x1846[19],_0x1846[32],_0x1846[46],_0x1846[47]]})})[_0x1846[11]](function(_0xb9f2xe){return _0xb9f2x7[_0x1846[10]](200)[_0x1846[9]](_0xb9f2xe)})[_0x1846[8]](function(_0xb9f2x8){return handleError(_0xb9f2x7,_0xb9f2x8)})};exports[_0x1846[35]]=function(_0xb9f2x6,_0xb9f2x7,_0xb9f2xc){return MailQueue[_0x1846[21]](_0xb9f2x6[_0x1846[20]][_0x1846[19]])[_0x1846[11]](function(_0xb9f2xf){if(!_0xb9f2xf){return _0xb9f2x7[_0x1846[18]](404)};return _0xb9f2xf[_0x1846[49]](_0xb9f2x6[_0x1846[12]][_0x1846[30]])})[_0x1846[11]](function(){return _0xb9f2x7[_0x1846[18]](202)})[_0x1846[8]](function(_0xb9f2x8){return _0xb9f2xc(_0xb9f2x8)})};function handleError(_0xb9f2x7,_0xb9f2x8){return _0xb9f2x7[_0x1846[10]](500)[_0x1846[9]](_0xb9f2x8)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var util = require('util');
+var Util = require('../../config/util');
+
+var sequelize = require('../../models').sequelize;
+var MailQueue = require('../../models').MailQueue;
+
+// Get list of mailQueues
+exports.index = function(req, res) {
+  return MailQueue
+    .scope('default')
+    .findAndCountAll(Util.getQuery(req.query))
+    .then(function(result) {
+      res.status(200).send(result);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single mailQueue
+exports.show = function(req, res) {
+  return MailQueue
+    .scope('default')
+    .findById(req.params.id)
+    .then(function(mailQueue) {
+      if (!mailQueue) {
+        return res.sendStatus(404);
+      }
+      return res.send(mailQueue);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new mailQueue in the DB.
+exports.create = function(req, res) {
+  return MailQueue
+    .create(req.body)
+    .then(function(mailQueue) {
+      return res.status(201).send(mailQueue);
+    })
+    .catch(sequelize.UniqueConstraintError, function(err) {
+      return Util.errorManager.handleUniqueConstraintError(res, err);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Updates an existing mailQueue in the DB.
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  return MailQueue
+    .findById(req.params.id)
+    .then(function(mailQueue) {
+      if (!mailQueue) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(mailQueue, req.body);
+      return updated
+        .save();
+    })
+    .then(function(mailQueue) {
+      return res.status(200).send(mailQueue);
+    })
+    .catch(sequelize.UniqueConstraintError, function(err) {
+      return Util.errorManager.handleUniqueConstraintError(res, err);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Updates an existing user_has_mailQueue in the DB.
+exports.addAgents = function(req, res, next) {
+  return MailQueue
+    .findById(req.params.id)
+    .then(function(mailQueue) {
+      if (mailQueue) {
+        return mailQueue
+          .addUsers(req.body.agents, {
+            penalty: req.body.penalty,
+            queue: mailQueue.name
+          }, {
+            individualHooks: true
+          });
+      } else {
+        throw new Error('MailQueue not found');
+      }
+    })
+    .then(function() {
+      return res.sendStatus(200);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+exports.removeAgents = function(req, res) {
+  return MailQueue
+    .findById(req.params.id)
+    .then(function(mailQueue) {
+      if (mailQueue) {
+        return mailQueue
+          .removeUsers(req.body.agents, {
+            individualHooks: true
+          });
+      } else {
+        throw new Error('MailQueue not found');
+      }
+    })
+    .then(function() {
+      return res.sendStatus(200);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a mailQueue from the DB.
+exports.destroy = function(req, res) {
+  var _mailQueue;
+
+  return MailQueue
+    .findById(req.params.id)
+    .then(function(mailQueue) {
+      _mailQueue = mailQueue;
+      if (!mailQueue) {
+        return res.sendStatus(404);
+      }
+      return mailQueue
+        .destroy();
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(sequelize.ForeignKeyConstraintError, function(err) {
+      return Util.errorManager.handleForeignKeyConstraintError(res, 'queue', _mailQueue.name, err);
+    })
+    .catch(function(err) {
+      console.error('err', err);
+      return handleError(res, err);
+    });
+};
+
+// Deletes a agent from the DB.
+exports.bulkDestroy = function(req, res) {
+  return MailQueue
+    .destroy({
+      where: {
+        id: req.query.ids
+      },
+      individualHooks: true
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+exports.showAgents = function(req, res) {
+  return MailQueue
+    .findById(req.params.id)
+    .then(function(queue) {
+      if (!queue) {
+        return res.sendStatus(404);
+      }
+      return queue
+        .getUsers({
+          where: {
+            role: 'agent'
+          },
+          attributes: ['id', 'name', 'fullname', 'email']
+        });
+    })
+    .then(function(agents) {
+      return res.status(200).send(agents);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+exports.removeAgents = function(req, res, next) {
+  return MailQueue
+    .findById(req.params.id)
+    .then(function(queue) {
+      if (!queue) {
+        return res.sendStatus(404);
+      }
+      return queue
+        .removeUser(req.query.agents);
+    })
+    .then(function() {
+      return res.sendStatus(202);
+    })
+    .catch(function(err) {
+      return next(err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index 1ea58ce..3518b62 100644 (file)
@@ -1 +1,24 @@
-var _0x5c52=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x4D\x61\x69\x6C\x51\x75\x65\x75\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x6D\x61\x69\x6C\x5F\x71\x75\x65\x75\x65\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x6D\x61\x69\x6C\x5F\x71\x75\x65\x75\x65\x3A\x72\x65\x6D\x6F\x76\x65"];_0x5c52[0];var MailQueue=require(_0x5c52[2])[_0x5c52[1]];exports[_0x5c52[3]]=function(_0x139cx2){MailQueue[_0x5c52[4]](function(_0x139cx3){onSave(_0x139cx2,_0x139cx3)});MailQueue[_0x5c52[5]](function(_0x139cx3){onRemove(_0x139cx2,_0x139cx3)})};function onSave(_0x139cx2,_0x139cx3,_0x139cx5){_0x139cx2[_0x5c52[7]](_0x5c52[6],_0x139cx3)}function onRemove(_0x139cx2,_0x139cx3,_0x139cx5){_0x139cx2[_0x5c52[7]](_0x5c52[8],_0x139cx3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var MailQueue = require('../../models').MailQueue;
+
+exports.register = function(socket) {
+  MailQueue.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  MailQueue.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('mail_queue:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('mail_queue:remove', doc);
+}
index f458043..91ef299 100644 (file)
@@ -1 +1,22 @@
-var _0xca05=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x6D\x61\x69\x6C\x5F\x72\x6F\x6F\x6D\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x61\x67\x65\x6E\x74\x2F\x3A\x69\x64","\x61\x67\x65\x6E\x74\x49\x6E\x64\x65\x78","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x2F\x3A\x69\x64\x2F\x61\x67\x65\x6E\x74\x73","\x73\x68\x6F\x77\x41\x67\x65\x6E\x74\x73","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x2F\x3A\x69\x64\x2F\x6D\x65\x73\x73\x61\x67\x65\x73","\x63\x72\x65\x61\x74\x65\x4D\x65\x73\x73\x61\x67\x65","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x75\x70\x64\x61\x74\x65\x41\x67\x65\x6E\x74\x73","\x70\x61\x74\x63\x68","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0xca05[0];var express=require(_0xca05[1]);var controller=require(_0xca05[2]);var auth=require(_0xca05[3]);var router=express.Router();router[_0xca05[7]](_0xca05[4],auth[_0xca05[5]](),controller[_0xca05[6]]);router[_0xca05[7]](_0xca05[8],auth[_0xca05[5]](),controller[_0xca05[9]]);router[_0xca05[7]](_0xca05[10],auth[_0xca05[5]](),controller[_0xca05[11]]);router[_0xca05[7]](_0xca05[12],controller[_0xca05[13]]);router[_0xca05[15]](_0xca05[4],auth[_0xca05[5]](),controller[_0xca05[14]]);router[_0xca05[15]](_0xca05[16],auth[_0xca05[5]](),controller[_0xca05[17]]);router[_0xca05[19]](_0xca05[10],auth[_0xca05[5]](),controller[_0xca05[18]]);router[_0xca05[19]](_0xca05[12],auth[_0xca05[5]](),controller[_0xca05[20]]);router[_0xca05[21]](_0xca05[10],auth[_0xca05[5]](),controller[_0xca05[18]]);router[_0xca05[23]](_0xca05[4],auth[_0xca05[5]](),controller[_0xca05[22]]);router[_0xca05[23]](_0xca05[10],auth[_0xca05[5]](),controller[_0xca05[24]]);module[_0xca05[25]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./mail_room.controller');
+var auth = require('../../auth/auth.service');
+
+var router = express.Router();
+
+// TODO endpoint to filter just NEW/OPEN
+router.get('/', auth.isAuthenticated(), controller.index);
+router.get('/agent/:id', auth.isAuthenticated(), controller.agentIndex);
+router.get('/:id', auth.isAuthenticated(), controller.show);
+router.get('/:id/agents', controller.showAgents);
+router.post('/', auth.isAuthenticated(), controller.create);
+router.post('/:id/messages', auth.isAuthenticated(), controller.createMessage);
+router.put('/:id', auth.isAuthenticated(), controller.update);
+router.put('/:id/agents', auth.isAuthenticated(), controller.updateAgents);
+router.patch('/:id', auth.isAuthenticated(), controller.update);
+router.delete('/', auth.isAuthenticated(), controller.bulkDestroy);
+router.delete('/:id', auth.isAuthenticated(), controller.destroy);
+
+module.exports = router;
index f89d3b5..0d5f5bb 100644 (file)
@@ -1 +1,231 @@
-var _0xe8e3=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x68\x74\x6D\x6C\x2D\x74\x6F\x2D\x74\x65\x78\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x55\x73\x65\x72","\x43\x6F\x6E\x74\x61\x63\x74","\x4D\x61\x69\x6C\x52\x6F\x6F\x6D","\x4D\x61\x69\x6C\x4D\x65\x73\x73\x61\x67\x65","\x4D\x61\x69\x6C\x41\x63\x63\x6F\x75\x6E\x74","\x4D\x61\x69\x6C\x41\x74\x74\x61\x63\x68\x6D\x65\x6E\x74","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x64\x65\x66\x61\x75\x6C\x74","\x61\x67\x65\x6E\x74","\x69\x64","\x75\x73\x65\x72","\x73\x63\x6F\x70\x65","\x72\x6F\x6C\x65","\x61\x67\x65\x6E\x74\x49\x6E\x64\x65\x78","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x65\x72\x72\x6F\x72","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x73\x68\x6F\x77\x41\x67\x65\x6E\x74\x73","\x6E\x61\x6D\x65","\x66\x75\x6C\x6C\x6E\x61\x6D\x65","\x65\x6D\x61\x69\x6C","\x69\x6E\x74\x65\x72\x6E\x61\x6C","\x67\x65\x74\x55\x73\x65\x72\x73","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x63\x72\x65\x61\x74\x65\x4D\x65\x73\x73\x61\x67\x65","\x55\x73\x65\x72\x49\x64","\x4D\x61\x69\x6C\x52\x6F\x6F\x6D\x49\x64","\x61\x74\x74\x61\x63\x68\x6D\x65\x6E\x74","\x4D\x61\x69\x6C\x41\x74\x74\x61\x63\x68\x6D\x65\x6E\x74\x73","\x6C\x65\x6E\x67\x74\x68","\x74\x65\x78\x74","\x68\x74\x6D\x6C","\x66\x72\x6F\x6D\x53\x74\x72\x69\x6E\x67","\x72\x6F\x6C\x6C\x62\x61\x63\x6B","\x63\x6F\x6D\x6D\x69\x74","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E","\x75\x70\x64\x61\x74\x65","\x6A\x6F\x62\x49\x64","\x4D\x61\x69\x6C\x20\x61\x6C\x72\x65\x61\x64\x79\x20\x61\x73\x73\x69\x67\x6E\x65\x64","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x75\x70\x64\x61\x74\x65\x41\x67\x65\x6E\x74\x73","\x61\x67\x65\x6E\x74\x73","\x73\x65\x74\x55\x73\x65\x72\x73","\x64\x65\x73\x74\x72\x6F\x79","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73"];_0xe8e3[0];var _=require(_0xe8e3[1]);var util=require(_0xe8e3[2]);var htmlToText=require(_0xe8e3[3]);var Util=require(_0xe8e3[4]);var sequelize=require(_0xe8e3[6])[_0xe8e3[5]];var User=require(_0xe8e3[6])[_0xe8e3[7]];var Agent=require(_0xe8e3[6])[_0xe8e3[7]];var Contact=require(_0xe8e3[6])[_0xe8e3[8]];var MailRoom=require(_0xe8e3[6])[_0xe8e3[9]];var MailMessage=require(_0xe8e3[6])[_0xe8e3[10]];var MailAccount=require(_0xe8e3[6])[_0xe8e3[11]];var MailAttachment=require(_0xe8e3[6])[_0xe8e3[12]];exports[_0xe8e3[13]]=function(_0xe767xd,_0xe767xe,_0xe767xf){switch(_0xe767xd[_0xe8e3[24]][_0xe8e3[26]]){case _0xe8e3[22]:return MailRoom[_0xe8e3[25]](_0xe8e3[21],{method:[_0xe8e3[22],_0xe767xd[_0xe8e3[24]][_0xe8e3[23]]]})[_0xe8e3[20]](Util[_0xe8e3[19]](_0xe767xd[_0xe8e3[18]]))[_0xe8e3[17]](function(_0xe767x11){return _0xe767xe[_0xe8e3[16]](200)[_0xe8e3[15]](_0xe767x11)})[_0xe8e3[14]](function(_0xe767x10){return handleError(_0xe767xe,_0xe767x10)});default:return MailRoom[_0xe8e3[25]](_0xe8e3[21])[_0xe8e3[20]](Util[_0xe8e3[19]](_0xe767xd[_0xe8e3[18]]))[_0xe8e3[17]](function(_0xe767x11){return _0xe767xe[_0xe8e3[16]](200)[_0xe8e3[15]](_0xe767x11)})[_0xe8e3[14]](function(_0xe767x10){return handleError(_0xe767xe,_0xe767x10)})}};exports[_0xe8e3[27]]=function(_0xe767xd,_0xe767xe,_0xe767xf){return MailRoom[_0xe8e3[29]]({where:{UserId:_0xe767xd[_0xe8e3[28]][_0xe8e3[23]]},include:[{all:true}]})[_0xe8e3[17]](function(_0xe767x12){return _0xe767xe[_0xe8e3[16]](200)[_0xe8e3[15]](_0xe767x12)})[_0xe8e3[14]](function(_0xe767x10){return handleError(_0xe767xe,_0xe767x10)})};exports[_0xe8e3[30]]=function(_0xe767xd,_0xe767xe,_0xe767xf){return MailRoom[_0xe8e3[25]](_0xe8e3[21])[_0xe8e3[33]](_0xe767xd[_0xe8e3[28]][_0xe8e3[23]])[_0xe8e3[17]](function(_0xe767x13){if(!_0xe767x13){return _0xe767xe[_0xe8e3[32]](404)};return _0xe767xe[_0xe8e3[15]](_0xe767x13)})[_0xe8e3[14]](function(_0xe767x10){console[_0xe8e3[31]](_0xe767x10);return handleError(_0xe767xe,_0xe767x10)})};exports[_0xe8e3[34]]=function(_0xe767xd,_0xe767xe,_0xe767xf){return MailRoom[_0xe8e3[33]](_0xe767xd[_0xe8e3[28]][_0xe8e3[23]])[_0xe8e3[17]](function(_0xe767x13){if(!_0xe767x13){return _0xe767xe[_0xe8e3[32]](404)};return _0xe767x13[_0xe8e3[39]]({attributes:[_0xe8e3[23],_0xe8e3[35],_0xe8e3[36],_0xe8e3[37],_0xe8e3[26],_0xe8e3[38]]})})[_0xe8e3[17]](function(_0xe767x14){return _0xe767xe[_0xe8e3[15]](_0xe767x14)})[_0xe8e3[14]](function(_0xe767x10){return handleError(_0xe767xe,_0xe767x10)})};exports[_0xe8e3[40]]=function(_0xe767xd,_0xe767xe,_0xe767xf){return MailRoom[_0xe8e3[40]](_0xe767xd[_0xe8e3[41]])[_0xe8e3[17]](function(_0xe767x13){return _0xe767xe[_0xe8e3[16]](201)[_0xe8e3[15]](_0xe767x13)})[_0xe8e3[14]](function(_0xe767x10){return handleError(_0xe767xe,_0xe767x10)})};exports[_0xe8e3[42]]=function(_0xe767xd,_0xe767xe,_0xe767xf){_0xe767xd[_0xe8e3[41]][_0xe8e3[43]]=_0xe767xd[_0xe8e3[24]][_0xe8e3[23]];_0xe767xd[_0xe8e3[41]][_0xe8e3[44]]=_0xe767xd[_0xe8e3[28]][_0xe8e3[23]];_0xe767xd[_0xe8e3[41]][_0xe8e3[45]]=(_0xe767xd[_0xe8e3[41]][_0xe8e3[46]]&&_0xe767xd[_0xe8e3[41]][_0xe8e3[46]][_0xe8e3[47]])?true:false;_0xe767xd[_0xe8e3[41]][_0xe8e3[48]]=_0xe767xd[_0xe8e3[41]][_0xe8e3[48]]||htmlToText[_0xe8e3[50]](_0xe767xd[_0xe8e3[41]][_0xe8e3[49]],{wordwrap:false});return sequelize[_0xe8e3[53]]()[_0xe8e3[17]](function(_0xe767x15){return MailMessage[_0xe8e3[40]](_0xe767xd[_0xe8e3[41]],{include:[{model:MailAttachment}],transaction:_0xe767x15,user:_0xe767xd[_0xe8e3[24]]})[_0xe8e3[17]](function(_0xe767x16){_0xe767x15[_0xe8e3[52]]();return _0xe767xe[_0xe8e3[16]](201)[_0xe8e3[15]](_0xe767x16)})[_0xe8e3[14]](function(_0xe767x10){console[_0xe8e3[31]](_0xe767x10);_0xe767x15[_0xe8e3[51]]();return handleError(_0xe767xe,_0xe767x10)})})};exports[_0xe8e3[54]]=function(_0xe767xd,_0xe767xe,_0xe767xf){return MailRoom[_0xe8e3[33]](_0xe767xd[_0xe8e3[28]][_0xe8e3[23]])[_0xe8e3[17]](function(_0xe767x13){if(!_0xe767x13){return _0xe767xe[_0xe8e3[32]](404)};if(_0xe767x13[_0xe8e3[55]]){throw  new Error(_0xe8e3[56])};var _0xe767x17=_[_0xe8e3[57]](_0xe767x13,_0xe767xd[_0xe8e3[41]]);return _0xe767x17[_0xe8e3[58]]()})[_0xe8e3[17]](function(_0xe767x13){return _0xe767xe[_0xe8e3[16]](200)[_0xe8e3[15]](_0xe767x13)})[_0xe8e3[14]](function(_0xe767x10){return handleError(_0xe767xe,_0xe767x10)})};exports[_0xe8e3[59]]=function(_0xe767xd,_0xe767xe,_0xe767xf){return MailRoom[_0xe8e3[33]](_0xe767xd[_0xe8e3[28]][_0xe8e3[23]])[_0xe8e3[17]](function(_0xe767x13){if(!_0xe767x13){return _0xe767xe[_0xe8e3[32]](404)};return _0xe767x13[_0xe8e3[61]](_0xe767xd[_0xe8e3[41]][_0xe8e3[60]],{individualHooks:true})})[_0xe8e3[17]](function(){return _0xe767xe[_0xe8e3[32]](200)})[_0xe8e3[14]](function(_0xe767x10){return handleError(_0xe767xe,_0xe767x10)})};exports[_0xe8e3[62]]=function(_0xe767xd,_0xe767xe,_0xe767xf){return MailRoom[_0xe8e3[33]](_0xe767xd[_0xe8e3[28]][_0xe8e3[23]])[_0xe8e3[17]](function(_0xe767x13){if(!_0xe767x13){return _0xe767xe[_0xe8e3[32]](404)};return _0xe767x13[_0xe8e3[62]]()})[_0xe8e3[17]](function(){return _0xe767xe[_0xe8e3[32]](204)})[_0xe8e3[14]](function(_0xe767x10){return handleError(_0xe767xe,_0xe767x10)})};exports[_0xe8e3[63]]=function(_0xe767xd,_0xe767xe){return MailRoom[_0xe8e3[62]]({where:{id:_0xe767xd[_0xe8e3[18]][_0xe8e3[64]]},individualHooks:true})[_0xe8e3[17]](function(){return _0xe767xe[_0xe8e3[32]](200)})[_0xe8e3[14]](function(_0xe767x10){return handleError(_0xe767xe,_0xe767x10)})};function handleError(_0xe767xe,_0xe767x10){return _0xe767xe[_0xe8e3[16]](500)[_0xe8e3[15]](_0xe767x10)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var util = require('util');
+var htmlToText = require('html-to-text');
+
+var Util = require('../../config/util');
+
+var sequelize = require('../../models').sequelize;
+var User = require('../../models').User;
+var Agent = require('../../models').User;
+var Contact = require('../../models').Contact;
+var MailRoom = require('../../models').MailRoom;
+var MailMessage = require('../../models').MailMessage;
+var MailAccount = require('../../models').MailAccount;
+var MailAttachment = require('../../models').MailAttachment;
+
+// Get list of mailRooms
+exports.index = function(req, res, next) {
+  switch (req.user.role) {
+    case 'agent':
+
+      return MailRoom
+        .scope('default', {
+          method: ['agent', req.user.id]
+        })
+        .findAndCountAll(Util.getQuery(req.query))
+        .then(function(result) {
+          return res.status(200).send(result);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+
+    default:
+
+      return MailRoom
+        .scope('default')
+        .findAndCountAll(Util.getQuery(req.query))
+        .then(function(result) {
+          return res.status(200).send(result);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+  }
+};
+
+// Get list of agent mailRooms
+exports.agentIndex = function(req, res, next) {
+  return MailRoom
+    .findAll({
+      where: {
+        UserId: req.params.id
+      },
+      include: [{
+        all: true
+      }]
+    })
+    .then(function(mailRooms) {
+      return res.status(200).send(mailRooms);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single mailRoom
+exports.show = function(req, res, next) {
+  return MailRoom
+    .scope('default')
+    .findById(req.params.id)
+    .then(function(mailRoom) {
+      if (!mailRoom) {
+        return res.sendStatus(404);
+      }
+      return res.send(mailRoom);
+    })
+    .catch(function(err) {
+      console.error(err);
+      return handleError(res, err);
+    });
+};
+
+// Get a single mailRoom
+exports.showAgents = function(req, res, next) {
+  return MailRoom
+    .findById(req.params.id)
+    .then(function(mailRoom) {
+      if (!mailRoom) {
+        return res.sendStatus(404);
+      }
+
+      return mailRoom
+        .getUsers({
+          attributes: ['id', 'name', 'fullname', 'email', 'role', 'internal']
+        });
+    })
+    .then(function(users) {
+      return res.send(users);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new mailRoom in the DB.
+exports.create = function(req, res, next) {
+  return MailRoom
+    .create(req.body)
+    .then(function(mailRoom) {
+      return res.status(201).send(mailRoom);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new mailMessage in the DB.
+exports.createMessage = function(req, res, next) {
+  req.body.UserId = req.user.id;
+  req.body.MailRoomId = req.params.id;
+  req.body.attachment = (req.body.MailAttachments && req.body.MailAttachments.length) ? true : false;
+  req.body.text = req.body.text || htmlToText.fromString(req.body.html, {
+    wordwrap: false
+  });
+
+  return sequelize.transaction().then(function(t) {
+    return MailMessage
+      .create(req.body, {
+        include: [{
+          model: MailAttachment
+        }],
+        transaction: t,
+        user: req.user
+      }).then(function(mailMessage) {
+        t.commit();
+        return res.status(201).send(mailMessage);
+      }).catch(function(err) {
+        console.error(err);
+        t.rollback();
+        return handleError(res, err);
+      });
+  });
+};
+
+// Updates an existing mailRoom in the DB.
+exports.update = function(req, res, next) {
+  return MailRoom
+    .findById(req.params.id)
+    .then(function(mailRoom) {
+      if (!mailRoom) {
+        return res.sendStatus(404);
+      }
+      // CHECK IF MAIL IS ALREADY ASSIGNED
+      if (mailRoom.jobId) {
+        throw new Error('Mail already assigned');
+      }
+      var updated = _.merge(mailRoom, req.body);
+
+      return updated
+        .save();
+    })
+    .then(function(mailRoom) {
+      return res.status(200).send(mailRoom);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single mailRoom
+exports.updateAgents = function(req, res, next) {
+  return MailRoom
+    .findById(req.params.id)
+    .then(function(mailRoom) {
+      if (!mailRoom) {
+        return res.sendStatus(404);
+      }
+
+      return mailRoom
+        .setUsers(req.body.agents, {
+          individualHooks: true
+        });
+    })
+    .then(function() {
+      return res.sendStatus(200);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a mailRoom from the DB.
+exports.destroy = function(req, res, next) {
+  return MailRoom
+    .findById(req.params.id)
+    .then(function(mailRoom) {
+      if (!mailRoom) {
+        return res.sendStatus(404);
+      }
+      return mailRoom.destroy();
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a agent from the DB.
+exports.bulkDestroy = function(req, res) {
+  return MailRoom
+    .destroy({
+      where: {
+        id: req.query.ids
+      },
+      individualHooks: true
+    })
+    .then(function() {
+      return res.sendStatus(200);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index 8f95a3b..3f12a1c 100644 (file)
@@ -1 +1,43 @@
-var _0x247e=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x4D\x61\x69\x6C\x4D\x65\x73\x73\x61\x67\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x4D\x61\x69\x6C\x52\x6F\x6F\x6D","\x55\x73\x65\x72","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x74\x68\x65\x6E","\x69\x64","\x66\x69\x6E\x64\x42\x79\x49\x64","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x6D\x61\x69\x6C\x5F\x72\x6F\x6F\x6D\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x6D\x61\x69\x6C\x5F\x72\x6F\x6F\x6D\x3A\x72\x65\x6D\x6F\x76\x65"];_0x247e[0];var MailMessage=require(_0x247e[2])[_0x247e[1]];var MailRoom=require(_0x247e[2])[_0x247e[3]];var User=require(_0x247e[2])[_0x247e[4]];exports[_0x247e[5]]=function(_0x18aax4){MailRoom[_0x247e[6]](function(_0x18aax5){onSave(_0x18aax4,_0x18aax5)});MailRoom[_0x247e[7]](function(_0x18aax5){onRemove(_0x18aax4,_0x18aax5)});MailRoom[_0x247e[13]](function(_0x18aax5){MailRoom[_0x247e[12]](_0x18aax5[_0x247e[11]],{include:[{all:true}]})[_0x247e[10]](function(_0x18aax7){onSave(_0x18aax4,_0x18aax7)})[_0x247e[9]](function(_0x18aax6){console[_0x247e[8]](_0x18aax6)})})};function onSave(_0x18aax4,_0x18aax5,_0x18aax9){_0x18aax4[_0x247e[15]](_0x247e[14],_0x18aax5)}function onRemove(_0x18aax4,_0x18aax5,_0x18aax9){_0x18aax4[_0x247e[15]](_0x247e[16],_0x18aax5)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+
+var MailMessage = require('../../models').MailMessage;
+var MailRoom = require('../../models').MailRoom;
+var User = require('../../models').User;
+
+exports.register = function(socket) {
+  MailRoom.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+
+  MailRoom.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+
+  MailRoom.afterUpdate(function(doc) {
+    MailRoom
+      .findById(doc.id, {
+        include: [{
+          all: true
+        }]
+      })
+      .then(function(mailRoom) {
+        onSave(socket, mailRoom);
+      })
+      .catch(function(err) {
+        console.error(err);
+      });
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('mail_room:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('mail_room:remove', doc);
+}
index fe3fc77..adb146b 100644 (file)
@@ -1 +1,15 @@
-var _0x87b7=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x6D\x61\x69\x6C\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x87b7[0];var express=require(_0x87b7[1]);var controller=require(_0x87b7[2]);var router=express.Router();router[_0x87b7[5]](_0x87b7[3],controller[_0x87b7[4]]);router[_0x87b7[5]](_0x87b7[6],controller[_0x87b7[7]]);router[_0x87b7[9]](_0x87b7[3],controller[_0x87b7[8]]);router[_0x87b7[11]](_0x87b7[6],controller[_0x87b7[10]]);router[_0x87b7[12]](_0x87b7[6],controller[_0x87b7[10]]);router[_0x87b7[14]](_0x87b7[6],controller[_0x87b7[13]]);module[_0x87b7[15]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./mail_server_in.controller');
+
+var router = express.Router();
+
+router.get('/', controller.index);
+router.get('/:id', controller.show);
+router.post('/', controller.create);
+router.put('/:id', controller.update);
+router.patch('/:id', controller.update);
+router.delete('/:id', controller.destroy);
+
+module.exports = router;
index edac6cc..27fda21 100644 (file)
@@ -1 +1,96 @@
-var _0x41d1=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x4D\x61\x69\x6C\x53\x65\x72\x76\x65\x72\x49\x6E","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x68\x61\x6E\x64\x6C\x65\x55\x6E\x69\x71\x75\x65\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74\x45\x72\x72\x6F\x72","\x65\x72\x72\x6F\x72\x4D\x61\x6E\x61\x67\x65\x72","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79"];_0x41d1[0];var _=require(_0x41d1[1]);var Util=require(_0x41d1[2]);var sequelize=require(_0x41d1[4])[_0x41d1[3]];var MailServerIn=require(_0x41d1[4])[_0x41d1[5]];exports[_0x41d1[6]]=function(_0x871bx5,_0x871bx6){return MailServerIn[_0x41d1[11]]()[_0x41d1[10]](function(_0x871bx8){return _0x871bx6[_0x41d1[9]](200)[_0x41d1[8]](_0x871bx8)})[_0x41d1[7]](function(_0x871bx7){return handleError(_0x871bx6,_0x871bx7)})};exports[_0x41d1[12]]=function(_0x871bx5,_0x871bx6){return MailServerIn[_0x41d1[16]](_0x871bx5[_0x41d1[15]][_0x41d1[14]])[_0x41d1[10]](function(_0x871bx9){if(!_0x871bx9){return _0x871bx6[_0x41d1[13]](404)};return _0x871bx6[_0x41d1[8]](_0x871bx9)})[_0x41d1[7]](function(_0x871bx7){return handleError(_0x871bx6,_0x871bx7)})};exports[_0x41d1[17]]=function(_0x871bx5,_0x871bx6){return MailServerIn[_0x41d1[17]](_0x871bx5[_0x41d1[20]])[_0x41d1[10]](function(_0x871bx9){return _0x871bx6[_0x41d1[9]](201)[_0x41d1[8]](_0x871bx9)})[_0x41d1[7]](sequelize.UniqueConstraintError,function(_0x871bx7){return Util[_0x41d1[19]][_0x41d1[18]](_0x871bx6,_0x871bx7)})[_0x41d1[7]](function(_0x871bx7){return handleError(_0x871bx6,_0x871bx7)})};exports[_0x41d1[21]]=function(_0x871bx5,_0x871bx6){if(_0x871bx5[_0x41d1[20]][_0x41d1[14]]){delete _0x871bx5[_0x41d1[20]][_0x41d1[14]]};return MailServerIn[_0x41d1[16]](_0x871bx5[_0x41d1[15]][_0x41d1[14]])[_0x41d1[10]](function(_0x871bx9){if(!_0x871bx9){return _0x871bx6[_0x41d1[13]](404)};var _0x871bxa=_[_0x41d1[22]](_0x871bx9,_0x871bx5[_0x41d1[20]]);return _0x871bxa[_0x41d1[23]]()})[_0x41d1[10]](function(_0x871bx9){return _0x871bx6[_0x41d1[9]](200)[_0x41d1[8]](_0x871bx9)})[_0x41d1[7]](sequelize.UniqueConstraintError,function(_0x871bx7){return Util[_0x41d1[19]][_0x41d1[18]](_0x871bx6,_0x871bx7)})[_0x41d1[7]](function(_0x871bx7){return handleError(_0x871bx6,_0x871bx7)})};exports[_0x41d1[24]]=function(_0x871bx5,_0x871bx6){return MailServerIn[_0x41d1[16]](_0x871bx5[_0x41d1[15]][_0x41d1[14]])[_0x41d1[10]](function(_0x871bx9){if(!_0x871bx9){return _0x871bx6[_0x41d1[13]](404)};return _0x871bx9[_0x41d1[24]]()})[_0x41d1[7]](function(_0x871bx7){return handleError(_0x871bx6,_0x871bx7)})};function handleError(_0x871bx6,_0x871bx7){return _0x871bx6[_0x41d1[9]](500)[_0x41d1[8]](_0x871bx7)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var Util = require('../../config/util');
+
+var sequelize = require('../../models').sequelize;
+var MailServerIn = require('../../models').MailServerIn;
+
+// Get list of mail_server_ins
+exports.index = function(req, res) {
+  return MailServerIn
+    .findAll()
+    .then(function(mail_server_ins) {
+      return res.status(200).send(mail_server_ins);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single mailServerIn
+exports.show = function(req, res) {
+  return MailServerIn
+    .findById(req.params.id)
+    .then(function(mailServerIn) {
+      if (!mailServerIn) {
+        return res.sendStatus(404);
+      }
+      return res.send(mailServerIn);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new mailServerIn in the DB.
+exports.create = function(req, res) {
+  return MailServerIn
+    .create(req.body)
+    .then(function(mailServerIn) {
+      return res.status(201).send(mailServerIn);
+    })
+    .catch(sequelize.UniqueConstraintError, function(err) {
+      return Util.errorManager.handleUniqueConstraintError(res, err);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Updates an existing mailServerIn in the DB.
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+
+  return MailServerIn
+    .findById(req.params.id)
+    .then(function(mailServerIn) {
+      if (!mailServerIn) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(mailServerIn, req.body);
+      return updated
+        .save();
+    })
+    .then(function(mailServerIn) {
+      return res.status(200).send(mailServerIn);
+    })
+    .catch(sequelize.UniqueConstraintError, function(err) {
+      return Util.errorManager.handleUniqueConstraintError(res, err);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a mailServerIn from the DB.
+exports.destroy = function(req, res) {
+  return MailServerIn
+    .findById(req.params.id)
+    .then(function(mailServerIn) {
+      if (!mailServerIn) {
+        return res.sendStatus(404);
+      }
+      return mailServerIn
+        .destroy();
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index e934afd..811977e 100644 (file)
@@ -1 +1,27 @@
-var _0x414b=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x4D\x61\x69\x6C\x53\x65\x72\x76\x65\x72\x49\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x6D\x61\x69\x6C\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x6D\x61\x69\x6C\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E\x3A\x72\x65\x6D\x6F\x76\x65"];_0x414b[0];var MailServerIn=require(_0x414b[2])[_0x414b[1]];exports[_0x414b[3]]=function(_0xd3dax2){MailServerIn[_0x414b[4]](function(_0xd3dax3){onSave(_0xd3dax2,_0xd3dax3)});MailServerIn[_0x414b[5]](function(_0xd3dax3){onSave(_0xd3dax2,_0xd3dax3)});MailServerIn[_0x414b[6]](function(_0xd3dax3){onRemove(_0xd3dax2,_0xd3dax3)})};function onSave(_0xd3dax2,_0xd3dax3,_0xd3dax5){_0xd3dax2[_0x414b[8]](_0x414b[7],_0xd3dax3)}function onRemove(_0xd3dax2,_0xd3dax3,_0xd3dax5){_0xd3dax2[_0x414b[8]](_0x414b[9],_0xd3dax3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var MailServerIn = require('../../models').MailServerIn;
+
+exports.register = function(socket) {
+  MailServerIn.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  MailServerIn.afterUpdate(function(doc) {
+    onSave(socket, doc);
+  });
+  MailServerIn.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('mail_server_in:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('mail_server_in:remove', doc);
+}
index 718bccf..526e713 100644 (file)
@@ -1 +1,19 @@
-var _0xf9db=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x6D\x61\x69\x6C\x5F\x73\x65\x72\x76\x65\x72\x5F\x6F\x75\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x73\x65\x72\x76\x69\x63\x65","\x69\x6E\x64\x65\x78\x53\x65\x72\x76\x69\x63\x65","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x2F\x3A\x69\x64\x2F\x74\x65\x73\x74","\x74\x65\x73\x74","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x2F\x74\x65\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0xf9db[0];var express=require(_0xf9db[1]);var controller=require(_0xf9db[2]);var auth=require(_0xf9db[3]);var router=express.Router();router[_0xf9db[7]](_0xf9db[4],auth[_0xf9db[5]](),controller[_0xf9db[6]]);router[_0xf9db[7]](_0xf9db[8],auth[_0xf9db[5]](),controller[_0xf9db[9]]);router[_0xf9db[7]](_0xf9db[10],auth[_0xf9db[5]](),controller[_0xf9db[11]]);router[_0xf9db[7]](_0xf9db[12],auth[_0xf9db[5]](),controller[_0xf9db[13]]);router[_0xf9db[15]](_0xf9db[4],auth[_0xf9db[5]](),controller[_0xf9db[14]]);router[_0xf9db[15]](_0xf9db[16],auth[_0xf9db[5]](),controller[_0xf9db[13]]);router[_0xf9db[18]](_0xf9db[10],auth[_0xf9db[5]](),controller[_0xf9db[17]]);router[_0xf9db[19]](_0xf9db[10],auth[_0xf9db[5]](),controller[_0xf9db[17]]);router[_0xf9db[21]](_0xf9db[10],auth[_0xf9db[5]](),controller[_0xf9db[20]]);module[_0xf9db[22]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./mail_server_out.controller');
+var auth = require('../../auth/auth.service');
+
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), controller.index);
+router.get('/service', auth.isAuthenticated(), controller.indexService);
+router.get('/:id', auth.isAuthenticated(), controller.show);
+router.get('/:id/test', auth.isAuthenticated(), controller.test);
+router.post('/', auth.isAuthenticated(), controller.create);
+router.post('/test', auth.isAuthenticated(), controller.test);
+router.put('/:id', auth.isAuthenticated(), controller.update);
+router.patch('/:id', auth.isAuthenticated(), controller.update);
+router.delete('/:id', auth.isAuthenticated(), controller.destroy);
+
+module.exports = router;
index f8a8eec..f2c852d 100644 (file)
@@ -1 +1,162 @@
-var _0x677a=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x4D\x61\x69\x6C\x53\x65\x72\x76\x65\x72\x4F\x75\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x4D\x61\x69\x6C\x4D\x65\x73\x73\x61\x67\x65","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6C\x6C","\x69\x6E\x64\x65\x78\x53\x65\x72\x76\x69\x63\x65","\x66\x69\x6E\x64\x4F\x6E\x65","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79","\x74\x65\x73\x74","\x65\x72\x72\x6F\x72","\x72\x6F\x6C\x6C\x62\x61\x63\x6B","\x45\x52\x52\x4F\x52","\x63\x6F\x6D\x6D\x69\x74","\x43\x4F\x4E\x4E\x45\x43\x54\x45\x44","\x4D\x61\x69\x6C\x41\x63\x63\x6F\x75\x6E\x74\x20","\x75\x73\x65\x72\x6E\x61\x6D\x65","\x20\x74\x65\x73\x74\x2E\x2E","\x75\x73\x65\x72","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E"];_0x677a[0];var _=require(_0x677a[1]);var MailServerOut=require(_0x677a[3])[_0x677a[2]];var MailMessage=require(_0x677a[3])[_0x677a[4]];var sequelize=require(_0x677a[3])[_0x677a[5]];exports[_0x677a[6]]=function(_0xc60ax5,_0xc60ax6){return MailServerOut[_0x677a[11]]()[_0x677a[10]](function(_0xc60ax8){return _0xc60ax6[_0x677a[9]](200)[_0x677a[8]](_0xc60ax8)})[_0x677a[7]](function(_0xc60ax7){return handleError(_0xc60ax6,_0xc60ax7)})};exports[_0x677a[12]]=function(_0xc60ax5,_0xc60ax6){return MailServerOut[_0x677a[13]]({where:{service:true}})[_0x677a[10]](function(_0xc60ax9){return _0xc60ax6[_0x677a[9]](200)[_0x677a[8]](_0xc60ax9)})[_0x677a[7]](function(_0xc60ax7){return handleError(_0xc60ax6,_0xc60ax7)})};exports[_0x677a[14]]=function(_0xc60ax5,_0xc60ax6){return MailServerOut[_0x677a[18]](_0xc60ax5[_0x677a[17]][_0x677a[16]])[_0x677a[10]](function(_0xc60ax9){if(!_0xc60ax9){return _0xc60ax6[_0x677a[15]](404)};return _0xc60ax6[_0x677a[8]](_0xc60ax9)})[_0x677a[7]](function(_0xc60ax7){return handleError(_0xc60ax6,_0xc60ax7)})};exports[_0x677a[19]]=function(_0xc60ax5,_0xc60ax6){return MailServerOut[_0x677a[19]](_0xc60ax5[_0x677a[20]])[_0x677a[10]](function(_0xc60ax9){return _0xc60ax6[_0x677a[9]](201)[_0x677a[8]](_0xc60ax9)})[_0x677a[7]](function(_0xc60ax7){return handleError(_0xc60ax6,_0xc60ax7)})};exports[_0x677a[21]]=function(_0xc60ax5,_0xc60ax6){if(_0xc60ax5[_0x677a[20]][_0x677a[16]]){delete _0xc60ax5[_0x677a[20]][_0x677a[16]]};return MailServerOut[_0x677a[18]](_0xc60ax5[_0x677a[17]][_0x677a[16]])[_0x677a[10]](function(_0xc60ax9){if(!_0xc60ax9){return _0xc60ax6[_0x677a[15]](404)};var _0xc60axa=_[_0x677a[22]](_0xc60ax9,_0xc60ax5[_0x677a[20]]);return _0xc60axa[_0x677a[23]]()})[_0x677a[10]](function(_0xc60ax9){return _0xc60ax6[_0x677a[9]](200)[_0x677a[8]](_0xc60ax9)})[_0x677a[7]](function(_0xc60ax7){return handleError(_0xc60ax6,_0xc60ax7)})};exports[_0x677a[24]]=function(_0xc60ax5,_0xc60ax6){return MailServerOut[_0x677a[18]](_0xc60ax5[_0x677a[17]][_0x677a[16]])[_0x677a[10]](function(_0xc60ax9){if(!_0xc60ax9){return _0xc60ax6[_0x677a[15]](404)};return _0xc60ax9[_0x677a[24]]()})[_0x677a[10]](function(){return _0xc60ax6[_0x677a[15]](204)})[_0x677a[7]](function(_0xc60ax7){return handleError(_0xc60ax6,_0xc60ax7)})};exports[_0x677a[25]]=function(_0xc60ax5,_0xc60ax6){return sequelize[_0x677a[35]]()[_0x677a[10]](function(_0xc60axb){var _0xc60axc;var _0xc60axd;return MailServerOut[_0x677a[18]](_0xc60ax5[_0x677a[17]][_0x677a[16]])[_0x677a[10]](function(_0xc60ax9){if(!_0xc60ax9){_0xc60axb[_0x677a[27]]();return _0xc60ax6[_0x677a[15]](404)}else {return _0xc60ax9}})[_0x677a[10]](function(_0xc60ax9){_0xc60axc=_0xc60ax9;return MailMessage[_0x677a[19]]({subject:_0x677a[31]+_0xc60ax9[_0x677a[32]]+_0x677a[33],text:_0x677a[31]+_0xc60ax9[_0x677a[32]]+_0x677a[33],from:[_0xc60ax9[_0x677a[32]]],to:[_0xc60ax9[_0x677a[32]]]},{transaction:_0xc60axb,user:_0xc60ax5[_0x677a[34]]})})[_0x677a[10]](function(_0xc60axe){_0xc60axd=_0xc60axe;return _0xc60axc[_0x677a[21]]({state:_0x677a[30]})})[_0x677a[10]](function(){_0xc60axb[_0x677a[29]]();return _0xc60ax6[_0x677a[9]](201)[_0x677a[8]](_0xc60axd)})[_0x677a[7]](function(_0xc60ax7){console[_0x677a[26]](_0xc60ax7);_0xc60axb[_0x677a[27]]();return _0xc60axc[_0x677a[21]]({state:_0x677a[28]})[_0x677a[10]](function(){return handleError(_0xc60ax6,_0xc60ax7)})})})};function handleError(_0xc60ax6,_0xc60ax7){return _0xc60ax6[_0x677a[9]](500)[_0x677a[8]](_0xc60ax7)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var MailServerOut = require('../../models').MailServerOut;
+var MailMessage = require('../../models').MailMessage;
+var sequelize = require('../../models').sequelize;
+
+// Get list of mailServerOuts
+exports.index = function(req, res) {
+  return MailServerOut
+    .findAll()
+    .then(function(mailServerOuts) {
+      return res.status(200).send(mailServerOuts);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+exports.indexService = function(req, res) {
+  return MailServerOut
+    .findOne({
+      where: {
+        service: true
+      }
+    })
+    .then(function(mailServerOut) {
+      return res.status(200).send(mailServerOut);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single mailServerOut
+exports.show = function(req, res) {
+  return MailServerOut
+    .findById(req.params.id)
+    .then(function(mailServerOut) {
+      if (!mailServerOut) {
+        return res.sendStatus(404);
+      }
+      return res.send(mailServerOut);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new mailServerOut in the DB.
+exports.create = function(req, res) {
+  return MailServerOut
+    .create(req.body)
+    .then(function(mailServerOut) {
+      return res.status(201).send(mailServerOut);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Updates an existing mailServerOut in the DB.
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  return MailServerOut
+    .findById(req.params.id)
+    .then(function(mailServerOut) {
+      if (!mailServerOut) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(mailServerOut, req.body);
+      return updated
+        .save();
+    })
+    .then(function(mailServerOut) {
+      return res.status(200).send(mailServerOut);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a mailServerOut from the DB.
+exports.destroy = function(req, res) {
+  return MailServerOut
+    .findById(req.params.id)
+    .then(function(mailServerOut) {
+      if (!mailServerOut) {
+        return res.sendStatus(404);
+      }
+
+      return mailServerOut
+        .destroy();
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+exports.test = function(req, res) {
+  return sequelize
+    .transaction()
+    .then(function(t) {
+      var _mailServerOut;
+      var _mailMessage;
+
+      return MailServerOut
+        .findById(req.params.id)
+        .then(function(mailServerOut) {
+          if (!mailServerOut) {
+            t.rollback();
+            return res.sendStatus(404);
+          } else {
+            return mailServerOut;
+          }
+        })
+        .then(function(mailServerOut) {
+          _mailServerOut = mailServerOut;
+          return MailMessage
+            .create({
+              subject: 'MailAccount ' + mailServerOut.username + ' test..',
+              text: 'MailAccount ' + mailServerOut.username + ' test..',
+              from: [mailServerOut.username],
+              to: [mailServerOut.username]
+            }, {
+              transaction: t,
+              user: req.user
+            });
+        })
+        .then(function(mailMessage) {
+          _mailMessage = mailMessage;
+          return _mailServerOut
+            .update({
+              state: 'CONNECTED',
+            });
+        })
+        .then(function() {
+          t.commit();
+          return res.status(201).send(_mailMessage);
+        })
+        .catch(function(err) {
+          console.error(err);
+          t.rollback();
+          return _mailServerOut
+            .update({
+              state: 'ERROR',
+            })
+            .then(function() {
+              return handleError(res, err);
+            })
+        });
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index 05d35e1..d9e6e91 100644 (file)
@@ -1 +1,26 @@
-var _0x4f0e=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x4D\x61\x69\x6C\x53\x65\x72\x76\x65\x72\x4F\x75\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x4D\x61\x69\x6C\x53\x65\x72\x76\x65\x72\x4F\x75\x74\x20\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x6C\x6F\x67","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x4D\x61\x69\x6C\x53\x65\x72\x76\x65\x72\x4F\x75\x74\x20\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x6D\x61\x69\x6C\x5F\x73\x65\x72\x76\x65\x72\x5F\x6F\x75\x74\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x6D\x61\x69\x6C\x5F\x73\x65\x72\x76\x65\x72\x5F\x6F\x75\x74\x3A\x72\x65\x6D\x6F\x76\x65"];_0x4f0e[0];var MailServerOut=require(_0x4f0e[2])[_0x4f0e[1]];exports[_0x4f0e[3]]=function(_0x99c3x2){MailServerOut[_0x4f0e[6]](function(_0x99c3x3){console[_0x4f0e[5]](_0x4f0e[4]);onSave(_0x99c3x2,_0x99c3x3)});MailServerOut[_0x4f0e[8]](function(_0x99c3x3){console[_0x4f0e[5]](_0x4f0e[7]);onRemove(_0x99c3x2,_0x99c3x3)})};function onSave(_0x99c3x2,_0x99c3x3,_0x99c3x5){_0x99c3x2[_0x4f0e[10]](_0x4f0e[9],_0x99c3x3)}function onRemove(_0x99c3x2,_0x99c3x3,_0x99c3x5){_0x99c3x2[_0x4f0e[10]](_0x4f0e[11],_0x99c3x3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var MailServerOut = require('../../models').MailServerOut;
+
+exports.register = function(socket) {
+  MailServerOut.afterCreate(function(doc) {
+    console.log('MailServerOut afterCreate');
+    onSave(socket, doc);
+  });
+  MailServerOut.afterDestroy(function(doc) {
+    console.log('MailServerOut afterDestroy');
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('mail_server_out:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('mail_server_out:remove', doc);
+}
index 4692b26..cb8e0b2 100644 (file)
@@ -1 +1,15 @@
-var _0xcca9=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x6D\x61\x69\x6C\x5F\x74\x65\x6D\x70\x6C\x61\x74\x65\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0xcca9[0];var express=require(_0xcca9[1]);var controller=require(_0xcca9[2]);var router=express.Router();router[_0xcca9[5]](_0xcca9[3],controller[_0xcca9[4]]);router[_0xcca9[5]](_0xcca9[6],controller[_0xcca9[7]]);router[_0xcca9[9]](_0xcca9[3],controller[_0xcca9[8]]);router[_0xcca9[11]](_0xcca9[6],controller[_0xcca9[10]]);router[_0xcca9[12]](_0xcca9[6],controller[_0xcca9[10]]);router[_0xcca9[14]](_0xcca9[6],controller[_0xcca9[13]]);module[_0xcca9[15]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./mail_template.controller');
+
+var router = express.Router();
+
+router.get('/', controller.index);
+router.get('/:id', controller.show);
+router.post('/', controller.create);
+router.put('/:id', controller.update);
+router.patch('/:id', controller.update);
+router.delete('/:id', controller.destroy);
+
+module.exports = router;
\ No newline at end of file
index 2130cbf..8853adc 100644 (file)
@@ -1 +1,92 @@
-var _0xd454=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x4D\x61\x69\x6C\x54\x65\x6D\x70\x6C\x61\x74\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79"];_0xd454[0];var _=require(_0xd454[1]);var util=require(_0xd454[2]);var Util=require(_0xd454[3]);var MailTemplate=require(_0xd454[5])[_0xd454[4]];exports[_0xd454[6]]=function(_0xb844x5,_0xb844x6,_0xb844x7){return MailTemplate[_0xd454[13]](Util[_0xd454[12]](_0xb844x5[_0xd454[11]]))[_0xd454[10]](function(_0xb844x9){_0xb844x6[_0xd454[9]](200)[_0xd454[8]](_0xb844x9)})[_0xd454[7]](function(_0xb844x8){return handleError(_0xb844x6,_0xb844x8)})};exports[_0xd454[14]]=function(_0xb844x5,_0xb844x6){return MailTemplate[_0xd454[18]](_0xb844x5[_0xd454[17]][_0xd454[16]])[_0xd454[10]](function(_0xb844xa){if(!_0xb844xa){return _0xb844x6[_0xd454[15]](404)};return _0xb844x6[_0xd454[8]](_0xb844xa)})[_0xd454[7]](function(_0xb844x8){return handleError(_0xb844x6,_0xb844x8)})};exports[_0xd454[19]]=function(_0xb844x5,_0xb844x6){return MailTemplate[_0xd454[19]](_0xb844x5[_0xd454[20]])[_0xd454[10]](function(_0xb844xa){return _0xb844x6[_0xd454[9]](201)[_0xd454[8]](_0xb844xa)})[_0xd454[7]](function(_0xb844x8){return handleError(_0xb844x6,_0xb844x8)})};exports[_0xd454[21]]=function(_0xb844x5,_0xb844x6){if(_0xb844x5[_0xd454[20]][_0xd454[16]]){delete _0xb844x5[_0xd454[20]][_0xd454[16]]};return MailTemplate[_0xd454[18]](_0xb844x5[_0xd454[17]][_0xd454[16]])[_0xd454[10]](function(_0xb844xa){if(!_0xb844xa){return _0xb844x6[_0xd454[15]](404)};var _0xb844xb=_[_0xd454[22]](_0xb844xa,_0xb844x5[_0xd454[20]]);return _0xb844xb[_0xd454[23]]()})[_0xd454[10]](function(_0xb844xa){return _0xb844x6[_0xd454[9]](200)[_0xd454[8]](_0xb844xa)})[_0xd454[7]](function(_0xb844x8){return handleError(_0xb844x6,_0xb844x8)})};exports[_0xd454[24]]=function(_0xb844x5,_0xb844x6){return MailTemplate[_0xd454[18]](_0xb844x5[_0xd454[17]][_0xd454[16]])[_0xd454[10]](function(_0xb844xa){if(!_0xb844xa){return _0xb844x6[_0xd454[15]](404)};_0xb844xa[_0xd454[24]]()})[_0xd454[10]](function(){return _0xb844x6[_0xd454[15]](204)})[_0xd454[7]](function(_0xb844x8){return handleError(_0xb844x6,_0xb844x8)})};function handleError(_0xb844x6,_0xb844x8){return _0xb844x6[_0xd454[9]](500)[_0xd454[8]](_0xb844x8)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var util = require('util');
+var Util = require('../../config/util');
+
+var MailTemplate = require('../../models').MailTemplate;
+
+// Get list of agents
+exports.index = function(req, res, next) {
+  return MailTemplate
+    .findAndCountAll(Util.getQuery(req.query))
+    .then(function(result) {
+      res.status(200).send(result);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single mailTemplate
+exports.show = function(req, res) {
+  return MailTemplate
+    .findById(req.params.id)
+    .then(function(mailTemplate) {
+      if (!mailTemplate) {
+        return res.sendStatus(404);
+      }
+      return res.send(mailTemplate);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new mailTemplate in the DB.
+exports.create = function(req, res) {
+  return MailTemplate
+    .create(req.body)
+    .then(function(mailTemplate) {
+      return res.status(201).send(mailTemplate);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Updates an existing mailTemplate in the DB.
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  return MailTemplate
+    .findById(req.params.id)
+    .then(function(mailTemplate) {
+      if (!mailTemplate) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(mailTemplate, req.body);
+      return updated
+        .save();
+    })
+    .then(function(mailTemplate) {
+      return res.status(200).send(mailTemplate);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a mailTemplate from the DB.
+exports.destroy = function(req, res) {
+  return MailTemplate
+    .findById(req.params.id)
+    .then(function(mailTemplate) {
+      if (!mailTemplate) {
+        return res.sendStatus(404);
+      }
+      mailTemplate
+        .destroy();
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index b97c57f..a01fb2e 100644 (file)
@@ -1 +1,24 @@
-var _0xcf7d=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x4D\x61\x69\x6C\x54\x65\x6D\x70\x6C\x61\x74\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x6D\x61\x69\x6C\x5F\x74\x65\x6D\x70\x6C\x61\x74\x65\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x6D\x61\x69\x6C\x5F\x74\x65\x6D\x70\x6C\x61\x74\x65\x3A\x72\x65\x6D\x6F\x76\x65"];_0xcf7d[0];var MailTemplate=require(_0xcf7d[2])[_0xcf7d[1]];exports[_0xcf7d[3]]=function(_0x3420x2){MailTemplate[_0xcf7d[4]](function(_0x3420x3){onSave(_0x3420x2,_0x3420x3)});MailTemplate[_0xcf7d[5]](function(_0x3420x3){onRemove(_0x3420x2,_0x3420x3)})};function onSave(_0x3420x2,_0x3420x3,_0x3420x5){_0x3420x2[_0xcf7d[7]](_0xcf7d[6],_0x3420x3)}function onRemove(_0x3420x2,_0x3420x3,_0x3420x5){_0x3420x2[_0xcf7d[7]](_0xcf7d[8],_0x3420x3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var MailTemplate = require('../../models').MailTemplate;
+
+exports.register = function(socket) {
+  MailTemplate.afterCreate(function (doc) {
+    onSave(socket, doc);
+  });
+  MailTemplate.afterDestroy(function (doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('mail_template:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('mail_template:remove', doc);
+}
index 917fd55..d565c16 100644 (file)
@@ -1 +1,19 @@
-var _0x6343=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x6D\x65\x74\x72\x69\x63\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x74\x61\x62\x6C\x65","\x67\x65\x74\x4D\x65\x74\x72\x69\x63\x73\x42\x79\x54\x61\x62\x6C\x65","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x2F\x76\x61\x6C\x69\x64\x61\x74\x65","\x6D\x65\x74\x72\x69\x63\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0x6343[0];var express=require(_0x6343[1]);var controller=require(_0x6343[2]);var auth=require(_0x6343[3]);var router=express.Router();router[_0x6343[7]](_0x6343[4],auth[_0x6343[5]](),controller[_0x6343[6]]);router[_0x6343[7]](_0x6343[8],auth[_0x6343[5]](),controller[_0x6343[9]]);router[_0x6343[7]](_0x6343[10],auth[_0x6343[5]](),controller[_0x6343[11]]);router[_0x6343[13]](_0x6343[4],auth[_0x6343[5]](),controller[_0x6343[12]]);router[_0x6343[13]](_0x6343[14],auth[_0x6343[5]](),controller[_0x6343[15]]);router[_0x6343[17]](_0x6343[10],auth[_0x6343[5]](),controller[_0x6343[16]]);router[_0x6343[18]](_0x6343[10],auth[_0x6343[5]](),controller[_0x6343[16]]);router[_0x6343[20]](_0x6343[4],auth[_0x6343[5]](),controller[_0x6343[19]]);router[_0x6343[20]](_0x6343[10],auth[_0x6343[5]](),controller[_0x6343[21]]);module[_0x6343[22]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./metric.controller');
+var auth = require('../../auth/auth.service');
+
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), controller.index);
+router.get('/table', auth.isAuthenticated(), controller.getMetricsByTable);
+router.get('/:id', auth.isAuthenticated(), controller.show);
+router.post('/', auth.isAuthenticated(), controller.create);
+router.post('/validate', auth.isAuthenticated(), controller.metricValidation);
+router.put('/:id', auth.isAuthenticated(), controller.update);
+router.patch('/:id', auth.isAuthenticated(), controller.update);
+router.delete('/', auth.isAuthenticated(), controller.bulkDestroy);
+router.delete('/:id', auth.isAuthenticated(), controller.destroy);
+
+module.exports = router;
index 4ef4590..ce77ec6 100644 (file)
@@ -1 +1,180 @@
-var _0x672e=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x4D\x65\x74\x72\x69\x63","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x75\x74\x69\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x6D\x65\x74\x72\x69\x63\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x6E\x61\x6D\x65","\x62\x6F\x64\x79","\x66\x69\x6E\x64\x41\x6C\x6C","\x67\x65\x74\x4D\x65\x74\x72\x69\x63\x73\x42\x79\x54\x61\x62\x6C\x65","\x6C\x6F\x67","\x74\x61\x62\x6C\x65","\x73\x68\x6F\x77","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x6C\x65\x6E\x67\x74\x68","\x4D\x45\x53\x53\x41\x47\x45\x5F\x45\x58\x49\x53\x54\x5F\x4D\x45\x54\x52\x49\x43","\x66\x69\x6E\x64","\x64\x65\x73\x74\x72\x6F\x79","\x4D\x45\x53\x53\x41\x47\x45\x5F\x4D\x45\x54\x52\x49\x43\x5F\x43\x4F\x4E\x46\x49\x47\x55\x52\x41\x54\x49\x4F\x4E\x5F\x41\x53\x53\x4F\x43\x49\x41\x54\x45\x44","\x67\x65\x74\x5A\x65\x6E\x64\x65\x73\x6B\x54\x65\x78\x74\x73","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79"];_0x672e[0];var _=require(_0x672e[1]);var Metric=require(_0x672e[3])[_0x672e[2]];var util=require(_0x672e[4]);var Util=require(_0x672e[5]);exports[_0x672e[6]]=function(_0xfbe4x5,_0xfbe4x6,_0xfbe4x7){return Metric[_0x672e[13]](Util[_0x672e[12]](_0xfbe4x5[_0x672e[11]]))[_0x672e[10]](function(_0xfbe4x9){_0xfbe4x6[_0x672e[9]](200)[_0x672e[8]](_0xfbe4x9)})[_0x672e[7]](function(_0xfbe4x8){return handleError(_0xfbe4x6,_0xfbe4x8)})};exports[_0x672e[14]]=function(_0xfbe4x5,_0xfbe4x6){Metric[_0x672e[18]]({where:{name:_0xfbe4x5[_0x672e[17]][_0x672e[16]]}})[_0x672e[10]](function(_0xfbe4xa){if(!_0xfbe4xa){return _0xfbe4x6[_0x672e[15]](404)};return _0xfbe4x6[_0x672e[8]](_0xfbe4xa)})[_0x672e[7]](function(_0xfbe4x8){return handleError(_0xfbe4x6,_0xfbe4x8)})};exports[_0x672e[19]]=function(_0xfbe4x5,_0xfbe4x6){Metric[_0x672e[18]]({where:{table:_0xfbe4x5[_0x672e[11]][_0x672e[21]]}})[_0x672e[10]](function(_0xfbe4xa){console[_0x672e[20]](_0xfbe4xa);if(!_0xfbe4xa){return _0xfbe4x6[_0x672e[15]](404)};return _0xfbe4x6[_0x672e[9]](200)[_0x672e[8]](_0xfbe4xa)})[_0x672e[7]](function(_0xfbe4x8){return handleError(_0xfbe4x6,_0xfbe4x8)})};exports[_0x672e[22]]=function(_0xfbe4x5,_0xfbe4x6){Metric[_0x672e[25]](_0xfbe4x5[_0x672e[24]][_0x672e[23]])[_0x672e[10]](function(_0xfbe4xb){if(!_0xfbe4xb){return _0xfbe4x6[_0x672e[15]](404)};return _0xfbe4x6[_0x672e[8]](_0xfbe4xb)})[_0x672e[7]](function(_0xfbe4x8){return handleError(_0xfbe4x6,_0xfbe4x8)})};exports[_0x672e[26]]=function(_0xfbe4x5,_0xfbe4x6){Metric[_0x672e[26]](_0xfbe4x5[_0x672e[17]])[_0x672e[10]](function(_0xfbe4xb){return _0xfbe4x6[_0x672e[9]](201)[_0x672e[8]](_0xfbe4xb)})[_0x672e[7]](function(_0xfbe4x8){return handleError(_0xfbe4x6,_0xfbe4x8)})};exports[_0x672e[27]]=function(_0xfbe4x5,_0xfbe4x6){Metric[_0x672e[18]]({where:{name:_0xfbe4x5[_0x672e[17]][_0x672e[16]],id:{$ne:_0xfbe4x5[_0x672e[17]][_0x672e[23]]}}})[_0x672e[10]](function(_0xfbe4xa){if(!_0xfbe4xa){return _0xfbe4x6[_0x672e[15]](404)};if(_0xfbe4xa[_0x672e[30]]>0){return _0xfbe4x6[_0x672e[9]](500)[_0x672e[8]]({message:_0x672e[31]})};if(_0xfbe4x5[_0x672e[17]][_0x672e[23]]){delete _0xfbe4x5[_0x672e[17]][_0x672e[23]]};return Metric[_0x672e[32]]({where:{id:_0xfbe4x5[_0x672e[24]][_0x672e[23]]}})})[_0x672e[10]](function(_0xfbe4xb){if(!_0xfbe4xb){return _0xfbe4x6[_0x672e[15]](404)};var _0xfbe4xc=_[_0x672e[28]](_0xfbe4xb,_0xfbe4x5[_0x672e[17]]);return _0xfbe4xc[_0x672e[29]]()})[_0x672e[10]](function(){return _0xfbe4x6[_0x672e[15]](200)})[_0x672e[7]](function(_0xfbe4x8){console[_0x672e[20]](_0xfbe4x8);return handleError(_0xfbe4x6,_0xfbe4x8)})};exports[_0x672e[33]]=function(_0xfbe4x5,_0xfbe4x6){Metric[_0x672e[25]](_0xfbe4x5[_0x672e[24]][_0x672e[23]])[_0x672e[10]](function(_0xfbe4xb){if(!_0xfbe4xb){return _0xfbe4x6[_0x672e[15]](404)};_0xfbe4xb[_0x672e[35]]()[_0x672e[10]](function(_0xfbe4xd){if(_0xfbe4xd[_0x672e[30]]>0){return _0xfbe4x6[_0x672e[9]](500)[_0x672e[8]]({message:_0x672e[34]})};_0xfbe4xb[_0x672e[33]]()[_0x672e[10]](function(){return _0xfbe4x6[_0x672e[15]](204)})[_0x672e[7]](function(_0xfbe4x8){return handleError(_0xfbe4x6,_0xfbe4x8)})})[_0x672e[7]](function(_0xfbe4x8){return handleError(_0xfbe4x6,_0xfbe4x8)})})[_0x672e[7]](function(_0xfbe4x8){return handleError(_0xfbe4x6,_0xfbe4x8)})};exports[_0x672e[36]]=function(_0xfbe4x5,_0xfbe4x6){Metric[_0x672e[33]]({where:{id:_0xfbe4x5[_0x672e[11]][_0x672e[23]]},individualHooks:true})[_0x672e[10]](function(){return _0xfbe4x6[_0x672e[15]](204)})[_0x672e[7]](function(_0xfbe4x8){return handleError(_0xfbe4x6,_0xfbe4x8)})};function handleError(_0xfbe4x6,_0xfbe4x8){return _0xfbe4x6[_0x672e[9]](500)[_0x672e[8]](_0xfbe4x8)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var Metric = require('../../models').Metric;
+var util = require('util');
+var Util = require('../../config/util');
+
+// Get list of metrics
+exports.index = function(req, res, next) {
+  return Metric
+    .findAndCountAll(Util.getQuery(req.query))
+    .then(function(result) {
+      res.status(200).send(result);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+exports.metricValidation = function(req, res) {
+  Metric
+    .findAll({
+      where: {
+        name: req.body.name
+      }
+    })
+    .then(function(metrics) {
+      if (!metrics) {
+        return res.sendStatus(404);
+      }
+      return res.send(metrics);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+exports.getMetricsByTable = function(req, res) {
+  Metric
+    .findAll({
+      where: {
+        table: req.query.table
+      }
+    })
+    .then(function(metrics) {
+      console.log(metrics);
+      if (!metrics) {
+        return res.sendStatus(404);
+      }
+      return res.status(200).send(metrics);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single metric
+exports.show = function(req, res) {
+  Metric
+    .findById(req.params.id)
+    .then(function(metric) {
+      if (!metric) {
+        return res.sendStatus(404);
+      }
+      return res.send(metric);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new metric in the DB.
+exports.create = function(req, res) {
+  Metric
+    .create(req.body)
+    .then(function(metric) {
+      return res.status(201).send(metric);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Updates an existing metric in the DB.
+exports.update = function(req, res) {
+  Metric
+    .findAll({
+      where: {
+        name: req.body.name,
+        id: {
+          $ne: req.body.id
+        }
+      }
+    })
+    .then(function(metrics) {
+      if (!metrics) {
+        return res.sendStatus(404);
+      }
+      if (metrics.length > 0) {
+        return res.status(500).send({
+          message: 'MESSAGE_EXIST_METRIC'
+        })
+      }
+      if (req.body.id) {
+        delete req.body.id;
+      }
+      return Metric
+        .find({
+          where: {
+            id: req.params.id
+          }
+        });
+    })
+    .then(function(metric) {
+      if (!metric) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(metric, req.body);
+      return updated.save();
+    })
+    .then(function() {
+      return res.sendStatus(200);
+    })
+    .catch(function(err) {
+      console.log(err);
+      return handleError(res, err);
+    });
+};
+
+// Deletes a metric from the DB.
+exports.destroy = function(req, res) {
+  Metric
+    .findById(req.params.id)
+    .then(function(metric) {
+      if (!metric) {
+        return res.sendStatus(404);
+      }
+      metric.getZendeskTexts()
+        .then(function(texts) {
+          if (texts.length > 0) {
+            return res.status(500).send({
+              message: 'MESSAGE_METRIC_CONFIGURATION_ASSOCIATED'
+            });
+          }
+          metric.destroy()
+            .then(function() {
+              return res.sendStatus(204);
+            })
+            .catch(function(err) {
+              return handleError(res, err);
+            });
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+exports.bulkDestroy = function(req, res) {
+  Metric
+    .destroy({
+      where: {
+        id: req.query.id
+      },
+      individualHooks: true
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index f72203f..e604bc9 100644 (file)
@@ -1 +1,41 @@
-var _0x5d53=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x4D\x65\x74\x72\x69\x63","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x52\x65\x70\x6F\x72\x74\x46\x69\x65\x6C\x64","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x6D\x65\x74\x72\x69\x63\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x6D\x65\x74\x72\x69\x63\x3A\x72\x65\x6D\x6F\x76\x65","\x6C\x6F\x67","\x63\x61\x74\x63\x68","\x6D\x65\x74\x72\x69\x63","\x69\x64","\x75\x70\x64\x61\x74\x65"];_0x5d53[0];var Metric=require(_0x5d53[2])[_0x5d53[1]];var ReportField=require(_0x5d53[2])[_0x5d53[3]];exports[_0x5d53[4]]=function(_0xdfccx3){Metric[_0x5d53[5]](function(_0xdfccx4){onSave(_0xdfccx3,_0xdfccx4)});Metric[_0x5d53[6]](function(_0xdfccx4){updateFields(_0xdfccx4)});Metric[_0x5d53[7]](function(_0xdfccx4){onRemove(_0xdfccx3,_0xdfccx4)})};function onSave(_0xdfccx3,_0xdfccx4,_0xdfccx6){_0xdfccx3[_0x5d53[9]](_0x5d53[8],_0xdfccx4)}function onRemove(_0xdfccx3,_0xdfccx4,_0xdfccx6){_0xdfccx3[_0x5d53[9]](_0x5d53[10],_0xdfccx4)}function updateFields(_0xdfccx4){return ReportField[_0x5d53[15]]({field:_0xdfccx4[_0x5d53[13]]},{where:{MetricId:_0xdfccx4[_0x5d53[14]]}})[_0x5d53[12]](function(_0xdfccx9){console[_0x5d53[11]](_0xdfccx9)})}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var Metric = require('../../models').Metric;
+var ReportField = require('../../models').ReportField;
+
+exports.register = function(socket) {
+  Metric.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  Metric.afterUpdate(function(doc) {
+    updateFields(doc);
+  });
+  Metric.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('metric:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('metric:remove', doc);
+}
+
+function updateFields(doc) {
+  return ReportField.update({
+      field: doc.metric
+    }, {
+      where: {
+        MetricId: doc.id
+      }
+    })
+    .catch(function(err) {
+      console.log(err);
+    });
+}
index 3020939..076cab1 100644 (file)
@@ -1 +1,20 @@
-var _0xafa9=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x73\x68\x6F\x75\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x70\x70","\x73\x75\x70\x65\x72\x74\x65\x73\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x61\x6E\x61\x6C\x79\x74\x69\x63\x73\x2F\x6D\x65\x74\x72\x69\x63\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x70\x6F\x6E\x64\x20\x77\x69\x74\x68\x20\x4A\x53\x4F\x4E\x20\x61\x72\x72\x61\x79","\x69\x6E\x73\x74\x61\x6E\x63\x65\x6F\x66","\x62\x65","\x62\x6F\x64\x79","\x65\x6E\x64","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x65\x78\x70\x65\x63\x74","\x2F\x61\x70\x69\x2F\x61\x6E\x61\x6C\x79\x74\x69\x63\x73\x2F\x6D\x65\x74\x72\x69\x63\x73","\x67\x65\x74"];_0xafa9[0];var should=require(_0xafa9[1]);var app=require(_0xafa9[2]);var request=require(_0xafa9[3]);describe(_0xafa9[4],function(){it(_0xafa9[5],function(_0xd7bcx4){request(app)[_0xafa9[13]](_0xafa9[12])[_0xafa9[11]](200)[_0xafa9[11]](_0xafa9[10],/json/)[_0xafa9[9]](function(_0xd7bcx5,_0xd7bcx6){if(_0xd7bcx5){return _0xd7bcx4(_0xd7bcx5)};_0xd7bcx6[_0xafa9[8]][_0xafa9[1]][_0xafa9[7]][_0xafa9[6]](Array);_0xd7bcx4()})})})
\ No newline at end of file
+'use strict';
+
+var should = require('should');
+var app = require('../../app');
+var request = require('supertest');
+
+describe('GET /api/analytics/metrics', function() {
+
+  it('should respond with JSON array', function(done) {
+    request(app)
+      .get('/api/analytics/metrics')
+      .expect(200)
+      .expect('Content-Type', /json/)
+      .end(function(err, res) {
+        if (err) return done(err);
+        res.body.should.be.instanceof(Array);
+        done();
+      });
+  });
+});
index 617eb51..8204682 100644 (file)
@@ -1 +1,15 @@
-var _0x1416=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x6D\x6F\x64\x75\x6C\x65\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x1416[0];var express=require(_0x1416[1]);var controller=require(_0x1416[2]);var router=express.Router();router[_0x1416[5]](_0x1416[3],controller[_0x1416[4]]);router[_0x1416[5]](_0x1416[6],controller[_0x1416[7]]);router[_0x1416[9]](_0x1416[3],controller[_0x1416[8]]);router[_0x1416[11]](_0x1416[6],controller[_0x1416[10]]);router[_0x1416[12]](_0x1416[6],controller[_0x1416[10]]);router[_0x1416[14]](_0x1416[6],controller[_0x1416[13]]);module[_0x1416[15]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./module.controller');
+
+var router = express.Router();
+
+router.get('/', controller.index);
+router.get('/:id', controller.show);
+router.post('/', controller.create);
+router.put('/:id', controller.update);
+router.patch('/:id', controller.update);
+router.delete('/:id', controller.destroy);
+
+module.exports = router;
index 433c64e..9d6517c 100644 (file)
@@ -1 +1,92 @@
-var _0x9118=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x4D\x6F\x64\x75\x6C\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79"];_0x9118[0];var _=require(_0x9118[1]);var Module=require(_0x9118[3])[_0x9118[2]];exports[_0x9118[4]]=function(_0xb6f5x3,_0xb6f5x4){Module[_0x9118[9]]()[_0x9118[8]](function(_0xb6f5x6){return _0xb6f5x4[_0x9118[7]](200)[_0x9118[6]](_0xb6f5x6)})[_0x9118[5]](function(_0xb6f5x5){return handleError(_0xb6f5x4,_0xb6f5x5)})};exports[_0x9118[10]]=function(_0xb6f5x3,_0xb6f5x4){var _0xb6f5x7=_0xb6f5x3[_0x9118[12]][_0x9118[11]];Module[_0x9118[14]](_0xb6f5x7)[_0x9118[8]](function(_0xb6f5x8){if(!_0xb6f5x8){return _0xb6f5x4[_0x9118[13]](404)};return _0xb6f5x4[_0x9118[6]](_0xb6f5x8)})[_0x9118[5]](function(_0xb6f5x5){return handleError(_0xb6f5x4,_0xb6f5x5)})};exports[_0x9118[15]]=function(_0xb6f5x3,_0xb6f5x4){Module[_0x9118[15]](_0xb6f5x3[_0x9118[16]])[_0x9118[8]](function(_0xb6f5x8){return _0xb6f5x4[_0x9118[7]](201)[_0x9118[6]](_0xb6f5x8)})[_0x9118[5]](function(_0xb6f5x5){return handleError(_0xb6f5x4,_0xb6f5x5)})};exports[_0x9118[17]]=function(_0xb6f5x3,_0xb6f5x4){var _0xb6f5x7=_0xb6f5x3[_0x9118[16]][_0x9118[11]];if(_0xb6f5x3[_0x9118[16]][_0x9118[11]]){delete _0xb6f5x3[_0x9118[16]][_0x9118[11]]};Module[_0x9118[14]](_0xb6f5x7)[_0x9118[8]](function(_0xb6f5x8){if(!_0xb6f5x8){return _0xb6f5x4[_0x9118[13]](404)};var _0xb6f5x9=_[_0x9118[18]](_0xb6f5x8,_0xb6f5x3[_0x9118[16]]);_0xb6f5x9[_0x9118[19]]()[_0x9118[8]](function(){return _0xb6f5x4[_0x9118[7]](200)[_0x9118[6]](_0xb6f5x8)})[_0x9118[5]](function(_0xb6f5x5){return handleError(_0xb6f5x4,_0xb6f5x5)})})[_0x9118[5]](function(_0xb6f5x5){return handleError(_0xb6f5x4,_0xb6f5x5)})};exports[_0x9118[20]]=function(_0xb6f5x3,_0xb6f5x4){var _0xb6f5x7=_0xb6f5x3[_0x9118[12]][_0x9118[11]];Module[_0x9118[14]](_0xb6f5x7)[_0x9118[8]](function(_0xb6f5x8){if(!_0xb6f5x8){return _0xb6f5x4[_0x9118[13]](404)};_0xb6f5x8[_0x9118[20]]()[_0x9118[8]](function(){return _0xb6f5x4[_0x9118[13]](204)})[_0x9118[5]](function(_0xb6f5x5){return handleError(_0xb6f5x4,_0xb6f5x5)})})[_0x9118[5]](function(_0xb6f5x5){return handleError(_0xb6f5x4,_0xb6f5x5)})};function handleError(_0xb6f5x4,_0xb6f5x5){return _0xb6f5x4[_0x9118[7]](500)[_0x9118[6]](_0xb6f5x5)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var Module = require('../../models').Module;
+
+// Get list of modules
+exports.index = function(req, res) {
+  Module
+  .findAll()
+  .then(function (modules) {
+    return res.status(200).send(modules);
+  })
+  .catch(function(err) {
+    return handleError(res, err);
+  });
+};
+
+// Get a single module
+exports.show = function(req, res) {
+  var moduleId = req.params.id;
+
+  Module
+  .findById(moduleId)
+  .then(function (module) {
+    if(!module) { return res.sendStatus(404); }
+    return res.send(module);
+  })
+  .catch(function(err){
+    return handleError(res, err);
+  });
+};
+
+// Creates a new module in the DB.
+exports.create = function(req, res) {
+  Module
+  .create(req.body)
+  .then(function(module) {
+    return res.status(201).send(module);
+  })
+  .catch(function(err) {
+    return handleError(res, err);
+  });
+};
+
+// Updates an existing module in the DB.
+exports.update = function(req, res) {
+  var moduleId = req.body.id;
+
+  if(req.body.id) { delete req.body.id; }
+
+  Module
+  .findById(moduleId)
+  .then(function (module) {
+    if(!module) { return res.sendStatus(404); }
+    var updated = _.merge(module, req.body);
+    updated.save()
+    .then(function () {
+      return res.status(200).send(module);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+  })
+  .catch(function(err) {
+    return handleError(res, err);
+  });
+};
+
+// Deletes a module from the DB.
+exports.destroy = function(req, res) {
+  var moduleId = req.params.id;
+
+  Module
+  .findById(moduleId)
+  .then(function (module) {
+    if(!module) { return res.sendStatus(404); }
+    module.destroy()
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+  })
+  .catch(function(err) {
+    return handleError(res, err);
+  });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index d23fa47..0eade3b 100644 (file)
@@ -1 +1,24 @@
-var _0xfc50=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x4D\x6F\x64\x75\x6C\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x6D\x6F\x64\x75\x6C\x65\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x6D\x6F\x64\x75\x6C\x65\x3A\x72\x65\x6D\x6F\x76\x65"];_0xfc50[0];var module=require(_0xfc50[2])[_0xfc50[1]];exports[_0xfc50[3]]=function(_0x9b20x2){module[_0xfc50[4]](function(_0x9b20x3){onSave(_0x9b20x2,_0x9b20x3)});module[_0xfc50[5]](function(_0x9b20x3){onRemove(_0x9b20x2,_0x9b20x3)})};function onSave(_0x9b20x2,_0x9b20x3,_0x9b20x5){_0x9b20x2[_0xfc50[7]](_0xfc50[6],_0x9b20x3)}function onRemove(_0x9b20x2,_0x9b20x3,_0x9b20x5){_0x9b20x2[_0xfc50[7]](_0xfc50[8],_0x9b20x3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var module = require('../../models').Module;
+
+exports.register = function(socket) {
+  module.afterCreate(function (doc) {
+    onSave(socket, doc);
+  });
+  module.afterDestroy(function (doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('module:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('module:remove', doc);
+}
index 46c329d..45aa629 100644 (file)
@@ -1 +1,20 @@
-var _0xf994=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x73\x68\x6F\x75\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x70\x70","\x73\x75\x70\x65\x72\x74\x65\x73\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x6D\x6F\x64\x75\x6C\x65\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x70\x6F\x6E\x64\x20\x77\x69\x74\x68\x20\x4A\x53\x4F\x4E\x20\x61\x72\x72\x61\x79","\x69\x6E\x73\x74\x61\x6E\x63\x65\x6F\x66","\x62\x65","\x62\x6F\x64\x79","\x65\x6E\x64","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x65\x78\x70\x65\x63\x74","\x2F\x61\x70\x69\x2F\x6D\x6F\x64\x75\x6C\x65\x73","\x67\x65\x74"];_0xf994[0];var should=require(_0xf994[1]);var app=require(_0xf994[2]);var request=require(_0xf994[3]);describe(_0xf994[4],function(){it(_0xf994[5],function(_0xe187x4){request(app)[_0xf994[13]](_0xf994[12])[_0xf994[11]](200)[_0xf994[11]](_0xf994[10],/json/)[_0xf994[9]](function(_0xe187x5,_0xe187x6){if(_0xe187x5){return _0xe187x4(_0xe187x5)};_0xe187x6[_0xf994[8]][_0xf994[1]][_0xf994[7]][_0xf994[6]](Array);_0xe187x4()})})})
\ No newline at end of file
+'use strict';
+
+var should = require('should');
+var app = require('../../app');
+var request = require('supertest');
+
+describe('GET /api/modules', function() {
+
+  it('should respond with JSON array', function(done) {
+    request(app)
+      .get('/api/modules')
+      .expect(200)
+      .expect('Content-Type', /json/)
+      .end(function(err, res) {
+        if (err) return done(err);
+        res.body.should.be.instanceof(Array);
+        done();
+      });
+  });
+});
\ No newline at end of file
index e7f2252..f341cb4 100644 (file)
@@ -1 +1,15 @@
-var _0xc449=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x73\x65\x74\x74\x69\x6E\x67\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x67\x65\x74","\x2F","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0xc449[0];var express=require(_0xc449[1]);var controller=require(_0xc449[2]);var router=express.Router();router[_0xc449[5]](_0xc449[3],controller[_0xc449[4]]);router[_0xc449[8]](_0xc449[6],controller[_0xc449[7]]);router[_0xc449[10]](_0xc449[3],controller[_0xc449[9]]);router[_0xc449[11]](_0xc449[3],controller[_0xc449[9]]);router[_0xc449[13]](_0xc449[3],controller[_0xc449[12]]);module[_0xc449[14]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./setting.controller');
+
+var router = express.Router();
+
+// router.get('/', controller.index);
+router.get('/:id', controller.show);
+router.post('/', controller.create);
+router.put('/:id', controller.update);
+router.patch('/:id', controller.update);
+router.delete('/:id', controller.destroy);
+
+module.exports = router;
index a16a0fc..3ebcb5c 100644 (file)
@@ -1 +1,110 @@
-var _0x74ac=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x63\x72\x79\x70\x74\x6F","\x53\x65\x74\x74\x69\x6E\x67","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x6C\x69\x63\x65\x6E\x73\x65","\x61\x65\x73\x2D\x32\x35\x36\x2D\x63\x74\x72","\x25\x73\x3A\x25\x73\x3A\x25\x73","\x61\x64\x64\x72\x65\x73\x73","\x6E\x65\x74\x6D\x61\x73\x6B","\x6D\x61\x63","\x66\x6F\x72\x6D\x61\x74","\x70\x61\x72\x73\x65","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79","\x63\x72\x65\x61\x74\x65\x44\x65\x63\x69\x70\x68\x65\x72","\x68\x65\x78","\x75\x74\x66\x38","\x66\x69\x6E\x61\x6C"];_0x74ac[0];var _=require(_0x74ac[1]);var util=require(_0x74ac[2]);var crypto=require(_0x74ac[3]);var Setting=require(_0x74ac[5])[_0x74ac[4]];exports[_0x74ac[6]]=function(_0xd32ex5,_0xd32ex6){Setting[_0x74ac[11]]()[_0x74ac[10]](function(_0xd32ex8){return _0xd32ex6[_0x74ac[9]](200)[_0x74ac[8]](_0xd32ex8)})[_0x74ac[7]](function(_0xd32ex7){return handleError(_0xd32ex6,_0xd32ex7)})};exports[_0x74ac[12]]=function(_0xd32ex5,_0xd32ex6){Setting[_0x74ac[24]](_0xd32ex5[_0x74ac[23]][_0x74ac[22]])[_0x74ac[10]](function(_0xd32ex9){if(!_0xd32ex9){return _0xd32ex6[_0x74ac[13]](404)};if(_0xd32ex9[_0x74ac[14]]){_0xd32ex9[_0x74ac[14]]=decrypt(_0x74ac[15],util[_0x74ac[20]](_0x74ac[16],_0xd32ex9[_0x74ac[17]],_0xd32ex9[_0x74ac[18]],_0xd32ex9[_0x74ac[19]]),_0xd32ex9[_0x74ac[14]]);_0xd32ex9[_0x74ac[14]]=JSON[_0x74ac[21]](_0xd32ex9[_0x74ac[14]])};return _0xd32ex6[_0x74ac[8]](_0xd32ex9)})[_0x74ac[7]](function(_0xd32ex7){return handleError(_0xd32ex6,_0xd32ex7)})};exports[_0x74ac[25]]=function(_0xd32ex5,_0xd32ex6){Setting[_0x74ac[25]](_0xd32ex5[_0x74ac[26]])[_0x74ac[10]](function(_0xd32ex9){return _0xd32ex6[_0x74ac[9]](201)[_0x74ac[8]](_0xd32ex9)})[_0x74ac[7]](function(_0xd32ex7){return handleError(_0xd32ex6,_0xd32ex7)})};exports[_0x74ac[27]]=function(_0xd32ex5,_0xd32ex6){if(_0xd32ex5[_0x74ac[26]][_0x74ac[22]]){delete _0xd32ex5[_0x74ac[26]][_0x74ac[22]]};Setting[_0x74ac[24]](_0xd32ex5[_0x74ac[23]][_0x74ac[22]])[_0x74ac[10]](function(_0xd32ex9){if(!_0xd32ex9){return _0xd32ex6[_0x74ac[13]](404)};var _0xd32exa=_[_0x74ac[28]](_0xd32ex9,_0xd32ex5[_0x74ac[26]]);_0xd32exa[_0x74ac[29]]()[_0x74ac[10]](function(){return _0xd32ex6[_0x74ac[9]](200)[_0x74ac[8]](_0xd32ex9)})[_0x74ac[7]](function(_0xd32ex7){return handleError(_0xd32ex6,_0xd32ex7)})})[_0x74ac[7]](function(_0xd32ex7){return handleError(_0xd32ex6,_0xd32ex7)})};exports[_0x74ac[30]]=function(_0xd32ex5,_0xd32ex6){Setting[_0x74ac[24]](_0xd32ex5[_0x74ac[23]][_0x74ac[22]])[_0x74ac[10]](function(_0xd32ex9){if(!_0xd32ex9){return _0xd32ex6[_0x74ac[13]](404)};_0xd32ex9[_0x74ac[30]]()[_0x74ac[10]](function(){return _0xd32ex6[_0x74ac[13]](204)})[_0x74ac[7]](function(_0xd32ex7){return handleError(_0xd32ex6,_0xd32ex7)})})[_0x74ac[7]](function(_0xd32ex7){return handleError(_0xd32ex6,_0xd32ex7)})};function handleError(_0xd32ex6,_0xd32ex7){return _0xd32ex6[_0x74ac[9]](500)[_0x74ac[8]](_0xd32ex7)}function decrypt(_0xd32exd,_0xd32exe,_0xd32exf){var _0xd32ex10=crypto[_0x74ac[31]](_0xd32exd,_0xd32exe);var _0xd32ex11=_0xd32ex10[_0x74ac[27]](_0xd32exf,_0x74ac[32],_0x74ac[33]);_0xd32ex11+=_0xd32ex10[_0x74ac[34]](_0x74ac[33]);return _0xd32ex11}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var util = require('util');
+var crypto = require('crypto');
+
+var Setting = require('../../models').Setting;
+
+// Get list of settings
+exports.index = function(req, res) {
+  Setting
+    .findAll()
+    .then(function(settings) {
+      return res.status(200).send(settings);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single setting
+exports.show = function(req, res) {
+  Setting
+    .findById(req.params.id)
+    .then(function(setting) {
+      if (!setting) {
+        return res.sendStatus(404);
+      }
+
+      if (setting.license) {
+        setting.license = decrypt('aes-256-ctr', util.format('%s:%s:%s',
+          setting.address, setting.netmask, setting.mac), setting.license);
+        setting.license = JSON.parse(setting.license);
+      }
+
+      return res.send(setting);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new setting in the DB.
+exports.create = function(req, res) {
+  Setting
+    .create(req.body)
+    .then(function(setting) {
+      return res.status(201).send(setting);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Updates an existing setting in the DB.
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  Setting
+    .findById(req.params.id)
+    .then(function(setting) {
+      if (!setting) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(setting, req.body);
+      updated.save()
+        .then(function() {
+          return res.status(200).send(setting);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a setting from the DB.
+exports.destroy = function(req, res) {
+  Setting
+    .findById(req.params.id)
+    .then(function(setting) {
+      if (!setting) {
+        return res.sendStatus(404);
+      }
+      setting.destroy()
+        .then(function() {
+          return res.sendStatus(204);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
+
+function decrypt(algorithm, password, text) {
+  var decipher = crypto.createDecipher(algorithm, password)
+  var dec = decipher.update(text, 'hex', 'utf8')
+  dec += decipher.final('utf8');
+  return dec;
+}
index d34fe4a..0784c1f 100644 (file)
@@ -1 +1,24 @@
-var _0x196b=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x53\x65\x74\x74\x69\x6E\x67","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x73\x65\x74\x74\x69\x6E\x67\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x73\x65\x74\x74\x69\x6E\x67\x3A\x72\x65\x6D\x6F\x76\x65"];_0x196b[0];var Setting=require(_0x196b[2])[_0x196b[1]];exports[_0x196b[3]]=function(_0x32ddx2){Setting[_0x196b[4]](function(_0x32ddx3){onSave(_0x32ddx2,_0x32ddx3)});Setting[_0x196b[5]](function(_0x32ddx3){onRemove(_0x32ddx2,_0x32ddx3)})};function onSave(_0x32ddx2,_0x32ddx3,_0x32ddx5){_0x32ddx2[_0x196b[7]](_0x196b[6],_0x32ddx3)}function onRemove(_0x32ddx2,_0x32ddx3,_0x32ddx5){_0x32ddx2[_0x196b[7]](_0x196b[8],_0x32ddx3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var Setting = require('../../models').Setting;
+
+exports.register = function(socket) {
+  Setting.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  Setting.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('setting:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('setting:remove', doc);
+}
index 285d4e4..eec76c9 100644 (file)
@@ -1 +1,20 @@
-var _0xbea5=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x73\x68\x6F\x75\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x70\x70","\x73\x75\x70\x65\x72\x74\x65\x73\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x73\x65\x74\x74\x69\x6E\x67\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x70\x6F\x6E\x64\x20\x77\x69\x74\x68\x20\x4A\x53\x4F\x4E\x20\x61\x72\x72\x61\x79","\x69\x6E\x73\x74\x61\x6E\x63\x65\x6F\x66","\x62\x65","\x62\x6F\x64\x79","\x65\x6E\x64","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x65\x78\x70\x65\x63\x74","\x2F\x61\x70\x69\x2F\x73\x65\x74\x74\x69\x6E\x67\x73","\x67\x65\x74"];_0xbea5[0];var should=require(_0xbea5[1]);var app=require(_0xbea5[2]);var request=require(_0xbea5[3]);describe(_0xbea5[4],function(){it(_0xbea5[5],function(_0x409bx4){request(app)[_0xbea5[13]](_0xbea5[12])[_0xbea5[11]](200)[_0xbea5[11]](_0xbea5[10],/json/)[_0xbea5[9]](function(_0x409bx5,_0x409bx6){if(_0x409bx5){return _0x409bx4(_0x409bx5)};_0x409bx6[_0xbea5[8]][_0xbea5[1]][_0xbea5[7]][_0xbea5[6]](Array);_0x409bx4()})})})
\ No newline at end of file
+'use strict';
+
+var should = require('should');
+var app = require('../../app');
+var request = require('supertest');
+
+describe('GET /api/settings', function() {
+
+  it('should respond with JSON array', function(done) {
+    request(app)
+      .get('/api/settings')
+      .expect(200)
+      .expect('Content-Type', /json/)
+      .end(function(err, res) {
+        if (err) return done(err);
+        res.body.should.be.instanceof(Array);
+        done();
+      });
+  });
+});
\ No newline at end of file
index 546e97c..fd9d420 100644 (file)
@@ -1 +1,11 @@
-var _0x7661=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x6D\x6F\x74\x69\x6F\x6E\x62\x61\x72\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F\x3A\x61\x63\x74\x69\x6F\x6E\x2F\x3A\x73\x74\x61\x74\x65","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x63\x74\x69\x6F\x6E","\x67\x65\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x7661[0];var express=require(_0x7661[1]);var controller=require(_0x7661[2]);var auth=require(_0x7661[3]);var router=express.Router();router[_0x7661[7]](_0x7661[4],auth[_0x7661[5]](),controller[_0x7661[6]]);module[_0x7661[8]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./motionbar.controller');
+var auth = require('../../auth/auth.service');
+
+var router = express.Router();
+
+router.get('/:action/:state', auth.isAuthenticated(), controller.action);
+
+module.exports = router;
index 1a2c6d5..f0a79be 100644 (file)
@@ -1 +1,32 @@
-var _0x4d35=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x4D\x6F\x74\x69\x6F\x6E\x62\x61\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x61\x63\x74\x69\x6F\x6E","\x75\x73\x65\x72\x49\x64","\x71\x75\x65\x72\x79","\x55\x73\x65\x20\x75\x73\x65\x72\x49\x64","\x55\x73\x65\x72\x49\x64","\x62\x6F\x64\x79","\x70\x61\x72\x61\x6D\x73","\x73\x74\x61\x74\x65","\x41\x64\x6D\x69\x6E\x49\x64","\x69\x64","\x75\x73\x65\x72","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x63\x72\x65\x61\x74\x65"];_0x4d35[0];var _=require(_0x4d35[1]);var Motionbar=require(_0x4d35[3])[_0x4d35[2]];exports[_0x4d35[4]]=function(_0x6010x3,_0x6010x4){if(!_0x6010x3[_0x4d35[6]][_0x4d35[5]]){return handleError(_0x6010x4,{message:_0x4d35[7]})};_0x6010x3[_0x4d35[9]][_0x4d35[8]]=parseInt(_0x6010x3[_0x4d35[6]][_0x4d35[5]],10);_0x6010x3[_0x4d35[9]][_0x4d35[4]]=_0x6010x3[_0x4d35[10]][_0x4d35[4]];_0x6010x3[_0x4d35[9]][_0x4d35[11]]=_0x6010x3[_0x4d35[10]][_0x4d35[11]];_0x6010x3[_0x4d35[9]][_0x4d35[12]]=_0x6010x3[_0x4d35[14]][_0x4d35[13]];Motionbar[_0x4d35[19]](_0x6010x3[_0x4d35[9]])[_0x4d35[18]](function(_0x6010x6){return _0x6010x4[_0x4d35[17]](201)[_0x4d35[16]](_0x6010x6)})[_0x4d35[15]](function(_0x6010x5){return handleError(_0x6010x4,_0x6010x5)})};function handleError(_0x6010x4,_0x6010x5){return _0x6010x4[_0x4d35[17]](500)[_0x4d35[16]](_0x6010x5)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var Motionbar = require('../../models').Motionbar;
+
+// Get list of motionbars
+exports.action = function(req, res) {
+
+  if (!req.query.userId) {
+    return handleError(res, {
+      message: 'Use userId'
+    });
+  }
+
+  req.body.UserId = parseInt(req.query.userId, 10);
+  req.body.action = req.params.action;
+  req.body.state = req.params.state;
+  req.body.AdminId = req.user.id;
+
+  Motionbar
+    .create(req.body)
+    .then(function(action) {
+      return res.status(201).send(action);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index 2bede78..0eb15d4 100644 (file)
@@ -1 +1,27 @@
-var _0x5d55=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x4D\x6F\x74\x69\x6F\x6E\x62\x61\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x75\x73\x65\x72\x49\x64","\x55\x73\x65\x72\x49\x64","\x6D\x6F\x74\x69\x6F\x6E\x62\x61\x72\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x6D\x6F\x74\x69\x6F\x6E\x62\x61\x72\x3A\x72\x65\x6D\x6F\x76\x65"];_0x5d55[0];var Motionbar=require(_0x5d55[2])[_0x5d55[1]];exports[_0x5d55[3]]=function(_0xdafcx2){Motionbar[_0x5d55[4]](function(_0xdafcx3){onSave(_0xdafcx2,_0xdafcx3)});Motionbar[_0x5d55[5]](function(_0xdafcx3){onRemove(_0xdafcx2,_0xdafcx3)})};function onSave(_0xdafcx2,_0xdafcx3,_0xdafcx5){if(_0xdafcx2[_0x5d55[6]]==_0xdafcx3[_0x5d55[7]]){_0xdafcx2[_0x5d55[9]](_0x5d55[8],_0xdafcx3)}}function onRemove(_0xdafcx2,_0xdafcx3,_0xdafcx5){_0xdafcx2[_0x5d55[9]](_0x5d55[10],_0xdafcx3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var Motionbar = require('../../models').Motionbar;
+
+exports.register = function(socket) {
+  Motionbar.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  Motionbar.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  // doc.UserId is string. You don't use ===
+  if (socket.userId == doc.UserId) {
+    socket.emit('motionbar:save', doc);
+  }
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('motionbar:remove', doc);
+}
index fc63e66..bbbac7f 100644 (file)
@@ -1 +1,20 @@
-var _0xb24d=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x73\x68\x6F\x75\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x70\x70","\x73\x75\x70\x65\x72\x74\x65\x73\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x6D\x6F\x74\x69\x6F\x6E\x62\x61\x72","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x70\x6F\x6E\x64\x20\x77\x69\x74\x68\x20\x4A\x53\x4F\x4E\x20\x61\x72\x72\x61\x79","\x69\x6E\x73\x74\x61\x6E\x63\x65\x6F\x66","\x62\x65","\x62\x6F\x64\x79","\x65\x6E\x64","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x65\x78\x70\x65\x63\x74","\x2F\x61\x70\x69\x2F\x6D\x6F\x74\x69\x6F\x6E\x62\x61\x72","\x67\x65\x74"];_0xb24d[0];var should=require(_0xb24d[1]);var app=require(_0xb24d[2]);var request=require(_0xb24d[3]);describe(_0xb24d[4],function(){it(_0xb24d[5],function(_0xe853x4){request(app)[_0xb24d[13]](_0xb24d[12])[_0xb24d[11]](200)[_0xb24d[11]](_0xb24d[10],/json/)[_0xb24d[9]](function(_0xe853x5,_0xe853x6){if(_0xe853x5){return _0xe853x4(_0xe853x5)};_0xe853x6[_0xb24d[8]][_0xb24d[1]][_0xb24d[7]][_0xb24d[6]](Array);_0xe853x4()})})})
\ No newline at end of file
+'use strict';
+
+var should = require('should');
+var app = require('../../app');
+var request = require('supertest');
+
+describe('GET /api/motionbar', function() {
+
+  it('should respond with JSON array', function(done) {
+    request(app)
+      .get('/api/motionbar')
+      .expect(200)
+      .expect('Content-Type', /json/)
+      .end(function(err, res) {
+        if (err) return done(err);
+        res.body.should.be.instanceof(Array);
+        done();
+      });
+  });
+});
\ No newline at end of file
index a3d2dff..bdf03bc 100644 (file)
@@ -1 +1,17 @@
-var _0x7e9b=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x70\x61\x75\x73\x65\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0x7e9b[0];var express=require(_0x7e9b[1]);var auth=require(_0x7e9b[2]);var controller=require(_0x7e9b[3]);var router=express.Router();router[_0x7e9b[7]](_0x7e9b[4],auth[_0x7e9b[5]](),controller[_0x7e9b[6]]);router[_0x7e9b[7]](_0x7e9b[8],auth[_0x7e9b[5]](),controller[_0x7e9b[9]]);router[_0x7e9b[11]](_0x7e9b[4],auth[_0x7e9b[5]](),controller[_0x7e9b[10]]);router[_0x7e9b[13]](_0x7e9b[8],auth[_0x7e9b[5]](),controller[_0x7e9b[12]]);router[_0x7e9b[14]](_0x7e9b[8],auth[_0x7e9b[5]](),controller[_0x7e9b[12]]);router[_0x7e9b[16]](_0x7e9b[4],auth[_0x7e9b[5]](),controller[_0x7e9b[15]]);router[_0x7e9b[16]](_0x7e9b[8],auth[_0x7e9b[5]](),controller[_0x7e9b[17]]);module[_0x7e9b[18]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var auth = require('../../auth/auth.service');
+var controller = require('./pause.controller');
+
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), controller.index);
+router.get('/:id', auth.isAuthenticated(), controller.show);
+router.post('/', auth.isAuthenticated(), controller.create);
+router.put('/:id', auth.isAuthenticated(), controller.update);
+router.patch('/:id', auth.isAuthenticated(), controller.update);
+router.delete('/', auth.isAuthenticated(), controller.bulkDestroy);
+router.delete('/:id', auth.isAuthenticated(), controller.destroy);
+
+module.exports = router;
index 93596d9..84c022b 100644 (file)
@@ -1 +1,150 @@
-var _0x1e58=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x50\x61\x75\x73\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6A\x73\x6F\x6E","\x65\x6E\x64","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x73\x74\x72\x6F\x79","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64\x73","\x6C\x69\x6D\x69\x74","\x6F\x66\x66\x73\x65\x74","\x6F\x72\x64\x65\x72","\x77\x68\x65\x72\x65","\x25","\x66\x6F\x72\x45\x61\x63\x68"];_0x1e58[0];var _=require(_0x1e58[1]);var Util=require(_0x1e58[2]);var Pause=require(_0x1e58[4])[_0x1e58[3]];function handleError(_0x3ad2x5,_0x3ad2x6){_0x3ad2x6=_0x3ad2x6||500;return function(_0x3ad2x7){_0x3ad2x5[_0x1e58[6]](_0x3ad2x6)[_0x1e58[5]](_0x3ad2x7)}}function responseWithResult(_0x3ad2x5,_0x3ad2x6){_0x3ad2x6=_0x3ad2x6||200;return function(_0x3ad2x9){if(_0x3ad2x9){_0x3ad2x5[_0x1e58[6]](_0x3ad2x6)[_0x1e58[7]](_0x3ad2x9)}}}function handleEntityNotFound(_0x3ad2x5){return function(_0x3ad2x9){if(!_0x3ad2x9){_0x3ad2x5[_0x1e58[6]](404)[_0x1e58[8]]();return null};return _0x3ad2x9}}function saveUpdates(_0x3ad2xc){return function(_0x3ad2x9){return _0x3ad2x9[_0x1e58[10]](_0x3ad2xc)[_0x1e58[9]](function(_0x3ad2xd){return _0x3ad2xd})}}function removeEntity(_0x3ad2x5){return function(_0x3ad2x9){if(_0x3ad2x9){return _0x3ad2x9[_0x1e58[11]]()[_0x1e58[9]](function(){_0x3ad2x5[_0x1e58[6]](204)[_0x1e58[8]]()})}}}exports[_0x1e58[12]]=function(_0x3ad2xf,_0x3ad2x5){return Pause[_0x1e58[16]](Util[_0x1e58[15]](_0x3ad2xf[_0x1e58[14]]))[_0x1e58[9]](function(_0x3ad2x10){_0x3ad2x5[_0x1e58[6]](200)[_0x1e58[5]](_0x3ad2x10)})[_0x1e58[13]](function(_0x3ad2x7){return handleError(_0x3ad2x5,_0x3ad2x7)})};exports[_0x1e58[17]]=function(_0x3ad2xf,_0x3ad2x5){Pause[_0x1e58[20]](_0x3ad2xf[_0x1e58[19]][_0x1e58[18]])[_0x1e58[9]](handleEntityNotFound(_0x3ad2x5))[_0x1e58[9]](responseWithResult(_0x3ad2x5))[_0x1e58[13]](handleError(_0x3ad2x5))};exports[_0x1e58[21]]=function(_0x3ad2xf,_0x3ad2x5){Pause[_0x1e58[21]](_0x3ad2xf[_0x1e58[22]])[_0x1e58[9]](responseWithResult(_0x3ad2x5,201))[_0x1e58[13]](handleError(_0x3ad2x5))};exports[_0x1e58[23]]=function(_0x3ad2xf,_0x3ad2x5){if(_0x3ad2xf[_0x1e58[22]][_0x1e58[18]]){delete _0x3ad2xf[_0x1e58[22]][_0x1e58[18]]};Pause[_0x1e58[20]](_0x3ad2xf[_0x1e58[19]][_0x1e58[18]])[_0x1e58[9]](handleEntityNotFound(_0x3ad2x5))[_0x1e58[9]](saveUpdates(_0x3ad2xf[_0x1e58[22]]))[_0x1e58[9]](responseWithResult(_0x3ad2x5))[_0x1e58[13]](handleError(_0x3ad2x5))};exports[_0x1e58[11]]=function(_0x3ad2xf,_0x3ad2x5){Pause[_0x1e58[20]](_0x3ad2xf[_0x1e58[19]][_0x1e58[18]])[_0x1e58[9]](handleEntityNotFound(_0x3ad2x5))[_0x1e58[9]](removeEntity(_0x3ad2x5))[_0x1e58[13]](handleError(_0x3ad2x5))};exports[_0x1e58[24]]=function(_0x3ad2xf,_0x3ad2x5){return Pause[_0x1e58[11]]({where:{id:_0x3ad2xf[_0x1e58[14]][_0x1e58[26]]},individualHooks:true})[_0x1e58[9]](function(){return _0x3ad2x5[_0x1e58[25]](204)})[_0x1e58[13]](function(_0x3ad2x7){return handleError(_0x3ad2x5,_0x3ad2x7)})};function getQuery(_0x3ad2x12){var _0x3ad2x13={where:{}};_[_0x1e58[32]](_0x3ad2x12,function(_0x3ad2x14,_0x3ad2x15){switch(_0x3ad2x15){case _0x1e58[27]:;case _0x1e58[28]:;case _0x1e58[29]:_0x3ad2x13[_0x3ad2x15]=_0x3ad2x14;break;default:_0x3ad2x13[_0x1e58[30]][_0x3ad2x15]={$like:_0x1e58[31]+_0x3ad2x14+_0x1e58[31]}}});return _0x3ad2x13}
\ No newline at end of file
+/**
+ * Using Rails-like standard naming convention for endpoints.
+ * GET     /api/pauses              ->  index
+ * POST    /api/pauses              ->  create
+ * GET     /api/pauses/:id          ->  show
+ * PUT     /api/pauses/:id          ->  update
+ * DELETE  /api/pauses/:id          ->  destroy
+ */
+
+'use strict';
+
+
+var _ = require('lodash');
+var Util = require('../../config/util');
+
+var Pause = require('../../models').Pause;
+
+
+function handleError(res, statusCode) {
+  statusCode = statusCode || 500;
+  return function (err) {
+    res.status(statusCode).send(err);
+  };
+}
+
+function responseWithResult(res, statusCode) {
+  statusCode = statusCode || 200;
+  return function (entity) {
+    if (entity) {
+      res.status(statusCode).json(entity);
+    }
+  };
+}
+
+function handleEntityNotFound(res) {
+  return function (entity) {
+    if (!entity) {
+      res.status(404).end();
+      return null;
+    }
+    return entity;
+  };
+}
+
+function saveUpdates(updates) {
+  return function (entity) {
+    return entity.updateAttributes(updates)
+      .then(function (updated) {
+        return updated;
+      });
+  };
+}
+
+function removeEntity(res) {
+  return function (entity) {
+    if (entity) {
+      return entity.destroy()
+        .then(function () {
+          res.status(204).end();
+        });
+    }
+  };
+}
+
+// Gets a list of Pauses
+exports.index = function (req, res) {
+  return Pause
+    .findAndCountAll(Util.getQuery(req.query))
+    .then(function (result) {
+      res.status(200).send(result);
+    })
+    .catch(function (err) {
+      return handleError(res, err);
+    });
+}
+
+// Gets a single Pause from the DB
+exports.show = function (req, res) {
+  Pause.findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(responseWithResult(res))
+    .catch(handleError(res));
+}
+
+// Creates a new Pause in the DB
+exports.create = function (req, res) {
+  Pause.create(req.body)
+    .then(responseWithResult(res, 201))
+    .catch(handleError(res));
+}
+
+// Updates an existing Pause in the DB
+exports.update = function (req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  Pause.findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(saveUpdates(req.body))
+    .then(responseWithResult(res))
+    .catch(handleError(res));
+}
+
+// Deletes a Pause from the DB
+exports.destroy = function (req, res) {
+  Pause.findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(removeEntity(res))
+    .catch(handleError(res));
+}
+
+// Deletes a agent from the DB.
+exports.bulkDestroy = function (req, res) {
+
+  return Pause
+    .destroy({
+      where: {
+        id: req.query.ids
+      },
+      individualHooks: true
+    })
+    .then(function () {
+      return res.sendStatus(204);
+    })
+    .catch(function (err) {
+      return handleError(res, err);
+    });
+};
+
+function getQuery(query) {
+  var _query = {
+    where: {}
+  };
+
+  _.forEach(query, function (value, key) {
+    switch (key) {
+    case 'limit':
+    case 'offset':
+    case 'order':
+      _query[key] = value;
+      break;
+    default:
+      _query.where[key] = {
+        $like: '%' + value + '%'
+      };
+    }
+  });
+
+  return _query;
+}
index c33b0a6..fd1c7b0 100644 (file)
@@ -1 +1,24 @@
-var _0x7e30=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x50\x61\x75\x73\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x70\x61\x75\x73\x65\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x70\x61\x75\x73\x65\x3A\x72\x65\x6D\x6F\x76\x65"];_0x7e30[0];var Pause=require(_0x7e30[2])[_0x7e30[1]];exports[_0x7e30[3]]=function(_0xd583x2){Pause[_0x7e30[4]](function(_0xd583x3){onSave(_0xd583x2,_0xd583x3)});Pause[_0x7e30[5]](function(_0xd583x3){onRemove(_0xd583x2,_0xd583x3)})};function onSave(_0xd583x2,_0xd583x3,_0xd583x5){_0xd583x2[_0x7e30[7]](_0x7e30[6],_0xd583x3)}function onRemove(_0xd583x2,_0xd583x3,_0xd583x5){_0xd583x2[_0x7e30[7]](_0x7e30[8],_0xd583x3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var Pause = require('../../models').Pause;
+
+exports.register = function(socket) {
+  Pause.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  Pause.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+};
+
+function onSave(socket, doc, cb) {
+  socket.emit('pause:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('pause:remove', doc);
+}
index 5490a34..92aec80 100644 (file)
@@ -1 +1,16 @@
-var _0x297c=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x61\x67\x65\x6E\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x64\x65\x73\x63\x72\x69\x62\x65","\x64\x65\x73\x63\x72\x69\x62\x65","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x297c[0];var express=require(_0x297c[1]);var controller=require(_0x297c[2]);var router=express.Router();router[_0x297c[5]](_0x297c[3],controller[_0x297c[4]]);router[_0x297c[5]](_0x297c[6],controller[_0x297c[7]]);router[_0x297c[5]](_0x297c[8],controller[_0x297c[9]]);router[_0x297c[11]](_0x297c[3],controller[_0x297c[10]]);router[_0x297c[13]](_0x297c[8],controller[_0x297c[12]]);router[_0x297c[14]](_0x297c[8],controller[_0x297c[12]]);router[_0x297c[16]](_0x297c[8],controller[_0x297c[15]]);module[_0x297c[17]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./report_agent.controller');
+
+var router = express.Router();
+
+router.get('/', controller.index);
+router.get('/describe', controller.describe);
+router.get('/:id', controller.show);
+router.post('/', controller.create);
+router.put('/:id', controller.update);
+router.patch('/:id', controller.update);
+router.delete('/:id', controller.destroy);
+
+module.exports = router;
index c43a86d..1b848da 100644 (file)
@@ -1 +1,106 @@
-var _0x5c5b=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x52\x65\x70\x6F\x72\x74\x41\x67\x65\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x52\x65\x70\x6F\x72\x74\x41\x67\x65\x6E\x74\x48\x69\x73\x74\x6F\x72\x79","\x68\x69\x73\x74\x6F\x72\x79","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6C\x6C","\x64\x65\x73\x63\x72\x69\x62\x65","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79"];_0x5c5b[0];var _=require(_0x5c5b[1]);var ReportAgent=require(_0x5c5b[3])[_0x5c5b[2]];var ReportAgentHistory=require(_0x5c5b[3])[_0x5c5b[5]][_0x5c5b[4]];exports[_0x5c5b[6]]=function(_0x468fx4,_0x468fx5){ReportAgent[_0x5c5b[11]]()[_0x5c5b[10]](function(_0x468fx7){return _0x468fx5[_0x5c5b[9]](200)[_0x5c5b[8]](_0x468fx7)})[_0x5c5b[7]](function(_0x468fx6){return handleError(_0x468fx5,_0x468fx6)})};exports[_0x5c5b[12]]=function(_0x468fx4,_0x468fx5){ReportAgentHistory[_0x5c5b[12]]()[_0x5c5b[10]](function(_0x468fx8){return _0x468fx5[_0x5c5b[9]](200)[_0x5c5b[8]](_0x468fx8)})[_0x5c5b[7]](function(_0x468fx6){return handleError(_0x468fx5,_0x468fx6)})};exports[_0x5c5b[13]]=function(_0x468fx4,_0x468fx5){ReportAgent[_0x5c5b[17]](_0x468fx4[_0x5c5b[16]][_0x5c5b[15]])[_0x5c5b[10]](function(_0x468fx9){if(!_0x468fx9){return _0x468fx5[_0x5c5b[14]](404)};return _0x468fx5[_0x5c5b[8]](_0x468fx9)})[_0x5c5b[7]](function(_0x468fx6){return handleError(_0x468fx5,_0x468fx6)})};exports[_0x5c5b[18]]=function(_0x468fx4,_0x468fx5){ReportAgent[_0x5c5b[18]](_0x468fx4[_0x5c5b[19]])[_0x5c5b[10]](function(_0x468fx9){return _0x468fx5[_0x5c5b[9]](201)[_0x5c5b[8]](_0x468fx9)})[_0x5c5b[7]](function(_0x468fx6){return handleError(_0x468fx5,_0x468fx6)})};exports[_0x5c5b[20]]=function(_0x468fx4,_0x468fx5){if(_0x468fx4[_0x5c5b[19]][_0x5c5b[15]]){delete _0x468fx4[_0x5c5b[19]][_0x5c5b[15]]};ReportAgent[_0x5c5b[17]](_0x468fx4[_0x5c5b[16]][_0x5c5b[15]])[_0x5c5b[10]](function(_0x468fx9){if(!_0x468fx9){return _0x468fx5[_0x5c5b[14]](404)};var _0x468fxa=_[_0x5c5b[21]](_0x468fx9,_0x468fx4[_0x5c5b[19]]);_0x468fxa[_0x5c5b[22]]()[_0x5c5b[10]](function(){return _0x468fx5[_0x5c5b[9]](200)[_0x5c5b[8]](_0x468fx9)})[_0x5c5b[7]](function(_0x468fx6){return handleError(_0x468fx5,_0x468fx6)})})[_0x5c5b[7]](function(_0x468fx6){return handleError(_0x468fx5,_0x468fx6)})};exports[_0x5c5b[23]]=function(_0x468fx4,_0x468fx5){ReportAgent[_0x5c5b[17]](_0x468fx4[_0x5c5b[16]][_0x5c5b[15]])[_0x5c5b[10]](function(_0x468fx9){if(!_0x468fx9){return _0x468fx5[_0x5c5b[14]](404)};_0x468fx9[_0x5c5b[23]]()[_0x5c5b[10]](function(){return _0x468fx5[_0x5c5b[14]](204)})[_0x5c5b[7]](function(_0x468fx6){return handleError(_0x468fx5,_0x468fx6)})})[_0x5c5b[7]](function(_0x468fx6){return handleError(_0x468fx5,_0x468fx6)})};function handleError(_0x468fx5,_0x468fx6){return _0x468fx5[_0x5c5b[9]](500)[_0x5c5b[8]](_0x468fx6)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var ReportAgent = require('../../models').ReportAgent;
+var ReportAgentHistory = require('../../models').history.ReportAgentHistory;
+
+// Get list of report_agents
+exports.index = function(req, res) {
+  ReportAgent
+    .findAll()
+    .then(function(report_agents) {
+      return res.status(200).send(report_agents);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get list of fields
+exports.describe = function(req, res) {
+  ReportAgentHistory
+    .describe()
+    .then(function(fields) {
+      return res.status(200).send(fields);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single report_agent
+exports.show = function(req, res) {
+  ReportAgent
+    .findById(req.params.id)
+    .then(function(report_agent) {
+      if (!report_agent) {
+        return res.sendStatus(404);
+      }
+      return res.send(report_agent);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new report_agent in the DB.
+exports.create = function(req, res) {
+  ReportAgent
+    .create(req.body)
+    .then(function(report_agent) {
+      return res.status(201).send(report_agent);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Updates an existing report_agent in the DB.
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  ReportAgent
+    .findById(req.params.id)
+    .then(function(report_agent) {
+      if (!report_agent) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(report_agent, req.body);
+      updated.save()
+        .then(function() {
+          return res.status(200).send(report_agent);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a report_agent from the DB.
+exports.destroy = function(req, res) {
+  ReportAgent
+    .findById(req.params.id)
+    .then(function(report_agent) {
+      if (!report_agent) {
+        return res.sendStatus(404);
+      }
+      report_agent.destroy()
+        .then(function() {
+          return res.sendStatus(204);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index b54d349..86cb2bb 100644 (file)
@@ -1 +1,30 @@
-var _0x57b8=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x52\x65\x70\x6F\x72\x74\x41\x67\x65\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x6E\x61\x6D\x65","\x6D\x65\x6D\x62\x65\x72\x6E\x61\x6D\x65","\x72\x6F\x6C\x65","\x61\x64\x6D\x69\x6E","\x72\x65\x70\x6F\x72\x74\x5F\x61\x67\x65\x6E\x74\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x72\x65\x70\x6F\x72\x74\x5F\x61\x67\x65\x6E\x74\x3A\x72\x65\x6D\x6F\x76\x65"];_0x57b8[0];var ReportAgent=require(_0x57b8[2])[_0x57b8[1]];exports[_0x57b8[3]]=function(_0x1485x2){ReportAgent[_0x57b8[4]](function(_0x1485x3){onSave(_0x1485x2,_0x1485x3)});ReportAgent[_0x57b8[5]](function(_0x1485x3){onSave(_0x1485x2,_0x1485x3)});ReportAgent[_0x57b8[6]](function(_0x1485x3){onRemove(_0x1485x2,_0x1485x3)})};function onSave(_0x1485x2,_0x1485x3,_0x1485x5){if(_0x1485x2[_0x57b8[7]]===_0x1485x3[_0x57b8[8]]||_0x1485x2[_0x57b8[9]]===_0x57b8[10]){_0x1485x2[_0x57b8[12]](_0x57b8[11],_0x1485x3)}}function onRemove(_0x1485x2,_0x1485x3,_0x1485x5){_0x1485x2[_0x57b8[12]](_0x57b8[13],_0x1485x3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var ReportAgent = require('../../models').ReportAgent;
+
+exports.register = function(socket) {
+  ReportAgent.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  ReportAgent.afterUpdate(function(doc) {
+    onSave(socket, doc);
+  });
+  ReportAgent.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  if (socket.name === doc.membername || socket.role === 'admin') {
+    socket.emit('report_agent:save', doc);
+  }
+
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('report_agent:remove', doc);
+}
index 51e097b..7701153 100644 (file)
@@ -1 +1,17 @@
-var _0x33ce=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x63\x68\x61\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x2F\x3A\x69\x64\x2F\x61\x63\x63\x65\x70\x74\x2F\x3A\x75\x6E\x69\x71\x75\x65\x69\x64","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x63\x63\x65\x70\x74","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x33ce[0];var express=require(_0x33ce[1]);var controller=require(_0x33ce[2]);var auth=require(_0x33ce[3]);var router=express.Router();router[_0x33ce[6]](_0x33ce[4],controller[_0x33ce[5]]);router[_0x33ce[6]](_0x33ce[7],controller[_0x33ce[8]]);router[_0x33ce[6]](_0x33ce[9],auth[_0x33ce[10]](),controller[_0x33ce[11]]);router[_0x33ce[13]](_0x33ce[4],controller[_0x33ce[12]]);router[_0x33ce[15]](_0x33ce[7],controller[_0x33ce[14]]);router[_0x33ce[16]](_0x33ce[7],controller[_0x33ce[14]]);router[_0x33ce[18]](_0x33ce[7],controller[_0x33ce[17]]);module[_0x33ce[19]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./report_chat.controller');
+var auth = require('../../auth/auth.service');
+
+var router = express.Router();
+
+router.get('/', controller.index);
+router.get('/:id', controller.show);
+router.get('/:id/accept/:uniqueid', auth.isAuthenticated(), controller.accept);
+router.post('/', controller.create);
+router.put('/:id', controller.update);
+router.patch('/:id', controller.update);
+router.delete('/:id', controller.destroy);
+
+module.exports = router;
index d3619a2..25acee0 100644 (file)
@@ -1 +1,156 @@
-var _0x108f=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x6D\x64\x35","\x52\x65\x70\x6F\x72\x74\x43\x68\x61\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x43\x68\x61\x74\x52\x6F\x6F\x6D","\x43\x68\x61\x74\x56\x69\x73\x69\x74\x6F\x72","\x55\x73\x65\x72","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x61\x63\x63\x65\x70\x74","\x2E","\x73\x70\x6C\x69\x74","\x75\x6E\x69\x71\x75\x65\x69\x64","\x61\x63\x63\x65\x70\x74\x65\x64","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x62\x61\x73\x65\x36\x34","\x75\x73\x65\x72","\x73\x74\x72\x69\x6E\x67\x69\x66\x79","\x75\x70\x64\x61\x74\x65","\x61\x64\x64\x55\x73\x65\x72","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x64\x65\x73\x74\x72\x6F\x79"];_0x108f[0];var _=require(_0x108f[1]);var md5=require(_0x108f[2]);var ReportChat=require(_0x108f[4])[_0x108f[3]];var ChatRoom=require(_0x108f[4])[_0x108f[5]];var ChatVisitor=require(_0x108f[4])[_0x108f[6]];var Agent=require(_0x108f[4])[_0x108f[7]];var sequelize=require(_0x108f[4])[_0x108f[8]];var Util=require(_0x108f[9]);exports[_0x108f[10]]=function(_0x9ca6x9,_0x9ca6xa,_0x9ca6xb){return ReportChat[_0x108f[17]](Util[_0x108f[16]](_0x9ca6x9[_0x108f[15]]))[_0x108f[14]](function(_0x9ca6xd){_0x9ca6xa[_0x108f[13]](200)[_0x108f[12]](_0x9ca6xd)})[_0x108f[11]](function(_0x9ca6xc){return handleError(_0x9ca6xa,_0x9ca6xc)})};exports[_0x108f[18]]=function(_0x9ca6x9,_0x9ca6xa){return ReportChat[_0x108f[22]](_0x9ca6x9[_0x108f[21]][_0x108f[20]])[_0x108f[14]](function(_0x9ca6xe){if(!_0x9ca6xe){return _0x9ca6xa[_0x108f[19]](404)};return _0x9ca6xa[_0x108f[12]](_0x9ca6xe)})[_0x108f[11]](function(_0x9ca6xc){return handleError(_0x9ca6xa,_0x9ca6xc)})};exports[_0x108f[23]]=function(_0x9ca6x9,_0x9ca6xa){var _0x9ca6xf=_0x9ca6x9[_0x108f[21]][_0x108f[26]][_0x108f[25]](_0x108f[24])[1];var _0x9ca6x10;return ChatRoom[_0x108f[22]](_0x9ca6xf)[_0x108f[14]](function(_0x9ca6x13){_0x9ca6x10=_0x9ca6x13;return _0x9ca6x10[_0x108f[34]](_0x9ca6x9[_0x108f[31]][_0x108f[20]],{individualHooks:true})})[_0x108f[14]](function(){return _0x9ca6x10[_0x108f[33]]({token:md5(JSON[_0x108f[32]]([_0x9ca6x9[_0x108f[31]][_0x108f[20]]])).toString(_0x108f[30])})})[_0x108f[14]](function(){return ReportChat[_0x108f[22]](_0x9ca6x9[_0x108f[21]][_0x108f[20]])})[_0x108f[14]](function(_0x9ca6xe){if(!_0x9ca6xe){return _0x9ca6xa[_0x108f[19]](404)};var _0x9ca6x12=_[_0x108f[28]](_0x9ca6xe,{connectid:_0x9ca6x9[_0x108f[21]][_0x108f[26]]});return _0x9ca6x12[_0x108f[29]]()})[_0x108f[14]](function(){return ChatVisitor[_0x108f[22]](_0x9ca6x10.ChatVisitorId)})[_0x108f[14]](function(_0x9ca6x11){if(!_0x9ca6x11){return _0x9ca6xa[_0x108f[19]](404)};var _0x9ca6x12=_[_0x108f[28]](_0x9ca6x11,{status:_0x108f[27]});return _0x9ca6x12[_0x108f[29]]()})[_0x108f[14]](function(){return _0x9ca6xa[_0x108f[19]](200)})[_0x108f[11]](function(_0x9ca6xc){return handleError(_0x9ca6xa,_0x9ca6xc)})};exports[_0x108f[35]]=function(_0x9ca6x9,_0x9ca6xa){return ReportChat[_0x108f[35]](_0x9ca6x9[_0x108f[36]])[_0x108f[14]](function(_0x9ca6xe){return _0x9ca6xa[_0x108f[13]](201)[_0x108f[12]](_0x9ca6xe)})[_0x108f[11]](function(_0x9ca6xc){return handleError(_0x9ca6xa,_0x9ca6xc)})};exports[_0x108f[33]]=function(_0x9ca6x9,_0x9ca6xa,_0x9ca6xb){if(_0x9ca6x9[_0x108f[36]][_0x108f[20]]){delete _0x9ca6x9[_0x108f[36]][_0x108f[20]]};return ReportChat[_0x108f[22]](_0x9ca6x9[_0x108f[21]][_0x108f[20]])[_0x108f[14]](function(_0x9ca6xe){if(!_0x9ca6xe){return _0x9ca6xa[_0x108f[19]](404)};var _0x9ca6x12=_[_0x108f[28]](_0x9ca6xe,_0x9ca6x9[_0x108f[36]]);return _0x9ca6x12[_0x108f[29]]()[_0x108f[14]](function(){return _0x9ca6xa[_0x108f[13]](200)[_0x108f[12]](_0x9ca6xe)})})[_0x108f[11]](sequelize.ValidationError,function(_0x9ca6xc){return handleError(_0x9ca6xa,_0x9ca6xc)})[_0x108f[11]](function(_0x9ca6xc){return handleError(_0x9ca6xa,_0x9ca6xc)})};exports[_0x108f[37]]=function(_0x9ca6x9,_0x9ca6xa){ReportChat[_0x108f[22]](_0x9ca6x9[_0x108f[21]][_0x108f[20]])[_0x108f[14]](function(_0x9ca6xe){if(!_0x9ca6xe){return _0x9ca6xa[_0x108f[19]](404)};_0x9ca6xe[_0x108f[37]]()[_0x108f[14]](function(){return _0x9ca6xa[_0x108f[19]](204)})[_0x108f[11]](function(_0x9ca6xc){return handleError(_0x9ca6xa,_0x9ca6xc)})})[_0x108f[11]](function(_0x9ca6xc){return handleError(_0x9ca6xa,_0x9ca6xc)})};function handleError(_0x9ca6xa,_0x9ca6xc){return _0x9ca6xa[_0x108f[13]](500)[_0x108f[12]](_0x9ca6xc)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var md5 = require('md5');
+
+var ReportChat = require('../../models').ReportChat;
+var ChatRoom = require('../../models').ChatRoom;
+var ChatVisitor = require('../../models').ChatVisitor;
+var Agent = require('../../models').User;
+var sequelize = require('../../models').sequelize;
+
+var Util = require('../../config/util');
+
+// Get list of agents
+exports.index = function(req, res, next) {
+  return ReportChat
+    .findAndCountAll(Util.getQuery(req.query))
+    .then(function(result) {
+      res.status(200).send(result);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+// Ge
+// Get a single reportChat
+exports.show = function(req, res) {
+  return ReportChat
+    .findById(req.params.id)
+    .then(function(reportChat) {
+      if (!reportChat) {
+        return res.sendStatus(404);
+      }
+      return res.send(reportChat);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single reportMail
+exports.accept = function(req, res) {
+  var _roomid = req.params.uniqueid.split('.')[1];
+  var _chatRoom;
+
+  return ChatRoom
+    .findById(_roomid)
+    .then(function(chatRoom) {
+      _chatRoom = chatRoom;
+      return _chatRoom
+        .addUser(req.user.id, {
+          individualHooks: true
+        });
+    })
+    .then(function() {
+      return _chatRoom
+        .update({
+          token: md5(JSON.stringify([req.user.id])).toString('base64')
+        })
+    })
+    .then(function() {
+      return ReportChat
+        .findById(req.params.id);
+    })
+    .then(function(reportChat) {
+      if (!reportChat) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(reportChat, {
+        connectid: req.params.uniqueid
+      });
+      return updated.save();
+    })
+    .then(function() {
+      return ChatVisitor.findById(_chatRoom.ChatVisitorId);
+    })
+    .then(function(chatVisitor) {
+      if (!chatVisitor) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(chatVisitor, {
+        status: 'accepted'
+      });
+      return updated.save();
+    })
+    .then(function() {
+      return res.sendStatus(200);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new reportChat in the DB.
+exports.create = function(req, res) {
+  return ReportChat
+    .create(req.body)
+    .then(function(reportChat) {
+      return res.status(201).send(reportChat);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Updates an existing reportChat in the DB.
+exports.update = function(req, res, next) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+
+  return ReportChat
+    .findById(req.params.id)
+    .then(function(reportChat) {
+      if (!reportChat) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(reportChat, req.body);
+      return updated
+        .save()
+        .then(function() {
+          return res.status(200).send(reportChat);
+        });
+    })
+    .catch(sequelize.ValidationError, function(err) {
+      return handleError(res, err);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a reportChat from the DB.
+exports.destroy = function(req, res) {
+  ReportChat
+    .findById(req.params.id)
+    .then(function(reportChat) {
+      if (!reportChat) {
+        return res.sendStatus(404);
+      }
+      reportChat.destroy()
+        .then(function() {
+          return res.sendStatus(204);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index ccba5b3..dd9728d 100644 (file)
@@ -1 +1,35 @@
-var _0x7ccb=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x52\x65\x70\x6F\x72\x74\x43\x68\x61\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x6E\x61\x6D\x65","\x61\x67\x65\x6E\x74\x6E\x61\x6D\x65","\x72\x6F\x6C\x65","\x61\x64\x6D\x69\x6E","\x72\x65\x70\x6F\x72\x74\x5F\x63\x68\x61\x74\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x72\x65\x70\x6F\x72\x74\x5F\x63\x68\x61\x74\x3A\x75\x70\x64\x61\x74\x65","\x72\x65\x70\x6F\x72\x74\x5F\x63\x68\x61\x74\x3A\x72\x65\x6D\x6F\x76\x65"];_0x7ccb[0];var ReportChat=require(_0x7ccb[2])[_0x7ccb[1]];exports[_0x7ccb[3]]=function(_0x6341x2){ReportChat[_0x7ccb[4]](function(_0x6341x3){onSave(_0x6341x2,_0x6341x3)});ReportChat[_0x7ccb[5]](function(_0x6341x3){onUpdate(_0x6341x2,_0x6341x3)});ReportChat[_0x7ccb[6]](function(_0x6341x3){onRemove(_0x6341x2,_0x6341x3)})};function onSave(_0x6341x2,_0x6341x3,_0x6341x5){if(_0x6341x2[_0x7ccb[7]]===_0x6341x3[_0x7ccb[8]]||_0x6341x2[_0x7ccb[9]]===_0x7ccb[10]){_0x6341x2[_0x7ccb[12]](_0x7ccb[11],_0x6341x3)}}function onUpdate(_0x6341x2,_0x6341x3,_0x6341x5){if(_0x6341x2[_0x7ccb[7]]===_0x6341x3[_0x7ccb[8]]||_0x6341x2[_0x7ccb[9]]===_0x7ccb[10]){_0x6341x2[_0x7ccb[12]](_0x7ccb[13],_0x6341x3)}}function onRemove(_0x6341x2,_0x6341x3,_0x6341x5){_0x6341x2[_0x7ccb[12]](_0x7ccb[14],_0x6341x3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var ReportChat = require('../../models').ReportChat;
+
+exports.register = function(socket) {
+  ReportChat.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  ReportChat.afterUpdate(function(doc) {
+    onUpdate(socket, doc);
+  });
+  ReportChat.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  if (socket.name === doc.agentname || socket.role === 'admin') {
+    socket.emit('report_chat:save', doc);
+  }
+}
+
+function onUpdate(socket, doc, cb) {
+  if (socket.name === doc.agentname || socket.role === 'admin') {
+    socket.emit('report_chat:update', doc);
+  }
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('report_chat:remove', doc);
+}
index 754b3e7..030bd33 100644 (file)
@@ -1 +1,16 @@
-var _0x2ef1=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x63\x68\x61\x74\x5F\x73\x65\x73\x73\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x64\x65\x73\x63\x72\x69\x62\x65","\x64\x65\x73\x63\x72\x69\x62\x65","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x2ef1[0];var express=require(_0x2ef1[1]);var controller=require(_0x2ef1[2]);var router=express.Router();router[_0x2ef1[5]](_0x2ef1[3],controller[_0x2ef1[4]]);router[_0x2ef1[5]](_0x2ef1[6],controller[_0x2ef1[7]]);router[_0x2ef1[5]](_0x2ef1[8],controller[_0x2ef1[9]]);router[_0x2ef1[11]](_0x2ef1[3],controller[_0x2ef1[10]]);router[_0x2ef1[13]](_0x2ef1[8],controller[_0x2ef1[12]]);router[_0x2ef1[14]](_0x2ef1[8],controller[_0x2ef1[12]]);router[_0x2ef1[16]](_0x2ef1[8],controller[_0x2ef1[15]]);module[_0x2ef1[17]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./report_chat_session.controller');
+
+var router = express.Router();
+
+router.get('/', controller.index);
+router.get('/describe', controller.describe);
+router.get('/:id', controller.show);
+router.post('/', controller.create);
+router.put('/:id', controller.update);
+router.patch('/:id', controller.update);
+router.delete('/:id', controller.destroy);
+
+module.exports = router;
index 3fafc21..c3cd755 100644 (file)
@@ -1 +1,107 @@
-var _0x6eba=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x52\x65\x70\x6F\x72\x74\x43\x68\x61\x74\x53\x65\x73\x73\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x52\x65\x70\x6F\x72\x74\x43\x68\x61\x74\x53\x65\x73\x73\x69\x6F\x6E\x48\x69\x73\x74\x6F\x72\x79","\x68\x69\x73\x74\x6F\x72\x79","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x64\x65\x73\x63\x72\x69\x62\x65","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79"];_0x6eba[0];var _=require(_0x6eba[1]);var ReportChatSession=require(_0x6eba[3])[_0x6eba[2]];var ReportChatSessionHistory=require(_0x6eba[3])[_0x6eba[5]][_0x6eba[4]];var Util=require(_0x6eba[6]);exports[_0x6eba[7]]=function(_0x6d6fx5,_0x6d6fx6,_0x6d6fx7){return ReportChatSession[_0x6eba[14]](Util[_0x6eba[13]](_0x6d6fx5[_0x6eba[12]]))[_0x6eba[11]](function(_0x6d6fx9){_0x6d6fx6[_0x6eba[10]](200)[_0x6eba[9]](_0x6d6fx9)})[_0x6eba[8]](function(_0x6d6fx8){return handleError(_0x6d6fx6,_0x6d6fx8)})};exports[_0x6eba[15]]=function(_0x6d6fx5,_0x6d6fx6){return ReportChatSessionHistory[_0x6eba[15]]()[_0x6eba[11]](function(_0x6d6fxa){return _0x6d6fx6[_0x6eba[10]](200)[_0x6eba[9]](_0x6d6fxa)})[_0x6eba[8]](function(_0x6d6fx8){return handleError(_0x6d6fx6,_0x6d6fx8)})};exports[_0x6eba[16]]=function(_0x6d6fx5,_0x6d6fx6){return ReportChatSession[_0x6eba[20]](_0x6d6fx5[_0x6eba[19]][_0x6eba[18]])[_0x6eba[11]](function(_0x6d6fxb){if(!_0x6d6fxb){return _0x6d6fx6[_0x6eba[17]](404)};return _0x6d6fx6[_0x6eba[9]](_0x6d6fxb)})[_0x6eba[8]](function(_0x6d6fx8){return handleError(_0x6d6fx6,_0x6d6fx8)})};exports[_0x6eba[21]]=function(_0x6d6fx5,_0x6d6fx6){return ReportChatSession[_0x6eba[21]](_0x6d6fx5[_0x6eba[22]])[_0x6eba[11]](function(_0x6d6fxb){return _0x6d6fx6[_0x6eba[10]](201)[_0x6eba[9]](_0x6d6fxb)})[_0x6eba[8]](function(_0x6d6fx8){return handleError(_0x6d6fx6,_0x6d6fx8)})};exports[_0x6eba[23]]=function(_0x6d6fx5,_0x6d6fx6){if(_0x6d6fx5[_0x6eba[22]][_0x6eba[18]]){delete _0x6d6fx5[_0x6eba[22]][_0x6eba[18]]};return ReportChatSession[_0x6eba[20]](_0x6d6fx5[_0x6eba[19]][_0x6eba[18]])[_0x6eba[11]](function(_0x6d6fxb){if(!_0x6d6fxb){return _0x6d6fx6[_0x6eba[17]](404)};var _0x6d6fxc=_[_0x6eba[24]](_0x6d6fxb,_0x6d6fx5[_0x6eba[22]]);_0x6d6fxc[_0x6eba[25]]()[_0x6eba[11]](function(){return _0x6d6fx6[_0x6eba[10]](200)[_0x6eba[9]](_0x6d6fxb)})[_0x6eba[8]](function(_0x6d6fx8){return handleError(_0x6d6fx6,_0x6d6fx8)})})[_0x6eba[8]](function(_0x6d6fx8){return handleError(_0x6d6fx6,_0x6d6fx8)})};exports[_0x6eba[26]]=function(_0x6d6fx5,_0x6d6fx6){return ReportChatSession[_0x6eba[20]](_0x6d6fx5[_0x6eba[19]][_0x6eba[18]])[_0x6eba[11]](function(_0x6d6fxb){if(!_0x6d6fxb){return _0x6d6fx6[_0x6eba[17]](404)};_0x6d6fxb[_0x6eba[26]]()[_0x6eba[11]](function(){return _0x6d6fx6[_0x6eba[17]](204)})[_0x6eba[8]](function(_0x6d6fx8){return handleError(_0x6d6fx6,_0x6d6fx8)})})[_0x6eba[8]](function(_0x6d6fx8){return handleError(_0x6d6fx6,_0x6d6fx8)})};function handleError(_0x6d6fx6,_0x6d6fx8){return _0x6d6fx6[_0x6eba[10]](500)[_0x6eba[9]](_0x6d6fx8)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var ReportChatSession = require('../../models').ReportChatSession;
+var ReportChatSessionHistory = require('../../models').history.ReportChatSessionHistory;
+
+var Util = require('../../config/util');
+
+// Get list of agents
+exports.index = function(req, res, next) {
+  return ReportChatSession
+    .findAndCountAll(Util.getQuery(req.query))
+    .then(function(result) {
+      res.status(200).send(result);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+// Get list of fields
+exports.describe = function(req, res) {
+  return ReportChatSessionHistory
+    .describe()
+    .then(function(fields) {
+      return res.status(200).send(fields);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single report_chat_session
+exports.show = function(req, res) {
+  return ReportChatSession
+    .findById(req.params.id)
+    .then(function(report_chat_session) {
+      if (!report_chat_session) {
+        return res.sendStatus(404);
+      }
+      return res.send(report_chat_session);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new report_chat_session in the DB.
+exports.create = function(req, res) {
+  return ReportChatSession
+    .create(req.body)
+    .then(function(report_chat_session) {
+      return res.status(201).send(report_chat_session);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Updates an existing report_chat_session in the DB.
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  return ReportChatSession
+    .findById(req.params.id)
+    .then(function(report_chat_session) {
+      if (!report_chat_session) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(report_chat_session, req.body);
+      updated.save()
+        .then(function() {
+          return res.status(200).send(report_chat_session);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a report_chat_session from the DB.
+exports.destroy = function(req, res) {
+  return ReportChatSession
+    .findById(req.params.id)
+    .then(function(report_chat_session) {
+      if (!report_chat_session) {
+        return res.sendStatus(404);
+      }
+      report_chat_session.destroy()
+        .then(function() {
+          return res.sendStatus(204);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index e30b6b9..a378e10 100644 (file)
@@ -1 +1,27 @@
-var _0xcf95=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x52\x65\x70\x6F\x72\x74\x43\x68\x61\x74\x53\x65\x73\x73\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x72\x65\x70\x6F\x72\x74\x5F\x63\x68\x61\x74\x5F\x73\x65\x73\x73\x69\x6F\x6E\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x72\x65\x70\x6F\x72\x74\x5F\x63\x68\x61\x74\x5F\x73\x65\x73\x73\x69\x6F\x6E\x3A\x72\x65\x6D\x6F\x76\x65"];_0xcf95[0];var ReportChatSession=require(_0xcf95[2])[_0xcf95[1]];exports[_0xcf95[3]]=function(_0x2397x2){ReportChatSession[_0xcf95[4]](function(_0x2397x3){onSave(_0x2397x2,_0x2397x3)});ReportChatSession[_0xcf95[5]](function(_0x2397x3){onSave(_0x2397x2,_0x2397x3)});ReportChatSession[_0xcf95[6]](function(_0x2397x3){onRemove(_0x2397x2,_0x2397x3)})};function onSave(_0x2397x2,_0x2397x3,_0x2397x5){_0x2397x2[_0xcf95[8]](_0xcf95[7],_0x2397x3)}function onRemove(_0x2397x2,_0x2397x3,_0x2397x5){_0x2397x2[_0xcf95[8]](_0xcf95[9],_0x2397x3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var ReportChatSession = require('../../models').ReportChatSession;
+
+exports.register = function(socket) {
+  ReportChatSession.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  ReportChatSession.afterUpdate(function(doc) {
+    onSave(socket, doc);
+  });
+  ReportChatSession.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('report_chat_session:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('report_chat_session:remove', doc);
+}
index 017c000..451980f 100644 (file)
@@ -1 +1,16 @@
-var _0x7918=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x64\x65\x73\x63\x72\x69\x62\x65","\x64\x65\x73\x63\x72\x69\x62\x65","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x7918[0];var express=require(_0x7918[1]);var controller=require(_0x7918[2]);var router=express.Router();router[_0x7918[5]](_0x7918[3],controller[_0x7918[4]]);router[_0x7918[5]](_0x7918[6],controller[_0x7918[7]]);router[_0x7918[5]](_0x7918[8],controller[_0x7918[9]]);router[_0x7918[11]](_0x7918[3],controller[_0x7918[10]]);router[_0x7918[13]](_0x7918[8],controller[_0x7918[12]]);router[_0x7918[14]](_0x7918[8],controller[_0x7918[12]]);router[_0x7918[16]](_0x7918[8],controller[_0x7918[15]]);module[_0x7918[17]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./report_integration.controller');
+
+var router = express.Router();
+
+router.get('/', controller.index);
+router.get('/describe', controller.describe);
+router.get('/:id', controller.show);
+router.post('/', controller.create);
+router.put('/:id', controller.update);
+router.patch('/:id', controller.update);
+router.delete('/:id', controller.destroy);
+
+module.exports = router;
index a373b92..6fc6afb 100644 (file)
@@ -1 +1,106 @@
-var _0xd501=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x52\x65\x70\x6F\x72\x74\x49\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x52\x65\x70\x6F\x72\x74\x49\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x48\x69\x73\x74\x6F\x72\x79","\x68\x69\x73\x74\x6F\x72\x79","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6C\x6C","\x64\x65\x73\x63\x72\x69\x62\x65","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79"];_0xd501[0];var _=require(_0xd501[1]);var ReportIntegration=require(_0xd501[3])[_0xd501[2]];var ReportIntegrationHistory=require(_0xd501[3])[_0xd501[5]][_0xd501[4]];exports[_0xd501[6]]=function(_0x997cx4,_0x997cx5){ReportIntegration[_0xd501[11]]()[_0xd501[10]](function(_0x997cx7){return _0x997cx5[_0xd501[9]](200)[_0xd501[8]](_0x997cx7)})[_0xd501[7]](function(_0x997cx6){return handleError(_0x997cx5,_0x997cx6)})};exports[_0xd501[12]]=function(_0x997cx4,_0x997cx5){ReportIntegrationHistory[_0xd501[12]]()[_0xd501[10]](function(_0x997cx8){return _0x997cx5[_0xd501[9]](200)[_0xd501[8]](_0x997cx8)})[_0xd501[7]](function(_0x997cx6){return handleError(_0x997cx5,_0x997cx6)})};exports[_0xd501[13]]=function(_0x997cx4,_0x997cx5){ReportIntegration[_0xd501[17]](_0x997cx4[_0xd501[16]][_0xd501[15]])[_0xd501[10]](function(_0x997cx9){if(!_0x997cx9){return _0x997cx5[_0xd501[14]](404)};return _0x997cx5[_0xd501[8]](_0x997cx9)})[_0xd501[7]](function(_0x997cx6){return handleError(_0x997cx5,_0x997cx6)})};exports[_0xd501[18]]=function(_0x997cx4,_0x997cx5){ReportIntegration[_0xd501[18]](_0x997cx4[_0xd501[19]])[_0xd501[10]](function(_0x997cx9){return _0x997cx5[_0xd501[9]](201)[_0xd501[8]](_0x997cx9)})[_0xd501[7]](function(_0x997cx6){return handleError(_0x997cx5,_0x997cx6)})};exports[_0xd501[20]]=function(_0x997cx4,_0x997cx5){if(_0x997cx4[_0xd501[19]][_0xd501[15]]){delete _0x997cx4[_0xd501[19]][_0xd501[15]]};ReportIntegration[_0xd501[17]](_0x997cx4[_0xd501[16]][_0xd501[15]])[_0xd501[10]](function(_0x997cx9){if(!_0x997cx9){return _0x997cx5[_0xd501[14]](404)};var _0x997cxa=_[_0xd501[21]](_0x997cx9,_0x997cx4[_0xd501[19]]);_0x997cxa[_0xd501[22]]()[_0xd501[10]](function(){return _0x997cx5[_0xd501[9]](200)[_0xd501[8]](_0x997cx9)})[_0xd501[7]](function(_0x997cx6){return handleError(_0x997cx5,_0x997cx6)})})[_0xd501[7]](function(_0x997cx6){return handleError(_0x997cx5,_0x997cx6)})};exports[_0xd501[23]]=function(_0x997cx4,_0x997cx5){ReportIntegration[_0xd501[17]](_0x997cx4[_0xd501[16]][_0xd501[15]])[_0xd501[10]](function(_0x997cx9){if(!_0x997cx9){return _0x997cx5[_0xd501[14]](404)};_0x997cx9[_0xd501[23]]()[_0xd501[10]](function(){return _0x997cx5[_0xd501[14]](204)})[_0xd501[7]](function(_0x997cx6){return handleError(_0x997cx5,_0x997cx6)})})[_0xd501[7]](function(_0x997cx6){return handleError(_0x997cx5,_0x997cx6)})};function handleError(_0x997cx5,_0x997cx6){return _0x997cx5[_0xd501[9]](500)[_0xd501[8]](_0x997cx6)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var ReportIntegration = require('../../models').ReportIntegration;
+var ReportIntegrationHistory = require('../../models').history.ReportIntegrationHistory;
+
+// Get list of report_integrations
+exports.index = function(req, res) {
+  ReportIntegration
+    .findAll()
+    .then(function(report_integrations) {
+      return res.status(200).send(report_integrations);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get list of fields
+exports.describe = function(req, res) {
+  ReportIntegrationHistory
+    .describe()
+    .then(function(fields) {
+      return res.status(200).send(fields);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single report_integration
+exports.show = function(req, res) {
+  ReportIntegration
+    .findById(req.params.id)
+    .then(function(report_integration) {
+      if (!report_integration) {
+        return res.sendStatus(404);
+      }
+      return res.send(report_integration);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new report_integration in the DB.
+exports.create = function(req, res) {
+  ReportIntegration
+    .create(req.body)
+    .then(function(report_integration) {
+      return res.status(201).send(report_integration);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Updates an existing report_integration in the DB.
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  ReportIntegration
+    .findById(req.params.id)
+    .then(function(report_integration) {
+      if (!report_integration) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(report_integration, req.body);
+      updated.save()
+        .then(function() {
+          return res.status(200).send(report_integration);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a report_integration from the DB.
+exports.destroy = function(req, res) {
+  ReportIntegration
+    .findById(req.params.id)
+    .then(function(report_integration) {
+      if (!report_integration) {
+        return res.sendStatus(404);
+      }
+      report_integration.destroy()
+        .then(function() {
+          return res.sendStatus(204);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index d26b79b..2bd59ab 100644 (file)
@@ -1 +1,23 @@
-var _0x3d0a=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x75\x74\x69\x6C","\x52\x65\x70\x6F\x72\x74\x49\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x73\x6F\x63\x6B\x65\x74\x20\x6E\x61\x6D\x65\x20\x69\x73\x20","\x6E\x61\x6D\x65","\x6C\x6F\x67","\x64\x6F\x63\x20\x6D\x65\x6D\x62\x65\x72\x6E\x61\x6D\x65\x20\x69\x73\x20","\x6D\x65\x6D\x62\x65\x72\x6E\x61\x6D\x65","\x65\x6D\x69\x74\x74\x69\x6E\x67","\x72\x65\x70\x6F\x72\x74\x5F\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x3A\x25\x73","\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x66\x6F\x72\x6D\x61\x74","\x65\x6D\x69\x74"];_0x3d0a[0];var util=require(_0x3d0a[1]);var ReportIntegration=require(_0x3d0a[3])[_0x3d0a[2]];exports[_0x3d0a[4]]=function(_0x320cx3){ReportIntegration[_0x3d0a[5]](function(_0x320cx4){onSave(_0x320cx3,_0x320cx4)})};function onSave(_0x320cx3,_0x320cx4,_0x320cx6){console[_0x3d0a[8]](_0x3d0a[6],_0x320cx3[_0x3d0a[7]]);console[_0x3d0a[8]](_0x3d0a[9],_0x320cx4[_0x3d0a[10]]);if(_0x320cx3[_0x3d0a[7]]===_0x320cx4[_0x3d0a[10]]){console[_0x3d0a[8]](_0x3d0a[11]);_0x320cx3[_0x3d0a[15]](util[_0x3d0a[14]](_0x3d0a[12],_0x320cx4[_0x3d0a[13]]),_0x320cx4)}}
\ No newline at end of file
+/**
+ * Broadcast integrations update when the model changes
+ */
+
+'use strict';
+
+var util = require('util');
+var ReportIntegration = require('../../models').ReportIntegration;
+
+exports.register = function(socket) {
+  ReportIntegration.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  console.log('socket name is ', socket.name);
+  console.log('doc membername is ', doc.membername);
+  if (socket.name === doc.membername) {
+    console.log('emitting');
+    socket.emit(util.format('report_integration:%s', doc.integration), doc);
+  }
+}
index 447d350..2aadc12 100644 (file)
@@ -1 +1,17 @@
-var _0x5b81=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x6D\x61\x69\x6C\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x2F\x3A\x69\x64\x2F\x61\x63\x63\x65\x70\x74\x2F\x3A\x75\x6E\x69\x71\x75\x65\x69\x64","\x61\x63\x63\x65\x70\x74","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x5b81[0];var express=require(_0x5b81[1]);var controller=require(_0x5b81[2]);var auth=require(_0x5b81[3]);var router=express.Router();router[_0x5b81[7]](_0x5b81[4],auth[_0x5b81[5]](),controller[_0x5b81[6]]);router[_0x5b81[7]](_0x5b81[8],auth[_0x5b81[5]](),controller[_0x5b81[9]]);router[_0x5b81[7]](_0x5b81[10],auth[_0x5b81[5]](),controller[_0x5b81[11]]);router[_0x5b81[13]](_0x5b81[4],auth[_0x5b81[5]](),controller[_0x5b81[12]]);router[_0x5b81[15]](_0x5b81[8],auth[_0x5b81[5]](),controller[_0x5b81[14]]);router[_0x5b81[16]](_0x5b81[8],auth[_0x5b81[5]](),controller[_0x5b81[14]]);router[_0x5b81[18]](_0x5b81[8],auth[_0x5b81[5]](),controller[_0x5b81[17]]);module[_0x5b81[19]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./report_mail.controller');
+var auth = require('../../auth/auth.service');
+
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), controller.index);
+router.get('/:id', auth.isAuthenticated(), controller.show);
+router.get('/:id/accept/:uniqueid', auth.isAuthenticated(), controller.accept);
+router.post('/', auth.isAuthenticated(), controller.create);
+router.put('/:id', auth.isAuthenticated(), controller.update);
+router.patch('/:id', auth.isAuthenticated(), controller.update);
+router.delete('/:id', auth.isAuthenticated(), controller.destroy);
+
+module.exports = router;
index c4b80cb..9477b57 100644 (file)
@@ -1 +1,140 @@
-var _0x6b59=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x52\x65\x70\x6F\x72\x74\x4D\x61\x69\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x55\x73\x65\x72","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x61\x63\x63\x65\x70\x74","\x2E","\x73\x70\x6C\x69\x74","\x75\x6E\x69\x71\x75\x65\x69\x64","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x43\x4C\x4F\x53\x45\x44","\x67\x65\x74\x4D\x61\x69\x6C\x52\x6F\x6F\x6D\x73","\x75\x73\x65\x72","\x6D\x61\x69\x6C\x43\x61\x70\x61\x63\x69\x74\x79","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x64\x65\x73\x74\x72\x6F\x79"];_0x6b59[0];var _=require(_0x6b59[1]);var ReportMail=require(_0x6b59[3])[_0x6b59[2]];var Agent=require(_0x6b59[3])[_0x6b59[4]];var sequelize=require(_0x6b59[3])[_0x6b59[5]];var Util=require(_0x6b59[6]);exports[_0x6b59[7]]=function(_0xc2bdx6,_0xc2bdx7,_0xc2bdx8){return ReportMail[_0x6b59[14]](Util[_0x6b59[13]](_0xc2bdx6[_0x6b59[12]]))[_0x6b59[11]](function(_0xc2bdxa){_0xc2bdx7[_0x6b59[10]](200)[_0x6b59[9]](_0xc2bdxa)})[_0x6b59[8]](function(_0xc2bdx9){return handleError(_0xc2bdx7,_0xc2bdx9)})};exports[_0x6b59[15]]=function(_0xc2bdx6,_0xc2bdx7){return ReportMail[_0x6b59[19]](_0xc2bdx6[_0x6b59[18]][_0x6b59[17]])[_0x6b59[11]](function(_0xc2bdxb){if(!_0xc2bdxb){return _0xc2bdx7[_0x6b59[16]](404)};return _0xc2bdx7[_0x6b59[9]](_0xc2bdxb)})[_0x6b59[8]](function(_0xc2bdx9){return handleError(_0xc2bdx7,_0xc2bdx9)})};exports[_0x6b59[20]]=function(_0xc2bdx6,_0xc2bdx7){var _0xc2bdxc;var _0xc2bdxd=_0xc2bdx6[_0x6b59[18]][_0x6b59[23]][_0x6b59[22]](_0x6b59[21])[1];return Agent[_0x6b59[19]](_0xc2bdx6[_0x6b59[28]][_0x6b59[17]],{attributes:[_0x6b59[17],_0x6b59[29]]})[_0x6b59[11]](function(_0xc2bdx10){_0xc2bdxc=_0xc2bdx10;return _0xc2bdx10[_0x6b59[27]]({where:{status:{$ne:_0x6b59[26]},id:{$ne:_0xc2bdxd}},attributes:[_0x6b59[17]]})})[_0x6b59[11]](function(_0xc2bdxf){return ReportMail[_0x6b59[19]](_0xc2bdx6[_0x6b59[18]][_0x6b59[17]])})[_0x6b59[11]](function(_0xc2bdxb){if(!_0xc2bdxb){return _0xc2bdx7[_0x6b59[16]](404)};var _0xc2bdxe=_[_0x6b59[24]](_0xc2bdxb,{connectid:_0xc2bdx6[_0x6b59[18]][_0x6b59[23]]});return _0xc2bdxe[_0x6b59[25]]()})[_0x6b59[11]](function(){return _0xc2bdx7[_0x6b59[16]](200)})[_0x6b59[8]](function(_0xc2bdx9){return handleError(_0xc2bdx7,_0xc2bdx9)})};exports[_0x6b59[30]]=function(_0xc2bdx6,_0xc2bdx7){return ReportMail[_0x6b59[30]](_0xc2bdx6[_0x6b59[31]])[_0x6b59[11]](function(_0xc2bdxb){return _0xc2bdx7[_0x6b59[10]](201)[_0x6b59[9]](_0xc2bdxb)})[_0x6b59[8]](function(_0xc2bdx9){return handleError(_0xc2bdx7,_0xc2bdx9)})};exports[_0x6b59[32]]=function(_0xc2bdx6,_0xc2bdx7){if(_0xc2bdx6[_0x6b59[31]][_0x6b59[17]]){delete _0xc2bdx6[_0x6b59[31]][_0x6b59[17]]};return ReportMail[_0x6b59[19]](_0xc2bdx6[_0x6b59[18]][_0x6b59[17]])[_0x6b59[11]](function(_0xc2bdxb){if(!_0xc2bdxb){return _0xc2bdx7[_0x6b59[16]](404)};var _0xc2bdxe=_[_0x6b59[24]](_0xc2bdxb,_0xc2bdx6[_0x6b59[31]]);return _0xc2bdxe[_0x6b59[25]]()})[_0x6b59[11]](function(_0xc2bdxb){return _0xc2bdx7[_0x6b59[10]](200)[_0x6b59[9]](_0xc2bdxb)})[_0x6b59[8]](function(_0xc2bdx9){return handleError(_0xc2bdx7,_0xc2bdx9)})};exports[_0x6b59[33]]=function(_0xc2bdx6,_0xc2bdx7){return ReportMail[_0x6b59[19]](_0xc2bdx6[_0x6b59[18]][_0x6b59[17]])[_0x6b59[11]](function(_0xc2bdxb){if(!_0xc2bdxb){return _0xc2bdx7[_0x6b59[16]](404)};return _0xc2bdxb[_0x6b59[33]]()})[_0x6b59[11]](function(){return _0xc2bdx7[_0x6b59[16]](204)})[_0x6b59[8]](function(_0xc2bdx9){return handleError(_0xc2bdx7,_0xc2bdx9)})};function handleError(_0xc2bdx7,_0xc2bdx9){return _0xc2bdx7[_0x6b59[10]](500)[_0x6b59[9]](_0xc2bdx9)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var ReportMail = require('../../models').ReportMail;
+var Agent = require('../../models').User;
+var sequelize = require('../../models').sequelize;
+
+var Util = require('../../config/util');
+
+// Get list of agents
+exports.index = function(req, res, next) {
+  return ReportMail
+    .findAndCountAll(Util.getQuery(req.query))
+    .then(function(result) {
+      res.status(200).send(result);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+// Get a single reportMail
+exports.show = function(req, res) {
+  return ReportMail
+    .findById(req.params.id)
+    .then(function(reportMail) {
+      if (!reportMail) {
+        return res.sendStatus(404);
+      }
+      return res.send(reportMail);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single reportMail
+exports.accept = function(req, res) {
+  var _agent;
+  var _roomid = req.params.uniqueid.split('.')[1];
+
+  return Agent
+    .findById(req.user.id, {
+      attributes: ['id', 'mailCapacity']
+    })
+    .then(function(agent) {
+      _agent = agent;
+      return agent
+        .getMailRooms({
+          where: {
+            status: {
+              $ne: 'CLOSED'
+            },
+            id: {
+              $ne: _roomid
+            }
+          },
+          attributes: ['id']
+        });
+    })
+    .then(function(mailRooms) {
+      return ReportMail
+        .findById(req.params.id);
+    })
+    .then(function(reportMail) {
+      if (!reportMail) {
+        return res.sendStatus(404);
+      }
+
+      var updated = _.merge(reportMail, {
+        connectid: req.params.uniqueid
+      });
+
+      return updated
+        .save();
+    })
+    .then(function() {
+      return res.sendStatus(200);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new reportMail in the DB.
+exports.create = function(req, res) {
+  return ReportMail
+    .create(req.body)
+    .then(function(reportMail) {
+      return res.status(201).send(reportMail);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Updates an existing reportMail in the DB.
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  return ReportMail
+    .findById(req.params.id)
+    .then(function(reportMail) {
+      if (!reportMail) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(reportMail, req.body);
+      return updated
+        .save();
+    })
+    .then(function(reportMail) {
+      return res.status(200).send(reportMail);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a reportMail from the DB.
+exports.destroy = function(req, res) {
+  return ReportMail
+    .findById(req.params.id)
+    .then(function(reportMail) {
+      if (!reportMail) {
+        return res.sendStatus(404);
+      }
+      return reportMail
+        .destroy();
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index 61c6638..1fec069 100644 (file)
@@ -1 +1,35 @@
-var _0x1e9e=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x52\x65\x70\x6F\x72\x74\x4D\x61\x69\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x6E\x61\x6D\x65","\x6D\x65\x6D\x62\x65\x72\x6E\x61\x6D\x65","\x72\x6F\x6C\x65","\x61\x64\x6D\x69\x6E","\x72\x65\x70\x6F\x72\x74\x5F\x6D\x61\x69\x6C\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x72\x65\x70\x6F\x72\x74\x5F\x6D\x61\x69\x6C\x3A\x75\x70\x64\x61\x74\x65","\x72\x65\x70\x6F\x72\x74\x5F\x6D\x61\x69\x6C\x3A\x72\x65\x6D\x6F\x76\x65"];_0x1e9e[0];var ReportMail=require(_0x1e9e[2])[_0x1e9e[1]];exports[_0x1e9e[3]]=function(_0x4540x2){ReportMail[_0x1e9e[4]](function(_0x4540x3){onSave(_0x4540x2,_0x4540x3)});ReportMail[_0x1e9e[5]](function(_0x4540x3){onUpdate(_0x4540x2,_0x4540x3)});ReportMail[_0x1e9e[6]](function(_0x4540x3){onRemove(_0x4540x2,_0x4540x3)})};function onSave(_0x4540x2,_0x4540x3,_0x4540x5){if(_0x4540x2[_0x1e9e[7]]===_0x4540x3[_0x1e9e[8]]||_0x4540x2[_0x1e9e[9]]===_0x1e9e[10]){_0x4540x2[_0x1e9e[12]](_0x1e9e[11],_0x4540x3)}}function onUpdate(_0x4540x2,_0x4540x3,_0x4540x5){if(_0x4540x2[_0x1e9e[7]]===_0x4540x3[_0x1e9e[8]]||_0x4540x2[_0x1e9e[9]]===_0x1e9e[10]){_0x4540x2[_0x1e9e[12]](_0x1e9e[13],_0x4540x3)}}function onRemove(_0x4540x2,_0x4540x3,_0x4540x5){_0x4540x2[_0x1e9e[12]](_0x1e9e[14],_0x4540x3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var ReportMail = require('../../models').ReportMail;
+
+exports.register = function(socket) {
+  ReportMail.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  ReportMail.afterUpdate(function(doc) {
+    onUpdate(socket, doc);
+  });
+  ReportMail.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  if (socket.name === doc.membername || socket.role === 'admin') {
+    socket.emit('report_mail:save', doc);
+  }
+}
+
+function onUpdate(socket, doc, cb) {
+  if (socket.name === doc.membername || socket.role === 'admin') {
+    socket.emit('report_mail:update', doc);
+  }
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('report_mail:remove', doc);
+}
index ab3af32..e63d04d 100644 (file)
@@ -1 +1,16 @@
-var _0xcd53=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x6D\x61\x69\x6C\x5F\x73\x65\x73\x73\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x64\x65\x73\x63\x72\x69\x62\x65","\x64\x65\x73\x63\x72\x69\x62\x65","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0xcd53[0];var express=require(_0xcd53[1]);var controller=require(_0xcd53[2]);var router=express.Router();router[_0xcd53[5]](_0xcd53[3],controller[_0xcd53[4]]);router[_0xcd53[5]](_0xcd53[6],controller[_0xcd53[7]]);router[_0xcd53[5]](_0xcd53[8],controller[_0xcd53[9]]);router[_0xcd53[11]](_0xcd53[3],controller[_0xcd53[10]]);router[_0xcd53[13]](_0xcd53[8],controller[_0xcd53[12]]);router[_0xcd53[14]](_0xcd53[8],controller[_0xcd53[12]]);router[_0xcd53[16]](_0xcd53[8],controller[_0xcd53[15]]);module[_0xcd53[17]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./report_mail_session.controller');
+
+var router = express.Router();
+
+router.get('/', controller.index);
+router.get('/describe', controller.describe);
+router.get('/:id', controller.show);
+router.post('/', controller.create);
+router.put('/:id', controller.update);
+router.patch('/:id', controller.update);
+router.delete('/:id', controller.destroy);
+
+module.exports = router;
index 3df44d2..a964ba2 100644 (file)
@@ -1 +1,104 @@
-var _0x63fb=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x52\x65\x70\x6F\x72\x74\x4D\x61\x69\x6C\x53\x65\x73\x73\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x52\x65\x70\x6F\x72\x74\x4D\x61\x69\x6C\x53\x65\x73\x73\x69\x6F\x6E\x48\x69\x73\x74\x6F\x72\x79","\x68\x69\x73\x74\x6F\x72\x79","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x64\x65\x73\x63\x72\x69\x62\x65","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79"];_0x63fb[0];var _=require(_0x63fb[1]);var ReportMailSession=require(_0x63fb[3])[_0x63fb[2]];var ReportMailSessionHistory=require(_0x63fb[3])[_0x63fb[5]][_0x63fb[4]];var Util=require(_0x63fb[6]);exports[_0x63fb[7]]=function(_0xdafbx5,_0xdafbx6,_0xdafbx7){return ReportMailSession[_0x63fb[14]](Util[_0x63fb[13]](_0xdafbx5[_0x63fb[12]]))[_0x63fb[11]](function(_0xdafbx9){_0xdafbx6[_0x63fb[10]](200)[_0x63fb[9]](_0xdafbx9)})[_0x63fb[8]](function(_0xdafbx8){return handleError(_0xdafbx6,_0xdafbx8)})};exports[_0x63fb[15]]=function(_0xdafbx5,_0xdafbx6){return ReportMailSessionHistory[_0x63fb[15]]()[_0x63fb[11]](function(_0xdafbxa){return _0xdafbx6[_0x63fb[10]](200)[_0x63fb[9]](_0xdafbxa)})[_0x63fb[8]](function(_0xdafbx8){return handleError(_0xdafbx6,_0xdafbx8)})};exports[_0x63fb[16]]=function(_0xdafbx5,_0xdafbx6){return ReportMailSession[_0x63fb[20]](_0xdafbx5[_0x63fb[19]][_0x63fb[18]])[_0x63fb[11]](function(_0xdafbxb){if(!_0xdafbxb){return _0xdafbx6[_0x63fb[17]](404)};return _0xdafbx6[_0x63fb[9]](_0xdafbxb)})[_0x63fb[8]](function(_0xdafbx8){return handleError(_0xdafbx6,_0xdafbx8)})};exports[_0x63fb[21]]=function(_0xdafbx5,_0xdafbx6){return ReportMailSession[_0x63fb[21]](_0xdafbx5[_0x63fb[22]])[_0x63fb[11]](function(_0xdafbxb){return _0xdafbx6[_0x63fb[10]](201)[_0x63fb[9]](_0xdafbxb)})[_0x63fb[8]](function(_0xdafbx8){return handleError(_0xdafbx6,_0xdafbx8)})};exports[_0x63fb[23]]=function(_0xdafbx5,_0xdafbx6){if(_0xdafbx5[_0x63fb[22]][_0x63fb[18]]){delete _0xdafbx5[_0x63fb[22]][_0x63fb[18]]};return ReportMailSession[_0x63fb[20]](_0xdafbx5[_0x63fb[19]][_0x63fb[18]])[_0x63fb[11]](function(_0xdafbxb){if(!_0xdafbxb){return _0xdafbx6[_0x63fb[17]](404)};var _0xdafbxc=_[_0x63fb[24]](_0xdafbxb,_0xdafbx5[_0x63fb[22]]);return _0xdafbxc[_0x63fb[25]]()})[_0x63fb[11]](function(_0xdafbxb){return _0xdafbx6[_0x63fb[10]](200)[_0x63fb[9]](_0xdafbxb)})[_0x63fb[8]](function(_0xdafbx8){return handleError(_0xdafbx6,_0xdafbx8)})};exports[_0x63fb[26]]=function(_0xdafbx5,_0xdafbx6){return ReportMailSession[_0x63fb[20]](_0xdafbx5[_0x63fb[19]][_0x63fb[18]])[_0x63fb[11]](function(_0xdafbxb){if(!_0xdafbxb){return _0xdafbx6[_0x63fb[17]](404)};return _0xdafbxb[_0x63fb[26]]()})[_0x63fb[11]](function(){return _0xdafbx6[_0x63fb[17]](204)})[_0x63fb[8]](function(_0xdafbx8){return handleError(_0xdafbx6,_0xdafbx8)})};function handleError(_0xdafbx6,_0xdafbx8){return _0xdafbx6[_0x63fb[10]](500)[_0x63fb[9]](_0xdafbx8)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var ReportMailSession = require('../../models').ReportMailSession;
+var ReportMailSessionHistory = require('../../models').history.ReportMailSessionHistory;
+
+var Util = require('../../config/util');
+
+// Get list of agents
+exports.index = function(req, res, next) {
+  return ReportMailSession
+    .findAndCountAll(Util.getQuery(req.query))
+    .then(function(result) {
+      res.status(200).send(result);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get list of fields
+exports.describe = function(req, res) {
+  return ReportMailSessionHistory
+    .describe()
+    .then(function(fields) {
+      return res.status(200).send(fields);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single reportMailSession
+exports.show = function(req, res) {
+  return ReportMailSession
+    .findById(req.params.id)
+    .then(function(reportMailSession) {
+      if (!reportMailSession) {
+        return res.sendStatus(404);
+      }
+      return res.send(reportMailSession);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new reportMailSession in the DB.
+exports.create = function(req, res) {
+  return ReportMailSession
+    .create(req.body)
+    .then(function(reportMailSession) {
+      return res.status(201).send(reportMailSession);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Updates an existing reportMailSession in the DB.
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  return ReportMailSession
+    .findById(req.params.id)
+    .then(function(reportMailSession) {
+      if (!reportMailSession) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(reportMailSession, req.body);
+      return updated
+        .save();
+    })
+    .then(function(reportMailSession) {
+      return res.status(200).send(reportMailSession);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a reportMailSession from the DB.
+exports.destroy = function(req, res) {
+  return ReportMailSession
+    .findById(req.params.id)
+    .then(function(reportMailSession) {
+      if (!reportMailSession) {
+        return res.sendStatus(404);
+      }
+      return reportMailSession
+        .destroy();
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index 1c44a64..6489a0d 100644 (file)
@@ -1 +1,27 @@
-var _0x45d1=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x52\x65\x70\x6F\x72\x74\x4D\x61\x69\x6C\x53\x65\x73\x73\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x72\x65\x70\x6F\x72\x74\x5F\x6D\x61\x69\x6C\x5F\x73\x65\x73\x73\x69\x6F\x6E\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x72\x65\x70\x6F\x72\x74\x5F\x6D\x61\x69\x6C\x5F\x73\x65\x73\x73\x69\x6F\x6E\x3A\x72\x65\x6D\x6F\x76\x65"];_0x45d1[0];var ReportMailSession=require(_0x45d1[2])[_0x45d1[1]];exports[_0x45d1[3]]=function(_0x28c3x2){ReportMailSession[_0x45d1[4]](function(_0x28c3x3){onSave(_0x28c3x2,_0x28c3x3)});ReportMailSession[_0x45d1[5]](function(_0x28c3x3){onSave(_0x28c3x2,_0x28c3x3)});ReportMailSession[_0x45d1[6]](function(_0x28c3x3){onRemove(_0x28c3x2,_0x28c3x3)})};function onSave(_0x28c3x2,_0x28c3x3,_0x28c3x5){_0x28c3x2[_0x45d1[8]](_0x45d1[7],_0x28c3x3)}function onRemove(_0x28c3x2,_0x28c3x3,_0x28c3x5){_0x28c3x2[_0x45d1[8]](_0x45d1[9],_0x28c3x3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var ReportMailSession = require('../../models').ReportMailSession;
+
+exports.register = function(socket) {
+  ReportMailSession.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  ReportMailSession.afterUpdate(function(doc) {
+    onSave(socket, doc);
+  });
+  ReportMailSession.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('report_mail_session:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('report_mail_session:remove', doc);
+}
index 0aa96fb..f92d5aa 100644 (file)
@@ -1 +1,16 @@
-var _0x91b2=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x71\x75\x65\x75\x65\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x64\x65\x73\x63\x72\x69\x62\x65","\x64\x65\x73\x63\x72\x69\x62\x65","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x91b2[0];var express=require(_0x91b2[1]);var controller=require(_0x91b2[2]);var router=express.Router();router[_0x91b2[5]](_0x91b2[3],controller[_0x91b2[4]]);router[_0x91b2[5]](_0x91b2[6],controller[_0x91b2[7]]);router[_0x91b2[5]](_0x91b2[8],controller[_0x91b2[9]]);router[_0x91b2[11]](_0x91b2[3],controller[_0x91b2[10]]);router[_0x91b2[13]](_0x91b2[8],controller[_0x91b2[12]]);router[_0x91b2[14]](_0x91b2[8],controller[_0x91b2[12]]);router[_0x91b2[16]](_0x91b2[8],controller[_0x91b2[15]]);module[_0x91b2[17]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./report_queue.controller');
+
+var router = express.Router();
+
+router.get('/', controller.index);
+router.get('/describe', controller.describe);
+router.get('/:id', controller.show);
+router.post('/', controller.create);
+router.put('/:id', controller.update);
+router.patch('/:id', controller.update);
+router.delete('/:id', controller.destroy);
+
+module.exports = router;
index 06985b7..7369229 100644 (file)
@@ -1 +1,103 @@
-var _0xdba3=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x52\x65\x70\x6F\x72\x74\x51\x75\x65\x75\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x52\x65\x70\x6F\x72\x74\x51\x75\x65\x75\x65\x48\x69\x73\x74\x6F\x72\x79","\x68\x69\x73\x74\x6F\x72\x79","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6C\x6C","\x64\x65\x73\x63\x72\x69\x62\x65","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x65\x72\x72","\x65\x72\x72\x6F\x72","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79"];_0xdba3[0];var _=require(_0xdba3[1]);var ReportQueue=require(_0xdba3[3])[_0xdba3[2]];var ReportQueueHistory=require(_0xdba3[3])[_0xdba3[5]][_0xdba3[4]];exports[_0xdba3[6]]=function(_0x7906x4,_0x7906x5){return ReportQueue[_0xdba3[11]]()[_0xdba3[10]](function(_0x7906x7){return _0x7906x5[_0xdba3[9]](200)[_0xdba3[8]](_0x7906x7)})[_0xdba3[7]](function(_0x7906x6){return handleError(_0x7906x5,_0x7906x6)})};exports[_0xdba3[12]]=function(_0x7906x4,_0x7906x5){return ReportQueueHistory[_0xdba3[12]]()[_0xdba3[10]](function(_0x7906x8){return _0x7906x5[_0xdba3[9]](200)[_0xdba3[8]](_0x7906x8)})[_0xdba3[7]](function(_0x7906x6){return handleError(_0x7906x5,_0x7906x6)})};exports[_0xdba3[13]]=function(_0x7906x4,_0x7906x5){return ReportQueue[_0xdba3[17]](_0x7906x4[_0xdba3[16]][_0xdba3[15]])[_0xdba3[10]](function(_0x7906x9){if(!_0x7906x9){return _0x7906x5[_0xdba3[14]](404)};return _0x7906x5[_0xdba3[8]](_0x7906x9)})[_0xdba3[7]](function(_0x7906x6){return handleError(_0x7906x5,_0x7906x6)})};exports[_0xdba3[18]]=function(_0x7906x4,_0x7906x5){return ReportQueue[_0xdba3[18]](_0x7906x4[_0xdba3[19]])[_0xdba3[10]](function(_0x7906x9){return _0x7906x5[_0xdba3[9]](201)[_0xdba3[8]](_0x7906x9)})[_0xdba3[7]](function(_0x7906x6){return handleError(_0x7906x5,_0x7906x6)})};exports[_0xdba3[20]]=function(_0x7906x4,_0x7906x5){if(_0x7906x4[_0xdba3[19]][_0xdba3[15]]){delete _0x7906x4[_0xdba3[19]][_0xdba3[15]]};return ReportQueue[_0xdba3[17]](_0x7906x4[_0xdba3[16]][_0xdba3[15]])[_0xdba3[10]](function(_0x7906x9){if(!_0x7906x9){return _0x7906x5[_0xdba3[14]](404)};var _0x7906xa=_[_0xdba3[23]](_0x7906x9,_0x7906x4[_0xdba3[19]]);return _0x7906xa[_0xdba3[24]]()})[_0xdba3[10]](function(_0x7906x9){return _0x7906x5[_0xdba3[9]](200)[_0xdba3[8]](_0x7906x9)})[_0xdba3[7]](function(_0x7906x6){console[_0xdba3[22]](_0xdba3[21],_0x7906x6);return handleError(_0x7906x5,_0x7906x6)})};exports[_0xdba3[25]]=function(_0x7906x4,_0x7906x5){return ReportQueue[_0xdba3[17]](_0x7906x4[_0xdba3[16]][_0xdba3[15]])[_0xdba3[10]](function(_0x7906x9){if(!_0x7906x9){return _0x7906x5[_0xdba3[14]](404)};return _0x7906x9[_0xdba3[25]]()})[_0xdba3[10]](function(){return _0x7906x5[_0xdba3[14]](204)})[_0xdba3[7]](function(_0x7906x6){return handleError(_0x7906x5,_0x7906x6)})};function handleError(_0x7906x5,_0x7906x6){return _0x7906x5[_0xdba3[9]](500)[_0xdba3[8]](_0x7906x6)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var ReportQueue = require('../../models').ReportQueue;
+var ReportQueueHistory = require('../../models').history.ReportQueueHistory;
+
+// Get list of reportQueues
+exports.index = function(req, res) {
+  return ReportQueue
+    .findAll()
+    .then(function(reportQueues) {
+      return res.status(200).send(reportQueues);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get list of fields
+exports.describe = function(req, res) {
+  return ReportQueueHistory
+    .describe()
+    .then(function(fields) {
+      return res.status(200).send(fields);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single reportQueue
+exports.show = function(req, res) {
+  return ReportQueue
+    .findById(req.params.id)
+    .then(function(reportQueue) {
+      if (!reportQueue) {
+        return res.sendStatus(404);
+      }
+      return res.send(reportQueue);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new reportQueue in the DB.
+exports.create = function(req, res) {
+  return ReportQueue
+    .create(req.body)
+    .then(function(reportQueue) {
+      return res.status(201).send(reportQueue);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Updates an existing reportQueue in the DB.
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  return ReportQueue
+    .findById(req.params.id)
+    .then(function(reportQueue) {
+      if (!reportQueue) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(reportQueue, req.body);
+      return updated
+        .save();
+    })
+    .then(function(reportQueue) {
+      return res.status(200).send(reportQueue);
+    })
+    .catch(function(err) {
+      console.error('err', err);
+      return handleError(res, err);
+    });
+};
+
+// Deletes a reportQueue from the DB.
+exports.destroy = function(req, res) {
+  return ReportQueue
+    .findById(req.params.id)
+    .then(function(reportQueue) {
+      if (!reportQueue) {
+        return res.sendStatus(404);
+      }
+      return reportQueue
+        .destroy();
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index 0ff57d8..9f57869 100644 (file)
@@ -1 +1,29 @@
-var _0xeaf2=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x52\x65\x70\x6F\x72\x74\x51\x75\x65\x75\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x72\x6F\x6C\x65","\x61\x64\x6D\x69\x6E","\x72\x65\x70\x6F\x72\x74\x5F\x71\x75\x65\x75\x65\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x72\x65\x70\x6F\x72\x74\x5F\x71\x75\x65\x75\x65\x3A\x72\x65\x6D\x6F\x76\x65"];_0xeaf2[0];var ReportQueue=require(_0xeaf2[2])[_0xeaf2[1]];exports[_0xeaf2[3]]=function(_0x62f1x2){ReportQueue[_0xeaf2[4]](function(_0x62f1x3){onSave(_0x62f1x2,_0x62f1x3)});ReportQueue[_0xeaf2[5]](function(_0x62f1x3){onSave(_0x62f1x2,_0x62f1x3)});ReportQueue[_0xeaf2[6]](function(_0x62f1x3){onRemove(_0x62f1x2,_0x62f1x3)})};function onSave(_0x62f1x2,_0x62f1x3,_0x62f1x5){if(_0x62f1x2[_0xeaf2[7]]===_0xeaf2[8]){_0x62f1x2[_0xeaf2[10]](_0xeaf2[9],_0x62f1x3)}}function onRemove(_0x62f1x2,_0x62f1x3,_0x62f1x5){_0x62f1x2[_0xeaf2[10]](_0xeaf2[11],_0x62f1x3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var ReportQueue = require('../../models').ReportQueue;
+
+exports.register = function(socket) {
+  ReportQueue.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  ReportQueue.afterUpdate(function(doc) {
+    onSave(socket, doc);
+  });
+  ReportQueue.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  if (socket.role === 'admin') {
+    socket.emit('report_queue:save', doc);
+  }
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('report_queue:remove', doc);
+}
index 845a2a1..75fa91c 100644 (file)
@@ -1 +1,12 @@
-var _0xe06a=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x74\x72\x65\x65\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x65\x78\x70\x6F\x72\x74\x73"];_0xe06a[0];var express=require(_0xe06a[1]);var controller=require(_0xe06a[2]);var router=express.Router();router[_0xe06a[5]](_0xe06a[3],controller[_0xe06a[4]]);router[_0xe06a[8]](_0xe06a[6],controller[_0xe06a[7]]);router[_0xe06a[9]](_0xe06a[6],controller[_0xe06a[7]]);module[_0xe06a[10]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./report_tree.controller');
+
+var router = express.Router();
+
+router.get('/', controller.index);
+router.put('/:id', controller.update);
+router.patch('/:id', controller.update);
+
+module.exports = router;
index fd80b0f..a6b11b0 100644 (file)
@@ -1 +1,46 @@
-var _0x1555=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x52\x65\x70\x6F\x72\x74\x54\x72\x65\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6C\x6C","\x75\x70\x64\x61\x74\x65","\x62\x6F\x64\x79","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64"];_0x1555[0];var _=require(_0x1555[1]);var util=require(_0x1555[2]);var ReportTree=require(_0x1555[4])[_0x1555[3]];exports[_0x1555[5]]=function(_0xbf28x4,_0xbf28x5){ReportTree[_0x1555[11]]()[_0x1555[10]](function(_0xbf28x7){if(!_0xbf28x7){return _0xbf28x5[_0x1555[7]](404)};return _0xbf28x5[_0x1555[9]](200)[_0x1555[8]](_0xbf28x7)})[_0x1555[6]](function(_0xbf28x6){return handleError(_0xbf28x5,_0xbf28x6)})};exports[_0x1555[12]]=function(_0xbf28x4,_0xbf28x5){ReportTree[_0x1555[18]](_0xbf28x4[_0x1555[17]][_0x1555[16]])[_0x1555[10]](function(_0xbf28x8){if(!_0xbf28x8){return _0xbf28x5[_0x1555[7]](404)};var _0xbf28x9=_[_0x1555[14]](_0xbf28x8,_0xbf28x4[_0x1555[13]]);_0xbf28x9[_0x1555[15]]()[_0x1555[10]](function(){return _0xbf28x5[_0x1555[9]](200)[_0x1555[8]](_0xbf28x8)})[_0x1555[6]](function(_0xbf28x6){return handleError(_0xbf28x5,_0xbf28x6)})})[_0x1555[6]](function(_0xbf28x6){return handleError(_0xbf28x5,_0xbf28x6)})};function handleError(_0xbf28x5,_0xbf28x6){return _0xbf28x5[_0x1555[9]](500)[_0x1555[8]](_0xbf28x6)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var util = require('util');
+var ReportTree = require('../../models').ReportTree;
+
+// Get the reports trees
+exports.index = function(req, res) {
+  ReportTree
+    .findAll()
+    .then(function(trees) {
+      if (!trees) {
+        return res.sendStatus(404);
+      }
+      return res.status(200).send(trees);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Updates an existing report in the DB.
+exports.update = function(req, res) {
+  ReportTree
+    .findById(req.params.id)
+    .then(function(tree) {
+      if (!tree) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(tree, req.body);
+      updated.save()
+        .then(function() {
+          return res.status(200).send(tree);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index 1df63dc..389fa7a 100644 (file)
@@ -1 +1,27 @@
-var _0xd016=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x52\x65\x70\x6F\x72\x74\x54\x72\x65\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x72\x65\x70\x6F\x72\x74\x5F\x74\x72\x65\x65\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x72\x65\x70\x6F\x72\x74\x5F\x74\x72\x65\x65\x3A\x72\x65\x6D\x6F\x76\x65"];_0xd016[0];var ReportTree=require(_0xd016[2])[_0xd016[1]];exports[_0xd016[3]]=function(_0xac45x2){ReportTree[_0xd016[4]](function(_0xac45x3){onSave(_0xac45x2,_0xac45x3)});ReportTree[_0xd016[5]](function(_0xac45x3){onSave(_0xac45x2,_0xac45x3)});ReportTree[_0xd016[6]](function(_0xac45x3){onRemove(_0xac45x2,_0xac45x3)})};function onSave(_0xac45x2,_0xac45x3,_0xac45x5){_0xac45x2[_0xd016[8]](_0xd016[7],_0xac45x3)}function onRemove(_0xac45x2,_0xac45x3,_0xac45x5){_0xac45x2[_0xd016[8]](_0xd016[9],_0xac45x3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var ReportTree = require('../../models').ReportTree;
+
+exports.register = function(socket) {
+  ReportTree.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  ReportTree.afterUpdate(function(doc) {
+    onSave(socket, doc);
+  });
+  ReportTree.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('report_tree:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('report_tree:remove', doc);
+}
index 1a873ef..37d897a 100644 (file)
@@ -1 +1,20 @@
-var _0xb118=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x73\x68\x6F\x75\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x70\x70","\x73\x75\x70\x65\x72\x74\x65\x73\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x61\x6E\x61\x6C\x79\x74\x69\x63\x73\x2F\x72\x65\x70\x6F\x72\x74\x73\x2F\x74\x72\x65\x65\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x70\x6F\x6E\x64\x20\x77\x69\x74\x68\x20\x4A\x53\x4F\x4E\x20\x61\x72\x72\x61\x79","\x69\x6E\x73\x74\x61\x6E\x63\x65\x6F\x66","\x62\x65","\x62\x6F\x64\x79","\x65\x6E\x64","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x65\x78\x70\x65\x63\x74","\x2F\x61\x70\x69\x2F\x61\x6E\x61\x6C\x79\x74\x69\x63\x2F\x72\x65\x70\x6F\x72\x74\x73\x2F\x74\x72\x65\x65\x73","\x67\x65\x74"];_0xb118[0];var should=require(_0xb118[1]);var app=require(_0xb118[2]);var request=require(_0xb118[3]);describe(_0xb118[4],function(){it(_0xb118[5],function(_0x1d6dx4){request(app)[_0xb118[13]](_0xb118[12])[_0xb118[11]](200)[_0xb118[11]](_0xb118[10],/json/)[_0xb118[9]](function(_0x1d6dx5,_0x1d6dx6){if(_0x1d6dx5){return _0x1d6dx4(_0x1d6dx5)};_0x1d6dx6[_0xb118[8]][_0xb118[1]][_0xb118[7]][_0xb118[6]](Array);_0x1d6dx4()})})})
\ No newline at end of file
+'use strict';
+
+var should = require('should');
+var app = require('../../app');
+var request = require('supertest');
+
+describe('GET /api/analytics/reports/trees', function() {
+
+  it('should respond with JSON array', function(done) {
+    request(app)
+      .get('/api/analytic/reports/trees')
+      .expect(200)
+      .expect('Content-Type', /json/)
+      .end(function(err, res) {
+        if (err) return done(err);
+        res.body.should.be.instanceof(Array);
+        done();
+      });
+  });
+});
index 2696645..d8b47b0 100644 (file)
@@ -1 +1,21 @@
-var _0x3ca2=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x2F\x3A\x69\x64\x2F\x63\x68\x65\x63\x6B","\x63\x68\x65\x63\x6B\x41\x63\x63\x6F\x75\x6E\x74","\x2F\x3A\x69\x64\x2F\x66\x69\x65\x6C\x64\x73","\x67\x65\x74\x46\x69\x65\x6C\x64\x73","\x2F\x76\x61\x6C\x69\x64\x61\x74\x65\x2F\x3A\x66\x69\x65\x6C\x64","\x61\x63\x63\x6F\x75\x6E\x74\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E","\x70\x6F\x73\x74","\x63\x72\x65\x61\x74\x65","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0x3ca2[0];var express=require(_0x3ca2[1]);var auth=require(_0x3ca2[2]);var controller=require(_0x3ca2[3]);var router=express.Router();router[_0x3ca2[7]](_0x3ca2[4],auth[_0x3ca2[5]](),controller[_0x3ca2[6]]);router[_0x3ca2[7]](_0x3ca2[8],auth[_0x3ca2[5]](),controller[_0x3ca2[9]]);router[_0x3ca2[7]](_0x3ca2[10],auth[_0x3ca2[5]](),controller[_0x3ca2[11]]);router[_0x3ca2[7]](_0x3ca2[12],auth[_0x3ca2[5]](),controller[_0x3ca2[13]]);router[_0x3ca2[16]](_0x3ca2[14],auth[_0x3ca2[5]](),controller[_0x3ca2[15]]);router[_0x3ca2[16]](_0x3ca2[4],auth[_0x3ca2[5]](),controller[_0x3ca2[17]]);router[_0x3ca2[19]](_0x3ca2[8],auth[_0x3ca2[5]](),controller[_0x3ca2[18]]);router[_0x3ca2[20]](_0x3ca2[8],auth[_0x3ca2[5]](),controller[_0x3ca2[18]]);router[_0x3ca2[22]](_0x3ca2[4],auth[_0x3ca2[5]](),controller[_0x3ca2[21]]);router[_0x3ca2[22]](_0x3ca2[8],auth[_0x3ca2[5]](),controller[_0x3ca2[23]]);module[_0x3ca2[24]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var auth = require('../../auth/auth.service');
+var controller = require('./salesforce_account.controller');
+
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), controller.index);
+router.get('/:id', auth.isAuthenticated(), controller.show);
+router.get('/:id/check', auth.isAuthenticated(), controller.checkAccount);
+router.get('/:id/fields', auth.isAuthenticated(), controller.getFields);
+router.post('/validate/:field', auth.isAuthenticated(), controller.accountValidation);
+router.post('/', auth.isAuthenticated(), controller.create);
+router.put('/:id', auth.isAuthenticated(), controller.update);
+router.patch('/:id', auth.isAuthenticated(), controller.update);
+router.delete('/', auth.isAuthenticated(), controller.bulkDestroy);
+router.delete('/:id', auth.isAuthenticated(), controller.destroy);
+
+
+module.exports = router;
index 0e02667..a03b303 100644 (file)
@@ -1 +1,97 @@
-var _0x4756=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6E\x6F\x50\x72\x65\x73\x65\x72\x76\x65\x43\x61\x63\x68\x65","\x70\x72\x6F\x78\x79\x71\x75\x69\x72\x65","\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x41\x63\x63\x6F\x75\x6E\x74\x43\x74\x72\x6C\x2E\x69\x6E\x64\x65\x78","\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x41\x63\x63\x6F\x75\x6E\x74\x43\x74\x72\x6C\x2E\x73\x68\x6F\x77","\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x41\x63\x63\x6F\x75\x6E\x74\x43\x74\x72\x6C\x2E\x63\x72\x65\x61\x74\x65","\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x41\x63\x63\x6F\x75\x6E\x74\x43\x74\x72\x6C\x2E\x75\x70\x64\x61\x74\x65","\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x41\x63\x63\x6F\x75\x6E\x74\x43\x74\x72\x6C\x2E\x64\x65\x73\x74\x72\x6F\x79","\x73\x70\x79","\x2E\x2F\x69\x6E\x64\x65\x78\x2E\x6A\x73","\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x41\x63\x63\x6F\x75\x6E\x74\x20\x41\x50\x49\x20\x52\x6F\x75\x74\x65\x72\x3A","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x74\x75\x72\x6E\x20\x61\x6E\x20\x65\x78\x70\x72\x65\x73\x73\x20\x72\x6F\x75\x74\x65\x72\x20\x69\x6E\x73\x74\x61\x6E\x63\x65","\x65\x71\x75\x61\x6C","\x74\x6F","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x2F\x61\x63\x63\x6F\x75\x6E\x74\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x41\x63\x63\x6F\x75\x6E\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x69\x6E\x64\x65\x78","\x63\x61\x6C\x6C\x65\x64\x4F\x6E\x63\x65","\x62\x65\x65\x6E","\x68\x61\x76\x65","\x2F","\x77\x69\x74\x68\x41\x72\x67\x73","\x67\x65\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x2F\x61\x63\x63\x6F\x75\x6E\x74\x73\x2F\x3A\x69\x64","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x41\x63\x63\x6F\x75\x6E\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x73\x68\x6F\x77","\x2F\x3A\x69\x64","\x50\x4F\x53\x54\x20\x2F\x61\x70\x69\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x2F\x61\x63\x63\x6F\x75\x6E\x74\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x41\x63\x63\x6F\x75\x6E\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x50\x55\x54\x20\x2F\x61\x70\x69\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x2F\x61\x63\x63\x6F\x75\x6E\x74\x73\x2F\x3A\x69\x64","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x41\x63\x63\x6F\x75\x6E\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x50\x41\x54\x43\x48\x20\x2F\x61\x70\x69\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x2F\x61\x63\x63\x6F\x75\x6E\x74\x73\x2F\x3A\x69\x64","\x70\x61\x74\x63\x68","\x44\x45\x4C\x45\x54\x45\x20\x2F\x61\x70\x69\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x2F\x61\x63\x63\x6F\x75\x6E\x74\x73\x2F\x3A\x69\x64","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x41\x63\x63\x6F\x75\x6E\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65"];_0x4756[0];var proxyquire=require(_0x4756[2])[_0x4756[1]]();var salesforceAccountCtrlStub={index:_0x4756[3],show:_0x4756[4],create:_0x4756[5],update:_0x4756[6],destroy:_0x4756[7]};var routerStub={get:sinon[_0x4756[8]](),put:sinon[_0x4756[8]](),patch:sinon[_0x4756[8]](),post:sinon[_0x4756[8]](),delete:sinon[_0x4756[8]]()};var salesforceAccountIndex=proxyquire(_0x4756[9],{"\x65\x78\x70\x72\x65\x73\x73":{Router:function(){return routerStub}},"\x2E\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72":salesforceAccountCtrlStub});describe(_0x4756[10],function(){it(_0x4756[11],function(){expect(salesforceAccountIndex)[_0x4756[13]][_0x4756[12]](routerStub)});describe(_0x4756[14],function(){it(_0x4756[15],function(){expect(routerStub[_0x4756[21]][_0x4756[20]](_0x4756[19],_0x4756[3]))[_0x4756[13]][_0x4756[18]][_0x4756[17]][_0x4756[16]]})});describe(_0x4756[22],function(){it(_0x4756[23],function(){expect(routerStub[_0x4756[21]][_0x4756[20]](_0x4756[24],_0x4756[4]))[_0x4756[13]][_0x4756[18]][_0x4756[17]][_0x4756[16]]})});describe(_0x4756[25],function(){it(_0x4756[26],function(){expect(routerStub[_0x4756[27]][_0x4756[20]](_0x4756[19],_0x4756[5]))[_0x4756[13]][_0x4756[18]][_0x4756[17]][_0x4756[16]]})});describe(_0x4756[28],function(){it(_0x4756[29],function(){expect(routerStub[_0x4756[30]][_0x4756[20]](_0x4756[24],_0x4756[6]))[_0x4756[13]][_0x4756[18]][_0x4756[17]][_0x4756[16]]})});describe(_0x4756[31],function(){it(_0x4756[29],function(){expect(routerStub[_0x4756[32]][_0x4756[20]](_0x4756[24],_0x4756[6]))[_0x4756[13]][_0x4756[18]][_0x4756[17]][_0x4756[16]]})});describe(_0x4756[33],function(){it(_0x4756[34],function(){expect(routerStub[_0x4756[35]][_0x4756[20]](_0x4756[24],_0x4756[7]))[_0x4756[13]][_0x4756[18]][_0x4756[17]][_0x4756[16]]})})})
\ No newline at end of file
+'use strict';
+
+var proxyquire = require('proxyquire').noPreserveCache();
+
+var salesforceAccountCtrlStub = {
+  index: 'salesforceAccountCtrl.index',
+  show: 'salesforceAccountCtrl.show',
+  create: 'salesforceAccountCtrl.create',
+  update: 'salesforceAccountCtrl.update',
+  destroy: 'salesforceAccountCtrl.destroy'
+};
+
+var routerStub = {
+  get: sinon.spy(),
+  put: sinon.spy(),
+  patch: sinon.spy(),
+  post: sinon.spy(),
+  delete: sinon.spy()
+};
+
+// require the index with our stubbed out modules
+var salesforceAccountIndex = proxyquire('./index.js', {
+  'express': {
+    Router: function() {
+      return routerStub;
+    }
+  },
+  './salesforce_account.controller': salesforceAccountCtrlStub
+});
+
+describe('SalesforceAccount API Router:', function() {
+
+  it('should return an express router instance', function() {
+    expect(salesforceAccountIndex).to.equal(routerStub);
+  });
+
+  describe('GET /api/salesforce/accounts', function() {
+
+    it('should route to salesforceAccount.controller.index', function() {
+      expect(routerStub.get
+        .withArgs('/', 'salesforceAccountCtrl.index')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('GET /api/salesforce/accounts/:id', function() {
+
+    it('should route to salesforceAccount.controller.show', function() {
+      expect(routerStub.get
+        .withArgs('/:id', 'salesforceAccountCtrl.show')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('POST /api/salesforce/accounts', function() {
+
+    it('should route to salesforceAccount.controller.create', function() {
+      expect(routerStub.post
+        .withArgs('/', 'salesforceAccountCtrl.create')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('PUT /api/salesforce/accounts/:id', function() {
+
+    it('should route to salesforceAccount.controller.update', function() {
+      expect(routerStub.put
+        .withArgs('/:id', 'salesforceAccountCtrl.update')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('PATCH /api/salesforce/accounts/:id', function() {
+
+    it('should route to salesforceAccount.controller.update', function() {
+      expect(routerStub.patch
+        .withArgs('/:id', 'salesforceAccountCtrl.update')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('DELETE /api/salesforce/accounts/:id', function() {
+
+    it('should route to salesforceAccount.controller.destroy', function() {
+      expect(routerStub.delete
+        .withArgs('/:id', 'salesforceAccountCtrl.destroy')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+});
index 01b59e0..69c55e6 100644 (file)
@@ -1 +1,253 @@
-var _0xb9ce=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x6A\x73\x66\x6F\x72\x63\x65","\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x41\x63\x63\x6F\x75\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6A\x73\x6F\x6E","\x65\x6E\x64","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x73\x74\x72\x6F\x79","\x69\x6E\x64\x65\x78","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x6E\x61\x6D\x65","\x75\x73\x65\x72\x6E\x61\x6D\x65","\x72\x65\x6D\x6F\x74\x65\x55\x72\x69","\x70\x65\x72\x5F\x70\x61\x67\x65","\x71\x75\x65\x72\x79","\x70\x61\x67\x65","\x6F\x72\x64\x65\x72","\x25\x73\x20\x25\x73","\x73\x6F\x72\x74\x5F\x62\x79","\x73\x6F\x72\x74\x5F\x6F\x72\x64\x65\x72","\x41\x53\x43","\x66\x6F\x72\x6D\x61\x74","\x24\x6F\x72","\x77\x68\x65\x72\x65","\x25","\x70\x75\x73\x68","\x66\x6F\x72\x45\x61\x63\x68","\x24","\x24\x6C\x69\x6B\x65","\x66\x6F\x72\x49\x6E","\x53\x6F\x6D\x65\x74\x68\x69\x6E\x67\x20\x62\x6C\x65\x77\x20\x75\x70\x21","\x63\x61\x74\x63\x68","\x63\x6F\x75\x6E\x74","\x63\x65\x69\x6C","\x6F\x66\x66\x73\x65\x74","\x25\x73\x3A\x2F\x2F\x25\x73\x25\x73\x3F\x70\x61\x67\x65\x3D\x25\x64","\x70\x72\x6F\x74\x6F\x63\x6F\x6C","\x68\x6F\x73\x74","\x68\x65\x61\x64\x65\x72\x73","\x62\x61\x73\x65\x55\x72\x6C","\x72\x6F\x77\x73","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x63\x68\x65\x63\x6B\x41\x63\x63\x6F\x75\x6E\x74","\x63\x6C\x69\x65\x6E\x74\x49\x64","\x63\x6C\x69\x65\x6E\x74\x53\x65\x63\x72\x65\x74","\x73\x65\x63\x75\x72\x69\x74\x79\x54\x6F\x6B\x65\x6E","\x63\x6F\x6E\x63\x61\x74","\x70\x61\x73\x73\x77\x6F\x72\x64","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x6C\x6F\x67\x69\x6E","\x61\x63\x63\x6F\x75\x6E\x74\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E","\x66\x69\x65\x6C\x64","\x76\x61\x6C\x75\x65","\x67\x65\x74\x46\x69\x65\x6C\x64\x73","\x66\x69\x65\x6C\x64\x73","\x64\x65\x73\x63\x72\x69\x62\x65","\x54\x61\x73\x6B","\x73\x6F\x62\x6A\x65\x63\x74","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79"];_0xb9ce[0];var _=require(_0xb9ce[1]);var util=require(_0xb9ce[2]);var jsforce=require(_0xb9ce[3]);var SalesforceAccount=require(_0xb9ce[5])[_0xb9ce[4]];function handleError(_0xb2aax6,_0xb2aax7){_0xb2aax7=_0xb2aax7||500;return function(_0xb2aax8){_0xb2aax6[_0xb9ce[7]](_0xb2aax7)[_0xb9ce[6]](_0xb2aax8)}}function responseWithResult(_0xb2aax6,_0xb2aax7){_0xb2aax7=_0xb2aax7||200;return function(_0xb2aaxa){if(_0xb2aaxa){_0xb2aax6[_0xb9ce[7]](_0xb2aax7)[_0xb9ce[8]](_0xb2aaxa)}}}function handleEntityNotFound(_0xb2aax6){return function(_0xb2aaxa){if(!_0xb2aaxa){_0xb2aax6[_0xb9ce[7]](404)[_0xb9ce[9]]();return null};return _0xb2aaxa}}function saveUpdates(_0xb2aaxd){return function(_0xb2aaxa){return _0xb2aaxa[_0xb9ce[11]](_0xb2aaxd)[_0xb9ce[10]](function(_0xb2aaxe){return _0xb2aaxe})}}function removeEntity(_0xb2aax6){return function(_0xb2aaxa){if(_0xb2aaxa){return _0xb2aaxa[_0xb9ce[12]]()[_0xb9ce[10]](function(){_0xb2aax6[_0xb9ce[7]](204)[_0xb9ce[9]]()})}}}exports[_0xb9ce[13]]=function(_0xb2aax10,_0xb2aax6){var _0xb2aax11=[_0xb9ce[14],_0xb9ce[15],_0xb9ce[16],_0xb9ce[17]];var _0xb2aax12=_0xb2aax10[_0xb9ce[19]][_0xb9ce[18]]?parseInt(_0xb2aax10[_0xb9ce[19]][_0xb9ce[18]],10):100;var _0xb2aax13=_0xb2aax10[_0xb9ce[19]][_0xb9ce[20]]?parseInt(_0xb2aax10[_0xb9ce[19]][_0xb9ce[20]],10):0;var _0xb2aax14={where:{},limit:_0xb2aax12,offset:_0xb2aax13*_0xb2aax12};_[_0xb9ce[34]](_0xb2aax10[_0xb9ce[19]],function(_0xb2aax15,_0xb2aax16){switch(_0xb2aax16){case _0xb9ce[18]:;case _0xb9ce[20]:break;case _0xb9ce[23]:_0xb2aax14[_0xb9ce[21]]=util[_0xb9ce[26]](_0xb9ce[22],_0xb2aax10[_0xb9ce[19]][_0xb9ce[23]],_0xb2aax10[_0xb9ce[19]][_0xb9ce[24]]||_0xb9ce[25])||null;break;case _0xb9ce[24]:break;case _0xb9ce[32]:_0xb2aax14[_0xb9ce[28]][_0xb9ce[27]]=[];_0xb2aax11[_0xb9ce[31]](function(_0xb2aax17){var _0xb2aax18={};_0xb2aax18[_0xb2aax17]={$like:_0xb9ce[29]+_0xb2aax15+_0xb9ce[29]};_0xb2aax14[_0xb9ce[28]][_0xb9ce[27]][_0xb9ce[30]](_0xb2aax18)});break;default:_0xb2aax14[_0xb9ce[28]][_0xb2aax16]={$like:{}};_0xb2aax14[_0xb9ce[28]][_0xb2aax16][_0xb9ce[33]]=_0xb9ce[29]+_0xb2aax15+_0xb9ce[29]}});SalesforceAccount[_0xb9ce[46]](_0xb2aax14)[_0xb9ce[10]](function(_0xb2aax19){var _0xb2aax1a=Math[_0xb9ce[38]](_0xb2aax19[_0xb9ce[37]]/_0xb2aax12);var _0xb2aax1b=_0xb2aax1a>(_0xb2aax14[_0xb9ce[39]]+1)?util[_0xb9ce[26]](_0xb9ce[40],_0xb2aax10[_0xb9ce[41]],_0xb2aax10[_0xb9ce[43]][_0xb9ce[42]],_0xb2aax10[_0xb9ce[44]],_0xb2aax13+1):null;var _0xb2aax1c=_0xb2aax13>0?util[_0xb9ce[26]](_0xb9ce[40],_0xb2aax10[_0xb9ce[41]],_0xb2aax10[_0xb9ce[43]][_0xb9ce[42]],_0xb2aax10[_0xb9ce[44]],_0xb2aax13-1):null;return _0xb2aax6[_0xb9ce[7]](200)[_0xb9ce[6]]({count:_0xb2aax19[_0xb9ce[37]],rows:_0xb2aax19[_0xb9ce[45]],next_page:_0xb2aax1b,previous_page:_0xb2aax1c,total_pages:_0xb2aax1a})})[_0xb9ce[36]](function(_0xb2aax8){return _0xb2aax6[_0xb9ce[7]](500)[_0xb9ce[6]]({error:_0xb9ce[35]})})};exports[_0xb9ce[47]]=function(_0xb2aax10,_0xb2aax6){SalesforceAccount[_0xb9ce[50]](_0xb2aax10[_0xb9ce[49]][_0xb9ce[48]])[_0xb9ce[10]](handleEntityNotFound(_0xb2aax6))[_0xb9ce[10]](responseWithResult(_0xb2aax6))[_0xb9ce[36]](handleError(_0xb2aax6))};exports[_0xb9ce[51]]=function(_0xb2aax10,_0xb2aax6){SalesforceAccount[_0xb9ce[51]](_0xb2aax10[_0xb9ce[52]])[_0xb9ce[10]](responseWithResult(_0xb2aax6,201))[_0xb9ce[36]](handleError(_0xb2aax6))};exports[_0xb9ce[53]]=function(_0xb2aax10,_0xb2aax6){if(_0xb2aax10[_0xb9ce[52]][_0xb9ce[48]]){delete _0xb2aax10[_0xb9ce[52]][_0xb9ce[48]]};SalesforceAccount[_0xb9ce[50]](_0xb2aax10[_0xb9ce[49]][_0xb9ce[48]])[_0xb9ce[10]](handleEntityNotFound(_0xb2aax6))[_0xb9ce[10]](saveUpdates(_0xb2aax10[_0xb9ce[52]]))[_0xb9ce[10]](responseWithResult(_0xb2aax6))[_0xb9ce[36]](handleError(_0xb2aax6))};exports[_0xb9ce[12]]=function(_0xb2aax10,_0xb2aax6){SalesforceAccount[_0xb9ce[50]](_0xb2aax10[_0xb9ce[49]][_0xb9ce[48]])[_0xb9ce[10]](handleEntityNotFound(_0xb2aax6))[_0xb9ce[10]](removeEntity(_0xb2aax6))[_0xb9ce[36]](handleError(_0xb2aax6))};exports[_0xb9ce[54]]=function(_0xb2aax10,_0xb2aax6){SalesforceAccount[_0xb9ce[50]](_0xb2aax10[_0xb9ce[49]][_0xb9ce[48]])[_0xb9ce[10]](handleEntityNotFound(_0xb2aax6))[_0xb9ce[10]](function(_0xb2aax1d){var _0xb2aax1e= new jsforce.Connection({oauth2:{loginUrl:_0xb2aax1d[_0xb9ce[17]],clientId:_0xb2aax1d[_0xb9ce[55]],clientSecret:_0xb2aax1d[_0xb9ce[56]]}});var _0xb2aax1f=_0xb2aax1d[_0xb9ce[59]][_0xb9ce[58]](_0xb2aax1d[_0xb9ce[57]]);_0xb2aax1e[_0xb9ce[61]](_0xb2aax1d[_0xb9ce[16]],_0xb2aax1f,function(_0xb2aax8,_0xb2aax20){if(_0xb2aax8){return _0xb2aax6[_0xb9ce[7]](400)[_0xb9ce[6]](_0xb2aax8)};return _0xb2aax6[_0xb9ce[60]](200)})})[_0xb9ce[36]](handleError(_0xb2aax6))};exports[_0xb9ce[62]]=function(_0xb2aax10,_0xb2aax6){var _0xb2aax21={};_0xb2aax21[_0xb2aax10[_0xb9ce[49]][_0xb9ce[63]]]=_0xb2aax10[_0xb9ce[52]][_0xb9ce[64]];SalesforceAccount[_0xb9ce[46]]({where:_0xb2aax21})[_0xb9ce[10]](function(_0xb2aax19){if(_0xb2aax19[_0xb9ce[37]]){return _0xb2aax6[_0xb9ce[7]](200)[_0xb9ce[6]]({isValid:false,value:_0xb2aax10[_0xb9ce[52]][_0xb9ce[64]]})};return _0xb2aax6[_0xb9ce[7]](200)[_0xb9ce[6]]({isValid:true,value:_0xb2aax10[_0xb9ce[52]][_0xb9ce[64]]})})[_0xb9ce[36]](function(_0xb2aax8){return handleError(_0xb2aax6,_0xb2aax8)})};exports[_0xb9ce[65]]=function(_0xb2aax10,_0xb2aax6){SalesforceAccount[_0xb9ce[50]](_0xb2aax10[_0xb9ce[49]][_0xb9ce[48]])[_0xb9ce[10]](handleEntityNotFound(_0xb2aax6))[_0xb9ce[10]](function(_0xb2aax1d){var _0xb2aax1e= new jsforce.Connection({oauth2:{loginUrl:_0xb2aax1d[_0xb9ce[17]],clientId:_0xb2aax1d[_0xb9ce[55]],clientSecret:_0xb2aax1d[_0xb9ce[56]]}});var _0xb2aax1f=_0xb2aax1d[_0xb9ce[59]][_0xb9ce[58]](_0xb2aax1d[_0xb9ce[57]]);_0xb2aax1e[_0xb9ce[61]](_0xb2aax1d[_0xb9ce[16]],_0xb2aax1f,function(_0xb2aax8,_0xb2aax20){if(_0xb2aax8){return _0xb2aax6[_0xb9ce[7]](400)[_0xb9ce[6]](_0xb2aax8)};_0xb2aax1e[_0xb9ce[69]](_0xb9ce[68])[_0xb9ce[67]](function(_0xb2aax8,_0xb2aax22){if(_0xb2aax8){return _0xb2aax6[_0xb9ce[7]](400)[_0xb9ce[6]](_0xb2aax8)};return _0xb2aax6[_0xb9ce[7]](200)[_0xb9ce[6]](_0xb2aax22[_0xb9ce[66]])})})})[_0xb9ce[36]](handleError(_0xb2aax6))};exports[_0xb9ce[70]]=function(_0xb2aax10,_0xb2aax6){SalesforceAccount[_0xb9ce[12]]({where:{id:_0xb2aax10[_0xb9ce[19]][_0xb9ce[48]]},individualHooks:true})[_0xb9ce[10]](function(){return _0xb2aax6[_0xb9ce[60]](204)})[_0xb9ce[36]](function(_0xb2aax8){return handleError(_0xb2aax6,_0xb2aax8)})}
\ No newline at end of file
+/**
+ * Using Rails-like standard naming convention for endpoints.
+ * GET     /api/salesforce/accounts              ->  index
+ * POST    /api/salesforce/accounts              ->  create
+ * GET     /api/salesforce/accounts/:id          ->  show
+ * PUT     /api/salesforce/accounts/:id          ->  update
+ * DELETE  /api/salesforce/accounts/:id          ->  destroy
+ */
+
+'use strict';
+
+
+var _ = require('lodash');
+var util = require('util');
+var jsforce = require('jsforce');
+
+var SalesforceAccount = require('../../models').SalesforceAccount;
+
+
+function handleError(res, statusCode) {
+  statusCode = statusCode || 500;
+  return function(err) {
+    res.status(statusCode).send(err);
+  };
+}
+
+function responseWithResult(res, statusCode) {
+  statusCode = statusCode || 200;
+  return function(entity) {
+    if (entity) {
+      res.status(statusCode).json(entity);
+    }
+  };
+}
+
+function handleEntityNotFound(res) {
+  return function(entity) {
+    if (!entity) {
+      res.status(404).end();
+      return null;
+    }
+    return entity;
+  };
+}
+
+function saveUpdates(updates) {
+  return function(entity) {
+    return entity.updateAttributes(updates)
+      .then(function(updated) {
+        return updated;
+      });
+  };
+}
+
+function removeEntity(res) {
+  return function(entity) {
+    if (entity) {
+      return entity.destroy()
+        .then(function() {
+          res.status(204).end();
+        });
+    }
+  };
+}
+
+// Gets a list of SalesforceAccounts
+exports.index = function(req, res) {
+  var attributes = ['description', 'name', 'username', 'remoteUri'];
+  var per_page = req.query.per_page ? parseInt(req.query.per_page, 10) : 100;
+  var page = req.query.page ? parseInt(req.query.page, 10) : 0;
+
+  var query = {
+    where: {},
+    limit: per_page,
+    offset: page * per_page
+  };
+
+  _.forIn(req.query, function(value, key) {
+    switch (key) {
+      case 'per_page':
+      case 'page':
+        break;
+      case 'sort_by':
+        query.order = util.format('%s %s', req.query.sort_by, req.query.sort_order || 'ASC') || null;
+        break;
+      case 'sort_order':
+        break;
+      case '$':
+        query.where.$or = [];
+        attributes.forEach(function(attribute) {
+          var tmp = {};
+          tmp[attribute] = {
+            $like: '%' + value + '%'
+          };
+
+          query.where.$or.push(tmp);
+        });
+        break;
+      default:
+        query.where[key] = {
+          $like: {}
+        };
+        query.where[key].$like = '%' + value + '%';
+    }
+  });
+
+  SalesforceAccount
+    .findAndCountAll(query)
+    .then(function(result) {
+
+      var total_pages = Math.ceil(result.count / per_page);
+      var next_page = total_pages > (query.offset + 1) ? util.format('%s://%s%s?page=%d', req.protocol, req.headers.host, req.baseUrl, page + 1) : null;
+      var previous_page = page > 0 ? util.format('%s://%s%s?page=%d', req.protocol, req.headers.host, req.baseUrl, page - 1) : null;
+
+      return res.status(200).send({
+        count: result.count,
+        rows: result.rows,
+        next_page: next_page,
+        previous_page: previous_page,
+        total_pages: total_pages
+      });
+
+    })
+    .catch(function(err) {
+      return res.status(500).send({
+        error: 'Something blew up!'
+      });
+    });
+}
+
+// Gets a single SalesforceAccount from the DB
+exports.show = function(req, res) {
+  SalesforceAccount.findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(responseWithResult(res))
+    .catch(handleError(res));
+}
+
+// Creates a new SalesforceAccount in the DB
+exports.create = function(req, res) {
+  SalesforceAccount.create(req.body)
+    .then(responseWithResult(res, 201))
+    .catch(handleError(res));
+}
+
+// Updates an existing SalesforceAccount in the DB
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  SalesforceAccount.findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(saveUpdates(req.body))
+    .then(responseWithResult(res))
+    .catch(handleError(res));
+}
+
+// Deletes a SalesforceAccount from the DB
+exports.destroy = function(req, res) {
+  SalesforceAccount.findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(removeEntity(res))
+    .catch(handleError(res));
+}
+
+exports.checkAccount = function(req, res) {
+  SalesforceAccount.findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(function(account) {
+      var conn = new jsforce.Connection({
+        oauth2: {
+          loginUrl: account.remoteUri,
+          clientId: account.clientId,
+          clientSecret: account.clientSecret,
+        }
+      });
+      var pwd = account.password.concat(account.securityToken);
+      conn.login(account.username, pwd, function(err, userInfo) {
+        if (err) {
+          return res.status(400).send(err);
+        }
+        return res.sendStatus(200);
+      });
+    })
+    .catch(handleError(res));
+}
+
+exports.accountValidation = function(req, res) {
+  var where = {};
+  where[req.params.field] = req.body.value;
+  SalesforceAccount
+    .findAndCountAll({
+      where: where
+    })
+    .then(function(result) {
+      if (result.count) {
+        return res.status(200).send({
+          isValid: false,
+          value: req.body.value
+        });
+      }
+      return res.status(200).send({
+        isValid: true,
+        value: req.body.value
+      });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+exports.getFields = function(req, res) {
+  SalesforceAccount.findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(function(account) {
+      var conn = new jsforce.Connection({
+        oauth2: {
+          loginUrl: account.remoteUri,
+          clientId: account.clientId,
+          clientSecret: account.clientSecret,
+        }
+      });
+      var pwd = account.password.concat(account.securityToken);
+      conn.login(account.username, pwd, function(err, userInfo) {
+        if (err) {
+          return res.status(400).send(err);
+        }
+        conn.sobject("Task").describe(function(err, meta) {
+          if (err) {
+            return res.status(400).send(err);
+          }
+          return res.status(200).send(meta.fields);
+        });
+      });
+    })
+    .catch(handleError(res));
+};
+
+exports.bulkDestroy = function(req, res) {
+  SalesforceAccount
+    .destroy({
+      where: {
+        id: req.query.id
+      },
+      individualHooks: true
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
index 8a1ad4a..2c58d15 100644 (file)
@@ -1 +1,24 @@
-var _0xde3c=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x41\x63\x63\x6F\x75\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5F\x61\x63\x63\x6F\x75\x6E\x74\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5F\x61\x63\x63\x6F\x75\x6E\x74\x3A\x72\x65\x6D\x6F\x76\x65"];_0xde3c[0];var SalesforceAccount=require(_0xde3c[2])[_0xde3c[1]];exports[_0xde3c[3]]=function(_0x6d86x2){SalesforceAccount[_0xde3c[4]](function(_0x6d86x3){onSave(_0x6d86x2,_0x6d86x3)});SalesforceAccount[_0xde3c[5]](function(_0x6d86x3){onRemove(_0x6d86x2,_0x6d86x3)})};function onSave(_0x6d86x2,_0x6d86x3,_0x6d86x5){_0x6d86x2[_0xde3c[7]](_0xde3c[6],_0x6d86x3)}function onRemove(_0x6d86x2,_0x6d86x3,_0x6d86x5){_0x6d86x2[_0xde3c[7]](_0xde3c[8],_0x6d86x3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var SalesforceAccount = require('../../models').SalesforceAccount;
+
+exports.register = function(socket) {
+  SalesforceAccount.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  SalesforceAccount.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+};
+
+function onSave(socket, doc, cb) {
+  socket.emit('salesforce_account:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('salesforce_account:remove', doc);
+}
index 09c8d29..7936a09 100644 (file)
@@ -1 +1,18 @@
-var _0xa28d=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x2F\x3A\x69\x64\x2F\x3A\x74\x79\x70\x65","\x61\x64\x64\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x46\x69\x65\x6C\x64","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0xa28d[0];var express=require(_0xa28d[1]);var auth=require(_0xa28d[2]);var controller=require(_0xa28d[3]);var router=express.Router();router[_0xa28d[7]](_0xa28d[4],auth[_0xa28d[5]](),controller[_0xa28d[6]]);router[_0xa28d[7]](_0xa28d[8],auth[_0xa28d[5]](),controller[_0xa28d[9]]);router[_0xa28d[11]](_0xa28d[4],auth[_0xa28d[5]](),controller[_0xa28d[10]]);router[_0xa28d[13]](_0xa28d[8],auth[_0xa28d[5]](),controller[_0xa28d[12]]);router[_0xa28d[11]](_0xa28d[14],auth[_0xa28d[5]](),controller[_0xa28d[15]]);router[_0xa28d[16]](_0xa28d[8],auth[_0xa28d[5]](),controller[_0xa28d[12]]);router[_0xa28d[18]](_0xa28d[8],auth[_0xa28d[5]](),controller[_0xa28d[17]]);module[_0xa28d[19]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var auth = require('../../auth/auth.service');
+var controller = require('./salesforce_configuration.controller');
+
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), controller.index);
+
+router.get('/:id', auth.isAuthenticated(), controller.show);
+router.post('/', auth.isAuthenticated(), controller.create);
+router.put('/:id', auth.isAuthenticated(), controller.update);
+router.post('/:id/:type', auth.isAuthenticated(), controller.addConfigurationField);
+router.patch('/:id', auth.isAuthenticated(), controller.update);
+router.delete('/:id', auth.isAuthenticated(), controller.destroy);
+
+module.exports = router;
index 17ce4b9..0d1e211 100644 (file)
@@ -1 +1,97 @@
-var _0x8ea2=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6E\x6F\x50\x72\x65\x73\x65\x72\x76\x65\x43\x61\x63\x68\x65","\x70\x72\x6F\x78\x79\x71\x75\x69\x72\x65","\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x43\x74\x72\x6C\x2E\x69\x6E\x64\x65\x78","\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x43\x74\x72\x6C\x2E\x73\x68\x6F\x77","\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x43\x74\x72\x6C\x2E\x63\x72\x65\x61\x74\x65","\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x43\x74\x72\x6C\x2E\x75\x70\x64\x61\x74\x65","\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x43\x74\x72\x6C\x2E\x64\x65\x73\x74\x72\x6F\x79","\x73\x70\x79","\x2E\x2F\x69\x6E\x64\x65\x78\x2E\x6A\x73","\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x20\x41\x50\x49\x20\x52\x6F\x75\x74\x65\x72\x3A","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x74\x75\x72\x6E\x20\x61\x6E\x20\x65\x78\x70\x72\x65\x73\x73\x20\x72\x6F\x75\x74\x65\x72\x20\x69\x6E\x73\x74\x61\x6E\x63\x65","\x65\x71\x75\x61\x6C","\x74\x6F","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x2F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x69\x6E\x64\x65\x78","\x63\x61\x6C\x6C\x65\x64\x4F\x6E\x63\x65","\x62\x65\x65\x6E","\x68\x61\x76\x65","\x2F","\x77\x69\x74\x68\x41\x72\x67\x73","\x67\x65\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x2F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73\x2F\x3A\x69\x64","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x73\x68\x6F\x77","\x2F\x3A\x69\x64","\x50\x4F\x53\x54\x20\x2F\x61\x70\x69\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x2F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x50\x55\x54\x20\x2F\x61\x70\x69\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x2F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73\x2F\x3A\x69\x64","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x50\x41\x54\x43\x48\x20\x2F\x61\x70\x69\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x2F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73\x2F\x3A\x69\x64","\x70\x61\x74\x63\x68","\x44\x45\x4C\x45\x54\x45\x20\x2F\x61\x70\x69\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x2F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73\x2F\x3A\x69\x64","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65"];_0x8ea2[0];var proxyquire=require(_0x8ea2[2])[_0x8ea2[1]]();var salesforceConfigurationCtrlStub={index:_0x8ea2[3],show:_0x8ea2[4],create:_0x8ea2[5],update:_0x8ea2[6],destroy:_0x8ea2[7]};var routerStub={get:sinon[_0x8ea2[8]](),put:sinon[_0x8ea2[8]](),patch:sinon[_0x8ea2[8]](),post:sinon[_0x8ea2[8]](),delete:sinon[_0x8ea2[8]]()};var salesforceConfigurationIndex=proxyquire(_0x8ea2[9],{"\x65\x78\x70\x72\x65\x73\x73":{Router:function(){return routerStub}},"\x2E\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72":salesforceConfigurationCtrlStub});describe(_0x8ea2[10],function(){it(_0x8ea2[11],function(){expect(salesforceConfigurationIndex)[_0x8ea2[13]][_0x8ea2[12]](routerStub)});describe(_0x8ea2[14],function(){it(_0x8ea2[15],function(){expect(routerStub[_0x8ea2[21]][_0x8ea2[20]](_0x8ea2[19],_0x8ea2[3]))[_0x8ea2[13]][_0x8ea2[18]][_0x8ea2[17]][_0x8ea2[16]]})});describe(_0x8ea2[22],function(){it(_0x8ea2[23],function(){expect(routerStub[_0x8ea2[21]][_0x8ea2[20]](_0x8ea2[24],_0x8ea2[4]))[_0x8ea2[13]][_0x8ea2[18]][_0x8ea2[17]][_0x8ea2[16]]})});describe(_0x8ea2[25],function(){it(_0x8ea2[26],function(){expect(routerStub[_0x8ea2[27]][_0x8ea2[20]](_0x8ea2[19],_0x8ea2[5]))[_0x8ea2[13]][_0x8ea2[18]][_0x8ea2[17]][_0x8ea2[16]]})});describe(_0x8ea2[28],function(){it(_0x8ea2[29],function(){expect(routerStub[_0x8ea2[30]][_0x8ea2[20]](_0x8ea2[24],_0x8ea2[6]))[_0x8ea2[13]][_0x8ea2[18]][_0x8ea2[17]][_0x8ea2[16]]})});describe(_0x8ea2[31],function(){it(_0x8ea2[29],function(){expect(routerStub[_0x8ea2[32]][_0x8ea2[20]](_0x8ea2[24],_0x8ea2[6]))[_0x8ea2[13]][_0x8ea2[18]][_0x8ea2[17]][_0x8ea2[16]]})});describe(_0x8ea2[33],function(){it(_0x8ea2[34],function(){expect(routerStub[_0x8ea2[35]][_0x8ea2[20]](_0x8ea2[24],_0x8ea2[7]))[_0x8ea2[13]][_0x8ea2[18]][_0x8ea2[17]][_0x8ea2[16]]})})})
\ No newline at end of file
+'use strict';
+
+var proxyquire = require('proxyquire').noPreserveCache();
+
+var salesforceConfigurationCtrlStub = {
+  index: 'salesforceConfigurationCtrl.index',
+  show: 'salesforceConfigurationCtrl.show',
+  create: 'salesforceConfigurationCtrl.create',
+  update: 'salesforceConfigurationCtrl.update',
+  destroy: 'salesforceConfigurationCtrl.destroy'
+};
+
+var routerStub = {
+  get: sinon.spy(),
+  put: sinon.spy(),
+  patch: sinon.spy(),
+  post: sinon.spy(),
+  delete: sinon.spy()
+};
+
+// require the index with our stubbed out modules
+var salesforceConfigurationIndex = proxyquire('./index.js', {
+  'express': {
+    Router: function() {
+      return routerStub;
+    }
+  },
+  './salesforce_configuration.controller': salesforceConfigurationCtrlStub
+});
+
+describe('SalesforceConfiguration API Router:', function() {
+
+  it('should return an express router instance', function() {
+    expect(salesforceConfigurationIndex).to.equal(routerStub);
+  });
+
+  describe('GET /api/salesforce/configurations', function() {
+
+    it('should route to salesforceConfiguration.controller.index', function() {
+      expect(routerStub.get
+        .withArgs('/', 'salesforceConfigurationCtrl.index')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('GET /api/salesforce/configurations/:id', function() {
+
+    it('should route to salesforceConfiguration.controller.show', function() {
+      expect(routerStub.get
+        .withArgs('/:id', 'salesforceConfigurationCtrl.show')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('POST /api/salesforce/configurations', function() {
+
+    it('should route to salesforceConfiguration.controller.create', function() {
+      expect(routerStub.post
+        .withArgs('/', 'salesforceConfigurationCtrl.create')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('PUT /api/salesforce/configurations/:id', function() {
+
+    it('should route to salesforceConfiguration.controller.update', function() {
+      expect(routerStub.put
+        .withArgs('/:id', 'salesforceConfigurationCtrl.update')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('PATCH /api/salesforce/configurations/:id', function() {
+
+    it('should route to salesforceConfiguration.controller.update', function() {
+      expect(routerStub.patch
+        .withArgs('/:id', 'salesforceConfigurationCtrl.update')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('DELETE /api/salesforce/configurations/:id', function() {
+
+    it('should route to salesforceConfiguration.controller.destroy', function() {
+      expect(routerStub.delete
+        .withArgs('/:id', 'salesforceConfigurationCtrl.destroy')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+});
index 8628048..523aef6 100644 (file)
@@ -1 +1,147 @@
-var _0xcf44=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x46\x69\x65\x6C\x64","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6A\x73\x6F\x6E","\x65\x6E\x64","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x73\x74\x72\x6F\x79","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x71\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x53\x75\x62\x6A\x65\x63\x74","\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x46\x69\x65\x6C\x64","\x66\x69\x6E\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x66\x69\x6E\x64\x42\x79\x49\x64","\x61\x64\x64\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x46\x69\x65\x6C\x64","\x73\x70\x72\x65\x61\x64","\x61\x64\x64\x53\x75\x62\x6A\x65\x63\x74","\x73\x75\x62\x6A\x65\x63\x74","\x61\x64\x64\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x61\x64\x64\x46\x69\x65\x6C\x64","\x66\x69\x65\x6C\x64","\x74\x79\x70\x65"];_0xcf44[0];var _=require(_0xcf44[1]);var SalesforceConfiguration=require(_0xcf44[3])[_0xcf44[2]];var SalesforceField=require(_0xcf44[3])[_0xcf44[4]];function handleError(_0xab43x5,_0xab43x6){_0xab43x6=_0xab43x6||500;return function(_0xab43x7){_0xab43x5[_0xcf44[6]](_0xab43x6)[_0xcf44[5]](_0xab43x7)}}function responseWithResult(_0xab43x5,_0xab43x6){_0xab43x6=_0xab43x6||200;return function(_0xab43x9){if(_0xab43x9){_0xab43x5[_0xcf44[6]](_0xab43x6)[_0xcf44[7]](_0xab43x9)}}}function handleEntityNotFound(_0xab43x5){return function(_0xab43x9){if(!_0xab43x9){_0xab43x5[_0xcf44[6]](404)[_0xcf44[8]]();return null};return _0xab43x9}}function saveUpdates(_0xab43xc){return function(_0xab43x9){return _0xab43x9[_0xcf44[10]](_0xab43xc)[_0xcf44[9]](function(_0xab43xd){return _0xab43xd})}}function removeEntity(_0xab43x5){return function(_0xab43x9){if(_0xab43x9){return _0xab43x9[_0xcf44[11]]()[_0xcf44[9]](function(){_0xab43x5[_0xcf44[6]](204)[_0xcf44[8]]()})}}}exports[_0xcf44[12]]=function(_0xab43xf,_0xab43x5){SalesforceConfiguration[_0xcf44[15]]({where:_0xab43xf[_0xcf44[14]]})[_0xcf44[9]](responseWithResult(_0xab43x5))[_0xcf44[13]](handleError(_0xab43x5))};exports[_0xcf44[16]]=function(_0xab43xf,_0xab43x5){SalesforceConfiguration[_0xcf44[22]]({where:{id:_0xab43xf[_0xcf44[18]][_0xcf44[17]]},include:[{model:SalesforceField,as:_0xcf44[19]},{model:SalesforceField,as:_0xcf44[20]},{model:SalesforceField,as:_0xcf44[21]}]})[_0xcf44[9]](handleEntityNotFound(_0xab43x5))[_0xcf44[9]](responseWithResult(_0xab43x5))[_0xcf44[13]](handleError(_0xab43x5))};exports[_0xcf44[23]]=function(_0xab43xf,_0xab43x5){SalesforceConfiguration[_0xcf44[23]](_0xab43xf[_0xcf44[24]])[_0xcf44[9]](responseWithResult(_0xab43x5,201))[_0xcf44[13]](handleError(_0xab43x5))};exports[_0xcf44[25]]=function(_0xab43xf,_0xab43x5){if(_0xab43xf[_0xcf44[24]][_0xcf44[17]]){delete _0xab43xf[_0xcf44[24]][_0xcf44[17]]};SalesforceConfiguration[_0xcf44[26]](_0xab43xf[_0xcf44[18]][_0xcf44[17]])[_0xcf44[9]](handleEntityNotFound(_0xab43x5))[_0xcf44[9]](saveUpdates(_0xab43xf[_0xcf44[24]]))[_0xcf44[9]](responseWithResult(_0xab43x5))[_0xcf44[13]](handleError(_0xab43x5))};exports[_0xcf44[11]]=function(_0xab43xf,_0xab43x5){SalesforceConfiguration[_0xcf44[26]](_0xab43xf[_0xcf44[18]][_0xcf44[17]])[_0xcf44[9]](handleEntityNotFound(_0xab43x5))[_0xcf44[9]](removeEntity(_0xab43x5))[_0xcf44[13]](handleError(_0xab43x5))};exports[_0xcf44[27]]=function(_0xab43xf,_0xab43x5,_0xab43x10){var _0xab43x11;SalesforceConfiguration[_0xcf44[26]](_0xab43xf[_0xcf44[18]][_0xcf44[17]])[_0xcf44[9]](handleEntityNotFound(_0xab43x5))[_0xcf44[9]](function(_0xab43x14){_0xab43x11=_0xab43x14;return SalesforceField[_0xcf44[23]](_0xab43xf[_0xcf44[24]])})[_0xcf44[9]](function(_0xab43x13){switch(_0xab43xf[_0xcf44[18]][_0xcf44[35]]){case _0xcf44[30]:return [_0xab43x11[_0xcf44[29]](_0xab43x13),_0xab43x13];case _0xcf44[32]:return [_0xab43x11[_0xcf44[31]](_0xab43x13),_0xab43x13];case _0xcf44[34]:return [_0xab43x11[_0xcf44[33]](_0xab43x13),_0xab43x13]}})[_0xcf44[28]](function(_0xab43x12,_0xab43x13){return _0xab43x5[_0xcf44[6]](201)[_0xcf44[7]](_0xab43x13)})[_0xcf44[13]](handleError(_0xab43x5))}
\ No newline at end of file
+/**
+ * Using Rails-like standard naming convention for endpoints.
+ * GET     /api/salesforce/configurations              ->  index
+ * POST    /api/salesforce/configurations              ->  create
+ * GET     /api/salesforce/configurations/:id          ->  show
+ * PUT     /api/salesforce/configurations/:id          ->  update
+ * DELETE  /api/salesforce/configurations/:id          ->  destroy
+ */
+
+'use strict';
+
+
+var _ = require('lodash');
+
+var SalesforceConfiguration = require('../../models').SalesforceConfiguration;
+var SalesforceField = require('../../models').SalesforceField;
+
+
+function handleError(res, statusCode) {
+  statusCode = statusCode || 500;
+  return function(err) {
+    res.status(statusCode).send(err);
+  };
+}
+
+function responseWithResult(res, statusCode) {
+  statusCode = statusCode || 200;
+  return function(entity) {
+    if (entity) {
+      res.status(statusCode).json(entity);
+    }
+  };
+}
+
+function handleEntityNotFound(res) {
+  return function(entity) {
+    if (!entity) {
+      res.status(404).end();
+      return null;
+    }
+    return entity;
+  };
+}
+
+function saveUpdates(updates) {
+  return function(entity) {
+    return entity.updateAttributes(updates)
+      .then(function(updated) {
+        return updated;
+      });
+  };
+}
+
+function removeEntity(res) {
+  return function(entity) {
+    if (entity) {
+      return entity.destroy()
+        .then(function() {
+          res.status(204).end();
+        });
+    }
+  };
+}
+
+// Gets a list of SalesforceConfigurations
+exports.index = function(req, res) {
+  SalesforceConfiguration.findAll({
+      where: req.query
+    })
+    .then(responseWithResult(res))
+    .catch(handleError(res));
+}
+
+// Gets a single SalesforceConfiguration from the DB
+exports.show = function(req, res) {
+  SalesforceConfiguration.find({
+      where: {
+        id: req.params.id
+      },
+      include: [{
+        model: SalesforceField,
+        as: 'Subject'
+      }, {
+        model: SalesforceField,
+        as: 'Description'
+      }, {
+        model: SalesforceField,
+        as: 'Field'
+      }]
+    })
+    .then(handleEntityNotFound(res))
+    .then(responseWithResult(res))
+    .catch(handleError(res));
+}
+
+// Creates a new SalesforceConfiguration in the DB
+exports.create = function(req, res) {
+  SalesforceConfiguration.create(req.body)
+    .then(responseWithResult(res, 201))
+    .catch(handleError(res));
+}
+
+// Updates an existing SalesforceConfiguration in the DB
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  SalesforceConfiguration.findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(saveUpdates(req.body))
+    .then(responseWithResult(res))
+    .catch(handleError(res));
+}
+
+// Deletes a SalesforceConfiguration from the DB
+exports.destroy = function(req, res) {
+  SalesforceConfiguration.findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(removeEntity(res))
+    .catch(handleError(res));
+}
+
+exports.addConfigurationField = function(req, res, next) {
+  // console.log(req.params);
+  var salesforceConfiguration;
+  SalesforceConfiguration
+    .findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(function(salesforce_configuration) {
+      salesforceConfiguration = salesforce_configuration;
+      return SalesforceField.create(req.body)
+    })
+    .then(function(salesforceField) {
+      switch (req.params.type) {
+        case 'subject':
+          return [salesforceConfiguration.addSubject(salesforceField), salesforceField];
+        case 'description':
+          return [salesforceConfiguration.addDescription(salesforceField), salesforceField];
+        case 'field':
+          return [salesforceConfiguration.addField(salesforceField), salesforceField];
+      }
+    })
+    .spread(function(data, salesforceField) {
+      return res.status(201).json(salesforceField);
+    })
+    .catch(handleError(res));
+};
index 11b2639..c45a482 100644 (file)
@@ -1 +1,24 @@
-var _0xcb6f=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x3A\x72\x65\x6D\x6F\x76\x65"];_0xcb6f[0];var SalesforceConfiguration=require(_0xcb6f[2])[_0xcb6f[1]];exports[_0xcb6f[3]]=function(_0x5976x2){SalesforceConfiguration[_0xcb6f[4]](function(_0x5976x3){onSave(_0x5976x2,_0x5976x3)});SalesforceConfiguration[_0xcb6f[5]](function(_0x5976x3){onRemove(_0x5976x2,_0x5976x3)})};function onSave(_0x5976x2,_0x5976x3,_0x5976x5){_0x5976x2[_0xcb6f[7]](_0xcb6f[6],_0x5976x3)}function onRemove(_0x5976x2,_0x5976x3,_0x5976x5){_0x5976x2[_0xcb6f[7]](_0xcb6f[8],_0x5976x3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var SalesforceConfiguration = require('../../models').SalesforceConfiguration;
+
+exports.register = function(socket) {
+  SalesforceConfiguration.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  SalesforceConfiguration.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+};
+
+function onSave(socket, doc, cb) {
+  socket.emit('salesforce_configuration:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('salesforce_configuration:remove', doc);
+}
index 170e1b8..4a0ccb2 100644 (file)
@@ -1 +1,18 @@
-var _0xad54=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5F\x66\x69\x65\x6C\x64\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0xad54[0];var express=require(_0xad54[1]);var auth=require(_0xad54[2]);var controller=require(_0xad54[3]);var router=express.Router();router[_0xad54[7]](_0xad54[4],auth[_0xad54[5]](),controller[_0xad54[6]]);router[_0xad54[7]](_0xad54[8],auth[_0xad54[5]](),controller[_0xad54[9]]);router[_0xad54[11]](_0xad54[4],auth[_0xad54[5]](),controller[_0xad54[10]]);router[_0xad54[13]](_0xad54[8],auth[_0xad54[5]](),controller[_0xad54[12]]);router[_0xad54[14]](_0xad54[8],auth[_0xad54[5]](),controller[_0xad54[12]]);router[_0xad54[16]](_0xad54[8],auth[_0xad54[5]](),controller[_0xad54[15]]);module[_0xad54[17]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var auth = require('../../auth/auth.service');
+var controller = require('./salesforce_field.controller');
+
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), controller.index);
+
+router.get('/:id', auth.isAuthenticated(), controller.show);
+router.post('/', auth.isAuthenticated(), controller.create);
+router.put('/:id', auth.isAuthenticated(), controller.update);
+router.patch('/:id', auth.isAuthenticated(), controller.update);
+router.delete('/:id', auth.isAuthenticated(), controller.destroy);
+
+
+module.exports = router;
index 93f1e7f..639e318 100644 (file)
@@ -1 +1,97 @@
-var _0x3363=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6E\x6F\x50\x72\x65\x73\x65\x72\x76\x65\x43\x61\x63\x68\x65","\x70\x72\x6F\x78\x79\x71\x75\x69\x72\x65","\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x46\x69\x65\x6C\x64\x43\x74\x72\x6C\x2E\x69\x6E\x64\x65\x78","\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x46\x69\x65\x6C\x64\x43\x74\x72\x6C\x2E\x73\x68\x6F\x77","\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x46\x69\x65\x6C\x64\x43\x74\x72\x6C\x2E\x63\x72\x65\x61\x74\x65","\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x46\x69\x65\x6C\x64\x43\x74\x72\x6C\x2E\x75\x70\x64\x61\x74\x65","\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x46\x69\x65\x6C\x64\x43\x74\x72\x6C\x2E\x64\x65\x73\x74\x72\x6F\x79","\x73\x70\x79","\x2E\x2F\x69\x6E\x64\x65\x78\x2E\x6A\x73","\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x46\x69\x65\x6C\x64\x20\x41\x50\x49\x20\x52\x6F\x75\x74\x65\x72\x3A","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x74\x75\x72\x6E\x20\x61\x6E\x20\x65\x78\x70\x72\x65\x73\x73\x20\x72\x6F\x75\x74\x65\x72\x20\x69\x6E\x73\x74\x61\x6E\x63\x65","\x65\x71\x75\x61\x6C","\x74\x6F","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x2F\x66\x69\x65\x6C\x64\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x46\x69\x65\x6C\x64\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x69\x6E\x64\x65\x78","\x63\x61\x6C\x6C\x65\x64\x4F\x6E\x63\x65","\x62\x65\x65\x6E","\x68\x61\x76\x65","\x2F","\x77\x69\x74\x68\x41\x72\x67\x73","\x67\x65\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x2F\x66\x69\x65\x6C\x64\x73\x2F\x3A\x69\x64","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x46\x69\x65\x6C\x64\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x73\x68\x6F\x77","\x2F\x3A\x69\x64","\x50\x4F\x53\x54\x20\x2F\x61\x70\x69\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x2F\x66\x69\x65\x6C\x64\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x46\x69\x65\x6C\x64\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x50\x55\x54\x20\x2F\x61\x70\x69\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x2F\x66\x69\x65\x6C\x64\x73\x2F\x3A\x69\x64","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x46\x69\x65\x6C\x64\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x50\x41\x54\x43\x48\x20\x2F\x61\x70\x69\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x2F\x66\x69\x65\x6C\x64\x73\x2F\x3A\x69\x64","\x70\x61\x74\x63\x68","\x44\x45\x4C\x45\x54\x45\x20\x2F\x61\x70\x69\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x2F\x66\x69\x65\x6C\x64\x73\x2F\x3A\x69\x64","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x46\x69\x65\x6C\x64\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65"];_0x3363[0];var proxyquire=require(_0x3363[2])[_0x3363[1]]();var salesforceFieldCtrlStub={index:_0x3363[3],show:_0x3363[4],create:_0x3363[5],update:_0x3363[6],destroy:_0x3363[7]};var routerStub={get:sinon[_0x3363[8]](),put:sinon[_0x3363[8]](),patch:sinon[_0x3363[8]](),post:sinon[_0x3363[8]](),delete:sinon[_0x3363[8]]()};var salesforceFieldIndex=proxyquire(_0x3363[9],{"\x65\x78\x70\x72\x65\x73\x73":{Router:function(){return routerStub}},"\x2E\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5F\x66\x69\x65\x6C\x64\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72":salesforceFieldCtrlStub});describe(_0x3363[10],function(){it(_0x3363[11],function(){expect(salesforceFieldIndex)[_0x3363[13]][_0x3363[12]](routerStub)});describe(_0x3363[14],function(){it(_0x3363[15],function(){expect(routerStub[_0x3363[21]][_0x3363[20]](_0x3363[19],_0x3363[3]))[_0x3363[13]][_0x3363[18]][_0x3363[17]][_0x3363[16]]})});describe(_0x3363[22],function(){it(_0x3363[23],function(){expect(routerStub[_0x3363[21]][_0x3363[20]](_0x3363[24],_0x3363[4]))[_0x3363[13]][_0x3363[18]][_0x3363[17]][_0x3363[16]]})});describe(_0x3363[25],function(){it(_0x3363[26],function(){expect(routerStub[_0x3363[27]][_0x3363[20]](_0x3363[19],_0x3363[5]))[_0x3363[13]][_0x3363[18]][_0x3363[17]][_0x3363[16]]})});describe(_0x3363[28],function(){it(_0x3363[29],function(){expect(routerStub[_0x3363[30]][_0x3363[20]](_0x3363[24],_0x3363[6]))[_0x3363[13]][_0x3363[18]][_0x3363[17]][_0x3363[16]]})});describe(_0x3363[31],function(){it(_0x3363[29],function(){expect(routerStub[_0x3363[32]][_0x3363[20]](_0x3363[24],_0x3363[6]))[_0x3363[13]][_0x3363[18]][_0x3363[17]][_0x3363[16]]})});describe(_0x3363[33],function(){it(_0x3363[34],function(){expect(routerStub[_0x3363[35]][_0x3363[20]](_0x3363[24],_0x3363[7]))[_0x3363[13]][_0x3363[18]][_0x3363[17]][_0x3363[16]]})})})
\ No newline at end of file
+'use strict';
+
+var proxyquire = require('proxyquire').noPreserveCache();
+
+var salesforceFieldCtrlStub = {
+  index: 'salesforceFieldCtrl.index',
+  show: 'salesforceFieldCtrl.show',
+  create: 'salesforceFieldCtrl.create',
+  update: 'salesforceFieldCtrl.update',
+  destroy: 'salesforceFieldCtrl.destroy'
+};
+
+var routerStub = {
+  get: sinon.spy(),
+  put: sinon.spy(),
+  patch: sinon.spy(),
+  post: sinon.spy(),
+  delete: sinon.spy()
+};
+
+// require the index with our stubbed out modules
+var salesforceFieldIndex = proxyquire('./index.js', {
+  'express': {
+    Router: function() {
+      return routerStub;
+    }
+  },
+  './salesforce_field.controller': salesforceFieldCtrlStub
+});
+
+describe('SalesforceField API Router:', function() {
+
+  it('should return an express router instance', function() {
+    expect(salesforceFieldIndex).to.equal(routerStub);
+  });
+
+  describe('GET /api/salesforce/fields', function() {
+
+    it('should route to salesforceField.controller.index', function() {
+      expect(routerStub.get
+        .withArgs('/', 'salesforceFieldCtrl.index')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('GET /api/salesforce/fields/:id', function() {
+
+    it('should route to salesforceField.controller.show', function() {
+      expect(routerStub.get
+        .withArgs('/:id', 'salesforceFieldCtrl.show')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('POST /api/salesforce/fields', function() {
+
+    it('should route to salesforceField.controller.create', function() {
+      expect(routerStub.post
+        .withArgs('/', 'salesforceFieldCtrl.create')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('PUT /api/salesforce/fields/:id', function() {
+
+    it('should route to salesforceField.controller.update', function() {
+      expect(routerStub.put
+        .withArgs('/:id', 'salesforceFieldCtrl.update')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('PATCH /api/salesforce/fields/:id', function() {
+
+    it('should route to salesforceField.controller.update', function() {
+      expect(routerStub.patch
+        .withArgs('/:id', 'salesforceFieldCtrl.update')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('DELETE /api/salesforce/fields/:id', function() {
+
+    it('should route to salesforceField.controller.destroy', function() {
+      expect(routerStub.delete
+        .withArgs('/:id', 'salesforceFieldCtrl.destroy')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+});
index 7355895..bab61d7 100644 (file)
@@ -1 +1,104 @@
-var _0x5236=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x46\x69\x65\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6A\x73\x6F\x6E","\x65\x6E\x64","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x73\x74\x72\x6F\x79","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65"];_0x5236[0];var _=require(_0x5236[1]);var SalesforceField=require(_0x5236[3])[_0x5236[2]];function handleError(_0xe35ex4,_0xe35ex5){_0xe35ex5=_0xe35ex5||500;return function(_0xe35ex6){_0xe35ex4[_0x5236[5]](_0xe35ex5)[_0x5236[4]](_0xe35ex6)}}function responseWithResult(_0xe35ex4,_0xe35ex5){_0xe35ex5=_0xe35ex5||200;return function(_0xe35ex8){if(_0xe35ex8){_0xe35ex4[_0x5236[5]](_0xe35ex5)[_0x5236[6]](_0xe35ex8)}}}function handleEntityNotFound(_0xe35ex4){return function(_0xe35ex8){if(!_0xe35ex8){_0xe35ex4[_0x5236[5]](404)[_0x5236[7]]();return null};return _0xe35ex8}}function saveUpdates(_0xe35exb){return function(_0xe35ex8){return _0xe35ex8[_0x5236[9]](_0xe35exb)[_0x5236[8]](function(_0xe35exc){return _0xe35exc})}}function removeEntity(_0xe35ex4){return function(_0xe35ex8){if(_0xe35ex8){return _0xe35ex8[_0x5236[10]]()[_0x5236[8]](function(){_0xe35ex4[_0x5236[5]](204)[_0x5236[7]]()})}}}exports[_0x5236[11]]=function(_0xe35exe,_0xe35ex4){SalesforceField[_0x5236[13]]()[_0x5236[8]](responseWithResult(_0xe35ex4))[_0x5236[12]](handleError(_0xe35ex4))};exports[_0x5236[14]]=function(_0xe35exe,_0xe35ex4){SalesforceField[_0x5236[17]](_0xe35exe[_0x5236[16]][_0x5236[15]])[_0x5236[8]](handleEntityNotFound(_0xe35ex4))[_0x5236[8]](responseWithResult(_0xe35ex4))[_0x5236[12]](handleError(_0xe35ex4))};exports[_0x5236[18]]=function(_0xe35exe,_0xe35ex4){SalesforceField[_0x5236[18]](_0xe35exe[_0x5236[19]])[_0x5236[8]](responseWithResult(_0xe35ex4,201))[_0x5236[12]](handleError(_0xe35ex4))};exports[_0x5236[20]]=function(_0xe35exe,_0xe35ex4){if(_0xe35exe[_0x5236[19]][_0x5236[15]]){delete _0xe35exe[_0x5236[19]][_0x5236[15]]};SalesforceField[_0x5236[17]](_0xe35exe[_0x5236[16]][_0x5236[15]])[_0x5236[8]](handleEntityNotFound(_0xe35ex4))[_0x5236[8]](saveUpdates(_0xe35exe[_0x5236[19]]))[_0x5236[8]](responseWithResult(_0xe35ex4))[_0x5236[12]](handleError(_0xe35ex4))};exports[_0x5236[10]]=function(_0xe35exe,_0xe35ex4){SalesforceField[_0x5236[17]](_0xe35exe[_0x5236[16]][_0x5236[15]])[_0x5236[8]](handleEntityNotFound(_0xe35ex4))[_0x5236[8]](removeEntity(_0xe35ex4))[_0x5236[12]](handleError(_0xe35ex4))}
\ No newline at end of file
+/**
+ * Using Rails-like standard naming convention for endpoints.
+ * GET     /api/salesforce/fields              ->  index
+ * POST    /api/salesforce/fields              ->  create
+ * GET     /api/salesforce/fields/:id          ->  show
+ * PUT     /api/salesforce/fields/:id          ->  update
+ * DELETE  /api/salesforce/fields/:id          ->  destroy
+ */
+
+'use strict';
+
+
+var _ = require('lodash');
+
+var SalesforceField = require('../../models').SalesforceField;
+
+
+function handleError(res, statusCode) {
+  statusCode = statusCode || 500;
+  return function(err) {
+    res.status(statusCode).send(err);
+  };
+}
+
+function responseWithResult(res, statusCode) {
+  statusCode = statusCode || 200;
+  return function(entity) {
+    if (entity) {
+      res.status(statusCode).json(entity);
+    }
+  };
+}
+
+function handleEntityNotFound(res) {
+  return function(entity) {
+    if (!entity) {
+      res.status(404).end();
+      return null;
+    }
+    return entity;
+  };
+}
+
+function saveUpdates(updates) {
+  return function(entity) {
+    return entity.updateAttributes(updates)
+      .then(function(updated) {
+        return updated;
+      });
+  };
+}
+
+function removeEntity(res) {
+  return function(entity) {
+    if (entity) {
+      return entity.destroy()
+        .then(function() {
+          res.status(204).end();
+        });
+    }
+  };
+}
+
+// Gets a list of SalesforceFields
+exports.index = function(req, res) {
+  SalesforceField.findAll()
+    .then(responseWithResult(res))
+    .catch(handleError(res));
+}
+
+// Gets a single SalesforceField from the DB
+exports.show = function(req, res) {
+  SalesforceField.findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(responseWithResult(res))
+    .catch(handleError(res));
+}
+
+// Creates a new SalesforceField in the DB
+exports.create = function(req, res) {
+  SalesforceField.create(req.body)
+    .then(responseWithResult(res, 201))
+    .catch(handleError(res));
+}
+
+// Updates an existing SalesforceField in the DB
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  SalesforceField.findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(saveUpdates(req.body))
+    .then(responseWithResult(res))
+    .catch(handleError(res));
+}
+
+// Deletes a SalesforceField from the DB
+exports.destroy = function(req, res) {
+  SalesforceField.findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(removeEntity(res))
+    .catch(handleError(res));
+}
index ae646a2..b3f5775 100644 (file)
@@ -1 +1,24 @@
-var _0x55ee=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x46\x69\x65\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5F\x66\x69\x65\x6C\x64\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5F\x66\x69\x65\x6C\x64\x3A\x72\x65\x6D\x6F\x76\x65"];_0x55ee[0];var SalesforceField=require(_0x55ee[2])[_0x55ee[1]];exports[_0x55ee[3]]=function(_0xab37x2){SalesforceField[_0x55ee[4]](function(_0xab37x3){onSave(_0xab37x2,_0xab37x3)});SalesforceField[_0x55ee[5]](function(_0xab37x3){onRemove(_0xab37x2,_0xab37x3)})};function onSave(_0xab37x2,_0xab37x3,_0xab37x5){_0xab37x2[_0x55ee[7]](_0x55ee[6],_0xab37x3)}function onRemove(_0xab37x2,_0xab37x3,_0xab37x5){_0xab37x2[_0x55ee[7]](_0x55ee[8],_0xab37x3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var SalesforceField = require('../../models').SalesforceField;
+
+exports.register = function(socket) {
+  SalesforceField.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  SalesforceField.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+};
+
+function onSave(socket, doc, cb) {
+  socket.emit('salesforce_field:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('salesforce_field:remove', doc);
+}
index 5cacd6c..c1bf88f 100644 (file)
@@ -1 +1,24 @@
-var _0x2be8=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x73\x65\x72\x76\x69\x63\x65\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x63\x75\x73\x74\x6F\x6D\x66\x69\x65\x6C\x64\x73\x2F\x3A\x69\x64","\x73\x68\x6F\x77\x43\x75\x73\x74\x6F\x6D\x46\x69\x65\x6C\x64","\x2F\x3A\x69\x64\x2F\x63\x75\x73\x74\x6F\x6D\x66\x69\x65\x6C\x64\x73","\x67\x65\x74\x43\x75\x73\x74\x6F\x6D\x46\x69\x65\x6C\x64\x73","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x2F\x76\x61\x6C\x69\x64\x61\x74\x65","\x73\x65\x72\x76\x69\x63\x65\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E","\x2F\x3A\x69\x64\x2F\x61\x67\x65\x6E\x74\x73","\x61\x64\x64\x41\x67\x65\x6E\x74\x73","\x63\x72\x65\x61\x74\x65\x43\x75\x73\x74\x6F\x6D\x46\x69\x65\x6C\x64","\x75\x70\x64\x61\x74\x65\x43\x75\x73\x74\x6F\x6D\x46\x69\x65\x6C\x64","\x70\x75\x74","\x75\x70\x64\x61\x74\x65","\x72\x65\x6D\x6F\x76\x65\x41\x67\x65\x6E\x74\x73","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x61\x63\x74\x69\x76\x61\x74\x65\x43\x75\x73\x74\x6F\x6D\x46\x69\x65\x6C\x64","\x65\x78\x70\x6F\x72\x74\x73"];_0x2be8[0];var express=require(_0x2be8[1]);var controller=require(_0x2be8[2]);var auth=require(_0x2be8[3]);var router=express.Router();router[_0x2be8[7]](_0x2be8[4],auth[_0x2be8[5]](),controller[_0x2be8[6]]);router[_0x2be8[7]](_0x2be8[8],auth[_0x2be8[5]](),controller[_0x2be8[9]]);router[_0x2be8[7]](_0x2be8[10],auth[_0x2be8[5]](),controller[_0x2be8[11]]);router[_0x2be8[7]](_0x2be8[12],auth[_0x2be8[5]](),controller[_0x2be8[13]]);router[_0x2be8[15]](_0x2be8[4],auth[_0x2be8[5]](),controller[_0x2be8[14]]);router[_0x2be8[15]](_0x2be8[16],auth[_0x2be8[5]](),controller[_0x2be8[17]]);router[_0x2be8[15]](_0x2be8[18],auth[_0x2be8[5]](),controller[_0x2be8[19]]);router[_0x2be8[15]](_0x2be8[10],auth[_0x2be8[5]](),controller[_0x2be8[20]]);router[_0x2be8[22]](_0x2be8[8],auth[_0x2be8[5]](),controller[_0x2be8[21]]);router[_0x2be8[22]](_0x2be8[12],auth[_0x2be8[5]](),controller[_0x2be8[23]]);router[_0x2be8[22]](_0x2be8[18],auth[_0x2be8[5]](),controller[_0x2be8[24]]);router[_0x2be8[26]](_0x2be8[4],auth[_0x2be8[5]](),controller[_0x2be8[25]]);router[_0x2be8[26]](_0x2be8[12],auth[_0x2be8[5]](),controller[_0x2be8[27]]);router[_0x2be8[26]](_0x2be8[8],auth[_0x2be8[5]](),controller[_0x2be8[28]]);module[_0x2be8[29]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./service.controller');
+var auth = require('../../auth/auth.service');
+
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), controller.index);
+router.get('/customfields/:id', auth.isAuthenticated(), controller.showCustomField);
+router.get('/:id/customfields', auth.isAuthenticated(), controller.getCustomFields);
+router.get('/:id', auth.isAuthenticated(), controller.show);
+router.post('/', auth.isAuthenticated(), controller.create);
+router.post('/validate', auth.isAuthenticated(), controller.serviceValidation);
+router.post('/:id/agents', auth.isAuthenticated(), controller.addAgents);
+router.post('/:id/customfields', auth.isAuthenticated(), controller.createCustomField);
+router.put('/customfields/:id', auth.isAuthenticated(), controller.updateCustomField);
+router.put('/:id', auth.isAuthenticated(), controller.update);
+router.put('/:id/agents', auth.isAuthenticated(), controller.removeAgents);
+router.delete('/', auth.isAuthenticated(), controller.bulkDestroy);
+router.delete('/:id', auth.isAuthenticated(), controller.destroy);
+router.delete('/customfields/:id', auth.isAuthenticated(), controller.deactivateCustomField);
+
+module.exports = router;
index 6e1e5bc..bb36742 100644 (file)
@@ -1 +1,379 @@
-var _0xc11d=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x55\x73\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x53\x65\x72\x76\x69\x63\x65","\x55\x73\x65\x72\x48\x61\x73\x53\x65\x72\x76\x69\x63\x65","\x43\x75\x73\x74\x6F\x6D\x46\x69\x65\x6C\x64","\x43\x6F\x6E\x74\x61\x63\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x67\x65\x74\x43\x75\x73\x74\x6F\x6D\x46\x69\x65\x6C\x64\x73","\x6C\x6F\x67","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77\x43\x75\x73\x74\x6F\x6D\x46\x69\x65\x6C\x64","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x75\x70\x64\x61\x74\x65\x43\x75\x73\x74\x6F\x6D\x46\x69\x65\x6C\x64","\x6C\x65\x6E\x67\x74\x68","\x4D\x45\x53\x53\x41\x47\x45\x5F\x45\x58\x49\x53\x54\x5F\x43\x55\x53\x54\x4F\x4D\x5F\x46\x49\x45\x4C\x44","\x62\x6F\x64\x79","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x6E\x61\x6D\x65","\x63\x72\x65\x61\x74\x65\x43\x75\x73\x74\x6F\x6D\x46\x69\x65\x6C\x64","\x53\x65\x72\x76\x69\x63\x65\x49\x64","\x63\x72\x65\x61\x74\x65","\x73\x68\x6F\x77","\x73\x65\x72\x76\x69\x63\x65\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E","\x46\x69\x6E\x64\x69\x6E\x67\x20\x61\x70\x70\x20\x72\x6F\x77\x2E\x2E\x2E\x2E\x2E","\x4D\x45\x53\x53\x41\x47\x45\x5F\x45\x58\x49\x53\x54\x5F\x53\x45\x52\x56\x49\x43\x45","\x75\x70\x64\x61\x74\x65","\x61\x64\x64\x41\x67\x65\x6E\x74\x73","\x6D\x61\x70","\x62\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x61\x67\x65\x6E\x74\x73","\x72\x65\x6D\x6F\x76\x65\x41\x67\x65\x6E\x74\x73","\x72\x65\x6D\x6F\x76\x65\x55\x73\x65\x72\x73","\x6E\x6F\x20\x73\x65\x72\x76\x69\x63\x65\x20\x66\x6F\x75\x6E\x64","\x66\x69\x6E\x64","\x64\x65\x73\x74\x72\x6F\x79","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x61\x6C\x6C","\x43\x6F\x6E\x74\x61\x63\x74\x73","\x70\x75\x73\x68","\x66\x6F\x72\x45\x61\x63\x68","\x64\x65\x61\x63\x74\x69\x76\x61\x74\x65\x43\x75\x73\x74\x6F\x6D\x46\x69\x65\x6C\x64"];_0xc11d[0];var _=require(_0xc11d[1]);var util=require(_0xc11d[2]);var User=require(_0xc11d[4])[_0xc11d[3]];var Service=require(_0xc11d[4])[_0xc11d[5]];var UserHasService=require(_0xc11d[4])[_0xc11d[6]];var CustomField=require(_0xc11d[4])[_0xc11d[7]];var Contact=require(_0xc11d[4])[_0xc11d[8]];var Util=require(_0xc11d[9]);exports[_0xc11d[10]]=function(_0x938dx9,_0x938dxa,_0x938dxb){return Service[_0xc11d[17]](Util[_0xc11d[16]](_0x938dx9[_0xc11d[15]]))[_0xc11d[14]](function(_0x938dxd){_0x938dxa[_0xc11d[13]](200)[_0xc11d[12]](_0x938dxd)})[_0xc11d[11]](function(_0x938dxc){return handleError(_0x938dxa,_0x938dxc)})};exports[_0xc11d[18]]=function(_0x938dx9,_0x938dxa){CustomField[_0xc11d[22]]({where:{ServiceId:_0x938dx9[_0xc11d[21]][_0xc11d[20]],active:true}})[_0xc11d[14]](function(_0x938dxe){return _0x938dxa[_0xc11d[13]](200)[_0xc11d[12]](_0x938dxe)})[_0xc11d[11]](function(_0x938dxc){console[_0xc11d[19]](_0x938dxc);return handleError(_0x938dxa,_0x938dxc)})};exports[_0xc11d[23]]=function(_0x938dx9,_0x938dxa){CustomField[_0xc11d[25]](_0x938dx9[_0xc11d[21]][_0xc11d[20]])[_0xc11d[14]](function(_0x938dxf){if(!_0x938dxf){return _0x938dxa[_0xc11d[24]](404)};return _0x938dxa[_0xc11d[12]](_0x938dxf)})[_0xc11d[11]](function(_0x938dxc){return handleError(_0x938dxa,_0x938dxc)})};exports[_0xc11d[26]]=function(_0x938dx9,_0x938dxa){CustomField[_0xc11d[22]]({where:{name:_0x938dx9[_0xc11d[29]][_0xc11d[32]],id:{$ne:_0x938dx9[_0xc11d[29]][_0xc11d[20]]}}})[_0xc11d[14]](function(_0x938dxe){if(!_0x938dxe){return _0x938dxa[_0xc11d[24]](404)};if(_0x938dxe[_0xc11d[27]]>0){return _0x938dxa[_0xc11d[13]](500)[_0xc11d[12]]({message:_0xc11d[28]})};if(_0x938dx9[_0xc11d[29]][_0xc11d[20]]){delete _0x938dx9[_0xc11d[29]][_0xc11d[20]]};CustomField[_0xc11d[25]](_0x938dx9[_0xc11d[21]][_0xc11d[20]])[_0xc11d[14]](function(_0x938dxf){if(!_0x938dxf){return _0x938dxa[_0xc11d[24]](404)};var _0x938dx10=_[_0xc11d[30]](_0x938dxf,_0x938dx9[_0xc11d[29]]);_0x938dx10[_0xc11d[31]]()[_0xc11d[14]](function(){return _0x938dxa[_0xc11d[13]](200)[_0xc11d[12]](_0x938dxf)})[_0xc11d[11]](function(_0x938dxc){return handleError(_0x938dxa,_0x938dxc)})})[_0xc11d[11]](function(_0x938dxc){return handleError(_0x938dxa,_0x938dxc)})})[_0xc11d[11]](function(_0x938dxc){return handleError(_0x938dxa,_0x938dxc)})};exports[_0xc11d[33]]=function(_0x938dx9,_0x938dxa){_0x938dx9[_0xc11d[29]][_0xc11d[34]]=_0x938dx9[_0xc11d[21]][_0xc11d[20]];CustomField[_0xc11d[35]](_0x938dx9[_0xc11d[29]])[_0xc11d[14]](function(_0x938dxf){return _0x938dxa[_0xc11d[13]](201)[_0xc11d[12]](_0x938dxf)})[_0xc11d[11]](function(_0x938dxc){return handleError(_0x938dxa,_0x938dxc)})};exports[_0xc11d[36]]=function(_0x938dx9,_0x938dxa){Service[_0xc11d[25]](_0x938dx9[_0xc11d[21]][_0xc11d[20]])[_0xc11d[14]](function(_0x938dx11){if(!_0x938dx11){return _0x938dxa[_0xc11d[24]](404)};return _0x938dxa[_0xc11d[12]](_0x938dx11)})[_0xc11d[11]](function(_0x938dxc){return handleError(_0x938dxa,_0x938dxc)})};exports[_0xc11d[37]]=function(_0x938dx9,_0x938dxa){console[_0xc11d[19]](_0x938dx9[_0xc11d[29]]);Service[_0xc11d[22]]({where:{id:_0x938dx9[_0xc11d[29]][_0xc11d[20]]}})[_0xc11d[14]](function(_0x938dx11){if(!_0x938dx11){return _0x938dxa[_0xc11d[24]](404)};return _0x938dxa[_0xc11d[12]](_0x938dx11)})[_0xc11d[11]](function(_0x938dxc){return handleError(_0x938dxa,_0x938dxc)})};exports[_0xc11d[35]]=function(_0x938dx9,_0x938dxa){Service[_0xc11d[22]]({where:{name:_0x938dx9[_0xc11d[29]][_0xc11d[32]]}})[_0xc11d[14]](function(_0x938dx12){console[_0xc11d[19]](_0x938dx12);console[_0xc11d[19]](_0xc11d[38]);if(!_0x938dx12){return _0x938dxa[_0xc11d[24]](404)};if(_0x938dx12[_0xc11d[27]]>0){return _0x938dxa[_0xc11d[13]](500)[_0xc11d[12]]({message:_0xc11d[39]})};Service[_0xc11d[35]](_0x938dx9[_0xc11d[29]])[_0xc11d[14]](function(_0x938dx11){return _0x938dxa[_0xc11d[13]](201)[_0xc11d[12]](_0x938dx11)})[_0xc11d[11]](function(_0x938dxc){return handleError(_0x938dxa,_0x938dxc)})})[_0xc11d[11]](function(_0x938dxc){return handleError(_0x938dxa,_0x938dxc)})};exports[_0xc11d[40]]=function(_0x938dx9,_0x938dxa){Service[_0xc11d[22]]({where:{name:_0x938dx9[_0xc11d[29]][_0xc11d[32]]}})[_0xc11d[14]](function(_0x938dx12){console[_0xc11d[19]](_0x938dx12);console[_0xc11d[19]](_0xc11d[38]);if(!_0x938dx12){return _0x938dxa[_0xc11d[24]](404)};if(_0x938dx12[_0xc11d[27]]>0){return _0x938dxa[_0xc11d[13]](500)[_0xc11d[12]]({message:_0xc11d[39]})};return Service[_0xc11d[25]](_0x938dx9[_0xc11d[21]][_0xc11d[20]])})[_0xc11d[14]](function(_0x938dx11){if(!_0x938dx11){return _0x938dxa[_0xc11d[24]](404)};if(_0x938dx9[_0xc11d[29]][_0xc11d[20]]){delete _0x938dx9[_0xc11d[29]][_0xc11d[20]]};var _0x938dx10=_[_0xc11d[30]](_0x938dx11,_0x938dx9[_0xc11d[29]]);return _0x938dx10[_0xc11d[31]]()})[_0xc11d[14]](function(_0x938dx11){return _0x938dxa[_0xc11d[13]](200)[_0xc11d[12]](_0x938dx11)})[_0xc11d[11]](function(_0x938dxc){return handleError(_0x938dxa,_0x938dxc)})};exports[_0xc11d[41]]=function(_0x938dx9,_0x938dxa,_0x938dxb){console[_0xc11d[19]](_0xc11d[41]);console[_0xc11d[19]](_0x938dx9[_0xc11d[21]]);console[_0xc11d[19]](_0x938dx9[_0xc11d[29]]);User[_0xc11d[22]]({where:{id:{$in:_0x938dx9[_0xc11d[29]][_0xc11d[44]]}}})[_0xc11d[14]](function(_0x938dx13){var _0x938dx14=_[_0xc11d[42]](_0x938dx13,function(_0x938dx15){return {service:_0x938dx9[_0xc11d[21]][_0xc11d[20]],membername:_0x938dx15[_0xc11d[32]],UserId:_0x938dx15[_0xc11d[20]]}});UserHasService[_0xc11d[43]](_0x938dx14,{individualHooks:true})[_0xc11d[14]](function(){return _0x938dxa[_0xc11d[24]](200)})[_0xc11d[11]](function(_0x938dxc){return _0x938dxb(_0x938dxc)})})[_0xc11d[11]](function(_0x938dxc){return _0x938dxb(_0x938dxc)})};exports[_0xc11d[45]]=function(_0x938dx9,_0x938dxa,_0x938dxb){Service[_0xc11d[48]]({where:{id:_0x938dx9[_0xc11d[21]][_0xc11d[20]]}})[_0xc11d[14]](function(_0x938dx11){if(_0x938dx11){_0x938dx11[_0xc11d[46]](_0x938dx9[_0xc11d[29]][_0xc11d[44]],{individualHooks:true})[_0xc11d[14]](function(){return _0x938dxa[_0xc11d[24]](200)})[_0xc11d[11]](function(_0x938dxc){return _0x938dxb(_0x938dxc)})}else {return _0x938dxb( new Error(_0xc11d[47]))}})[_0xc11d[11]](function(_0x938dxc){return _0x938dxb(_0x938dxc)})};exports[_0xc11d[49]]=function(_0x938dx9,_0x938dxa){destroyService(_0x938dx9[_0xc11d[21]][_0xc11d[20]],_0x938dxa)};exports[_0xc11d[50]]=function(_0x938dx9,_0x938dxa){destroyService(_0x938dx9[_0xc11d[15]][_0xc11d[20]],_0x938dxa)};function destroyService(_0x938dx17,_0x938dxa){return delOrUpdateCf(_0x938dx17)[_0xc11d[51]]()[_0xc11d[14]](function(){return Service[_0xc11d[49]]({where:{id:_0x938dx17},individualHooks:true})})[_0xc11d[14]](function(){return _0x938dxa[_0xc11d[24]](204)})[_0xc11d[11]](function(_0x938dxc){console[_0xc11d[19]](_0x938dxc);return handleError(_0x938dxa,_0x938dxc)})}function delOrUpdateCf(_0x938dx17){return CustomField[_0xc11d[22]]({where:{ServiceId:_0x938dx17},include:[{model:Contact}]})[_0xc11d[14]](function(_0x938dxe){console[_0xc11d[19]](_0x938dxe[_0xc11d[27]]);var _0x938dx19=[];_[_0xc11d[54]](_0x938dxe,function(_0x938dx1a){if(_0x938dx1a[_0xc11d[52]][_0xc11d[27]]){_0x938dx19[_0xc11d[53]](_0x938dx1a[_0xc11d[40]]({active:false}))}else {_0x938dx19[_0xc11d[53]](_0x938dx1a[_0xc11d[49]]())}});return _0x938dx19})}exports[_0xc11d[55]]=function(_0x938dx9,_0x938dxa){CustomField[_0xc11d[25]](_0x938dx9[_0xc11d[21]][_0xc11d[20]],{include:[{model:Contact}]})[_0xc11d[14]](function(_0x938dxf){if(!_0x938dxf){return _0x938dxa[_0xc11d[24]](404)};if(_0x938dxf[_0xc11d[52]][_0xc11d[27]]){return _0x938dxf[_0xc11d[40]]({active:false})}else {return _0x938dxf[_0xc11d[49]]()}})[_0xc11d[14]](function(){return _0x938dxa[_0xc11d[24]](204)})[_0xc11d[11]](function(_0x938dxc){return handleError(_0x938dxa,_0x938dxc)})};function handleError(_0x938dxa,_0x938dxc){return _0x938dxa[_0xc11d[13]](500)[_0xc11d[12]](_0x938dxc)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var util = require('util');
+
+var User = require('../../models').User;
+var Service = require('../../models').Service;
+var UserHasService = require('../../models').UserHasService;
+var CustomField = require('../../models').CustomField;
+var Contact = require('../../models').Contact;
+var Util = require('../../config/util');
+
+// Get list of services
+exports.index = function(req, res, next) {
+  return Service
+    .findAndCountAll(Util.getQuery(req.query))
+    .then(function(result) {
+      res.status(200).send(result);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get all custom_fields
+exports.getCustomFields = function(req, res) {
+  CustomField
+    .findAll({
+      where: {
+        ServiceId: req.params.id,
+        active: true
+      }
+    })
+    .then(function(customFields) {
+      return res.status(200).send(customFields);
+    })
+    .catch(function(err) {
+      console.log(err);
+      return handleError(res, err);
+    });
+};
+
+exports.showCustomField = function(req, res) {
+  CustomField
+    .findById(req.params.id)
+    .then(function(customField) {
+      if (!customField) {
+        return res.sendStatus(404);
+      }
+      return res.send(customField);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+exports.updateCustomField = function(req, res) {
+  CustomField
+    .findAll({
+      where: {
+        name: req.body.name,
+        id: {
+          $ne: req.body.id
+        }
+      }
+    })
+    .then(function(customFields) {
+      if (!customFields) {
+        return res.sendStatus(404);
+      }
+      if (customFields.length > 0) {
+        return res.status(500).send({
+          message: 'MESSAGE_EXIST_CUSTOM_FIELD'
+        })
+      }
+      if (req.body.id) {
+        delete req.body.id;
+      }
+      CustomField
+        .findById(req.params.id)
+        .then(function(customField) {
+          if (!customField) {
+            return res.sendStatus(404);
+          }
+          var updated = _.merge(customField, req.body);
+          updated.save()
+            .then(function() {
+              return res.status(200).send(customField);
+            })
+            .catch(function(err) {
+              return handleError(res, err);
+            });
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+exports.createCustomField = function(req, res) {
+  req.body.ServiceId = req.params.id;
+  CustomField
+    .create(req.body)
+    .then(function(customField) {
+      return res.status(201).send(customField);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single service
+exports.show = function(req, res) {
+  Service
+    .findById(req.params.id)
+    .then(function(service) {
+      if (!service) {
+        return res.sendStatus(404);
+      }
+      return res.send(service);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Validate the existence of a service
+exports.serviceValidation = function(req, res) {
+  console.log(req.body);
+  Service
+    .findAll({
+      where: {
+        id: req.body.id
+      }
+    })
+    .then(function(service) {
+      if (!service) {
+        return res.sendStatus(404);
+      }
+      return res.send(service);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new service in the DB.
+exports.create = function(req, res) {
+  Service
+    .findAll({
+      where: {
+        name: req.body.name
+      }
+    })
+    .then(function(existingServices) {
+      console.log(existingServices);
+      console.log('Finding app row.....');
+      if (!existingServices) {
+        return res.sendStatus(404);
+      }
+      if (existingServices.length > 0) {
+        return res.status(500).send({
+          message: 'MESSAGE_EXIST_SERVICE'
+        });
+      }
+      Service
+        .create(req.body)
+        .then(function(service) {
+          return res.status(201).send(service);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Updates an existing service in the DB.
+exports.update = function(req, res) {
+  Service
+    .findAll({
+      where: {
+        name: req.body.name
+      }
+    })
+    .then(function(existingServices) {
+      console.log(existingServices);
+      console.log('Finding app row.....');
+      if (!existingServices) {
+        return res.sendStatus(404);
+      }
+      if (existingServices.length > 0) {
+        return res.status(500).send({
+          message: 'MESSAGE_EXIST_SERVICE'
+        });
+      }
+      return Service
+        .findById(req.params.id);
+    })
+    .then(function(service) {
+      if (!service) {
+        return res.sendStatus(404);
+      }
+      if (req.body.id) {
+        delete req.body.id;
+      }
+      var updated = _.merge(service, req.body);
+      return updated.save();
+    })
+    .then(function(service) {
+      return res.status(200).send(service);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+
+// Updates an existing user_has_service in the DB.
+exports.addAgents = function(req, res, next) {
+
+  console.log('addAgents');
+  console.log(req.params);
+  console.log(req.body);
+  User
+    .findAll({
+      where: {
+        id: {
+          $in: req.body.agents
+        }
+      }
+    })
+    .then(function(users) {
+      // console.log(users);
+      var userHasServices = _.map(users, function(user) {
+        return {
+          service: req.params.id,
+          membername: user.name,
+          UserId: user.id
+        };
+      });
+
+      UserHasService
+        .bulkCreate(userHasServices, {
+          individualHooks: true
+        })
+        .then(function() {
+          return res.sendStatus(200);
+        })
+        .catch(function(err) {
+          return next(err);
+        });
+    })
+    .catch(function(err) {
+      return next(err);
+    });
+};
+
+exports.removeAgents = function(req, res, next) {
+  Service
+    .find({
+      where: {
+        id: req.params.id
+      }
+    })
+    .then(function(service) {
+      if (service) {
+        // SERVICE FOUND
+        // REMOVE AGENTS
+        service
+          .removeUsers(req.body.agents, {
+            individualHooks: true
+          })
+          .then(function() {
+            return res.sendStatus(200);
+          })
+          .catch(function(err) {
+            return next(err);
+          });
+      } else {
+        return next(new Error('no service found'));
+      }
+    })
+    .catch(function(err) {
+      return next(err);
+    });
+};
+
+// Deletes a service from the DB.
+exports.destroy = function(req, res) {
+  destroyService(req.params.id, res);
+};
+
+// Deletes multiple services from the DB.
+exports.bulkDestroy = function(req, res) { //add the check for associated contacts
+  destroyService(req.query.id, res);
+};
+
+function destroyService(id, res) {
+  return delOrUpdateCf(id)
+    .all()
+    .then(function() {
+      return Service.destroy({
+        where: {
+          id: id
+        },
+        individualHooks: true
+      });
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      console.log(err);
+      return handleError(res, err);
+    });
+}
+
+function delOrUpdateCf(id) {
+  return CustomField.findAll({
+      where: {
+        ServiceId: id
+      },
+      include: [{
+        model: Contact
+      }]
+    })
+    .then(function(customFields) {
+      console.log(customFields.length);
+      var delOrDeact = [];
+      _.forEach(customFields, function(elem) {
+        if (elem.Contacts.length) {
+          delOrDeact.push(elem.update({
+            active: false
+          }));
+        } else {
+          delOrDeact.push(elem.destroy());
+        }
+      });
+      return delOrDeact;
+    })
+}
+
+exports.deactivateCustomField = function(req, res) {
+  CustomField
+    .findById(req.params.id, {
+      include: [{
+        model: Contact
+      }]
+    })
+    .then(function(customField) {
+      if (!customField) {
+        return res.sendStatus(404);
+      }
+      if (customField.Contacts.length) {
+        return customField.update({
+          active: false
+        });
+      } else {
+        return customField.destroy();
+      }
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index 950a8f8..981784a 100644 (file)
@@ -1 +1,33 @@
-var _0x3451=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x53\x65\x72\x76\x69\x63\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x43\x75\x73\x74\x6F\x6D\x46\x69\x65\x6C\x64","\x72\x65\x67\x69\x73\x74\x65\x72","\x73\x65\x72\x76\x69\x63\x65","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x6C\x6F\x67","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x63\x75\x73\x74\x6F\x6D\x5F\x66\x69\x65\x6C\x64","\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x3A\x72\x65\x6D\x6F\x76\x65"];_0x3451[0];var Service=require(_0x3451[2])[_0x3451[1]];var CustomField=require(_0x3451[2])[_0x3451[3]];exports[_0x3451[4]]=function(_0x811dx3){Service[_0x3451[6]](function(_0x811dx4){onSave(_0x811dx3,_0x811dx4,_0x3451[5])});Service[_0x3451[9]](function(_0x811dx4){console[_0x3451[8]](_0x3451[7]);onRemove(_0x811dx3,_0x811dx4,_0x3451[5])});CustomField[_0x3451[6]](function(_0x811dx4){onSave(_0x811dx3,_0x811dx4,_0x3451[10])});CustomField[_0x3451[9]](function(_0x811dx4){onRemove(_0x811dx3,_0x811dx4,_0x3451[10])})};function onSave(_0x811dx3,_0x811dx4,_0x811dx6,_0x811dx7){_0x811dx3[_0x3451[12]](_0x811dx6+_0x3451[11],_0x811dx4)}function onRemove(_0x811dx3,_0x811dx4,_0x811dx6,_0x811dx7){console[_0x3451[8]](_0x811dx6);_0x811dx3[_0x3451[12]](_0x811dx6+_0x3451[13],_0x811dx4)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var Service = require('../../models').Service;
+var CustomField = require('../../models').CustomField;
+
+exports.register = function(socket) {
+  Service.afterCreate(function(doc) {
+    onSave(socket, doc, 'service');
+  });
+  Service.afterDestroy(function(doc) {
+    console.log('destroy');
+    onRemove(socket, doc, 'service');
+  });
+  CustomField.afterCreate(function(doc) {
+    onSave(socket, doc, 'custom_field');
+  });
+  CustomField.afterDestroy(function(doc) {
+    onRemove(socket, doc, 'custom_field');
+  });
+}
+
+function onSave(socket, doc, type, cb) {
+  socket.emit(type + ':save', doc);
+}
+
+function onRemove(socket, doc, type, cb) {
+  console.log(type);
+  socket.emit(type + ':remove', doc);
+}
index 25db25a..7d84147 100644 (file)
@@ -1 +1,20 @@
-var _0x78aa=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x73\x68\x6F\x75\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x70\x70","\x73\x75\x70\x65\x72\x74\x65\x73\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x63\x6F\x6E\x74\x61\x63\x74\x6D\x61\x6E\x61\x67\x65\x72\x2F\x73\x65\x72\x76\x69\x63\x65\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x70\x6F\x6E\x64\x20\x77\x69\x74\x68\x20\x4A\x53\x4F\x4E\x20\x61\x72\x72\x61\x79","\x69\x6E\x73\x74\x61\x6E\x63\x65\x6F\x66","\x62\x65","\x62\x6F\x64\x79","\x65\x6E\x64","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x65\x78\x70\x65\x63\x74","\x2F\x61\x70\x69\x2F\x63\x6F\x6E\x74\x61\x63\x74\x6D\x61\x6E\x61\x67\x65\x72\x2F\x73\x65\x72\x76\x69\x63\x65\x73","\x67\x65\x74"];_0x78aa[0];var should=require(_0x78aa[1]);var app=require(_0x78aa[2]);var request=require(_0x78aa[3]);describe(_0x78aa[4],function(){it(_0x78aa[5],function(_0xee45x4){request(app)[_0x78aa[13]](_0x78aa[12])[_0x78aa[11]](200)[_0x78aa[11]](_0x78aa[10],/json/)[_0x78aa[9]](function(_0xee45x5,_0xee45x6){if(_0xee45x5){return _0xee45x4(_0xee45x5)};_0xee45x6[_0x78aa[8]][_0x78aa[1]][_0x78aa[7]][_0x78aa[6]](Array);_0xee45x4()})})})
\ No newline at end of file
+'use strict';
+
+var should = require('should');
+var app = require('../../app');
+var request = require('supertest');
+
+describe('GET /api/contactmanager/services', function() {
+
+  it('should respond with JSON array', function(done) {
+    request(app)
+      .get('/api/contactmanager/services')
+      .expect(200)
+      .expect('Content-Type', /json/)
+      .end(function(err, res) {
+        if (err) return done(err);
+        res.body.should.be.instanceof(Array);
+        done();
+      });
+  });
+});
index a16d57d..e30286b 100644 (file)
@@ -1 +1,19 @@
-var _0x15e9=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x73\x65\x74\x74\x69\x6E\x67\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x69\x6E\x74\x65\x72\x6E\x61\x6C","\x67\x65\x74\x49\x6E\x74\x65\x72\x6E\x61\x6C","\x2F\x6D\x61\x69\x6C\x62\x6F\x78","\x67\x65\x74\x4D\x61\x69\x6C\x62\x6F\x78","\x2F\x69\x6E\x66\x6F","\x67\x65\x74\x49\x6E\x66\x6F","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x15e9[0];var express=require(_0x15e9[1]);var controller=require(_0x15e9[2]);var auth=require(_0x15e9[3]);var router=express.Router();router[_0x15e9[7]](_0x15e9[4],auth[_0x15e9[5]](),controller[_0x15e9[6]]);router[_0x15e9[7]](_0x15e9[8],auth[_0x15e9[5]](),controller[_0x15e9[9]]);router[_0x15e9[7]](_0x15e9[10],auth[_0x15e9[5]](),controller[_0x15e9[11]]);router[_0x15e9[7]](_0x15e9[12],controller[_0x15e9[13]]);router[_0x15e9[7]](_0x15e9[14],auth[_0x15e9[5]](),controller[_0x15e9[15]]);router[_0x15e9[17]](_0x15e9[4],auth[_0x15e9[5]](),controller[_0x15e9[16]]);router[_0x15e9[19]](_0x15e9[14],auth[_0x15e9[5]](),controller[_0x15e9[18]]);router[_0x15e9[20]](_0x15e9[14],auth[_0x15e9[5]](),controller[_0x15e9[18]]);router[_0x15e9[22]](_0x15e9[14],auth[_0x15e9[5]](),controller[_0x15e9[21]]);module[_0x15e9[23]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./setting.controller');
+var auth = require('../../auth/auth.service');
+
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), controller.index);
+router.get('/internal', auth.isAuthenticated(), controller.getInternal);
+router.get('/mailbox', auth.isAuthenticated(), controller.getMailbox);
+router.get('/info', controller.getInfo);
+router.get('/:id', auth.isAuthenticated(), controller.show);
+router.post('/', auth.isAuthenticated(), controller.create);
+router.put('/:id', auth.isAuthenticated(), controller.update);
+router.patch('/:id', auth.isAuthenticated(), controller.update);
+router.delete('/:id', auth.isAuthenticated(), controller.destroy);
+
+module.exports = router;
index b2b2657..6c2943d 100644 (file)
@@ -1 +1,172 @@
-var _0xa74c=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x53\x65\x74\x74\x69\x6E\x67\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x55\x73\x65\x72","\x56\x6F\x69\x63\x65\x56\x6F\x69\x63\x65\x6D\x61\x69\x6C","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6C\x6C","\x67\x65\x74\x49\x6E\x74\x65\x72\x6E\x61\x6C","\x76\x61\x6C\x75\x65","\x6D\x69\x6E\x5F\x69\x6E\x74\x65\x72\x6E\x61\x6C","\x69\x6E\x74\x65\x72\x6E\x61\x6C","\x6D\x61\x78","\x66\x69\x6E\x64\x42\x79\x49\x64","\x67\x65\x74\x4D\x61\x69\x6C\x62\x6F\x78","\x6C\x6F\x67","\x6D\x69\x6E\x5F\x6D\x61\x69\x6C\x62\x6F\x78","\x6D\x61\x69\x6C\x62\x6F\x78","\x67\x65\x74\x49\x6E\x66\x6F","\x2E\x2E\x2F\x2E\x2E\x2F\x2E\x2E\x2F\x70\x61\x63\x6B\x61\x67\x65\x2E\x6A\x73\x6F\x6E","\x6E\x61\x6D\x65","\x76\x65\x72\x73\x69\x6F\x6E","\x65\x6E\x67\x69\x6E\x65\x73","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x66\x69\x6E\x64","\x64\x65\x73\x74\x72\x6F\x79"];_0xa74c[0];var _=require(_0xa74c[1]);var Settings=require(_0xa74c[3])[_0xa74c[2]];var Agent=require(_0xa74c[3])[_0xa74c[4]];var VoiceMail=require(_0xa74c[3])[_0xa74c[5]];exports[_0xa74c[6]]=function(_0x6627x5,_0x6627x6){return Settings[_0xa74c[11]]()[_0xa74c[10]](function(_0x6627x8){return _0x6627x6[_0xa74c[9]](200)[_0xa74c[8]](_0x6627x8)})[_0xa74c[7]](function(_0x6627x7){return handleError(_0x6627x6,_0x6627x7)})};exports[_0xa74c[12]]=function(_0x6627x5,_0x6627x6){var _0x6627x9;return Settings[_0xa74c[17]](1)[_0xa74c[10]](function(_0x6627x8){_0x6627x9=_0x6627x8;return Agent[_0xa74c[16]](_0xa74c[15])})[_0xa74c[10]](function(_0x6627xa){var _0x6627xb={value:0};if(_0x6627xa){_0x6627xb[_0xa74c[13]]= ++_0x6627xa}else {_0x6627xb[_0xa74c[13]]=_0x6627x9[_0xa74c[14]]};return _0x6627x6[_0xa74c[9]](200)[_0xa74c[8]](_0x6627xb)})[_0xa74c[7]](function(_0x6627x7){return handleError(_0x6627x6,_0x6627x7)})};exports[_0xa74c[18]]=function(_0x6627x5,_0x6627x6){var _0x6627x9;return Settings[_0xa74c[17]](1)[_0xa74c[10]](function(_0x6627x8){_0x6627x9=_0x6627x8;return VoiceMail[_0xa74c[16]](_0xa74c[21])})[_0xa74c[10]](function(_0x6627xc){var _0x6627xd={value:0};if(_0x6627xc){_0x6627xd[_0xa74c[13]]= ++_0x6627xc}else {_0x6627xd[_0xa74c[13]]=_0x6627x9[_0xa74c[20]]};return _0x6627x6[_0xa74c[9]](200)[_0xa74c[8]](_0x6627xd)})[_0xa74c[7]](function(_0x6627x7){console[_0xa74c[19]](_0x6627x7);return handleError(_0x6627x6,_0x6627x7)})};exports[_0xa74c[22]]=function(_0x6627x5,_0x6627x6){var _0x6627xe=require(_0xa74c[23]);return _0x6627x6[_0xa74c[9]](200)[_0xa74c[8]]({name:_0x6627xe[_0xa74c[24]],version:_0x6627xe[_0xa74c[25]],engines:_0x6627xe[_0xa74c[26]]})};exports[_0xa74c[27]]=function(_0x6627x5,_0x6627x6){Settings[_0xa74c[17]](_0x6627x5[_0xa74c[30]][_0xa74c[29]])[_0xa74c[10]](function(_0x6627xf){if(!_0x6627xf){return _0x6627x6[_0xa74c[28]](404)};return _0x6627x6[_0xa74c[8]](_0x6627xf)})[_0xa74c[7]](function(_0x6627x7){return handleError(_0x6627x6,_0x6627x7)})};exports[_0xa74c[31]]=function(_0x6627x5,_0x6627x6){Settings[_0xa74c[31]](_0x6627x5[_0xa74c[32]])[_0xa74c[10]](function(_0x6627xf){return _0x6627x6[_0xa74c[9]](201)[_0xa74c[8]](_0x6627xf)})[_0xa74c[7]](function(_0x6627x7){return handleError(_0x6627x6,_0x6627x7)})};exports[_0xa74c[33]]=function(_0x6627x5,_0x6627x6){if(_0x6627x5[_0xa74c[32]][_0xa74c[29]]){delete _0x6627x5[_0xa74c[32]][_0xa74c[29]]};Settings[_0xa74c[36]]({where:{id:_0x6627x5[_0xa74c[30]][_0xa74c[29]]}})[_0xa74c[10]](function(_0x6627xf){if(!_0x6627xf){return _0x6627x6[_0xa74c[28]](404)};var _0x6627x10=_[_0xa74c[34]](_0x6627xf,_0x6627x5[_0xa74c[32]]);_0x6627x10[_0xa74c[35]]()[_0xa74c[10]](function(){return _0x6627x6[_0xa74c[9]](200)[_0xa74c[8]](_0x6627xf)})[_0xa74c[7]](function(_0x6627x7){return handleError(_0x6627x6,_0x6627x7)})})[_0xa74c[7]](function(_0x6627x7){return handleError(_0x6627x6,_0x6627x7)})};exports[_0xa74c[37]]=function(_0x6627x5,_0x6627x6){Settings[_0xa74c[36]]({where:{id:_0x6627x5[_0xa74c[30]][_0xa74c[29]]}})[_0xa74c[10]](function(_0x6627xf){if(!_0x6627xf){return _0x6627x6[_0xa74c[28]](404)};_0x6627xf[_0xa74c[37]]()[_0xa74c[10]](function(){return _0x6627x6[_0xa74c[28]](204)})[_0xa74c[7]](function(_0x6627x7){return handleError(_0x6627x6,_0x6627x7)})})[_0xa74c[7]](function(_0x6627x7){return handleError(_0x6627x6,_0x6627x7)})};function handleError(_0x6627x6,_0x6627x7){return _0x6627x6[_0xa74c[9]](500)[_0xa74c[8]](_0x6627x7)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var Settings = require('../../models').Settings;
+var Agent = require('../../models').User;
+var VoiceMail = require('../../models').VoiceVoicemail;
+
+// Get list of settings
+exports.index = function(req, res) {
+  return Settings
+    .findAll()
+    .then(function(settings) {
+      return res.status(200).send(settings);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get internal
+exports.getInternal = function(req, res) {
+  var _settings;
+  return Settings
+    .findById(1)
+    .then(function(settings) {
+      _settings = settings;
+      return Agent
+        .max('internal');
+    })
+    .then(function(internal) {
+      var _internal = {
+        value: 0
+      };
+
+      if (internal) {
+        _internal.value = ++internal;
+      } else {
+        _internal.value = _settings.min_internal;
+      }
+
+      return res.status(200).send(_internal);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get internal
+exports.getMailbox = function(req, res) {
+  var _settings;
+  return Settings
+    .findById(1)
+    .then(function(settings) {
+      _settings = settings;
+      return VoiceMail
+        .max('mailbox');
+    })
+    .then(function(mailbox) {
+      var _mailbox = {
+        value: 0
+      };
+
+      if (mailbox) {
+        _mailbox.value = ++mailbox;
+      } else {
+        _mailbox.value = _settings.min_mailbox;
+      }
+
+      return res.status(200).send(_mailbox);
+    })
+    .catch(function(err) {
+      console.log(err);
+      return handleError(res, err);
+    });
+};
+
+// Get list of settings
+exports.getInfo = function(req, res) {
+
+  var info = require('../../../package.json');
+
+  return res.status(200).send({
+    name: info.name,
+    version: info.version,
+    engines: info.engines
+  });
+};
+
+// Get a single setting
+exports.show = function(req, res) {
+  Settings
+    .findById(req.params.id)
+    .then(function(setting) {
+      if (!setting) {
+        return res.sendStatus(404);
+      }
+      return res.send(setting);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new setting in the DB.
+exports.create = function(req, res) {
+  Settings
+    .create(req.body)
+    .then(function(setting) {
+      return res.status(201).send(setting);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Updates an existing setting in the DB.
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  Settings
+    .find({
+      where: {
+        id: req.params.id
+      }
+    })
+    .then(function(setting) {
+      if (!setting) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(setting, req.body);
+      updated.save()
+        .then(function() {
+          return res.status(200).send(setting);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a setting from the DB.
+exports.destroy = function(req, res) {
+  Settings
+    .find({
+      where: {
+        id: req.params.id
+      }
+    })
+    .then(function(setting) {
+      if (!setting) {
+        return res.sendStatus(404);
+      }
+      setting.destroy()
+        .then(function() {
+          return res.sendStatus(204);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index 2dcd5c3..611827e 100644 (file)
@@ -1 +1,24 @@
-var _0x8747=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x53\x65\x74\x74\x69\x6E\x67\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x73\x65\x74\x74\x69\x6E\x67\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x73\x65\x74\x74\x69\x6E\x67\x3A\x72\x65\x6D\x6F\x76\x65"];_0x8747[0];var Settings=require(_0x8747[2])[_0x8747[1]];exports[_0x8747[3]]=function(_0x35e0x2){Settings[_0x8747[4]](function(_0x35e0x3){onSave(_0x35e0x2,_0x35e0x3)});Settings[_0x8747[5]](function(_0x35e0x3){onRemove(_0x35e0x2,_0x35e0x3)})};function onSave(_0x35e0x2,_0x35e0x3,_0x35e0x5){_0x35e0x2[_0x8747[7]](_0x8747[6],_0x35e0x3)}function onRemove(_0x35e0x2,_0x35e0x3,_0x35e0x5){_0x35e0x2[_0x8747[7]](_0x8747[8],_0x35e0x3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var Settings = require('../../models').Settings;
+
+exports.register = function(socket) {
+  Settings.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  Settings.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('setting:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('setting:remove', doc);
+}
index 194292b..4ade980 100644 (file)
@@ -1 +1,18 @@
-var _0x12e2=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x73\x6F\x75\x6E\x64\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x2F\x3A\x69\x64\x2F\x64\x6F\x77\x6E\x6C\x6F\x61\x64","\x64\x6F\x77\x6E\x6C\x6F\x61\x64","\x2F\x3A\x69\x64\x2F\x73\x74\x72\x65\x61\x6D","\x73\x74\x72\x65\x61\x6D","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x12e2[0];var express=require(_0x12e2[1]);var controller=require(_0x12e2[2]);var auth=require(_0x12e2[3]);var router=express.Router();router[_0x12e2[7]](_0x12e2[4],auth[_0x12e2[5]](),controller[_0x12e2[6]]);router[_0x12e2[7]](_0x12e2[8],auth[_0x12e2[5]](),controller[_0x12e2[9]]);router[_0x12e2[7]](_0x12e2[10],auth[_0x12e2[5]](),controller[_0x12e2[11]]);router[_0x12e2[7]](_0x12e2[12],auth[_0x12e2[5]](),controller[_0x12e2[13]]);router[_0x12e2[15]](_0x12e2[4],auth[_0x12e2[5]](),controller[_0x12e2[14]]);router[_0x12e2[17]](_0x12e2[8],auth[_0x12e2[5]](),controller[_0x12e2[16]]);router[_0x12e2[18]](_0x12e2[8],auth[_0x12e2[5]](),controller[_0x12e2[16]]);router[_0x12e2[20]](_0x12e2[8],auth[_0x12e2[5]](),controller[_0x12e2[19]]);module[_0x12e2[21]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./sound.controller');
+var auth = require('../../auth/auth.service');
+
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), controller.index);
+router.get('/:id', auth.isAuthenticated(), controller.show);
+router.get('/:id/download', auth.isAuthenticated(), controller.download);
+router.get('/:id/stream', auth.isAuthenticated(), controller.stream);
+router.post('/', auth.isAuthenticated(), controller.create);
+router.put('/:id', auth.isAuthenticated(), controller.update);
+router.patch('/:id', auth.isAuthenticated(), controller.update);
+router.delete('/:id', auth.isAuthenticated(), controller.destroy);
+
+module.exports = router;
index b624d91..335d2c9 100644 (file)
@@ -1 +1,266 @@
-var _0xf4a5=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x53\x6F\x75\x6E\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x75\x70\x6C\x6F\x61\x64\x2D\x66\x69\x6C\x65","\x73\x69\x6D\x70\x6C\x65\x2D\x72\x61\x6E\x64\x6F\x6D","\x73\x6F\x78","\x70\x61\x74\x68","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x66\x73","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x66\x69\x6C\x65\x2D\x62\x61\x73\x65\x36\x34","\x62\x6C\x75\x65\x62\x69\x72\x64","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x6F\x72\x69\x67\x69\x6E\x61\x6C\x53\x6F\x75\x6E\x64\x73","\x6A\x6F\x69\x6E","\x66\x69\x6C\x65\x6E\x61\x6D\x65","\x65\x78\x74\x6E\x61\x6D\x65","\x4D\x61\x78\x20\x6E\x75\x6D\x62\x65\x72\x20\x6F\x66\x20\x66\x69\x6C\x65\x73\x20\x75\x70\x6C\x6F\x61\x64\x20\x65\x78\x63\x65\x65\x64\x65\x64","\x4F\x6E\x6C\x79\x20\x77\x61\x76\x2C\x6D\x70\x33\x2C\x67\x73\x6D\x2C\x20\x61\x6E\x64\x20\x6F\x67\x67\x20\x66\x6F\x72\x6D\x61\x74\x20\x61\x63\x63\x65\x70\x74\x65\x64","\x54\x68\x65\x20\x6D\x61\x78\x69\x6D\x75\x6D\x20\x66\x69\x6C\x65\x20\x73\x69\x7A\x65\x20\x69\x73\x20\x31\x35\x20\x4D\x62","\x49\x6E\x76\x61\x6C\x69\x64\x20\x72\x65\x71\x75\x65\x73\x74","\x65\x6E\x64","\x66\x69\x6C\x65","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","","\x6F\x72\x69\x67\x69\x6E\x61\x6C\x5F\x66\x6F\x72\x6D\x61\x74","\x73\x75\x62\x73\x74\x72\x69\x6E\x67","\x63\x6F\x6E\x76\x65\x72\x74\x65\x64\x5F\x66\x6F\x72\x6D\x61\x74","\x77\x61\x76","\x6E\x61\x6D\x65","\x64\x69\x73\x70\x6C\x61\x79\x5F\x6E\x61\x6D\x65","\x62\x61\x73\x65\x6E\x61\x6D\x65","\x73\x61\x76\x65\x5F\x6E\x61\x6D\x65","\x63\x6F\x6E\x76\x65\x72\x74\x65\x64\x53\x6F\x75\x6E\x64\x73","\x2E","\x30\x37\x37\x37","\x63\x68\x6D\x6F\x64\x53\x79\x6E\x63","\x69\x64\x65\x6E\x74\x69\x66\x79","\x74\x72\x61\x6E\x73\x63\x6F\x64\x65","\x65\x72\x72\x6F\x72","\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x20\x43\x6F\x6E\x76\x65\x72\x73\x69\x6F\x6E\x20\x45\x72\x72\x6F\x72\x3A\x20","\x75\x6E\x6C\x69\x6E\x6B","\x6F\x6E","\x70\x72\x6F\x67\x72\x65\x73\x73","\x73\x72\x63","\x6F\x72\x69\x67\x69\x6E\x61\x6C\x5F\x64\x75\x72\x61\x74\x69\x6F\x6E","\x64\x75\x72\x61\x74\x69\x6F\x6E","\x6F\x72\x69\x67\x69\x6E\x61\x6C\x5F\x73\x61\x6D\x70\x6C\x65\x43\x6F\x75\x6E\x74","\x73\x61\x6D\x70\x6C\x65\x43\x6F\x75\x6E\x74","\x6F\x72\x69\x67\x69\x6E\x61\x6C\x5F\x63\x68\x61\x6E\x6E\x65\x6C\x43\x6F\x75\x6E\x74","\x63\x68\x61\x6E\x6E\x65\x6C\x43\x6F\x75\x6E\x74","\x6F\x72\x69\x67\x69\x6E\x61\x6C\x5F\x62\x69\x74\x52\x61\x74\x65","\x62\x69\x74\x52\x61\x74\x65","\x6F\x72\x69\x67\x69\x6E\x61\x6C\x5F\x73\x61\x6D\x70\x6C\x65\x52\x61\x74\x65","\x73\x61\x6D\x70\x6C\x65\x52\x61\x74\x65","\x64\x65\x73\x74","\x63\x6F\x6E\x76\x65\x72\x74\x65\x64\x5F\x64\x75\x72\x61\x74\x69\x6F\x6E","\x63\x6F\x6E\x76\x65\x72\x74\x65\x64\x5F\x73\x61\x6D\x70\x6C\x65\x43\x6F\x75\x6E\x74","\x63\x6F\x6E\x76\x65\x72\x74\x65\x64\x5F\x63\x68\x61\x6E\x6E\x65\x6C\x43\x6F\x75\x6E\x74","\x63\x6F\x6E\x76\x65\x72\x74\x65\x64\x5F\x62\x69\x74\x52\x61\x74\x65","\x63\x6F\x6E\x76\x65\x72\x74\x65\x64\x5F\x73\x61\x6D\x70\x6C\x65\x52\x61\x74\x65","\x43\x6F\x6E\x76\x65\x72\x73\x69\x6F\x6E\x20\x63\x6F\x6D\x70\x6C\x65\x74\x65\x64","\x6C\x6F\x67","\x73\x74\x61\x72\x74","\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x20\x55\x70\x6C\x6F\x61\x64\x20\x65\x72\x72\x6F\x72\x20\x3A","\x70\x61\x72\x73\x65","\x75\x70\x64\x61\x74\x65","\x62\x6F\x64\x79","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E","\x64\x6F\x77\x6E\x6C\x6F\x61\x64","\x6F\x72\x69\x67\x69\x6E\x61\x6C","\x73\x74\x72\x65\x61\x6D","\x63\x6F\x6E\x76\x65\x72\x74\x65\x64","\x62\x61\x73\x65\x36\x34","\x62\x69\x6E\x61\x72\x79","\x72\x65\x61\x64\x46\x69\x6C\x65","\x70\x72\x6F\x6D\x69\x73\x69\x66\x79","\x53\x6F\x75\x6E\x64\x73","\x5F\x66\x6F\x72\x6D\x61\x74"];_0xf4a5[0];var _=require(_0xf4a5[1]);var Sound=require(_0xf4a5[3])[_0xf4a5[2]];var uploadFile=require(_0xf4a5[4]);var sr=require(_0xf4a5[5]);var sox=require(_0xf4a5[6]);var path=require(_0xf4a5[7]);var config=require(_0xf4a5[8]);var fs=require(_0xf4a5[9]);var sequelize=require(_0xf4a5[3])[_0xf4a5[10]];var base64=require(_0xf4a5[11]);var Promise=require(_0xf4a5[12]);exports[_0xf4a5[13]]=function(_0x6195xc,_0x6195xd){Sound[_0xf4a5[18]]()[_0xf4a5[17]](function(_0x6195xf){return _0x6195xd[_0xf4a5[16]](200)[_0xf4a5[15]](_0x6195xf)})[_0xf4a5[14]](function(_0x6195xe){return handleError(_0x6195xd,_0x6195xe)})};exports[_0xf4a5[19]]=function(_0x6195xc,_0x6195xd){Sound[_0xf4a5[23]](_0x6195xc[_0xf4a5[22]][_0xf4a5[21]])[_0xf4a5[17]](function(Sound){if(!Sound){return _0x6195xd[_0xf4a5[20]](404)};return _0x6195xd[_0xf4a5[15]](Sound)})[_0xf4a5[14]](function(_0x6195xe){return handleError(_0x6195xd,_0x6195xe)})};exports[_0xf4a5[24]]=function(_0x6195xc,_0x6195xd){var _0x6195x10= new uploadFile({dest:path[_0xf4a5[26]](config[_0xf4a5[25]]),maxFileSize:15*1000000,maxNumberOfFiles:10,minNumberOfFiles:0,acceptFileTypes:/(\.|\/)(wav|mp3|gsm|ogg)$/i,rename:function(_0x6195x11,_0x6195x12){return sr()+path[_0xf4a5[28]](_0x6195x12[_0xf4a5[27]])},messages:{maxNumberOfFiles:_0xf4a5[29],acceptFileTypes:_0xf4a5[30],maxFileSize:_0xf4a5[31],invalidRequest:_0xf4a5[32]}});_0x6195x10[_0xf4a5[54]](_0xf4a5[33],function(_0x6195x13,_0x6195x14){if(!_0x6195x14[_0xf4a5[34]][_0xf4a5[27]]){return _0x6195xd[_0xf4a5[16]](500)[_0xf4a5[15]](_0x6195x10)};var _0x6195x15={};var _0x6195x16=path[_0xf4a5[28]](_0x6195x14[_0xf4a5[34]][_0xf4a5[27]]);_0x6195x15[_0xf4a5[35]]=_0xf4a5[36];_0x6195x15[_0xf4a5[37]]=path[_0xf4a5[28]](_0x6195x14[_0xf4a5[34]][_0xf4a5[27]])[_0xf4a5[38]](1);_0x6195x15[_0xf4a5[39]]=_0xf4a5[40];_0x6195x15[_0xf4a5[41]]=_0x6195x15[_0xf4a5[42]]=path[_0xf4a5[43]](_0x6195x14[_0xf4a5[34]][_0xf4a5[7]],_0x6195x16);_0x6195x15[_0xf4a5[44]]=path[_0xf4a5[43]](_0x6195x14[_0xf4a5[34]][_0xf4a5[27]],_0x6195x16);var _0x6195x17=path[_0xf4a5[26]](config[_0xf4a5[25]],_0x6195x15[_0xf4a5[44]]+_0x6195x16);var _0x6195x18=path[_0xf4a5[26]](config[_0xf4a5[45]],_0x6195x15[_0xf4a5[44]]+_0xf4a5[46]+_0x6195x15[_0xf4a5[39]]);fs[_0xf4a5[48]](_0x6195x17,parseInt(_0xf4a5[47],8));sox[_0xf4a5[49]](_0x6195x17,function(_0x6195xe,_0x6195x19){});var _0x6195x1a=sox[_0xf4a5[50]](_0x6195x17,_0x6195x18,{sampleRate:8000,format:_0xf4a5[40],channelCount:1,bitRate:192*1024,compressionQuality:5});_0x6195x1a[_0xf4a5[54]](_0xf4a5[51],function(_0x6195xe){console[_0xf4a5[51]](_0xf4a5[52],_0x6195xe);fs[_0xf4a5[53]](_0x6195x17,function(_0x6195xe){if(_0x6195xe){return handleError(_0x6195xd,_0x6195xe)}});return handleError(_0x6195xd,_0x6195xe)});_0x6195x1a[_0xf4a5[54]](_0xf4a5[55],function(_0x6195x1b,_0x6195x1c){});_0x6195x1a[_0xf4a5[54]](_0xf4a5[56],function(_0x6195x1d){_0x6195x15[_0xf4a5[57]]=isNaN(_0x6195x1d[_0xf4a5[58]])?null:_0x6195x1d[_0xf4a5[58]]*1000;_0x6195x15[_0xf4a5[59]]=isNaN(_0x6195x1d[_0xf4a5[60]])?null:_0x6195x1d[_0xf4a5[60]];_0x6195x15[_0xf4a5[61]]=isNaN(_0x6195x1d[_0xf4a5[62]])?null:_0x6195x1d[_0xf4a5[62]];_0x6195x15[_0xf4a5[63]]=isNaN(_0x6195x1d[_0xf4a5[64]])?null:_0x6195x1d[_0xf4a5[64]];_0x6195x15[_0xf4a5[65]]=isNaN(_0x6195x1d[_0xf4a5[66]])?null:_0x6195x1d[_0xf4a5[66]]});_0x6195x1a[_0xf4a5[54]](_0xf4a5[67],function(_0x6195x1d){_0x6195x15[_0xf4a5[68]]=isNaN(_0x6195x1d[_0xf4a5[58]])?null:_0x6195x1d[_0xf4a5[58]]*1000;_0x6195x15[_0xf4a5[69]]=isNaN(_0x6195x1d[_0xf4a5[60]])?null:_0x6195x1d[_0xf4a5[60]];_0x6195x15[_0xf4a5[70]]=isNaN(_0x6195x1d[_0xf4a5[62]])?null:_0x6195x1d[_0xf4a5[62]];_0x6195x15[_0xf4a5[71]]=isNaN(_0x6195x1d[_0xf4a5[64]])?null:_0x6195x1d[_0xf4a5[64]];_0x6195x15[_0xf4a5[72]]=isNaN(_0x6195x1d[_0xf4a5[66]])?null:_0x6195x1d[_0xf4a5[66]]});_0x6195x1a[_0xf4a5[54]](_0xf4a5[33],function(){console[_0xf4a5[74]](_0xf4a5[73]);fs[_0xf4a5[48]](_0x6195x18,parseInt(_0xf4a5[47],8));Sound[_0xf4a5[24]](_0x6195x15)[_0xf4a5[17]](function(_0x6195x1e){return _0x6195xd[_0xf4a5[16]](201)[_0xf4a5[15]](_0x6195x1e)})[_0xf4a5[14]](function(_0x6195xe){console[_0xf4a5[74]](_0x6195xe);return handleError(_0x6195xd,_0x6195xe)})});_0x6195x1a[_0xf4a5[75]]()});_0x6195x10[_0xf4a5[54]](_0xf4a5[51],function(_0x6195xe){console[_0xf4a5[74]](_0xf4a5[76],_0x6195xe);return handleError(_0x6195xd,_0x6195xe)});_0x6195x10[_0xf4a5[77]](_0x6195xc)};exports[_0xf4a5[78]]=function(_0x6195xc,_0x6195xd){if(_0x6195xc[_0xf4a5[79]][_0xf4a5[21]]){delete _0x6195xc[_0xf4a5[79]][_0xf4a5[21]]};Sound[_0xf4a5[23]](_0x6195xc[_0xf4a5[22]][_0xf4a5[21]])[_0xf4a5[17]](function(_0x6195x1e){if(!_0x6195x1e){return _0x6195xd[_0xf4a5[20]](404)};var _0x6195x1f=_[_0xf4a5[80]](_0x6195x1e,_0x6195xc[_0xf4a5[79]]);_0x6195x1f[_0xf4a5[81]]()[_0xf4a5[17]](function(){return _0x6195xd[_0xf4a5[16]](200)[_0xf4a5[15]](_0x6195x1e)})[_0xf4a5[14]](function(_0x6195xe){return handleError(_0x6195xd,_0x6195xe)})})[_0xf4a5[14]](function(_0x6195xe){return handleError(_0x6195xd,_0x6195xe)})};exports[_0xf4a5[82]]=function(_0x6195xc,_0x6195xd){Sound[_0xf4a5[23]](_0x6195xc[_0xf4a5[22]][_0xf4a5[21]])[_0xf4a5[17]](function(_0x6195x1e){if(!_0x6195x1e){return _0x6195xd[_0xf4a5[16]](404)[_0xf4a5[15]](_0x6195x1e)};var _0x6195x20=path[_0xf4a5[26]](config[_0xf4a5[25]],_0x6195x1e[_0xf4a5[44]]+_0xf4a5[46]+_0x6195x1e[_0xf4a5[37]]);var _0x6195x21=path[_0xf4a5[26]](config[_0xf4a5[45]],_0x6195x1e[_0xf4a5[44]]+_0xf4a5[46]+_0x6195x1e[_0xf4a5[39]]);return sequelize[_0xf4a5[83]](function(_0x6195x22){return _0x6195x1e[_0xf4a5[82]]({transaction:_0x6195x22})[_0xf4a5[17]](function(){fs[_0xf4a5[53]](_0x6195x20,function(_0x6195xe){if(_0x6195xe){return handleError(_0x6195xd,_0x6195xe)}});fs[_0xf4a5[53]](_0x6195x21,function(_0x6195xe){if(_0x6195xe){return handleError(_0x6195xd,_0x6195xe)}});return _0x6195xd[_0xf4a5[16]](200)[_0xf4a5[15]](_0x6195x1e)})})[_0xf4a5[14]](function(_0x6195xe){return handleError(_0x6195xd,_0x6195xe)})})[_0xf4a5[14]](function(_0x6195xe){return handleError(_0x6195xd,_0x6195xe)})};exports[_0xf4a5[84]]=function(_0x6195xc,_0x6195xd){getStream(_0x6195xc,_0x6195xd,_0xf4a5[85])};exports[_0xf4a5[86]]=function(_0x6195xc,_0x6195xd){getStream(_0x6195xc,_0x6195xd,_0xf4a5[87])};function getStream(_0x6195xc,_0x6195xd,_0x6195x24){return Sound[_0xf4a5[23]](_0x6195xc[_0xf4a5[22]][_0xf4a5[21]])[_0xf4a5[17]](function(_0x6195x1e){var _0x6195x26=Promise[_0xf4a5[91]](fs[_0xf4a5[90]]);return _0x6195x26(path[_0xf4a5[26]](config[_0x6195x24+_0xf4a5[92]],_0x6195x1e[_0xf4a5[44]]+_0xf4a5[46]+_0x6195x1e[_0x6195x24+_0xf4a5[93]]))})[_0xf4a5[17]](function(_0x6195x19){var _0x6195x25= new Buffer(_0x6195x19,_0xf4a5[89]).toString(_0xf4a5[88]);return _0x6195x25})[_0xf4a5[17]](function(_0x6195x25){return _0x6195xd[_0xf4a5[16]](200)[_0xf4a5[15]]({downloadString:_0x6195x25})})[_0xf4a5[14]](function(_0x6195xe){console[_0xf4a5[74]](_0x6195xe);return handleError(_0x6195xd,_0x6195xe)})}function handleError(_0x6195xd,_0x6195xe){return _0x6195xd[_0xf4a5[16]](500)[_0xf4a5[15]](_0x6195xe)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var Sound = require('../../models').Sound;
+var uploadFile = require('upload-file');
+var sr = require('simple-random');
+var sox = require('sox');
+var path = require('path');
+var config = require('../../config/environment');
+var fs = require('fs');
+var sequelize = require('../../models').sequelize;
+var base64 = require('file-base64');
+var Promise = require('bluebird');
+
+// Get list of Sounds
+exports.index = function(req, res) {
+  Sound
+    .findAndCountAll()
+    .then(function(Sounds) {
+      return res.status(200).send(Sounds);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single Sound
+exports.show = function(req, res) {
+  Sound
+    .findById(req.params.id)
+    .then(function(Sound) {
+      if (!Sound) {
+        return res.sendStatus(404);
+      }
+      return res.send(Sound);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new Sound in the DB.
+exports.create = function(req, res) {
+  var upload = new uploadFile({
+    dest: path.join(config.originalSounds),
+    maxFileSize: 15 * 1000000,
+    maxNumberOfFiles: 10,
+    minNumberOfFiles: 0,
+    acceptFileTypes: /(\.|\/)(wav|mp3|gsm|ogg)$/i,
+    rename: function(name, file) {
+      return sr() + path.extname(file.filename);
+    },
+    messages: {
+      maxNumberOfFiles: "Max number of files upload exceeded",
+      acceptFileTypes: "Only wav,mp3,gsm, and ogg format accepted",
+      maxFileSize: "The maximum file size is 15 Mb",
+      invalidRequest: "Invalid request"
+    }
+  });
+
+  upload.on('end', function(fields, files) {
+    if (!files.file.filename) {
+      return res.status(500).send(upload);
+    }
+
+    var job_details = {};
+    var original_format = path.extname(files.file.filename);
+    job_details.description = "";
+    job_details.original_format = path.extname(files.file.filename).substring(1);
+    job_details.converted_format = 'wav';
+    job_details.name = job_details.display_name = path.basename(files.file.path, original_format);
+    job_details.save_name = path.basename(files.file.filename, original_format);
+
+
+
+    var filepath = path.join(config.originalSounds, job_details.save_name + original_format);
+    var destination = path.join(config.convertedSounds, job_details.save_name + '.' + job_details.converted_format);
+    //
+
+    fs.chmodSync(filepath, parseInt('0777', 8));
+    sox.identify(filepath, function(err, result) {
+      // console.log('************** Result: ', result);
+    });
+
+    var job = sox.transcode(filepath, destination, {
+      sampleRate: 8000,
+      format: 'wav',
+      channelCount: 1,
+      bitRate: 192 * 1024,
+      compressionQuality: 5,
+    });
+
+
+
+    job.on('error', function(err) {
+      console.error('********** Conversion Error: ', err);
+      fs.unlink(filepath, function(err) {
+        if (err)
+          return handleError(res, err);
+      });
+      return handleError(res, err);
+    });
+
+    job.on('progress', function(amountDone, amountTotal) {
+      // console.log("*********** Progress", amountDone, amountTotal);
+    });
+
+    job.on('src', function(info) {
+      // console.log('********** src: ', info);
+      /* info looks like:
+      {
+        format: 'wav',
+        duration: 1.5,
+        sampleCount: 66150,
+        channelCount: 1,
+        bitRate: 722944,
+        sampleRate: 44100,
+      }
+      */
+      job_details.original_duration = isNaN(info.duration) ? null : info.duration * 1000;
+      job_details.original_sampleCount = isNaN(info.sampleCount) ? null : info.sampleCount;
+      job_details.original_channelCount = isNaN(info.channelCount) ? null : info.channelCount;
+      job_details.original_bitRate = isNaN(info.bitRate) ? null : info.bitRate;
+      job_details.original_sampleRate = isNaN(info.sampleRate) ? null : info.sampleRate;
+    });
+
+    job.on('dest', function(info) {
+      // console.log('********** dest: ', info);
+      /* info looks like:
+      {
+        sampleRate: 44100,
+        format: 'mp3',
+        channelCount: 2,
+        sampleCount: 67958,
+        duration: 1.540998,
+        bitRate: 196608,
+      }
+      */
+      job_details.converted_duration = isNaN(info.duration) ? null : info.duration * 1000;
+      job_details.converted_sampleCount = isNaN(info.sampleCount) ? null : info.sampleCount;
+      job_details.converted_channelCount = isNaN(info.channelCount) ? null : info.channelCount;
+      job_details.converted_bitRate = isNaN(info.bitRate) ? null : info.bitRate;
+      job_details.converted_sampleRate = isNaN(info.sampleRate) ? null : info.sampleRate;
+    });
+
+    job.on('end', function() {
+      console.log("Conversion completed");
+      fs.chmodSync(destination, parseInt('0777', 8));
+      Sound
+        .create(job_details)
+        .then(function(sound) {
+          return res.status(201).send(sound);
+        })
+        .catch(function(err) {
+          console.log(err);
+          return handleError(res, err);
+        });
+    });
+
+    job.start();
+
+  });
+
+  upload.on('error', function(err) {
+    console.log('********** Upload error :', err)
+    return handleError(res, err);
+  });
+
+  upload.parse(req);
+};
+
+// Updates an existing upload in the DB.
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  Sound
+    .findById(req.params.id)
+    .then(function(sound) {
+      if (!sound) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(sound, req.body);
+      updated.save()
+        .then(function() {
+          return res.status(200).send(sound);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a Sound from the DB.
+exports.destroy = function(req, res) {
+  Sound
+    .findById(req.params.id)
+    .then(function(sound) {
+      if (!sound) {
+        return res.status(404).send(sound);
+      }
+      var original_filepath = path.join(config.originalSounds, sound.save_name + '.' + sound.original_format);
+      var converted_filepath = path.join(config.convertedSounds, sound.save_name + '.' + sound.converted_format);
+      return sequelize.transaction(function(t) {
+          return sound.destroy({
+              transaction: t
+            })
+            .then(function() {
+              fs.unlink(original_filepath, function(err) {
+                if (err)
+                  return handleError(res, err);
+              });
+              fs.unlink(converted_filepath, function(err) {
+                if (err)
+                  return handleError(res, err);
+              });
+              return res.status(200).send(sound);
+            })
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+//Download an uploaded file
+exports.download = function(req, res) {
+  getStream(req, res, 'original');
+};
+
+//Stream an uploaded file
+exports.stream = function(req, res) {
+  getStream(req, res, 'converted');
+}
+
+
+function getStream(req, res, value) {
+  return Sound
+    .findById(req.params.id)
+    .then(function(sound) {
+      var readFile = Promise.promisify(fs.readFile);
+      return readFile(path.join(config[value + 'Sounds'], sound.save_name + '.' + sound[value + '_format']));
+    })
+    .then(function(result) {
+      var base64String = new Buffer(result, 'binary').toString('base64');
+      return base64String;
+    })
+    .then(function(base64String) {
+      return res.status(200).send({
+        downloadString: base64String
+      });
+    })
+    .catch(function(err) {
+      console.log(err);
+      return handleError(res, err);
+    });
+}
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index 925f82e..cef5b4b 100644 (file)
@@ -1 +1,24 @@
-var _0x6a7c=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x53\x6F\x75\x6E\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x73\x6F\x75\x6E\x64\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x73\x6F\x75\x6E\x64\x3A\x72\x65\x6D\x6F\x76\x65"];_0x6a7c[0];var Sound=require(_0x6a7c[2])[_0x6a7c[1]];exports[_0x6a7c[3]]=function(_0x86a4x2){Sound[_0x6a7c[4]](function(_0x86a4x3){onSave(_0x86a4x2,_0x86a4x3)});Sound[_0x6a7c[5]](function(_0x86a4x3){onRemove(_0x86a4x2,_0x86a4x3)})};function onSave(_0x86a4x2,_0x86a4x3,_0x86a4x5){_0x86a4x2[_0x6a7c[7]](_0x6a7c[6],_0x86a4x3)}function onRemove(_0x86a4x2,_0x86a4x3,_0x86a4x5){_0x86a4x2[_0x6a7c[7]](_0x6a7c[8],_0x86a4x3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var Sound = require('../../models').Sound;
+
+exports.register = function(socket) {
+  Sound.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  Sound.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('sound:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('sound:remove', doc);
+}
index 4e87541..970195e 100644 (file)
@@ -1 +1,20 @@
-var _0x1fdf=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x73\x68\x6F\x75\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x70\x70","\x73\x75\x70\x65\x72\x74\x65\x73\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x73\x6F\x75\x6E\x64\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x70\x6F\x6E\x64\x20\x77\x69\x74\x68\x20\x4A\x53\x4F\x4E\x20\x61\x72\x72\x61\x79","\x69\x6E\x73\x74\x61\x6E\x63\x65\x6F\x66","\x62\x65","\x62\x6F\x64\x79","\x65\x6E\x64","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x65\x78\x70\x65\x63\x74","\x2F\x61\x70\x69\x2F\x73\x6F\x75\x6E\x64\x73","\x67\x65\x74"];_0x1fdf[0];var should=require(_0x1fdf[1]);var app=require(_0x1fdf[2]);var request=require(_0x1fdf[3]);describe(_0x1fdf[4],function(){it(_0x1fdf[5],function(_0xffaex4){request(app)[_0x1fdf[13]](_0x1fdf[12])[_0x1fdf[11]](200)[_0x1fdf[11]](_0x1fdf[10],/json/)[_0x1fdf[9]](function(_0xffaex5,_0xffaex6){if(_0xffaex5){return _0xffaex4(_0xffaex5)};_0xffaex6[_0x1fdf[8]][_0x1fdf[1]][_0x1fdf[7]][_0x1fdf[6]](Array);_0xffaex4()})})})
\ No newline at end of file
+'use strict';
+
+var should = require('should');
+var app = require('../../app');
+var request = require('supertest');
+
+describe('GET /api/sounds', function() {
+
+  it('should respond with JSON array', function(done) {
+    request(app)
+      .get('/api/sounds')
+      .expect(200)
+      .expect('Content-Type', /json/)
+      .end(function(err, res) {
+        if (err) return done(err);
+        res.body.should.be.instanceof(Array);
+        done();
+      });
+  });
+});
index 8490143..5f8a51e 100644 (file)
@@ -1 +1,18 @@
-var _0x710b=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x73\x71\x75\x61\x72\x65\x5F\x6F\x64\x62\x63\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64\x2F\x63\x68\x65\x63\x6B","\x63\x68\x65\x63\x6B\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0x710b[0];var express=require(_0x710b[1]);var controller=require(_0x710b[2]);var auth=require(_0x710b[3]);var router=express.Router();router[_0x710b[7]](_0x710b[4],auth[_0x710b[5]](),controller[_0x710b[6]]);router[_0x710b[7]](_0x710b[8],auth[_0x710b[5]](),controller[_0x710b[9]]);router[_0x710b[7]](_0x710b[10],auth[_0x710b[5]](),controller[_0x710b[11]]);router[_0x710b[13]](_0x710b[4],auth[_0x710b[5]](),controller[_0x710b[12]]);router[_0x710b[15]](_0x710b[10],auth[_0x710b[5]](),controller[_0x710b[14]]);router[_0x710b[16]](_0x710b[10],auth[_0x710b[5]](),controller[_0x710b[14]]);router[_0x710b[18]](_0x710b[4],auth[_0x710b[5]](),controller[_0x710b[17]]);router[_0x710b[18]](_0x710b[10],auth[_0x710b[5]](),controller[_0x710b[19]]);module[_0x710b[20]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./square_odbc.controller');
+var auth = require('../../auth/auth.service');
+
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), controller.index);
+router.get('/:id/check', auth.isAuthenticated(), controller.checkConnection);
+router.get('/:id', auth.isAuthenticated(), controller.show);
+router.post('/', auth.isAuthenticated(), controller.create);
+router.put('/:id', auth.isAuthenticated(), controller.update);
+router.patch('/:id', auth.isAuthenticated(), controller.update);
+router.delete('/', auth.isAuthenticated(), controller.bulkDestroy);
+router.delete('/:id', auth.isAuthenticated(), controller.destroy);
+
+module.exports = router;
index e6b7145..69af149 100644 (file)
@@ -1 +1,135 @@
-var _0x3fac=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x6F\x64\x62\x63","\x53\x71\x75\x61\x72\x65\x4F\x64\x62\x63","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73","\x63\x68\x65\x63\x6B\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E","\x64\x73\x6E","\x63\x6C\x6F\x73\x65","\x6F\x70\x65\x6E"];_0x3fac[0];var _=require(_0x3fac[1]);var db=require(_0x3fac[2])();var SquareOdbc=require(_0x3fac[4])[_0x3fac[3]];var Util=require(_0x3fac[5]);exports[_0x3fac[6]]=function(_0x6666x5,_0x6666x6){return SquareOdbc[_0x3fac[13]](Util[_0x3fac[12]](_0x6666x5[_0x3fac[11]]))[_0x3fac[10]](function(_0x6666x8){_0x6666x6[_0x3fac[9]](200)[_0x3fac[8]](_0x6666x8)})[_0x3fac[7]](function(_0x6666x7){return handleError(_0x6666x6,_0x6666x7)})};exports[_0x3fac[14]]=function(_0x6666x5,_0x6666x6){return SquareOdbc[_0x3fac[18]](_0x6666x5[_0x3fac[17]][_0x3fac[16]])[_0x3fac[10]](function(_0x6666x9){if(!_0x6666x9){return _0x6666x6[_0x3fac[15]](404)};return _0x6666x6[_0x3fac[8]](_0x6666x9)})[_0x3fac[7]](function(_0x6666x7){return handleError(_0x6666x6,_0x6666x7)})};exports[_0x3fac[19]]=function(_0x6666x5,_0x6666x6){return SquareOdbc[_0x3fac[19]](_0x6666x5[_0x3fac[20]])[_0x3fac[10]](function(_0x6666x9){return _0x6666x6[_0x3fac[9]](201)[_0x3fac[8]](_0x6666x9)})[_0x3fac[7]](function(_0x6666x7){return handleError(_0x6666x6,_0x6666x7)})};exports[_0x3fac[21]]=function(_0x6666x5,_0x6666x6){if(_0x6666x5[_0x3fac[20]][_0x3fac[16]]){delete _0x6666x5[_0x3fac[20]][_0x3fac[16]]};return SquareOdbc[_0x3fac[18]](_0x6666x5[_0x3fac[17]][_0x3fac[16]])[_0x3fac[10]](function(_0x6666x9){if(!_0x6666x9){return _0x6666x6[_0x3fac[15]](404)};var _0x6666xa=_[_0x3fac[22]](_0x6666x9,_0x6666x5[_0x3fac[20]]);_0x6666xa[_0x3fac[23]]()[_0x3fac[10]](function(){return _0x6666x6[_0x3fac[9]](200)[_0x3fac[8]](_0x6666x9)})[_0x3fac[7]](function(_0x6666x7){return handleError(_0x6666x6,_0x6666x7)})})[_0x3fac[7]](function(_0x6666x7){return handleError(_0x6666x6,_0x6666x7)})};exports[_0x3fac[24]]=function(_0x6666x5,_0x6666x6){return SquareOdbc[_0x3fac[18]](_0x6666x5[_0x3fac[17]][_0x3fac[16]])[_0x3fac[10]](function(_0x6666xb){if(!_0x6666xb){return _0x6666x6[_0x3fac[15]](404)};return _0x6666xb[_0x3fac[24]]()})[_0x3fac[10]](function(){return _0x6666x6[_0x3fac[15]](204)})[_0x3fac[7]](function(_0x6666x7){return handleError(_0x6666x6,_0x6666x7)})};exports[_0x3fac[25]]=function(_0x6666x5,_0x6666x6){return SquareOdbc[_0x3fac[24]]({where:{id:_0x6666x5[_0x3fac[11]][_0x3fac[26]]},individualHooks:true})[_0x3fac[10]](function(){return _0x6666x6[_0x3fac[15]](204)})[_0x3fac[7]](function(_0x6666x7){return handleError(_0x6666x6,_0x6666x7)})};exports[_0x3fac[27]]=function(_0x6666x5,_0x6666x6){return SquareOdbc[_0x3fac[18]](_0x6666x5[_0x3fac[17]][_0x3fac[16]])[_0x3fac[10]](function(_0x6666x9){if(!_0x6666x9){return _0x6666x6[_0x3fac[15]](404)};db[_0x3fac[30]](_0x6666x9[_0x3fac[28]],function(_0x6666x7){if(_0x6666x7){return handleError(_0x6666x6,_0x6666x7)};db[_0x3fac[29]](function(_0x6666x7){if(_0x6666x7){return handleError(_0x6666x6,_0x6666x7)};return _0x6666x6[_0x3fac[15]](200)})})})[_0x3fac[7]](function(_0x6666x7){return handleError(_0x6666x6,_0x6666x7)})};function handleError(_0x6666x6,_0x6666x7){return _0x6666x6[_0x3fac[9]](500)[_0x3fac[8]](_0x6666x7)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var db = require("odbc")();
+
+var SquareOdbc = require('../../models').SquareOdbc;
+var Util = require('../../config/util');
+
+// Get list of square_odbcs
+exports.index = function(req, res) {
+  return SquareOdbc
+    .findAndCountAll(Util.getQuery(req.query))
+    .then(function(result) {
+      res.status(200).send(result);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single square_odbc
+exports.show = function(req, res) {
+  return SquareOdbc
+    .findById(req.params.id)
+    .then(function(square_odbc) {
+      if (!square_odbc) {
+        return res.sendStatus(404);
+      }
+      return res.send(square_odbc);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new square_odbc in the DB.
+exports.create = function(req, res) {
+  return SquareOdbc
+    .create(req.body)
+    .then(function(square_odbc) {
+      return res.status(201).send(square_odbc);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Updates an existing square_odbc in the DB.
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  return SquareOdbc
+    .findById(req.params.id)
+    .then(function(square_odbc) {
+      if (!square_odbc) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(square_odbc, req.body);
+      updated.save()
+        .then(function() {
+          return res.status(200).send(square_odbc);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a square_odbc from the DB.
+exports.destroy = function(req, res) {
+  return SquareOdbc
+    .findById(req.params.id)
+    .then(function(odbc) {
+      if (!odbc) {
+        return res.sendStatus(404);
+      }
+      return odbc
+        .destroy();
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a square_project from the DB.
+exports.bulkDestroy = function(req, res) {
+  return SquareOdbc
+    .destroy({
+      where: {
+        id: req.query.ids
+      },
+      individualHooks: true
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+exports.checkConnection = function(req, res) {
+  return SquareOdbc
+    .findById(req.params.id)
+    .then(function(square_odbc) {
+      if (!square_odbc) {
+        return res.sendStatus(404);
+      }
+      db.open(square_odbc.dsn, function(err) {
+        if (err) {
+          return handleError(res, err);
+        }
+        db.close(function(err) {
+          if (err) {
+            return handleError(res, err);
+          }
+          return res.sendStatus(200);
+        })
+      })
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index c80cdc0..af0c04a 100644 (file)
@@ -1 +1,24 @@
-var _0x5a32=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x53\x71\x75\x61\x72\x65\x4F\x64\x62\x63","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x73\x71\x75\x61\x72\x65\x5F\x6F\x64\x62\x63\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x73\x71\x75\x61\x72\x65\x5F\x6F\x64\x62\x63\x3A\x72\x65\x6D\x6F\x76\x65"];_0x5a32[0];var SquareOdbc=require(_0x5a32[2])[_0x5a32[1]];exports[_0x5a32[3]]=function(_0x1ef5x2){SquareOdbc[_0x5a32[4]](function(_0x1ef5x3){onSave(_0x1ef5x2,_0x1ef5x3)});SquareOdbc[_0x5a32[5]](function(_0x1ef5x3){onRemove(_0x1ef5x2,_0x1ef5x3)})};function onSave(_0x1ef5x2,_0x1ef5x3,_0x1ef5x5){_0x1ef5x2[_0x5a32[7]](_0x5a32[6],_0x1ef5x3)}function onRemove(_0x1ef5x2,_0x1ef5x3,_0x1ef5x5){_0x1ef5x2[_0x5a32[7]](_0x5a32[8],_0x1ef5x3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var SquareOdbc = require('../../models').SquareOdbc;
+
+exports.register = function(socket) {
+  SquareOdbc.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  SquareOdbc.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('square_odbc:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('square_odbc:remove', doc);
+}
index 4a90011..ce9350c 100644 (file)
@@ -1 +1,20 @@
-var _0xd13a=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x73\x68\x6F\x75\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x70\x70","\x73\x75\x70\x65\x72\x74\x65\x73\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x73\x71\x75\x61\x72\x65\x2F\x6F\x64\x62\x63","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x70\x6F\x6E\x64\x20\x77\x69\x74\x68\x20\x4A\x53\x4F\x4E\x20\x61\x72\x72\x61\x79","\x69\x6E\x73\x74\x61\x6E\x63\x65\x6F\x66","\x62\x65","\x62\x6F\x64\x79","\x65\x6E\x64","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x65\x78\x70\x65\x63\x74","\x2F\x61\x70\x69\x2F\x73\x71\x75\x61\x72\x65\x2F\x6F\x64\x62\x63","\x67\x65\x74"];_0xd13a[0];var should=require(_0xd13a[1]);var app=require(_0xd13a[2]);var request=require(_0xd13a[3]);describe(_0xd13a[4],function(){it(_0xd13a[5],function(_0x3eafx4){request(app)[_0xd13a[13]](_0xd13a[12])[_0xd13a[11]](200)[_0xd13a[11]](_0xd13a[10],/json/)[_0xd13a[9]](function(_0x3eafx5,_0x3eafx6){if(_0x3eafx5){return _0x3eafx4(_0x3eafx5)};_0x3eafx6[_0xd13a[8]][_0xd13a[1]][_0xd13a[7]][_0xd13a[6]](Array);_0x3eafx4()})})})
\ No newline at end of file
+'use strict';
+
+var should = require('should');
+var app = require('../../app');
+var request = require('supertest');
+
+describe('GET /api/square/odbc', function() {
+
+  it('should respond with JSON array', function(done) {
+    request(app)
+      .get('/api/square/odbc')
+      .expect(200)
+      .expect('Content-Type', /json/)
+      .end(function(err, res) {
+        if (err) return done(err);
+        res.body.should.be.instanceof(Array);
+        done();
+      });
+  });
+});
\ No newline at end of file
index b11fdcb..614ce23 100644 (file)
@@ -1 +1,18 @@
-var _0xe0ba=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x73\x71\x75\x61\x72\x65\x5F\x70\x72\x6F\x6A\x65\x63\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x2F\x3A\x69\x64\x2F\x64\x6F\x77\x6E\x6C\x6F\x61\x64","\x64\x6F\x77\x6E\x6C\x6F\x61\x64","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0xe0ba[0];var express=require(_0xe0ba[1]);var controller=require(_0xe0ba[2]);var auth=require(_0xe0ba[3]);var router=express.Router();router[_0xe0ba[7]](_0xe0ba[4],auth[_0xe0ba[5]](),controller[_0xe0ba[6]]);router[_0xe0ba[7]](_0xe0ba[8],auth[_0xe0ba[5]](),controller[_0xe0ba[9]]);router[_0xe0ba[7]](_0xe0ba[10],controller[_0xe0ba[11]]);router[_0xe0ba[13]](_0xe0ba[4],auth[_0xe0ba[5]](),controller[_0xe0ba[12]]);router[_0xe0ba[15]](_0xe0ba[8],auth[_0xe0ba[5]](),controller[_0xe0ba[14]]);router[_0xe0ba[16]](_0xe0ba[8],auth[_0xe0ba[5]](),controller[_0xe0ba[14]]);router[_0xe0ba[18]](_0xe0ba[4],auth[_0xe0ba[5]](),controller[_0xe0ba[17]]);router[_0xe0ba[18]](_0xe0ba[8],auth[_0xe0ba[5]](),controller[_0xe0ba[19]]);module[_0xe0ba[20]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./square_project.controller');
+var auth = require('../../auth/auth.service');
+
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), controller.index);
+router.get('/:id', auth.isAuthenticated(), controller.show);
+router.get('/:id/download', controller.download);
+router.post('/', auth.isAuthenticated(), controller.create);
+router.put('/:id', auth.isAuthenticated(), controller.update);
+router.patch('/:id', auth.isAuthenticated(), controller.update);
+router.delete('/', auth.isAuthenticated(), controller.bulkDestroy);
+router.delete('/:id', auth.isAuthenticated(), controller.destroy);
+
+module.exports = router;
index e1d536b..3531326 100644 (file)
@@ -1 +1,132 @@
-var _0x34f1=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x70\x61\x74\x68","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x53\x71\x75\x61\x72\x65\x50\x72\x6F\x6A\x65\x63\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73","\x64\x6F\x77\x6E\x6C\x6F\x61\x64","\x66\x69\x6C\x65\x6E\x61\x6D\x65","\x6C\x6F\x67","\x61\x74\x74\x61\x63\x68\x6D\x65\x6E\x74\x3B\x20\x66\x69\x6C\x65\x6E\x61\x6D\x65\x3D\x22","\x2E\x78\x6D\x6C\x22","\x74\x78\x74\x2F\x78\x6D\x6C","\x73\x65\x74","\x70\x72\x65\x70\x72\x6F\x64\x75\x63\x74\x69\x6F\x6E"];_0x34f1[0];var _=require(_0x34f1[1]);var path=require(_0x34f1[2]);var config=require(_0x34f1[3]);var Util=require(_0x34f1[4]);var SquareProject=require(_0x34f1[6])[_0x34f1[5]];exports[_0x34f1[7]]=function(_0xc908x6,_0xc908x7){return SquareProject[_0x34f1[14]](Util[_0x34f1[13]](_0xc908x6[_0x34f1[12]]))[_0x34f1[11]](function(_0xc908x9){_0xc908x7[_0x34f1[10]](200)[_0x34f1[9]](_0xc908x9)})[_0x34f1[8]](function(_0xc908x8){return handleError(_0xc908x7,_0xc908x8)})};exports[_0x34f1[15]]=function(_0xc908x6,_0xc908x7){return SquareProject[_0x34f1[19]](_0xc908x6[_0x34f1[18]][_0x34f1[17]])[_0x34f1[11]](function(_0xc908xa){if(!_0xc908xa){return _0xc908x7[_0x34f1[16]](404)};return _0xc908x7[_0x34f1[9]](_0xc908xa)})[_0x34f1[8]](function(_0xc908x8){return handleError(_0xc908x7,_0xc908x8)})};exports[_0x34f1[20]]=function(_0xc908x6,_0xc908x7){return SquareProject[_0x34f1[20]](_0xc908x6[_0x34f1[21]])[_0x34f1[11]](function(_0xc908xa){return _0xc908x7[_0x34f1[10]](201)[_0x34f1[9]](_0xc908xa)})[_0x34f1[8]](function(_0xc908x8){return handleError(_0xc908x7,_0xc908x8)})};exports[_0x34f1[22]]=function(_0xc908x6,_0xc908x7){if(_0xc908x6[_0x34f1[21]][_0x34f1[17]]){delete _0xc908x6[_0x34f1[21]][_0x34f1[17]]};return SquareProject[_0x34f1[19]](_0xc908x6[_0x34f1[18]][_0x34f1[17]])[_0x34f1[11]](function(_0xc908xa){if(!_0xc908xa){return _0xc908x7[_0x34f1[16]](404)};var _0xc908xb=_[_0x34f1[23]](_0xc908xa,_0xc908x6[_0x34f1[21]]);_0xc908xb[_0x34f1[24]]()[_0x34f1[11]](function(){return _0xc908x7[_0x34f1[10]](200)[_0x34f1[9]](_0xc908xa)})[_0x34f1[8]](function(_0xc908x8){return handleError(_0xc908x7,_0xc908x8)})})[_0x34f1[8]](function(_0xc908x8){return handleError(_0xc908x7,_0xc908x8)})};exports[_0x34f1[25]]=function(_0xc908x6,_0xc908x7){return SquareProject[_0x34f1[19]](_0xc908x6[_0x34f1[18]][_0x34f1[17]])[_0x34f1[11]](function(_0xc908xc){if(!_0xc908xc){return _0xc908x7[_0x34f1[16]](404)};return _0xc908xc[_0x34f1[25]]()})[_0x34f1[11]](function(){return _0xc908x7[_0x34f1[16]](204)})[_0x34f1[8]](function(_0xc908x8){return handleError(_0xc908x7,_0xc908x8)})};exports[_0x34f1[26]]=function(_0xc908x6,_0xc908x7){return SquareProject[_0x34f1[25]]({where:{id:_0xc908x6[_0x34f1[12]][_0x34f1[27]]},individualHooks:true})[_0x34f1[11]](function(){return _0xc908x7[_0x34f1[16]](204)})[_0x34f1[8]](function(_0xc908x8){return handleError(_0xc908x7,_0xc908x8)})};exports[_0x34f1[28]]=function(_0xc908x6,_0xc908x7,_0xc908xd){SquareProject[_0x34f1[19]](_0xc908x6[_0x34f1[18]][_0x34f1[17]])[_0x34f1[11]](function(_0xc908xa){if(!_0xc908xa){return _0xc908x7[_0x34f1[16]](404)};console[_0x34f1[30]](_0xc908x6[_0x34f1[12]][_0x34f1[29]]);_0xc908x7[_0x34f1[34]]({"\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E":_0x34f1[31]+_0xc908x6[_0x34f1[12]][_0x34f1[29]]+_0x34f1[32],"\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65":_0x34f1[33]});return _0xc908x7[_0x34f1[9]](_0xc908xa[_0x34f1[35]])})[_0x34f1[8]](function(_0xc908x8){return handleError(_0xc908x7,_0xc908x8)})};function handleError(_0xc908x7,_0xc908x8){return _0xc908x7[_0x34f1[10]](500)[_0x34f1[9]](_0xc908x8)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var path = require('path');
+var config = require('../../config/environment');
+var Util = require('../../config/util');
+
+var SquareProject = require('../../models').SquareProject;
+
+// Get list of square_projects
+exports.index = function(req, res) {
+  return SquareProject
+    .findAndCountAll(Util.getQuery(req.query))
+    .then(function(result) {
+      res.status(200).send(result);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single square_project
+exports.show = function(req, res) {
+  return SquareProject
+    .findById(req.params.id)
+    .then(function(square_project) {
+      if (!square_project) {
+        return res.sendStatus(404);
+      }
+      return res.send(square_project);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new square_project in the DB.
+exports.create = function(req, res) {
+  return SquareProject
+    .create(req.body)
+    .then(function(square_project) {
+      return res.status(201).send(square_project);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Updates an existing square_project in the DB.
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  return SquareProject
+    .findById(req.params.id)
+    .then(function(square_project) {
+      if (!square_project) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(square_project, req.body);
+      updated.save()
+        .then(function() {
+          return res.status(200).send(square_project);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a square_project from the DB.
+exports.destroy = function(req, res) {
+  return SquareProject
+    .findById(req.params.id)
+    .then(function(project) {
+      if (!project) {
+        return res.sendStatus(404);
+      }
+      return project
+        .destroy();
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a square_project from the DB.
+exports.bulkDestroy = function(req, res) {
+  return SquareProject
+    .destroy({
+      where: {
+        id: req.query.ids
+      },
+      individualHooks: true
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+exports.download = function(req, res, next) {
+  SquareProject
+    .findById(req.params.id)
+    .then(function(square_project) {
+      if (!square_project) {
+        return res.sendStatus(404);
+      }
+      console.log(req.query.filename);
+      res.set({
+        "Content-Disposition": "attachment; filename=\"" + req.query.filename +
+          ".xml\"",
+        "Content-Type": "txt/xml"
+      });
+      return res.send(square_project.preproduction);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index 45dc6fa..bc43e25 100644 (file)
@@ -1 +1,27 @@
-var _0x9363=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x53\x71\x75\x61\x72\x65\x50\x72\x6F\x6A\x65\x63\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x73\x71\x75\x61\x72\x65\x5F\x70\x72\x6F\x6A\x65\x63\x74\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x73\x71\x75\x61\x72\x65\x5F\x70\x72\x6F\x6A\x65\x63\x74\x3A\x72\x65\x6D\x6F\x76\x65"];_0x9363[0];var SquareProject=require(_0x9363[2])[_0x9363[1]];exports[_0x9363[3]]=function(_0x28d8x2){SquareProject[_0x9363[4]](function(_0x28d8x3){onSave(_0x28d8x2,_0x28d8x3)});SquareProject[_0x9363[5]](function(_0x28d8x3){onSave(_0x28d8x2,_0x28d8x3)});SquareProject[_0x9363[6]](function(_0x28d8x3){onRemove(_0x28d8x2,_0x28d8x3)})};function onSave(_0x28d8x2,_0x28d8x3,_0x28d8x5){_0x28d8x2[_0x9363[8]](_0x9363[7],_0x28d8x3)}function onRemove(_0x28d8x2,_0x28d8x3,_0x28d8x5){_0x28d8x2[_0x9363[8]](_0x9363[9],_0x28d8x3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var SquareProject = require('../../models').SquareProject;
+
+exports.register = function(socket) {
+  SquareProject.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  SquareProject.afterUpdate(function(doc) {
+    onSave(socket, doc);
+  });
+  SquareProject.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('square_project:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('square_project:remove', doc);
+}
index 250fbba..e87249c 100644 (file)
@@ -1 +1,21 @@
-var _0x7a12=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x73\x75\x67\x61\x72\x63\x72\x6D\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64\x2F\x63\x68\x65\x63\x6B","\x63\x68\x65\x63\x6B\x41\x63\x63\x6F\x75\x6E\x74","\x2F\x3A\x69\x64\x2F\x66\x69\x65\x6C\x64\x73","\x67\x65\x74\x46\x69\x65\x6C\x64\x73","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x2F\x76\x61\x6C\x69\x64\x61\x74\x65\x2F\x3A\x66\x69\x65\x6C\x64","\x61\x63\x63\x6F\x75\x6E\x74\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E","\x70\x6F\x73\x74","\x63\x72\x65\x61\x74\x65","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0x7a12[0];var express=require(_0x7a12[1]);var auth=require(_0x7a12[2]);var controller=require(_0x7a12[3]);var router=express.Router();router[_0x7a12[7]](_0x7a12[4],auth[_0x7a12[5]](),controller[_0x7a12[6]]);router[_0x7a12[7]](_0x7a12[8],auth[_0x7a12[5]](),controller[_0x7a12[9]]);router[_0x7a12[7]](_0x7a12[10],auth[_0x7a12[5]](),controller[_0x7a12[11]]);router[_0x7a12[7]](_0x7a12[12],auth[_0x7a12[5]](),controller[_0x7a12[13]]);router[_0x7a12[16]](_0x7a12[14],auth[_0x7a12[5]](),controller[_0x7a12[15]]);router[_0x7a12[16]](_0x7a12[4],auth[_0x7a12[5]](),controller[_0x7a12[17]]);router[_0x7a12[19]](_0x7a12[12],auth[_0x7a12[5]](),controller[_0x7a12[18]]);router[_0x7a12[20]](_0x7a12[12],auth[_0x7a12[5]](),controller[_0x7a12[18]]);router[_0x7a12[22]](_0x7a12[4],auth[_0x7a12[5]](),controller[_0x7a12[21]]);router[_0x7a12[22]](_0x7a12[12],auth[_0x7a12[5]](),controller[_0x7a12[23]]);module[_0x7a12[24]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var auth = require('../../auth/auth.service');
+var controller = require('./sugarcrm_account.controller');
+
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), controller.index);
+router.get('/:id/check', auth.isAuthenticated(), controller.checkAccount);
+router.get('/:id/fields', auth.isAuthenticated(), controller.getFields);
+router.get('/:id', auth.isAuthenticated(), controller.show);
+router.post('/validate/:field', auth.isAuthenticated(), controller.accountValidation);
+router.post('/', auth.isAuthenticated(), controller.create);
+router.put('/:id', auth.isAuthenticated(), controller.update);
+router.patch('/:id', auth.isAuthenticated(), controller.update);
+router.delete('/', auth.isAuthenticated(), controller.bulkDestroy);
+router.delete('/:id', auth.isAuthenticated(), controller.destroy);
+
+
+module.exports = router;
index ec7864d..758de1a 100644 (file)
@@ -1 +1,97 @@
-var _0x3166=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6E\x6F\x50\x72\x65\x73\x65\x72\x76\x65\x43\x61\x63\x68\x65","\x70\x72\x6F\x78\x79\x71\x75\x69\x72\x65","\x73\x75\x67\x61\x72\x63\x72\x6D\x41\x63\x63\x6F\x75\x6E\x74\x43\x74\x72\x6C\x2E\x69\x6E\x64\x65\x78","\x73\x75\x67\x61\x72\x63\x72\x6D\x41\x63\x63\x6F\x75\x6E\x74\x43\x74\x72\x6C\x2E\x73\x68\x6F\x77","\x73\x75\x67\x61\x72\x63\x72\x6D\x41\x63\x63\x6F\x75\x6E\x74\x43\x74\x72\x6C\x2E\x63\x72\x65\x61\x74\x65","\x73\x75\x67\x61\x72\x63\x72\x6D\x41\x63\x63\x6F\x75\x6E\x74\x43\x74\x72\x6C\x2E\x75\x70\x64\x61\x74\x65","\x73\x75\x67\x61\x72\x63\x72\x6D\x41\x63\x63\x6F\x75\x6E\x74\x43\x74\x72\x6C\x2E\x64\x65\x73\x74\x72\x6F\x79","\x73\x70\x79","\x2E\x2F\x69\x6E\x64\x65\x78\x2E\x6A\x73","\x53\x75\x67\x61\x72\x63\x72\x6D\x41\x63\x63\x6F\x75\x6E\x74\x20\x41\x50\x49\x20\x52\x6F\x75\x74\x65\x72\x3A","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x74\x75\x72\x6E\x20\x61\x6E\x20\x65\x78\x70\x72\x65\x73\x73\x20\x72\x6F\x75\x74\x65\x72\x20\x69\x6E\x73\x74\x61\x6E\x63\x65","\x65\x71\x75\x61\x6C","\x74\x6F","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x73\x75\x67\x61\x72\x63\x72\x6D\x2F\x61\x63\x63\x6F\x75\x6E\x74\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x73\x75\x67\x61\x72\x63\x72\x6D\x41\x63\x63\x6F\x75\x6E\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x69\x6E\x64\x65\x78","\x63\x61\x6C\x6C\x65\x64\x4F\x6E\x63\x65","\x62\x65\x65\x6E","\x68\x61\x76\x65","\x2F","\x77\x69\x74\x68\x41\x72\x67\x73","\x67\x65\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x73\x75\x67\x61\x72\x63\x72\x6D\x2F\x61\x63\x63\x6F\x75\x6E\x74\x73\x2F\x3A\x69\x64","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x73\x75\x67\x61\x72\x63\x72\x6D\x41\x63\x63\x6F\x75\x6E\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x73\x68\x6F\x77","\x2F\x3A\x69\x64","\x50\x4F\x53\x54\x20\x2F\x61\x70\x69\x2F\x73\x75\x67\x61\x72\x63\x72\x6D\x2F\x61\x63\x63\x6F\x75\x6E\x74\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x73\x75\x67\x61\x72\x63\x72\x6D\x41\x63\x63\x6F\x75\x6E\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x50\x55\x54\x20\x2F\x61\x70\x69\x2F\x73\x75\x67\x61\x72\x63\x72\x6D\x2F\x61\x63\x63\x6F\x75\x6E\x74\x73\x2F\x3A\x69\x64","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x73\x75\x67\x61\x72\x63\x72\x6D\x41\x63\x63\x6F\x75\x6E\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x50\x41\x54\x43\x48\x20\x2F\x61\x70\x69\x2F\x73\x75\x67\x61\x72\x63\x72\x6D\x2F\x61\x63\x63\x6F\x75\x6E\x74\x73\x2F\x3A\x69\x64","\x70\x61\x74\x63\x68","\x44\x45\x4C\x45\x54\x45\x20\x2F\x61\x70\x69\x2F\x73\x75\x67\x61\x72\x63\x72\x6D\x2F\x61\x63\x63\x6F\x75\x6E\x74\x73\x2F\x3A\x69\x64","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x73\x75\x67\x61\x72\x63\x72\x6D\x41\x63\x63\x6F\x75\x6E\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65"];_0x3166[0];var proxyquire=require(_0x3166[2])[_0x3166[1]]();var sugarcrmAccountCtrlStub={index:_0x3166[3],show:_0x3166[4],create:_0x3166[5],update:_0x3166[6],destroy:_0x3166[7]};var routerStub={get:sinon[_0x3166[8]](),put:sinon[_0x3166[8]](),patch:sinon[_0x3166[8]](),post:sinon[_0x3166[8]](),delete:sinon[_0x3166[8]]()};var sugarcrmAccountIndex=proxyquire(_0x3166[9],{"\x65\x78\x70\x72\x65\x73\x73":{Router:function(){return routerStub}},"\x2E\x2F\x73\x75\x67\x61\x72\x63\x72\x6D\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72":sugarcrmAccountCtrlStub});describe(_0x3166[10],function(){it(_0x3166[11],function(){expect(sugarcrmAccountIndex)[_0x3166[13]][_0x3166[12]](routerStub)});describe(_0x3166[14],function(){it(_0x3166[15],function(){expect(routerStub[_0x3166[21]][_0x3166[20]](_0x3166[19],_0x3166[3]))[_0x3166[13]][_0x3166[18]][_0x3166[17]][_0x3166[16]]})});describe(_0x3166[22],function(){it(_0x3166[23],function(){expect(routerStub[_0x3166[21]][_0x3166[20]](_0x3166[24],_0x3166[4]))[_0x3166[13]][_0x3166[18]][_0x3166[17]][_0x3166[16]]})});describe(_0x3166[25],function(){it(_0x3166[26],function(){expect(routerStub[_0x3166[27]][_0x3166[20]](_0x3166[19],_0x3166[5]))[_0x3166[13]][_0x3166[18]][_0x3166[17]][_0x3166[16]]})});describe(_0x3166[28],function(){it(_0x3166[29],function(){expect(routerStub[_0x3166[30]][_0x3166[20]](_0x3166[24],_0x3166[6]))[_0x3166[13]][_0x3166[18]][_0x3166[17]][_0x3166[16]]})});describe(_0x3166[31],function(){it(_0x3166[29],function(){expect(routerStub[_0x3166[32]][_0x3166[20]](_0x3166[24],_0x3166[6]))[_0x3166[13]][_0x3166[18]][_0x3166[17]][_0x3166[16]]})});describe(_0x3166[33],function(){it(_0x3166[34],function(){expect(routerStub[_0x3166[35]][_0x3166[20]](_0x3166[24],_0x3166[7]))[_0x3166[13]][_0x3166[18]][_0x3166[17]][_0x3166[16]]})})})
\ No newline at end of file
+'use strict';
+
+var proxyquire = require('proxyquire').noPreserveCache();
+
+var sugarcrmAccountCtrlStub = {
+  index: 'sugarcrmAccountCtrl.index',
+  show: 'sugarcrmAccountCtrl.show',
+  create: 'sugarcrmAccountCtrl.create',
+  update: 'sugarcrmAccountCtrl.update',
+  destroy: 'sugarcrmAccountCtrl.destroy'
+};
+
+var routerStub = {
+  get: sinon.spy(),
+  put: sinon.spy(),
+  patch: sinon.spy(),
+  post: sinon.spy(),
+  delete: sinon.spy()
+};
+
+// require the index with our stubbed out modules
+var sugarcrmAccountIndex = proxyquire('./index.js', {
+  'express': {
+    Router: function() {
+      return routerStub;
+    }
+  },
+  './sugarcrm_account.controller': sugarcrmAccountCtrlStub
+});
+
+describe('SugarcrmAccount API Router:', function() {
+
+  it('should return an express router instance', function() {
+    expect(sugarcrmAccountIndex).to.equal(routerStub);
+  });
+
+  describe('GET /api/sugarcrm/accounts', function() {
+
+    it('should route to sugarcrmAccount.controller.index', function() {
+      expect(routerStub.get
+        .withArgs('/', 'sugarcrmAccountCtrl.index')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('GET /api/sugarcrm/accounts/:id', function() {
+
+    it('should route to sugarcrmAccount.controller.show', function() {
+      expect(routerStub.get
+        .withArgs('/:id', 'sugarcrmAccountCtrl.show')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('POST /api/sugarcrm/accounts', function() {
+
+    it('should route to sugarcrmAccount.controller.create', function() {
+      expect(routerStub.post
+        .withArgs('/', 'sugarcrmAccountCtrl.create')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('PUT /api/sugarcrm/accounts/:id', function() {
+
+    it('should route to sugarcrmAccount.controller.update', function() {
+      expect(routerStub.put
+        .withArgs('/:id', 'sugarcrmAccountCtrl.update')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('PATCH /api/sugarcrm/accounts/:id', function() {
+
+    it('should route to sugarcrmAccount.controller.update', function() {
+      expect(routerStub.patch
+        .withArgs('/:id', 'sugarcrmAccountCtrl.update')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('DELETE /api/sugarcrm/accounts/:id', function() {
+
+    it('should route to sugarcrmAccount.controller.destroy', function() {
+      expect(routerStub.delete
+        .withArgs('/:id', 'sugarcrmAccountCtrl.destroy')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+});
index 7ecdc70..afa4692 100644 (file)
@@ -1 +1,200 @@
-var _0xfbeb=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x53\x75\x67\x61\x72\x63\x72\x6D\x41\x63\x63\x6F\x75\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6A\x73\x6F\x6E","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x65\x6E\x64","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x73\x74\x72\x6F\x79","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73","\x73\x63\x6F\x70\x65","\x73\x68\x6F\x77","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x63\x68\x65\x63\x6B\x41\x63\x63\x6F\x75\x6E\x74","\x6E\x6F\x64\x65\x2D\x73\x75\x67\x61\x72\x63\x72\x6D\x2D\x63\x6C\x69\x65\x6E\x74","\x72\x65\x6D\x6F\x74\x65\x55\x72\x69","\x73\x74\x72\x69\x70\x54\x72\x61\x69\x6C\x69\x6E\x67\x53\x6C\x61\x73\x68","\x2F\x73\x65\x72\x76\x69\x63\x65\x2F\x76\x34\x5F\x31\x2F\x72\x65\x73\x74\x2E\x70\x68\x70","\x75\x73\x65\x72\x6E\x61\x6D\x65","\x70\x61\x73\x73\x77\x6F\x72\x64","\x69\x6E\x69\x74","\x6C\x6F\x67\x69\x6E","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73","\x61\x63\x63\x6F\x75\x6E\x74\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E","\x66\x69\x65\x6C\x64","\x76\x61\x6C\x75\x65","\x63\x6F\x75\x6E\x74","\x67\x65\x74\x46\x69\x65\x6C\x64\x73","\x43\x61\x73\x65\x73","\x67\x65\x74\x5F\x6D\x6F\x64\x75\x6C\x65\x5F\x66\x69\x65\x6C\x64\x73","\x6D\x6F\x64\x75\x6C\x65\x5F\x66\x69\x65\x6C\x64\x73","\x63\x61\x6C\x6C"];_0xfbeb[0];var _=require(_0xfbeb[1]);var Util=require(_0xfbeb[2]);var SugarcrmAccount=require(_0xfbeb[4])[_0xfbeb[3]];function handleError(_0x26b6x5,_0x26b6x6){_0x26b6x6=_0x26b6x6||500;return function(_0x26b6x7){_0x26b6x5[_0xfbeb[6]](_0x26b6x6)[_0xfbeb[5]](_0x26b6x7)}}function responseWithResult(_0x26b6x5,_0x26b6x6){_0x26b6x6=_0x26b6x6||200;return function(_0x26b6x9){if(_0x26b6x9){_0x26b6x5[_0xfbeb[6]](_0x26b6x6)[_0xfbeb[7]](_0x26b6x9)}}}function responseWithoutResult(_0x26b6x5,_0x26b6x6){_0x26b6x6=_0x26b6x6||200;return function(){_0x26b6x5[_0xfbeb[8]](_0x26b6x6)}}function handleEntityNotFound(_0x26b6x5){return function(_0x26b6x9){if(!_0x26b6x9){_0x26b6x5[_0xfbeb[6]](404)[_0xfbeb[9]]();return null};return _0x26b6x9}}function saveUpdates(_0x26b6xd){return function(_0x26b6x9){return _0x26b6x9[_0xfbeb[11]](_0x26b6xd)[_0xfbeb[10]](function(_0x26b6xe){return _0x26b6xe})}}function removeEntity(_0x26b6x5){return function(_0x26b6x9){if(_0x26b6x9){return _0x26b6x9[_0xfbeb[12]]()[_0xfbeb[10]](function(){_0x26b6x5[_0xfbeb[6]](204)[_0xfbeb[9]]()})}}}exports[_0xfbeb[13]]=function(_0x26b6x10,_0x26b6x5){return SugarcrmAccount[_0xfbeb[19]](_0xfbeb[18])[_0xfbeb[17]](Util[_0xfbeb[16]](_0x26b6x10[_0xfbeb[15]]))[_0xfbeb[10]](responseWithResult(_0x26b6x5))[_0xfbeb[14]](handleError(_0x26b6x5))};exports[_0xfbeb[20]]=function(_0x26b6x10,_0x26b6x5){return SugarcrmAccount[_0xfbeb[23]](_0x26b6x10[_0xfbeb[22]][_0xfbeb[21]])[_0xfbeb[10]](handleEntityNotFound(_0x26b6x5))[_0xfbeb[10]](responseWithResult(_0x26b6x5))[_0xfbeb[14]](handleError(_0x26b6x5))};exports[_0xfbeb[24]]=function(_0x26b6x10,_0x26b6x5){return SugarcrmAccount[_0xfbeb[24]](_0x26b6x10[_0xfbeb[25]])[_0xfbeb[10]](responseWithResult(_0x26b6x5,201))[_0xfbeb[14]](handleError(_0x26b6x5))};exports[_0xfbeb[26]]=function(_0x26b6x10,_0x26b6x5){if(_0x26b6x10[_0xfbeb[25]][_0xfbeb[21]]){delete _0x26b6x10[_0xfbeb[25]][_0xfbeb[21]]};return SugarcrmAccount[_0xfbeb[23]](_0x26b6x10[_0xfbeb[22]][_0xfbeb[21]])[_0xfbeb[10]](handleEntityNotFound(_0x26b6x5))[_0xfbeb[10]](saveUpdates(_0x26b6x10[_0xfbeb[25]]))[_0xfbeb[10]](responseWithResult(_0x26b6x5))[_0xfbeb[14]](handleError(_0x26b6x5))};exports[_0xfbeb[12]]=function(_0x26b6x10,_0x26b6x5){return SugarcrmAccount[_0xfbeb[23]](_0x26b6x10[_0xfbeb[22]][_0xfbeb[21]])[_0xfbeb[10]](handleEntityNotFound(_0x26b6x5))[_0xfbeb[10]](removeEntity(_0x26b6x5))[_0xfbeb[14]](handleError(_0x26b6x5))};exports[_0xfbeb[27]]=function(_0x26b6x10,_0x26b6x5){return SugarcrmAccount[_0xfbeb[23]](_0x26b6x10[_0xfbeb[22]][_0xfbeb[21]])[_0xfbeb[10]](handleEntityNotFound(_0x26b6x5))[_0xfbeb[10]](function(_0x26b6x11){var _0x26b6x12=require(_0xfbeb[28]);_0x26b6x12[_0xfbeb[34]]({apiURL:Util[_0xfbeb[30]](_0x26b6x11[_0xfbeb[29]])+_0xfbeb[31],login:_0x26b6x11[_0xfbeb[32]],passwd:_0x26b6x11[_0xfbeb[33]]});_0x26b6x12[_0xfbeb[35]](function(_0x26b6x13){if(!_0x26b6x13){return _0x26b6x5[_0xfbeb[8]](400)};return _0x26b6x5[_0xfbeb[8]](200)})})[_0xfbeb[14]](handleError(_0x26b6x5))};exports[_0xfbeb[36]]=function(_0x26b6x10,_0x26b6x5){SugarcrmAccount[_0xfbeb[12]]({where:{id:_0x26b6x10[_0xfbeb[15]][_0xfbeb[37]]},individualHooks:true})[_0xfbeb[10]](function(){return _0x26b6x5[_0xfbeb[8]](204)})[_0xfbeb[14]](handleError(_0x26b6x5))};exports[_0xfbeb[38]]=function(_0x26b6x10,_0x26b6x5){var _0x26b6x14={};_0x26b6x14[_0x26b6x10[_0xfbeb[22]][_0xfbeb[39]]]=_0x26b6x10[_0xfbeb[25]][_0xfbeb[40]];return SugarcrmAccount[_0xfbeb[17]]({where:_0x26b6x14})[_0xfbeb[10]](function(_0x26b6x15){if(_0x26b6x15[_0xfbeb[41]]){return _0x26b6x5[_0xfbeb[6]](200)[_0xfbeb[5]]({isValid:false,value:_0x26b6x10[_0xfbeb[25]][_0xfbeb[40]]})};return _0x26b6x5[_0xfbeb[6]](200)[_0xfbeb[5]]({isValid:true,value:_0x26b6x10[_0xfbeb[25]][_0xfbeb[40]]})})[_0xfbeb[14]](function(_0x26b6x7){return handleError(_0x26b6x5,_0x26b6x7)})};exports[_0xfbeb[42]]=function(_0x26b6x10,_0x26b6x5){var _0x26b6x12=require(_0xfbeb[28]);return SugarcrmAccount[_0xfbeb[23]](_0x26b6x10[_0xfbeb[22]][_0xfbeb[21]])[_0xfbeb[10]](handleEntityNotFound(_0x26b6x5))[_0xfbeb[10]](function(_0x26b6x11){_0x26b6x12[_0xfbeb[34]]({apiURL:Util[_0xfbeb[30]](_0x26b6x11[_0xfbeb[29]])+_0xfbeb[31],login:_0x26b6x11[_0xfbeb[32]],passwd:_0x26b6x11[_0xfbeb[33]]});_0x26b6x12[_0xfbeb[35]](function(_0x26b6x13){if(!_0x26b6x13){return _0x26b6x5[_0xfbeb[8]](400)};var _0x26b6x16={session:_0x26b6x13,module_name:_0xfbeb[43]};_0x26b6x12[_0xfbeb[46]](_0xfbeb[44],_0x26b6x16,function(_0x26b6x15,_0x26b6x7){if(_0x26b6x7){return _0x26b6x5[_0xfbeb[8]](400)};return _0x26b6x5[_0xfbeb[6]](200)[_0xfbeb[5]](_0x26b6x15[_0xfbeb[45]])})})})[_0xfbeb[14]](handleError(_0x26b6x5))}
\ No newline at end of file
+/**
+ * Using Rails-like standard naming convention for endpoints.
+ * GET     /api/sugarcrm/accounts              ->  index
+ * POST    /api/sugarcrm/accounts              ->  create
+ * GET     /api/sugarcrm/accounts/:id          ->  show
+ * PUT     /api/sugarcrm/accounts/:id          ->  update
+ * DELETE  /api/sugarcrm/accounts/:id          ->  destroy
+ */
+
+'use strict';
+
+
+var _ = require('lodash');
+var Util = require('../../config/util');
+
+var SugarcrmAccount = require('../../models').SugarcrmAccount;
+
+function handleError(res, statusCode) {
+  statusCode = statusCode || 500;
+  return function(err) {
+    res.status(statusCode).send(err);
+  };
+}
+
+function responseWithResult(res, statusCode) {
+  statusCode = statusCode || 200;
+  return function(entity) {
+    if (entity) {
+      res.status(statusCode).json(entity);
+    }
+  };
+}
+
+function responseWithoutResult(res, statusCode) {
+  statusCode = statusCode || 200;
+  return function() {
+    res.sendStatus(statusCode);
+  };
+}
+
+function handleEntityNotFound(res) {
+  return function(entity) {
+    if (!entity) {
+      res.status(404).end();
+      return null;
+    }
+    return entity;
+  };
+}
+
+function saveUpdates(updates) {
+  return function(entity) {
+    return entity.updateAttributes(updates)
+      .then(function(updated) {
+        return updated;
+      });
+  };
+}
+
+function removeEntity(res) {
+  return function(entity) {
+    if (entity) {
+      return entity.destroy()
+        .then(function() {
+          res.status(204).end();
+        });
+    }
+  };
+}
+
+// Gets a list of SugarcrmAccounts
+exports.index = function(req, res) {
+  return SugarcrmAccount
+    .scope('configurations')
+    .findAndCountAll(Util.getQuery(req.query))
+    .then(responseWithResult(res))
+    .catch(handleError(res));
+}
+
+// Gets a single SugarcrmAccount from the DB
+exports.show = function(req, res) {
+  return SugarcrmAccount.findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(responseWithResult(res))
+    .catch(handleError(res));
+}
+
+// Creates a new SugarcrmAccount in the DB
+exports.create = function(req, res) {
+  return SugarcrmAccount.create(req.body)
+    .then(responseWithResult(res, 201))
+    .catch(handleError(res));
+}
+
+// Updates an existing SugarcrmAccount in the DB
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  return SugarcrmAccount.findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(saveUpdates(req.body))
+    .then(responseWithResult(res))
+    .catch(handleError(res));
+}
+
+// Deletes a SugarcrmAccount from the DB
+exports.destroy = function(req, res) {
+  return SugarcrmAccount.findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(removeEntity(res))
+    .catch(handleError(res));
+}
+
+exports.checkAccount = function(req, res) {
+  return SugarcrmAccount.findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(function(account) {
+      var sugar = require('node-sugarcrm-client');
+      sugar.init({
+        apiURL: Util.stripTrailingSlash(account.remoteUri) + "/service/v4_1/rest.php",
+        login: account.username,
+        passwd: account.password
+      });
+      sugar.login(function(sessionId) {
+        if (!sessionId) {
+          return res.sendStatus(400);
+        }
+        return res.sendStatus(200);
+      });
+    })
+    .catch(handleError(res));
+}
+
+exports.bulkDestroy = function(req, res) {
+  SugarcrmAccount
+    .destroy({
+      where: {
+        id: req.query.ids
+      },
+      individualHooks: true
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(handleError(res));
+};
+
+exports.accountValidation = function(req, res) {
+  var where = {};
+  where[req.params.field] = req.body.value;
+  return SugarcrmAccount
+    .findAndCountAll({
+      where: where
+    })
+    .then(function(result) {
+      if (result.count) {
+        return res.status(200).send({
+          isValid: false,
+          value: req.body.value
+        });
+      }
+      return res.status(200).send({
+        isValid: true,
+        value: req.body.value
+      });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+exports.getFields = function(req, res) {
+  var sugar = require('node-sugarcrm-client');
+  return SugarcrmAccount.findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(function(account) {
+      sugar.init({
+        apiURL: Util.stripTrailingSlash(account.remoteUri) + "/service/v4_1/rest.php",
+        login: account.username,
+        passwd: account.password
+      });
+      sugar.login(function(sessionId) {
+        if (!sessionId) {
+          return res.sendStatus(400);
+        }
+        var params = {
+          session: sessionId,
+          module_name: "Cases"
+        };
+        sugar.call("get_module_fields", params, function(result, err) {
+          if (err) {
+            return res.sendStatus(400);
+          }
+          return res.status(200).send(result.module_fields);
+        });
+      });
+    })
+    .catch(handleError(res));
+};
index f1d8d5b..859bf6d 100644 (file)
@@ -1 +1,24 @@
-var _0x60ab=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x53\x75\x67\x61\x72\x63\x72\x6D\x41\x63\x63\x6F\x75\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x73\x75\x67\x61\x72\x63\x72\x6D\x5F\x61\x63\x63\x6F\x75\x6E\x74\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x73\x75\x67\x61\x72\x63\x72\x6D\x5F\x61\x63\x63\x6F\x75\x6E\x74\x3A\x72\x65\x6D\x6F\x76\x65"];_0x60ab[0];var SugarcrmAccount=require(_0x60ab[2])[_0x60ab[1]];exports[_0x60ab[3]]=function(_0x7d62x2){SugarcrmAccount[_0x60ab[4]](function(_0x7d62x3){onSave(_0x7d62x2,_0x7d62x3)});SugarcrmAccount[_0x60ab[5]](function(_0x7d62x3){onRemove(_0x7d62x2,_0x7d62x3)})};function onSave(_0x7d62x2,_0x7d62x3,_0x7d62x5){_0x7d62x2[_0x60ab[7]](_0x60ab[6],_0x7d62x3)}function onRemove(_0x7d62x2,_0x7d62x3,_0x7d62x5){_0x7d62x2[_0x60ab[7]](_0x60ab[8],_0x7d62x3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var SugarcrmAccount = require('../../models').SugarcrmAccount;
+
+exports.register = function(socket) {
+  SugarcrmAccount.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  SugarcrmAccount.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+};
+
+function onSave(socket, doc, cb) {
+  socket.emit('sugarcrm_account:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('sugarcrm_account:remove', doc);
+}
index d2036ad..90111bf 100644 (file)
@@ -1 +1,18 @@
-var _0x1168=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x73\x75\x67\x61\x72\x63\x72\x6D\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x2F\x3A\x69\x64\x2F\x3A\x74\x79\x70\x65","\x61\x64\x64\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x46\x69\x65\x6C\x64","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x1168[0];var express=require(_0x1168[1]);var auth=require(_0x1168[2]);var controller=require(_0x1168[3]);var router=express.Router();router[_0x1168[7]](_0x1168[4],auth[_0x1168[5]](),controller[_0x1168[6]]);router[_0x1168[7]](_0x1168[8],auth[_0x1168[5]](),controller[_0x1168[9]]);router[_0x1168[11]](_0x1168[4],auth[_0x1168[5]](),controller[_0x1168[10]]);router[_0x1168[13]](_0x1168[8],auth[_0x1168[5]](),controller[_0x1168[12]]);router[_0x1168[11]](_0x1168[14],auth[_0x1168[5]](),controller[_0x1168[15]]);router[_0x1168[16]](_0x1168[8],auth[_0x1168[5]](),controller[_0x1168[12]]);router[_0x1168[18]](_0x1168[8],auth[_0x1168[5]](),controller[_0x1168[17]]);module[_0x1168[19]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var auth = require('../../auth/auth.service');
+var controller = require('./sugarcrm_configuration.controller');
+
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), controller.index);
+router.get('/:id', auth.isAuthenticated(), controller.show);
+router.post('/', auth.isAuthenticated(), controller.create);
+router.put('/:id', auth.isAuthenticated(), controller.update);
+router.post('/:id/:type', auth.isAuthenticated(), controller.addConfigurationField);
+router.patch('/:id', auth.isAuthenticated(), controller.update);
+router.delete('/:id', auth.isAuthenticated(), controller.destroy);
+
+
+module.exports = router;
index f9621bc..ba1b022 100644 (file)
@@ -1 +1,97 @@
-var _0x8305=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6E\x6F\x50\x72\x65\x73\x65\x72\x76\x65\x43\x61\x63\x68\x65","\x70\x72\x6F\x78\x79\x71\x75\x69\x72\x65","\x73\x75\x67\x61\x72\x63\x72\x6D\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x43\x74\x72\x6C\x2E\x69\x6E\x64\x65\x78","\x73\x75\x67\x61\x72\x63\x72\x6D\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x43\x74\x72\x6C\x2E\x73\x68\x6F\x77","\x73\x75\x67\x61\x72\x63\x72\x6D\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x43\x74\x72\x6C\x2E\x63\x72\x65\x61\x74\x65","\x73\x75\x67\x61\x72\x63\x72\x6D\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x43\x74\x72\x6C\x2E\x75\x70\x64\x61\x74\x65","\x73\x75\x67\x61\x72\x63\x72\x6D\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x43\x74\x72\x6C\x2E\x64\x65\x73\x74\x72\x6F\x79","\x73\x70\x79","\x2E\x2F\x69\x6E\x64\x65\x78\x2E\x6A\x73","\x53\x75\x67\x61\x72\x63\x72\x6D\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x20\x41\x50\x49\x20\x52\x6F\x75\x74\x65\x72\x3A","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x74\x75\x72\x6E\x20\x61\x6E\x20\x65\x78\x70\x72\x65\x73\x73\x20\x72\x6F\x75\x74\x65\x72\x20\x69\x6E\x73\x74\x61\x6E\x63\x65","\x65\x71\x75\x61\x6C","\x74\x6F","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x73\x75\x67\x61\x72\x63\x72\x6D\x2F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x73\x75\x67\x61\x72\x63\x72\x6D\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x69\x6E\x64\x65\x78","\x63\x61\x6C\x6C\x65\x64\x4F\x6E\x63\x65","\x62\x65\x65\x6E","\x68\x61\x76\x65","\x2F","\x77\x69\x74\x68\x41\x72\x67\x73","\x67\x65\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x73\x75\x67\x61\x72\x63\x72\x6D\x2F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73\x2F\x3A\x69\x64","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x73\x75\x67\x61\x72\x63\x72\x6D\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x73\x68\x6F\x77","\x2F\x3A\x69\x64","\x50\x4F\x53\x54\x20\x2F\x61\x70\x69\x2F\x73\x75\x67\x61\x72\x63\x72\x6D\x2F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x73\x75\x67\x61\x72\x63\x72\x6D\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x50\x55\x54\x20\x2F\x61\x70\x69\x2F\x73\x75\x67\x61\x72\x63\x72\x6D\x2F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73\x2F\x3A\x69\x64","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x73\x75\x67\x61\x72\x63\x72\x6D\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x50\x41\x54\x43\x48\x20\x2F\x61\x70\x69\x2F\x73\x75\x67\x61\x72\x63\x72\x6D\x2F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73\x2F\x3A\x69\x64","\x70\x61\x74\x63\x68","\x44\x45\x4C\x45\x54\x45\x20\x2F\x61\x70\x69\x2F\x73\x75\x67\x61\x72\x63\x72\x6D\x2F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73\x2F\x3A\x69\x64","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x73\x75\x67\x61\x72\x63\x72\x6D\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65"];_0x8305[0];var proxyquire=require(_0x8305[2])[_0x8305[1]]();var sugarcrmConfigurationCtrlStub={index:_0x8305[3],show:_0x8305[4],create:_0x8305[5],update:_0x8305[6],destroy:_0x8305[7]};var routerStub={get:sinon[_0x8305[8]](),put:sinon[_0x8305[8]](),patch:sinon[_0x8305[8]](),post:sinon[_0x8305[8]](),delete:sinon[_0x8305[8]]()};var sugarcrmConfigurationIndex=proxyquire(_0x8305[9],{"\x65\x78\x70\x72\x65\x73\x73":{Router:function(){return routerStub}},"\x2E\x2F\x73\x75\x67\x61\x72\x63\x72\x6D\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72":sugarcrmConfigurationCtrlStub});describe(_0x8305[10],function(){it(_0x8305[11],function(){expect(sugarcrmConfigurationIndex)[_0x8305[13]][_0x8305[12]](routerStub)});describe(_0x8305[14],function(){it(_0x8305[15],function(){expect(routerStub[_0x8305[21]][_0x8305[20]](_0x8305[19],_0x8305[3]))[_0x8305[13]][_0x8305[18]][_0x8305[17]][_0x8305[16]]})});describe(_0x8305[22],function(){it(_0x8305[23],function(){expect(routerStub[_0x8305[21]][_0x8305[20]](_0x8305[24],_0x8305[4]))[_0x8305[13]][_0x8305[18]][_0x8305[17]][_0x8305[16]]})});describe(_0x8305[25],function(){it(_0x8305[26],function(){expect(routerStub[_0x8305[27]][_0x8305[20]](_0x8305[19],_0x8305[5]))[_0x8305[13]][_0x8305[18]][_0x8305[17]][_0x8305[16]]})});describe(_0x8305[28],function(){it(_0x8305[29],function(){expect(routerStub[_0x8305[30]][_0x8305[20]](_0x8305[24],_0x8305[6]))[_0x8305[13]][_0x8305[18]][_0x8305[17]][_0x8305[16]]})});describe(_0x8305[31],function(){it(_0x8305[29],function(){expect(routerStub[_0x8305[32]][_0x8305[20]](_0x8305[24],_0x8305[6]))[_0x8305[13]][_0x8305[18]][_0x8305[17]][_0x8305[16]]})});describe(_0x8305[33],function(){it(_0x8305[34],function(){expect(routerStub[_0x8305[35]][_0x8305[20]](_0x8305[24],_0x8305[7]))[_0x8305[13]][_0x8305[18]][_0x8305[17]][_0x8305[16]]})})})
\ No newline at end of file
+'use strict';
+
+var proxyquire = require('proxyquire').noPreserveCache();
+
+var sugarcrmConfigurationCtrlStub = {
+  index: 'sugarcrmConfigurationCtrl.index',
+  show: 'sugarcrmConfigurationCtrl.show',
+  create: 'sugarcrmConfigurationCtrl.create',
+  update: 'sugarcrmConfigurationCtrl.update',
+  destroy: 'sugarcrmConfigurationCtrl.destroy'
+};
+
+var routerStub = {
+  get: sinon.spy(),
+  put: sinon.spy(),
+  patch: sinon.spy(),
+  post: sinon.spy(),
+  delete: sinon.spy()
+};
+
+// require the index with our stubbed out modules
+var sugarcrmConfigurationIndex = proxyquire('./index.js', {
+  'express': {
+    Router: function() {
+      return routerStub;
+    }
+  },
+  './sugarcrm_configuration.controller': sugarcrmConfigurationCtrlStub
+});
+
+describe('SugarcrmConfiguration API Router:', function() {
+
+  it('should return an express router instance', function() {
+    expect(sugarcrmConfigurationIndex).to.equal(routerStub);
+  });
+
+  describe('GET /api/sugarcrm/configurations', function() {
+
+    it('should route to sugarcrmConfiguration.controller.index', function() {
+      expect(routerStub.get
+        .withArgs('/', 'sugarcrmConfigurationCtrl.index')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('GET /api/sugarcrm/configurations/:id', function() {
+
+    it('should route to sugarcrmConfiguration.controller.show', function() {
+      expect(routerStub.get
+        .withArgs('/:id', 'sugarcrmConfigurationCtrl.show')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('POST /api/sugarcrm/configurations', function() {
+
+    it('should route to sugarcrmConfiguration.controller.create', function() {
+      expect(routerStub.post
+        .withArgs('/', 'sugarcrmConfigurationCtrl.create')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('PUT /api/sugarcrm/configurations/:id', function() {
+
+    it('should route to sugarcrmConfiguration.controller.update', function() {
+      expect(routerStub.put
+        .withArgs('/:id', 'sugarcrmConfigurationCtrl.update')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('PATCH /api/sugarcrm/configurations/:id', function() {
+
+    it('should route to sugarcrmConfiguration.controller.update', function() {
+      expect(routerStub.patch
+        .withArgs('/:id', 'sugarcrmConfigurationCtrl.update')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('DELETE /api/sugarcrm/configurations/:id', function() {
+
+    it('should route to sugarcrmConfiguration.controller.destroy', function() {
+      expect(routerStub.delete
+        .withArgs('/:id', 'sugarcrmConfigurationCtrl.destroy')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+});
index a82a747..5918283 100644 (file)
@@ -1 +1,145 @@
-var _0x2d70=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x53\x75\x67\x61\x72\x63\x72\x6D\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x53\x75\x67\x61\x72\x63\x72\x6D\x46\x69\x65\x6C\x64","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6A\x73\x6F\x6E","\x65\x6E\x64","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x73\x74\x72\x6F\x79","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x71\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x53\x75\x62\x6A\x65\x63\x74","\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x46\x69\x65\x6C\x64","\x66\x69\x6E\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x66\x69\x6E\x64\x42\x79\x49\x64","\x61\x64\x64\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x46\x69\x65\x6C\x64","\x73\x70\x72\x65\x61\x64","\x61\x64\x64\x53\x75\x62\x6A\x65\x63\x74","\x73\x75\x62\x6A\x65\x63\x74","\x61\x64\x64\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x61\x64\x64\x46\x69\x65\x6C\x64","\x66\x69\x65\x6C\x64","\x74\x79\x70\x65"];_0x2d70[0];var _=require(_0x2d70[1]);var SugarcrmConfiguration=require(_0x2d70[3])[_0x2d70[2]];var SugarcrmField=require(_0x2d70[3])[_0x2d70[4]];function handleError(_0x9349x5,_0x9349x6){_0x9349x6=_0x9349x6||500;return function(_0x9349x7){_0x9349x5[_0x2d70[6]](_0x9349x6)[_0x2d70[5]](_0x9349x7)}}function responseWithResult(_0x9349x5,_0x9349x6){_0x9349x6=_0x9349x6||200;return function(_0x9349x9){if(_0x9349x9){_0x9349x5[_0x2d70[6]](_0x9349x6)[_0x2d70[7]](_0x9349x9)}}}function handleEntityNotFound(_0x9349x5){return function(_0x9349x9){if(!_0x9349x9){_0x9349x5[_0x2d70[6]](404)[_0x2d70[8]]();return null};return _0x9349x9}}function saveUpdates(_0x9349xc){return function(_0x9349x9){return _0x9349x9[_0x2d70[10]](_0x9349xc)[_0x2d70[9]](function(_0x9349xd){return _0x9349xd})}}function removeEntity(_0x9349x5){return function(_0x9349x9){if(_0x9349x9){return _0x9349x9[_0x2d70[11]]()[_0x2d70[9]](function(){_0x9349x5[_0x2d70[6]](204)[_0x2d70[8]]()})}}}exports[_0x2d70[12]]=function(_0x9349xf,_0x9349x5){SugarcrmConfiguration[_0x2d70[15]]({where:_0x9349xf[_0x2d70[14]]})[_0x2d70[9]](responseWithResult(_0x9349x5))[_0x2d70[13]](handleError(_0x9349x5))};exports[_0x2d70[16]]=function(_0x9349xf,_0x9349x5){SugarcrmConfiguration[_0x2d70[22]]({where:{id:_0x9349xf[_0x2d70[18]][_0x2d70[17]]},include:[{model:SugarcrmField,as:_0x2d70[19]},{model:SugarcrmField,as:_0x2d70[20]},{model:SugarcrmField,as:_0x2d70[21]}]})[_0x2d70[9]](handleEntityNotFound(_0x9349x5))[_0x2d70[9]](responseWithResult(_0x9349x5))[_0x2d70[13]](handleError(_0x9349x5))};exports[_0x2d70[23]]=function(_0x9349xf,_0x9349x5){SugarcrmConfiguration[_0x2d70[23]](_0x9349xf[_0x2d70[24]])[_0x2d70[9]](responseWithResult(_0x9349x5,201))[_0x2d70[13]](handleError(_0x9349x5))};exports[_0x2d70[25]]=function(_0x9349xf,_0x9349x5){if(_0x9349xf[_0x2d70[24]][_0x2d70[17]]){delete _0x9349xf[_0x2d70[24]][_0x2d70[17]]};SugarcrmConfiguration[_0x2d70[26]](_0x9349xf[_0x2d70[18]][_0x2d70[17]])[_0x2d70[9]](handleEntityNotFound(_0x9349x5))[_0x2d70[9]](saveUpdates(_0x9349xf[_0x2d70[24]]))[_0x2d70[9]](responseWithResult(_0x9349x5))[_0x2d70[13]](handleError(_0x9349x5))};exports[_0x2d70[11]]=function(_0x9349xf,_0x9349x5){SugarcrmConfiguration[_0x2d70[26]](_0x9349xf[_0x2d70[18]][_0x2d70[17]])[_0x2d70[9]](handleEntityNotFound(_0x9349x5))[_0x2d70[9]](removeEntity(_0x9349x5))[_0x2d70[13]](handleError(_0x9349x5))};exports[_0x2d70[27]]=function(_0x9349xf,_0x9349x5,_0x9349x10){var _0x9349x11;SugarcrmConfiguration[_0x2d70[26]](_0x9349xf[_0x2d70[18]][_0x2d70[17]])[_0x2d70[9]](handleEntityNotFound(_0x9349x5))[_0x2d70[9]](function(_0x9349x14){_0x9349x11=_0x9349x14;return SugarcrmField[_0x2d70[23]](_0x9349xf[_0x2d70[24]])})[_0x2d70[9]](function(_0x9349x13){switch(_0x9349xf[_0x2d70[18]][_0x2d70[35]]){case _0x2d70[30]:return [_0x9349x11[_0x2d70[29]](_0x9349x13),_0x9349x13];case _0x2d70[32]:return [_0x9349x11[_0x2d70[31]](_0x9349x13),_0x9349x13];case _0x2d70[34]:return [_0x9349x11[_0x2d70[33]](_0x9349x13),_0x9349x13]}})[_0x2d70[28]](function(_0x9349x12,_0x9349x13){return _0x9349x5[_0x2d70[6]](201)[_0x2d70[7]](_0x9349x13)})[_0x2d70[13]](handleError(_0x9349x5))}
\ No newline at end of file
+/**
+ * Using Rails-like standard naming convention for endpoints.
+ * GET     /api/sugarcrm/configurations              ->  index
+ * POST    /api/sugarcrm/configurations              ->  create
+ * GET     /api/sugarcrm/configurations/:id          ->  show
+ * PUT     /api/sugarcrm/configurations/:id          ->  update
+ * DELETE  /api/sugarcrm/configurations/:id          ->  destroy
+ */
+
+'use strict';
+
+
+var _ = require('lodash');
+
+var SugarcrmConfiguration = require('../../models').SugarcrmConfiguration;
+var SugarcrmField = require('../../models').SugarcrmField;
+
+function handleError(res, statusCode) {
+  statusCode = statusCode || 500;
+  return function(err) {
+    res.status(statusCode).send(err);
+  };
+}
+
+function responseWithResult(res, statusCode) {
+  statusCode = statusCode || 200;
+  return function(entity) {
+    if (entity) {
+      res.status(statusCode).json(entity);
+    }
+  };
+}
+
+function handleEntityNotFound(res) {
+  return function(entity) {
+    if (!entity) {
+      res.status(404).end();
+      return null;
+    }
+    return entity;
+  };
+}
+
+function saveUpdates(updates) {
+  return function(entity) {
+    return entity.updateAttributes(updates)
+      .then(function(updated) {
+        return updated;
+      });
+  };
+}
+
+function removeEntity(res) {
+  return function(entity) {
+    if (entity) {
+      return entity.destroy()
+        .then(function() {
+          res.status(204).end();
+        });
+    }
+  };
+}
+
+// Gets a list of SugarcrmConfigurations
+exports.index = function(req, res) {
+  SugarcrmConfiguration.findAll({
+      where: req.query
+    })
+    .then(responseWithResult(res))
+    .catch(handleError(res));
+}
+
+// Gets a single SugarcrmConfiguration from the DB
+exports.show = function(req, res) {
+  SugarcrmConfiguration.find({
+      where: {
+        id: req.params.id
+      },
+      include: [{
+        model: SugarcrmField,
+        as: 'Subject'
+      }, {
+        model: SugarcrmField,
+        as: 'Description'
+      }, {
+        model: SugarcrmField,
+        as: 'Field'
+      }]
+    })
+    .then(handleEntityNotFound(res))
+    .then(responseWithResult(res))
+    .catch(handleError(res));
+}
+
+// Creates a new SugarcrmConfiguration in the DB
+exports.create = function(req, res) {
+  SugarcrmConfiguration.create(req.body)
+    .then(responseWithResult(res, 201))
+    .catch(handleError(res));
+}
+
+// Updates an existing SugarcrmConfiguration in the DB
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  SugarcrmConfiguration.findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(saveUpdates(req.body))
+    .then(responseWithResult(res))
+    .catch(handleError(res));
+}
+
+// Deletes a SugarcrmConfiguration from the DB
+exports.destroy = function(req, res) {
+  SugarcrmConfiguration.findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(removeEntity(res))
+    .catch(handleError(res));
+}
+
+exports.addConfigurationField = function(req, res, next) {
+  var sugarcrmConfiguration;
+  SugarcrmConfiguration
+    .findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(function(sugarcrm_configuration) {
+      sugarcrmConfiguration = sugarcrm_configuration;
+      return SugarcrmField.create(req.body)
+    })
+    .then(function(sugarcrmField) {
+      switch (req.params.type) {
+        case 'subject':
+          return [sugarcrmConfiguration.addSubject(sugarcrmField), sugarcrmField];
+        case 'description':
+          return [sugarcrmConfiguration.addDescription(sugarcrmField), sugarcrmField];
+        case 'field':
+          return [sugarcrmConfiguration.addField(sugarcrmField), sugarcrmField];
+      }
+    })
+    .spread(function(data, sugarcrmField) {
+      return res.status(201).json(sugarcrmField);
+    })
+    .catch(handleError(res));
+};
index ac15aed..c4464da 100644 (file)
@@ -1 +1,24 @@
-var _0x8fd5=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x53\x75\x67\x61\x72\x63\x72\x6D\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x73\x75\x67\x61\x72\x63\x72\x6D\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x73\x75\x67\x61\x72\x63\x72\x6D\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x3A\x72\x65\x6D\x6F\x76\x65"];_0x8fd5[0];var SugarcrmConfiguration=require(_0x8fd5[2])[_0x8fd5[1]];exports[_0x8fd5[3]]=function(_0xdaadx2){SugarcrmConfiguration[_0x8fd5[4]](function(_0xdaadx3){onSave(_0xdaadx2,_0xdaadx3)});SugarcrmConfiguration[_0x8fd5[5]](function(_0xdaadx3){onRemove(_0xdaadx2,_0xdaadx3)})};function onSave(_0xdaadx2,_0xdaadx3,_0xdaadx5){_0xdaadx2[_0x8fd5[7]](_0x8fd5[6],_0xdaadx3)}function onRemove(_0xdaadx2,_0xdaadx3,_0xdaadx5){_0xdaadx2[_0x8fd5[7]](_0x8fd5[8],_0xdaadx3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var SugarcrmConfiguration = require('../../models').SugarcrmConfiguration;
+
+exports.register = function(socket) {
+  SugarcrmConfiguration.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  SugarcrmConfiguration.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+};
+
+function onSave(socket, doc, cb) {
+  socket.emit('sugarcrm_configuration:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('sugarcrm_configuration:remove', doc);
+}
index 668a7eb..edc0dc9 100644 (file)
@@ -1 +1,18 @@
-var _0x8c45=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x73\x75\x67\x61\x72\x63\x72\x6D\x5F\x66\x69\x65\x6C\x64\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x8c45[0];var express=require(_0x8c45[1]);var auth=require(_0x8c45[2]);var controller=require(_0x8c45[3]);var router=express.Router();router[_0x8c45[7]](_0x8c45[4],auth[_0x8c45[5]](),controller[_0x8c45[6]]);router[_0x8c45[7]](_0x8c45[8],auth[_0x8c45[5]](),controller[_0x8c45[9]]);router[_0x8c45[11]](_0x8c45[4],auth[_0x8c45[5]](),controller[_0x8c45[10]]);router[_0x8c45[13]](_0x8c45[8],auth[_0x8c45[5]](),controller[_0x8c45[12]]);router[_0x8c45[14]](_0x8c45[8],auth[_0x8c45[5]](),controller[_0x8c45[12]]);router[_0x8c45[16]](_0x8c45[8],auth[_0x8c45[5]](),controller[_0x8c45[15]]);module[_0x8c45[17]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var auth = require('../../auth/auth.service');
+var controller = require('./sugarcrm_field.controller');
+
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), controller.index);
+
+router.get('/:id', auth.isAuthenticated(), controller.show);
+router.post('/', auth.isAuthenticated(), controller.create);
+router.put('/:id', auth.isAuthenticated(), controller.update);
+router.patch('/:id', auth.isAuthenticated(), controller.update);
+router.delete('/:id', auth.isAuthenticated(), controller.destroy);
+
+
+module.exports = router;
index 3c89fde..f8a20f7 100644 (file)
@@ -1 +1,97 @@
-var _0x942a=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6E\x6F\x50\x72\x65\x73\x65\x72\x76\x65\x43\x61\x63\x68\x65","\x70\x72\x6F\x78\x79\x71\x75\x69\x72\x65","\x73\x75\x67\x61\x72\x63\x72\x6D\x46\x69\x65\x6C\x64\x43\x74\x72\x6C\x2E\x69\x6E\x64\x65\x78","\x73\x75\x67\x61\x72\x63\x72\x6D\x46\x69\x65\x6C\x64\x43\x74\x72\x6C\x2E\x73\x68\x6F\x77","\x73\x75\x67\x61\x72\x63\x72\x6D\x46\x69\x65\x6C\x64\x43\x74\x72\x6C\x2E\x63\x72\x65\x61\x74\x65","\x73\x75\x67\x61\x72\x63\x72\x6D\x46\x69\x65\x6C\x64\x43\x74\x72\x6C\x2E\x75\x70\x64\x61\x74\x65","\x73\x75\x67\x61\x72\x63\x72\x6D\x46\x69\x65\x6C\x64\x43\x74\x72\x6C\x2E\x64\x65\x73\x74\x72\x6F\x79","\x73\x70\x79","\x2E\x2F\x69\x6E\x64\x65\x78\x2E\x6A\x73","\x53\x75\x67\x61\x72\x63\x72\x6D\x46\x69\x65\x6C\x64\x20\x41\x50\x49\x20\x52\x6F\x75\x74\x65\x72\x3A","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x74\x75\x72\x6E\x20\x61\x6E\x20\x65\x78\x70\x72\x65\x73\x73\x20\x72\x6F\x75\x74\x65\x72\x20\x69\x6E\x73\x74\x61\x6E\x63\x65","\x65\x71\x75\x61\x6C","\x74\x6F","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x73\x75\x67\x61\x72\x63\x72\x6D\x2F\x66\x69\x65\x6C\x64\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x73\x75\x67\x61\x72\x63\x72\x6D\x46\x69\x65\x6C\x64\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x69\x6E\x64\x65\x78","\x63\x61\x6C\x6C\x65\x64\x4F\x6E\x63\x65","\x62\x65\x65\x6E","\x68\x61\x76\x65","\x2F","\x77\x69\x74\x68\x41\x72\x67\x73","\x67\x65\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x73\x75\x67\x61\x72\x63\x72\x6D\x2F\x66\x69\x65\x6C\x64\x73\x2F\x3A\x69\x64","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x73\x75\x67\x61\x72\x63\x72\x6D\x46\x69\x65\x6C\x64\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x73\x68\x6F\x77","\x2F\x3A\x69\x64","\x50\x4F\x53\x54\x20\x2F\x61\x70\x69\x2F\x73\x75\x67\x61\x72\x63\x72\x6D\x2F\x66\x69\x65\x6C\x64\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x73\x75\x67\x61\x72\x63\x72\x6D\x46\x69\x65\x6C\x64\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x50\x55\x54\x20\x2F\x61\x70\x69\x2F\x73\x75\x67\x61\x72\x63\x72\x6D\x2F\x66\x69\x65\x6C\x64\x73\x2F\x3A\x69\x64","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x73\x75\x67\x61\x72\x63\x72\x6D\x46\x69\x65\x6C\x64\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x50\x41\x54\x43\x48\x20\x2F\x61\x70\x69\x2F\x73\x75\x67\x61\x72\x63\x72\x6D\x2F\x66\x69\x65\x6C\x64\x73\x2F\x3A\x69\x64","\x70\x61\x74\x63\x68","\x44\x45\x4C\x45\x54\x45\x20\x2F\x61\x70\x69\x2F\x73\x75\x67\x61\x72\x63\x72\x6D\x2F\x66\x69\x65\x6C\x64\x73\x2F\x3A\x69\x64","\x73\x68\x6F\x75\x6C\x64\x20\x72\x6F\x75\x74\x65\x20\x74\x6F\x20\x73\x75\x67\x61\x72\x63\x72\x6D\x46\x69\x65\x6C\x64\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72\x2E\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65"];_0x942a[0];var proxyquire=require(_0x942a[2])[_0x942a[1]]();var sugarcrmFieldCtrlStub={index:_0x942a[3],show:_0x942a[4],create:_0x942a[5],update:_0x942a[6],destroy:_0x942a[7]};var routerStub={get:sinon[_0x942a[8]](),put:sinon[_0x942a[8]](),patch:sinon[_0x942a[8]](),post:sinon[_0x942a[8]](),delete:sinon[_0x942a[8]]()};var sugarcrmFieldIndex=proxyquire(_0x942a[9],{"\x65\x78\x70\x72\x65\x73\x73":{Router:function(){return routerStub}},"\x2E\x2F\x73\x75\x67\x61\x72\x63\x72\x6D\x5F\x66\x69\x65\x6C\x64\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72":sugarcrmFieldCtrlStub});describe(_0x942a[10],function(){it(_0x942a[11],function(){expect(sugarcrmFieldIndex)[_0x942a[13]][_0x942a[12]](routerStub)});describe(_0x942a[14],function(){it(_0x942a[15],function(){expect(routerStub[_0x942a[21]][_0x942a[20]](_0x942a[19],_0x942a[3]))[_0x942a[13]][_0x942a[18]][_0x942a[17]][_0x942a[16]]})});describe(_0x942a[22],function(){it(_0x942a[23],function(){expect(routerStub[_0x942a[21]][_0x942a[20]](_0x942a[24],_0x942a[4]))[_0x942a[13]][_0x942a[18]][_0x942a[17]][_0x942a[16]]})});describe(_0x942a[25],function(){it(_0x942a[26],function(){expect(routerStub[_0x942a[27]][_0x942a[20]](_0x942a[19],_0x942a[5]))[_0x942a[13]][_0x942a[18]][_0x942a[17]][_0x942a[16]]})});describe(_0x942a[28],function(){it(_0x942a[29],function(){expect(routerStub[_0x942a[30]][_0x942a[20]](_0x942a[24],_0x942a[6]))[_0x942a[13]][_0x942a[18]][_0x942a[17]][_0x942a[16]]})});describe(_0x942a[31],function(){it(_0x942a[29],function(){expect(routerStub[_0x942a[32]][_0x942a[20]](_0x942a[24],_0x942a[6]))[_0x942a[13]][_0x942a[18]][_0x942a[17]][_0x942a[16]]})});describe(_0x942a[33],function(){it(_0x942a[34],function(){expect(routerStub[_0x942a[35]][_0x942a[20]](_0x942a[24],_0x942a[7]))[_0x942a[13]][_0x942a[18]][_0x942a[17]][_0x942a[16]]})})})
\ No newline at end of file
+'use strict';
+
+var proxyquire = require('proxyquire').noPreserveCache();
+
+var sugarcrmFieldCtrlStub = {
+  index: 'sugarcrmFieldCtrl.index',
+  show: 'sugarcrmFieldCtrl.show',
+  create: 'sugarcrmFieldCtrl.create',
+  update: 'sugarcrmFieldCtrl.update',
+  destroy: 'sugarcrmFieldCtrl.destroy'
+};
+
+var routerStub = {
+  get: sinon.spy(),
+  put: sinon.spy(),
+  patch: sinon.spy(),
+  post: sinon.spy(),
+  delete: sinon.spy()
+};
+
+// require the index with our stubbed out modules
+var sugarcrmFieldIndex = proxyquire('./index.js', {
+  'express': {
+    Router: function() {
+      return routerStub;
+    }
+  },
+  './sugarcrm_field.controller': sugarcrmFieldCtrlStub
+});
+
+describe('SugarcrmField API Router:', function() {
+
+  it('should return an express router instance', function() {
+    expect(sugarcrmFieldIndex).to.equal(routerStub);
+  });
+
+  describe('GET /api/sugarcrm/fields', function() {
+
+    it('should route to sugarcrmField.controller.index', function() {
+      expect(routerStub.get
+        .withArgs('/', 'sugarcrmFieldCtrl.index')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('GET /api/sugarcrm/fields/:id', function() {
+
+    it('should route to sugarcrmField.controller.show', function() {
+      expect(routerStub.get
+        .withArgs('/:id', 'sugarcrmFieldCtrl.show')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('POST /api/sugarcrm/fields', function() {
+
+    it('should route to sugarcrmField.controller.create', function() {
+      expect(routerStub.post
+        .withArgs('/', 'sugarcrmFieldCtrl.create')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('PUT /api/sugarcrm/fields/:id', function() {
+
+    it('should route to sugarcrmField.controller.update', function() {
+      expect(routerStub.put
+        .withArgs('/:id', 'sugarcrmFieldCtrl.update')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('PATCH /api/sugarcrm/fields/:id', function() {
+
+    it('should route to sugarcrmField.controller.update', function() {
+      expect(routerStub.patch
+        .withArgs('/:id', 'sugarcrmFieldCtrl.update')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+  describe('DELETE /api/sugarcrm/fields/:id', function() {
+
+    it('should route to sugarcrmField.controller.destroy', function() {
+      expect(routerStub.delete
+        .withArgs('/:id', 'sugarcrmFieldCtrl.destroy')
+        ).to.have.been.calledOnce;
+    });
+
+  });
+
+});
index 2b39dc4..eb6fe3d 100644 (file)
@@ -1 +1,104 @@
-var _0x2dd7=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x53\x75\x67\x61\x72\x63\x72\x6D\x46\x69\x65\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6A\x73\x6F\x6E","\x65\x6E\x64","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x73\x74\x72\x6F\x79","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65"];_0x2dd7[0];var _=require(_0x2dd7[1]);var SugarcrmField=require(_0x2dd7[3])[_0x2dd7[2]];function handleError(_0x69bex4,_0x69bex5){_0x69bex5=_0x69bex5||500;return function(_0x69bex6){_0x69bex4[_0x2dd7[5]](_0x69bex5)[_0x2dd7[4]](_0x69bex6)}}function responseWithResult(_0x69bex4,_0x69bex5){_0x69bex5=_0x69bex5||200;return function(_0x69bex8){if(_0x69bex8){_0x69bex4[_0x2dd7[5]](_0x69bex5)[_0x2dd7[6]](_0x69bex8)}}}function handleEntityNotFound(_0x69bex4){return function(_0x69bex8){if(!_0x69bex8){_0x69bex4[_0x2dd7[5]](404)[_0x2dd7[7]]();return null};return _0x69bex8}}function saveUpdates(_0x69bexb){return function(_0x69bex8){return _0x69bex8[_0x2dd7[9]](_0x69bexb)[_0x2dd7[8]](function(_0x69bexc){return _0x69bexc})}}function removeEntity(_0x69bex4){return function(_0x69bex8){if(_0x69bex8){return _0x69bex8[_0x2dd7[10]]()[_0x2dd7[8]](function(){_0x69bex4[_0x2dd7[5]](204)[_0x2dd7[7]]()})}}}exports[_0x2dd7[11]]=function(_0x69bexe,_0x69bex4){SugarcrmField[_0x2dd7[13]]()[_0x2dd7[8]](responseWithResult(_0x69bex4))[_0x2dd7[12]](handleError(_0x69bex4))};exports[_0x2dd7[14]]=function(_0x69bexe,_0x69bex4){SugarcrmField[_0x2dd7[17]](_0x69bexe[_0x2dd7[16]][_0x2dd7[15]])[_0x2dd7[8]](handleEntityNotFound(_0x69bex4))[_0x2dd7[8]](responseWithResult(_0x69bex4))[_0x2dd7[12]](handleError(_0x69bex4))};exports[_0x2dd7[18]]=function(_0x69bexe,_0x69bex4){SugarcrmField[_0x2dd7[18]](_0x69bexe[_0x2dd7[19]])[_0x2dd7[8]](responseWithResult(_0x69bex4,201))[_0x2dd7[12]](handleError(_0x69bex4))};exports[_0x2dd7[20]]=function(_0x69bexe,_0x69bex4){if(_0x69bexe[_0x2dd7[19]][_0x2dd7[15]]){delete _0x69bexe[_0x2dd7[19]][_0x2dd7[15]]};SugarcrmField[_0x2dd7[17]](_0x69bexe[_0x2dd7[16]][_0x2dd7[15]])[_0x2dd7[8]](handleEntityNotFound(_0x69bex4))[_0x2dd7[8]](saveUpdates(_0x69bexe[_0x2dd7[19]]))[_0x2dd7[8]](responseWithResult(_0x69bex4))[_0x2dd7[12]](handleError(_0x69bex4))};exports[_0x2dd7[10]]=function(_0x69bexe,_0x69bex4){SugarcrmField[_0x2dd7[17]](_0x69bexe[_0x2dd7[16]][_0x2dd7[15]])[_0x2dd7[8]](handleEntityNotFound(_0x69bex4))[_0x2dd7[8]](removeEntity(_0x69bex4))[_0x2dd7[12]](handleError(_0x69bex4))}
\ No newline at end of file
+/**
+ * Using Rails-like standard naming convention for endpoints.
+ * GET     /api/sugarcrm/fields              ->  index
+ * POST    /api/sugarcrm/fields              ->  create
+ * GET     /api/sugarcrm/fields/:id          ->  show
+ * PUT     /api/sugarcrm/fields/:id          ->  update
+ * DELETE  /api/sugarcrm/fields/:id          ->  destroy
+ */
+
+'use strict';
+
+
+var _ = require('lodash');
+
+var SugarcrmField = require('../../models').SugarcrmField;
+
+
+function handleError(res, statusCode) {
+  statusCode = statusCode || 500;
+  return function(err) {
+    res.status(statusCode).send(err);
+  };
+}
+
+function responseWithResult(res, statusCode) {
+  statusCode = statusCode || 200;
+  return function(entity) {
+    if (entity) {
+      res.status(statusCode).json(entity);
+    }
+  };
+}
+
+function handleEntityNotFound(res) {
+  return function(entity) {
+    if (!entity) {
+      res.status(404).end();
+      return null;
+    }
+    return entity;
+  };
+}
+
+function saveUpdates(updates) {
+  return function(entity) {
+    return entity.updateAttributes(updates)
+      .then(function(updated) { 
+        return updated;
+      });
+  };
+}
+
+function removeEntity(res) {
+  return function(entity) {
+    if (entity) {
+      return entity.destroy()
+        .then(function() {
+          res.status(204).end();
+        });
+    }
+  };
+}
+
+// Gets a list of SugarcrmFields
+exports.index = function(req, res) {
+  SugarcrmField.findAll()
+    .then(responseWithResult(res))
+    .catch(handleError(res));
+}
+
+// Gets a single SugarcrmField from the DB
+exports.show = function(req, res) {
+  SugarcrmField.findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(responseWithResult(res))
+    .catch(handleError(res));
+}
+
+// Creates a new SugarcrmField in the DB
+exports.create = function(req, res) {
+  SugarcrmField.create(req.body)
+    .then(responseWithResult(res, 201))
+    .catch(handleError(res));
+}
+
+// Updates an existing SugarcrmField in the DB
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  SugarcrmField.findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(saveUpdates(req.body))
+    .then(responseWithResult(res))
+    .catch(handleError(res));
+}
+
+// Deletes a SugarcrmField from the DB
+exports.destroy = function(req, res) {
+  SugarcrmField.findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(removeEntity(res))
+    .catch(handleError(res));
+}
index a491226..bcc89cc 100644 (file)
@@ -1 +1,24 @@
-var _0xb658=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x53\x75\x67\x61\x72\x63\x72\x6D\x46\x69\x65\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x73\x75\x67\x61\x72\x63\x72\x6D\x5F\x66\x69\x65\x6C\x64\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x73\x75\x67\x61\x72\x63\x72\x6D\x5F\x66\x69\x65\x6C\x64\x3A\x72\x65\x6D\x6F\x76\x65"];_0xb658[0];var SugarcrmField=require(_0xb658[2])[_0xb658[1]];exports[_0xb658[3]]=function(_0xf22ax2){SugarcrmField[_0xb658[4]](function(_0xf22ax3){onSave(_0xf22ax2,_0xf22ax3)});SugarcrmField[_0xb658[5]](function(_0xf22ax3){onRemove(_0xf22ax2,_0xf22ax3)})};function onSave(_0xf22ax2,_0xf22ax3,_0xf22ax5){_0xf22ax2[_0xb658[7]](_0xb658[6],_0xf22ax3)}function onRemove(_0xf22ax2,_0xf22ax3,_0xf22ax5){_0xf22ax2[_0xb658[7]](_0xb658[8],_0xf22ax3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var SugarcrmField = require('../../models').SugarcrmField;
+
+exports.register = function(socket) {
+  SugarcrmField.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  SugarcrmField.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+};
+
+function onSave(socket, doc, cb) {
+  socket.emit('sugarcrm_field:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('sugarcrm_field:remove', doc);
+}
index 0ea526d..17d7f06 100644 (file)
@@ -1 +1,17 @@
-var _0xe1cf=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x74\x61\x67\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0xe1cf[0];var express=require(_0xe1cf[1]);var controller=require(_0xe1cf[2]);var auth=require(_0xe1cf[3]);var router=express.Router();router[_0xe1cf[7]](_0xe1cf[4],auth[_0xe1cf[5]](),controller[_0xe1cf[6]]);router[_0xe1cf[7]](_0xe1cf[8],auth[_0xe1cf[5]](),controller[_0xe1cf[9]]);router[_0xe1cf[11]](_0xe1cf[4],auth[_0xe1cf[5]](),controller[_0xe1cf[10]]);router[_0xe1cf[13]](_0xe1cf[8],auth[_0xe1cf[5]](),controller[_0xe1cf[12]]);router[_0xe1cf[14]](_0xe1cf[8],auth[_0xe1cf[5]](),controller[_0xe1cf[12]]);router[_0xe1cf[16]](_0xe1cf[4],auth[_0xe1cf[5]](),controller[_0xe1cf[15]]);router[_0xe1cf[16]](_0xe1cf[8],auth[_0xe1cf[5]](),controller[_0xe1cf[17]]);module[_0xe1cf[18]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./tag.controller');
+var auth = require('../../auth/auth.service');
+
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), controller.index);
+router.get('/:id', auth.isAuthenticated(), controller.show);
+router.post('/', auth.isAuthenticated(), controller.create);
+router.put('/:id', auth.isAuthenticated(), controller.update);
+router.patch('/:id', auth.isAuthenticated(), controller.update);
+router.delete('/', auth.isAuthenticated(), controller.bulkDestroy);
+router.delete('/:id', auth.isAuthenticated(), controller.destroy);
+
+module.exports = router;
index e07f283..38b0632 100644 (file)
@@ -1 +1,116 @@
-var _0x4ab5=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x54\x61\x67","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79","\x6D\x65\x73\x73\x61\x67\x65","\x54\x61\x67\x20\x69\x73\x20\x61\x73\x73\x6F\x63\x69\x61\x74\x65\x64\x20\x77\x69\x74\x68\x20\x61\x6E\x20\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x27\x73\x20\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x73\x63\x6F\x70\x65","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73","\x5A\x65\x6E\x64\x65\x73\x6B\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73","\x6C\x65\x6E\x67\x74\x68"];_0x4ab5[0];var _=require(_0x4ab5[1]);var Tag=require(_0x4ab5[3])[_0x4ab5[2]];var Util=require(_0x4ab5[4]);exports[_0x4ab5[5]]=function(_0xc7b3x4,_0xc7b3x5,_0xc7b3x6){return Tag[_0x4ab5[12]](Util[_0x4ab5[11]](_0xc7b3x4[_0x4ab5[10]]))[_0x4ab5[9]](function(_0xc7b3x8){_0xc7b3x5[_0x4ab5[8]](200)[_0x4ab5[7]](_0xc7b3x8)})[_0x4ab5[6]](function(_0xc7b3x7){return handleError(_0xc7b3x5,_0xc7b3x7)})};exports[_0x4ab5[13]]=function(_0xc7b3x4,_0xc7b3x5){Tag[_0x4ab5[17]](_0xc7b3x4[_0x4ab5[16]][_0x4ab5[15]])[_0x4ab5[9]](function(_0xc7b3x9){if(!_0xc7b3x9){return _0xc7b3x5[_0x4ab5[14]](404)};return _0xc7b3x5[_0x4ab5[7]](_0xc7b3x9)})[_0x4ab5[6]](function(_0xc7b3x7){return handleError(_0xc7b3x5,_0xc7b3x7)})};exports[_0x4ab5[18]]=function(_0xc7b3x4,_0xc7b3x5){Tag[_0x4ab5[18]](_0xc7b3x4[_0x4ab5[19]])[_0x4ab5[9]](function(_0xc7b3x9){return _0xc7b3x5[_0x4ab5[8]](201)[_0x4ab5[7]](_0xc7b3x9)})[_0x4ab5[6]](function(_0xc7b3x7){return handleError(_0xc7b3x5,_0xc7b3x7)})};exports[_0x4ab5[20]]=function(_0xc7b3x4,_0xc7b3x5){if(_0xc7b3x4[_0x4ab5[19]][_0x4ab5[15]]){delete _0xc7b3x4[_0x4ab5[19]][_0x4ab5[15]]};return Tag[_0x4ab5[17]](_0xc7b3x4[_0x4ab5[16]][_0x4ab5[15]])[_0x4ab5[9]](function(_0xc7b3x9){if(!_0xc7b3x9){return _0xc7b3x5[_0x4ab5[14]](404)};var _0xc7b3xa=_[_0x4ab5[21]](_0xc7b3x9,_0xc7b3x4[_0x4ab5[19]]);return _0xc7b3xa[_0x4ab5[22]]()})[_0x4ab5[9]](function(_0xc7b3x9){return _0xc7b3x5[_0x4ab5[8]](200)[_0x4ab5[7]](_0xc7b3x9)})[_0x4ab5[6]](function(_0xc7b3x7){return handleError(_0xc7b3x5,_0xc7b3x7)})};exports[_0x4ab5[23]]=function(_0xc7b3x4,_0xc7b3x5){return Tag[_0x4ab5[27]](_0x4ab5[26])[_0x4ab5[17]](_0xc7b3x4[_0x4ab5[16]][_0x4ab5[15]])[_0x4ab5[9]](function(_0xc7b3x9){if(!_0xc7b3x9){return _0xc7b3x5[_0x4ab5[14]](404)};if(tagHasAssociation(_0xc7b3x9)){var _0xc7b3x7= new Error();_0xc7b3x7[_0x4ab5[24]]=_0x4ab5[25];throw _0xc7b3x7};return _0xc7b3x9[_0x4ab5[23]]()})[_0x4ab5[9]](function(){return _0xc7b3x5[_0x4ab5[14]](204)})[_0x4ab5[6]](function(_0xc7b3x7){return handleError(_0xc7b3x5,_0xc7b3x7)})};exports[_0x4ab5[28]]=function(_0xc7b3x4,_0xc7b3x5){Tag[_0x4ab5[23]]({where:{id:_0xc7b3x4[_0x4ab5[10]][_0x4ab5[29]]},individualHooks:true})[_0x4ab5[9]](function(){return _0xc7b3x5[_0x4ab5[14]](204)})[_0x4ab5[6]](function(_0xc7b3x7){return handleError(_0xc7b3x5,_0xc7b3x7)})};function handleError(_0xc7b3x5,_0xc7b3x7){return _0xc7b3x5[_0x4ab5[8]](500)[_0x4ab5[7]](_0xc7b3x7)}function tagHasAssociation(_0xc7b3x9){return ((_0xc7b3x9[_0x4ab5[30]]&&_0xc7b3x9[_0x4ab5[30]][_0x4ab5[31]]>0))}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var Tag = require('../../models').Tag;
+var Util = require('../../config/util');
+
+// Get list of tags
+exports.index = function(req, res, next) {
+  return Tag
+    .findAndCountAll(Util.getQuery(req.query))
+    .then(function(result) {
+      res.status(200).send(result);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single tag
+exports.show = function(req, res) {
+  Tag
+    .findById(req.params.id)
+    .then(function(tag) {
+      if (!tag) {
+        return res.sendStatus(404);
+      }
+      return res.send(tag);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new tag in the DB.
+exports.create = function(req, res) {
+  Tag
+    .create(req.body)
+    .then(function(tag) {
+      return res.status(201).send(tag);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Updates an existing tag in the DB.
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+
+  return Tag
+    .findById(req.params.id)
+    .then(function(tag) {
+      if (!tag) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(tag, req.body);
+      return updated
+        .save();
+    })
+    .then(function(tag) {
+      return res.status(200).send(tag);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a tag from the DB.
+exports.destroy = function(req, res) {
+  return Tag
+    .scope('configuration')
+    .findById(req.params.id)
+    .then(function(tag) {
+      if (!tag) {
+        return res.sendStatus(404);
+      }
+      if (tagHasAssociation(tag)) {
+        var err = new Error();
+        err.message = 'Tag is associated with an integration\'s configuration';
+        throw err;
+      }
+      return tag.destroy();
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+exports.bulkDestroy = function(req, res) {
+  Tag
+    .destroy({
+      where: {
+        id: req.query.ids
+      },
+      individualHooks: true
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
+
+function tagHasAssociation(tag) {
+  return ((tag.ZendeskConfigurations && tag.ZendeskConfigurations.length > 0));
+}
index 7f7ad64..790b0a2 100644 (file)
@@ -1 +1,24 @@
-var _0x1c50=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x54\x61\x67","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x74\x61\x67\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x74\x61\x67\x3A\x72\x65\x6D\x6F\x76\x65"];_0x1c50[0];var Tag=require(_0x1c50[2])[_0x1c50[1]];exports[_0x1c50[3]]=function(_0x8bb6x2){Tag[_0x1c50[4]](function(_0x8bb6x3){onSave(_0x8bb6x2,_0x8bb6x3)});Tag[_0x1c50[5]](function(_0x8bb6x3){onRemove(_0x8bb6x2,_0x8bb6x3)})};function onSave(_0x8bb6x2,_0x8bb6x3,_0x8bb6x5){_0x8bb6x2[_0x1c50[7]](_0x1c50[6],_0x8bb6x3)}function onRemove(_0x8bb6x2,_0x8bb6x3,_0x8bb6x5){_0x8bb6x2[_0x1c50[7]](_0x1c50[8],_0x8bb6x3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var Tag = require('../../models').Tag;
+
+exports.register = function(socket) {
+  Tag.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  Tag.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('tag:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('tag:remove', doc);
+}
index f435dbf..794a03a 100644 (file)
@@ -1 +1,20 @@
-var _0xc62e=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x73\x68\x6F\x75\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x70\x70","\x73\x75\x70\x65\x72\x74\x65\x73\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x74\x61\x67\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x70\x6F\x6E\x64\x20\x77\x69\x74\x68\x20\x4A\x53\x4F\x4E\x20\x61\x72\x72\x61\x79","\x69\x6E\x73\x74\x61\x6E\x63\x65\x6F\x66","\x62\x65","\x62\x6F\x64\x79","\x65\x6E\x64","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x65\x78\x70\x65\x63\x74","\x2F\x61\x70\x69\x2F\x74\x61\x67\x73","\x67\x65\x74"];_0xc62e[0];var should=require(_0xc62e[1]);var app=require(_0xc62e[2]);var request=require(_0xc62e[3]);describe(_0xc62e[4],function(){it(_0xc62e[5],function(_0x18a4x4){request(app)[_0xc62e[13]](_0xc62e[12])[_0xc62e[11]](200)[_0xc62e[11]](_0xc62e[10],/json/)[_0xc62e[9]](function(_0x18a4x5,_0x18a4x6){if(_0x18a4x5){return _0x18a4x4(_0x18a4x5)};_0x18a4x6[_0xc62e[8]][_0xc62e[1]][_0xc62e[7]][_0xc62e[6]](Array);_0x18a4x4()})})})
\ No newline at end of file
+'use strict';
+
+var should = require('should');
+var app = require('../../app');
+var request = require('supertest');
+
+describe('GET /api/tags', function() {
+
+  it('should respond with JSON array', function(done) {
+    request(app)
+      .get('/api/tags')
+      .expect(200)
+      .expect('Content-Type', /json/)
+      .end(function(err, res) {
+        if (err) return done(err);
+        res.body.should.be.instanceof(Array);
+        done();
+      });
+  });
+});
index d947449..afa9ea4 100644 (file)
@@ -1 +1,20 @@
-var _0xf306=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x74\x65\x61\x6D\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x2F\x3A\x69\x64\x2F\x61\x67\x65\x6E\x74\x73","\x73\x68\x6F\x77\x41\x67\x65\x6E\x74\x73","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x61\x64\x64\x41\x67\x65\x6E\x74\x73","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x72\x65\x6D\x6F\x76\x65\x41\x67\x65\x6E\x74\x73","\x65\x78\x70\x6F\x72\x74\x73"];_0xf306[0];var express=require(_0xf306[1]);var controller=require(_0xf306[2]);var auth=require(_0xf306[3]);var router=express.Router();router[_0xf306[7]](_0xf306[4],auth[_0xf306[5]](),controller[_0xf306[6]]);router[_0xf306[7]](_0xf306[8],auth[_0xf306[5]](),controller[_0xf306[9]]);router[_0xf306[7]](_0xf306[10],auth[_0xf306[5]](),controller[_0xf306[11]]);router[_0xf306[13]](_0xf306[4],auth[_0xf306[5]](),controller[_0xf306[12]]);router[_0xf306[13]](_0xf306[10],auth[_0xf306[5]](),controller[_0xf306[14]]);router[_0xf306[16]](_0xf306[8],auth[_0xf306[5]](),controller[_0xf306[15]]);router[_0xf306[17]](_0xf306[8],auth[_0xf306[5]](),controller[_0xf306[15]]);router[_0xf306[19]](_0xf306[4],auth[_0xf306[5]](),controller[_0xf306[18]]);router[_0xf306[19]](_0xf306[8],auth[_0xf306[5]](),controller[_0xf306[20]]);router[_0xf306[19]](_0xf306[10],auth[_0xf306[5]](),controller[_0xf306[21]]);module[_0xf306[22]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./team.controller');
+var auth = require('../../auth/auth.service');
+
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), controller.index);
+router.get('/:id', auth.isAuthenticated(), controller.show);
+router.get('/:id/agents', auth.isAuthenticated(), controller.showAgents);
+router.post('/', auth.isAuthenticated(), controller.create);
+router.post('/:id/agents', auth.isAuthenticated(), controller.addAgents);
+router.put('/:id', auth.isAuthenticated(), controller.update);
+router.patch('/:id', auth.isAuthenticated(), controller.update);
+router.delete('/', auth.isAuthenticated(), controller.bulkDestroy);
+router.delete('/:id', auth.isAuthenticated(), controller.destroy);
+router.delete('/:id/agents', auth.isAuthenticated(), controller.removeAgents);
+
+module.exports = router;
index 3d56704..e911873 100644 (file)
@@ -1 +1,170 @@
-var _0xed4b=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x54\x65\x61\x6D","\x55\x73\x65\x72","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x6D\x65\x72\x67\x65","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x64\x65\x66\x61\x75\x6C\x74","\x73\x63\x6F\x70\x65","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x73\x68\x6F\x77\x41\x67\x65\x6E\x74\x73","\x63\x72\x65\x61\x74\x65","\x68\x61\x6E\x64\x6C\x65\x55\x6E\x69\x71\x75\x65\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74\x45\x72\x72\x6F\x72","\x65\x72\x72\x6F\x72\x4D\x61\x6E\x61\x67\x65\x72","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73","\x61\x64\x64\x41\x67\x65\x6E\x74\x73","\x61\x67\x65\x6E\x74\x73","\x61\x64\x64\x55\x73\x65\x72\x73","\x72\x65\x6D\x6F\x76\x65\x41\x67\x65\x6E\x74\x73","\x72\x65\x6D\x6F\x76\x65\x55\x73\x65\x72"];_0xed4b[0];var _=require(_0xed4b[1]);var util=require(_0xed4b[2]);var Util=require(_0xed4b[3]);var sequelize=require(_0xed4b[5])[_0xed4b[4]];var Team=require(_0xed4b[5])[_0xed4b[6]];var Agent=require(_0xed4b[5])[_0xed4b[7]];exports[_0xed4b[8]]=function(_0x246dx7,_0x246dx8){return Team[_0xed4b[18]](_0xed4b[17])[_0xed4b[16]](_[_0xed4b[15]](Util[_0xed4b[14]](_0x246dx7[_0xed4b[13]])))[_0xed4b[12]](function(_0x246dxa){_0x246dx8[_0xed4b[11]](200)[_0xed4b[10]](_0x246dxa)})[_0xed4b[9]](function(_0x246dx9){return handleError(_0x246dx8,_0x246dx9)})};exports[_0xed4b[19]]=function(_0x246dx7,_0x246dx8){return Team[_0xed4b[18]](_0xed4b[17])[_0xed4b[23]](_0x246dx7[_0xed4b[22]][_0xed4b[21]])[_0xed4b[12]](function(_0x246dxb){if(!_0x246dxb){return _0x246dx8[_0xed4b[20]](404)};return _0x246dx8[_0xed4b[10]](_0x246dxb)})[_0xed4b[9]](function(_0x246dx9){return handleError(_0x246dx8,_0x246dx9)})};exports[_0xed4b[24]]=function(_0x246dx7,_0x246dx8){return Team[_0xed4b[18]](_0xed4b[17])[_0xed4b[23]](_0x246dx7[_0xed4b[22]][_0xed4b[21]])[_0xed4b[12]](function(_0x246dxb){if(!_0x246dxb){return _0x246dx8[_0xed4b[20]](404)};return _0x246dx8[_0xed4b[11]](200)[_0xed4b[10]](_0x246dxb.Users)})[_0xed4b[9]](function(_0x246dx9){return handleError(_0x246dx8,_0x246dx9)})};exports[_0xed4b[25]]=function(_0x246dx7,_0x246dx8){return Team[_0xed4b[18]](_0xed4b[17])[_0xed4b[25]](_0x246dx7[_0xed4b[28]])[_0xed4b[12]](function(_0x246dxb){return _0x246dx8[_0xed4b[11]](201)[_0xed4b[10]](_0x246dxb)})[_0xed4b[9]](sequelize.UniqueConstraintError,function(_0x246dx9){return Util[_0xed4b[27]][_0xed4b[26]](_0x246dx8,_0x246dx9)})[_0xed4b[9]](function(_0x246dx9){return handleError(_0x246dx8,_0x246dx9)})};exports[_0xed4b[29]]=function(_0x246dx7,_0x246dx8){if(_0x246dx7[_0xed4b[28]][_0xed4b[21]]){delete _0x246dx7[_0xed4b[28]][_0xed4b[21]]};return Team[_0xed4b[23]](_0x246dx7[_0xed4b[22]][_0xed4b[21]])[_0xed4b[12]](function(_0x246dxb){if(!_0x246dxb){return _0x246dx8[_0xed4b[20]](404)};var _0x246dxc=_[_0xed4b[15]](_0x246dxb,_0x246dx7[_0xed4b[28]]);return _0x246dxc[_0xed4b[30]]()})[_0xed4b[12]](function(_0x246dxb){return _0x246dx8[_0xed4b[11]](200)[_0xed4b[10]](_0x246dxb)})[_0xed4b[9]](function(_0x246dx9){return handleError(_0x246dx8,_0x246dx9)})};exports[_0xed4b[31]]=function(_0x246dx7,_0x246dx8){return Team[_0xed4b[23]](_0x246dx7[_0xed4b[22]][_0xed4b[21]])[_0xed4b[12]](function(_0x246dxb){if(!_0x246dxb){return _0x246dx8[_0xed4b[20]](404)};return _0x246dxb[_0xed4b[31]]()})[_0xed4b[12]](function(){return _0x246dx8[_0xed4b[20]](204)})[_0xed4b[9]](function(_0x246dx9){return handleError(_0x246dx8,_0x246dx9)})};exports[_0xed4b[32]]=function(_0x246dx7,_0x246dx8){return Team[_0xed4b[31]]({where:{id:_0x246dx7[_0xed4b[13]][_0xed4b[33]]},individualHooks:true})[_0xed4b[12]](function(){return _0x246dx8[_0xed4b[20]](204)})[_0xed4b[9]](function(_0x246dx9){return handleError(_0x246dx8,_0x246dx9)})};exports[_0xed4b[34]]=function(_0x246dx7,_0x246dx8,_0x246dxd){return Team[_0xed4b[23]](_0x246dx7[_0xed4b[22]][_0xed4b[21]])[_0xed4b[12]](function(_0x246dxb){if(!_0x246dxb){return _0x246dx8[_0xed4b[20]](404)};return _0x246dxb[_0xed4b[36]](_0x246dx7[_0xed4b[28]][_0xed4b[35]])})[_0xed4b[12]](function(){return _0x246dx8[_0xed4b[20]](201)})[_0xed4b[9]](function(_0x246dx9){return _0x246dxd(_0x246dx9)})};exports[_0xed4b[37]]=function(_0x246dx7,_0x246dx8,_0x246dxd){return Team[_0xed4b[23]](_0x246dx7[_0xed4b[22]][_0xed4b[21]])[_0xed4b[12]](function(_0x246dxb){if(!_0x246dxb){return _0x246dx8[_0xed4b[20]](404)};return _0x246dxb[_0xed4b[38]](_0x246dx7[_0xed4b[13]][_0xed4b[35]])})[_0xed4b[12]](function(){return _0x246dx8[_0xed4b[20]](202)})[_0xed4b[9]](function(_0x246dx9){return _0x246dxd(_0x246dx9)})};function handleError(_0x246dx8,_0x246dx9){return _0x246dx8[_0xed4b[11]](500)[_0xed4b[10]](_0x246dx9)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var util = require('util');
+var Util = require('../../config/util');
+
+var sequelize = require('../../models').sequelize;
+var Team = require('../../models').Team;
+var Agent = require('../../models').User;
+
+// Get list of teams
+exports.index = function(req, res) {
+  return Team
+    .scope('default')
+    .findAndCountAll(_.merge(Util.getQuery(req.query)))
+    .then(function(result) {
+      res.status(200).send(result);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single team
+exports.show = function(req, res) {
+  return Team
+    .scope('default')
+    .findById(req.params.id)
+    .then(function(team) {
+      if (!team) {
+        return res.sendStatus(404);
+      }
+      return res.send(team);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single team
+exports.showAgents = function(req, res) {
+  return Team
+    .scope('default')
+    .findById(req.params.id)
+    .then(function(team) {
+      if (!team) {
+        return res.sendStatus(404);
+      }
+      return res.status(200).send(team.Users);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new team in the DB.
+exports.create = function(req, res) {
+  return Team
+    .scope('default')
+    .create(req.body)
+    .then(function(team) {
+      return res.status(201).send(team);
+    })
+    .catch(sequelize.UniqueConstraintError, function(err) {
+      return Util.errorManager.handleUniqueConstraintError(res, err);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Updates an existing team in the DB.
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+
+  return Team
+    .findById(req.params.id)
+    .then(function(team) {
+      if (!team) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(team, req.body);
+      return updated
+        .save();
+    })
+    .then(function(team) {
+      return res.status(200).send(team);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a team from the DB.
+exports.destroy = function(req, res) {
+  return Team
+    .findById(req.params.id)
+    .then(function(team) {
+      if (!team) {
+        return res.sendStatus(404);
+      }
+      return team.destroy();
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a agent from the DB.
+exports.bulkDestroy = function(req, res) {
+  return Team
+    .destroy({
+      where: {
+        id: req.query.ids
+      },
+      individualHooks: true
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Updates an existing user_has_mail_queue in the DB.
+exports.addAgents = function(req, res, next) {
+  return Team
+    .findById(req.params.id)
+    .then(function(team) {
+      if (!team) {
+        return res.sendStatus(404);
+      }
+      return team
+        .addUsers(req.body.agents);
+    })
+    .then(function() {
+      return res.sendStatus(201);
+    })
+    .catch(function(err) {
+      return next(err);
+    });
+};
+
+exports.removeAgents = function(req, res, next) {
+  return Team
+    .findById(req.params.id)
+    .then(function(team) {
+      if (!team) {
+        return res.sendStatus(404);
+      }
+      return team
+        .removeUser(req.query.agents);
+    })
+    .then(function() {
+      return res.sendStatus(202);
+    })
+    .catch(function(err) {
+      return next(err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index 5473cf9..3f89dc2 100644 (file)
@@ -1 +1,27 @@
-var _0xfbba=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x54\x65\x61\x6D","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x74\x65\x61\x6D\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x74\x65\x61\x6D\x3A\x72\x65\x6D\x6F\x76\x65"];_0xfbba[0];var team=require(_0xfbba[2])[_0xfbba[1]];exports[_0xfbba[3]]=function(_0x36f4x2){team[_0xfbba[4]](function(_0x36f4x3){onSave(_0x36f4x2,_0x36f4x3)});team[_0xfbba[5]](function(_0x36f4x3){onSave(_0x36f4x2,_0x36f4x3)});team[_0xfbba[6]](function(_0x36f4x3){onRemove(_0x36f4x2,_0x36f4x3)})};function onSave(_0x36f4x2,_0x36f4x3,_0x36f4x5){_0x36f4x2[_0xfbba[8]](_0xfbba[7],_0x36f4x3)}function onRemove(_0x36f4x2,_0x36f4x3,_0x36f4x5){_0x36f4x2[_0xfbba[8]](_0xfbba[9],_0x36f4x3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var team = require('../../models').Team;
+
+exports.register = function(socket) {
+  team.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  team.afterUpdate(function(doc) {
+    onSave(socket, doc);
+  });
+  team.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('team:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('team:remove', doc);
+}
index 9fb580d..b76928a 100644 (file)
@@ -1 +1,20 @@
-var _0x6f00=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x73\x68\x6F\x75\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x70\x70","\x73\x75\x70\x65\x72\x74\x65\x73\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x74\x65\x61\x6D\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x70\x6F\x6E\x64\x20\x77\x69\x74\x68\x20\x4A\x53\x4F\x4E\x20\x61\x72\x72\x61\x79","\x69\x6E\x73\x74\x61\x6E\x63\x65\x6F\x66","\x62\x65","\x62\x6F\x64\x79","\x65\x6E\x64","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x65\x78\x70\x65\x63\x74","\x2F\x61\x70\x69\x2F\x74\x65\x61\x6D\x73","\x67\x65\x74"];_0x6f00[0];var should=require(_0x6f00[1]);var app=require(_0x6f00[2]);var request=require(_0x6f00[3]);describe(_0x6f00[4],function(){it(_0x6f00[5],function(_0x27d5x4){request(app)[_0x6f00[13]](_0x6f00[12])[_0x6f00[11]](200)[_0x6f00[11]](_0x6f00[10],/json/)[_0x6f00[9]](function(_0x27d5x5,_0x27d5x6){if(_0x27d5x5){return _0x27d5x4(_0x27d5x5)};_0x27d5x6[_0x6f00[8]][_0x6f00[1]][_0x6f00[7]][_0x6f00[6]](Array);_0x27d5x4()})})})
\ No newline at end of file
+'use strict';
+
+var should = require('should');
+var app = require('../../app');
+var request = require('supertest');
+
+describe('GET /api/teams', function() {
+
+  it('should respond with JSON array', function(done) {
+    request(app)
+      .get('/api/teams')
+      .expect(200)
+      .expect('Content-Type', /json/)
+      .end(function(err, res) {
+        if (err) return done(err);
+        res.body.should.be.instanceof(Array);
+        done();
+      });
+  });
+});
\ No newline at end of file
index addf649..f7e10cb 100644 (file)
@@ -1 +1,20 @@
-var _0xc65d=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x74\x65\x6C\x65\x70\x68\x6F\x6E\x65\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x69\x6E\x74\x65\x72\x6E\x61\x6C","\x67\x65\x74\x49\x6E\x74\x65\x72\x6E\x61\x6C","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x69\x73\x56\x61\x6C\x69\x64\x44\x61\x74\x65","\x69\x73\x54\x65\x6C\x65\x70\x68\x6F\x6E\x65\x73\x4C\x69\x6D\x69\x74","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0xc65d[0];var express=require(_0xc65d[1]);var auth=require(_0xc65d[2]);var controller=require(_0xc65d[3]);var license=require(_0xc65d[4]);var router=express.Router();router[_0xc65d[8]](_0xc65d[5],auth[_0xc65d[6]](),controller[_0xc65d[7]]);router[_0xc65d[8]](_0xc65d[9],auth[_0xc65d[6]](),controller[_0xc65d[10]]);router[_0xc65d[8]](_0xc65d[11],auth[_0xc65d[6]](),controller[_0xc65d[12]]);router[_0xc65d[16]](_0xc65d[5],auth[_0xc65d[6]](),license[_0xc65d[13]](),license[_0xc65d[14]](),controller[_0xc65d[15]]);router[_0xc65d[18]](_0xc65d[11],auth[_0xc65d[6]](),controller[_0xc65d[17]]);router[_0xc65d[19]](_0xc65d[11],auth[_0xc65d[6]](),controller[_0xc65d[17]]);router[_0xc65d[21]](_0xc65d[5],auth[_0xc65d[6]](),controller[_0xc65d[20]]);router[_0xc65d[21]](_0xc65d[11],auth[_0xc65d[6]](),controller[_0xc65d[22]]);module[_0xc65d[23]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var auth = require('../../auth/auth.service');
+var controller = require('./telephone.controller');
+var license = require('../../config/license/license.service');
+
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), controller.index);
+router.get('/internal', auth.isAuthenticated(), controller.getInternal);
+router.get('/:id', auth.isAuthenticated(), controller.show);
+router.post('/', auth.isAuthenticated(), license.isValidDate(), license.isTelephonesLimit(), controller.create);
+router.put('/:id', auth.isAuthenticated(), controller.update);
+router.patch('/:id', auth.isAuthenticated(), controller.update);
+router.delete('/', auth.isAuthenticated(), controller.bulkDestroy);
+router.delete('/:id', auth.isAuthenticated(), controller.destroy);
+
+
+module.exports = router;
index de79331..75bb5f7 100644 (file)
@@ -1 +1,174 @@
-var _0x2ab1=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x55\x73\x65\x72","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6A\x73\x6F\x6E","\x65\x6E\x64","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x73\x74\x72\x6F\x79","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x74\x65\x6C\x65\x70\x68\x6F\x6E\x65","\x73\x63\x6F\x70\x65","\x73\x68\x6F\x77","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x67\x65\x74\x49\x6E\x74\x65\x72\x6E\x61\x6C","\x69\x6E\x74\x65\x72\x6E\x61\x6C","\x6D\x61\x78","\x67\x65\x74\x49\x6E\x74\x65\x72\x6E\x61\x6C\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E","\x72\x65\x71\x2E\x70\x61\x72\x61\x6D\x73","\x6C\x6F\x67","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x62\x6F\x64\x79","\x66\x69\x6E\x64\x41\x6C\x6C","\x63\x72\x65\x61\x74\x65","\x72\x6F\x6C\x65","\x68\x61\x6E\x64\x6C\x65\x55\x6E\x69\x71\x75\x65\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74\x45\x72\x72\x6F\x72","\x65\x72\x72\x6F\x72\x4D\x61\x6E\x61\x67\x65\x72","\x75\x70\x64\x61\x74\x65","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73"];_0x2ab1[0];var _=require(_0x2ab1[1]);var Util=require(_0x2ab1[2]);var sequelize=require(_0x2ab1[4])[_0x2ab1[3]];var Telephone=require(_0x2ab1[4])[_0x2ab1[5]];function handleError(_0xceb7x6,_0xceb7x7){_0xceb7x7=_0xceb7x7||500;return function(_0xceb7x8){_0xceb7x6[_0x2ab1[7]](_0xceb7x7)[_0x2ab1[6]](_0xceb7x8)}}function responseWithResult(_0xceb7x6,_0xceb7x7){_0xceb7x7=_0xceb7x7||200;return function(_0xceb7xa){if(_0xceb7xa){_0xceb7x6[_0x2ab1[7]](_0xceb7x7)[_0x2ab1[8]](_0xceb7xa)}}}function handleEntityNotFound(_0xceb7x6){return function(_0xceb7xa){if(!_0xceb7xa){_0xceb7x6[_0x2ab1[7]](404)[_0x2ab1[9]]();return null};return _0xceb7xa}}function saveUpdates(_0xceb7xd){return function(_0xceb7xa){return _0xceb7xa[_0x2ab1[11]](_0xceb7xd)[_0x2ab1[10]](function(_0xceb7xe){return _0xceb7xe})}}function removeEntity(_0xceb7x6){return function(_0xceb7xa){if(_0xceb7xa){return _0xceb7xa[_0x2ab1[12]]()[_0x2ab1[10]](function(){_0xceb7x6[_0x2ab1[7]](204)[_0x2ab1[9]]()})}}}exports[_0x2ab1[13]]=function(_0xceb7x10,_0xceb7x6){return Telephone[_0x2ab1[19]](_0x2ab1[18])[_0x2ab1[17]](Util[_0x2ab1[16]](_0xceb7x10[_0x2ab1[15]]))[_0x2ab1[10]](function(_0xceb7x11){_0xceb7x6[_0x2ab1[7]](200)[_0x2ab1[6]](_0xceb7x11)})[_0x2ab1[14]](function(_0xceb7x8){return handleError(_0xceb7x6,_0xceb7x8)})};exports[_0x2ab1[20]]=function(_0xceb7x10,_0xceb7x6){Telephone[_0x2ab1[23]](_0xceb7x10[_0x2ab1[22]][_0x2ab1[21]])[_0x2ab1[10]](handleEntityNotFound(_0xceb7x6))[_0x2ab1[10]](responseWithResult(_0xceb7x6))[_0x2ab1[14]](handleError(_0xceb7x6))};exports[_0x2ab1[24]]=function(_0xceb7x10,_0xceb7x6){var _0xceb7x12;return Telephone[_0x2ab1[26]](_0x2ab1[25])[_0x2ab1[10]](function(_0xceb7x13){_0xceb7x12=_0xceb7x13?_0xceb7x13:0;_0xceb7x6[_0x2ab1[7]](200)[_0x2ab1[6]]({internal:_0xceb7x12+1})})[_0x2ab1[14]](function(_0xceb7x8){return handleError(_0xceb7x6,_0xceb7x8)})};exports[_0x2ab1[27]]=function(_0xceb7x10,_0xceb7x6){console[_0x2ab1[29]](_0x2ab1[28],_0xceb7x10[_0x2ab1[22]]);return Telephone[_0x2ab1[32]]({where:{internal:_0xceb7x10[_0x2ab1[31]][_0x2ab1[25]]}})[_0x2ab1[10]](function(_0xceb7x14){if(!_0xceb7x14){return _0xceb7x6[_0x2ab1[30]](404)};return _0xceb7x6[_0x2ab1[6]](_0xceb7x14)})[_0x2ab1[14]](function(_0xceb7x8){return handleError(_0xceb7x6,_0xceb7x8)})};exports[_0x2ab1[33]]=function(_0xceb7x10,_0xceb7x6){_0xceb7x10[_0x2ab1[31]][_0x2ab1[34]]=_0x2ab1[18];return Telephone[_0x2ab1[33]](_0xceb7x10[_0x2ab1[31]])[_0x2ab1[10]](responseWithResult(_0xceb7x6,201))[_0x2ab1[14]](sequelize.UniqueConstraintError,function(_0xceb7x8){return Util[_0x2ab1[36]][_0x2ab1[35]](_0xceb7x6,_0xceb7x8)})[_0x2ab1[14]](handleError(_0xceb7x6))};exports[_0x2ab1[37]]=function(_0xceb7x10,_0xceb7x6){if(_0xceb7x10[_0x2ab1[31]][_0x2ab1[21]]){delete _0xceb7x10[_0x2ab1[31]][_0x2ab1[21]]};return Telephone[_0x2ab1[23]](_0xceb7x10[_0x2ab1[22]][_0x2ab1[21]])[_0x2ab1[10]](handleEntityNotFound(_0xceb7x6))[_0x2ab1[10]](saveUpdates(_0xceb7x10[_0x2ab1[31]]))[_0x2ab1[10]](responseWithResult(_0xceb7x6))[_0x2ab1[14]](sequelize.UniqueConstraintError,function(_0xceb7x8){return Util[_0x2ab1[36]][_0x2ab1[35]](_0xceb7x6,_0xceb7x8)})[_0x2ab1[14]](handleError(_0xceb7x6))};exports[_0x2ab1[12]]=function(_0xceb7x10,_0xceb7x6){return Telephone[_0x2ab1[23]](_0xceb7x10[_0x2ab1[22]][_0x2ab1[21]])[_0x2ab1[10]](handleEntityNotFound(_0xceb7x6))[_0x2ab1[10]](removeEntity(_0xceb7x6))[_0x2ab1[14]](handleError(_0xceb7x6))};exports[_0x2ab1[38]]=function(_0xceb7x10,_0xceb7x6){return Telephone[_0x2ab1[12]]({where:{id:_0xceb7x10[_0x2ab1[15]][_0x2ab1[39]]},individualHooks:true})[_0x2ab1[10]](function(){return _0xceb7x6[_0x2ab1[30]](204)})[_0x2ab1[14]](function(_0xceb7x8){return handleError(_0xceb7x6,_0xceb7x8)})}
\ No newline at end of file
+/**
+ * Using Rails-like standard naming convention for endpoints.
+ * GET     /api/telephones              ->  index
+ * POST    /api/telephones              ->  create
+ * GET     /api/telephones/:id          ->  show
+ * PUT     /api/telephones/:id          ->  update
+ * DELETE  /api/telephones/:id          ->  destroy
+ */
+
+'use strict';
+
+var _ = require('lodash');
+var Util = require('../../config/util');
+
+var sequelize = require('../../models').sequelize;
+var Telephone = require('../../models').User;
+
+function handleError(res, statusCode) {
+  statusCode = statusCode || 500;
+  return function(err) {
+    res.status(statusCode).send(err);
+  };
+}
+
+function responseWithResult(res, statusCode) {
+  statusCode = statusCode || 200;
+  return function(entity) {
+    if (entity) {
+      res.status(statusCode).json(entity);
+    }
+  };
+}
+
+function handleEntityNotFound(res) {
+  return function(entity) {
+    if (!entity) {
+      res.status(404).end();
+      return null;
+    }
+    return entity;
+  };
+}
+
+function saveUpdates(updates) {
+  return function(entity) {
+    return entity.updateAttributes(updates)
+      .then(function(updated) {
+        return updated;
+      });
+  };
+}
+
+function removeEntity(res) {
+  return function(entity) {
+    if (entity) {
+      return entity.destroy()
+        .then(function() {
+          res.status(204).end();
+        });
+    }
+  };
+}
+
+// Gets a list of Telephones
+exports.index = function(req, res) {
+  return Telephone
+    .scope('telephone')
+    .findAndCountAll(Util.getQuery(req.query))
+    .then(function(result) {
+      res.status(200).send(result);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+}
+
+// Gets a single Telephone from the DB
+exports.show = function(req, res) {
+  Telephone.findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(responseWithResult(res))
+    .catch(handleError(res));
+}
+
+// Get list of settings
+exports.getInternal = function(req, res) {
+
+  var _tinternal;
+
+  return Telephone
+    .max('internal')
+    .then(function(tinternal) {
+      _tinternal = tinternal ? tinternal : 0;
+
+      res.status(200).send({
+        internal: _tinternal + 1
+      });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Validate the existence of an internal number
+exports.getInternalValidation = function(req, res) {
+  console.log('req.params', req.params);
+  return Telephone
+    .findAll({
+      where: {
+        internal: req.body.internal
+      }
+    })
+    .then(function(internals) {
+      if (!internals) {
+        return res.sendStatus(404);
+      }
+      return res.send(internals);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new Telephone in the DB
+exports.create = function(req, res) {
+  req.body.role = 'telephone';
+  return Telephone
+    .create(req.body)
+    .then(responseWithResult(res, 201))
+    .catch(sequelize.UniqueConstraintError, function(err) {
+      return Util.errorManager.handleUniqueConstraintError(res, err);
+    })
+    .catch(handleError(res));
+}
+
+// Updates an existing Telephone in the DB
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  return Telephone.findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(saveUpdates(req.body))
+    .then(responseWithResult(res))
+    .catch(sequelize.UniqueConstraintError, function(err) {
+      return Util.errorManager.handleUniqueConstraintError(res, err);
+    })
+    .catch(handleError(res));
+}
+
+// Deletes a Telephone from the DB
+exports.destroy = function(req, res) {
+  return Telephone.findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(removeEntity(res))
+    .catch(handleError(res));
+}
+
+// Deletes a agent from the DB.
+exports.bulkDestroy = function(req, res) {
+  return Telephone
+    .destroy({
+      where: {
+        id: req.query.ids
+      },
+      individualHooks: true
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
index 12166d9..11f6d7a 100644 (file)
@@ -1 +1,24 @@
-var _0x7359=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x72\x65\x67\x69\x73\x74\x65\x72","\x74\x65\x6C\x65\x70\x68\x6F\x6E\x65\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x74\x65\x6C\x65\x70\x68\x6F\x6E\x65\x3A\x72\x65\x6D\x6F\x76\x65"];_0x7359[0];exports[_0x7359[1]]=function(_0x24dax1){};function onSave(_0x24dax1,_0x24dax3,_0x24dax4){_0x24dax1[_0x7359[3]](_0x7359[2],_0x24dax3)}function onRemove(_0x24dax1,_0x24dax3,_0x24dax4){_0x24dax1[_0x7359[3]](_0x7359[4],_0x24dax3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+// var Telephone = require('../../models').Telephone;
+
+exports.register = function (socket) {
+  // Telephone.afterCreate(function(doc) {
+  //   onSave(socket, doc);
+  // });
+  // Telephone.afterDestroy(function(doc) {
+  //   onRemove(socket, doc);
+  // });
+};
+
+function onSave(socket, doc, cb) {
+  socket.emit('telephone:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('telephone:remove', doc);
+}
index c2535be..e2c0971 100644 (file)
@@ -1 +1,17 @@
-var _0xc9ed=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x74\x72\x69\x67\x67\x65\x72\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0xc9ed[0];var express=require(_0xc9ed[1]);var controller=require(_0xc9ed[2]);var auth=require(_0xc9ed[3]);var router=express.Router();router[_0xc9ed[7]](_0xc9ed[4],auth[_0xc9ed[5]](),controller[_0xc9ed[6]]);router[_0xc9ed[7]](_0xc9ed[8],auth[_0xc9ed[5]](),controller[_0xc9ed[9]]);router[_0xc9ed[11]](_0xc9ed[4],auth[_0xc9ed[5]](),controller[_0xc9ed[10]]);router[_0xc9ed[13]](_0xc9ed[8],auth[_0xc9ed[5]](),controller[_0xc9ed[12]]);router[_0xc9ed[14]](_0xc9ed[8],auth[_0xc9ed[5]](),controller[_0xc9ed[12]]);router[_0xc9ed[16]](_0xc9ed[8],auth[_0xc9ed[5]](),controller[_0xc9ed[15]]);router[_0xc9ed[16]](_0xc9ed[4],auth[_0xc9ed[5]](),controller[_0xc9ed[17]]);module[_0xc9ed[18]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./trigger.controller');
+var auth = require('../../auth/auth.service');
+
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), controller.index);
+router.get('/:id', auth.isAuthenticated(), controller.show);
+router.post('/', auth.isAuthenticated(), controller.create);
+router.put('/:id', auth.isAuthenticated(), controller.update);
+router.patch('/:id', auth.isAuthenticated(), controller.update);
+router.delete('/:id', auth.isAuthenticated(), controller.destroy);
+router.delete('/', auth.isAuthenticated(), controller.bulkDestroy);
+
+module.exports = router;
index 13c4f92..97bbaf4 100644 (file)
@@ -1 +1,199 @@
-var _0xd646=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x54\x72\x69\x67\x67\x65\x72","\x54\x6F\x6F\x6C\x73\x43\x6F\x6E\x64\x69\x74\x69\x6F\x6E","\x54\x6F\x6F\x6C\x73\x41\x63\x74\x69\x6F\x6E","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x61\x6C\x6C","\x73\x63\x6F\x70\x65","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x41\x6C\x6C","\x41\x6E\x79","\x41\x63\x74\x69\x6F\x6E\x73","\x75\x70\x64\x61\x74\x65","\x6C\x6F\x67","\x69\x73\x41\x72\x72\x61\x79","\x6C\x65\x6E\x67\x74\x68","\x54\x72\x69\x67\x67\x65\x72\x49\x64","\x66\x6F\x72\x45\x61\x63\x68","\x62\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x54\x72\x69\x67\x67\x65\x72\x41\x6C\x6C\x49\x64","\x54\x72\x69\x67\x67\x65\x72\x41\x6E\x79\x49\x64","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79"];_0xd646[0];var _=require(_0xd646[1]);var util=require(_0xd646[2]);var Util=require(_0xd646[3]);var sequelize=require(_0xd646[5])[_0xd646[4]];var Trigger=require(_0xd646[5])[_0xd646[6]];var ToolsCondition=require(_0xd646[5])[_0xd646[7]];var ToolsAction=require(_0xd646[5])[_0xd646[8]];exports[_0xd646[9]]=function(_0x53d1x8,_0x53d1x9,_0x53d1xa){return Trigger[_0xd646[18]](_0xd646[17])[_0xd646[16]](Util[_0xd646[15]](_0x53d1x8[_0xd646[14]]))[_0xd646[13]](function(_0x53d1xc){_0x53d1x9[_0xd646[12]](200)[_0xd646[11]](_0x53d1xc)})[_0xd646[10]](function(_0x53d1xb){return handleError(_0x53d1x9,_0x53d1xb)})};exports[_0xd646[19]]=function(_0x53d1x8,_0x53d1x9){Trigger[_0xd646[18]](_0xd646[17])[_0xd646[23]](_0x53d1x8[_0xd646[22]][_0xd646[21]])[_0xd646[13]](function(Trigger){if(!Trigger){return _0x53d1x9[_0xd646[20]](404)};return _0x53d1x9[_0xd646[11]](Trigger)})[_0xd646[10]](function(_0x53d1xb){return handleError(_0x53d1x9,_0x53d1xb)})};exports[_0xd646[24]]=function(_0x53d1x8,_0x53d1x9){Trigger[_0xd646[24]](_0x53d1x8[_0xd646[25]],{include:[{model:ToolsCondition,as:_0xd646[26]},{model:ToolsCondition,as:_0xd646[27]},{model:ToolsAction,as:_0xd646[28]}]})[_0xd646[13]](function(){return _0x53d1x9[_0xd646[20]](201)})[_0xd646[10]](function(_0x53d1xb){return handleError(_0x53d1x9,_0x53d1xb)})};exports[_0xd646[29]]=function(_0x53d1x8,_0x53d1x9,_0x53d1xa){var _0x53d1xd;if(_0x53d1x8[_0xd646[25]][_0xd646[21]]){delete _0x53d1x8[_0xd646[25]][_0xd646[21]]};return sequelize[_0xd646[41]](function(_0x53d1xe){return Trigger[_0xd646[23]](_0x53d1x8[_0xd646[22]][_0xd646[21]])[_0xd646[13]](function(_0x53d1x10){if(!_0x53d1x10){return _0x53d1x9[_0xd646[20]](404)};var _0x53d1x11=_[_0xd646[39]](_0x53d1x10,_0x53d1x8[_0xd646[25]]);return _0x53d1x11[_0xd646[40]]({transaction:_0x53d1xe})})[_0xd646[13]](function(_0x53d1x10){_0x53d1xd=_0x53d1x10;if(_0x53d1x8[_0xd646[25]][_0xd646[27]]){return ToolsCondition[_0xd646[36]]({where:{TriggerAnyId:_0x53d1x8[_0xd646[22]][_0xd646[21]]},transaction:_0x53d1xe})}})[_0xd646[13]](function(){if(_0x53d1x8[_0xd646[25]][_0xd646[27]]&&Array[_0xd646[31]](_0x53d1x8[_0xd646[25]].Any)&&_0x53d1x8[_0xd646[25]][_0xd646[27]][_0xd646[32]]){_[_0xd646[34]](_0x53d1x8[_0xd646[25]].Any,function(_0x53d1xf){_0x53d1xf[_0xd646[38]]=_0x53d1x8[_0xd646[22]][_0xd646[21]]});return ToolsCondition[_0xd646[35]](_0x53d1x8[_0xd646[25]].Any,{transaction:_0x53d1xe})}})[_0xd646[13]](function(){if(_0x53d1x8[_0xd646[25]][_0xd646[26]]){return ToolsCondition[_0xd646[36]]({where:{TriggerAllId:_0x53d1x8[_0xd646[22]][_0xd646[21]]},transaction:_0x53d1xe})}})[_0xd646[13]](function(){if(_0x53d1x8[_0xd646[25]][_0xd646[26]]&&Array[_0xd646[31]](_0x53d1x8[_0xd646[25]].All)&&_0x53d1x8[_0xd646[25]][_0xd646[26]][_0xd646[32]]){_[_0xd646[34]](_0x53d1x8[_0xd646[25]].All,function(_0x53d1xf){_0x53d1xf[_0xd646[37]]=_0x53d1x8[_0xd646[22]][_0xd646[21]]});return ToolsCondition[_0xd646[35]](_0x53d1x8[_0xd646[25]].All,{transaction:_0x53d1xe})}})[_0xd646[13]](function(){if(_0x53d1x8[_0xd646[25]][_0xd646[28]]){return ToolsAction[_0xd646[36]]({where:{TriggerId:_0x53d1x8[_0xd646[22]][_0xd646[21]]},transaction:_0x53d1xe})}})[_0xd646[13]](function(){if(_0x53d1x8[_0xd646[25]][_0xd646[28]]&&Array[_0xd646[31]](_0x53d1x8[_0xd646[25]].Actions)&&_0x53d1x8[_0xd646[25]][_0xd646[28]][_0xd646[32]]){_[_0xd646[34]](_0x53d1x8[_0xd646[25]].Actions,function(_0x53d1xf){_0x53d1xf[_0xd646[33]]=_0x53d1x8[_0xd646[22]][_0xd646[21]]});return ToolsAction[_0xd646[35]](_0x53d1x8[_0xd646[25]].Actions,{transaction:_0x53d1xe})}})})[_0xd646[13]](function(){return _0x53d1x9[_0xd646[20]](200)})[_0xd646[10]](function(_0x53d1xb){console[_0xd646[30]](_0x53d1xb);return handleError(_0x53d1x9,_0x53d1xb)})};exports[_0xd646[36]]=function(_0x53d1x8,_0x53d1x9){Trigger[_0xd646[23]](_0x53d1x8[_0xd646[22]][_0xd646[21]])[_0xd646[13]](function(Trigger){if(!Trigger){return _0x53d1x9[_0xd646[20]](404)};Trigger[_0xd646[36]]()[_0xd646[13]](function(){return _0x53d1x9[_0xd646[20]](204)})[_0xd646[10]](function(_0x53d1xb){return handleError(_0x53d1x9,_0x53d1xb)})})[_0xd646[10]](function(_0x53d1xb){return handleError(_0x53d1x9,_0x53d1xb)})};exports[_0xd646[42]]=function(_0x53d1x8,_0x53d1x9){Trigger[_0xd646[36]]({where:{id:_0x53d1x8[_0xd646[14]][_0xd646[21]]},individualHooks:true})[_0xd646[13]](function(){return _0x53d1x9[_0xd646[20]](204)})[_0xd646[10]](function(_0x53d1xb){return handleError(_0x53d1x9,_0x53d1xb)})};function handleError(_0x53d1x9,_0x53d1xb){return _0x53d1x9[_0xd646[12]](500)[_0xd646[11]](_0x53d1xb)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var util = require('util');
+var Util = require('../../config/util');
+var sequelize = require('../../models').sequelize;
+
+var Trigger = require('../../models').Trigger;
+var ToolsCondition = require('../../models').ToolsCondition;
+var ToolsAction = require('../../models').ToolsAction;
+
+// Get list of agents
+exports.index = function(req, res, next) {
+  return Trigger
+    .scope('all')
+    .findAndCountAll(Util.getQuery(req.query))
+    .then(function(result) {
+      res.status(200).send(result);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single Trigger
+exports.show = function(req, res) {
+  Trigger
+    .scope('all')
+    .findById(req.params.id)
+    .then(function(Trigger) {
+      if (!Trigger) {
+        return res.sendStatus(404);
+      }
+      return res.send(Trigger);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new Trigger in the DB.
+exports.create = function(req, res) {
+  Trigger
+    .create(req.body, {
+      include: [{
+        model: ToolsCondition,
+        as: 'All'
+      }, {
+        model: ToolsCondition,
+        as: 'Any'
+      }, {
+        model: ToolsAction,
+        as: 'Actions'
+      }]
+    })
+    .then(function() {
+      return res.sendStatus(201);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Updates an existing Trigger in the DB.
+exports.update = function(req, res, next) {
+  var _trigger;
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  return sequelize.transaction(function(t) {
+      return Trigger
+        .findById(req.params.id)
+        .then(function(trigger) {
+          if (!trigger) {
+            return res.sendStatus(404);
+          }
+          var updated = _.merge(trigger, req.body);
+          return updated
+            .save({
+              transaction: t
+            });
+        })
+        .then(function(trigger) {
+          _trigger = trigger;
+          if (req.body.Any) {
+            return ToolsCondition
+              .destroy({
+                where: {
+                  TriggerAnyId: req.params.id
+                },
+                transaction: t
+              });
+          }
+        })
+        .then(function() {
+          if (req.body.Any && Array.isArray(req.body.Any) && req.body.Any.length) {
+            _.forEach(req.body.Any, function(elem) {
+              elem.TriggerAnyId = req.params.id;
+            });
+            return ToolsCondition
+              .bulkCreate(req.body.Any, {
+                transaction: t
+              });
+          }
+        })
+        .then(function() {
+          if (req.body.All) {
+            return ToolsCondition
+              .destroy({
+                where: {
+                  TriggerAllId: req.params.id
+                },
+                transaction: t
+              });
+          }
+        })
+        .then(function() {
+          if (req.body.All && Array.isArray(req.body.All) && req.body.All.length) {
+            _.forEach(req.body.All, function(elem) {
+              elem.TriggerAllId = req.params.id;
+            });
+            return ToolsCondition
+              .bulkCreate(req.body.All, {
+                transaction: t
+              });
+          }
+        })
+        .then(function() {
+          if (req.body.Actions) {
+            return ToolsAction
+              .destroy({
+                where: {
+                  TriggerId: req.params.id
+                },
+                transaction: t
+              });
+          }
+        })
+        .then(function() {
+          if (req.body.Actions && Array.isArray(req.body.Actions) && req.body.Actions.length) {
+            _.forEach(req.body.Actions, function(elem) {
+              elem.TriggerId = req.params.id;
+            });
+            return ToolsAction
+              .bulkCreate(req.body.Actions, {
+                transaction: t
+              });
+          }
+        });
+    })
+    .then(function() {
+      return res.sendStatus(200);
+    })
+    .catch(function(err) {
+      console.log(err);
+      return handleError(res, err);
+    });
+};
+
+// Deletes a Trigger from the DB.
+exports.destroy = function(req, res) {
+  Trigger
+    .findById(req.params.id)
+    .then(function(Trigger) {
+      if (!Trigger) {
+        return res.sendStatus(404);
+      }
+      Trigger.destroy()
+        .then(function() {
+          return res.sendStatus(204);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+exports.bulkDestroy = function(req, res) {
+  Trigger
+    .destroy({
+      where: {
+        id: req.query.id
+      },
+      individualHooks: true
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index afd9a75..7fe5fa2 100644 (file)
@@ -1 +1,24 @@
-var _0x90c1=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x54\x72\x69\x67\x67\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x74\x72\x69\x67\x67\x65\x72\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x74\x72\x69\x67\x67\x65\x72\x3A\x72\x65\x6D\x6F\x76\x65"];_0x90c1[0];var Trigger=require(_0x90c1[2])[_0x90c1[1]];exports[_0x90c1[3]]=function(_0xcbb4x2){Trigger[_0x90c1[4]](function(_0xcbb4x3){onSave(_0xcbb4x2,_0xcbb4x3)});Trigger[_0x90c1[5]](function(_0xcbb4x3){onRemove(_0xcbb4x2,_0xcbb4x3)})};function onSave(_0xcbb4x2,_0xcbb4x3,_0xcbb4x5){_0xcbb4x2[_0x90c1[7]](_0x90c1[6],_0xcbb4x3)}function onRemove(_0xcbb4x2,_0xcbb4x3,_0xcbb4x5){_0xcbb4x2[_0x90c1[7]](_0x90c1[8],_0xcbb4x3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var Trigger = require('../../models').Trigger;
+
+exports.register = function(socket) {
+  Trigger.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  Trigger.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('trigger:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('trigger:remove', doc);
+}
index 372a658..c88586d 100644 (file)
@@ -1 +1,20 @@
-var _0xb74e=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x73\x68\x6F\x75\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x70\x70","\x73\x75\x70\x65\x72\x74\x65\x73\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x74\x72\x69\x67\x67\x65\x72\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x70\x6F\x6E\x64\x20\x77\x69\x74\x68\x20\x4A\x53\x4F\x4E\x20\x61\x72\x72\x61\x79","\x69\x6E\x73\x74\x61\x6E\x63\x65\x6F\x66","\x62\x65","\x62\x6F\x64\x79","\x65\x6E\x64","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x65\x78\x70\x65\x63\x74","\x2F\x61\x70\x69\x2F\x74\x72\x69\x67\x67\x65\x72\x73","\x67\x65\x74"];_0xb74e[0];var should=require(_0xb74e[1]);var app=require(_0xb74e[2]);var request=require(_0xb74e[3]);describe(_0xb74e[4],function(){it(_0xb74e[5],function(_0x93c7x4){request(app)[_0xb74e[13]](_0xb74e[12])[_0xb74e[11]](200)[_0xb74e[11]](_0xb74e[10],/json/)[_0xb74e[9]](function(_0x93c7x5,_0x93c7x6){if(_0x93c7x5){return _0x93c7x4(_0x93c7x5)};_0x93c7x6[_0xb74e[8]][_0xb74e[1]][_0xb74e[7]][_0xb74e[6]](Array);_0x93c7x4()})})})
\ No newline at end of file
+'use strict';
+
+var should = require('should');
+var app = require('../../app');
+var request = require('supertest');
+
+describe('GET /api/triggers', function() {
+
+  it('should respond with JSON array', function(done) {
+    request(app)
+      .get('/api/triggers')
+      .expect(200)
+      .expect('Content-Type', /json/)
+      .end(function(err, res) {
+        if (err) return done(err);
+        res.body.should.be.instanceof(Array);
+        done();
+      });
+  });
+});
index ae95f2f..ea72fdd 100644 (file)
@@ -1 +1,18 @@
-var _0xc118=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x74\x72\x75\x6E\x6B\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x2F\x76\x61\x6C\x69\x64\x61\x74\x65","\x74\x72\x75\x6E\x6B\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0xc118[0];var express=require(_0xc118[1]);var controller=require(_0xc118[2]);var config=require(_0xc118[3]);var auth=require(_0xc118[4]);var router=express.Router();router[_0xc118[8]](_0xc118[5],auth[_0xc118[6]](),controller[_0xc118[7]]);router[_0xc118[8]](_0xc118[9],auth[_0xc118[6]](),controller[_0xc118[10]]);router[_0xc118[12]](_0xc118[5],auth[_0xc118[6]](),controller[_0xc118[11]]);router[_0xc118[12]](_0xc118[13],auth[_0xc118[6]](),controller[_0xc118[14]]);router[_0xc118[16]](_0xc118[9],auth[_0xc118[6]](),controller[_0xc118[15]]);router[_0xc118[18]](_0xc118[5],auth[_0xc118[6]](),controller[_0xc118[17]]);router[_0xc118[18]](_0xc118[9],auth[_0xc118[6]](),controller[_0xc118[19]]);module[_0xc118[20]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./trunk.controller');
+var config = require('../../config/environment');
+var auth = require('../../auth/auth.service');
+
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), controller.index);
+router.get('/:id', auth.isAuthenticated(), controller.show);
+router.post('/', auth.isAuthenticated(), controller.create);
+router.post('/validate', auth.isAuthenticated(), controller.trunkValidation);
+router.put('/:id', auth.isAuthenticated(), controller.update);
+router.delete('/', auth.isAuthenticated(), controller.bulkDestroy);
+router.delete('/:id', auth.isAuthenticated(), controller.destroy);
+
+module.exports = router;
index e1391e2..eff129a 100644 (file)
@@ -1 +1,160 @@
-var _0xcf98=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x54\x72\x75\x6E\x6B","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x56\x6F\x69\x63\x65\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x75\x74\x69\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x74\x72\x75\x6E\x6B\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E","\x6E\x61\x6D\x65","\x62\x6F\x64\x79","\x66\x69\x6E\x64\x41\x6C\x6C","\x63\x72\x65\x61\x74\x65","\x75\x70\x64\x61\x74\x65","\x6C\x6F\x67","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x6C\x65\x6E\x67\x74\x68","\x56\x6F\x69\x63\x65\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E\x73","\x66\x6F\x72\x45\x61\x63\x68","\x4D\x45\x53\x53\x41\x47\x45\x5F\x54\x52\x55\x4E\x4B\x5F\x4F\x55\x54\x42\x4F\x55\x4E\x44\x5F\x41\x53\x53\x4F\x43\x49\x41\x54\x45\x44"];_0xcf98[0];var _=require(_0xcf98[1]);var Trunk=require(_0xcf98[3])[_0xcf98[2]];var VoiceExtension=require(_0xcf98[3])[_0xcf98[4]];var sequelize=require(_0xcf98[3])[_0xcf98[5]];var util=require(_0xcf98[6]);var Util=require(_0xcf98[7]);exports[_0xcf98[8]]=function(_0x9662x7,_0x9662x8,_0x9662x9){return Trunk[_0xcf98[15]](Util[_0xcf98[14]](_0x9662x7[_0xcf98[13]]))[_0xcf98[12]](function(_0x9662xb){_0x9662x8[_0xcf98[11]](200)[_0xcf98[10]](_0x9662xb)})[_0xcf98[9]](function(_0x9662xa){return handleError(_0x9662x8,_0x9662xa)})};exports[_0xcf98[16]]=function(_0x9662x7,_0x9662x8){return Trunk[_0xcf98[20]](_0x9662x7[_0xcf98[19]][_0xcf98[18]])[_0xcf98[12]](function(_0x9662xc){if(!_0x9662xc){return _0x9662x8[_0xcf98[17]](404)};return _0x9662x8[_0xcf98[10]](_0x9662xc)})[_0xcf98[9]](function(_0x9662xa){return handleError(_0x9662x8,_0x9662xa)})};exports[_0xcf98[21]]=function(_0x9662x7,_0x9662x8){return Trunk[_0xcf98[24]]({where:{name:_0x9662x7[_0xcf98[23]][_0xcf98[22]]}})[_0xcf98[12]](function(_0x9662xd){if(!_0x9662xd){return _0x9662x8[_0xcf98[17]](404)};return _0x9662x8[_0xcf98[10]](_0x9662xd)})[_0xcf98[9]](function(_0x9662xa){return handleError(_0x9662x8,_0x9662xa)})};exports[_0xcf98[25]]=function(_0x9662x7,_0x9662x8){return Trunk[_0xcf98[25]](_0x9662x7[_0xcf98[23]])[_0xcf98[12]](function(_0x9662xc){return _0x9662x8[_0xcf98[11]](201)[_0xcf98[10]](_0x9662xc)})[_0xcf98[9]](function(_0x9662xa){return handleError(_0x9662x8,_0x9662xa)})};exports[_0xcf98[26]]=function(_0x9662x7,_0x9662x8){if(_0x9662x7[_0xcf98[23]][_0xcf98[18]]){delete _0x9662x7[_0xcf98[23]][_0xcf98[18]]};return Trunk[_0xcf98[20]](_0x9662x7[_0xcf98[19]][_0xcf98[18]])[_0xcf98[12]](function(_0x9662xc){if(!_0x9662xc){return _0x9662x8[_0xcf98[17]](404)};var _0x9662xe=_[_0xcf98[28]](_0x9662xc,_0x9662x7[_0xcf98[23]]);return _0x9662xe[_0xcf98[29]]()})[_0xcf98[12]](function(_0x9662xc){return _0x9662x8[_0xcf98[11]](200)[_0xcf98[10]](_0x9662xc)})[_0xcf98[9]](function(_0x9662xa){console[_0xcf98[27]](_0x9662xa);return handleError(_0x9662x8,_0x9662xa)})};exports[_0xcf98[30]]=function(_0x9662x7,_0x9662x8){return Trunk[_0xcf98[20]](_0x9662x7[_0xcf98[19]][_0xcf98[18]])[_0xcf98[12]](function(_0x9662xc){if(!_0x9662xc){return _0x9662x8[_0xcf98[17]](404)};return _0x9662xc[_0xcf98[30]]()})[_0xcf98[12]](function(){return _0x9662x8[_0xcf98[17]](204)})[_0xcf98[9]](function(_0x9662xa){return handleError(_0x9662x8,_0x9662xa)})};exports[_0xcf98[31]]=function(_0x9662x7,_0x9662x8){var _0x9662xf=false;Trunk[_0xcf98[24]]({where:{id:_0x9662x7[_0xcf98[13]][_0xcf98[18]]},include:[{all:true}]})[_0xcf98[12]](function(_0x9662xd){if(!_0x9662xd){return _0x9662x8[_0xcf98[17]](404)};_0x9662xd[_0xcf98[34]](function(_0x9662x10){if(_0x9662x10[_0xcf98[33]][_0xcf98[32]]>0){_0x9662xf=true}});if(_0x9662xf){return _0x9662x8[_0xcf98[11]](500)[_0xcf98[10]]({message:_0xcf98[35]})};Trunk[_0xcf98[30]]({where:{id:_0x9662x7[_0xcf98[13]][_0xcf98[18]]},individualHooks:true})[_0xcf98[12]](function(){return _0x9662x8[_0xcf98[17]](204)})[_0xcf98[9]](function(_0x9662xa){return handleError(_0x9662x8,_0x9662xa)})})[_0xcf98[9]](function(_0x9662xa){return handleError(_0x9662x8,_0x9662xa)})};function handleError(_0x9662x8,_0x9662xa){return _0x9662x8[_0xcf98[11]](500)[_0xcf98[10]](_0x9662xa)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var Trunk = require('../../models').Trunk;
+var VoiceExtension = require('../../models').VoiceExtension;
+var sequelize = require('../../models').sequelize;
+var util = require('util');
+var Util = require('../../config/util');
+
+// Get list of agents
+exports.index = function(req, res, next) {
+  return Trunk
+    .findAndCountAll(Util.getQuery(req.query))
+    .then(function(result) {
+      res.status(200).send(result);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single trunk
+exports.show = function(req, res) {
+  return Trunk
+    .findById(req.params.id)
+    .then(function(trunk) {
+      if (!trunk) {
+        return res.sendStatus(404);
+      }
+      return res.send(trunk);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Validate the existence of a trunk
+exports.trunkValidation = function(req, res) {
+  return Trunk
+    .findAll({
+      where: {
+        name: req.body.name
+      }
+    })
+    .then(function(trunks) {
+      if (!trunks) {
+        return res.sendStatus(404);
+      }
+      return res.send(trunks);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new trunk in the DB.
+exports.create = function(req, res) {
+  return Trunk
+    .create(req.body)
+    .then(function(trunk) {
+      return res.status(201).send(trunk);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+
+  return Trunk
+    .findById(req.params.id)
+    .then(function(trunk) {
+      if (!trunk) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(trunk, req.body);
+      return updated
+        .save();
+    })
+    .then(function(trunk) {
+      return res.status(200).send(trunk);
+    })
+    .catch(function(err) {
+      console.log(err);
+      return handleError(res, err);
+    });
+};
+
+// Deletes a trunk from the DB.
+exports.destroy = function(req, res) {
+  return Trunk
+    .findById(req.params.id)
+    .then(function(trunk) {
+      if (!trunk) {
+        return res.sendStatus(404);
+      }
+      return trunk
+        .destroy();
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes multiple trunk from the DB.
+exports.bulkDestroy = function(req, res) {
+  var associatedTrunks = false;
+
+  Trunk
+    .findAll({
+      where: {
+        id: req.query.id
+      },
+      include: [{
+        all: true
+      }]
+    })
+    .then(function(trunks) {
+      if (!trunks) {
+        return res.sendStatus(404);
+      }
+      trunks.forEach(function(element) {
+        if (element.VoiceExtensions.length > 0) {
+          associatedTrunks = true;
+        }
+      });
+      if (associatedTrunks) {
+        return res.status(500).send({
+          message: 'MESSAGE_TRUNK_OUTBOUND_ASSOCIATED'
+        });
+      }
+      Trunk
+        .destroy({
+          where: {
+            id: req.query.id
+          },
+          individualHooks: true
+        })
+        .then(function() {
+          return res.sendStatus(204);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index 044d5f6..bf99ee7 100644 (file)
@@ -1 +1,30 @@
-var _0xac67=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x54\x72\x75\x6E\x6B","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x6E\x61\x6D\x65","\x63\x68\x61\x6E\x67\x65\x64","\x59\x6F\x75\x20\x63\x61\x6E\x27\x74\x20\x6D\x6F\x64\x69\x66\x79\x20\x61\x20\x74\x72\x75\x6E\x6B\x20\x6E\x61\x6D\x65","\x62\x65\x66\x6F\x72\x65\x55\x70\x64\x61\x74\x65","\x74\x72\x75\x6E\x6B\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x74\x72\x75\x6E\x6B\x3A\x72\x65\x6D\x6F\x76\x65"];_0xac67[0];var Trunk=require(_0xac67[2])[_0xac67[1]];exports[_0xac67[3]]=function(_0x643bx2){Trunk[_0xac67[4]](function(_0x643bx3){onSave(_0x643bx2,_0x643bx3)});Trunk[_0xac67[5]](function(_0x643bx3){onRemove(_0x643bx2,_0x643bx3)});Trunk[_0xac67[9]](function(_0x643bx3){if(_0x643bx3[_0xac67[7]](_0xac67[6])){throw  new Error(_0xac67[8])}})};function onSave(_0x643bx2,_0x643bx3,_0x643bx5){_0x643bx2[_0xac67[11]](_0xac67[10],_0x643bx3)}function onRemove(_0x643bx2,_0x643bx3,_0x643bx5){_0x643bx2[_0xac67[11]](_0xac67[12],_0x643bx3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var Trunk = require('../../models').Trunk;
+
+exports.register = function(socket) {
+  Trunk.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  Trunk.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+
+  Trunk.beforeUpdate(function(doc) {
+    if (doc.changed('name')) {
+      throw new Error("You can't modify a trunk name");
+    }
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('trunk:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('trunk:remove', doc);
+}
index b06718f..44410d3 100644 (file)
@@ -1 +1,12 @@
-var _0xc40d=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x75\x70\x64\x61\x74\x65\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x52\x6F\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x70\x75\x6C\x6C","\x70\x75\x6C\x6C","\x65\x78\x70\x6F\x72\x74\x73"];_0xc40d[0];var express=require(_0xc40d[1]);var controller=require(_0xc40d[2]);var auth=require(_0xc40d[3]);var router=express.Router();router[_0xc40d[9]](_0xc40d[4],auth[_0xc40d[5]](),auth[_0xc40d[7]](_0xc40d[6]),controller[_0xc40d[8]]);router[_0xc40d[9]](_0xc40d[10],auth[_0xc40d[5]](),auth[_0xc40d[7]](_0xc40d[6]),controller[_0xc40d[11]]);module[_0xc40d[12]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./update.controller');
+var auth = require('../../auth/auth.service');
+
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), auth.hasRole('admin'), controller.index);
+router.get('/pull', auth.isAuthenticated(), auth.hasRole('admin'), controller.pull);
+
+module.exports = router;
index 14554a0..f882d67 100644 (file)
@@ -1 +1,50 @@
-var _0xcada=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x70\x61\x74\x68","\x6D\x6F\x6D\x65\x6E\x74","\x62\x6C\x75\x65\x62\x69\x72\x64","\x65\x78\x65\x63","\x63\x68\x69\x6C\x64\x5F\x70\x72\x6F\x63\x65\x73\x73","\x70\x72\x6F\x6D\x69\x73\x69\x66\x79","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x72\x6F\x6F\x74","\x6A\x6F\x69\x6E","\x73\x69\x6D\x70\x6C\x65\x2D\x67\x69\x74","\x69\x6E\x64\x65\x78","\x6C\x65\x6E\x67\x74\x68","\x61\x6C\x6C","\x7C","\x73\x70\x6C\x69\x74","\x6D\x65\x73\x73\x61\x67\x65","\x75\x6E\x6B\x6E\x6F\x77\x6E","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x66\x6F\x72\x6D\x61\x74","\x64\x61\x74\x65","\x70\x75\x73\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6C\x6F\x67","\x70\x75\x6C\x6C","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x67\x69\x74\x20\x70\x75\x6C\x6C"];_0xcada[0];var _=require(_0xcada[1]);var path=require(_0xcada[2]);var moment=require(_0xcada[3]);var Promise=require(_0xcada[4]);var exec=Promise[_0xcada[7]](require(_0xcada[6])[_0xcada[5]]);var config=require(_0xcada[8]);var Git=require(_0xcada[11])(path[_0xcada[10]](config[_0xcada[9]]));exports[_0xcada[12]]=function(_0xccfbx8,_0xccfbx9){return Git[_0xcada[25]](function(_0xccfbxa,_0xccfbxb){if(_0xccfbxa){return handleError(_0xccfbx9,_0xccfbxa)};var _0xccfbxc=[];for(var _0xccfbxd=0;_0xccfbxd<10&&_0xccfbxd<_0xccfbxb[_0xcada[14]][_0xcada[13]];_0xccfbxd++){_0xccfbxc[_0xcada[22]]({version:_0xccfbxb[_0xcada[14]][_0xccfbxd][_0xcada[17]][_0xcada[16]](_0xcada[15])[1]||_0xcada[18],message:_0xccfbxb[_0xcada[14]][_0xccfbxd][_0xcada[17]][_0xcada[16]](_0xcada[15])[0],createdAt:moment(_0xccfbxb[_0xcada[14]][_0xccfbxd][_0xcada[21]])[_0xcada[20]](_0xcada[19])})};return _0xccfbx9[_0xcada[24]](200)[_0xcada[23]]({rows:_0xccfbxc,count:_0xccfbxc[_0xcada[13]]})})};exports[_0xcada[26]]=function(_0xccfbx8,_0xccfbx9){return exec(_0xcada[31])[_0xcada[30]](function(){return _0xccfbx9[_0xcada[29]](201)[_0xcada[23]]()})[_0xcada[28]](function(_0xccfbxa){console[_0xcada[27]](_0xccfbxa)})};function handleError(_0xccfbx9,_0xccfbxa){return _0xccfbx9[_0xcada[24]](500)[_0xcada[23]](_0xccfbxa)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var path = require('path');
+var moment = require('moment');
+var Promise = require('bluebird');
+var exec = Promise.promisify(require('child_process').exec);
+
+var config = require('../../config/environment');
+
+var Git = require('simple-git')(path.join(config.root));
+
+// Get list of updates
+exports.index = function(req, res) {
+  return Git
+    .log(function(err, logs) {
+      if (err) {
+        return handleError(res, err);
+      }
+
+      var rows = [];
+      for (var i = 0; i < 10 && i < logs.all.length; i++) {
+        rows.push({
+          version: logs.all[i].message.split('|')[1] || 'unknown',
+          message: logs.all[i].message.split('|')[0],
+          createdAt: moment(logs.all[i].date).format("YYYY-MM-DD HH:mm:ss")
+        });
+      }
+
+      return res.status(200).send({
+        rows: rows,
+        count: rows.length
+      });
+    });
+};
+
+// Get a single update
+exports.pull = function(req, res) {
+  return exec('git pull')
+    .then(function() {
+      return res.sendStatus(201).send();
+    })
+    .catch(function(err) {
+      console.error(err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index 0c2ab0e..3d8b8b6 100644 (file)
@@ -1 +1,26 @@
-var _0xc8e4=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x75\x73\x65\x72\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x6D\x65","\x6D\x65","\x2F\x61\x6C\x6C","\x67\x65\x74\x55\x73\x65\x72\x73","\x2F\x61\x76\x61\x74\x61\x72\x2F\x3A\x66\x69\x6C\x65\x6E\x61\x6D\x65","\x67\x65\x74\x41\x76\x61\x74\x61\x72","\x2F\x3A\x69\x64\x2F\x61\x76\x61\x74\x61\x72","\x67\x65\x74\x41\x76\x61\x74\x61\x72\x42\x79\x49\x64","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x2F\x76\x61\x6C\x69\x64\x61\x74\x65\x2F\x3A\x66\x69\x65\x6C\x64","\x75\x73\x65\x72\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E","\x70\x6F\x73\x74","\x2F\x70\x61\x73\x73\x77\x6F\x72\x64","\x63\x68\x61\x6E\x67\x65\x50\x61\x73\x73\x77\x6F\x72\x64","\x70\x75\x74","\x2F\x3A\x69\x64\x2F\x70\x61\x73\x73\x77\x6F\x72\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x52\x6F\x6C\x65","\x72\x65\x73\x65\x74\x50\x61\x73\x73\x77\x6F\x72\x64","\x75\x70\x64\x61\x74\x65","\x69\x73\x56\x61\x6C\x69\x64\x44\x61\x74\x65","\x69\x73\x55\x73\x65\x72\x73\x4C\x69\x6D\x69\x74","\x63\x72\x65\x61\x74\x65","\x63\x68\x61\x6E\x67\x65\x41\x76\x61\x74\x61\x72","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0xc8e4[0];var express=require(_0xc8e4[1]);var controller=require(_0xc8e4[2]);var config=require(_0xc8e4[3]);var auth=require(_0xc8e4[4]);var license=require(_0xc8e4[5]);var router=express.Router();router[_0xc8e4[9]](_0xc8e4[6],auth[_0xc8e4[7]](),controller[_0xc8e4[8]]);router[_0xc8e4[9]](_0xc8e4[10],auth[_0xc8e4[7]](),controller[_0xc8e4[11]]);router[_0xc8e4[9]](_0xc8e4[12],auth[_0xc8e4[7]](),controller[_0xc8e4[13]]);router[_0xc8e4[9]](_0xc8e4[14],controller[_0xc8e4[15]]);router[_0xc8e4[9]](_0xc8e4[16],controller[_0xc8e4[17]]);router[_0xc8e4[9]](_0xc8e4[18],auth[_0xc8e4[7]](),controller[_0xc8e4[19]]);router[_0xc8e4[22]](_0xc8e4[20],auth[_0xc8e4[7]](),controller[_0xc8e4[21]]);router[_0xc8e4[25]](_0xc8e4[23],auth[_0xc8e4[7]](),controller[_0xc8e4[24]]);router[_0xc8e4[25]](_0xc8e4[26],auth[_0xc8e4[7]](),auth[_0xc8e4[28]](_0xc8e4[27]),controller[_0xc8e4[29]]);router[_0xc8e4[25]](_0xc8e4[18],auth[_0xc8e4[7]](),controller[_0xc8e4[30]]);router[_0xc8e4[22]](_0xc8e4[6],auth[_0xc8e4[7]](),license[_0xc8e4[31]](),license[_0xc8e4[32]](),controller[_0xc8e4[33]]);router[_0xc8e4[22]](_0xc8e4[16],auth[_0xc8e4[7]](),controller[_0xc8e4[34]]);router[_0xc8e4[36]](_0xc8e4[6],auth[_0xc8e4[7]](),controller[_0xc8e4[35]]);router[_0xc8e4[36]](_0xc8e4[18],auth[_0xc8e4[7]](),controller[_0xc8e4[37]]);module[_0xc8e4[38]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./user.controller');
+var config = require('../../config/environment');
+var auth = require('../../auth/auth.service');
+var license = require('../../config/license/license.service');
+
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), controller.index);
+router.get('/me', auth.isAuthenticated(), controller.me);
+router.get('/all', auth.isAuthenticated(), controller.getUsers);
+router.get('/avatar/:filename', controller.getAvatar);
+router.get('/:id/avatar', controller.getAvatarById);
+router.get('/:id', auth.isAuthenticated(), controller.show);
+router.post('/validate/:field', auth.isAuthenticated(), controller.userValidation);
+router.put('/password', auth.isAuthenticated(), controller.changePassword);
+router.put('/:id/password', auth.isAuthenticated(), auth.hasRole('admin'), controller.resetPassword);
+router.put('/:id', auth.isAuthenticated(), controller.update);
+router.post('/', auth.isAuthenticated(), license.isValidDate(), license.isUsersLimit(), controller.create);
+router.post('/:id/avatar', auth.isAuthenticated(), controller.changeAvatar);
+router.delete('/', auth.isAuthenticated(), controller.bulkDestroy);
+router.delete('/:id', auth.isAuthenticated(), controller.destroy);
+
+module.exports = router;
index 15732d0..2e46525 100644 (file)
@@ -1 +1,369 @@
-var _0x8bb7=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x55\x73\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x4D\x6F\x64\x75\x6C\x65","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x70\x61\x73\x73\x70\x6F\x72\x74","\x6D\x6F\x6D\x65\x6E\x74","\x6A\x73\x6F\x6E\x77\x65\x62\x74\x6F\x6B\x65\x6E","\x75\x70\x6C\x6F\x61\x64\x2D\x66\x69\x6C\x65","\x70\x61\x74\x68","\x66\x73","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x73\x69\x6D\x70\x6C\x65\x2D\x72\x61\x6E\x64\x6F\x6D","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x75\x73\x65\x72","\x73\x63\x6F\x70\x65","\x67\x65\x74\x55\x73\x65\x72\x73","\x61\x64\x6D\x69\x6E","\x66\x69\x6E\x64\x41\x6C\x6C","\x63\x72\x65\x61\x74\x65","\x68\x61\x6E\x64\x6C\x65\x55\x6E\x69\x71\x75\x65\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74\x45\x72\x72\x6F\x72","\x65\x72\x72\x6F\x72\x4D\x61\x6E\x61\x67\x65\x72","\x62\x6F\x64\x79","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x64\x65\x73\x74\x72\x6F\x79","\x6E\x61\x6D\x65","\x68\x61\x6E\x64\x6C\x65\x46\x6F\x72\x65\x69\x67\x6E\x4B\x65\x79\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74\x45\x72\x72\x6F\x72","\x63\x68\x61\x6E\x67\x65\x50\x61\x73\x73\x77\x6F\x72\x64","\x6F\x6C\x64\x50\x61\x73\x73\x77\x6F\x72\x64","\x6E\x65\x77\x50\x61\x73\x73\x77\x6F\x72\x64","\x61\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65","\x70\x61\x73\x73\x77\x6F\x72\x64","\x73\x61\x76\x65","\x72\x65\x73\x65\x74\x50\x61\x73\x73\x77\x6F\x72\x64","\x63\x68\x61\x6E\x67\x65\x41\x76\x61\x74\x61\x72","\x72\x6F\x6F\x74","\x73\x65\x72\x76\x65\x72","\x66\x69\x6C\x65\x73","\x69\x6D\x61\x67\x65\x73","\x6A\x6F\x69\x6E","\x66\x69\x6C\x65\x6E\x61\x6D\x65","\x65\x78\x74\x6E\x61\x6D\x65","\x4D\x61\x78\x20\x6E\x75\x6D\x62\x65\x72\x20\x6F\x66\x20\x66\x69\x6C\x65\x73\x20\x75\x70\x6C\x6F\x61\x64\x20\x65\x78\x63\x65\x65\x64\x65\x64","\x4F\x6E\x6C\x79\x20\x6A\x70\x65\x67\x20\x61\x6E\x64\x20\x70\x6E\x67\x20\x66\x6F\x72\x6D\x61\x74\x20\x61\x63\x63\x65\x70\x74\x65\x64","\x49\x6E\x76\x61\x6C\x69\x64\x20\x72\x65\x71\x75\x65\x73\x74","\x65\x6E\x64","\x66\x69\x6C\x65","\x75\x70\x64\x61\x74\x65","\x6F\x6E","\x65\x72\x72\x6F\x72","\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x20\x55\x70\x6C\x6F\x61\x64\x20\x65\x72\x72\x6F\x72\x20\x3A","\x6C\x6F\x67","\x70\x61\x72\x73\x65","\x6D\x65","\x66\x75\x6C\x6C\x6E\x61\x6D\x65","\x65\x6D\x61\x69\x6C","\x72\x6F\x6C\x65","\x75\x73\x65\x72\x70\x69\x63","\x66\x69\x6E\x64\x4F\x6E\x65","\x67\x65\x74\x41\x76\x61\x74\x61\x72","\x75\x73\x65\x72\x70\x69\x63\x2E\x70\x6E\x67","\x73\x65\x6E\x64\x46\x69\x6C\x65","\x65\x78\x69\x73\x74\x73","\x67\x65\x74\x41\x76\x61\x74\x61\x72\x42\x79\x49\x64","\x76\x69\x73\x69\x74\x6F\x72","\x63\x75\x73\x74\x6F\x6D\x65\x72\x2E\x70\x6E\x67","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x75\x73\x65\x72\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E","\x66\x69\x65\x6C\x64","\x76\x61\x6C\x75\x65","\x63\x6F\x75\x6E\x74","\x61\x75\x74\x68\x43\x61\x6C\x6C\x62\x61\x63\x6B","\x2F","\x72\x65\x64\x69\x72\x65\x63\x74"];_0x8bb7[0];var User=require(_0x8bb7[2])[_0x8bb7[1]];var Module=require(_0x8bb7[2])[_0x8bb7[3]];var sequelize=require(_0x8bb7[2])[_0x8bb7[4]];var config=require(_0x8bb7[5]);var Util=require(_0x8bb7[6]);var passport=require(_0x8bb7[7]);var moment=require(_0x8bb7[8]);var jwt=require(_0x8bb7[9]);var uploadFile=require(_0x8bb7[10]);var path=require(_0x8bb7[11]);var fs=require(_0x8bb7[12]);var _=require(_0x8bb7[13]);var util=require(_0x8bb7[14]);var sr=require(_0x8bb7[15]);exports[_0x8bb7[16]]=function(_0x5cb9xf,_0x5cb9x10,_0x5cb9x11){return User[_0x8bb7[25]](_0x8bb7[24])[_0x8bb7[23]](Util[_0x8bb7[22]](_0x5cb9xf[_0x8bb7[21]]))[_0x8bb7[20]](function(_0x5cb9x13){_0x5cb9x10[_0x8bb7[19]](200)[_0x8bb7[18]](_0x5cb9x13)})[_0x8bb7[17]](function(_0x5cb9x12){return handleError(_0x5cb9x10,_0x5cb9x12)})};exports[_0x8bb7[26]]=function(_0x5cb9xf,_0x5cb9x10,_0x5cb9x11){return User[_0x8bb7[28]]({where:{role:{$in:[_0x8bb7[27],_0x8bb7[24],_0x8bb7[24]]}}})[_0x8bb7[20]](function(_0x5cb9x14){return _0x5cb9x10[_0x8bb7[19]](200)[_0x8bb7[18]](_0x5cb9x14)})[_0x8bb7[17]](function(_0x5cb9x12){return handleError(_0x5cb9x10,_0x5cb9x12)})};exports[_0x8bb7[29]]=function(_0x5cb9xf,_0x5cb9x10,_0x5cb9x11){return User[_0x8bb7[29]](_0x5cb9xf[_0x8bb7[32]])[_0x8bb7[20]](function(_0x5cb9x15){return _0x5cb9x10[_0x8bb7[19]](201)[_0x8bb7[18]](_0x5cb9x15)})[_0x8bb7[17]](sequelize.UniqueConstraintError,function(_0x5cb9x12){return Util[_0x8bb7[31]][_0x8bb7[30]](_0x5cb9x10,_0x5cb9x12)})[_0x8bb7[17]](function(_0x5cb9x12){return handleError(_0x5cb9x10,_0x5cb9x12)})};exports[_0x8bb7[33]]=function(_0x5cb9xf,_0x5cb9x10,_0x5cb9x11){return User[_0x8bb7[37]](_0x5cb9xf[_0x8bb7[36]][_0x8bb7[35]])[_0x8bb7[20]](function(_0x5cb9x15){if(!_0x5cb9x15){return _0x5cb9x10[_0x8bb7[34]](404)};return _0x5cb9x10[_0x8bb7[19]](200)[_0x8bb7[18]](_0x5cb9x15)})[_0x8bb7[17]](function(_0x5cb9x12){return handleError(_0x5cb9x10,_0x5cb9x12)})};exports[_0x8bb7[38]]=function(_0x5cb9xf,_0x5cb9x10,_0x5cb9x11){var _0x5cb9x16=_0x5cb9xf[_0x8bb7[36]][_0x8bb7[35]];var _0x5cb9x17;return User[_0x8bb7[37]](_0x5cb9x16)[_0x8bb7[20]](function(_0x5cb9x15){_0x5cb9x17=_0x5cb9x15;if(!_0x5cb9x15){return _0x5cb9x10[_0x8bb7[34]](404)};return _0x5cb9x15[_0x8bb7[38]]()})[_0x8bb7[20]](function(_0x5cb9x15){return _0x5cb9x10[_0x8bb7[19]](200)[_0x8bb7[18]](_0x5cb9x15)})[_0x8bb7[17]](sequelize.ForeignKeyConstraintError,function(_0x5cb9x12){return Util[_0x8bb7[31]][_0x8bb7[40]](_0x5cb9x10,_0x8bb7[24],_0x5cb9x17[_0x8bb7[39]],_0x5cb9x12)})[_0x8bb7[17]](function(_0x5cb9x12){return handleError(_0x5cb9x10,_0x5cb9x12)})};exports[_0x8bb7[41]]=function(_0x5cb9xf,_0x5cb9x10,_0x5cb9x11){var _0x5cb9x16=_0x5cb9xf[_0x8bb7[24]][_0x8bb7[35]];var _0x5cb9x18=String(_0x5cb9xf[_0x8bb7[32]][_0x8bb7[42]]);var _0x5cb9x19=String(_0x5cb9xf[_0x8bb7[32]][_0x8bb7[43]]);return User[_0x8bb7[37]](_0x5cb9x16)[_0x8bb7[20]](function(_0x5cb9x15){if(_0x5cb9x15[_0x8bb7[44]](_0x5cb9x18)){_0x5cb9x15[_0x8bb7[45]]=_0x5cb9x19;_0x5cb9x15[_0x8bb7[46]]()[_0x8bb7[20]](function(){return _0x5cb9x10[_0x8bb7[34]](200)})[_0x8bb7[17]](function(_0x5cb9x12){return handleError(_0x5cb9x10,_0x5cb9x12)})}else {return _0x5cb9x10[_0x8bb7[34]](403)}})};exports[_0x8bb7[47]]=function(_0x5cb9xf,_0x5cb9x10,_0x5cb9x11){var _0x5cb9x19=String(_0x5cb9xf[_0x8bb7[32]][_0x8bb7[43]]);return User[_0x8bb7[37]](_0x5cb9xf[_0x8bb7[36]][_0x8bb7[35]])[_0x8bb7[20]](function(_0x5cb9x15){_0x5cb9x15[_0x8bb7[45]]=_0x5cb9x19;return _0x5cb9x15[_0x8bb7[46]]()})[_0x8bb7[20]](function(){return _0x5cb9x10[_0x8bb7[34]](200)})[_0x8bb7[17]](function(_0x5cb9x12){return handleError(_0x5cb9x10,_0x5cb9x12)})};exports[_0x8bb7[48]]=function(_0x5cb9xf,_0x5cb9x10,_0x5cb9x11){var _0x5cb9x1a= new uploadFile({dest:path[_0x8bb7[53]](config[_0x8bb7[49]],_0x8bb7[50],_0x8bb7[51],_0x8bb7[52]),maxNumberOfFiles:1,minNumberOfFiles:0,acceptFileTypes:/(\.|\/)(jpeg|png)$/i,rename:function(_0x5cb9x1b,_0x5cb9x1c){return sr()+path[_0x8bb7[55]](_0x5cb9x1c[_0x8bb7[54]])},messages:{maxNumberOfFiles:_0x8bb7[56],acceptFileTypes:_0x8bb7[57],invalidRequest:_0x8bb7[58]}});_0x5cb9x1a[_0x8bb7[62]](_0x8bb7[59],function(_0x5cb9x1d,_0x5cb9x1e){if(!_0x5cb9x1e[_0x8bb7[60]][_0x8bb7[54]]){return _0x5cb9x10[_0x8bb7[19]](500)[_0x8bb7[18]](_0x5cb9x1a)};return User[_0x8bb7[37]](_0x5cb9xf[_0x8bb7[36]][_0x8bb7[35]])[_0x8bb7[20]](function(_0x5cb9x15){if(!_0x5cb9x15){return _0x5cb9x10[_0x8bb7[34]](404)};return _0x5cb9x15[_0x8bb7[61]]({userpic:_0x5cb9x1e[_0x8bb7[60]][_0x8bb7[54]]})})[_0x8bb7[20]](function(_0x5cb9x15){return _0x5cb9x10[_0x8bb7[19]](200)[_0x8bb7[18]](_0x5cb9x15)})[_0x8bb7[17]](function(_0x5cb9x12){return handleError(_0x5cb9x10,_0x5cb9x12)})});_0x5cb9x1a[_0x8bb7[62]](_0x8bb7[63],function(_0x5cb9x12){console[_0x8bb7[65]](_0x8bb7[64],_0x5cb9x12);return handleError(_0x5cb9x10,_0x5cb9x12)});_0x5cb9x1a[_0x8bb7[66]](_0x5cb9xf)};exports[_0x8bb7[67]]=function(_0x5cb9xf,_0x5cb9x10,_0x5cb9x11){var _0x5cb9x16=_0x5cb9xf[_0x8bb7[24]][_0x8bb7[35]];return User[_0x8bb7[72]]({where:{id:_0x5cb9x16},attributes:[_0x8bb7[35],_0x8bb7[68],_0x8bb7[39],_0x8bb7[69],_0x8bb7[70],_0x8bb7[71]],include:[Module]})[_0x8bb7[20]](function(_0x5cb9x15){if(!_0x5cb9x15){return _0x5cb9x10[_0x8bb7[34]](401)};return _0x5cb9x10[_0x8bb7[19]](200)[_0x8bb7[18]](_0x5cb9x15)})[_0x8bb7[17]](function(_0x5cb9x12){return handleError(_0x5cb9x10,_0x5cb9x12)})};exports[_0x8bb7[61]]=function(_0x5cb9xf,_0x5cb9x10,_0x5cb9x11){var _0x5cb9x16=_0x5cb9xf[_0x8bb7[24]][_0x8bb7[35]];delete _0x5cb9xf[_0x8bb7[32]][_0x8bb7[45]];return User[_0x8bb7[37]](_0x5cb9xf[_0x8bb7[36]][_0x8bb7[35]])[_0x8bb7[20]](function(_0x5cb9x15){if(!_0x5cb9x15){return _0x5cb9x10[_0x8bb7[34]](500)};return _0x5cb9x15[_0x8bb7[61]](_0x5cb9xf[_0x8bb7[32]])})[_0x8bb7[20]](function(_0x5cb9x15){return _0x5cb9x10[_0x8bb7[19]](200)[_0x8bb7[18]](_0x5cb9x15)})[_0x8bb7[17]](function(_0x5cb9x12){return handleError(_0x5cb9x10,_0x5cb9x12)})};exports[_0x8bb7[73]]=function(_0x5cb9xf,_0x5cb9x10,_0x5cb9x11){var _0x5cb9x1f=path[_0x8bb7[53]](config[_0x8bb7[49]],_0x8bb7[50],_0x8bb7[51],_0x8bb7[52],_0x5cb9xf[_0x8bb7[36]][_0x8bb7[54]]);fs[_0x8bb7[76]](_0x5cb9x1f,function(_0x5cb9x20){if(!_0x5cb9x20){_0x5cb9x1f=path[_0x8bb7[53]](config[_0x8bb7[49]],_0x8bb7[50],_0x8bb7[51],_0x8bb7[52],_0x8bb7[74])};return _0x5cb9x10[_0x8bb7[75]](_0x5cb9x1f)})};exports[_0x8bb7[77]]=function(_0x5cb9xf,_0x5cb9x10,_0x5cb9x11){if(_0x5cb9xf[_0x8bb7[36]][_0x8bb7[35]]===_0x8bb7[78]){var _0x5cb9x1f=path[_0x8bb7[53]](config[_0x8bb7[49]],_0x8bb7[50],_0x8bb7[51],_0x8bb7[52],_0x8bb7[79]);fs[_0x8bb7[76]](_0x5cb9x1f,function(_0x5cb9x20){return _0x5cb9x10[_0x8bb7[75]](_0x5cb9x1f)})}else {return User[_0x8bb7[37]](_0x5cb9xf[_0x8bb7[36]][_0x8bb7[35]])[_0x8bb7[20]](function(_0x5cb9x15){if(_0x5cb9x15){var _0x5cb9x1f=path[_0x8bb7[53]](config[_0x8bb7[49]],_0x8bb7[50],_0x8bb7[51],_0x8bb7[52],_0x5cb9x15[_0x8bb7[71]]?_0x5cb9x15[_0x8bb7[71]]:_0x8bb7[74]);fs[_0x8bb7[76]](_0x5cb9x1f,function(_0x5cb9x20){if(!_0x5cb9x20){_0x5cb9x1f=path[_0x8bb7[53]](config[_0x8bb7[49]],_0x8bb7[50],_0x8bb7[51],_0x8bb7[52],_0x8bb7[74])};return _0x5cb9x10[_0x8bb7[75]](_0x5cb9x1f)})}else {return _0x5cb9x10[_0x8bb7[34]](500)}})[_0x8bb7[17]](function(_0x5cb9x12){return handleError(_0x5cb9x10,_0x5cb9x12)})}};exports[_0x8bb7[80]]=function(_0x5cb9xf,_0x5cb9x10){return User[_0x8bb7[38]]({where:{id:_0x5cb9xf[_0x8bb7[21]][_0x8bb7[35]]},individualHooks:true})[_0x8bb7[20]](function(){return _0x5cb9x10[_0x8bb7[34]](204)})[_0x8bb7[17]](function(_0x5cb9x12){return handleError(_0x5cb9x10,_0x5cb9x12)})};exports[_0x8bb7[81]]=function(_0x5cb9xf,_0x5cb9x10){var _0x5cb9x21={};_0x5cb9x21[_0x5cb9xf[_0x8bb7[36]][_0x8bb7[82]]]=_0x5cb9xf[_0x8bb7[32]][_0x8bb7[83]];return User[_0x8bb7[23]]({where:_0x5cb9x21})[_0x8bb7[20]](function(_0x5cb9x13){if(_0x5cb9x13[_0x8bb7[84]]){return _0x5cb9x10[_0x8bb7[19]](200)[_0x8bb7[18]]({isValid:false,value:_0x5cb9xf[_0x8bb7[32]][_0x8bb7[83]]})};return _0x5cb9x10[_0x8bb7[19]](200)[_0x8bb7[18]]({isValid:true,value:_0x5cb9xf[_0x8bb7[32]][_0x8bb7[83]]})})[_0x8bb7[17]](function(_0x5cb9x12){return handleError(_0x5cb9x10,_0x5cb9x12)})};exports[_0x8bb7[85]]=function(_0x5cb9xf,_0x5cb9x10,_0x5cb9x11){_0x5cb9x10[_0x8bb7[87]](_0x8bb7[86])};function handleError(_0x5cb9x10,_0x5cb9x12){return _0x5cb9x10[_0x8bb7[19]](500)[_0x8bb7[18]](_0x5cb9x12)}
\ No newline at end of file
+'use strict';
+
+var User = require('../../models').User;
+var Module = require('../../models').Module;
+var sequelize = require('../../models').sequelize;
+
+var config = require('../../config/environment');
+var Util = require('../../config/util');
+
+var passport = require('passport');
+var moment = require('moment');
+var jwt = require('jsonwebtoken');
+var uploadFile = require('upload-file');
+var path = require('path');
+var fs = require('fs');
+var _ = require('lodash');
+var util = require('util');
+var sr = require('simple-random');
+
+/**
+ * Get list of admin/user
+ */
+exports.index = function(req, res, next) {
+  return User
+    .scope('user')
+    .findAndCountAll(Util.getQuery(req.query))
+    .then(function(result) {
+      res.status(200).send(result);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+/**
+ * Get list of admin/user/user
+ */
+exports.getUsers = function(req, res, next) {
+  return User
+    .findAll({
+      where: {
+        role: {
+          $in: ['admin', 'user', 'user']
+        }
+      }
+    })
+    .then(function(users) {
+      return res.status(200).send(users);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+/**
+ * Creates a new user
+ */
+exports.create = function(req, res, next) {
+  return User
+    .create(req.body)
+    .then(function(user) {
+      return res.status(201).send(user);
+    })
+    .catch(sequelize.UniqueConstraintError, function(err) {
+      return Util.errorManager.handleUniqueConstraintError(res, err);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+/**
+ * Get a single user
+ */
+exports.show = function(req, res, next) {
+  return User
+    .findById(req.params.id)
+    .then(function(user) {
+      if (!user) {
+        return res.sendStatus(404);
+      }
+
+      return res.status(200).send(user);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+/**
+ * Deletes a user
+ */
+exports.destroy = function(req, res, next) {
+  var userId = req.params.id;
+  var _user;
+
+  return User
+    .findById(userId)
+    .then(function(user) {
+      _user = user;
+      if (!user) {
+        return res.sendStatus(404);
+      }
+      return user
+        .destroy();
+    })
+    .then(function(user) {
+      return res.status(200).send(user);
+    })
+    .catch(sequelize.ForeignKeyConstraintError, function(err) {
+      return Util.errorManager.handleForeignKeyConstraintError(res, 'user', _user.name, err);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+/**
+ * Change a user password
+ */
+exports.changePassword = function(req, res, next) {
+  var userId = req.user.id;
+  var oldPass = String(req.body.oldPassword);
+  var newPass = String(req.body.newPassword);
+
+  return User
+    .findById(userId)
+    .then(function(user) {
+      if (user.authenticate(oldPass)) {
+        user.password = newPass;
+        user.save()
+          .then(function() {
+            return res.sendStatus(200);
+          })
+          .catch(function(err) {
+            return handleError(res, err);
+          });
+      } else {
+        return res.sendStatus(403);
+      }
+    });
+};
+
+/**
+ * Change a user password by admin
+ */
+exports.resetPassword = function(req, res, next) {
+  var newPass = String(req.body.newPassword);
+  return User
+    .findById(req.params.id)
+    .then(function(user) {
+      user.password = newPass;
+      return user
+        .save();
+    })
+    .then(function() {
+      return res.sendStatus(200);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+/**
+ * Change the avatar of the user
+ */
+exports.changeAvatar = function(req, res, next) {
+
+  var upload = new uploadFile({
+    dest: path.join(config.root, 'server', 'files', 'images'),
+    maxNumberOfFiles: 1,
+    minNumberOfFiles: 0,
+    acceptFileTypes: /(\.|\/)(jpeg|png)$/i,
+    rename: function(name, file) {
+      return sr() + path.extname(file.filename);
+    },
+    messages: {
+      maxNumberOfFiles: "Max number of files upload exceeded",
+      acceptFileTypes: "Only jpeg and png format accepted",
+      invalidRequest: "Invalid request"
+    }
+  });
+
+  upload.on('end', function(fields, files) {
+    if (!files.file.filename) {
+      return res.status(500).send(upload);
+    }
+
+    return User
+      .findById(req.params.id)
+      .then(function(user) {
+        if (!user) {
+          return res.sendStatus(404);
+        }
+
+        return user
+          .update({
+            userpic: files.file.filename
+          });
+      })
+      .then(function(user) {
+        return res.status(200).send(user);
+      })
+      .catch(function(err) {
+        return handleError(res, err);
+      });
+  });
+
+  upload.on('error', function(err) {
+    console.log('********** Upload error :', err)
+    return handleError(res, err);
+  });
+
+  upload.parse(req);
+};
+
+
+/**
+ * Get my info
+ */
+exports.me = function(req, res, next) {
+  var userId = req.user.id;
+
+  return User
+    .findOne({
+      where: {
+        id: userId
+      },
+      attributes: ['id', 'fullname', 'name', 'email', 'role', 'userpic'],
+      include: [Module]
+    })
+    .then(function(user) {
+      if (!user) {
+        return res.sendStatus(401);
+      }
+      return res.status(200).send(user);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+/**
+ * Update my user
+ */
+exports.update = function(req, res, next) {
+  var userId = req.user.id;
+  delete req.body.password;
+
+  return User
+    .findById(req.params.id)
+    .then(function(user) {
+      if (!user) {
+        return res.sendStatus(500);
+      }
+      return user
+        .update(req.body);
+    })
+    .then(function(user) {
+      return res.status(200).send(user);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+/**
+ * Get my avatar
+ */
+exports.getAvatar = function(req, res, next) {
+  var imgPath = path.join(config.root, 'server', 'files', 'images', req.params.filename);
+
+  fs.exists(imgPath, function(exists) {
+    if (!exists) {
+      imgPath = path.join(config.root, 'server', 'files', 'images', 'userpic.png');
+    }
+
+    return res.sendFile(imgPath);
+  });
+};
+
+/**
+ * Get my avatar by id
+ */
+exports.getAvatarById = function(req, res, next) {
+  if (req.params.id === 'visitor') {
+    var imgPath = path.join(config.root, 'server', 'files', 'images', 'customer.png');
+
+    fs.exists(imgPath, function(exists) {
+      return res.sendFile(imgPath);
+    });
+
+  } else {
+    return User
+      .findById(req.params.id)
+      .then(function(user) {
+        if (user) {
+          var imgPath = path.join(config.root, 'server', 'files', 'images', user.userpic ? user.userpic : 'userpic.png');
+
+          fs.exists(imgPath, function(exists) {
+            if (!exists) {
+              imgPath = path.join(config.root, 'server', 'files', 'images', 'userpic.png');
+            }
+
+            return res.sendFile(imgPath);
+          });
+        } else {
+          return res.sendStatus(500);
+        }
+      })
+      .catch(function(err) {
+        return handleError(res, err);
+      });
+  }
+};
+
+// Deletes a user from the DB.
+exports.bulkDestroy = function(req, res) {
+  return User
+    .destroy({
+      where: {
+        id: req.query.id
+      },
+      individualHooks: true
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+exports.userValidation = function(req, res) {
+  var where = {};
+  where[req.params.field] = req.body.value;
+
+  return User
+    .findAndCountAll({
+      where: where
+    })
+    .then(function(result) {
+      if (result.count) {
+        return res.status(200).send({
+          isValid: false,
+          value: req.body.value
+        });
+      }
+      return res.status(200).send({
+        isValid: true,
+        value: req.body.value
+      });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+
+};
+
+/**
+ * Authentication callback
+ */
+exports.authCallback = function(req, res, next) {
+  res.redirect('/');
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index c33f2dd..e1071aa 100644 (file)
@@ -1 +1,31 @@
-var _0xb5c3=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x55\x73\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x72\x6F\x6C\x65","\x61\x64\x6D\x69\x6E","\x75\x73\x65\x72\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x75\x73\x65\x72\x3A\x72\x65\x6D\x6F\x76\x65"];_0xb5c3[0];var user=require(_0xb5c3[2])[_0xb5c3[1]];exports[_0xb5c3[3]]=function(_0x6123x2){user[_0xb5c3[4]](function(_0x6123x3){onSave(_0x6123x2,_0x6123x3)});user[_0xb5c3[5]](function(_0x6123x3){onSave(_0x6123x2,_0x6123x3)});user[_0xb5c3[6]](function(_0x6123x3){onRemove(_0x6123x2,_0x6123x3)})};function onSave(_0x6123x2,_0x6123x3,_0x6123x5){if(_0x6123x3[_0xb5c3[7]]===_0xb5c3[8]){_0x6123x2[_0xb5c3[10]](_0xb5c3[9],_0x6123x3)}}function onRemove(_0x6123x2,_0x6123x3,_0x6123x5){if(_0x6123x3[_0xb5c3[7]]===_0xb5c3[8]){_0x6123x2[_0xb5c3[10]](_0xb5c3[11],_0x6123x3)}}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var user = require('../../models').User;
+
+exports.register = function(socket) {
+  user.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  user.afterUpdate(function(doc) {
+    onSave(socket, doc);
+  });
+  user.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  if (doc.role === 'admin') {
+    socket.emit('user:save', doc);
+  }
+}
+
+function onRemove(socket, doc, cb) {
+  if (doc.role === 'admin') {
+    socket.emit('user:remove', doc);
+  }
+}
index ec120b7..bce94e7 100644 (file)
@@ -1 +1,15 @@
-var _0xd9a8=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x63\x68\x61\x74\x5F\x71\x75\x65\x75\x65\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0xd9a8[0];var express=require(_0xd9a8[1]);var controller=require(_0xd9a8[2]);var router=express.Router();router[_0xd9a8[5]](_0xd9a8[3],controller[_0xd9a8[4]]);router[_0xd9a8[5]](_0xd9a8[6],controller[_0xd9a8[7]]);router[_0xd9a8[9]](_0xd9a8[3],controller[_0xd9a8[8]]);router[_0xd9a8[11]](_0xd9a8[6],controller[_0xd9a8[10]]);router[_0xd9a8[12]](_0xd9a8[6],controller[_0xd9a8[10]]);router[_0xd9a8[14]](_0xd9a8[6],controller[_0xd9a8[13]]);module[_0xd9a8[15]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./user_has_chat_queue.controller');
+
+var router = express.Router();
+
+router.get('/', controller.index);
+router.get('/:id', controller.show);
+router.post('/', controller.create);
+router.put('/:id', controller.update);
+router.patch('/:id', controller.update);
+router.delete('/:id', controller.destroy);
+
+module.exports = router;
\ No newline at end of file
index f78c05a..b399892 100644 (file)
@@ -1 +1,103 @@
-var _0x6d6f=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x55\x73\x65\x72\x48\x61\x73\x43\x68\x61\x74\x51\x75\x65\x75\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x66\x69\x6E\x64","\x64\x65\x73\x74\x72\x6F\x79"];_0x6d6f[0];var _=require(_0x6d6f[1]);var UserHasChatQueue=require(_0x6d6f[3])[_0x6d6f[2]];exports[_0x6d6f[4]]=function(_0xfe51x3,_0xfe51x4){UserHasChatQueue[_0x6d6f[10]](_0xfe51x3[_0x6d6f[9]]?{where:_0xfe51x3[_0x6d6f[9]]}:{})[_0x6d6f[8]](function(_0xfe51x6){return _0xfe51x4[_0x6d6f[7]](200)[_0x6d6f[6]](_0xfe51x6)})[_0x6d6f[5]](function(_0xfe51x5){return handleError(_0xfe51x4,_0xfe51x5)})};exports[_0x6d6f[11]]=function(_0xfe51x3,_0xfe51x4){UserHasChatQueue[_0x6d6f[15]](_0xfe51x3[_0x6d6f[14]][_0x6d6f[13]])[_0x6d6f[8]](function(_0xfe51x7){if(!_0xfe51x7){return _0xfe51x4[_0x6d6f[12]](404)};return _0xfe51x4[_0x6d6f[6]](_0xfe51x7)})[_0x6d6f[5]](function(_0xfe51x5){return handleError(_0xfe51x4,_0xfe51x5)})};exports[_0x6d6f[16]]=function(_0xfe51x3,_0xfe51x4){UserHasChatQueue[_0x6d6f[16]](_0xfe51x3[_0x6d6f[17]])[_0x6d6f[8]](function(_0xfe51x7){return _0xfe51x4[_0x6d6f[7]](201)[_0x6d6f[6]](_0xfe51x7)})[_0x6d6f[5]](function(_0xfe51x5){return handleError(_0xfe51x4,_0xfe51x5)})};exports[_0x6d6f[18]]=function(_0xfe51x3,_0xfe51x4){if(_0xfe51x3[_0x6d6f[17]][_0x6d6f[13]]){delete _0xfe51x3[_0x6d6f[17]][_0x6d6f[13]]};UserHasChatQueue[_0x6d6f[21]]({where:{id:_0xfe51x3[_0x6d6f[14]][_0x6d6f[13]]}})[_0x6d6f[8]](function(_0xfe51x7){if(!_0xfe51x7){return _0xfe51x4[_0x6d6f[12]](404)};var _0xfe51x8=_[_0x6d6f[19]](_0xfe51x7,_0xfe51x3[_0x6d6f[17]]);_0xfe51x8[_0x6d6f[20]]()[_0x6d6f[8]](function(){return _0xfe51x4[_0x6d6f[7]](200)[_0x6d6f[6]](_0xfe51x7)})[_0x6d6f[5]](function(_0xfe51x5){return handleError(_0xfe51x4,_0xfe51x5)})})[_0x6d6f[5]](function(_0xfe51x5){return handleError(_0xfe51x4,_0xfe51x5)})};exports[_0x6d6f[22]]=function(_0xfe51x3,_0xfe51x4){UserHasChatQueue[_0x6d6f[21]]({where:{id:_0xfe51x3[_0x6d6f[14]][_0x6d6f[13]]}})[_0x6d6f[8]](function(_0xfe51x7){if(!_0xfe51x7){return _0xfe51x4[_0x6d6f[12]](404)};_0xfe51x7[_0x6d6f[22]]()[_0x6d6f[8]](function(){return _0xfe51x4[_0x6d6f[12]](204)})[_0x6d6f[5]](function(_0xfe51x5){return handleError(_0xfe51x4,_0xfe51x5)})})[_0x6d6f[5]](function(_0xfe51x5){return handleError(_0xfe51x4,_0xfe51x5)})};function handleError(_0xfe51x4,_0xfe51x5){return _0xfe51x4[_0x6d6f[7]](500)[_0x6d6f[6]](_0xfe51x5)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var UserHasChatQueue = require('../../models').UserHasChatQueue;
+
+// Get list of userHasChatQueues
+exports.index = function(req, res) {
+  UserHasChatQueue
+    .findAll(req.query ? {
+      where: req.query
+    } : {})
+    .then(function(userHasChatQueues) {
+      return res.status(200).send(userHasChatQueues);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single userHasChatQueue
+exports.show = function(req, res) {
+  UserHasChatQueue
+    .findById(req.params.id)
+    .then(function(userHasChatQueue) {
+      if (!userHasChatQueue) {
+        return res.sendStatus(404);
+      }
+      return res.send(userHasChatQueue);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new userHasChatQueue in the DB.
+exports.create = function(req, res) {
+  UserHasChatQueue
+    .create(req.body)
+    .then(function(userHasChatQueue) {
+      return res.status(201).send(userHasChatQueue);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Updates an existing userHasChatQueue in the DB.
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  UserHasChatQueue
+    .find({
+      where: {
+        id: req.params.id
+      }
+    })
+    .then(function(userHasChatQueue) {
+      if (!userHasChatQueue) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(userHasChatQueue, req.body);
+      updated.save()
+        .then(function() {
+          return res.status(200).send(userHasChatQueue);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a userHasChatQueue from the DB.
+exports.destroy = function(req, res) {
+  UserHasChatQueue
+    .find({
+      where: {
+        id: req.params.id
+      }
+    })
+    .then(function(userHasChatQueue) {
+      if (!userHasChatQueue) {
+        return res.sendStatus(404);
+      }
+      userHasChatQueue.destroy()
+        .then(function() {
+          return res.sendStatus(204);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index e48c4a7..882e78a 100644 (file)
@@ -1 +1,24 @@
-var _0x87c7=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x55\x73\x65\x72\x48\x61\x73\x43\x68\x61\x74\x51\x75\x65\x75\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x63\x68\x61\x74\x5F\x71\x75\x65\x75\x65\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x63\x68\x61\x74\x5F\x71\x75\x65\x75\x65\x3A\x72\x65\x6D\x6F\x76\x65"];_0x87c7[0];var UserHasChatQueue=require(_0x87c7[2])[_0x87c7[1]];exports[_0x87c7[3]]=function(_0xc032x2){UserHasChatQueue[_0x87c7[4]](function(_0xc032x3){onSave(_0xc032x2,_0xc032x3)});UserHasChatQueue[_0x87c7[5]](function(_0xc032x3){onRemove(_0xc032x2,_0xc032x3)})};function onSave(_0xc032x2,_0xc032x3,_0xc032x5){_0xc032x2[_0x87c7[7]](_0x87c7[6],_0xc032x3)}function onRemove(_0xc032x2,_0xc032x3,_0xc032x5){_0xc032x2[_0x87c7[7]](_0x87c7[8],_0xc032x3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var UserHasChatQueue = require('../../models').UserHasChatQueue;
+
+exports.register = function(socket) {
+  UserHasChatQueue.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  UserHasChatQueue.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('user_has_chat_queue:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('user_has_chat_queue:remove', doc);
+}
index f4dc8b9..539163a 100644 (file)
@@ -1 +1,20 @@
-var _0x7891=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x73\x68\x6F\x75\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x70\x70","\x73\x75\x70\x65\x72\x74\x65\x73\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x71\x75\x65\x75\x65\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x70\x6F\x6E\x64\x20\x77\x69\x74\x68\x20\x4A\x53\x4F\x4E\x20\x61\x72\x72\x61\x79","\x69\x6E\x73\x74\x61\x6E\x63\x65\x6F\x66","\x62\x65","\x62\x6F\x64\x79","\x65\x6E\x64","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x65\x78\x70\x65\x63\x74","\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x71\x75\x65\x75\x65\x73","\x67\x65\x74"];_0x7891[0];var should=require(_0x7891[1]);var app=require(_0x7891[2]);var request=require(_0x7891[3]);describe(_0x7891[4],function(){it(_0x7891[5],function(_0xbdc7x4){request(app)[_0x7891[13]](_0x7891[12])[_0x7891[11]](200)[_0x7891[11]](_0x7891[10],/json/)[_0x7891[9]](function(_0xbdc7x5,_0xbdc7x6){if(_0xbdc7x5){return _0xbdc7x4(_0xbdc7x5)};_0xbdc7x6[_0x7891[8]][_0x7891[1]][_0x7891[7]][_0x7891[6]](Array);_0xbdc7x4()})})})
\ No newline at end of file
+'use strict';
+
+var should = require('should');
+var app = require('../../app');
+var request = require('supertest');
+
+describe('GET /api/chat/user_has_queues', function() {
+
+  it('should respond with JSON array', function(done) {
+    request(app)
+      .get('/api/chat/user_has_queues')
+      .expect(200)
+      .expect('Content-Type', /json/)
+      .end(function(err, res) {
+        if (err) return done(err);
+        res.body.should.be.instanceof(Array);
+        done();
+      });
+  });
+});
\ No newline at end of file
index e45fde8..381448d 100644 (file)
@@ -1 +1,16 @@
-var _0xea7a=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x63\x68\x61\x74\x5F\x72\x6F\x6F\x6D\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F\x3A\x75\x73\x65\x72\x49\x64\x2F\x3A\x63\x68\x61\x74\x52\x6F\x6F\x6D\x49\x64","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xea7a[0];var express=require(_0xea7a[1]);var controller=require(_0xea7a[2]);var auth=require(_0xea7a[3]);var router=express.Router();router[_0xea7a[6]](_0xea7a[4],controller[_0xea7a[5]]);module[_0xea7a[7]]=router
\ No newline at end of file
+'use strict';
+
+var express     = require('express');
+var controller  = require('./user_has_chat_room.controller');
+var auth        = require('../../auth/auth.service');
+
+var router = express.Router();
+
+// router.get('/', controller.index);
+// router.get('/:id', controller.show);
+// router.post('/', controller.create);
+router.put('/:userId/:chatRoomId', controller.update);
+// router.patch('/:id', controller.update);
+// router.delete('/:id', controller.destroy);
+
+module.exports = router;
index c1e9538..d747380 100644 (file)
@@ -1 +1,96 @@
-var _0x424a=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x55\x73\x65\x72\x48\x61\x73\x43\x68\x61\x74\x52\x6F\x6F\x6D","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x75\x73\x65\x72\x49\x64","\x63\x68\x61\x74\x52\x6F\x6F\x6D\x49\x64","\x66\x69\x6E\x64\x4F\x6E\x65","\x64\x65\x73\x74\x72\x6F\x79"];_0x424a[0];var _=require(_0x424a[1]);var UserHasChatRoom=require(_0x424a[3])[_0x424a[2]];exports[_0x424a[4]]=function(_0x7d00x3,_0x7d00x4){UserHasChatRoom[_0x424a[9]]()[_0x424a[8]](function(_0x7d00x6){return _0x7d00x4[_0x424a[7]](200)[_0x424a[6]](_0x7d00x6)})[_0x424a[5]](function(_0x7d00x5){return handleError(_0x7d00x4,_0x7d00x5)})};exports[_0x424a[10]]=function(_0x7d00x3,_0x7d00x4){UserHasChatRoom[_0x424a[14]](_0x7d00x3[_0x424a[13]][_0x424a[12]])[_0x424a[8]](function(_0x7d00x7){if(!_0x7d00x7){return _0x7d00x4[_0x424a[11]](404)};return _0x7d00x4[_0x424a[6]](_0x7d00x7)})[_0x424a[5]](function(_0x7d00x5){return handleError(_0x7d00x4,_0x7d00x5)})};exports[_0x424a[15]]=function(_0x7d00x3,_0x7d00x4){UserHasChatRoom[_0x424a[15]](_0x7d00x3[_0x424a[16]])[_0x424a[8]](function(_0x7d00x7){return _0x7d00x4[_0x424a[7]](201)[_0x424a[6]](_0x7d00x7)})[_0x424a[5]](function(_0x7d00x5){return handleError(_0x7d00x4,_0x7d00x5)})};exports[_0x424a[17]]=function(_0x7d00x3,_0x7d00x4){UserHasChatRoom[_0x424a[21]]({where:{UserId:_0x7d00x3[_0x424a[13]][_0x424a[19]],ChatRoomId:_0x7d00x3[_0x424a[13]][_0x424a[20]]},limit:1})[_0x424a[8]](function(_0x7d00x7){if(!_0x7d00x7){return _0x7d00x4[_0x424a[11]](404)};_0x7d00x7[_0x424a[18]](_0x7d00x3[_0x424a[16]])[_0x424a[8]](function(){return _0x7d00x4[_0x424a[7]](200)[_0x424a[6]](_0x7d00x7)})[_0x424a[5]](function(_0x7d00x5){return handleError(_0x7d00x4,_0x7d00x5)})})[_0x424a[5]](function(_0x7d00x5){return handleError(_0x7d00x4,_0x7d00x5)})};exports[_0x424a[22]]=function(_0x7d00x3,_0x7d00x4){UserHasChatRoom[_0x424a[14]](_0x7d00x3[_0x424a[13]][_0x424a[12]])[_0x424a[8]](function(_0x7d00x7){if(!_0x7d00x7){return _0x7d00x4[_0x424a[11]](404)};_0x7d00x7[_0x424a[22]]()[_0x424a[8]](function(){return _0x7d00x4[_0x424a[11]](204)})[_0x424a[5]](function(_0x7d00x5){return handleError(_0x7d00x4,_0x7d00x5)})})[_0x424a[5]](function(_0x7d00x5){return handleError(_0x7d00x4,_0x7d00x5)})};function handleError(_0x7d00x4,_0x7d00x5){return _0x7d00x4[_0x424a[7]](500)[_0x424a[6]](_0x7d00x5)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var UserHasChatRoom = require('../../models').UserHasChatRoom;
+
+// Get list of user_has_chat_rooms
+exports.index = function(req, res) {
+  UserHasChatRoom
+  .findAll()
+  .then(function (user_has_chat_rooms) {
+    return res.status(200).send(user_has_chat_rooms);
+  })
+  .catch(function(err) {
+    return handleError(res, err);
+  });
+};
+
+// Get a single user_has_chat_room
+exports.show = function(req, res) {
+  UserHasChatRoom
+  .findById(req.params.id)
+  .then(function (user_has_chat_room) {
+    if(!user_has_chat_room) { return res.sendStatus(404); }
+    return res.send(user_has_chat_room);
+  })
+  .catch(function(err){
+    return handleError(res, err);
+  });
+};
+
+// Creates a new user_has_chat_room in the DB.
+exports.create = function(req, res) {
+
+  UserHasChatRoom
+    .create(req.body)
+    .then(function(user_has_chat_room) {
+      return res.status(201).send(user_has_chat_room);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Updates an existing user_has_chat_room in the DB.
+exports.update = function(req, res) {
+
+  UserHasChatRoom
+    .findOne({
+      where: {
+        UserId: req.params.userId,
+        ChatRoomId: req.params.chatRoomId
+      },
+      limit: 1
+    })
+    .then(function (user_has_chat_room) {
+      if (!user_has_chat_room) {
+        return res.sendStatus(404);
+      }
+
+      user_has_chat_room
+        .updateAttributes(req.body)
+        .then(function () {
+          return res.status(200).send(user_has_chat_room);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a user_has_chat_room from the DB.
+exports.destroy = function(req, res) {
+
+  UserHasChatRoom
+  .findById(req.params.id)
+  .then(function (user_has_chat_room) {
+    if(!user_has_chat_room) { return res.sendStatus(404); }
+    user_has_chat_room.destroy()
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+  })
+  .catch(function(err) {
+    return handleError(res, err);
+  });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index 1e3ca01..e0be09b 100644 (file)
@@ -1 +1,66 @@
-var _0x7c5e=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x55\x73\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x43\x68\x61\x74\x52\x6F\x6F\x6D","\x43\x68\x61\x74\x56\x69\x73\x69\x74\x6F\x72","\x43\x68\x61\x74\x4D\x65\x73\x73\x61\x67\x65","\x55\x73\x65\x72\x48\x61\x73\x43\x68\x61\x74\x52\x6F\x6F\x6D","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x69\x64","\x6D\x61\x70","\x75\x73\x65\x72\x49\x64","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x63\x68\x61\x74\x5F\x72\x6F\x6F\x6D\x3A\x73\x61\x76\x65","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x65\x6D\x69\x74","\x66\x6F\x72\x45\x61\x63\x68","\x74\x68\x65\x6E","\x65\x6D\x61\x69\x6C","\x66\x75\x6C\x6C\x6E\x61\x6D\x65","\x6E\x61\x6D\x65","\x66\x69\x6E\x64\x42\x79\x49\x64","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x63\x68\x61\x74\x5F\x72\x6F\x6F\x6D\x3A\x72\x65\x6D\x6F\x76\x65"];_0x7c5e[0];var _=require(_0x7c5e[1]);var User=require(_0x7c5e[3])[_0x7c5e[2]];var ChatRoom=require(_0x7c5e[3])[_0x7c5e[4]];var ChatVisitor=require(_0x7c5e[3])[_0x7c5e[5]];var ChatMessage=require(_0x7c5e[3])[_0x7c5e[6]];var UserHasChatRoom=require(_0x7c5e[3])[_0x7c5e[7]];exports[_0x7c5e[8]]=function(_0xa566x7){UserHasChatRoom[_0x7c5e[9]](function(_0xa566x8){onSave(_0xa566x7,_0xa566x8)});UserHasChatRoom[_0x7c5e[10]](function(_0xa566x8){onRemove(_0xa566x7,_0xa566x8)})};function onSave(_0xa566x7,_0xa566x8){var _0xa566xa;return ChatRoom[_0x7c5e[24]](_0xa566x8.ChatRoomId,{include:[{model:ChatVisitor,attributes:[_0x7c5e[13],_0x7c5e[21],_0x7c5e[22]]},{model:User,attributes:[_0x7c5e[13],_0x7c5e[21],_0x7c5e[23],_0x7c5e[22]]},{model:ChatMessage,include:[{model:ChatVisitor,attributes:[_0x7c5e[13],_0x7c5e[21],_0x7c5e[22]]},{model:User,attributes:[_0x7c5e[13],_0x7c5e[21],_0x7c5e[23],_0x7c5e[22]]}]}]})[_0x7c5e[20]](function(_0xa566xc){_0xa566xa=_0xa566xc;var _0xa566xd=_[_0x7c5e[14]](_0xa566xa.Users,_0x7c5e[13]);_0xa566xd[_0x7c5e[19]](function(_0xa566xe){if(_0xa566x7[_0x7c5e[15]]==_0xa566xe){_0xa566x7[_0x7c5e[18]](_0x7c5e[16],_0xa566xa[_0x7c5e[17]])}});return})[_0x7c5e[12]](function(_0xa566xb){console[_0x7c5e[11]](_0xa566xb)})}function onRemove(_0xa566x7,_0xa566x8){_0xa566x7[_0x7c5e[18]](_0x7c5e[25],_0xa566x8)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+var _ = require('lodash');
+var User = require('../../models').User;
+var ChatRoom = require('../../models').ChatRoom;
+var ChatVisitor = require('../../models').ChatVisitor;
+var ChatMessage = require('../../models').ChatMessage;
+var UserHasChatRoom = require('../../models').UserHasChatRoom;
+
+exports.register = function(socket) {
+  UserHasChatRoom.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  UserHasChatRoom.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc) {
+
+  var _chatRoom;
+
+  return ChatRoom
+    .findById(doc.ChatRoomId, {
+      include: [{
+        model: ChatVisitor,
+        attributes: ['id', 'email', 'fullname']
+      }, {
+        model: User,
+        attributes: ['id', 'email', 'name', 'fullname']
+      }, {
+        model: ChatMessage,
+        include: [{
+          model: ChatVisitor,
+          attributes: ['id', 'email', 'fullname']
+        }, {
+          model: User,
+          attributes: ['id', 'email', 'name', 'fullname']
+        }]
+      }]
+    })
+    .then(function(chatRoom) {
+      _chatRoom = chatRoom;
+      // _chatRoom.dataValues.ChatMessages = [];
+
+      var ids = _.map(_chatRoom.Users, 'id');
+
+      ids.forEach(function(id) {
+        if (socket.userId == id) {
+          socket.emit('user_has_chat_room:save', _chatRoom.dataValues)
+        }
+      });
+
+      return;
+    })
+    .catch(function(err) {
+      console.error(err);
+    });
+}
+
+function onRemove(socket, doc) {
+  socket.emit('user_has_chat_room:remove', doc);
+}
index e8f46cb..b33382a 100644 (file)
@@ -1 +1,20 @@
-var _0x6c30=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x73\x68\x6F\x75\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x70\x70","\x73\x75\x70\x65\x72\x74\x65\x73\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x72\x6F\x6F\x6D\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x70\x6F\x6E\x64\x20\x77\x69\x74\x68\x20\x4A\x53\x4F\x4E\x20\x61\x72\x72\x61\x79","\x69\x6E\x73\x74\x61\x6E\x63\x65\x6F\x66","\x62\x65","\x62\x6F\x64\x79","\x65\x6E\x64","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x65\x78\x70\x65\x63\x74","\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x72\x6F\x6F\x6D\x73","\x67\x65\x74"];_0x6c30[0];var should=require(_0x6c30[1]);var app=require(_0x6c30[2]);var request=require(_0x6c30[3]);describe(_0x6c30[4],function(){it(_0x6c30[5],function(_0xbb94x4){request(app)[_0x6c30[13]](_0x6c30[12])[_0x6c30[11]](200)[_0x6c30[11]](_0x6c30[10],/json/)[_0x6c30[9]](function(_0xbb94x5,_0xbb94x6){if(_0xbb94x5){return _0xbb94x4(_0xbb94x5)};_0xbb94x6[_0x6c30[8]][_0x6c30[1]][_0x6c30[7]][_0x6c30[6]](Array);_0xbb94x4()})})})
\ No newline at end of file
+'use strict';
+
+var should = require('should');
+var app = require('../../app');
+var request = require('supertest');
+
+describe('GET /api/chat/user_has_rooms', function() {
+
+  it('should respond with JSON array', function(done) {
+    request(app)
+      .get('/api/chat/user_has_rooms')
+      .expect(200)
+      .expect('Content-Type', /json/)
+      .end(function(err, res) {
+        if (err) return done(err);
+        res.body.should.be.instanceof(Array);
+        done();
+      });
+  });
+});
\ No newline at end of file
index 9dbdc82..5805e3d 100644 (file)
@@ -1 +1,15 @@
-var _0xb5db=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x66\x61\x78\x5F\x71\x75\x65\x75\x65\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0xb5db[0];var express=require(_0xb5db[1]);var controller=require(_0xb5db[2]);var router=express.Router();router[_0xb5db[5]](_0xb5db[3],controller[_0xb5db[4]]);router[_0xb5db[5]](_0xb5db[6],controller[_0xb5db[7]]);router[_0xb5db[9]](_0xb5db[3],controller[_0xb5db[8]]);router[_0xb5db[11]](_0xb5db[6],controller[_0xb5db[10]]);router[_0xb5db[12]](_0xb5db[6],controller[_0xb5db[10]]);router[_0xb5db[14]](_0xb5db[6],controller[_0xb5db[13]]);module[_0xb5db[15]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./user_has_fax_queue.controller');
+
+var router = express.Router();
+
+router.get('/', controller.index);
+router.get('/:id', controller.show);
+router.post('/', controller.create);
+router.put('/:id', controller.update);
+router.patch('/:id', controller.update);
+router.delete('/:id', controller.destroy);
+
+module.exports = router;
\ No newline at end of file
index 18e26c0..f92e570 100644 (file)
@@ -1 +1,103 @@
-var _0x29bc=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x55\x73\x65\x72\x48\x61\x73\x46\x61\x78\x51\x75\x65\x75\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x66\x69\x6E\x64","\x64\x65\x73\x74\x72\x6F\x79"];_0x29bc[0];var _=require(_0x29bc[1]);var UserHasFaxQueue=require(_0x29bc[3])[_0x29bc[2]];exports[_0x29bc[4]]=function(_0x816bx3,_0x816bx4){UserHasFaxQueue[_0x29bc[10]](_0x816bx3[_0x29bc[9]]?{where:_0x816bx3[_0x29bc[9]]}:{})[_0x29bc[8]](function(_0x816bx6){return _0x816bx4[_0x29bc[7]](200)[_0x29bc[6]](_0x816bx6)})[_0x29bc[5]](function(_0x816bx5){return handleError(_0x816bx4,_0x816bx5)})};exports[_0x29bc[11]]=function(_0x816bx3,_0x816bx4){UserHasFaxQueue[_0x29bc[15]](_0x816bx3[_0x29bc[14]][_0x29bc[13]])[_0x29bc[8]](function(_0x816bx7){if(!_0x816bx7){return _0x816bx4[_0x29bc[12]](404)};return _0x816bx4[_0x29bc[6]](_0x816bx7)})[_0x29bc[5]](function(_0x816bx5){return handleError(_0x816bx4,_0x816bx5)})};exports[_0x29bc[16]]=function(_0x816bx3,_0x816bx4){UserHasFaxQueue[_0x29bc[16]](_0x816bx3[_0x29bc[17]])[_0x29bc[8]](function(_0x816bx7){return _0x816bx4[_0x29bc[7]](201)[_0x29bc[6]](_0x816bx7)})[_0x29bc[5]](function(_0x816bx5){return handleError(_0x816bx4,_0x816bx5)})};exports[_0x29bc[18]]=function(_0x816bx3,_0x816bx4){if(_0x816bx3[_0x29bc[17]][_0x29bc[13]]){delete _0x816bx3[_0x29bc[17]][_0x29bc[13]]};UserHasFaxQueue[_0x29bc[21]]({where:{id:_0x816bx3[_0x29bc[14]][_0x29bc[13]]}})[_0x29bc[8]](function(_0x816bx7){if(!_0x816bx7){return _0x816bx4[_0x29bc[12]](404)};var _0x816bx8=_[_0x29bc[19]](_0x816bx7,_0x816bx3[_0x29bc[17]]);_0x816bx8[_0x29bc[20]]()[_0x29bc[8]](function(){return _0x816bx4[_0x29bc[7]](200)[_0x29bc[6]](_0x816bx7)})[_0x29bc[5]](function(_0x816bx5){return handleError(_0x816bx4,_0x816bx5)})})[_0x29bc[5]](function(_0x816bx5){return handleError(_0x816bx4,_0x816bx5)})};exports[_0x29bc[22]]=function(_0x816bx3,_0x816bx4){UserHasFaxQueue[_0x29bc[21]]({where:{id:_0x816bx3[_0x29bc[14]][_0x29bc[13]]}})[_0x29bc[8]](function(_0x816bx7){if(!_0x816bx7){return _0x816bx4[_0x29bc[12]](404)};_0x816bx7[_0x29bc[22]]()[_0x29bc[8]](function(){return _0x816bx4[_0x29bc[12]](204)})[_0x29bc[5]](function(_0x816bx5){return handleError(_0x816bx4,_0x816bx5)})})[_0x29bc[5]](function(_0x816bx5){return handleError(_0x816bx4,_0x816bx5)})};function handleError(_0x816bx4,_0x816bx5){return _0x816bx4[_0x29bc[7]](500)[_0x29bc[6]](_0x816bx5)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var UserHasFaxQueue = require('../../models').UserHasFaxQueue;
+
+// Get list of user_has_fax_queues
+exports.index = function(req, res) {
+  UserHasFaxQueue
+    .findAll(req.query ? {
+      where: req.query
+    } : {})
+    .then(function(user_has_fax_queues) {
+      return res.status(200).send(user_has_fax_queues);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single user_has_fax_queue
+exports.show = function(req, res) {
+  UserHasFaxQueue
+    .findById(req.params.id)
+    .then(function(user_has_fax_queue) {
+      if (!user_has_fax_queue) {
+        return res.sendStatus(404);
+      }
+      return res.send(user_has_fax_queue);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new user_has_fax_queue in the DB.
+exports.create = function(req, res) {
+  UserHasFaxQueue
+    .create(req.body)
+    .then(function(user_has_fax_queue) {
+      return res.status(201).send(user_has_fax_queue);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Updates an existing user_has_fax_queue in the DB.
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  UserHasFaxQueue
+    .find({
+      where: {
+        id: req.params.id
+      }
+    })
+    .then(function(user_has_fax_queue) {
+      if (!user_has_fax_queue) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(user_has_fax_queue, req.body);
+      updated.save()
+        .then(function() {
+          return res.status(200).send(user_has_fax_queue);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a user_has_fax_queue from the DB.
+exports.destroy = function(req, res) {
+  UserHasFaxQueue
+    .find({
+      where: {
+        id: req.params.id
+      }
+    })
+    .then(function(user_has_fax_queue) {
+      if (!user_has_fax_queue) {
+        return res.sendStatus(404);
+      }
+      user_has_fax_queue.destroy()
+        .then(function() {
+          return res.sendStatus(204);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index e661c0f..4b0602a 100644 (file)
@@ -1 +1,30 @@
-var _0x9dbb=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x55\x73\x65\x72\x48\x61\x73\x46\x61\x78\x51\x75\x65\x75\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x61\x66\x74\x65\x72\x42\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x42\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x66\x61\x78\x5F\x71\x75\x65\x75\x65\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x66\x61\x78\x5F\x71\x75\x65\x75\x65\x3A\x72\x65\x6D\x6F\x76\x65"];_0x9dbb[0];var UserHasFaxQueue=require(_0x9dbb[2])[_0x9dbb[1]];exports[_0x9dbb[3]]=function(_0x338cx2){UserHasFaxQueue[_0x9dbb[4]](function(_0x338cx3){onSave(_0x338cx2,_0x338cx3)});UserHasFaxQueue[_0x9dbb[5]](function(_0x338cx3){onRemove(_0x338cx2,_0x338cx3)});UserHasFaxQueue[_0x9dbb[6]](function(_0x338cx3){onSave(_0x338cx2,_0x338cx3)});UserHasFaxQueue[_0x9dbb[7]](function(_0x338cx3){onRemove(_0x338cx2,_0x338cx3)})};function onSave(_0x338cx2,_0x338cx3,_0x338cx5){_0x338cx2[_0x9dbb[9]](_0x9dbb[8],_0x338cx3)}function onRemove(_0x338cx2,_0x338cx3,_0x338cx5){_0x338cx2[_0x9dbb[9]](_0x9dbb[10],_0x338cx3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var UserHasFaxQueue = require('../../models').UserHasFaxQueue;
+
+exports.register = function(socket) {
+  UserHasFaxQueue.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  UserHasFaxQueue.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+  UserHasFaxQueue.afterBulkCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  UserHasFaxQueue.afterBulkDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('user_has_fax_queue:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('user_has_fax_queue:remove', doc);
+}
index cd09278..992672c 100644 (file)
@@ -1 +1,20 @@
-var _0xcbcf=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x73\x68\x6F\x75\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x70\x70","\x73\x75\x70\x65\x72\x74\x65\x73\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x66\x61\x78\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x71\x75\x65\x75\x65\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x70\x6F\x6E\x64\x20\x77\x69\x74\x68\x20\x4A\x53\x4F\x4E\x20\x61\x72\x72\x61\x79","\x69\x6E\x73\x74\x61\x6E\x63\x65\x6F\x66","\x62\x65","\x62\x6F\x64\x79","\x65\x6E\x64","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x65\x78\x70\x65\x63\x74","\x2F\x61\x70\x69\x2F\x66\x61\x78\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x71\x75\x65\x75\x65\x73","\x67\x65\x74"];_0xcbcf[0];var should=require(_0xcbcf[1]);var app=require(_0xcbcf[2]);var request=require(_0xcbcf[3]);describe(_0xcbcf[4],function(){it(_0xcbcf[5],function(_0x4b3fx4){request(app)[_0xcbcf[13]](_0xcbcf[12])[_0xcbcf[11]](200)[_0xcbcf[11]](_0xcbcf[10],/json/)[_0xcbcf[9]](function(_0x4b3fx5,_0x4b3fx6){if(_0x4b3fx5){return _0x4b3fx4(_0x4b3fx5)};_0x4b3fx6[_0xcbcf[8]][_0xcbcf[1]][_0xcbcf[7]][_0xcbcf[6]](Array);_0x4b3fx4()})})})
\ No newline at end of file
+'use strict';
+
+var should = require('should');
+var app = require('../../app');
+var request = require('supertest');
+
+describe('GET /api/fax/user_has_queues', function() {
+
+  it('should respond with JSON array', function(done) {
+    request(app)
+      .get('/api/fax/user_has_queues')
+      .expect(200)
+      .expect('Content-Type', /json/)
+      .end(function(err, res) {
+        if (err) return done(err);
+        res.body.should.be.instanceof(Array);
+        done();
+      });
+  });
+});
\ No newline at end of file
index f88c366..50b083e 100644 (file)
@@ -1 +1,15 @@
-var _0x6927=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x6D\x61\x69\x6C\x5F\x71\x75\x65\x75\x65\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x6927[0];var express=require(_0x6927[1]);var controller=require(_0x6927[2]);var router=express.Router();router[_0x6927[5]](_0x6927[3],controller[_0x6927[4]]);router[_0x6927[5]](_0x6927[6],controller[_0x6927[7]]);router[_0x6927[9]](_0x6927[3],controller[_0x6927[8]]);router[_0x6927[11]](_0x6927[6],controller[_0x6927[10]]);router[_0x6927[12]](_0x6927[6],controller[_0x6927[10]]);router[_0x6927[14]](_0x6927[6],controller[_0x6927[13]]);module[_0x6927[15]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./user_has_mail_queue.controller');
+
+var router = express.Router();
+
+router.get('/', controller.index);
+router.get('/:id', controller.show);
+router.post('/', controller.create);
+router.put('/:id', controller.update);
+router.patch('/:id', controller.update);
+router.delete('/:id', controller.destroy);
+
+module.exports = router;
index 87be2c3..c15bc9d 100644 (file)
@@ -1 +1,95 @@
-var _0x4ff8=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x55\x73\x65\x72\x48\x61\x73\x4D\x61\x69\x6C\x51\x75\x65\x75\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79"];_0x4ff8[0];var _=require(_0x4ff8[1]);var UserHasMailQueue=require(_0x4ff8[3])[_0x4ff8[2]];exports[_0x4ff8[4]]=function(_0xd426x3,_0xd426x4){UserHasMailQueue[_0x4ff8[10]](_0xd426x3[_0x4ff8[9]]?{where:_0xd426x3[_0x4ff8[9]]}:{})[_0x4ff8[8]](function(_0xd426x6){return _0xd426x4[_0x4ff8[7]](200)[_0x4ff8[6]](_0xd426x6)})[_0x4ff8[5]](function(_0xd426x5){return handleError(_0xd426x4,_0xd426x5)})};exports[_0x4ff8[11]]=function(_0xd426x3,_0xd426x4){UserHasMailQueue[_0x4ff8[15]](_0xd426x3[_0x4ff8[14]][_0x4ff8[13]])[_0x4ff8[8]](function(_0xd426x7){if(!_0xd426x7){return _0xd426x4[_0x4ff8[12]](404)};return _0xd426x4[_0x4ff8[6]](_0xd426x7)})[_0x4ff8[5]](function(_0xd426x5){return handleError(_0xd426x4,_0xd426x5)})};exports[_0x4ff8[16]]=function(_0xd426x3,_0xd426x4){UserHasMailQueue[_0x4ff8[16]](_0xd426x3[_0x4ff8[17]])[_0x4ff8[8]](function(_0xd426x7){return _0xd426x4[_0x4ff8[7]](201)[_0x4ff8[6]](_0xd426x7)})[_0x4ff8[5]](function(_0xd426x5){return handleError(_0xd426x4,_0xd426x5)})};exports[_0x4ff8[18]]=function(_0xd426x3,_0xd426x4){if(_0xd426x3[_0x4ff8[17]][_0x4ff8[13]]){delete _0xd426x3[_0x4ff8[17]][_0x4ff8[13]]};UserHasMailQueue[_0x4ff8[15]](_0xd426x3[_0x4ff8[14]][_0x4ff8[13]])[_0x4ff8[8]](function(_0xd426x7){if(!_0xd426x7){return _0xd426x4[_0x4ff8[12]](404)};var _0xd426x8=_[_0x4ff8[19]](_0xd426x7,_0xd426x3[_0x4ff8[17]]);_0xd426x8[_0x4ff8[20]]()[_0x4ff8[8]](function(){return _0xd426x4[_0x4ff8[7]](200)[_0x4ff8[6]](_0xd426x7)})[_0x4ff8[5]](function(_0xd426x5){return handleError(_0xd426x4,_0xd426x5)})})[_0x4ff8[5]](function(_0xd426x5){return handleError(_0xd426x4,_0xd426x5)})};exports[_0x4ff8[21]]=function(_0xd426x3,_0xd426x4){UserHasMailQueue[_0x4ff8[15]](_0xd426x3[_0x4ff8[14]][_0x4ff8[13]])[_0x4ff8[8]](function(_0xd426x7){if(!_0xd426x7){return _0xd426x4[_0x4ff8[12]](404)};_0xd426x7[_0x4ff8[21]]()[_0x4ff8[8]](function(){return _0xd426x4[_0x4ff8[12]](204)})[_0x4ff8[5]](function(_0xd426x5){return handleError(_0xd426x4,_0xd426x5)})})[_0x4ff8[5]](function(_0xd426x5){return handleError(_0xd426x4,_0xd426x5)})};function handleError(_0xd426x4,_0xd426x5){return _0xd426x4[_0x4ff8[7]](500)[_0x4ff8[6]](_0xd426x5)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var UserHasMailQueue = require('../../models').UserHasMailQueue;
+
+// Get list of user_has_mail_queues
+exports.index = function(req, res) {
+  UserHasMailQueue
+    .findAll(req.query ? {
+      where: req.query
+    } : {})
+    .then(function(user_has_mail_queues) {
+      return res.status(200).send(user_has_mail_queues);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single user_has_mail_queue
+exports.show = function(req, res) {
+  UserHasMailQueue
+    .findById(req.params.id)
+    .then(function(user_has_mail_queue) {
+      if (!user_has_mail_queue) {
+        return res.sendStatus(404);
+      }
+      return res.send(user_has_mail_queue);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new user_has_mail_queue in the DB.
+exports.create = function(req, res) {
+  UserHasMailQueue
+    .create(req.body)
+    .then(function(user_has_mail_queue) {
+      return res.status(201).send(user_has_mail_queue);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Updates an existing user_has_mail_queue in the DB.
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  UserHasMailQueue
+    .findById(req.params.id)
+    .then(function(user_has_mail_queue) {
+      if (!user_has_mail_queue) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(user_has_mail_queue, req.body);
+      updated.save()
+        .then(function() {
+          return res.status(200).send(user_has_mail_queue);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a user_has_mail_queue from the DB.
+exports.destroy = function(req, res) {
+  UserHasMailQueue
+    .findById(req.params.id)
+    .then(function(user_has_mail_queue) {
+      if (!user_has_mail_queue) {
+        return res.sendStatus(404);
+      }
+      user_has_mail_queue.destroy()
+        .then(function() {
+          return res.sendStatus(204);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index a5b817d..bea513c 100644 (file)
@@ -1 +1,24 @@
-var _0x1e03=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x55\x73\x65\x72\x48\x61\x73\x4D\x61\x69\x6C\x51\x75\x65\x75\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x6D\x61\x69\x6C\x5F\x71\x75\x65\x75\x65\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x6D\x61\x69\x6C\x5F\x71\x75\x65\x75\x65\x3A\x72\x65\x6D\x6F\x76\x65"];_0x1e03[0];var UserHasMailQueue=require(_0x1e03[2])[_0x1e03[1]];exports[_0x1e03[3]]=function(_0x2606x2){UserHasMailQueue[_0x1e03[4]](function(_0x2606x3){onSave(_0x2606x2,_0x2606x3)});UserHasMailQueue[_0x1e03[5]](function(_0x2606x3){onRemove(_0x2606x2,_0x2606x3)})};function onSave(_0x2606x2,_0x2606x3,_0x2606x5){_0x2606x2[_0x1e03[7]](_0x1e03[6],_0x2606x3)}function onRemove(_0x2606x2,_0x2606x3,_0x2606x5){_0x2606x2[_0x1e03[7]](_0x1e03[8],_0x2606x3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var UserHasMailQueue = require('../../models').UserHasMailQueue;
+
+exports.register = function(socket) {
+  UserHasMailQueue.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  UserHasMailQueue.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('user_has_mail_queue:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('user_has_mail_queue:remove', doc);
+}
index 0ad82ef..1e7edf7 100644 (file)
@@ -1 +1,15 @@
-var _0x6992=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x73\x65\x72\x76\x69\x63\x65\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x6992[0];var express=require(_0x6992[1]);var controller=require(_0x6992[2]);var router=express.Router();router[_0x6992[5]](_0x6992[3],controller[_0x6992[4]]);router[_0x6992[5]](_0x6992[6],controller[_0x6992[7]]);router[_0x6992[9]](_0x6992[3],controller[_0x6992[8]]);router[_0x6992[11]](_0x6992[6],controller[_0x6992[10]]);router[_0x6992[12]](_0x6992[6],controller[_0x6992[10]]);router[_0x6992[14]](_0x6992[6],controller[_0x6992[13]]);module[_0x6992[15]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./user_has_service.controller');
+
+var router = express.Router();
+
+router.get('/', controller.index);
+router.get('/:id', controller.show);
+router.post('/', controller.create);
+router.put('/:id', controller.update);
+router.patch('/:id', controller.update);
+router.delete('/:id', controller.destroy);
+
+module.exports = router;
index 6bed7df..377090e 100644 (file)
@@ -1 +1,98 @@
-var _0x73ed=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x55\x73\x65\x72\x48\x61\x73\x53\x65\x72\x76\x69\x63\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x6C\x6F\x67","\x65\x72\x72\x6F\x72","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79"];_0x73ed[0];var _=require(_0x73ed[1]);var UserHasService=require(_0x73ed[3])[_0x73ed[2]];exports[_0x73ed[4]]=function(_0xcc7ex3,_0xcc7ex4){UserHasService[_0x73ed[10]](_0xcc7ex3[_0x73ed[9]]?{where:_0xcc7ex3[_0x73ed[9]]}:{})[_0x73ed[8]](function(_0xcc7ex6){return _0xcc7ex4[_0x73ed[7]](200)[_0x73ed[6]](_0xcc7ex6)})[_0x73ed[5]](function(_0xcc7ex5){return handleError(_0xcc7ex4,_0xcc7ex5)})};exports[_0x73ed[11]]=function(_0xcc7ex3,_0xcc7ex4){UserHasService[_0x73ed[15]](_0xcc7ex3[_0x73ed[14]][_0x73ed[13]])[_0x73ed[8]](function(_0xcc7ex7){if(!_0xcc7ex7){return _0xcc7ex4[_0x73ed[12]](404)};return _0xcc7ex4[_0x73ed[6]](_0xcc7ex7)})[_0x73ed[5]](function(_0xcc7ex5){return handleError(_0xcc7ex4,_0xcc7ex5)})};exports[_0x73ed[16]]=function(_0xcc7ex3,_0xcc7ex4,_0xcc7ex8){console[_0x73ed[18]](_0xcc7ex3[_0x73ed[17]]);UserHasService[_0x73ed[16]](_0xcc7ex3[_0x73ed[17]])[_0x73ed[8]](function(_0xcc7ex7){return _0xcc7ex4[_0x73ed[7]](201)[_0x73ed[6]](_0xcc7ex7)})[_0x73ed[5]](function(_0xcc7ex5){console[_0x73ed[19]](_0xcc7ex5);return _0xcc7ex8(_0xcc7ex5)})};exports[_0x73ed[20]]=function(_0xcc7ex3,_0xcc7ex4){if(_0xcc7ex3[_0x73ed[17]][_0x73ed[13]]){delete _0xcc7ex3[_0x73ed[17]][_0x73ed[13]]};UserHasService[_0x73ed[15]](_0xcc7ex3[_0x73ed[14]][_0x73ed[13]])[_0x73ed[8]](function(_0xcc7ex7){if(!_0xcc7ex7){return _0xcc7ex4[_0x73ed[12]](404)};var _0xcc7ex9=_[_0x73ed[21]](_0xcc7ex7,_0xcc7ex3[_0x73ed[17]]);_0xcc7ex9[_0x73ed[22]]()[_0x73ed[8]](function(){return _0xcc7ex4[_0x73ed[7]](200)[_0x73ed[6]](_0xcc7ex7)})[_0x73ed[5]](function(_0xcc7ex5){return handleError(_0xcc7ex4,_0xcc7ex5)})})[_0x73ed[5]](function(_0xcc7ex5){return handleError(_0xcc7ex4,_0xcc7ex5)})};exports[_0x73ed[23]]=function(_0xcc7ex3,_0xcc7ex4){UserHasService[_0x73ed[15]](_0xcc7ex3[_0x73ed[14]][_0x73ed[13]])[_0x73ed[8]](function(_0xcc7ex7){if(!_0xcc7ex7){return _0xcc7ex4[_0x73ed[12]](404)};_0xcc7ex7[_0x73ed[23]]()[_0x73ed[8]](function(){return _0xcc7ex4[_0x73ed[12]](204)})[_0x73ed[5]](function(_0xcc7ex5){return handleError(_0xcc7ex4,_0xcc7ex5)})})[_0x73ed[5]](function(_0xcc7ex5){return handleError(_0xcc7ex4,_0xcc7ex5)})};function handleError(_0xcc7ex4,_0xcc7ex5){return _0xcc7ex4[_0x73ed[7]](500)[_0x73ed[6]](_0xcc7ex5)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var UserHasService = require('../../models').UserHasService;
+
+// Get list of user_has_voice_queues
+exports.index = function(req, res) {
+  UserHasService
+    .findAll(req.query ? {
+      where: req.query
+    } : {})
+    .then(function(user_has_voice_queues) {
+      return res.status(200).send(user_has_voice_queues);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single userHasService
+exports.show = function(req, res) {
+  UserHasService
+    .findById(req.params.id)
+    .then(function(userHasService) {
+      if (!userHasService) {
+        return res.sendStatus(404);
+      }
+      return res.send(userHasService);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new userHasService in the DB.
+exports.create = function(req, res, next) {
+  console.log(req.body);
+  UserHasService
+    .create(req.body)
+    .then(function(userHasService) {
+      return res.status(201).send(userHasService);
+    })
+    .catch(function(err) {
+      console.error(err);
+      return next(err);
+      // return handleError(res, err);
+    });
+};
+
+// Updates an existing userHasService in the DB.
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  UserHasService
+    .findById(req.params.id)
+    .then(function(userHasService) {
+      if (!userHasService) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(userHasService, req.body);
+      updated.save()
+        .then(function() {
+          return res.status(200).send(userHasService);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a userHasService from the DB.
+exports.destroy = function(req, res) {
+  UserHasService
+    .findById(req.params.id)
+    .then(function(userHasService) {
+      if (!userHasService) {
+        return res.sendStatus(404);
+      }
+      userHasService.destroy()
+        .then(function() {
+          return res.sendStatus(204);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index 444816d..816d536 100644 (file)
@@ -1 +1,27 @@
-var _0x1491=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x55\x73\x65\x72\x48\x61\x73\x53\x65\x72\x76\x69\x63\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x73\x65\x72\x76\x69\x63\x65\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x73\x65\x72\x76\x69\x63\x65\x3A\x72\x65\x6D\x6F\x76\x65"];_0x1491[0];var UserHasService=require(_0x1491[2])[_0x1491[1]];exports[_0x1491[3]]=function(_0xe2d9x2){UserHasService[_0x1491[4]](function(_0xe2d9x3){onSave(_0xe2d9x2,_0xe2d9x3)});UserHasService[_0x1491[5]](function(_0xe2d9x3){onSave(_0xe2d9x2,_0xe2d9x3)});UserHasService[_0x1491[6]](function(_0xe2d9x3){onRemove(_0xe2d9x2,_0xe2d9x3)})};function onSave(_0xe2d9x2,_0xe2d9x3,_0xe2d9x5){_0xe2d9x2[_0x1491[8]](_0x1491[7],_0xe2d9x3)}function onRemove(_0xe2d9x2,_0xe2d9x3,_0xe2d9x5){_0xe2d9x2[_0x1491[8]](_0x1491[9],_0xe2d9x3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var UserHasService = require('../../models').UserHasService;
+
+exports.register = function(socket) {
+  UserHasService.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  UserHasService.afterUpdate(function(doc) {
+    onSave(socket, doc);
+  });
+  UserHasService.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('user_has_service:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('user_has_service:remove', doc);
+}
index 2ec8b65..0822ab1 100644 (file)
@@ -1 +1,20 @@
-var _0xbb58=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x73\x68\x6F\x75\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x70\x70","\x73\x75\x70\x65\x72\x74\x65\x73\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x63\x6F\x6E\x74\x61\x63\x74\x6D\x61\x6E\x61\x67\x65\x72\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x73\x65\x72\x76\x69\x63\x65","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x70\x6F\x6E\x64\x20\x77\x69\x74\x68\x20\x4A\x53\x4F\x4E\x20\x61\x72\x72\x61\x79","\x69\x6E\x73\x74\x61\x6E\x63\x65\x6F\x66","\x62\x65","\x62\x6F\x64\x79","\x65\x6E\x64","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x65\x78\x70\x65\x63\x74","\x2F\x61\x70\x69\x2F\x63\x6F\x6E\x74\x61\x63\x74\x6D\x61\x6E\x61\x67\x65\x72\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x73\x65\x72\x76\x69\x63\x65","\x67\x65\x74"];_0xbb58[0];var should=require(_0xbb58[1]);var app=require(_0xbb58[2]);var request=require(_0xbb58[3]);describe(_0xbb58[4],function(){it(_0xbb58[5],function(_0x701ax4){request(app)[_0xbb58[13]](_0xbb58[12])[_0xbb58[11]](200)[_0xbb58[11]](_0xbb58[10],/json/)[_0xbb58[9]](function(_0x701ax5,_0x701ax6){if(_0x701ax5){return _0x701ax4(_0x701ax5)};_0x701ax6[_0xbb58[8]][_0xbb58[1]][_0xbb58[7]][_0xbb58[6]](Array);_0x701ax4()})})})
\ No newline at end of file
+'use strict';
+
+var should = require('should');
+var app = require('../../app');
+var request = require('supertest');
+
+describe('GET /api/contactmanager/user_has_service', function() {
+
+  it('should respond with JSON array', function(done) {
+    request(app)
+      .get('/api/contactmanager/user_has_service')
+      .expect(200)
+      .expect('Content-Type', /json/)
+      .end(function(err, res) {
+        if (err) return done(err);
+        res.body.should.be.instanceof(Array);
+        done();
+      });
+  });
+});
index 387db96..723bdc1 100644 (file)
@@ -1 +1,15 @@
-var _0x12e8=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x74\x65\x61\x6D\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x12e8[0];var express=require(_0x12e8[1]);var controller=require(_0x12e8[2]);var router=express.Router();router[_0x12e8[5]](_0x12e8[3],controller[_0x12e8[4]]);router[_0x12e8[5]](_0x12e8[6],controller[_0x12e8[7]]);router[_0x12e8[9]](_0x12e8[3],controller[_0x12e8[8]]);router[_0x12e8[11]](_0x12e8[6],controller[_0x12e8[10]]);router[_0x12e8[12]](_0x12e8[6],controller[_0x12e8[10]]);router[_0x12e8[14]](_0x12e8[6],controller[_0x12e8[13]]);module[_0x12e8[15]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./user_has_team.controller');
+
+var router = express.Router();
+
+router.get('/', controller.index);
+router.get('/:id', controller.show);
+router.post('/', controller.create);
+router.put('/:id', controller.update);
+router.patch('/:id', controller.update);
+router.delete('/:id', controller.destroy);
+
+module.exports = router;
\ No newline at end of file
index f8c0d6f..7f0f426 100644 (file)
@@ -1 +1,96 @@
-var _0xe06e=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x55\x73\x65\x72\x48\x61\x73\x54\x65\x61\x6D","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x69\x6E\x64\x65\x78","\x71\x75\x65\x72\x79","\x6C\x6F\x67","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79"];_0xe06e[0];var _=require(_0xe06e[1]);var UserHasTeam=require(_0xe06e[3])[_0xe06e[2]];exports[_0xe06e[4]]=function(_0x8ab9x3,_0x8ab9x4){console[_0xe06e[6]](_0x8ab9x3[_0xe06e[5]]);UserHasTeam[_0xe06e[11]]({where:_0x8ab9x3[_0xe06e[5]]})[_0xe06e[10]](function(_0x8ab9x6){return _0x8ab9x4[_0xe06e[9]](200)[_0xe06e[8]](_0x8ab9x6)})[_0xe06e[7]](function(_0x8ab9x5){return handleError(_0x8ab9x4,_0x8ab9x5)})};exports[_0xe06e[12]]=function(_0x8ab9x3,_0x8ab9x4){UserHasTeam[_0xe06e[16]](_0x8ab9x3[_0xe06e[15]][_0xe06e[14]])[_0xe06e[10]](function(_0x8ab9x7){if(!_0x8ab9x7){return _0x8ab9x4[_0xe06e[13]](404)};return _0x8ab9x4[_0xe06e[8]](_0x8ab9x7)})[_0xe06e[7]](function(_0x8ab9x5){return handleError(_0x8ab9x4,_0x8ab9x5)})};exports[_0xe06e[17]]=function(_0x8ab9x3,_0x8ab9x4){UserHasTeam[_0xe06e[17]](_0x8ab9x3[_0xe06e[18]])[_0xe06e[10]](function(_0x8ab9x7){return _0x8ab9x4[_0xe06e[9]](201)[_0xe06e[8]](_0x8ab9x7)})[_0xe06e[7]](function(_0x8ab9x5){return handleError(_0x8ab9x4,_0x8ab9x5)})};exports[_0xe06e[19]]=function(_0x8ab9x3,_0x8ab9x4){if(_0x8ab9x3[_0xe06e[18]][_0xe06e[14]]){delete _0x8ab9x3[_0xe06e[18]][_0xe06e[14]]};UserHasTeam[_0xe06e[16]](_0x8ab9x3[_0xe06e[15]][_0xe06e[14]])[_0xe06e[10]](function(_0x8ab9x7){if(!_0x8ab9x7){return _0x8ab9x4[_0xe06e[13]](404)};var _0x8ab9x8=_[_0xe06e[20]](_0x8ab9x7,_0x8ab9x3[_0xe06e[18]]);_0x8ab9x8[_0xe06e[21]]()[_0xe06e[10]](function(){return _0x8ab9x4[_0xe06e[9]](200)[_0xe06e[8]](_0x8ab9x7)})[_0xe06e[7]](function(_0x8ab9x5){return handleError(_0x8ab9x4,_0x8ab9x5)})})[_0xe06e[7]](function(_0x8ab9x5){return handleError(_0x8ab9x4,_0x8ab9x5)})};exports[_0xe06e[22]]=function(_0x8ab9x3,_0x8ab9x4){UserHasTeam[_0xe06e[16]](_0x8ab9x3[_0xe06e[15]][_0xe06e[14]])[_0xe06e[10]](function(_0x8ab9x7){if(!_0x8ab9x7){return _0x8ab9x4[_0xe06e[13]](404)};_0x8ab9x7[_0xe06e[22]]()[_0xe06e[10]](function(){return _0x8ab9x4[_0xe06e[13]](204)})[_0xe06e[7]](function(_0x8ab9x5){return handleError(_0x8ab9x4,_0x8ab9x5)})})[_0xe06e[7]](function(_0x8ab9x5){return handleError(_0x8ab9x4,_0x8ab9x5)})};function handleError(_0x8ab9x4,_0x8ab9x5){return _0x8ab9x4[_0xe06e[9]](500)[_0xe06e[8]](_0x8ab9x5)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var UserHasTeam = require('../../models').UserHasTeam;
+
+// Get list of user_has_teams
+exports.index = function(req, res) {
+  console.log(req.query);
+  UserHasTeam
+    .findAll({
+      where: req.query
+    })
+    .then(function(user_has_teams) {
+      return res.status(200).send(user_has_teams);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single user_has_team
+exports.show = function(req, res) {
+  UserHasTeam
+    .findById(req.params.id)
+    .then(function(user_has_team) {
+      if (!user_has_team) {
+        return res.sendStatus(404);
+      }
+      return res.send(user_has_team);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new user_has_team in the DB.
+exports.create = function(req, res) {
+  UserHasTeam
+    .create(req.body)
+    .then(function(user_has_team) {
+      return res.status(201).send(user_has_team);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Updates an existing user_has_team in the DB.
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  UserHasTeam
+    .findById(req.params.id)
+    .then(function(user_has_team) {
+      if (!user_has_team) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(user_has_team, req.body);
+      updated.save()
+        .then(function() {
+          return res.status(200).send(user_has_team);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a user_has_team from the DB.
+exports.destroy = function(req, res) {
+  UserHasTeam
+    .findById(req.params.id)
+    .then(function(user_has_team) {
+      if (!user_has_team) {
+        return res.sendStatus(404);
+      }
+      user_has_team.destroy()
+        .then(function() {
+          return res.sendStatus(204);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index 583a7c7..6d5861d 100644 (file)
@@ -1 +1,13 @@
-var _0x81a7=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74","\x55\x73\x65\x72\x48\x61\x73\x54\x65\x61\x6D","\x64\x65\x66\x69\x6E\x65"];_0x81a7[0];module[_0x81a7[1]]=function(_0x1d3ex1,_0x1d3ex2){var _0x1d3ex3=_0x1d3ex1[_0x81a7[3]](_0x81a7[2],{name:String,info:String,active:Boolean});return _0x1d3ex3}
\ No newline at end of file
+'use strict';
+
+module.export = function(sequelize, DataTypes) {
+
+  var UserHasTeam = sequelize.define('UserHasTeam', {
+    name: String,
+    info: String,
+    active: Boolean
+  });
+
+  return UserHasTeam;
+
+};
index cfef21d..879043c 100644 (file)
@@ -1 +1,24 @@
-var _0x497c=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x55\x73\x65\x72\x48\x61\x73\x54\x65\x61\x6D","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x74\x65\x61\x6D\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x74\x65\x61\x6D\x3A\x72\x65\x6D\x6F\x76\x65"];_0x497c[0];var user_has_team=require(_0x497c[2])[_0x497c[1]];exports[_0x497c[3]]=function(_0x1d11x2){user_has_team[_0x497c[4]](function(_0x1d11x3){onSave(_0x1d11x2,_0x1d11x3)});user_has_team[_0x497c[5]](function(_0x1d11x3){onRemove(_0x1d11x2,_0x1d11x3)})};function onSave(_0x1d11x2,_0x1d11x3,_0x1d11x5){_0x1d11x2[_0x497c[7]](_0x497c[6],_0x1d11x3)}function onRemove(_0x1d11x2,_0x1d11x3,_0x1d11x5){_0x1d11x2[_0x497c[7]](_0x497c[8],_0x1d11x3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var user_has_team = require('../../models').UserHasTeam;
+
+exports.register = function(socket) {
+  user_has_team.afterCreate(function (doc) {
+    onSave(socket, doc);
+  });
+  user_has_team.afterDestroy(function (doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('user_has_team:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('user_has_team:remove', doc);
+}
index ed55981..5cc5226 100644 (file)
@@ -1 +1,20 @@
-var _0xf855=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x73\x68\x6F\x75\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x70\x70","\x73\x75\x70\x65\x72\x74\x65\x73\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x74\x65\x61\x6D\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x70\x6F\x6E\x64\x20\x77\x69\x74\x68\x20\x4A\x53\x4F\x4E\x20\x61\x72\x72\x61\x79","\x69\x6E\x73\x74\x61\x6E\x63\x65\x6F\x66","\x62\x65","\x62\x6F\x64\x79","\x65\x6E\x64","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x65\x78\x70\x65\x63\x74","\x2F\x61\x70\x69\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x74\x65\x61\x6D\x73","\x67\x65\x74"];_0xf855[0];var should=require(_0xf855[1]);var app=require(_0xf855[2]);var request=require(_0xf855[3]);describe(_0xf855[4],function(){it(_0xf855[5],function(_0x5014x4){request(app)[_0xf855[13]](_0xf855[12])[_0xf855[11]](200)[_0xf855[11]](_0xf855[10],/json/)[_0xf855[9]](function(_0x5014x5,_0x5014x6){if(_0x5014x5){return _0x5014x4(_0x5014x5)};_0x5014x6[_0xf855[8]][_0xf855[1]][_0xf855[7]][_0xf855[6]](Array);_0x5014x4()})})})
\ No newline at end of file
+'use strict';
+
+var should = require('should');
+var app = require('../../app');
+var request = require('supertest');
+
+describe('GET /api/user_has_teams', function() {
+
+  it('should respond with JSON array', function(done) {
+    request(app)
+      .get('/api/user_has_teams')
+      .expect(200)
+      .expect('Content-Type', /json/)
+      .end(function(err, res) {
+        if (err) return done(err);
+        res.body.should.be.instanceof(Array);
+        done();
+      });
+  });
+});
\ No newline at end of file
index f96b1e2..72551d5 100644 (file)
@@ -1 +1,15 @@
-var _0xb99f=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x76\x6F\x69\x63\x65\x5F\x71\x75\x65\x75\x65\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0xb99f[0];var express=require(_0xb99f[1]);var controller=require(_0xb99f[2]);var router=express.Router();router[_0xb99f[5]](_0xb99f[3],controller[_0xb99f[4]]);router[_0xb99f[5]](_0xb99f[6],controller[_0xb99f[7]]);router[_0xb99f[9]](_0xb99f[3],controller[_0xb99f[8]]);router[_0xb99f[11]](_0xb99f[6],controller[_0xb99f[10]]);router[_0xb99f[12]](_0xb99f[6],controller[_0xb99f[10]]);router[_0xb99f[14]](_0xb99f[6],controller[_0xb99f[13]]);module[_0xb99f[15]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./user_has_voice_queue.controller');
+
+var router = express.Router();
+
+router.get('/', controller.index);
+router.get('/:id', controller.show);
+router.post('/', controller.create);
+router.put('/:id', controller.update);
+router.patch('/:id', controller.update);
+router.delete('/:id', controller.destroy);
+
+module.exports = router;
\ No newline at end of file
index aac7fae..f3e5d22 100644 (file)
@@ -1 +1,98 @@
-var _0xd8e9=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x55\x73\x65\x72\x48\x61\x73\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x6C\x6F\x67","\x65\x72\x72\x6F\x72","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79"];_0xd8e9[0];var _=require(_0xd8e9[1]);var UserHasVoiceQueue=require(_0xd8e9[3])[_0xd8e9[2]];exports[_0xd8e9[4]]=function(_0xe4a1x3,_0xe4a1x4){UserHasVoiceQueue[_0xd8e9[10]](_0xe4a1x3[_0xd8e9[9]]?{where:_0xe4a1x3[_0xd8e9[9]]}:{})[_0xd8e9[8]](function(_0xe4a1x6){return _0xe4a1x4[_0xd8e9[7]](200)[_0xd8e9[6]](_0xe4a1x6)})[_0xd8e9[5]](function(_0xe4a1x5){return handleError(_0xe4a1x4,_0xe4a1x5)})};exports[_0xd8e9[11]]=function(_0xe4a1x3,_0xe4a1x4){UserHasVoiceQueue[_0xd8e9[15]](_0xe4a1x3[_0xd8e9[14]][_0xd8e9[13]])[_0xd8e9[8]](function(_0xe4a1x7){if(!_0xe4a1x7){return _0xe4a1x4[_0xd8e9[12]](404)};return _0xe4a1x4[_0xd8e9[6]](_0xe4a1x7)})[_0xd8e9[5]](function(_0xe4a1x5){return handleError(_0xe4a1x4,_0xe4a1x5)})};exports[_0xd8e9[16]]=function(_0xe4a1x3,_0xe4a1x4,_0xe4a1x8){console[_0xd8e9[18]](_0xe4a1x3[_0xd8e9[17]]);UserHasVoiceQueue[_0xd8e9[16]](_0xe4a1x3[_0xd8e9[17]])[_0xd8e9[8]](function(_0xe4a1x7){return _0xe4a1x4[_0xd8e9[7]](201)[_0xd8e9[6]](_0xe4a1x7)})[_0xd8e9[5]](function(_0xe4a1x5){console[_0xd8e9[19]](_0xe4a1x5);return _0xe4a1x8(_0xe4a1x5)})};exports[_0xd8e9[20]]=function(_0xe4a1x3,_0xe4a1x4){if(_0xe4a1x3[_0xd8e9[17]][_0xd8e9[13]]){delete _0xe4a1x3[_0xd8e9[17]][_0xd8e9[13]]};UserHasVoiceQueue[_0xd8e9[15]](_0xe4a1x3[_0xd8e9[14]][_0xd8e9[13]])[_0xd8e9[8]](function(_0xe4a1x7){if(!_0xe4a1x7){return _0xe4a1x4[_0xd8e9[12]](404)};var _0xe4a1x9=_[_0xd8e9[21]](_0xe4a1x7,_0xe4a1x3[_0xd8e9[17]]);_0xe4a1x9[_0xd8e9[22]]()[_0xd8e9[8]](function(){return _0xe4a1x4[_0xd8e9[7]](200)[_0xd8e9[6]](_0xe4a1x7)})[_0xd8e9[5]](function(_0xe4a1x5){return handleError(_0xe4a1x4,_0xe4a1x5)})})[_0xd8e9[5]](function(_0xe4a1x5){return handleError(_0xe4a1x4,_0xe4a1x5)})};exports[_0xd8e9[23]]=function(_0xe4a1x3,_0xe4a1x4){UserHasVoiceQueue[_0xd8e9[15]](_0xe4a1x3[_0xd8e9[14]][_0xd8e9[13]])[_0xd8e9[8]](function(_0xe4a1x7){if(!_0xe4a1x7){return _0xe4a1x4[_0xd8e9[12]](404)};_0xe4a1x7[_0xd8e9[23]]()[_0xd8e9[8]](function(){return _0xe4a1x4[_0xd8e9[12]](204)})[_0xd8e9[5]](function(_0xe4a1x5){return handleError(_0xe4a1x4,_0xe4a1x5)})})[_0xd8e9[5]](function(_0xe4a1x5){return handleError(_0xe4a1x4,_0xe4a1x5)})};function handleError(_0xe4a1x4,_0xe4a1x5){return _0xe4a1x4[_0xd8e9[7]](500)[_0xd8e9[6]](_0xe4a1x5)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var UserHasVoiceQueue = require('../../models').UserHasVoiceQueue;
+
+// Get list of user_has_voice_queues
+exports.index = function(req, res) {
+  UserHasVoiceQueue
+    .findAll(req.query ? {
+      where: req.query
+    } : {})
+    .then(function(user_has_voice_queues) {
+      return res.status(200).send(user_has_voice_queues);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single userHasVoiceQueue
+exports.show = function(req, res) {
+  UserHasVoiceQueue
+    .findById(req.params.id)
+    .then(function(userHasVoiceQueue) {
+      if (!userHasVoiceQueue) {
+        return res.sendStatus(404);
+      }
+      return res.send(userHasVoiceQueue);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new userHasVoiceQueue in the DB.
+exports.create = function(req, res, next) {
+  console.log(req.body);
+  UserHasVoiceQueue
+    .create(req.body)
+    .then(function(userHasVoiceQueue) {
+      return res.status(201).send(userHasVoiceQueue);
+    })
+    .catch(function(err) {
+      console.error(err);
+      return next(err);
+      // return handleError(res, err);
+    });
+};
+
+// Updates an existing userHasVoiceQueue in the DB.
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  UserHasVoiceQueue
+    .findById(req.params.id)
+    .then(function(userHasVoiceQueue) {
+      if (!userHasVoiceQueue) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(userHasVoiceQueue, req.body);
+      updated.save()
+        .then(function() {
+          return res.status(200).send(userHasVoiceQueue);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a userHasVoiceQueue from the DB.
+exports.destroy = function(req, res) {
+  UserHasVoiceQueue
+    .findById(req.params.id)
+    .then(function(userHasVoiceQueue) {
+      if (!userHasVoiceQueue) {
+        return res.sendStatus(404);
+      }
+      userHasVoiceQueue.destroy()
+        .then(function() {
+          return res.sendStatus(204);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index 65a79d9..1ed4063 100644 (file)
@@ -1 +1,42 @@
-var _0xeb02=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x55\x73\x65\x72\x48\x61\x73\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x76\x6F\x69\x63\x65\x5F\x71\x75\x65\x75\x65\x3A\x73\x61\x76\x65","\x6C\x6F\x67\x67\x65\x64","\x6C\x6F\x67\x67\x65\x64\x41\x74","\x71\x75\x65\x75\x65","\x6D\x65\x6D\x62\x65\x72\x6E\x61\x6D\x65","\x69\x6E\x74\x65\x72\x66\x61\x63\x65","\x63\x61\x6C\x6C\x73\x74\x61\x6B\x65\x6E","\x6C\x61\x73\x74\x63\x61\x6C\x6C","\x73\x74\x61\x74\x75\x73","\x73\x74\x61\x74\x75\x73\x64\x65\x73\x63","\x73\x74\x61\x74\x75\x73\x41\x74","\x70\x61\x75\x73\x65\x64","\x70\x61\x75\x73\x65\x64\x41\x74","\x72\x65\x61\x73\x6F\x6E","\x55\x73\x65\x72\x49\x64","\x65\x6D\x69\x74","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x76\x6F\x69\x63\x65\x5F\x71\x75\x65\x75\x65\x3A\x72\x65\x6D\x6F\x76\x65"];_0xeb02[0];var UserHasVoiceQueue=require(_0xeb02[2])[_0xeb02[1]];exports[_0xeb02[3]]=function(_0xd8c0x2){UserHasVoiceQueue[_0xeb02[4]](function(_0xd8c0x3){onSave(_0xd8c0x2,_0xd8c0x3)});UserHasVoiceQueue[_0xeb02[5]](function(_0xd8c0x3){onSave(_0xd8c0x2,_0xd8c0x3)});UserHasVoiceQueue[_0xeb02[6]](function(_0xd8c0x3){onRemove(_0xd8c0x2,_0xd8c0x3)})};function onSave(_0xd8c0x2,_0xd8c0x3,_0xd8c0x5){_0xd8c0x2[_0xeb02[22]](_0xeb02[7],{logged:_0xd8c0x3[_0xeb02[8]],loggedAt:_0xd8c0x3[_0xeb02[9]],queue:_0xd8c0x3[_0xeb02[10]],membername:_0xd8c0x3[_0xeb02[11]],interface:_0xd8c0x3[_0xeb02[12]],callstaken:_0xd8c0x3[_0xeb02[13]],lastcall:_0xd8c0x3[_0xeb02[14]],status:_0xd8c0x3[_0xeb02[15]],statusdesc:_0xd8c0x3[_0xeb02[16]],statusAt:_0xd8c0x3[_0xeb02[17]],paused:_0xd8c0x3[_0xeb02[18]],pausedAt:_0xd8c0x3[_0xeb02[19]],reason:_0xd8c0x3[_0xeb02[20]],UserId:_0xd8c0x3[_0xeb02[21]]})}function onRemove(_0xd8c0x2,_0xd8c0x3,_0xd8c0x5){_0xd8c0x2[_0xeb02[22]](_0xeb02[23],_0xd8c0x3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var UserHasVoiceQueue = require('../../models').UserHasVoiceQueue;
+
+exports.register = function(socket) {
+  UserHasVoiceQueue.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  UserHasVoiceQueue.afterUpdate(function(doc) {
+    onSave(socket, doc);
+  });
+  UserHasVoiceQueue.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('user_has_voice_queue:save', {
+    logged: doc.logged,
+    loggedAt: doc.loggedAt,
+    queue: doc.queue,
+    membername: doc.membername,
+    interface: doc.interface,
+    callstaken: doc.callstaken,
+    lastcall: doc.lastcall,
+    status: doc.status,
+    statusdesc: doc.statusdesc,
+    statusAt: doc.statusAt,
+    paused: doc.paused,
+    pausedAt: doc.pausedAt,
+    reason: doc.reason,
+    UserId: doc.UserId
+  });
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('user_has_voice_queue:remove', doc);
+}
index d1d4718..0ac501f 100644 (file)
@@ -1 +1,20 @@
-var _0xa5c1=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x73\x68\x6F\x75\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x70\x70","\x73\x75\x70\x65\x72\x74\x65\x73\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x71\x75\x65\x75\x65\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x70\x6F\x6E\x64\x20\x77\x69\x74\x68\x20\x4A\x53\x4F\x4E\x20\x61\x72\x72\x61\x79","\x69\x6E\x73\x74\x61\x6E\x63\x65\x6F\x66","\x62\x65","\x62\x6F\x64\x79","\x65\x6E\x64","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x65\x78\x70\x65\x63\x74","\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x71\x75\x65\x75\x65\x73","\x67\x65\x74"];_0xa5c1[0];var should=require(_0xa5c1[1]);var app=require(_0xa5c1[2]);var request=require(_0xa5c1[3]);describe(_0xa5c1[4],function(){it(_0xa5c1[5],function(_0x2433x4){request(app)[_0xa5c1[13]](_0xa5c1[12])[_0xa5c1[11]](200)[_0xa5c1[11]](_0xa5c1[10],/json/)[_0xa5c1[9]](function(_0x2433x5,_0x2433x6){if(_0x2433x5){return _0x2433x4(_0x2433x5)};_0x2433x6[_0xa5c1[8]][_0xa5c1[1]][_0xa5c1[7]][_0xa5c1[6]](Array);_0x2433x4()})})})
\ No newline at end of file
+'use strict';
+
+var should = require('should');
+var app = require('../../app');
+var request = require('supertest');
+
+describe('GET /api/voice/user_has_queues', function() {
+
+  it('should respond with JSON array', function(done) {
+    request(app)
+      .get('/api/voice/user_has_queues')
+      .expect(200)
+      .expect('Content-Type', /json/)
+      .end(function(err, res) {
+        if (err) return done(err);
+        res.body.should.be.instanceof(Array);
+        done();
+      });
+  });
+});
index 559f1a6..4c9decb 100644 (file)
@@ -1 +1,17 @@
-var _0x800c=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x76\x61\x72\x69\x61\x62\x6C\x65\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0x800c[0];var express=require(_0x800c[1]);var controller=require(_0x800c[2]);var auth=require(_0x800c[3]);var router=express.Router();router[_0x800c[7]](_0x800c[4],auth[_0x800c[5]](),controller[_0x800c[6]]);router[_0x800c[7]](_0x800c[8],auth[_0x800c[5]](),controller[_0x800c[9]]);router[_0x800c[11]](_0x800c[4],auth[_0x800c[5]](),controller[_0x800c[10]]);router[_0x800c[13]](_0x800c[8],auth[_0x800c[5]](),controller[_0x800c[12]]);router[_0x800c[14]](_0x800c[8],auth[_0x800c[5]](),controller[_0x800c[12]]);router[_0x800c[16]](_0x800c[4],auth[_0x800c[5]](),controller[_0x800c[15]]);router[_0x800c[16]](_0x800c[8],auth[_0x800c[5]](),controller[_0x800c[17]]);module[_0x800c[18]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./variable.controller');
+var auth = require('../../auth/auth.service');
+
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), controller.index);
+router.get('/:id', auth.isAuthenticated(), controller.show);
+router.post('/', auth.isAuthenticated(), controller.create);
+router.put('/:id', auth.isAuthenticated(), controller.update);
+router.patch('/:id', auth.isAuthenticated(), controller.update);
+router.delete('/', auth.isAuthenticated(), controller.bulkDestroy);
+router.delete('/:id', auth.isAuthenticated(), controller.destroy);
+
+module.exports = router;
index eb123c5..2378a95 100644 (file)
@@ -1 +1,117 @@
-var _0x7aed=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x56\x61\x72\x69\x61\x62\x6C\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79","\x6D\x65\x73\x73\x61\x67\x65","\x56\x61\x72\x69\x61\x62\x6C\x65\x20\x69\x73\x20\x61\x73\x73\x6F\x63\x69\x61\x74\x65\x64\x20\x77\x69\x74\x68\x20\x61\x6E\x20\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x27\x73\x20\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x66\x69\x65\x6C\x64\x73","\x73\x63\x6F\x70\x65","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73","\x5A\x65\x6E\x64\x65\x73\x6B\x46\x69\x65\x6C\x64\x73","\x6C\x65\x6E\x67\x74\x68","\x44\x65\x73\x6B\x46\x69\x65\x6C\x64\x73","\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x46\x69\x65\x6C\x64\x73","\x46\x72\x65\x73\x68\x64\x65\x73\x6B\x46\x69\x65\x6C\x64\x73","\x53\x75\x67\x61\x72\x63\x72\x6D\x46\x69\x65\x6C\x64\x73"];_0x7aed[0];var _=require(_0x7aed[1]);var Variable=require(_0x7aed[3])[_0x7aed[2]];var Util=require(_0x7aed[4]);exports[_0x7aed[5]]=function(_0xadf1x4,_0xadf1x5,_0xadf1x6){return Variable[_0x7aed[12]](Util[_0x7aed[11]](_0xadf1x4[_0x7aed[10]]))[_0x7aed[9]](function(_0xadf1x8){_0xadf1x5[_0x7aed[8]](200)[_0x7aed[7]](_0xadf1x8)})[_0x7aed[6]](function(_0xadf1x7){return handleError(_0xadf1x5,_0xadf1x7)})};exports[_0x7aed[13]]=function(_0xadf1x4,_0xadf1x5){return Variable[_0x7aed[17]](_0xadf1x4[_0x7aed[16]][_0x7aed[15]])[_0x7aed[9]](function(_0xadf1x9){if(!_0xadf1x9){return _0xadf1x5[_0x7aed[14]](404)};return _0xadf1x5[_0x7aed[7]](_0xadf1x9)})[_0x7aed[6]](function(_0xadf1x7){return handleError(_0xadf1x5,_0xadf1x7)})};exports[_0x7aed[18]]=function(_0xadf1x4,_0xadf1x5){return Variable[_0x7aed[18]](_0xadf1x4[_0x7aed[19]])[_0x7aed[9]](function(_0xadf1x9){return _0xadf1x5[_0x7aed[8]](201)[_0x7aed[7]](_0xadf1x9)})[_0x7aed[6]](function(_0xadf1x7){return handleError(_0xadf1x5,_0xadf1x7)})};exports[_0x7aed[20]]=function(_0xadf1x4,_0xadf1x5){if(_0xadf1x4[_0x7aed[19]][_0x7aed[15]]){delete _0xadf1x4[_0x7aed[19]][_0x7aed[15]]};return Variable[_0x7aed[17]](_0xadf1x4[_0x7aed[16]][_0x7aed[15]])[_0x7aed[9]](function(_0xadf1x9){if(!_0xadf1x9){return _0xadf1x5[_0x7aed[14]](404)};var _0xadf1xa=_[_0x7aed[21]](_0xadf1x9,_0xadf1x4[_0x7aed[19]]);return _0xadf1xa[_0x7aed[22]]()})[_0x7aed[9]](function(_0xadf1x9){return _0xadf1x5[_0x7aed[8]](200)[_0x7aed[7]](_0xadf1x9)})[_0x7aed[6]](function(_0xadf1x7){return handleError(_0xadf1x5,_0xadf1x7)})};exports[_0x7aed[23]]=function(_0xadf1x4,_0xadf1x5){return Variable[_0x7aed[27]](_0x7aed[26])[_0x7aed[17]](_0xadf1x4[_0x7aed[16]][_0x7aed[15]])[_0x7aed[9]](function(_0xadf1x9){if(!_0xadf1x9){return _0xadf1x5[_0x7aed[14]](404)};if(variableHasAssociation(_0xadf1x9)){var _0xadf1x7= new Error();_0xadf1x7[_0x7aed[24]]=_0x7aed[25];throw _0xadf1x7};return _0xadf1x9[_0x7aed[23]]()})[_0x7aed[9]](function(){return _0xadf1x5[_0x7aed[14]](204)})[_0x7aed[6]](function(_0xadf1x7){return handleError(_0xadf1x5,_0xadf1x7)})};exports[_0x7aed[28]]=function(_0xadf1x4,_0xadf1x5){return Variable[_0x7aed[23]]({where:{id:_0xadf1x4[_0x7aed[10]][_0x7aed[29]]},individualHooks:true})[_0x7aed[9]](function(){return _0xadf1x5[_0x7aed[14]](204)})[_0x7aed[6]](function(_0xadf1x7){return handleError(_0xadf1x5,_0xadf1x7)})};function handleError(_0xadf1x5,_0xadf1x7){return _0xadf1x5[_0x7aed[8]](500)[_0x7aed[7]](_0xadf1x7)}function variableHasAssociation(_0xadf1x9){return ((_0xadf1x9[_0x7aed[30]]&&_0xadf1x9[_0x7aed[30]][_0x7aed[31]]>0)||(_0xadf1x9[_0x7aed[32]]&&_0xadf1x9[_0x7aed[32]][_0x7aed[31]]>0)||(_0xadf1x9[_0x7aed[33]]&&_0xadf1x9[_0x7aed[33]][_0x7aed[31]]>0)||(_0xadf1x9[_0x7aed[34]]&&_0xadf1x9[_0x7aed[34]][_0x7aed[31]]>0)||(_0xadf1x9[_0x7aed[35]]&&_0xadf1x9[_0x7aed[35]][_0x7aed[31]]>0))}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var Variable = require('../../models').Variable;
+var Util = require('../../config/util');
+
+// Get list of variables
+exports.index = function(req, res, next) {
+  return Variable
+    .findAndCountAll(Util.getQuery(req.query))
+    .then(function(result) {
+      res.status(200).send(result);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single variable
+exports.show = function(req, res) {
+  return Variable
+    .findById(req.params.id)
+    .then(function(variable) {
+      if (!variable) {
+        return res.sendStatus(404);
+      }
+      return res.send(variable);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new variable in the DB.
+exports.create = function(req, res) {
+  return Variable
+    .create(req.body)
+    .then(function(variable) {
+      return res.status(201).send(variable);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Updates an existing variable in the DB.
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+
+  return Variable
+    .findById(req.params.id)
+    .then(function(variable) {
+      if (!variable) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(variable, req.body);
+      return updated
+        .save();
+    })
+    .then(function(variable) {
+      return res.status(200).send(variable);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a variable from the DB.
+exports.destroy = function(req, res) {
+  return Variable
+    .scope('fields')
+    .findById(req.params.id)
+    .then(function(variable) {
+      if (!variable) {
+        return res.sendStatus(404);
+      }
+      if (variableHasAssociation(variable)) {
+        var err = new Error();
+        err.message = 'Variable is associated with an integration\'s configuration';
+        throw err;
+      }
+      return variable.destroy();
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+exports.bulkDestroy = function(req, res) {
+  return Variable
+    .destroy({
+      where: {
+        id: req.query.ids
+      },
+      individualHooks: true
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
+
+function variableHasAssociation(variable) {
+  return ((variable.ZendeskFields && variable.ZendeskFields.length > 0) || (variable.DeskFields && variable.DeskFields.length > 0) || (variable.SalesforceFields && variable.SalesforceFields.length >
+    0) || (variable.FreshdeskFields && variable.FreshdeskFields.length > 0) || (variable.SugarcrmFields && variable.SugarcrmFields.length > 0));
+}
index 34e2ba8..739f11c 100644 (file)
@@ -1 +1,24 @@
-var _0x78f4=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x56\x61\x72\x69\x61\x62\x6C\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x76\x61\x72\x69\x61\x62\x6C\x65\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x76\x61\x72\x69\x61\x62\x6C\x65\x3A\x72\x65\x6D\x6F\x76\x65"];_0x78f4[0];var Variable=require(_0x78f4[2])[_0x78f4[1]];exports[_0x78f4[3]]=function(_0x124fx2){Variable[_0x78f4[4]](function(_0x124fx3){onSave(_0x124fx2,_0x124fx3)});Variable[_0x78f4[5]](function(_0x124fx3){onRemove(_0x124fx2,_0x124fx3)})};function onSave(_0x124fx2,_0x124fx3,_0x124fx5){_0x124fx2[_0x78f4[7]](_0x78f4[6],_0x124fx3)}function onRemove(_0x124fx2,_0x124fx3,_0x124fx5){_0x124fx2[_0x78f4[7]](_0x78f4[8],_0x124fx3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var Variable = require('../../models').Variable;
+
+exports.register = function(socket) {
+  Variable.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  Variable.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('variable:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('variable:remove', doc);
+}
index f6e74b8..1b436c8 100644 (file)
@@ -1 +1,16 @@
-var _0x636c=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x76\x6F\x69\x63\x65\x5F\x63\x6F\x6E\x74\x65\x78\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x2F\x76\x61\x6C\x69\x64\x61\x74\x65","\x63\x6F\x6E\x74\x65\x78\x74\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0x636c[0];var express=require(_0x636c[1]);var controller=require(_0x636c[2]);var auth=require(_0x636c[3]);var router=express.Router();router[_0x636c[7]](_0x636c[4],auth[_0x636c[5]](),controller[_0x636c[6]]);router[_0x636c[7]](_0x636c[8],auth[_0x636c[5]](),controller[_0x636c[9]]);router[_0x636c[11]](_0x636c[4],auth[_0x636c[5]](),controller[_0x636c[10]]);router[_0x636c[11]](_0x636c[12],auth[_0x636c[5]](),controller[_0x636c[13]]);router[_0x636c[15]](_0x636c[8],auth[_0x636c[5]](),controller[_0x636c[14]]);router[_0x636c[17]](_0x636c[4],auth[_0x636c[5]](),controller[_0x636c[16]]);router[_0x636c[17]](_0x636c[8],auth[_0x636c[5]](),controller[_0x636c[18]]);module[_0x636c[19]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./voice_context.controller');
+var auth = require('../../auth/auth.service');
+
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), controller.index);
+router.get('/:id', auth.isAuthenticated(), controller.show);
+router.post('/', auth.isAuthenticated(), controller.create);
+router.post('/validate', auth.isAuthenticated(), controller.contextValidation);
+router.put('/:id', auth.isAuthenticated(), controller.update);
+router.delete('/', auth.isAuthenticated(), controller.bulkDestroy);
+router.delete('/:id', auth.isAuthenticated(), controller.destroy);
+module.exports = router;
index e8688e1..c6ec224 100644 (file)
@@ -1 +1,227 @@
-var _0xe0c5=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x56\x6F\x69\x63\x65\x43\x6F\x6E\x74\x65\x78\x74","\x56\x6F\x69\x63\x65\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x6F\x6E\x74\x65\x78\x74\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E","\x6E\x61\x6D\x65","\x62\x6F\x64\x79","\x66\x69\x6E\x64\x41\x6C\x6C","\x63\x72\x65\x61\x74\x65","\x6D\x65\x73\x73\x61\x67\x65","\x54\x68\x65\x20\x63\x6F\x6E\x74\x65\x78\x74\x20\x6E\x61\x6D\x65\x20\x61\x6C\x72\x65\x61\x64\x79\x20\x65\x78\x69\x73\x74\x73","\x74\x72\x61\x6E\x73\x6C\x61\x74\x65\x64\x4D\x65\x73\x73\x61\x67\x65","\x4D\x45\x53\x53\x41\x47\x45\x5F\x45\x58\x49\x53\x54\x5F\x43\x4F\x4E\x54\x45\x58\x54","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x6C\x65\x6E\x67\x74\x68","\x64\x65\x73\x74\x72\x6F\x79","\x65\x72\x72","\x6C\x6F\x67","\x54\x68\x65\x20\x63\x6F\x6E\x74\x65\x78\x74\x20\x69\x73\x20\x61\x73\x73\x6F\x63\x69\x61\x74\x65\x64\x20\x74\x6F\x20\x61\x20\x72\x6F\x75\x74\x65\x2C\x20\x64\x65\x6C\x65\x74\x65\x20\x6F\x72\x20\x63\x68\x61\x6E\x67\x65\x20\x69\x74\x20\x66\x69\x72\x73\x74","\x4D\x45\x53\x53\x41\x47\x45\x5F\x43\x4F\x4E\x54\x45\x58\x54\x5F\x52\x4F\x55\x54\x45\x5F\x41\x53\x53\x4F\x43\x49\x41\x54\x45\x44","\x64\x65\x66\x61\x75\x6C\x74\x45\x6E\x74\x72\x79","\x59\x6F\x75\x20\x63\x61\x6E\x27\x74\x20\x64\x65\x6C\x65\x74\x65\x20\x61\x20\x64\x65\x66\x61\x75\x6C\x74\x20\x65\x6E\x74\x72\x79\x21","\x4D\x45\x53\x53\x41\x47\x45\x5F\x44\x45\x46\x41\x55\x4C\x54\x5F\x45\x4E\x54\x52\x59","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73","\x66\x69\x6E\x64","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x6D\x61\x70"];_0xe0c5[0];var _=require(_0xe0c5[1]);var util=require(_0xe0c5[2]);var Util=require(_0xe0c5[3]);var sequelize=require(_0xe0c5[5])[_0xe0c5[4]];var VoiceContext=require(_0xe0c5[5])[_0xe0c5[6]];var VoiceExtension=require(_0xe0c5[5])[_0xe0c5[7]];exports[_0xe0c5[8]]=function(_0xdd96x7,_0xdd96x8,_0xdd96x9){return VoiceContext[_0xe0c5[15]](Util[_0xe0c5[14]](_0xdd96x7[_0xe0c5[13]]))[_0xe0c5[12]](function(_0xdd96xb){_0xdd96x8[_0xe0c5[11]](200)[_0xe0c5[10]](_0xdd96xb)})[_0xe0c5[9]](function(_0xdd96xa){return handleError(_0xdd96x8,_0xdd96xa)})};exports[_0xe0c5[16]]=function(_0xdd96x7,_0xdd96x8){return VoiceContext[_0xe0c5[20]](_0xdd96x7[_0xe0c5[19]][_0xe0c5[18]])[_0xe0c5[12]](function(_0xdd96xc){if(!_0xdd96xc){return _0xdd96x8[_0xe0c5[17]](404)};return _0xdd96x8[_0xe0c5[10]](_0xdd96xc)})[_0xe0c5[9]](function(_0xdd96xa){return handleError(_0xdd96x8,_0xdd96xa)})};exports[_0xe0c5[21]]=function(_0xdd96x7,_0xdd96x8){return VoiceContext[_0xe0c5[24]]({where:{name:_0xdd96x7[_0xe0c5[23]][_0xe0c5[22]]}})[_0xe0c5[12]](function(_0xdd96xd){if(!_0xdd96xd){return _0xdd96x8[_0xe0c5[17]](404)};return _0xdd96x8[_0xe0c5[10]](_0xdd96xd)})[_0xe0c5[9]](function(_0xdd96xa){return handleError(_0xdd96x8,_0xdd96xa)})};exports[_0xe0c5[25]]=function(_0xdd96x7,_0xdd96x8){return VoiceContext[_0xe0c5[25]](_0xdd96x7[_0xe0c5[23]])[_0xe0c5[12]](function(_0xdd96xc){return _0xdd96x8[_0xe0c5[11]](201)[_0xe0c5[10]](_0xdd96xc)})[_0xe0c5[9]](sequelize.UniqueConstraintError,function(_0xdd96xa){_0xdd96xa[_0xe0c5[26]]=_0xe0c5[27];_0xdd96xa[_0xe0c5[28]]=_0xe0c5[29];return handleError(_0xdd96x8,_0xdd96xa)})[_0xe0c5[9]](function(_0xdd96xa){return handleError(_0xdd96x8,_0xdd96xa)})};exports[_0xe0c5[30]]=function(_0xdd96x7,_0xdd96x8){return VoiceContext[_0xe0c5[24]]({where:{name:_0xdd96x7[_0xe0c5[23]][_0xe0c5[22]],id:{$ne:_0xdd96x7[_0xe0c5[23]][_0xe0c5[18]]}}})[_0xe0c5[12]](function(_0xdd96xf){if(!_0xdd96xf){return _0xdd96x8[_0xe0c5[17]](404)};if(_0xdd96xf[_0xe0c5[33]]>0){return _0xdd96x8[_0xe0c5[11]](500)[_0xe0c5[10]]({message:_0xe0c5[29]})};if(_0xdd96x7[_0xe0c5[23]][_0xe0c5[18]]){delete _0xdd96x7[_0xe0c5[23]][_0xe0c5[18]]};return VoiceContext[_0xe0c5[20]](_0xdd96x7[_0xe0c5[19]][_0xe0c5[18]])})[_0xe0c5[12]](function(_0xdd96xc){if(!_0xdd96xc){return _0xdd96x8[_0xe0c5[17]](404)};var _0xdd96xe=_[_0xe0c5[31]](_0xdd96xc,_0xdd96x7[_0xe0c5[23]]);return _0xdd96xe[_0xe0c5[32]]()})[_0xe0c5[12]](function(_0xdd96xc){return _0xdd96x8[_0xe0c5[11]](200)[_0xe0c5[10]](_0xdd96xc)})[_0xe0c5[9]](function(_0xdd96xa){return handleError(_0xdd96x8,_0xdd96xa)})};exports[_0xe0c5[34]]=function(_0xdd96x7,_0xdd96x8){var _0xdd96x10;return VoiceContext[_0xe0c5[20]](_0xdd96x7[_0xe0c5[19]][_0xe0c5[18]])[_0xe0c5[12]](function(_0xdd96xc){_0xdd96x10=_0xdd96xc;if(!_0xdd96x10){return _0xdd96x8[_0xe0c5[17]](404)};if(_0xdd96x10[_0xe0c5[39]]){return _0xdd96x8[_0xe0c5[11]](500)[_0xe0c5[10]]({message:_0xe0c5[40],translatedMessage:_0xe0c5[41]})};return VoiceExtension[_0xe0c5[24]]({where:{context:_0xdd96x10[_0xe0c5[22]],VoiceContextId:null}})})[_0xe0c5[12]](function(_0xdd96x11){console[_0xe0c5[36]](_0xdd96x11);if(_0xdd96x11[_0xe0c5[33]]>0){return _0xdd96x8[_0xe0c5[11]](500)[_0xe0c5[10]]({message:_0xe0c5[37],translatedMessage:_0xe0c5[38]})};return _0xdd96x10[_0xe0c5[34]]()})[_0xe0c5[12]](function(){return _0xdd96x8[_0xe0c5[17]](204)})[_0xe0c5[9]](function(_0xdd96xa){console[_0xe0c5[36]](_0xe0c5[35],_0xdd96xa);return handleError(_0xdd96x8,_0xdd96xa)})};exports[_0xe0c5[42]]=function(_0xdd96x7,_0xdd96x8){var _0xdd96x12;return VoiceContext[_0xe0c5[24]]({where:{id:_0xdd96x7[_0xe0c5[13]][_0xe0c5[43]]}})[_0xe0c5[12]](function(_0xdd96xd){_0xdd96x12=_0xdd96xd;var _0xdd96x13=_[_0xe0c5[44]](_0xdd96x12,{defaultEntry:true});if(_0xdd96x13){return _0xdd96x8[_0xe0c5[11]](500)[_0xe0c5[10]]({message:_0xe0c5[40],translatedMessage:_0xe0c5[41]})};if(!_0xdd96x12){return _0xdd96x8[_0xe0c5[17]](404)};var _0xdd96x14=_[_0xe0c5[46]](_[_0xe0c5[46]](_0xdd96x12,_0xe0c5[45]),_0xe0c5[22]);return VoiceExtension[_0xe0c5[24]]({where:{context:_0xdd96x14,VoiceContextId:null}})})[_0xe0c5[12]](function(_0xdd96x11){if(_0xdd96x11[_0xe0c5[33]]>_0xdd96x12[_0xe0c5[33]]){return _0xdd96x8[_0xe0c5[11]](500)[_0xe0c5[10]]({message:_0xe0c5[37],translatedMessage:_0xe0c5[38]})};return VoiceContext[_0xe0c5[34]]({where:{id:_0xdd96x7[_0xe0c5[13]][_0xe0c5[43]]},individualHooks:true})})[_0xe0c5[12]](function(){return _0xdd96x8[_0xe0c5[17]](204)})[_0xe0c5[9]](function(_0xdd96xa){console[_0xe0c5[36]](_0xdd96xa);return handleError(_0xdd96x8,_0xdd96xa)})};function handleError(_0xdd96x8,_0xdd96xa){return _0xdd96x8[_0xe0c5[11]](500)[_0xe0c5[10]](_0xdd96xa)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var util = require('util');
+
+var Util = require('../../config/util');
+var sequelize = require('../../models').sequelize;
+
+var VoiceContext = require('../../models').VoiceContext;
+var VoiceExtension = require('../../models').VoiceExtension;
+
+// Get list of agents
+exports.index = function(req, res, next) {
+  return VoiceContext
+    .findAndCountAll(Util.getQuery(req.query))
+    .then(function(result) {
+      res.status(200).send(result);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single voiceContext
+exports.show = function(req, res) {
+  return VoiceContext
+    .findById(req.params.id)
+    .then(function(voiceContext) {
+      if (!voiceContext) {
+        return res.sendStatus(404);
+      }
+      return res.send(voiceContext);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Validate the existence of a context
+exports.contextValidation = function(req, res) {
+  return VoiceContext
+    .findAll({
+      where: {
+        name: req.body.name
+      }
+    })
+    .then(function(voiceContexts) {
+      if (!voiceContexts) {
+        return res.sendStatus(404);
+      }
+      return res.send(voiceContexts);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new voiceContext in the DB.
+exports.create = function(req, res) {
+  return VoiceContext
+    .create(req.body)
+    .then(function(voiceContext) {
+      return res.status(201).send(voiceContext);
+    })
+    .catch(sequelize.UniqueConstraintError, function(err) {
+      err.message = 'The context name already exists';
+      err.translatedMessage = 'MESSAGE_EXIST_CONTEXT'
+      return handleError(res, err);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+
+};
+
+// Updates an existing voiceContext in the DB.
+exports.update = function(req, res) {
+  return VoiceContext
+    .findAll({
+      where: {
+        name: req.body.name,
+        id: {
+          $ne: req.body.id
+        }
+      }
+    })
+    .then(function(existingContexts) {
+      if (!existingContexts) {
+        return res.sendStatus(404);
+      }
+      if (existingContexts.length > 0) {
+        return res.status(500).send({
+          message: 'MESSAGE_EXIST_CONTEXT'
+        });
+      }
+      if (req.body.id) {
+        delete req.body.id;
+      }
+      return VoiceContext
+        .findById(req.params.id);
+    })
+    .then(function(voiceContext) {
+      if (!voiceContext) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(voiceContext, req.body);
+      return updated
+        .save();
+    })
+    .then(function(voiceContext) {
+      return res.status(200).send(voiceContext);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+
+};
+
+// Deletes a voiceContext from the DB.
+exports.destroy = function(req, res) {
+  var _voiceContext;
+
+  return VoiceContext
+    .findById(req.params.id)
+    .then(function(voiceContext) {
+      _voiceContext = voiceContext;
+      if (!_voiceContext) {
+        return res.sendStatus(404);
+      }
+      if (_voiceContext.defaultEntry) {
+        return res.status(500).send({
+          message: 'You can\'t delete a default entry!',
+          translatedMessage: 'MESSAGE_DEFAULT_ENTRY'
+        });
+      }
+      return VoiceExtension
+        .findAll({
+          where: {
+            context: _voiceContext.name,
+            VoiceContextId: null
+          }
+        });
+    })
+    .then(function(contextExtensions) {
+      console.log(contextExtensions);
+      if (contextExtensions.length > 0) {
+        return res.status(500).send({
+          message: 'The context is associated to a route, delete or change it first',
+          translatedMessage: 'MESSAGE_CONTEXT_ROUTE_ASSOCIATED'
+        });
+      }
+      return _voiceContext
+        .destroy();
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      console.log('err', err);
+      return handleError(res, err);
+    });
+
+};
+
+// Deletes a context from the DB.
+exports.bulkDestroy = function(req, res) {
+
+  var _voiceContexts;
+
+  return VoiceContext
+    .findAll({
+      where: {
+        id: req.query.ids
+      }
+    })
+    .then(function(voiceContexts) {
+      _voiceContexts = voiceContexts;
+      var isDefault = _.find(_voiceContexts, {
+        defaultEntry: true
+      });
+      if (isDefault) {
+        return res.status(500).send({
+          message: 'You can\'t delete a default entry!',
+          translatedMessage: 'MESSAGE_DEFAULT_ENTRY'
+        });
+      }
+      if (!_voiceContexts) {
+        return res.sendStatus(404);
+      }
+      var destroyContextsNames = _.map(_.map(_voiceContexts, 'dataValues'), 'name');
+
+      return VoiceExtension
+        .findAll({
+          where: {
+            context: destroyContextsNames,
+            VoiceContextId: null
+          }
+        });
+    })
+    .then(function(contextExtensions) {
+      if (contextExtensions.length > _voiceContexts.length) {
+        return res.status(500).send({
+          message: 'The context is associated to a route, delete or change it first',
+          translatedMessage: 'MESSAGE_CONTEXT_ROUTE_ASSOCIATED'
+        });
+      }
+
+      return VoiceContext
+        .destroy({
+          where: {
+            id: req.query.ids
+          },
+          individualHooks: true
+        });
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      console.log(err);
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index 7141070..c3841ec 100644 (file)
@@ -1 +1,24 @@
-var _0xd32b=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x56\x6F\x69\x63\x65\x43\x6F\x6E\x74\x65\x78\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x76\x6F\x69\x63\x65\x5F\x63\x6F\x6E\x74\x65\x78\x74\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x76\x6F\x69\x63\x65\x5F\x63\x6F\x6E\x74\x65\x78\x74\x3A\x72\x65\x6D\x6F\x76\x65"];_0xd32b[0];var VoiceContext=require(_0xd32b[2])[_0xd32b[1]];exports[_0xd32b[3]]=function(_0xe24ex2){VoiceContext[_0xd32b[4]](function(_0xe24ex3){onSave(_0xe24ex2,_0xe24ex3)});VoiceContext[_0xd32b[5]](function(_0xe24ex3){onRemove(_0xe24ex2,_0xe24ex3)})};function onSave(_0xe24ex2,_0xe24ex3,_0xe24ex5){_0xe24ex2[_0xd32b[7]](_0xd32b[6],_0xe24ex3)}function onRemove(_0xe24ex2,_0xe24ex3,_0xe24ex5){_0xe24ex2[_0xd32b[7]](_0xd32b[8],_0xe24ex3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var VoiceContext = require('../../models').VoiceContext;
+
+exports.register = function(socket) {
+  VoiceContext.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  VoiceContext.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('voice_context:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('voice_context:remove', doc);
+}
index 36ee238..1a60777 100644 (file)
@@ -1 +1,20 @@
-var _0xd2e4=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x73\x68\x6F\x75\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x70\x70","\x73\x75\x70\x65\x72\x74\x65\x73\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x2F\x63\x6F\x6E\x74\x65\x78\x74\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x70\x6F\x6E\x64\x20\x77\x69\x74\x68\x20\x4A\x53\x4F\x4E\x20\x61\x72\x72\x61\x79","\x69\x6E\x73\x74\x61\x6E\x63\x65\x6F\x66","\x62\x65","\x62\x6F\x64\x79","\x65\x6E\x64","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x65\x78\x70\x65\x63\x74","\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x2F\x63\x6F\x6E\x74\x65\x78\x74\x73","\x67\x65\x74"];_0xd2e4[0];var should=require(_0xd2e4[1]);var app=require(_0xd2e4[2]);var request=require(_0xd2e4[3]);describe(_0xd2e4[4],function(){it(_0xd2e4[5],function(_0x48a5x4){request(app)[_0xd2e4[13]](_0xd2e4[12])[_0xd2e4[11]](200)[_0xd2e4[11]](_0xd2e4[10],/json/)[_0xd2e4[9]](function(_0x48a5x5,_0x48a5x6){if(_0x48a5x5){return _0x48a5x4(_0x48a5x5)};_0x48a5x6[_0xd2e4[8]][_0xd2e4[1]][_0xd2e4[7]][_0xd2e4[6]](Array);_0x48a5x4()})})})
\ No newline at end of file
+'use strict';
+
+var should = require('should');
+var app = require('../../app');
+var request = require('supertest');
+
+describe('GET /api/voice/contexts', function() {
+
+  it('should respond with JSON array', function(done) {
+    request(app)
+      .get('/api/voice/contexts')
+      .expect(200)
+      .expect('Content-Type', /json/)
+      .end(function(err, res) {
+        if (err) return done(err);
+        res.body.should.be.instanceof(Array);
+        done();
+      });
+  });
+});
\ No newline at end of file
index 806fe4f..b0215fc 100644 (file)
@@ -1 +1,16 @@
-var _0x3a41=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x76\x6F\x69\x63\x65\x5F\x65\x78\x74\x65\x6E\x73\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0x3a41[0];var express=require(_0x3a41[1]);var controller=require(_0x3a41[2]);var auth=require(_0x3a41[3]);var router=express.Router();router[_0x3a41[7]](_0x3a41[4],auth[_0x3a41[5]](),controller[_0x3a41[6]]);router[_0x3a41[7]](_0x3a41[8],auth[_0x3a41[5]](),controller[_0x3a41[9]]);router[_0x3a41[11]](_0x3a41[4],auth[_0x3a41[5]](),controller[_0x3a41[10]]);router[_0x3a41[13]](_0x3a41[8],auth[_0x3a41[5]](),controller[_0x3a41[12]]);router[_0x3a41[15]](_0x3a41[4],auth[_0x3a41[5]](),controller[_0x3a41[14]]);router[_0x3a41[15]](_0x3a41[8],auth[_0x3a41[5]](),controller[_0x3a41[16]]);module[_0x3a41[17]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./voice_extension.controller');
+var auth = require('../../auth/auth.service');
+
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), controller.index);
+router.get('/:id', auth.isAuthenticated(), controller.show);
+router.post('/', auth.isAuthenticated(), controller.create);
+router.put('/:id', auth.isAuthenticated(), controller.update);
+router.delete('/', auth.isAuthenticated(), controller.bulkDestroy); //check it for apps
+router.delete('/:id', auth.isAuthenticated(), controller.destroy); //check it for apps
+
+module.exports = router;
index 7b05303..6dc7233 100644 (file)
@@ -1 +1,146 @@
-var _0xfe8e=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x56\x6F\x69\x63\x65\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x49\x6E\x74\x65\x72\x76\x61\x6C","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x53\x65\x71\x75\x65\x6C\x69\x7A\x65","\x75\x74\x69\x6C","\x61\x73\x79\x6E\x63","\x2E\x2E\x2F\x2E\x2E\x2F\x75\x74\x69\x6C\x73\x2F\x76\x6F\x69\x63\x65\x5F\x65\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x69\x6E\x64\x65\x78","\x6C\x6F\x67","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x72\x6F\x75\x74\x65\x73","\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x73\x63\x6F\x70\x65","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x4F\x6E\x65","\x63\x72\x65\x61\x74\x65","\x65\x72\x72","\x6D\x65\x73\x73\x61\x67\x65","\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E\x2F\x63\x6F\x6E\x74\x65\x78\x74\x20\x63\x6F\x6D\x62\x69\x6E\x61\x74\x69\x6F\x6E\x20\x61\x6C\x72\x65\x61\x64\x79\x20\x65\x78\x69\x73\x74","\x74\x72\x61\x6E\x73\x6C\x61\x74\x65\x64\x4D\x65\x73\x73\x61\x67\x65","\x4D\x45\x53\x53\x41\x47\x45\x5F\x45\x58\x49\x53\x54\x5F\x52\x4F\x55\x54\x45","\x62\x6F\x64\x79","\x63\x72\x65\x61\x74\x65\x41\x70\x70\x73","\x69\x73\x41\x72\x72\x61\x79","\x6C\x65\x6E\x67\x74\x68","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E","\x75\x70\x64\x61\x74\x65","\x72\x6F\x75\x74\x65\x55\x70\x64\x61\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x66\x69\x6E\x64\x42\x79\x49\x64","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79"];_0xfe8e[0];var _=require(_0xfe8e[1]);var VoiceExtension=require(_0xfe8e[3])[_0xfe8e[2]];var Interval=require(_0xfe8e[3])[_0xfe8e[4]];var sequelize=require(_0xfe8e[3])[_0xfe8e[5]];var Sequelize=require(_0xfe8e[3])[_0xfe8e[6]];var util=require(_0xfe8e[7]);var async=require(_0xfe8e[8]);var veUtil=require(_0xfe8e[9]);var Util=require(_0xfe8e[10]);var Applications=veUtil[_0xfe8e[11]];exports[_0xfe8e[12]]=function(_0x556axb,_0x556axc,_0x556axd){return VoiceExtension[_0xfe8e[23]](_0xfe8e[21],_0xfe8e[22])[_0xfe8e[20]](Util[_0xfe8e[19]](_0x556axb[_0xfe8e[18]]))[_0xfe8e[17]](function(_0x556axf){_0x556axc[_0xfe8e[16]](200)[_0xfe8e[15]](_0x556axf)})[_0xfe8e[14]](function(_0x556axe){console[_0xfe8e[13]](_0x556axe);return handleError(_0x556axc,_0x556axe)})};exports[_0xfe8e[24]]=function(_0x556axb,_0x556axc){VoiceExtension[_0xfe8e[23]](_0xfe8e[22])[_0xfe8e[28]]({where:{id:_0x556axb[_0xfe8e[27]][_0xfe8e[26]],VoiceExtensionId:null}})[_0xfe8e[17]](function(_0x556ax10){if(!_0x556ax10){return _0x556axc[_0xfe8e[25]](404)};return _0x556axc[_0xfe8e[15]](_0x556ax10)})[_0xfe8e[14]](function(_0x556axe){return handleError(_0x556axc,_0x556axe)})};exports[_0xfe8e[29]]=function(_0x556axb,_0x556axc){var _0x556ax11;return sequelize[_0xfe8e[39]](function(_0x556ax12){return VoiceExtension[_0xfe8e[29]](_0x556axb[_0xfe8e[35]],{transaction:_0x556ax12})[_0xfe8e[17]](function(_0x556ax13){_0x556ax11=_0x556ax13;if(_0x556axb[_0xfe8e[35]][_0xfe8e[11]]&&Array[_0xfe8e[37]](_0x556axb[_0xfe8e[35]].Applications)&&_0x556axb[_0xfe8e[35]][_0xfe8e[11]][_0xfe8e[38]]){return _0x556ax13}})[_0xfe8e[17]](veUtil[_0xfe8e[36]](_0x556axb[_0xfe8e[35]].Applications,_0x556ax12,_0x556axc))})[_0xfe8e[17]](function(){return _0x556axc[_0xfe8e[16]](201)[_0xfe8e[15]](_0x556ax11)})[_0xfe8e[14]](sequelize.UniqueConstraintError,function(_0x556axe){_0x556axe[_0xfe8e[31]]=_0xfe8e[32];_0x556axe[_0xfe8e[33]]=_0xfe8e[34];return handleError(_0x556axc,_0x556axe)})[_0xfe8e[14]](sequelize.ValidationError,function(_0x556axe){_0x556axe[_0xfe8e[31]]=_0xfe8e[32];_0x556axe[_0xfe8e[33]]=_0xfe8e[34];return handleError(_0x556axc,_0x556axe)})[_0xfe8e[14]](function(_0x556axe){console[_0xfe8e[13]](_0xfe8e[30],_0x556axe);return handleError(_0x556axc,_0x556axe)})};exports[_0xfe8e[40]]=function(_0x556axb,_0x556axc){return sequelize[_0xfe8e[39]](function(_0x556ax12){return veUtil[_0xfe8e[41]](_0x556axb,_0x556ax12)})[_0xfe8e[17]](function(){return _0x556axc[_0xfe8e[25]](200)})[_0xfe8e[14]](sequelize.UniqueConstraintError,function(_0x556axe){_0x556axe[_0xfe8e[31]]=_0xfe8e[32];_0x556axe[_0xfe8e[33]]=_0xfe8e[34];console[_0xfe8e[13]](_0x556axe);return handleError(_0x556axc,_0x556axe)})[_0xfe8e[14]](function(_0x556axe){console[_0xfe8e[13]](_0x556axe);return handleError(_0x556axc,_0x556axe)})};exports[_0xfe8e[42]]=function(_0x556axb,_0x556axc,_0x556axd){return sequelize[_0xfe8e[39]](function(_0x556ax12){return VoiceExtension[_0xfe8e[43]](_0x556axb[_0xfe8e[27]][_0xfe8e[26]])[_0xfe8e[17]](function(_0x556ax10){if(!_0x556ax10){return _0x556axc[_0xfe8e[25]](404)};return _0x556ax10[_0xfe8e[42]]()})})[_0xfe8e[17]](function(){return _0x556axc[_0xfe8e[25]](204)})[_0xfe8e[14]](function(_0x556axe){console[_0xfe8e[13]](_0x556axe);return handleError(_0x556axc,_0x556axe)})};exports[_0xfe8e[44]]=function(_0x556axb,_0x556axc){VoiceExtension[_0xfe8e[42]]({where:{id:_0x556axb[_0xfe8e[18]][_0xfe8e[26]]},individualHooks:true})[_0xfe8e[17]](function(){return _0x556axc[_0xfe8e[25]](204)})[_0xfe8e[14]](function(_0x556axe){return handleError(_0x556axc,_0x556axe)})};function handleError(_0x556axc,_0x556axe){return _0x556axc[_0xfe8e[16]](500)[_0xfe8e[15]](_0x556axe)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var VoiceExtension = require('../../models').VoiceExtension;
+var Interval = require('../../models').Interval;
+var sequelize = require('../../models').sequelize;
+var Sequelize = require('../../models').Sequelize;
+var util = require('util');
+var async = require('async');
+var veUtil = require('../../utils/voice_extension');
+var Util = require('../../config/util');
+
+var Applications = veUtil.Applications;
+
+// Get list of extensions
+exports.index = function(req, res, next) {
+  return VoiceExtension
+    .scope('routes', 'application')
+    .findAndCountAll(Util.getQuery(req.query))
+    .then(function(result) {
+      res.status(200).send(result);
+    })
+    .catch(function(err) {
+      console.log(err);
+      return handleError(res, err);
+    });
+};
+
+// Get a single voice_extension or application
+exports.show = function(req, res) {
+  VoiceExtension
+    .scope('application')
+    .findOne({
+      where: {
+        id: req.params.id,
+        VoiceExtensionId: null
+      }
+    })
+    .then(function(voice_extension) {
+      if (!voice_extension) {
+        return res.sendStatus(404);
+      }
+      return res.send(voice_extension);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+exports.create = function(req, res) {
+  var _route;
+  return sequelize.transaction(function(t) {
+      return VoiceExtension
+        .create(req.body, {
+          transaction: t
+        })
+        .then(function(route) {
+          _route = route;
+          if (req.body.Applications && Array.isArray(req.body.Applications) && req.body.Applications.length) {
+            return route;
+          }
+        })
+        .then(veUtil.createApps(req.body.Applications, t, res));
+    })
+    .then(function() {
+      return res.status(201).send(_route);
+    })
+    .catch(sequelize.UniqueConstraintError, function(err) {
+      err.message = 'Extension/context combination already exist';
+      err.translatedMessage = 'MESSAGE_EXIST_ROUTE'
+      return handleError(res, err);
+    })
+    .catch(sequelize.ValidationError, function(err) {
+      err.message = 'Extension/context combination already exist';
+      err.translatedMessage = 'MESSAGE_EXIST_ROUTE'
+      return handleError(res, err);
+    })
+    .catch(function(err) {
+      console.log('err', err);
+      return handleError(res, err);
+    });
+}
+
+
+
+// Updates an existing voice_extension in the DB.
+exports.update = function(req, res) {
+  return sequelize.transaction(function(t) {
+      return veUtil.routeUpdate(req, t);
+    })
+    .then(function() {
+      return res.sendStatus(200);
+    })
+    .catch(sequelize.UniqueConstraintError, function(err) {
+      err.message = 'Extension/context combination already exist';
+      err.translatedMessage = 'MESSAGE_EXIST_ROUTE'
+      console.log(err);
+      return handleError(res, err);
+    })
+    .catch(function(err) {
+      console.log(err);
+      return handleError(res, err);
+    });
+}
+
+// Deletes a voice_extension from the DB.
+exports.destroy = function(req, res, next) {
+  return sequelize.transaction(function(t) {
+      return VoiceExtension
+        .findById(req.params.id)
+        .then(function(voice_extension) {
+          if (!voice_extension) {
+            return res.sendStatus(404);
+          }
+          return voice_extension.destroy();
+        });
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      console.log(err);
+      return handleError(res, err);
+    });
+};
+
+// Deletes from the DB.
+exports.bulkDestroy = function(req, res) {
+  VoiceExtension
+    .destroy({
+      where: {
+        id: req.query.id
+      },
+      individualHooks: true
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index e2b0872..8da1778 100644 (file)
@@ -1 +1,34 @@
-var _0x7be1=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x56\x6F\x69\x63\x65\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x76\x6F\x69\x63\x65\x5F\x65\x78\x74\x65\x6E\x73\x69\x6F\x6E\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x76\x6F\x69\x63\x65\x5F\x65\x78\x74\x65\x6E\x73\x69\x6F\x6E\x3A\x72\x65\x6D\x6F\x76\x65","\x76\x6F\x69\x63\x65\x5F\x65\x78\x74\x65\x6E\x73\x69\x6F\x6E\x3A\x75\x70\x64\x61\x74\x65"];_0x7be1[0];var VoiceExtension=require(_0x7be1[2])[_0x7be1[1]];exports[_0x7be1[3]]=function(_0x2eeax2){VoiceExtension[_0x7be1[4]](function(_0x2eeax3){onSave(_0x2eeax2,_0x2eeax3)});VoiceExtension[_0x7be1[5]](function(_0x2eeax3){onRemove(_0x2eeax2,_0x2eeax3)});VoiceExtension[_0x7be1[6]](function(_0x2eeax3){onUpdate(_0x2eeax2,_0x2eeax3)})};function onSave(_0x2eeax2,_0x2eeax3,_0x2eeax5){_0x2eeax2[_0x7be1[8]](_0x7be1[7],_0x2eeax3)}function onRemove(_0x2eeax2,_0x2eeax3,_0x2eeax5){_0x2eeax2[_0x7be1[8]](_0x7be1[9],_0x2eeax3)}function onUpdate(_0x2eeax2,_0x2eeax3,_0x2eeax5){_0x2eeax2[_0x7be1[8]](_0x7be1[10],_0x2eeax3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var VoiceExtension = require('../../models').VoiceExtension;
+
+exports.register = function(socket) {
+  VoiceExtension.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  VoiceExtension.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+  // VoiceExtension.afterBulkDestroy(function(doc) {//causes a maximum stack range error due to the object sent being too big!!
+  //   onRemove(socket, doc);
+  // });
+  VoiceExtension.afterUpdate(function(doc) {
+    onUpdate(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('voice_extension:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('voice_extension:remove', doc);
+}
+
+function onUpdate(socket, doc, cb) {
+  socket.emit('voice_extension:update', doc);
+}
index 7c8525a..0971536 100644 (file)
@@ -1 +1,20 @@
-var _0x94ce=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x73\x68\x6F\x75\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x70\x70","\x73\x75\x70\x65\x72\x74\x65\x73\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x2F\x65\x78\x74\x65\x6E\x73\x69\x6F\x6E\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x70\x6F\x6E\x64\x20\x77\x69\x74\x68\x20\x4A\x53\x4F\x4E\x20\x61\x72\x72\x61\x79","\x69\x6E\x73\x74\x61\x6E\x63\x65\x6F\x66","\x62\x65","\x62\x6F\x64\x79","\x65\x6E\x64","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x65\x78\x70\x65\x63\x74","\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x2F\x65\x78\x74\x65\x6E\x73\x69\x6F\x6E\x73","\x67\x65\x74"];_0x94ce[0];var should=require(_0x94ce[1]);var app=require(_0x94ce[2]);var request=require(_0x94ce[3]);describe(_0x94ce[4],function(){it(_0x94ce[5],function(_0x4d89x4){request(app)[_0x94ce[13]](_0x94ce[12])[_0x94ce[11]](200)[_0x94ce[11]](_0x94ce[10],/json/)[_0x94ce[9]](function(_0x4d89x5,_0x4d89x6){if(_0x4d89x5){return _0x4d89x4(_0x4d89x5)};_0x4d89x6[_0x94ce[8]][_0x94ce[1]][_0x94ce[7]][_0x94ce[6]](Array);_0x4d89x4()})})})
\ No newline at end of file
+'use strict';
+
+var should = require('should');
+var app = require('../../app');
+var request = require('supertest');
+
+describe('GET /api/voice/extensions', function() {
+
+  it('should respond with JSON array', function(done) {
+    request(app)
+      .get('/api/voice/extensions')
+      .expect(200)
+      .expect('Content-Type', /json/)
+      .end(function(err, res) {
+        if (err) return done(err);
+        res.body.should.be.instanceof(Array);
+        done();
+      });
+  });
+});
\ No newline at end of file
index 1b235ec..59cc818 100644 (file)
@@ -1 +1,21 @@
-var _0x6c5a=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x76\x6F\x69\x63\x65\x5F\x6D\x75\x73\x69\x63\x6F\x6E\x68\x6F\x6C\x64\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x73\x74\x72\x65\x61\x6D","\x73\x74\x72\x65\x61\x6D","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x2F\x3A\x69\x64\x2F\x66\x69\x6C\x65\x73","\x73\x68\x6F\x77\x41\x75\x64\x69\x6F\x46\x69\x6C\x65\x73","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x2F\x76\x61\x6C\x69\x64\x61\x74\x65","\x6D\x6F\x68\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E","\x61\x64\x64\x46\x69\x6C\x65\x73","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65\x41\x75\x64\x69\x6F\x46\x69\x6C\x65\x73","\x65\x78\x70\x6F\x72\x74\x73"];_0x6c5a[0];var express=require(_0x6c5a[1]);var controller=require(_0x6c5a[2]);var auth=require(_0x6c5a[3]);var router=express.Router();router[_0x6c5a[7]](_0x6c5a[4],auth[_0x6c5a[5]](),controller[_0x6c5a[6]]);router[_0x6c5a[7]](_0x6c5a[8],auth[_0x6c5a[5]](),controller[_0x6c5a[9]]);router[_0x6c5a[7]](_0x6c5a[10],auth[_0x6c5a[5]](),controller[_0x6c5a[11]]);router[_0x6c5a[7]](_0x6c5a[12],auth[_0x6c5a[5]](),controller[_0x6c5a[13]]);router[_0x6c5a[15]](_0x6c5a[4],auth[_0x6c5a[5]](),controller[_0x6c5a[14]]);router[_0x6c5a[15]](_0x6c5a[16],auth[_0x6c5a[5]](),controller[_0x6c5a[17]]);router[_0x6c5a[15]](_0x6c5a[12],auth[_0x6c5a[5]](),controller[_0x6c5a[18]]);router[_0x6c5a[20]](_0x6c5a[10],auth[_0x6c5a[5]](),controller[_0x6c5a[19]]);router[_0x6c5a[22]](_0x6c5a[4],auth[_0x6c5a[5]](),controller[_0x6c5a[21]]);router[_0x6c5a[22]](_0x6c5a[10],auth[_0x6c5a[5]](),controller[_0x6c5a[23]]);router[_0x6c5a[22]](_0x6c5a[12],auth[_0x6c5a[5]](),controller[_0x6c5a[24]]);module[_0x6c5a[25]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./voice_musiconhold.controller');
+var auth = require('../../auth/auth.service');
+
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), controller.index);
+router.get('/stream', auth.isAuthenticated(), controller.stream);
+router.get('/:id', auth.isAuthenticated(), controller.show);
+router.get('/:id/files', auth.isAuthenticated(), controller.showAudioFiles);
+router.post('/', auth.isAuthenticated(), controller.create);
+router.post('/validate', auth.isAuthenticated(), controller.mohValidation);
+router.post('/:id/files', auth.isAuthenticated(), controller.addFiles);
+router.put('/:id', auth.isAuthenticated(), controller.update);
+router.delete('/', auth.isAuthenticated(), controller.bulkDestroy);
+router.delete('/:id', auth.isAuthenticated(), controller.destroy);
+router.delete('/:id/files', auth.isAuthenticated(), controller.deleteAudioFiles);
+
+module.exports = router;
index 8cf6316..6c74d50 100644 (file)
@@ -1 +1,283 @@
-var _0x6886=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x66\x73","\x6C\x6F\x64\x61\x73\x68","\x70\x61\x74\x68","\x75\x74\x69\x6C","\x66\x73\x2D\x65\x78\x74\x72\x61","\x72\x65\x6D\x6F\x76\x65","\x66\x69\x6C\x65\x2D\x62\x61\x73\x65\x36\x34","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x53\x6F\x75\x6E\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x56\x6F\x69\x63\x65\x4D\x75\x73\x69\x63\x4F\x6E\x48\x6F\x6C\x64","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x61\x64\x64\x46\x69\x6C\x65\x73","\x72\x6F\x6F\x74","\x73\x65\x72\x76\x65\x72\x2F\x66\x69\x6C\x65\x73\x2F\x73\x6F\x75\x6E\x64\x73\x2F\x63\x6F\x6E\x76\x65\x72\x74\x65\x64","\x6A\x6F\x69\x6E","\x64\x69\x72\x65\x63\x74\x6F\x72\x79","\x64\x69\x73\x70\x6C\x61\x79\x5F\x6E\x61\x6D\x65","\x2E\x77\x61\x76","\x73\x61\x76\x65\x5F\x6E\x61\x6D\x65","\x63\x6F\x70\x79\x53\x79\x6E\x63","\x66\x6F\x72\x45\x61\x63\x68","\x30\x37\x37\x37","\x63\x68\x6D\x6F\x64\x53\x79\x6E\x63","\x73\x6F\x75\x6E\x64\x73","\x62\x6F\x64\x79","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77\x41\x75\x64\x69\x6F\x46\x69\x6C\x65\x73","\x66\x69\x6C\x65\x73","\x72\x65\x61\x64\x64\x69\x72","\x64\x65\x6C\x65\x74\x65\x41\x75\x64\x69\x6F\x46\x69\x6C\x65\x73","\x2F","\x66\x69\x6C\x65\x6E\x61\x6D\x65","\x75\x6E\x6C\x69\x6E\x6B","\x6D\x6F\x68\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E","\x6C\x6F\x67","\x6E\x61\x6D\x65","\x63\x72\x65\x61\x74\x65","\x73\x65\x72\x76\x65\x72\x2F\x66\x69\x6C\x65\x73\x2F\x6D\x6F\x68","\x72\x6F\x6C\x6C\x62\x61\x63\x6B","\x66\x69\x6C\x65\x20\x65\x72\x72\x6F\x72","\x4D\x45\x53\x53\x41\x47\x45\x5F\x46\x49\x4C\x45\x5F\x43\x52\x45\x41\x54\x49\x4F\x4E\x5F\x45\x52\x52\x4F\x52","\x63\x6F\x6D\x6D\x69\x74","\x66\x69\x6C\x65\x20\x63\x72\x65\x61\x74\x65\x64","\x6D\x6B\x64\x69\x72","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E","\x75\x70\x64\x61\x74\x65","\x65\x72\x72","\x65\x72\x72\x6F\x72","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x61\x6C\x6C","\x70\x75\x73\x68","\x69\x64\x73","\x73\x74\x72\x65\x61\x6D","\x65\x6E\x63\x6F\x64\x65"];_0x6886[0];var fs=require(_0x6886[1]);var _=require(_0x6886[2]);var path=require(_0x6886[3]);var util=require(_0x6886[4]);var fse=require(_0x6886[5]);var remove=require(_0x6886[6]);var base64=require(_0x6886[7]);var config=require(_0x6886[8]);var Util=require(_0x6886[9]);var Sound=require(_0x6886[11])[_0x6886[10]];var sequelize=require(_0x6886[11])[_0x6886[12]];var VoiceMusicOnHold=require(_0x6886[11])[_0x6886[13]];exports[_0x6886[14]]=function(_0xae84xd,_0xae84xe){return VoiceMusicOnHold[_0x6886[21]](Util[_0x6886[20]](_0xae84xd[_0x6886[19]]))[_0x6886[18]](function(_0xae84x10){_0xae84xe[_0x6886[17]](200)[_0x6886[16]](_0xae84x10)})[_0x6886[15]](function(_0xae84xf){return handleError(_0xae84xe,_0xae84xf)})};exports[_0x6886[22]]=function(_0xae84xd,_0xae84xe){return VoiceMusicOnHold[_0x6886[26]](_0xae84xd[_0x6886[25]][_0x6886[24]])[_0x6886[18]](function(_0xae84x11){if(!_0xae84x11){return _0xae84xe[_0x6886[23]](404)};return _0xae84xe[_0x6886[16]](_0xae84x11)})[_0x6886[15]](function(_0xae84xf){return handleError(_0xae84xe,_0xae84xf)})};exports[_0x6886[27]]=function(_0xae84xd,_0xae84xe){var _0xae84x12;return VoiceMusicOnHold[_0x6886[26]](_0xae84xd[_0x6886[25]][_0x6886[24]])[_0x6886[18]](function(_0xae84x11){if(!_0xae84x11){return _0xae84xe[_0x6886[23]](404)};_0xae84x12=_0xae84x11;return Sound[_0x6886[41]]({where:{id:_0xae84xd[_0x6886[40]][_0x6886[39]]}})})[_0x6886[18]](function(_0xae84x13){var _0xae84x14=path[_0x6886[30]](config[_0x6886[28]],_0x6886[29]);var _0xae84x15;_0xae84x13[_0x6886[36]](function(_0xae84x16){_0xae84x15=path[_0x6886[30]](_0xae84x12[_0x6886[31]],_0xae84x16[_0x6886[32]]+_0x6886[33]);fse[_0x6886[35]](path[_0x6886[30]](_0xae84x14,_0xae84x16[_0x6886[34]]+_0x6886[33]),_0xae84x15)});fs[_0x6886[38]](_0xae84x15,parseInt(_0x6886[37],8));_0xae84xe[_0x6886[23]](200)})[_0x6886[15]](function(_0xae84xf){return handleError(_0xae84xe,_0xae84xf)})};exports[_0x6886[42]]=function(_0xae84xd,_0xae84xe){var _0xae84x17={};VoiceMusicOnHold[_0x6886[26]](_0xae84xd[_0x6886[25]][_0x6886[24]])[_0x6886[18]](function(_0xae84x11){if(!_0xae84x11){return _0xae84xe[_0x6886[23]](404)};_0xae84x17[_0x6886[3]]=_0xae84x11[_0x6886[31]];fs[_0x6886[44]](_0xae84x11[_0x6886[31]],function(_0xae84xf,_0xae84x18){if(!_0xae84xf){_0xae84x17[_0x6886[43]]=_0xae84x18;return _0xae84xe[_0x6886[16]](_0xae84x17)}else {throw _0xae84xf}})})[_0x6886[15]](function(_0xae84xf){return handleError(_0xae84xe,_0xae84xf)})};exports[_0x6886[45]]=function(_0xae84xd,_0xae84xe){VoiceMusicOnHold[_0x6886[26]](_0xae84xd[_0x6886[25]][_0x6886[24]])[_0x6886[18]](function(_0xae84x11){if(!_0xae84x11){return _0xae84xe[_0x6886[23]](404)};var _0xae84x19=_0xae84x11[_0x6886[31]]+_0x6886[46]+_0xae84xd[_0x6886[19]][_0x6886[47]];fs[_0x6886[48]](_0xae84x19,function(_0xae84xf){if(_0xae84xf){return handleError(_0xae84xe,_0xae84xf)}else {return _0xae84xe[_0x6886[23]](204)}})})[_0x6886[15]](function(_0xae84xf){return handleError(_0xae84xe,_0xae84xf)})};exports[_0x6886[49]]=function(_0xae84xd,_0xae84xe){console[_0x6886[50]](_0xae84xd[_0x6886[40]]);VoiceMusicOnHold[_0x6886[41]]({where:{name:_0xae84xd[_0x6886[40]][_0x6886[51]]}})[_0x6886[18]](function(_0xae84x1a){if(!_0xae84x1a){return _0xae84xe[_0x6886[23]](404)};return _0xae84xe[_0x6886[16]](_0xae84x1a)})[_0x6886[15]](function(_0xae84xf){return handleError(_0xae84xe,_0xae84xf)})};exports[_0x6886[52]]=function(_0xae84xd,_0xae84xe){return sequelize[_0x6886[60]]()[_0x6886[18]](function(_0xae84x1b){_0xae84xd[_0x6886[40]][_0x6886[31]]=path[_0x6886[30]](config[_0x6886[28]],_0x6886[53],_0xae84xd[_0x6886[40]][_0x6886[51]]);return VoiceMusicOnHold[_0x6886[52]](_0xae84xd[_0x6886[40]],{transaction:_0xae84x1b})[_0x6886[18]](function(_0xae84x11){fs[_0x6886[59]](_0xae84x11[_0x6886[31]],parseInt(_0x6886[37],8),function(_0xae84xf){if(_0xae84xf){console[_0x6886[50]](_0x6886[55]);_0xae84x1b[_0x6886[54]]();return _0xae84xe[_0x6886[17]](500)[_0x6886[16]]({message:_0x6886[56]})};_0xae84x1b[_0x6886[57]]();console[_0x6886[50]](_0x6886[58]);return _0xae84xe[_0x6886[17]](201)[_0x6886[16]](_0xae84x11)})})[_0x6886[15]](function(_0xae84xf){_0xae84x1b[_0x6886[54]]()})})};exports[_0x6886[61]]=function(_0xae84xd,_0xae84xe){if(_0xae84xd[_0x6886[40]][_0x6886[24]]){delete _0xae84xd[_0x6886[40]][_0x6886[24]]};return VoiceMusicOnHold[_0x6886[26]](_0xae84xd[_0x6886[25]][_0x6886[24]])[_0x6886[18]](function(_0xae84x11){if(!_0xae84x11){return _0xae84xe[_0x6886[23]](404)};var _0xae84x1c=_[_0x6886[64]](_0xae84x11,_0xae84xd[_0x6886[40]]);return _0xae84x1c[_0x6886[65]]()})[_0x6886[18]](function(_0xae84x11){return _0xae84xe[_0x6886[17]](200)[_0x6886[16]](_0xae84x11)})[_0x6886[15]](function(_0xae84xf){console[_0x6886[63]](_0x6886[62],_0xae84xf);return handleError(_0xae84xe,_0xae84xf)})};exports[_0x6886[66]]=function(_0xae84xd,_0xae84xe){var _0xae84x1d;return sequelize[_0x6886[60]](function(_0xae84x1b){return VoiceMusicOnHold[_0x6886[26]](_0xae84xd[_0x6886[25]][_0x6886[24]])[_0x6886[18]](function(_0xae84x11){if(!_0xae84x11){return _0xae84xe[_0x6886[23]](404)};_0xae84x1d=_0xae84x11;return _0xae84x11[_0x6886[66]]({transaction:_0xae84x1b})})[_0x6886[18]](function(){remove(_0xae84x1d[_0x6886[31]],function(_0xae84xf){if(_0xae84xf){console[_0x6886[50]](_0xae84xf)};return _0xae84xe[_0x6886[23]](204)})})})[_0x6886[15]](function(_0xae84xf){return handleError(_0xae84xe,_0xae84xf)})};exports[_0x6886[67]]=function(_0xae84xd,_0xae84xe){var _0xae84x1e;return sequelize[_0x6886[60]](function(_0xae84x1b){return VoiceMusicOnHold[_0x6886[41]]({where:{id:_0xae84xd[_0x6886[19]][_0x6886[70]]}})[_0x6886[18]](function(_0xae84x20){if(!_0xae84x20){return _0xae84xe[_0x6886[23]](404)};_0xae84x1e=_0xae84x20;var _0xae84x21=[];_0xae84x20[_0x6886[36]](function(_0xae84x1f){_0xae84x21[_0x6886[69]](_0xae84x1f[_0x6886[66]]({transaction:_0xae84x1b}))});return _0xae84x21})[_0x6886[68]]()[_0x6886[18]](function(){_0xae84x1e[_0x6886[36]](function(_0xae84x1f){remove(_0xae84x1f[_0x6886[31]],function(_0xae84xf){if(_0xae84xf){console[_0x6886[50]](_0xae84xf);throw _0xae84xf}})})})})[_0x6886[18]](function(){return _0xae84xe[_0x6886[23]](204)})[_0x6886[15]](function(_0xae84xf){return handleError(_0xae84xe,_0xae84xf)})};exports[_0x6886[71]]=function(_0xae84xd,_0xae84xe){var _0xae84x22=decodeURI(_0xae84xd[_0x6886[19]][_0x6886[3]]);base64[_0x6886[72]](_0xae84x22,function(_0xae84xf,_0xae84x23){if(_0xae84xf){return handleError(_0xae84xe,_0xae84xf)}else {return _0xae84xe[_0x6886[17]](200)[_0x6886[16]](_0xae84x23)}})};function handleError(_0xae84xe,_0xae84xf){return _0xae84xe[_0x6886[17]](500)[_0x6886[16]](_0xae84xf)}
\ No newline at end of file
+'use strict';
+
+var fs = require('fs');
+var _ = require('lodash');
+var path = require('path');
+var util = require('util');
+var fse = require('fs-extra');
+var remove = require('remove');
+var base64 = require('file-base64');
+
+var config = require('../../config/environment');
+var Util = require('../../config/util');
+
+var Sound = require('../../models').Sound;
+var sequelize = require('../../models').sequelize;
+var VoiceMusicOnHold = require('../../models').VoiceMusicOnHold;
+
+
+// Get list of voice_musiconholds
+exports.index = function(req, res) {
+  return VoiceMusicOnHold
+    .findAndCountAll(Util.getQuery(req.query))
+    .then(function(result) {
+      res.status(200).send(result);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single voiceMusiconhold
+exports.show = function(req, res) {
+  return VoiceMusicOnHold
+    .findById(req.params.id)
+    .then(function(voiceMusiconhold) {
+      if (!voiceMusiconhold) {
+        return res.sendStatus(404);
+      }
+      return res.send(voiceMusiconhold);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Add files to moh class
+exports.addFiles = function(req, res) {
+  var _voiceMusiconhold;
+  return VoiceMusicOnHold
+    .findById(req.params.id)
+    .then(function(voiceMusiconhold) {
+      if (!voiceMusiconhold) {
+        return res.sendStatus(404);
+      }
+      _voiceMusiconhold = voiceMusiconhold;
+
+      return Sound
+        .findAll({
+          where: {
+            id: req.body.sounds
+          }
+        });
+    })
+    .then(function(soundFiles) {
+      var origin = path.join(config.root, 'server/files/sounds/converted');
+      var dest;
+      soundFiles.forEach(function(elem) {
+        dest = path.join(_voiceMusiconhold.directory, elem.display_name + '.wav');
+        fse.copySync(path.join(origin, elem.save_name + '.wav'), dest);
+      });
+      fs.chmodSync(dest, parseInt('0777', 8));
+      res.sendStatus(200);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+exports.showAudioFiles = function(req, res) {
+  var fileObject = {};
+  VoiceMusicOnHold
+    .findById(req.params.id)
+    .then(function(voiceMusiconhold) {
+      if (!voiceMusiconhold) {
+        return res.sendStatus(404);
+      }
+      fileObject.path = voiceMusiconhold.directory;
+      fs.readdir(voiceMusiconhold.directory, function(err, files) {
+        if (!err) {
+          fileObject.files = files;
+          return res.send(fileObject);
+        } else {
+          throw err;
+        }
+      });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+exports.deleteAudioFiles = function(req, res) {
+  VoiceMusicOnHold
+    .findById(req.params.id)
+    .then(function(voiceMusiconhold) {
+      if (!voiceMusiconhold) {
+        return res.sendStatus(404);
+      }
+      var deletePath = voiceMusiconhold.directory + '/' + req.query.filename;
+      fs.unlink(deletePath, function(err) {
+        if (err) {
+          return handleError(res, err);
+        } else {
+          return res.sendStatus(204);
+        }
+      });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Validate the existence of a route
+exports.mohValidation = function(req, res) {
+  console.log(req.body);
+  VoiceMusicOnHold
+    .findAll({
+      where: {
+        name: req.body.name,
+      }
+    })
+    .then(function(voice_mohs) {
+      if (!voice_mohs) {
+        return res.sendStatus(404);
+      }
+      return res.send(voice_mohs);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new voiceMusiconhold in the DB.
+exports.create = function(req, res) {
+  return sequelize.transaction().then(function(t) {
+    req.body.directory = path.join(config.root, 'server/files/moh', req.body.name);
+    return VoiceMusicOnHold
+      .create(req.body, {
+        transaction: t
+      })
+      .then(function(voiceMusiconhold) {
+        fs.mkdir(voiceMusiconhold.directory, parseInt('0777', 8), function(err) {
+          if (err) {
+            console.log('file error');
+            t.rollback();
+            return res.status(500).send({
+              message: 'MESSAGE_FILE_CREATION_ERROR'
+            });
+          }
+          t.commit();
+          console.log('file created');
+          return res.status(201).send(voiceMusiconhold);
+        });
+      })
+      .catch(function(err) {
+        t.rollback();
+      });
+  })
+};
+
+// Updates an existing voiceMusiconhold in the DB.
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+
+  return VoiceMusicOnHold
+    .findById(req.params.id)
+    .then(function(voiceMusiconhold) {
+      if (!voiceMusiconhold) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(voiceMusiconhold, req.body);
+
+      return updated
+        .save();
+    })
+    .then(function(voiceMusiconhold) {
+      return res.status(200).send(voiceMusiconhold);
+    })
+    .catch(function(err) {
+      console.error('err', err);
+      return handleError(res, err);
+    });
+};
+
+// Deletes a voiceMusiconhold from the DB.
+exports.destroy = function(req, res) {
+  var _voicemoh;
+  return sequelize.transaction(function(t) {
+      return VoiceMusicOnHold
+        .findById(req.params.id)
+        .then(function(voiceMusiconhold) {
+          if (!voiceMusiconhold) {
+            return res.sendStatus(404);
+          }
+          _voicemoh = voiceMusiconhold;
+          return voiceMusiconhold.destroy({
+            transaction: t
+          });
+        })
+        .then(function() {
+          remove(_voicemoh.directory, function(err) {
+            if (err) {
+              console.log(err);
+            }
+            return res.sendStatus(204);
+          });
+        })
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes multiple voice_musiconholds from the DB.
+exports.bulkDestroy = function(req, res) {
+  var _voicemohs;
+  return sequelize.transaction(function(t) {
+      return VoiceMusicOnHold
+        .findAll({
+          where: {
+            id: req.query.ids
+          }
+        })
+        .then(function(voice_musiconholds) {
+          if (!voice_musiconholds) {
+            return res.sendStatus(404);
+          }
+          _voicemohs = voice_musiconholds;
+          var bulkDest = [];
+          voice_musiconholds.forEach(function(element) {
+            bulkDest.push(element.destroy({
+              transaction: t
+            }));
+          });
+          return bulkDest;
+        })
+        .all()
+        .then(function() {
+          _voicemohs.forEach(function(element) {
+            remove(element.directory, function(err) {
+              if (err) {
+                console.log(err);
+                throw err
+              }
+            });
+          })
+        });
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// stream a moh file
+exports.stream = function(req, res) {
+  var filepath = decodeURI(req.query.path);
+  base64.encode(filepath, function(err, base64String) {
+    if (err) {
+      return handleError(res, err);
+    } else {
+      return res.status(200).send(base64String);
+    }
+  });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index 677278f..efa073f 100644 (file)
@@ -1 +1,24 @@
-var _0xc0da=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x56\x6F\x69\x63\x65\x4D\x75\x73\x69\x63\x4F\x6E\x48\x6F\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x76\x6F\x69\x63\x65\x5F\x6D\x75\x73\x69\x63\x6F\x6E\x68\x6F\x6C\x64\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x76\x6F\x69\x63\x65\x5F\x6D\x75\x73\x69\x63\x6F\x6E\x68\x6F\x6C\x64\x3A\x72\x65\x6D\x6F\x76\x65"];_0xc0da[0];var VoiceMusicOnHold=require(_0xc0da[2])[_0xc0da[1]];exports[_0xc0da[3]]=function(_0x3ae8x2){VoiceMusicOnHold[_0xc0da[4]](function(_0x3ae8x3){onSave(_0x3ae8x2,_0x3ae8x3)});VoiceMusicOnHold[_0xc0da[5]](function(_0x3ae8x3){onRemove(_0x3ae8x2,_0x3ae8x3)})};function onSave(_0x3ae8x2,_0x3ae8x3,_0x3ae8x5){_0x3ae8x2[_0xc0da[7]](_0xc0da[6],_0x3ae8x3)}function onRemove(_0x3ae8x2,_0x3ae8x3,_0x3ae8x5){_0x3ae8x2[_0xc0da[7]](_0xc0da[8],_0x3ae8x3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var VoiceMusicOnHold = require('../../models').VoiceMusicOnHold;
+
+exports.register = function(socket) {
+  VoiceMusicOnHold.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  VoiceMusicOnHold.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('voice_musiconhold:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('voice_musiconhold:remove', doc);
+}
index 789ca27..e992daf 100644 (file)
@@ -1 +1,20 @@
-var _0x7f20=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x73\x68\x6F\x75\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x70\x70","\x73\x75\x70\x65\x72\x74\x65\x73\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x2F\x6D\x75\x73\x69\x63\x6F\x6E\x68\x6F\x6C\x64","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x70\x6F\x6E\x64\x20\x77\x69\x74\x68\x20\x4A\x53\x4F\x4E\x20\x61\x72\x72\x61\x79","\x69\x6E\x73\x74\x61\x6E\x63\x65\x6F\x66","\x62\x65","\x62\x6F\x64\x79","\x65\x6E\x64","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x65\x78\x70\x65\x63\x74","\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x2F\x6D\x75\x73\x69\x63\x6F\x6E\x68\x6F\x6C\x64","\x67\x65\x74"];_0x7f20[0];var should=require(_0x7f20[1]);var app=require(_0x7f20[2]);var request=require(_0x7f20[3]);describe(_0x7f20[4],function(){it(_0x7f20[5],function(_0x69ebx4){request(app)[_0x7f20[13]](_0x7f20[12])[_0x7f20[11]](200)[_0x7f20[11]](_0x7f20[10],/json/)[_0x7f20[9]](function(_0x69ebx5,_0x69ebx6){if(_0x69ebx5){return _0x69ebx4(_0x69ebx5)};_0x69ebx6[_0x7f20[8]][_0x7f20[1]][_0x7f20[7]][_0x7f20[6]](Array);_0x69ebx4()})})})
\ No newline at end of file
+'use strict';
+
+var should = require('should');
+var app = require('../../app');
+var request = require('supertest');
+
+describe('GET /api/voice/musiconhold', function() {
+
+  it('should respond with JSON array', function(done) {
+    request(app)
+      .get('/api/voice/musiconhold')
+      .expect(200)
+      .expect('Content-Type', /json/)
+      .end(function(err, res) {
+        if (err) return done(err);
+        res.body.should.be.instanceof(Array);
+        done();
+      });
+  });
+});
\ No newline at end of file
index 287c56e..f864580 100644 (file)
@@ -1 +1,19 @@
-var _0xb978=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x76\x6F\x69\x63\x65\x5F\x71\x75\x65\x75\x65\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x6E\x61\x6D\x65","\x73\x68\x6F\x77","\x2F\x3A\x6E\x61\x6D\x65\x2F\x61\x67\x65\x6E\x74\x73","\x73\x68\x6F\x77\x41\x67\x65\x6E\x74\x73","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x61\x64\x64\x41\x67\x65\x6E\x74\x73","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x72\x65\x6D\x6F\x76\x65\x41\x67\x65\x6E\x74\x73","\x64\x65\x6C\x65\x74\x65","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0xb978[0];var express=require(_0xb978[1]);var controller=require(_0xb978[2]);var auth=require(_0xb978[3]);var router=express.Router();router[_0xb978[7]](_0xb978[4],auth[_0xb978[5]](),controller[_0xb978[6]]);router[_0xb978[7]](_0xb978[8],auth[_0xb978[5]](),controller[_0xb978[9]]);router[_0xb978[7]](_0xb978[10],auth[_0xb978[5]](),controller[_0xb978[11]]);router[_0xb978[13]](_0xb978[4],auth[_0xb978[5]](),controller[_0xb978[12]]);router[_0xb978[13]](_0xb978[10],auth[_0xb978[5]](),controller[_0xb978[14]]);router[_0xb978[16]](_0xb978[8],auth[_0xb978[5]](),controller[_0xb978[15]]);router[_0xb978[18]](_0xb978[10],auth[_0xb978[5]](),controller[_0xb978[17]]);router[_0xb978[18]](_0xb978[4],auth[_0xb978[5]](),controller[_0xb978[19]]);router[_0xb978[18]](_0xb978[8],auth[_0xb978[5]](),controller[_0xb978[20]]);module[_0xb978[21]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./voice_queue.controller');
+var auth = require('../../auth/auth.service');
+
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), controller.index);
+router.get('/:name', auth.isAuthenticated(), controller.show);
+router.get('/:name/agents', auth.isAuthenticated(), controller.showAgents);
+router.post('/', auth.isAuthenticated(), controller.create);
+router.post('/:name/agents', auth.isAuthenticated(), controller.addAgents);
+router.put('/:name', auth.isAuthenticated(), controller.update);
+router.delete('/:name/agents', auth.isAuthenticated(), controller.removeAgents);
+router.delete('/', auth.isAuthenticated(), controller.bulkDestroy);
+router.delete('/:name', auth.isAuthenticated(), controller.destroy);
+
+module.exports = router;
index 0142d77..4143afc 100644 (file)
@@ -1 +1,211 @@
-var _0xdea3=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x55\x73\x65\x72","\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65","\x55\x73\x65\x72\x48\x61\x73\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65","\x56\x6F\x69\x63\x65\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x6E\x61\x6D\x65","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x73\x68\x6F\x77\x41\x67\x65\x6E\x74\x73","\x61\x67\x65\x6E\x74","\x69\x64","\x66\x75\x6C\x6C\x6E\x61\x6D\x65","\x65\x6D\x61\x69\x6C","\x67\x65\x74\x55\x73\x65\x72\x73","\x63\x72\x65\x61\x74\x65","\x70\x75\x73\x68","\x50\x52\x49\x4D\x41\x52\x59","\x70\x61\x74\x68","\x66\x6F\x72\x45\x61\x63\x68","\x65\x72\x72\x6F\x72\x73","\x20\x6D\x75\x73\x74\x20\x62\x65\x20\x75\x6E\x69\x71\x75\x65","\x6D\x65\x73\x73\x61\x67\x65","\x6A\x6F\x69\x6E","\x74\x72\x61\x6E\x73\x6C\x61\x74\x65\x64\x4D\x65\x73\x73\x61\x67\x65","\x4D\x45\x53\x53\x41\x47\x45\x5F\x45\x58\x49\x53\x54\x5F\x51\x55\x45\x55\x45","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x6C\x6F\x67","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x61\x64\x64\x41\x67\x65\x6E\x74\x73","\x53\x49\x50\x2F\x25\x73","\x66\x6F\x72\x6D\x61\x74","\x70\x65\x6E\x61\x6C\x74\x79","\x6D\x61\x70","\x62\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x61\x67\x65\x6E\x74\x73","\x66\x69\x6E\x64\x41\x6C\x6C","\x72\x65\x6D\x6F\x76\x65\x41\x67\x65\x6E\x74\x73","\x64\x65\x73\x74\x72\x6F\x79","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73"];_0xdea3[0];var _=require(_0xdea3[1]);var util=require(_0xdea3[2]);var Util=require(_0xdea3[3]);var sequelize=require(_0xdea3[5])[_0xdea3[4]];var User=require(_0xdea3[5])[_0xdea3[6]];var VoiceQueue=require(_0xdea3[5])[_0xdea3[7]];var UserHasVoiceQueue=require(_0xdea3[5])[_0xdea3[8]];var VoiceExtension=require(_0xdea3[5])[_0xdea3[9]];exports[_0xdea3[10]]=function(_0x8b52x9,_0x8b52xa){return VoiceQueue[_0xdea3[17]](Util[_0xdea3[16]](_0x8b52x9[_0xdea3[15]]))[_0xdea3[14]](function(_0x8b52xc){_0x8b52xa[_0xdea3[13]](200)[_0xdea3[12]](_0x8b52xc)})[_0xdea3[11]](function(_0x8b52xb){return handleError(_0x8b52xa,_0x8b52xb)})};exports[_0xdea3[18]]=function(_0x8b52x9,_0x8b52xa){return VoiceQueue[_0xdea3[22]](_0x8b52x9[_0xdea3[21]][_0xdea3[20]])[_0xdea3[14]](function(_0x8b52xd){if(!_0x8b52xd){return _0x8b52xa[_0xdea3[19]](404)};return _0x8b52xa[_0xdea3[12]](_0x8b52xd)})[_0xdea3[11]](function(_0x8b52xb){return handleError(_0x8b52xa,_0x8b52xb)})};exports[_0xdea3[23]]=function(_0x8b52x9,_0x8b52xa){return VoiceQueue[_0xdea3[22]](_0x8b52x9[_0xdea3[21]][_0xdea3[20]])[_0xdea3[14]](function(_0x8b52xf){if(!_0x8b52xf){return _0x8b52xa[_0xdea3[19]](404)};return _0x8b52xf[_0xdea3[28]]({where:{role:_0xdea3[24]},attributes:[_0xdea3[25],_0xdea3[20],_0xdea3[26],_0xdea3[27]]})})[_0xdea3[14]](function(_0x8b52xe){return _0x8b52xa[_0xdea3[13]](200)[_0xdea3[12]](_0x8b52xe)})[_0xdea3[11]](function(_0x8b52xb){return handleError(_0x8b52xa,_0x8b52xb)})};exports[_0xdea3[29]]=function(_0x8b52x9,_0x8b52xa){return VoiceQueue[_0xdea3[29]](_0x8b52x9[_0xdea3[40]])[_0xdea3[14]](function(_0x8b52xd){return _0x8b52xa[_0xdea3[13]](201)[_0xdea3[12]](_0x8b52xd)})[_0xdea3[11]](sequelize.UniqueConstraintError,function(_0x8b52xb){var _0x8b52x10=[];_0x8b52xb[_0xdea3[34]][_0xdea3[33]](function(_0x8b52x11){switch(_0x8b52x11[_0xdea3[32]]){case _0xdea3[31]:_0x8b52x10[_0xdea3[30]](_0xdea3[20]);break;default:_0x8b52x10[_0xdea3[30]](_0x8b52x11[_0xdea3[32]])}});_0x8b52x10[_0xdea3[30]](_0xdea3[35]);_0x8b52xb[_0xdea3[36]]=_0x8b52x10[_0xdea3[37]]();_0x8b52xb[_0xdea3[38]]=_0xdea3[39];return _0x8b52xa[_0xdea3[13]](500)[_0xdea3[12]](_0x8b52xb)})[_0xdea3[11]](function(_0x8b52xb){return handleError(_0x8b52xa,_0x8b52xb)})};exports[_0xdea3[41]]=function(_0x8b52x9,_0x8b52xa){if(_0x8b52x9[_0xdea3[40]][_0xdea3[20]]){delete _0x8b52x9[_0xdea3[40]][_0xdea3[20]]};return VoiceQueue[_0xdea3[22]](_0x8b52x9[_0xdea3[21]][_0xdea3[20]])[_0xdea3[14]](function(_0x8b52xd){if(!_0x8b52xd){return _0x8b52xa[_0xdea3[19]](404)};var _0x8b52x12=_[_0xdea3[43]](_0x8b52xd,_0x8b52x9[_0xdea3[40]]);return _0x8b52x12[_0xdea3[44]]()})[_0xdea3[14]](function(_0x8b52xd){return _0x8b52xa[_0xdea3[13]](200)[_0xdea3[12]](_0x8b52xd)})[_0xdea3[11]](function(_0x8b52xb){console[_0xdea3[42]](_0x8b52xb);return handleError(_0x8b52xa,_0x8b52xb)})};exports[_0xdea3[45]]=function(_0x8b52x9,_0x8b52xa,_0x8b52x13){return User[_0xdea3[52]]({where:{id:{$in:_0x8b52x9[_0xdea3[40]][_0xdea3[51]]}}})[_0xdea3[14]](function(_0x8b52x14){var _0x8b52x15=_[_0xdea3[49]](_0x8b52x14,function(_0x8b52x16){return {queue:_0x8b52x9[_0xdea3[21]][_0xdea3[20]],location:util[_0xdea3[47]](_0xdea3[46],_0x8b52x16[_0xdea3[20]]),membername:_0x8b52x16[_0xdea3[20]],UserId:_0x8b52x16[_0xdea3[25]],penalty:_0x8b52x9[_0xdea3[40]][_0xdea3[48]]}});return UserHasVoiceQueue[_0xdea3[50]](_0x8b52x15,{individualHooks:true})})[_0xdea3[14]](function(){return _0x8b52xa[_0xdea3[19]](200)})[_0xdea3[11]](function(_0x8b52xb){console[_0xdea3[42]](_0x8b52xb);return _0x8b52x13(_0x8b52xb)})};exports[_0xdea3[53]]=function(_0x8b52x9,_0x8b52xa,_0x8b52x13){return UserHasVoiceQueue[_0xdea3[54]]({where:{UserId:_0x8b52x9[_0xdea3[15]][_0xdea3[51]],queue:_0x8b52x9[_0xdea3[21]][_0xdea3[20]]},individualHooks:true})[_0xdea3[14]](function(){return _0x8b52xa[_0xdea3[19]](202)})[_0xdea3[11]](function(_0x8b52xb){return _0x8b52x13(_0x8b52xb)})};exports[_0xdea3[54]]=function(_0x8b52x9,_0x8b52xa){return VoiceQueue[_0xdea3[54]]({where:{name:_0x8b52x9[_0xdea3[21]][_0xdea3[20]]},individualHooks:true})[_0xdea3[14]](function(){return _0x8b52xa[_0xdea3[19]](204)})[_0xdea3[11]](function(_0x8b52xb){return handleError(_0x8b52xa,_0x8b52xb)})};exports[_0xdea3[55]]=function(_0x8b52x9,_0x8b52xa){return VoiceQueue[_0xdea3[54]]({where:{name:_0x8b52x9[_0xdea3[15]][_0xdea3[56]]},individualHooks:true})[_0xdea3[14]](function(){return _0x8b52xa[_0xdea3[19]](204)})[_0xdea3[11]](function(_0x8b52xb){return handleError(_0x8b52xa,_0x8b52xb)})};function handleError(_0x8b52xa,_0x8b52xb){return _0x8b52xa[_0xdea3[13]](500)[_0xdea3[12]](_0x8b52xb)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+
+var util = require('util');
+var Util = require('../../config/util');
+
+var sequelize = require('../../models').sequelize;
+var User = require('../../models').User;
+var VoiceQueue = require('../../models').VoiceQueue;
+var UserHasVoiceQueue = require('../../models').UserHasVoiceQueue;
+var VoiceExtension = require('../../models').VoiceExtension;
+
+// Get list of voiceQueues
+exports.index = function(req, res) {
+  return VoiceQueue
+    .findAndCountAll(Util.getQuery(req.query))
+    .then(function(result) {
+      res.status(200).send(result);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single voiceQueue
+exports.show = function(req, res) {
+  return VoiceQueue
+    .findById(req.params.name)
+    .then(function(voiceQueue) {
+      if (!voiceQueue) {
+        return res.sendStatus(404);
+      }
+      return res.send(voiceQueue);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single queue
+exports.showAgents = function(req, res) {
+  return VoiceQueue
+    .findById(req.params.name)
+    .then(function(queue) {
+      if (!queue) {
+        return res.sendStatus(404);
+      }
+      return queue
+        .getUsers({
+          where: {
+            role: 'agent'
+          },
+          attributes: ['id', 'name', 'fullname', 'email']
+        });
+    })
+    .then(function(agents) {
+      return res.status(200).send(agents);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new voiceQueue in the DB.
+exports.create = function(req, res) {
+  return VoiceQueue
+    .create(req.body)
+    .then(function(voiceQueue) {
+      return res.status(201).send(voiceQueue);
+    })
+    .catch(sequelize.UniqueConstraintError, function(err) {
+      var paths = [];
+
+      err.errors.forEach(function(error) {
+        switch (error.path) {
+          case 'PRIMARY':
+            paths.push('name');
+            break;
+          default:
+            paths.push(error.path);
+        }
+      });
+
+      paths.push(' must be unique');
+      err.message = paths.join();
+      err.translatedMessage = 'MESSAGE_EXIST_QUEUE';
+
+      return res.status(500).send(err);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Updates an existing voiceQueue in the DB.
+exports.update = function(req, res) {
+  if (req.body.name) {
+    delete req.body.name;
+  }
+
+  return VoiceQueue
+    .findById(req.params.name)
+    .then(function(voiceQueue) {
+      if (!voiceQueue) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(voiceQueue, req.body);
+      return updated
+        .save();
+    })
+    .then(function(voiceQueue) {
+      return res.status(200).send(voiceQueue);
+    })
+    .catch(function(err) {
+      console.log(err);
+      return handleError(res, err);
+    });
+};
+
+
+// Add agents to voice queues
+exports.addAgents = function(req, res, next) {
+  return User
+    .findAll({
+      where: {
+        id: {
+          $in: req.body.agents
+        }
+      }
+    })
+    .then(function(users) {
+      var userHasVoiceQueues = _.map(users, function(user) {
+        return {
+          queue: req.params.name,
+          location: util.format('SIP/%s', user.name),
+          membername: user.name,
+          UserId: user.id,
+          penalty: req.body.penalty
+        };
+      });
+
+      return UserHasVoiceQueue
+        .bulkCreate(userHasVoiceQueues, {
+          individualHooks: true
+        });
+    })
+    .then(function() {
+      return res.sendStatus(200);
+    })
+    .catch(function(err) {
+      console.log(err);
+      return next(err);
+    });
+};
+
+exports.removeAgents = function(req, res, next) {
+  return UserHasVoiceQueue
+    .destroy({
+      where: {
+        UserId: req.query.agents,
+        queue: req.params.name
+      },
+      individualHooks: true
+    })
+    .then(function() {
+      return res.sendStatus(202);
+    })
+    .catch(function(err) {
+      return next(err);
+    });
+};
+
+// Deletes a voiceQueue from the DB.
+exports.destroy = function(req, res) {
+  return VoiceQueue
+    .destroy({
+      where: {
+        name: req.params.name
+      },
+      individualHooks: true
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes multiple voiceQueues from the DB.
+exports.bulkDestroy = function(req, res) {
+  return VoiceQueue
+    .destroy({
+      where: {
+        name: req.query.ids
+      },
+      individualHooks: true
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index a3d4239..6cb2204 100644 (file)
@@ -1 +1,24 @@
-var _0x290e=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x76\x6F\x69\x63\x65\x5F\x71\x75\x65\x75\x65\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x76\x6F\x69\x63\x65\x5F\x71\x75\x65\x75\x65\x3A\x72\x65\x6D\x6F\x76\x65"];_0x290e[0];var VoiceQueue=require(_0x290e[2])[_0x290e[1]];exports[_0x290e[3]]=function(_0x7926x2){VoiceQueue[_0x290e[4]](function(_0x7926x3){onSave(_0x7926x2,_0x7926x3)});VoiceQueue[_0x290e[5]](function(_0x7926x3){onRemove(_0x7926x2,_0x7926x3)})};function onSave(_0x7926x2,_0x7926x3,_0x7926x5){_0x7926x2[_0x290e[7]](_0x290e[6],_0x7926x3)}function onRemove(_0x7926x2,_0x7926x3,_0x7926x5){_0x7926x2[_0x290e[7]](_0x290e[8],_0x7926x3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var VoiceQueue = require('../../models').VoiceQueue;
+
+exports.register = function(socket) {
+  VoiceQueue.afterCreate(function (doc) {
+    onSave(socket, doc);
+  });
+  VoiceQueue.afterDestroy(function (doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('voice_queue:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('voice_queue:remove', doc);
+}
index 95dd7cb..61bbb0d 100644 (file)
@@ -1 +1,18 @@
-var _0x8071=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x76\x6F\x69\x63\x65\x5F\x72\x65\x63\x6F\x72\x64\x69\x6E\x67\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x2F\x3A\x69\x64\x2F\x73\x74\x72\x65\x61\x6D","\x67\x65\x74\x53\x74\x72\x65\x61\x6D","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0x8071[0];var express=require(_0x8071[1]);var auth=require(_0x8071[2]);var controller=require(_0x8071[3]);var router=express.Router();router[_0x8071[7]](_0x8071[4],auth[_0x8071[5]](),controller[_0x8071[6]]);router[_0x8071[7]](_0x8071[8],auth[_0x8071[5]](),controller[_0x8071[9]]);router[_0x8071[7]](_0x8071[10],auth[_0x8071[5]](),controller[_0x8071[11]]);router[_0x8071[13]](_0x8071[4],auth[_0x8071[5]](),controller[_0x8071[12]]);router[_0x8071[15]](_0x8071[8],auth[_0x8071[5]](),controller[_0x8071[14]]);router[_0x8071[16]](_0x8071[8],auth[_0x8071[5]](),controller[_0x8071[14]]);router[_0x8071[18]](_0x8071[4],auth[_0x8071[5]](),controller[_0x8071[17]]);router[_0x8071[18]](_0x8071[8],auth[_0x8071[5]](),controller[_0x8071[19]]);module[_0x8071[20]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var auth = require('../../auth/auth.service');
+var controller = require('./voice_recording.controller');
+
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), controller.index);
+router.get('/:id', auth.isAuthenticated(), controller.show);
+router.get('/:id/stream', auth.isAuthenticated(), controller.getStream);
+router.post('/', auth.isAuthenticated(), controller.create);
+router.put('/:id', auth.isAuthenticated(), controller.update);
+router.patch('/:id', auth.isAuthenticated(), controller.update);
+router.delete('/', auth.isAuthenticated(), controller.bulkDestroy);
+router.delete('/:id', auth.isAuthenticated(), controller.destroy);
+
+module.exports = router;
index fd2e787..0c800bc 100644 (file)
@@ -1 +1,172 @@
-var _0xaa2d=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x56\x6F\x69\x63\x65\x52\x65\x63\x6F\x72\x64\x69\x6E\x67","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x62\x6C\x75\x65\x62\x69\x72\x64","\x66\x69\x6C\x65\x2D\x62\x61\x73\x65\x36\x34","\x66\x73","\x63\x61\x75\x73\x65","\x63\x6F\x64\x65","\x45\x4E\x4F\x45\x4E\x54","\x4E\x6F\x20\x66\x69\x6C\x65\x20\x6F\x72\x20\x64\x69\x72\x65\x63\x74\x6F\x72\x79","\x4D\x45\x53\x53\x41\x47\x45\x5F\x4E\x4F\x5F\x46\x49\x4C\x45\x5F\x4F\x52\x5F\x44\x49\x52\x45\x43\x54\x4F\x52\x59","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6A\x73\x6F\x6E","\x65\x6E\x64","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x74\x68\x65\x6E","\x64\x65\x73\x74\x72\x6F\x79","\x77\x68\x65\x72\x65","\x6C\x69\x6D\x69\x74","\x6F\x66\x66\x73\x65\x74","\x6F\x72\x64\x65\x72","\x25","\x66\x6F\x72\x45\x61\x63\x68","\x69\x6E\x64\x65\x78","\x71\x75\x65\x72\x79","\x63\x61\x74\x63\x68","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x67\x65\x74\x53\x74\x72\x65\x61\x6D","\x62\x61\x73\x65\x36\x34","\x62\x69\x6E\x61\x72\x79","\x72\x65\x61\x64\x46\x69\x6C\x65","\x70\x72\x6F\x6D\x69\x73\x69\x66\x79","\x76\x61\x6C\x75\x65","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64\x73"];_0xaa2d[0];var _=require(_0xaa2d[1]);var util=require(_0xaa2d[2]);var VoiceRecording=require(_0xaa2d[4])[_0xaa2d[3]];var Promise=require(_0xaa2d[5]);var base64=require(_0xaa2d[6]);var fs=require(_0xaa2d[7]);function handleError(_0xb946x8){return function(_0xb946x9){if(_0xb946x9[_0xaa2d[8]]&&_0xb946x9[_0xaa2d[8]][_0xaa2d[9]]===_0xaa2d[10]){_0xb946x9={message:_0xaa2d[11],translatedMessage:_0xaa2d[12]}};return _0xb946x8[_0xaa2d[14]](500)[_0xaa2d[13]](_0xb946x9)}}function responseWithResult(_0xb946x8,_0xb946xb){_0xb946xb=_0xb946xb||200;return function(_0xb946xc){if(_0xb946xc){_0xb946x8[_0xaa2d[14]](_0xb946xb)[_0xaa2d[15]](_0xb946xc)}}}function handleEntityNotFound(_0xb946x8){return function(_0xb946xc){if(!_0xb946xc){_0xb946x8[_0xaa2d[14]](404)[_0xaa2d[16]]();return null};return _0xb946xc}}function saveUpdates(_0xb946xf){return function(_0xb946xc){return _0xb946xc[_0xaa2d[17]](_0xb946xf)}}function removeEntity(_0xb946x8){return function(_0xb946xc){if(_0xb946xc){return _0xb946xc[_0xaa2d[19]]()[_0xaa2d[18]](function(){_0xb946x8[_0xaa2d[14]](204)[_0xaa2d[16]]()})}}}function getQuery(_0xb946x12){var _0xb946x13={};_0xb946x13[_0xaa2d[20]]={};_[_0xaa2d[25]](_0xb946x12,function(_0xb946x14,_0xb946x15){switch(_0xb946x15){case _0xaa2d[21]:;case _0xaa2d[22]:_0xb946x13[_0xb946x15]=Number(_0xb946x14);break;case _0xaa2d[23]:_0xb946x13[_0xb946x15]=_0xb946x14;break;default:_0xb946x13[_0xaa2d[20]][_0xb946x15]={$like:_0xaa2d[24]+_0xb946x14+_0xaa2d[24]}}});return _0xb946x13}exports[_0xaa2d[26]]=function(_0xb946x16,_0xb946x8){var _0xb946x13=getQuery(_0xb946x16[_0xaa2d[27]]);return VoiceRecording[_0xaa2d[29]](_0xb946x13)[_0xaa2d[18]](responseWithResult(_0xb946x8))[_0xaa2d[28]](handleError(_0xb946x8))};exports[_0xaa2d[30]]=function(_0xb946x16,_0xb946x8){return VoiceRecording[_0xaa2d[33]](_0xb946x16[_0xaa2d[32]][_0xaa2d[31]])[_0xaa2d[18]](handleEntityNotFound(_0xb946x8))[_0xaa2d[18]](responseWithResult(_0xb946x8))[_0xaa2d[28]](handleError(_0xb946x8))};exports[_0xaa2d[34]]=function(_0xb946x16,_0xb946x8){return VoiceRecording[_0xaa2d[33]](_0xb946x16[_0xaa2d[32]][_0xaa2d[31]])[_0xaa2d[18]](function(_0xb946x19){var _0xb946x1a=Promise[_0xaa2d[38]](fs[_0xaa2d[37]]);return _0xb946x1a(_0xb946x19[_0xaa2d[39]])})[_0xaa2d[18]](function(_0xb946x18){var _0xb946x17= new Buffer(_0xb946x18,_0xaa2d[36]).toString(_0xaa2d[35]);return _0xb946x17})[_0xaa2d[18]](function(_0xb946x17){return _0xb946x8[_0xaa2d[14]](200)[_0xaa2d[13]]({downloadString:_0xb946x17})})[_0xaa2d[28]](handleError(_0xb946x8))};exports[_0xaa2d[40]]=function(_0xb946x16,_0xb946x8){return VoiceRecording[_0xaa2d[40]](_0xb946x16[_0xaa2d[41]])[_0xaa2d[18]](responseWithResult(_0xb946x8,201))[_0xaa2d[28]](handleError(_0xb946x8))};exports[_0xaa2d[42]]=function(_0xb946x16,_0xb946x8){if(_0xb946x16[_0xaa2d[41]][_0xaa2d[31]]){delete _0xb946x16[_0xaa2d[41]][_0xaa2d[31]]};return VoiceRecording[_0xaa2d[33]](_0xb946x16[_0xaa2d[32]][_0xaa2d[31]])[_0xaa2d[18]](handleEntityNotFound(_0xb946x8))[_0xaa2d[18]](saveUpdates(_0xb946x16[_0xaa2d[41]]))[_0xaa2d[18]](responseWithResult(_0xb946x8))[_0xaa2d[28]](handleError(_0xb946x8))};exports[_0xaa2d[19]]=function(_0xb946x16,_0xb946x8){return VoiceRecording[_0xaa2d[33]](_0xb946x16[_0xaa2d[32]][_0xaa2d[31]])[_0xaa2d[18]](handleEntityNotFound(_0xb946x8))[_0xaa2d[18]](removeEntity(_0xb946x8))[_0xaa2d[28]](handleError(_0xb946x8))};exports[_0xaa2d[43]]=function(_0xb946x16,_0xb946x8){return VoiceRecording[_0xaa2d[19]]({where:{uniqueid:_0xb946x16[_0xaa2d[27]][_0xaa2d[45]]},individualHooks:true})[_0xaa2d[18]](function(){return _0xb946x8[_0xaa2d[44]](204)})[_0xaa2d[28]](handleError(_0xb946x8))}
\ No newline at end of file
+/**
+ * Using Rails-like standard naming convention for endpoints.
+ * GET     /api/voice/recordings              ->  index
+ * POST    /api/voice/recordings              ->  create
+ * GET     /api/voice/recordings/:id          ->  show
+ * PUT     /api/voice/recordings/:id          ->  update
+ * DELETE  /api/voice/recordings/:id          ->  destroy
+ */
+
+'use strict';
+
+
+var _ = require('lodash');
+var util = require('util');
+
+var VoiceRecording = require('../../models').VoiceRecording;
+var Promise = require('bluebird');
+// var base64 = Promise.promisifyAll(require('file-base64'));
+var base64 = require('file-base64');
+var fs = require('fs');
+
+function handleError(res) {
+  return function(err) {
+    if (err.cause && err.cause.code === 'ENOENT') {
+      err = {
+        message: 'No file or directory',
+        translatedMessage: 'MESSAGE_NO_FILE_OR_DIRECTORY'
+      };
+    }
+    return res.status(500).send(err);
+  }
+}
+
+function responseWithResult(res, statusCode) {
+  statusCode = statusCode || 200;
+  return function(entity) {
+    if (entity) {
+      res.status(statusCode).json(entity);
+    }
+  };
+}
+
+function handleEntityNotFound(res) {
+  return function(entity) {
+    if (!entity) {
+      res.status(404).end();
+      return null;
+    }
+    return entity;
+  };
+}
+
+function saveUpdates(body) {
+  return function(entity) {
+    return entity
+      .updateAttributes(body);
+  };
+}
+
+function removeEntity(res) {
+  return function(entity) {
+    if (entity) {
+      return entity.destroy()
+        .then(function() {
+          res.status(204).end();
+        });
+    }
+  };
+}
+
+function getQuery(query) {
+  var _query = {};
+  _query.where = {};
+
+  _.forEach(query, function(value, key) {
+    switch (key) {
+      case 'limit':
+      case 'offset':
+        _query[key] = Number(value);
+        break;
+      case 'order':
+        _query[key] = value;
+        break;
+      default:
+        _query.where[key] = {
+          $like: '%' + value + '%'
+        };
+    }
+  });
+
+  return _query;
+}
+
+// Gets a list of VoiceRecordings
+exports.index = function(req, res) {
+  var _query = getQuery(req.query);
+  return VoiceRecording
+    .findAndCountAll(_query)
+    .then(responseWithResult(res))
+    .catch(handleError(res));
+}
+
+// Gets a single VoiceRecording from the DB
+exports.show = function(req, res) {
+  return VoiceRecording.findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(responseWithResult(res))
+    .catch(handleError(res));
+}
+
+// Gets a single VoiceRecording from the DB
+exports.getStream = function(req, res) {
+  return VoiceRecording
+    .findById(req.params.id)
+    .then(function(recording) {
+      var readFile = Promise.promisify(fs.readFile);
+      return readFile(recording.value);
+    })
+    .then(function(result) {
+      var base64String = new Buffer(result, 'binary').toString('base64');
+      return base64String;
+    })
+    .then(function(base64String) {
+      return res.status(200).send({
+        downloadString: base64String
+      });
+    })
+    .catch(handleError(res));
+}
+
+
+// Creates a new VoiceRecording in the DB
+exports.create = function(req, res) {
+  return VoiceRecording.create(req.body)
+    .then(responseWithResult(res, 201))
+    .catch(handleError(res));
+}
+
+// Updates an existing VoiceRecording in the DB
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  return VoiceRecording.findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(saveUpdates(req.body))
+    .then(responseWithResult(res))
+    .catch(handleError(res));
+}
+
+// Deletes a VoiceRecording from the DB
+exports.destroy = function(req, res) {
+  return VoiceRecording.findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(removeEntity(res))
+    .catch(handleError(res));
+}
+
+// Deletes a agent from the DB.
+exports.bulkDestroy = function(req, res) {
+  return VoiceRecording
+    .destroy({
+      where: {
+        uniqueid: req.query.ids
+      },
+      individualHooks: true
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(handleError(res));
+};
index dbe71c0..a0f969a 100644 (file)
@@ -1 +1,24 @@
-var _0x4d8b=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x56\x6F\x69\x63\x65\x52\x65\x63\x6F\x72\x64\x69\x6E\x67","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x76\x6F\x69\x63\x65\x5F\x72\x65\x63\x6F\x72\x64\x69\x6E\x67\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x76\x6F\x69\x63\x65\x5F\x72\x65\x63\x6F\x72\x64\x69\x6E\x67\x3A\x72\x65\x6D\x6F\x76\x65"];_0x4d8b[0];var VoiceRecording=require(_0x4d8b[2])[_0x4d8b[1]];exports[_0x4d8b[3]]=function(_0x3ff3x2){VoiceRecording[_0x4d8b[4]](function(_0x3ff3x3){onSave(_0x3ff3x2,_0x3ff3x3)});VoiceRecording[_0x4d8b[5]](function(_0x3ff3x3){onRemove(_0x3ff3x2,_0x3ff3x3)})};function onSave(_0x3ff3x2,_0x3ff3x3,_0x3ff3x5){_0x3ff3x2[_0x4d8b[7]](_0x4d8b[6],_0x3ff3x3)}function onRemove(_0x3ff3x2,_0x3ff3x3,_0x3ff3x5){_0x3ff3x2[_0x4d8b[7]](_0x4d8b[8],_0x3ff3x3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var VoiceRecording = require('../../models').VoiceRecording;
+
+exports.register = function(socket) {
+  VoiceRecording.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  VoiceRecording.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+};
+
+function onSave(socket, doc, cb) {
+  socket.emit('voice_recording:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('voice_recording:remove', doc);
+}
index fa46a92..96f6298 100644 (file)
@@ -1 +1,18 @@
-var _0xee3d=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x76\x6F\x69\x63\x65\x5F\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x75\x6E\x69\x71\x75\x65\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x2F\x76\x61\x6C\x69\x64\x61\x74\x65","\x6D\x61\x69\x6C\x62\x6F\x78\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x2F\x3A\x69\x64","\x70\x61\x74\x63\x68","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0xee3d[0];var express=require(_0xee3d[1]);var controller=require(_0xee3d[2]);var auth=require(_0xee3d[3]);var router=express.Router();router[_0xee3d[7]](_0xee3d[4],auth[_0xee3d[5]](),controller[_0xee3d[6]]);router[_0xee3d[7]](_0xee3d[8],auth[_0xee3d[5]](),controller[_0xee3d[9]]);router[_0xee3d[11]](_0xee3d[4],auth[_0xee3d[5]](),controller[_0xee3d[10]]);router[_0xee3d[11]](_0xee3d[12],auth[_0xee3d[5]](),controller[_0xee3d[13]]);router[_0xee3d[15]](_0xee3d[8],auth[_0xee3d[5]](),controller[_0xee3d[14]]);router[_0xee3d[17]](_0xee3d[16],auth[_0xee3d[5]](),controller[_0xee3d[14]]);router[_0xee3d[19]](_0xee3d[4],auth[_0xee3d[5]](),controller[_0xee3d[18]]);router[_0xee3d[19]](_0xee3d[8],auth[_0xee3d[5]](),controller[_0xee3d[20]]);module[_0xee3d[21]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./voice_voicemail.controller');
+var auth = require('../../auth/auth.service');
+
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), controller.index);
+router.get('/:uniqueid', auth.isAuthenticated(), controller.show);
+router.post('/', auth.isAuthenticated(), controller.create);
+router.post('/validate', auth.isAuthenticated(), controller.mailboxValidation);
+router.put('/:uniqueid', auth.isAuthenticated(), controller.update);
+router.patch('/:id', auth.isAuthenticated(), controller.update);
+router.delete('/', auth.isAuthenticated(), controller.bulkDestroy);
+router.delete('/:uniqueid', auth.isAuthenticated(), controller.destroy);
+
+module.exports = router;
index e7fbe05..69a1139 100644 (file)
@@ -1 +1,190 @@
-var _0x789c=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x73\x74\x72\x65\x61\x6D","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x56\x6F\x69\x63\x65\x56\x6F\x69\x63\x65\x6D\x61\x69\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x56\x6F\x69\x63\x65\x56\x6F\x69\x63\x65\x6D\x61\x69\x6C\x4D\x65\x73\x73\x61\x67\x65\x73","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x75\x6E\x69\x71\x75\x65\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64","\x6D\x61\x69\x6C\x62\x6F\x78\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E","\x62\x6F\x64\x79","\x6C\x6F\x67","\x6D\x61\x69\x6C\x62\x6F\x78","\x63\x6F\x6E\x74\x65\x78\x74","\x66\x69\x6E\x64\x41\x6C\x6C","\x63\x72\x65\x61\x74\x65","\x6C\x65\x6E\x67\x74\x68","\x4D\x45\x53\x53\x41\x47\x45\x5F\x45\x58\x49\x53\x54\x5F\x4D\x41\x49\x4C\x42\x4F\x58","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79"];_0x789c[0];var _=require(_0x789c[1]);var stream=require(_0x789c[2]);var Util=require(_0x789c[3]);var VoiceVoicemail=require(_0x789c[5])[_0x789c[4]];var VoiceVoicemailMessages=require(_0x789c[5])[_0x789c[6]];exports[_0x789c[7]]=function(_0x4ff1x6,_0x4ff1x7){return VoiceVoicemail[_0x789c[14]](Util[_0x789c[13]](_0x4ff1x6[_0x789c[12]]))[_0x789c[11]](function(_0x4ff1x9){_0x4ff1x7[_0x789c[10]](200)[_0x789c[9]](_0x4ff1x9)})[_0x789c[8]](function(_0x4ff1x8){return handleError(_0x4ff1x7,_0x4ff1x8)})};exports[_0x789c[15]]=function(_0x4ff1x6,_0x4ff1x7){VoiceVoicemail[_0x789c[19]]({where:{uniqueid:_0x4ff1x6[_0x789c[18]][_0x789c[17]]}})[_0x789c[11]](function(_0x4ff1xa){if(!_0x4ff1xa){return _0x4ff1x7[_0x789c[16]](404)};return _0x4ff1x7[_0x789c[9]](_0x4ff1xa)})[_0x789c[8]](function(_0x4ff1x8){return handleError(_0x4ff1x7,_0x4ff1x8)})};exports[_0x789c[20]]=function(_0x4ff1x6,_0x4ff1x7){console[_0x789c[22]](_0x4ff1x6[_0x789c[21]]);VoiceVoicemail[_0x789c[25]]({where:{mailbox:_0x4ff1x6[_0x789c[21]][_0x789c[23]],context:_0x4ff1x6[_0x789c[21]][_0x789c[24]]}})[_0x789c[11]](function(_0x4ff1xb){if(!_0x4ff1xb){return _0x4ff1x7[_0x789c[16]](404)};return _0x4ff1x7[_0x789c[9]](_0x4ff1xb)})[_0x789c[8]](function(_0x4ff1x8){return handleError(_0x4ff1x7,_0x4ff1x8)})};exports[_0x789c[26]]=function(_0x4ff1x6,_0x4ff1x7){VoiceVoicemail[_0x789c[25]]({where:{mailbox:_0x4ff1x6[_0x789c[21]][_0x789c[23]],context:_0x4ff1x6[_0x789c[21]][_0x789c[24]]}})[_0x789c[11]](function(_0x4ff1xb){if(!_0x4ff1xb){return _0x4ff1x7[_0x789c[16]](404)};if(_0x4ff1xb[_0x789c[27]]>0){return _0x4ff1x7[_0x789c[10]](500)[_0x789c[9]]({message:_0x789c[28]})};VoiceVoicemail[_0x789c[26]](_0x4ff1x6[_0x789c[21]])[_0x789c[11]](function(_0x4ff1xa){return _0x4ff1x7[_0x789c[10]](201)[_0x789c[9]](_0x4ff1xa)})[_0x789c[8]](function(_0x4ff1x8){return handleError(_0x4ff1x7,_0x4ff1x8)})[_0x789c[8]](function(_0x4ff1x8){return handleError(_0x4ff1x7,_0x4ff1x8)})})};exports[_0x789c[29]]=function(_0x4ff1x6,_0x4ff1x7){VoiceVoicemail[_0x789c[25]]({where:{mailbox:_0x4ff1x6[_0x789c[21]][_0x789c[23]],context:_0x4ff1x6[_0x789c[21]][_0x789c[24]],uniqueid:{$ne:_0x4ff1x6[_0x789c[21]][_0x789c[17]]}}})[_0x789c[11]](function(_0x4ff1xb){if(!_0x4ff1xb){return _0x4ff1x7[_0x789c[16]](404)};if(_0x4ff1xb[_0x789c[27]]>0){return _0x4ff1x7[_0x789c[10]](500)[_0x789c[9]]({message:_0x789c[28]})};if(_0x4ff1x6[_0x789c[21]][_0x789c[17]]){delete _0x4ff1x6[_0x789c[21]][_0x789c[17]]};VoiceVoicemail[_0x789c[19]]({where:{uniqueid:_0x4ff1x6[_0x789c[18]][_0x789c[17]]}})[_0x789c[11]](function(_0x4ff1xa){if(!_0x4ff1xa){return _0x4ff1x7[_0x789c[16]](404)};var _0x4ff1xc=_[_0x789c[30]](_0x4ff1xa,_0x4ff1x6[_0x789c[21]]);_0x4ff1xc[_0x789c[31]]()[_0x789c[11]](function(){return _0x4ff1x7[_0x789c[10]](200)[_0x789c[9]](_0x4ff1xa)})[_0x789c[8]](function(_0x4ff1x8){return handleError(_0x4ff1x7,_0x4ff1x8)})})[_0x789c[8]](function(_0x4ff1x8){return handleError(_0x4ff1x7,_0x4ff1x8)})})[_0x789c[8]](function(_0x4ff1x8){return handleError(_0x4ff1x7,_0x4ff1x8)})};exports[_0x789c[32]]=function(_0x4ff1x6,_0x4ff1x7){VoiceVoicemail[_0x789c[19]]({where:{uniqueid:_0x4ff1x6[_0x789c[18]][_0x789c[17]]}})[_0x789c[11]](function(_0x4ff1xa){if(!_0x4ff1xa){return _0x4ff1x7[_0x789c[16]](404)};_0x4ff1xa[_0x789c[32]]()[_0x789c[11]](function(){return _0x4ff1x7[_0x789c[16]](204)})[_0x789c[8]](function(_0x4ff1x8){return handleError(_0x4ff1x7,_0x4ff1x8)})})[_0x789c[8]](function(_0x4ff1x8){return handleError(_0x4ff1x7,_0x4ff1x8)})};exports[_0x789c[33]]=function(_0x4ff1x6,_0x4ff1x7){VoiceVoicemail[_0x789c[32]]({where:{uniqueid:_0x4ff1x6[_0x789c[12]][_0x789c[17]]},individualHooks:true})[_0x789c[11]](function(){return _0x4ff1x7[_0x789c[16]](204)})[_0x789c[8]](function(_0x4ff1x8){return handleError(_0x4ff1x7,_0x4ff1x8)})};function handleError(_0x4ff1x7,_0x4ff1x8){return _0x4ff1x7[_0x789c[10]](500)[_0x789c[9]](_0x4ff1x8)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var stream = require('stream');
+var Util = require('../../config/util');
+
+var VoiceVoicemail = require('../../models').VoiceVoicemail;
+var VoiceVoicemailMessages = require('../../models').VoiceVoicemailMessages;
+
+// Get list of voice_voicemails
+exports.index = function(req, res) {
+  return VoiceVoicemail
+    .findAndCountAll(Util.getQuery(req.query))
+    .then(function(result) {
+      res.status(200).send(result);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single voice_voicemail
+exports.show = function(req, res) {
+  VoiceVoicemail
+    .find({
+      where: {
+        uniqueid: req.params.uniqueid
+      }
+    })
+    .then(function(voice_voicemail) {
+      if (!voice_voicemail) {
+        return res.sendStatus(404);
+      }
+      return res.send(voice_voicemail);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// validate mailbox uniqueness
+exports.mailboxValidation = function(req, res) {
+  console.log(req.body);
+  VoiceVoicemail
+    .findAll({
+      where: {
+        mailbox: req.body.mailbox,
+        context: req.body.context
+      }
+    })
+    .then(function(voicemails) {
+      if (!voicemails) {
+        return res.sendStatus(404);
+      }
+      return res.send(voicemails);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+// Creates a new voice_voicemail in the DB.
+exports.create = function(req, res) {
+  VoiceVoicemail
+    .findAll({
+      where: {
+        mailbox: req.body.mailbox,
+        context: req.body.context
+      }
+    })
+    .then(function(voicemails) {
+      if (!voicemails) {
+        return res.sendStatus(404);
+      }
+      if (voicemails.length > 0) {
+        return res.status(500).send({
+          message: 'MESSAGE_EXIST_MAILBOX'
+        })
+      }
+      VoiceVoicemail
+        .create(req.body)
+        .then(function(voice_voicemail) {
+          return res.status(201).send(voice_voicemail);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+};
+
+// Updates an existing voice_voicemail in the DB.
+exports.update = function(req, res) {
+  VoiceVoicemail
+    .findAll({
+      where: {
+        mailbox: req.body.mailbox,
+        context: req.body.context,
+        uniqueid: {
+          $ne: req.body.uniqueid
+        }
+      }
+    })
+    .then(function(voicemails) {
+      if (!voicemails) {
+        return res.sendStatus(404);
+      }
+      if (voicemails.length > 0) {
+        return res.status(500).send({
+          message: 'MESSAGE_EXIST_MAILBOX'
+        })
+      }
+      if (req.body.uniqueid) {
+        delete req.body.uniqueid;
+      }
+      VoiceVoicemail
+        .find({
+          where: {
+            uniqueid: req.params.uniqueid
+          }
+        })
+        .then(function(voice_voicemail) {
+          if (!voice_voicemail) {
+            return res.sendStatus(404);
+          }
+          var updated = _.merge(voice_voicemail, req.body);
+          updated.save()
+            .then(function() {
+              return res.status(200).send(voice_voicemail);
+            })
+            .catch(function(err) {
+              return handleError(res, err);
+            });
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+
+};
+
+// Deletes a voice_voicemail from the DB.
+exports.destroy = function(req, res) {
+  VoiceVoicemail
+    .find({
+      where: {
+        uniqueid: req.params.uniqueid
+      }
+    })
+    .then(function(voice_voicemail) {
+      if (!voice_voicemail) {
+        return res.sendStatus(404);
+      }
+      voice_voicemail.destroy()
+        .then(function() {
+          return res.sendStatus(204);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a voice_voicemail from the DB.
+exports.bulkDestroy = function(req, res) {
+  VoiceVoicemail
+    .destroy({
+      where: {
+        uniqueid: req.query.uniqueid
+      },
+      individualHooks: true
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index 643da78..41e7a38 100644 (file)
@@ -1 +1,39 @@
-var _0xab40=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x56\x6F\x69\x63\x65\x56\x6F\x69\x63\x65\x6D\x61\x69\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x56\x6F\x69\x63\x65\x56\x6F\x69\x63\x65\x6D\x61\x69\x6C\x4D\x65\x73\x73\x61\x67\x65\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x76\x6F\x69\x63\x65\x5F\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x76\x6F\x69\x63\x65\x5F\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C\x3A\x72\x65\x6D\x6F\x76\x65","\x76\x6F\x69\x63\x65\x5F\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C\x5F\x6D\x65\x73\x73\x61\x67\x65\x73\x3A\x73\x61\x76\x65","\x76\x6F\x69\x63\x65\x5F\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C\x5F\x6D\x65\x73\x73\x61\x67\x65\x73\x3A\x72\x65\x6D\x6F\x76\x65"];_0xab40[0];var VoiceVoicemail=require(_0xab40[2])[_0xab40[1]];var VoiceVoicemailMessages=require(_0xab40[2])[_0xab40[3]];exports[_0xab40[4]]=function(_0xb598x3){VoiceVoicemail[_0xab40[5]](function(_0xb598x4){onSave(_0xb598x3,_0xb598x4)});VoiceVoicemail[_0xab40[6]](function(_0xb598x4){onRemove(_0xb598x3,_0xb598x4)});VoiceVoicemailMessages[_0xab40[5]](function(_0xb598x4){onMessageSave(_0xb598x3,_0xb598x4)});VoiceVoicemailMessages[_0xab40[6]](function(_0xb598x4){onMessageRemove(_0xb598x3,_0xb598x4)})};function onSave(_0xb598x3,_0xb598x4,_0xb598x6){_0xb598x3[_0xab40[8]](_0xab40[7],_0xb598x4)}function onRemove(_0xb598x3,_0xb598x4,_0xb598x6){_0xb598x3[_0xab40[8]](_0xab40[9],_0xb598x4)}function onMessageSave(_0xb598x3,_0xb598x4,_0xb598x6){_0xb598x3[_0xab40[8]](_0xab40[10],_0xb598x4)}function onMessageRemove(_0xb598x3,_0xb598x4,_0xb598x6){_0xb598x3[_0xab40[8]](_0xab40[11],_0xb598x4)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var VoiceVoicemail = require('../../models').VoiceVoicemail;
+var VoiceVoicemailMessages = require('../../models').VoiceVoicemailMessages;
+
+exports.register = function(socket) {
+  VoiceVoicemail.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  VoiceVoicemail.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+  VoiceVoicemailMessages.afterCreate(function(doc) {
+    onMessageSave(socket, doc);
+  });
+  VoiceVoicemailMessages.afterDestroy(function(doc) {
+    onMessageRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('voice_voicemail:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('voice_voicemail:remove', doc);
+}
+
+function onMessageSave(socket, doc, cb) {
+  socket.emit('voice_voicemail_messages:save', doc);
+}
+
+function onMessageRemove(socket, doc, cb) {
+  socket.emit('voice_voicemail_messages:remove', doc);
+}
index 7861fea..5785825 100644 (file)
@@ -1 +1,20 @@
-var _0x1593=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x73\x68\x6F\x75\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x70\x70","\x73\x75\x70\x65\x72\x74\x65\x73\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x2F\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x70\x6F\x6E\x64\x20\x77\x69\x74\x68\x20\x4A\x53\x4F\x4E\x20\x61\x72\x72\x61\x79","\x69\x6E\x73\x74\x61\x6E\x63\x65\x6F\x66","\x62\x65","\x62\x6F\x64\x79","\x65\x6E\x64","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x65\x78\x70\x65\x63\x74","\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x2F\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C\x73","\x67\x65\x74"];_0x1593[0];var should=require(_0x1593[1]);var app=require(_0x1593[2]);var request=require(_0x1593[3]);describe(_0x1593[4],function(){it(_0x1593[5],function(_0x97aax4){request(app)[_0x1593[13]](_0x1593[12])[_0x1593[11]](200)[_0x1593[11]](_0x1593[10],/json/)[_0x1593[9]](function(_0x97aax5,_0x97aax6){if(_0x97aax5){return _0x97aax4(_0x97aax5)};_0x97aax6[_0x1593[8]][_0x1593[1]][_0x1593[7]][_0x1593[6]](Array);_0x97aax4()})})})
\ No newline at end of file
+'use strict';
+
+var should = require('should');
+var app = require('../../app');
+var request = require('supertest');
+
+describe('GET /api/voice/voicemails', function() {
+
+  it('should respond with JSON array', function(done) {
+    request(app)
+      .get('/api/voice/voicemails')
+      .expect(200)
+      .expect('Content-Type', /json/)
+      .end(function(err, res) {
+        if (err) return done(err);
+        res.body.should.be.instanceof(Array);
+        done();
+      });
+  });
+});
\ No newline at end of file
index c3be621..b80b40a 100644 (file)
@@ -1 +1,15 @@
-var _0x2bcb=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x76\x6F\x69\x63\x65\x5F\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C\x5F\x6D\x65\x73\x73\x61\x67\x65\x73\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x2F\x3A\x69\x64\x2F\x64\x6F\x77\x6E\x6C\x6F\x61\x64","\x64\x6F\x77\x6E\x6C\x6F\x61\x64","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0x2bcb[0];var express=require(_0x2bcb[1]);var controller=require(_0x2bcb[2]);var auth=require(_0x2bcb[3]);var router=express.Router();router[_0x2bcb[7]](_0x2bcb[4],auth[_0x2bcb[5]](),controller[_0x2bcb[6]]);router[_0x2bcb[7]](_0x2bcb[8],auth[_0x2bcb[5]](),controller[_0x2bcb[9]]);router[_0x2bcb[7]](_0x2bcb[10],auth[_0x2bcb[5]](),controller[_0x2bcb[11]]);router[_0x2bcb[13]](_0x2bcb[4],auth[_0x2bcb[5]](),controller[_0x2bcb[12]]);router[_0x2bcb[13]](_0x2bcb[8],auth[_0x2bcb[5]](),controller[_0x2bcb[14]]);module[_0x2bcb[15]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./voice_voicemail_messages.controller');
+var auth = require('../../auth/auth.service');
+
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), controller.index);
+router.get('/:id', auth.isAuthenticated(), controller.show);
+router.get('/:id/download', auth.isAuthenticated(), controller.download);
+router.delete('/', auth.isAuthenticated(), controller.bulkDestroy);
+router.delete('/:id', auth.isAuthenticated(), controller.destroy);
+
+module.exports = router;
index b6d1bba..8268a61 100644 (file)
@@ -1 +1,106 @@
-var _0x3ebc=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x73\x74\x72\x65\x61\x6D","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x56\x6F\x69\x63\x65\x56\x6F\x69\x63\x65\x6D\x61\x69\x6C\x4D\x65\x73\x73\x61\x67\x65\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x69\x6E\x64\x65\x78","\x6C\x6F\x67","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x6D\x61\x69\x6C\x62\x6F\x78","\x73\x63\x6F\x70\x65","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x64\x65\x73\x74\x72\x6F\x79","\x72\x65\x63\x6F\x72\x64\x69\x6E\x67","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x61\x6C\x6C","\x70\x75\x73\x68","\x66\x6F\x72\x45\x61\x63\x68","\x69\x64\x73","\x66\x69\x6E\x64\x41\x6C\x6C","\x64\x6F\x77\x6E\x6C\x6F\x61\x64","\x62\x61\x73\x65\x36\x34","\x62\x69\x6E\x61\x72\x79"];_0x3ebc[0];var _=require(_0x3ebc[1]);var stream=require(_0x3ebc[2]);var Util=require(_0x3ebc[3]);var VoiceVoicemailMessages=require(_0x3ebc[5])[_0x3ebc[4]];exports[_0x3ebc[6]]=function(_0x324ex5,_0x324ex6){return VoiceVoicemailMessages[_0x3ebc[16]]({method:[_0x3ebc[15],_0x324ex5[_0x3ebc[12]]]})[_0x3ebc[14]](Util[_0x3ebc[13]](_0x324ex5[_0x3ebc[12]]))[_0x3ebc[11]](function(_0x324ex8){_0x324ex6[_0x3ebc[10]](200)[_0x3ebc[9]](_0x324ex8)})[_0x3ebc[8]](function(_0x324ex7){console[_0x3ebc[7]](_0x324ex7);return handleError(_0x324ex6,_0x324ex7)})};exports[_0x3ebc[17]]=function(_0x324ex5,_0x324ex6){return VoiceVoicemailMessages[_0x3ebc[21]](_0x324ex5[_0x3ebc[20]][_0x3ebc[19]])[_0x3ebc[11]](function(_0x324ex9){if(!_0x324ex9){return _0x324ex6[_0x3ebc[18]](404)};return _0x324ex6[_0x3ebc[9]](_0x324ex9)})[_0x3ebc[8]](function(_0x324ex7){return handleError(_0x324ex6,_0x324ex7)})};exports[_0x3ebc[22]]=function(_0x324ex5,_0x324ex6){return VoiceVoicemailMessages[_0x3ebc[21]](_0x324ex5[_0x3ebc[20]][_0x3ebc[19]])[_0x3ebc[11]](function(_0x324ex9){if(!_0x324ex9){return _0x324ex6[_0x3ebc[18]](404)};_0x324ex9[_0x3ebc[23]]=null;_0x324ex9[_0x3ebc[22]]()})[_0x3ebc[11]](function(){return _0x324ex6[_0x3ebc[18]](204)})[_0x3ebc[8]](function(_0x324ex7){return handleError(_0x324ex6,_0x324ex7)})};exports[_0x3ebc[24]]=function(_0x324ex5,_0x324ex6){return VoiceVoicemailMessages[_0x3ebc[29]]({where:{id:_0x324ex5[_0x3ebc[12]][_0x3ebc[28]]},individualHooks:true})[_0x3ebc[11]](function(_0x324exa){var _0x324exb=[];_0x324exa[_0x3ebc[27]](function(_0x324exc){voicemail_message[_0x3ebc[23]]=null;_0x324exb[_0x3ebc[26]](voicemail_message[_0x3ebc[22]]())});return _0x324exb})[_0x3ebc[25]]()[_0x3ebc[11]](function(){return _0x324ex6[_0x3ebc[18]](204)})[_0x3ebc[8]](function(_0x324ex7){return handleError(_0x324ex6,_0x324ex7)})};exports[_0x3ebc[30]]=function(_0x324ex5,_0x324ex6){return VoiceVoicemailMessages[_0x3ebc[21]](_0x324ex5[_0x3ebc[20]][_0x3ebc[19]])[_0x3ebc[11]](function(_0x324exc){var _0x324exd= new Buffer(_0x324exc[_0x3ebc[23]],_0x3ebc[32]).toString(_0x3ebc[31]);return _0x324exd})[_0x3ebc[11]](function(_0x324exd){return _0x324ex6[_0x3ebc[10]](200)[_0x3ebc[9]]({downloadString:_0x324exd})})[_0x3ebc[8]](function(_0x324ex7){console[_0x3ebc[7]](_0x324ex7);return handleError(_0x324ex6,_0x324ex7)})};function handleError(_0x324ex6,_0x324ex7){return _0x324ex6[_0x3ebc[10]](500)[_0x3ebc[9]](_0x324ex7)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var stream = require('stream');
+var Util = require('../../config/util');
+
+var VoiceVoicemailMessages = require('../../models').VoiceVoicemailMessages;
+
+// Get list of voicemail messages
+exports.index = function(req, res) {
+  return VoiceVoicemailMessages
+    .scope({
+      method: ['mailbox', req.query]
+    })
+    .findAndCountAll(Util.getQuery(req.query))
+    .then(function(result) {
+      res.status(200).send(result);
+    })
+    .catch(function(err) {
+      console.log(err);
+      return handleError(res, err);
+    });
+};
+
+// Get a single voicemail_message
+exports.show = function(req, res) {
+  return VoiceVoicemailMessages
+    .findById(req.params.id)
+    .then(function(voicemail_message) {
+      if (!voicemail_message) {
+        return res.sendStatus(404);
+      }
+      return res.send(voicemail_message);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a voicemail_message from the DB.
+exports.destroy = function(req, res) {
+  return VoiceVoicemailMessages
+    .findById(req.params.id)
+    .then(function(voicemail_message) {
+      if (!voicemail_message) {
+        return res.sendStatus(404);
+      }
+      voicemail_message.recording = null;
+      voicemail_message.destroy();
+    })
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes all voicemail_messages from the DB.
+exports.bulkDestroy = function(req, res) {
+  return VoiceVoicemailMessages
+    .findAll({
+      where: {
+        id: req.query.ids
+      },
+      individualHooks: true
+    })
+    .then(function(voicemail_messages) {
+      var bulkDest = [];
+      voicemail_messages.forEach(function(message) {
+        voicemail_message.recording = null;
+        bulkDest.push(voicemail_message.destroy());
+      });
+      return bulkDest;
+    })
+    .all()
+    .then(function() {
+      return res.sendStatus(204);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+exports.download = function(req, res) {
+  return VoiceVoicemailMessages
+    .findById(req.params.id)
+    .then(function(message) {
+      var base64String = new Buffer(message.recording, 'binary').toString('base64');
+      return base64String;
+    })
+    .then(function(base64String) {
+      return res.status(200).send({
+        downloadString: base64String
+      });
+    })
+    .catch(function(err) {
+      console.log(err);
+      return handleError(res, err);
+    });
+};
+
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index 3deb056..ee0fbef 100644 (file)
@@ -1 +1,24 @@
-var _0x8661=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x56\x6F\x69\x63\x65\x56\x6F\x69\x63\x65\x6D\x61\x69\x6C\x4D\x65\x73\x73\x61\x67\x65\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x76\x6F\x69\x63\x65\x5F\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C\x5F\x6D\x65\x73\x73\x61\x67\x65\x73\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x76\x6F\x69\x63\x65\x5F\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C\x5F\x6D\x65\x73\x73\x61\x67\x65\x73\x3A\x72\x65\x6D\x6F\x76\x65"];_0x8661[0];var VoiceVoicemailMessages=require(_0x8661[2])[_0x8661[1]];exports[_0x8661[3]]=function(_0x6f18x2){VoiceVoicemailMessages[_0x8661[4]](function(_0x6f18x3){onSave(_0x6f18x2,_0x6f18x3)});VoiceVoicemailMessages[_0x8661[5]](function(_0x6f18x3){onRemove(_0x6f18x2,_0x6f18x3)})};function onSave(_0x6f18x2,_0x6f18x3,_0x6f18x5){_0x6f18x2[_0x8661[7]](_0x8661[6],_0x6f18x3)}function onRemove(_0x6f18x2,_0x6f18x3,_0x6f18x5){_0x6f18x2[_0x8661[7]](_0x8661[8],_0x6f18x3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var VoiceVoicemailMessages = require('../../models').VoiceVoicemailMessages;
+
+exports.register = function(socket) {
+  VoiceVoicemailMessages.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  VoiceVoicemailMessages.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('voice_voicemail_messages:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('voice_voicemail_messages:remove', doc);
+}
index 4d09978..374e711 100644 (file)
@@ -1 +1,19 @@
-var _0x571c=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x77\x69\x64\x67\x65\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F\x63\x6F\x75\x6E\x74\x65\x72","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x63\x6F\x75\x6E\x74\x65\x72","\x67\x65\x74","\x2F\x74\x61\x62\x6C\x65","\x74\x61\x62\x6C\x65","\x2F\x70\x69\x65\x63\x68\x61\x72\x74","\x70\x69\x65\x63\x68\x61\x72\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x571c[0];var express=require(_0x571c[1]);var controller=require(_0x571c[2]);var auth=require(_0x571c[3]);var router=express.Router();router[_0x571c[7]](_0x571c[4],auth[_0x571c[5]](),controller[_0x571c[6]]);router[_0x571c[7]](_0x571c[8],auth[_0x571c[5]](),controller[_0x571c[9]]);router[_0x571c[7]](_0x571c[10],auth[_0x571c[5]](),controller[_0x571c[11]]);module[_0x571c[12]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./widget.controller');
+var auth = require('../../auth/auth.service');
+
+var router = express.Router();
+
+// router.get('/', auth.isAuthenticated(), controller.index);
+router.get('/counter', auth.isAuthenticated(), controller.counter);
+router.get('/table', auth.isAuthenticated(), controller.table);
+router.get('/piechart', auth.isAuthenticated(), controller.piechart);
+// router.get('/:id', auth.isAuthenticated(), controller.show);
+// router.post('/', auth.isAuthenticated(), controller.create);
+// router.put('/:id', auth.isAuthenticated(), controller.update);
+// router.patch('/:id', auth.isAuthenticated(), controller.update);
+// router.delete('/:id', auth.isAuthenticated(), controller.destroy);
+
+module.exports = router;
index fe5e247..731df92 100644 (file)
@@ -1 +1,102 @@
-var _0x9e36=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x63\x6F\x75\x6E\x74\x65\x72","\x53\x45\x4C\x45\x43\x54\x20\x25\x73\x20\x46\x52\x4F\x4D\x20\x25\x73","\x73\x65\x6C\x65\x63\x74","\x71\x75\x65\x72\x79","\x74\x61\x62\x6C\x65","\x66\x6F\x72\x6D\x61\x74","\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E","\x20\x57\x48\x45\x52\x45\x20\x25\x73","\x6C\x6F\x67","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x53\x45\x4C\x45\x43\x54","\x51\x75\x65\x72\x79\x54\x79\x70\x65\x73","\x66\x69\x65\x6C\x64\x73","\x69\x73\x41\x72\x72\x61\x79","\x70\x61\x72\x73\x65","\x63\x6F\x6C\x75\x6D\x6E","\x61\x6C\x69\x61\x73","\x20\x41\x53\x20\x22","\x22","\x70\x75\x73\x68","\x66\x6F\x72\x45\x61\x63\x68","\x69\x73\x53\x74\x72\x69\x6E\x67","\x6C\x65\x6E\x67\x74\x68","\x2C","\x6A\x6F\x69\x6E","\x2A","\x53\x45\x4C\x45\x43\x54\x20\x25\x73\x20\x46\x52\x4F\x4D\x20\x25\x73\x20\x57\x48\x45\x52\x45\x20\x25\x73","\x72\x65\x70\x6F\x72\x74","\x70\x69\x65\x63\x68\x61\x72\x74","","\x75\x6E\x64\x65\x66\x69\x6E\x65\x64","\x53\x45\x4C\x45\x43\x54\x20\x25\x73\x20\x46\x52\x4F\x4D\x20\x25\x73\x25\x73"];_0x9e36[0];var _=require(_0x9e36[1]);var util=require(_0x9e36[2]);var sequelize=require(_0x9e36[4])[_0x9e36[3]];exports[_0x9e36[5]]=function(_0xcf57x4,_0xcf57x5){var _0xcf57x6=util[_0x9e36[10]](_0x9e36[6],_0xcf57x4[_0x9e36[8]][_0x9e36[7]],_0xcf57x4[_0x9e36[8]][_0x9e36[9]]);if(_0xcf57x4[_0x9e36[8]][_0x9e36[11]]){_0xcf57x6+=util[_0x9e36[10]](_0x9e36[12],decodeURIComponent(_0xcf57x4[_0x9e36[8]][_0x9e36[11]]))};sequelize[_0x9e36[8]](_0xcf57x6,{type:sequelize[_0x9e36[19]][_0x9e36[18]]})[_0x9e36[17]](function(_0xcf57x8){return _0xcf57x5[_0x9e36[16]](200)[_0x9e36[15]]({result:_0xcf57x8})})[_0x9e36[14]](function(_0xcf57x7){console[_0x9e36[13]](_0xcf57x7);return handleError(_0xcf57x5,_0xcf57x7)})};exports[_0x9e36[9]]=function(_0xcf57x4,_0xcf57x5){var _0xcf57x9=[];var _0xcf57xa;if(_0xcf57x4[_0x9e36[8]][_0x9e36[20]]){if(_[_0x9e36[21]](_0xcf57x4[_0x9e36[8]][_0x9e36[20]])){_0xcf57x4[_0x9e36[8]][_0x9e36[20]][_0x9e36[28]](function(_0xcf57xb){_0xcf57xa=JSON[_0x9e36[22]](_0xcf57xb);if(_0xcf57xa[_0x9e36[23]]&&_0xcf57xa[_0x9e36[24]]){_0xcf57x9[_0x9e36[27]](_0xcf57xa[_0x9e36[23]]+_0x9e36[25]+_0xcf57xa[_0x9e36[24]]+_0x9e36[26])}})}else {if(_[_0x9e36[29]](_0xcf57x4[_0x9e36[8]][_0x9e36[20]])){_0xcf57xa=JSON[_0x9e36[22]](_0xcf57x4[_0x9e36[8]][_0x9e36[20]]);if(_0xcf57xa[_0x9e36[23]]&&_0xcf57xa[_0x9e36[24]]){_0xcf57x9[_0x9e36[27]](_0xcf57xa[_0x9e36[23]]+_0x9e36[25]+_0xcf57xa[_0x9e36[24]]+_0x9e36[26])}}}};var _0xcf57xc=_0xcf57x9[_0x9e36[30]]?_0xcf57x9[_0x9e36[32]](_0x9e36[31]):_0x9e36[33];sequelize[_0x9e36[8]](util[_0x9e36[10]](_0x9e36[34],_0xcf57xc,_0x9e36[35]+_0xcf57x4[_0x9e36[8]][_0x9e36[9]],decodeURIComponent(_0xcf57x4[_0x9e36[8]][_0x9e36[11]])),{type:sequelize[_0x9e36[19]][_0x9e36[18]]})[_0x9e36[17]](function(_0xcf57x8){return _0xcf57x5[_0x9e36[16]](200)[_0x9e36[15]](_0xcf57x8)})[_0x9e36[14]](function(_0xcf57x7){return handleError(_0xcf57x5,_0xcf57x7)})};exports[_0x9e36[36]]=function(_0xcf57x4,_0xcf57x5){var _0xcf57x9=[];var _0xcf57xa;if(_0xcf57x4[_0x9e36[8]][_0x9e36[20]]){if(_[_0x9e36[21]](_0xcf57x4[_0x9e36[8]][_0x9e36[20]])){_0xcf57x4[_0x9e36[8]][_0x9e36[20]][_0x9e36[28]](function(_0xcf57xb){_0xcf57xa=JSON[_0x9e36[22]](_0xcf57xb);if(_0xcf57xa[_0x9e36[23]]&&_0xcf57xa[_0x9e36[24]]){_0xcf57x9[_0x9e36[27]](_0xcf57xa[_0x9e36[23]]+_0x9e36[25]+_0xcf57xa[_0x9e36[24]]+_0x9e36[26])}})}else {if(_[_0x9e36[29]](_0xcf57x4[_0x9e36[8]][_0x9e36[20]])){_0xcf57xa=JSON[_0x9e36[22]](_0xcf57x4[_0x9e36[8]][_0x9e36[20]]);if(_0xcf57xa[_0x9e36[23]]&&_0xcf57xa[_0x9e36[24]]){_0xcf57x9[_0x9e36[27]](_0xcf57xa[_0x9e36[23]]+_0x9e36[25]+_0xcf57xa[_0x9e36[24]]+_0x9e36[26])}}}};var _0xcf57xc=_0xcf57x9[_0x9e36[30]]?_0xcf57x9[_0x9e36[32]](_0x9e36[31]):_0x9e36[33];var _0xcf57xd=_0x9e36[37];if(_0xcf57x4[_0x9e36[8]][_0x9e36[11]]!==_0x9e36[38]){_0xcf57xd=util[_0x9e36[10]](_0x9e36[12],decodeURIComponent(_0xcf57x4[_0x9e36[8]][_0x9e36[11]]))};sequelize[_0x9e36[8]](util[_0x9e36[10]](_0x9e36[39],_0xcf57xc,_0xcf57x4[_0x9e36[8]][_0x9e36[9]],_0xcf57xd),{type:sequelize[_0x9e36[19]][_0x9e36[18]]})[_0x9e36[17]](function(_0xcf57x8){return _0xcf57x5[_0x9e36[16]](200)[_0x9e36[15]]({result:_0xcf57x8})})[_0x9e36[14]](function(_0xcf57x7){return handleError(_0xcf57x5,_0xcf57x7)})};function handleError(_0xcf57x5,_0xcf57x7){return _0xcf57x5[_0x9e36[16]](500)[_0x9e36[15]](_0xcf57x7)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var util = require('util');
+var sequelize = require('../../models').sequelize;
+
+// var ReportAgent = require('../../models').ReportAgent;
+// var ReportCall = require('../../models').ReportCall;
+// var ReportDial = require('../../models').ReportDial;
+// var ReportMember = require('../../models').ReportMember;
+// var ReportQueue = require('../../models').ReportQueue;
+
+
+
+exports.counter = function(req, res) {
+  var query = util.format("SELECT %s FROM %s", req.query.select, req.query.table);
+  if (req.query.condition) {
+    query += util.format(" WHERE %s", decodeURIComponent(req.query.condition))
+  }
+  sequelize.query(query, {
+      type: sequelize.QueryTypes.SELECT
+    })
+    .then(function(result) {
+      return res.status(200).send({
+        result: result
+      });
+    })
+    .catch(function(err) {
+      console.log(err);
+      return handleError(res, err);
+    });
+};
+
+exports.table = function(req, res) {
+  var columns = [];
+  var elem;
+  if (req.query.fields) {
+    if (_.isArray(req.query.fields)) {
+      req.query.fields.forEach(function(element) {
+        elem = JSON.parse(element);
+        if (elem.column && elem.alias) {
+          columns.push(elem.column + ' AS "' + elem.alias + '"');
+        }
+      });
+    } else if (_.isString(req.query.fields)) {
+      elem = JSON.parse(req.query.fields);
+      if (elem.column && elem.alias) {
+        columns.push(elem.column + ' AS "' + elem.alias + '"');
+      }
+    }
+  }
+  var select = columns.length ? columns.join(',') : '*';
+  sequelize.query(util.format("SELECT %s FROM %s WHERE %s", select, 'report' + req.query.table, decodeURIComponent(req.query.condition)), {
+      type: sequelize.QueryTypes.SELECT
+    })
+    .then(function(result) {
+      return res.status(200).send(result);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+exports.piechart = function(req, res) {
+  var columns = [];
+  var elem;
+  if (req.query.fields) {
+    if (_.isArray(req.query.fields)) {
+      req.query.fields.forEach(function(element) {
+        elem = JSON.parse(element);
+        if (elem.column && elem.alias) {
+          columns.push(elem.column + ' AS "' + elem.alias + '"');
+        }
+      });
+    } else if (_.isString(req.query.fields)) {
+      elem = JSON.parse(req.query.fields);
+      if (elem.column && elem.alias) {
+        columns.push(elem.column + ' AS "' + elem.alias + '"');
+      }
+    }
+  }
+  var select = columns.length ? columns.join(',') : '*';
+  var where = '';
+  if (req.query.condition !== 'undefined') {
+    where = util.format(' WHERE %s', decodeURIComponent(req.query.condition));
+  }
+  sequelize.query(util.format("SELECT %s FROM %s%s", select, req.query.table, where), {
+      type: sequelize.QueryTypes.SELECT
+    })
+    .then(function(result) {
+      return res.status(200).send({
+        result: result
+      });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index db91344..94ea420 100644 (file)
@@ -1 +1,20 @@
-var _0x48d1=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x73\x68\x6F\x75\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x70\x70","\x73\x75\x70\x65\x72\x74\x65\x73\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x77\x69\x64\x67\x65\x74\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x70\x6F\x6E\x64\x20\x77\x69\x74\x68\x20\x4A\x53\x4F\x4E\x20\x61\x72\x72\x61\x79","\x69\x6E\x73\x74\x61\x6E\x63\x65\x6F\x66","\x62\x65","\x62\x6F\x64\x79","\x65\x6E\x64","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x65\x78\x70\x65\x63\x74","\x2F\x61\x70\x69\x2F\x77\x69\x64\x67\x65\x74\x73","\x67\x65\x74"];_0x48d1[0];var should=require(_0x48d1[1]);var app=require(_0x48d1[2]);var request=require(_0x48d1[3]);describe(_0x48d1[4],function(){it(_0x48d1[5],function(_0xb726x4){request(app)[_0x48d1[13]](_0x48d1[12])[_0x48d1[11]](200)[_0x48d1[11]](_0x48d1[10],/json/)[_0x48d1[9]](function(_0xb726x5,_0xb726x6){if(_0xb726x5){return _0xb726x4(_0xb726x5)};_0xb726x6[_0x48d1[8]][_0x48d1[1]][_0x48d1[7]][_0x48d1[6]](Array);_0xb726x4()})})})
\ No newline at end of file
+'use strict';
+
+var should = require('should');
+var app = require('../../app');
+var request = require('supertest');
+
+describe('GET /api/widgets', function() {
+
+  it('should respond with JSON array', function(done) {
+    request(app)
+      .get('/api/widgets')
+      .expect(200)
+      .expect('Content-Type', /json/)
+      .end(function(err, res) {
+        if (err) return done(err);
+        res.body.should.be.instanceof(Array);
+        done();
+      });
+  });
+});
\ No newline at end of file
index 32dd7f5..e03bc91 100644 (file)
@@ -1 +1,33 @@
-var _0x882f=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x78\x63\x68\x61\x74\x74\x79\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F\x6A\x71\x75\x65\x72\x79","\x67\x65\x74\x4A\x71\x75\x65\x72\x79\x4C\x69\x62\x72\x61\x72\x79","\x67\x65\x74","\x2F\x61\x73\x73\x65\x74\x73","\x67\x65\x74\x41\x73\x73\x65\x74\x73","\x2F\x73\x74\x61\x74\x75\x73","\x67\x65\x74\x53\x74\x61\x74\x75\x73","\x2F\x73\x69\x67\x6E\x75\x70","\x73\x69\x67\x6E\x75\x70\x43\x75\x73\x74\x6F\x6D\x65\x72","\x2F\x72\x65\x61\x64","\x67\x65\x74\x4D\x65\x73\x73\x61\x67\x65\x73","\x2F\x73\x65\x6E\x64","\x73\x65\x6E\x64\x4D\x65\x73\x73\x61\x67\x65","\x2F\x73\x69\x67\x6E\x6F\x75\x74","\x73\x69\x67\x6E\x6F\x75\x74\x43\x75\x73\x74\x6F\x6D\x65\x72","\x2F\x73\x75\x62\x6D\x69\x74","\x73\x75\x62\x6D\x69\x74\x45\x6E\x71\x75\x69\x72\x79","\x2F\x75\x6E\x73\x65\x72\x76\x65\x64","\x75\x6E\x73\x65\x72\x76\x65\x64\x43\x75\x73\x74\x6F\x6D\x65\x72","\x2F\x74\x72\x61\x6E\x73\x63\x72\x69\x70\x74","\x67\x65\x74\x54\x72\x61\x6E\x73\x63\x72\x69\x70\x74","\x2F\x72\x61\x74\x69\x6E\x67","\x73\x65\x74\x52\x61\x74\x69\x6E\x67","\x2F\x61\x62\x61\x6E\x64\x6F\x6E","\x61\x62\x61\x6E\x64\x6F\x6E\x43\x75\x73\x74\x6F\x6D\x65\x72","\x2F\x3A\x69\x64","\x67\x65\x74\x4A\x73\x42\x79\x57\x65\x62\x73\x69\x74\x65","\x2F\x3A\x69\x64\x2F\x68\x74\x6D\x6C","\x67\x65\x74\x48\x74\x6D\x6C\x42\x79\x57\x65\x62\x73\x69\x74\x65","\x2F\x3A\x69\x64\x2F\x70\x72\x6F\x61\x63\x74\x69\x76\x65","\x67\x65\x74\x50\x72\x6F\x61\x63\x74\x69\x76\x65\x41\x63\x74\x69\x6F\x6E\x73\x42\x79\x57\x65\x62\x73\x69\x74\x65","\x2F\x3A\x69\x64\x2F\x73\x74\x79\x6C\x65\x73","\x67\x65\x74\x53\x74\x79\x6C\x65\x42\x79\x57\x65\x62\x73\x69\x74\x65","\x2F","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x882f[0];var express=require(_0x882f[1]);var controller=require(_0x882f[2]);var router=express.Router();router[_0x882f[5]](_0x882f[3],controller[_0x882f[4]]);router[_0x882f[5]](_0x882f[6],controller[_0x882f[7]]);router[_0x882f[5]](_0x882f[8],controller[_0x882f[9]]);router[_0x882f[5]](_0x882f[10],controller[_0x882f[11]]);router[_0x882f[5]](_0x882f[12],controller[_0x882f[13]]);router[_0x882f[5]](_0x882f[14],controller[_0x882f[15]]);router[_0x882f[5]](_0x882f[16],controller[_0x882f[17]]);router[_0x882f[5]](_0x882f[18],controller[_0x882f[19]]);router[_0x882f[5]](_0x882f[20],controller[_0x882f[21]]);router[_0x882f[5]](_0x882f[22],controller[_0x882f[23]]);router[_0x882f[5]](_0x882f[24],controller[_0x882f[25]]);router[_0x882f[5]](_0x882f[26],controller[_0x882f[27]]);router[_0x882f[5]](_0x882f[28],controller[_0x882f[29]]);router[_0x882f[5]](_0x882f[30],controller[_0x882f[31]]);router[_0x882f[5]](_0x882f[32],controller[_0x882f[33]]);router[_0x882f[5]](_0x882f[34],controller[_0x882f[35]]);router[_0x882f[38]](_0x882f[36],controller[_0x882f[37]]);router[_0x882f[40]](_0x882f[28],controller[_0x882f[39]]);router[_0x882f[41]](_0x882f[28],controller[_0x882f[39]]);router[_0x882f[43]](_0x882f[28],controller[_0x882f[42]]);module[_0x882f[44]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./xchatty.controller');
+
+var router = express.Router();
+
+router.get('/jquery', controller.getJqueryLibrary);
+router.get('/assets', controller.getAssets);
+
+router.get('/status', controller.getStatus);
+router.get('/signup', controller.signupCustomer);
+router.get('/read', controller.getMessages);
+router.get('/send', controller.sendMessage);
+router.get('/signout', controller.signoutCustomer);
+router.get('/submit', controller.submitEnquiry);
+router.get('/unserved', controller.unservedCustomer);
+router.get('/transcript', controller.getTranscript);
+router.get('/rating', controller.setRating);
+router.get('/abandon', controller.abandonCustomer);
+
+router.get('/:id', controller.getJsByWebsite);
+router.get('/:id/html', controller.getHtmlByWebsite);
+router.get('/:id/proactive', controller.getProactiveActionsByWebsite);
+router.get('/:id/styles', controller.getStyleByWebsite);
+
+// router.get('/:id', controller.show);
+router.post('/', controller.create);
+router.put('/:id', controller.update);
+router.patch('/:id', controller.update);
+router.delete('/:id', controller.destroy);
+
+module.exports = router;
index c9cbc99..017d746 100644 (file)
@@ -1 +1,829 @@
-var _0x77c2=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x6A\x73\x6D\x69\x6E","\x6D\x75\x73\x74\x61\x63\x68\x65","\x71\x75\x65\x72\x79\x73\x74\x72\x69\x6E\x67","\x70\x61\x74\x68","\x6D\x64\x35","\x66\x73","\x75\x61\x2D\x70\x61\x72\x73\x65\x72\x2D\x6A\x73","\x61\x63\x63\x65\x70\x74\x2D\x6C\x61\x6E\x67\x75\x61\x67\x65\x2D\x70\x61\x72\x73\x65\x72","\x69\x70\x61\x64\x64\x72\x2E\x6A\x73","\x67\x65\x6F\x69\x70\x2D\x6C\x69\x74\x65","\x74\x6F\x2D\x63\x73\x76","\x75\x74\x69\x6C","\x6D\x6F\x6D\x65\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x58\x63\x68\x61\x74\x74\x79","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6D\x70\x6F\x6E\x65\x6E\x74\x73\x2F\x78\x63\x68\x61\x74\x74\x79","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x55\x73\x65\x72","\x43\x68\x61\x74\x52\x6F\x6F\x6D","\x43\x68\x61\x74\x45\x6E\x71\x75\x69\x72\x79","\x43\x68\x61\x74\x56\x69\x73\x69\x74\x6F\x72","\x43\x68\x61\x74\x4D\x65\x73\x73\x61\x67\x65","\x43\x68\x61\x74\x57\x65\x62\x73\x69\x74\x65","\x43\x68\x61\x74\x57\x65\x62\x73\x69\x74\x65\x73\x46\x69\x65\x6C\x64","\x43\x68\x61\x74\x50\x72\x6F\x61\x63\x74\x69\x76\x65\x41\x63\x74\x69\x6F\x6E","\x52\x65\x70\x6F\x72\x74\x43\x68\x61\x74\x53\x65\x73\x73\x69\x6F\x6E","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6C\x6C","\x67\x65\x74\x4A\x73\x42\x79\x57\x65\x62\x73\x69\x74\x65","\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2F\x6A\x61\x76\x61\x73\x63\x72\x69\x70\x74","\x6E\x6F\x77","\x73\x65\x74","\x6A\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x72\x65\x6D\x6F\x74\x65","\x73\x74\x72\x69\x70\x54\x72\x61\x69\x6C\x69\x6E\x67\x53\x6C\x61\x73\x68","\x2F\x61\x70\x69\x2F\x78\x63\x68\x61\x74\x74\x79\x2F","\x66\x61\x6C\x73\x65","\x74\x72\x75\x65","\x22\x22","\x6E\x75\x6C\x6C","\x2F\x61\x70\x69\x2F\x78\x63\x68\x61\x74\x74\x79\x2F\x61\x73\x73\x65\x74\x73","\x61\x6E\x69\x6D\x61\x74\x69\x6F\x6E","\x68\x65\x61\x64\x65\x72\x5F\x73\x68\x61\x70\x65","\x68\x65\x61\x64\x65\x72\x5F\x6F\x6E\x6C\x69\x6E\x65","\x6F\x6E\x6C\x69\x6E\x65\x5F\x6D\x65\x73\x73\x61\x67\x65","\x75\x73\x65\x72\x6E\x61\x6D\x65\x5F\x70\x6C\x61\x63\x65\x68\x6F\x6C\x64\x65\x72","\x65\x6D\x61\x69\x6C\x5F\x70\x6C\x61\x63\x65\x68\x6F\x6C\x64\x65\x72","\x73\x74\x61\x72\x74\x5F\x63\x68\x61\x74\x5F\x62\x75\x74\x74\x6F\x6E","\x6F\x66\x66\x6C\x69\x6E\x65\x5F\x6D\x65\x73\x73\x61\x67\x65","\x68\x65\x61\x64\x65\x72\x5F\x6F\x66\x66\x6C\x69\x6E\x65","\x65\x6E\x71\x75\x69\x72\x79\x5F\x6D\x65\x73\x73\x61\x67\x65\x5F\x70\x6C\x61\x63\x65\x68\x6F\x6C\x64\x65\x72","\x65\x6E\x71\x75\x69\x72\x79\x5F\x62\x75\x74\x74\x6F\x6E","\x64\x6F\x77\x6E\x6C\x6F\x61\x64\x5F\x74\x72\x61\x6E\x73\x63\x72\x69\x70\x74","\x72\x61\x74\x69\x6E\x67\x5F\x6D\x65\x73\x73\x61\x67\x65","\x72\x61\x74\x69\x6E\x67\x5F\x73\x65\x6E\x64","\x72\x61\x74\x69\x6E\x67\x5F\x73\x6B\x69\x70","\x72\x65\x6E\x64\x65\x72","\x66\x69\x6E\x64\x42\x79\x49\x64","\x67\x65\x74\x53\x74\x79\x6C\x65\x42\x79\x57\x65\x62\x73\x69\x74\x65","\x74\x65\x78\x74\x2F\x63\x73\x73","\x63\x73\x73","\x63\x6F\x6C\x6F\x72","\x63\x6F\x6C\x6F\x72\x5F\x66\x6F\x63\x75\x73","\x63\x6F\x6C\x6F\x72\x5F\x62\x75\x74\x74\x6F\x6E","\x67\x65\x74\x41\x73\x73\x65\x74\x73","\x72\x6F\x6F\x74","\x73\x65\x72\x76\x65\x72","\x63\x6F\x6D\x70\x6F\x6E\x65\x6E\x74\x73","\x78\x63\x68\x61\x74\x74\x79","\x61\x73\x73\x65\x74\x73","\x72\x65\x73\x6F\x75\x72\x63\x65","\x71\x75\x65\x72\x79","\x6A\x6F\x69\x6E","\x64\x6F\x77\x6E\x6C\x6F\x61\x64","\x67\x65\x74\x4A\x71\x75\x65\x72\x79\x4C\x69\x62\x72\x61\x72\x79","\x6A\x71\x75\x65\x72\x79","\x67\x65\x74\x53\x74\x61\x74\x75\x73","\x73\x65\x73\x73\x69\x6F\x6E","\x69\x73\x5F\x75\x6E\x73\x65\x72\x76\x65\x64","\x63\x61\x6C\x6C\x62\x61\x63\x6B","\x28","\x73\x74\x72\x69\x6E\x67\x69\x66\x79","\x29","\x76\x69\x73\x69\x74\x6F\x72\x5F\x69\x64","\x75\x6E\x73\x65\x72\x76\x65\x64","\x66\x69\x6E\x64\x4F\x6E\x65","\x72\x6F\x6F\x6D\x5F\x69\x64","\x73\x69\x67\x6E\x65\x64\x5F\x75\x70","\x4F\x50\x45\x4E","","\x6F\x70\x65\x6E\x5F\x73\x74\x61\x74\x65","\x64\x61\x74\x61","\x66\x75\x6C\x6C\x6E\x61\x6D\x65","\x65\x6D\x61\x69\x6C","\x61\x76\x61\x74\x61\x72","\x6C\x65\x6E\x67\x74\x68","\x61\x67\x65\x6E\x74","\x67\x65\x74\x4D\x65\x73\x73\x61\x67\x65\x73","\x6E\x61\x6D\x65","\x69\x73\x5F\x6E\x65\x77\x5F\x70\x61\x67\x65","\x77\x68\x65\x72\x65","\x6C\x61\x73\x74\x5F\x69\x64","\x73\x65\x6E\x64\x4D\x65\x73\x73\x61\x67\x65","\x6D\x65\x73\x73\x61\x67\x65","\x4D\x65\x73\x73\x61\x67\x65","\x63\x72\x65\x61\x74\x65","\x73\x69\x67\x6E\x6F\x75\x74\x43\x75\x73\x74\x6F\x6D\x65\x72","\x43\x4C\x4F\x53\x45\x44","\x75\x70\x64\x61\x74\x65","\x73\x69\x67\x6E\x75\x70\x43\x75\x73\x74\x6F\x6D\x65\x72","\x67\x65\x74\x52\x65\x73\x75\x6C\x74","\x75\x73\x65\x72\x2D\x61\x67\x65\x6E\x74","\x68\x65\x61\x64\x65\x72\x73","\x73\x65\x74\x55\x41","\x61\x63\x63\x65\x70\x74\x2D\x6C\x61\x6E\x67\x75\x61\x67\x65","\x70\x61\x72\x73\x65","\x78\x2D\x66\x6F\x72\x77\x61\x72\x64\x65\x64\x2D\x66\x6F\x72","\x72\x65\x6D\x6F\x74\x65\x41\x64\x64\x72\x65\x73\x73","\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E","\x69\x70","\x44\x69\x73\x63\x75\x73\x73\x69\x6F\x6E","\x72\x65\x66\x65\x72\x65\x72","\x77\x65\x62\x63\x68\x61\x74","\x62\x72\x6F\x77\x73\x65\x72","\x20","\x76\x65\x72\x73\x69\x6F\x6E","\x65\x6E\x67\x69\x6E\x65","\x6F\x73","\x6D\x6F\x64\x65\x6C","\x64\x65\x76\x69\x63\x65","\x76\x65\x6E\x64\x6F\x72","\x74\x79\x70\x65","\x63\x68\x61\x74\x57\x65\x62\x73\x69\x74\x65\x49\x64","\x64\x61\x74\x61\x31","\x6C\x61\x62\x65\x6C\x44\x61\x74\x61\x31","\x64\x61\x74\x61\x32","\x6C\x61\x62\x65\x6C\x44\x61\x74\x61\x32","\x64\x61\x74\x61\x33","\x6C\x61\x62\x65\x6C\x44\x61\x74\x61\x33","\x62\x61\x73\x65\x36\x34","\x75\x6E\x73\x65\x72\x76\x65\x64\x43\x75\x73\x74\x6F\x6D\x65\x72","\x73\x75\x62\x6D\x69\x74\x45\x6E\x71\x75\x69\x72\x79","\x45\x6E\x71\x75\x69\x72\x79","\x65\x6E\x71\x75\x69\x72\x79","\x77\x65\x62\x73\x69\x74\x65\x49\x64","\x6F\x66\x66\x6C\x69\x6E\x65\x44\x61\x74\x61\x31","\x6C\x61\x62\x65\x6C\x4F\x66\x66\x6C\x69\x6E\x65\x44\x61\x74\x61\x31","\x6F\x66\x66\x6C\x69\x6E\x65\x44\x61\x74\x61\x32","\x6C\x61\x62\x65\x6C\x4F\x66\x66\x6C\x69\x6E\x65\x44\x61\x74\x61\x32","\x6F\x66\x66\x6C\x69\x6E\x65\x44\x61\x74\x61\x33","\x6C\x61\x62\x65\x6C\x4F\x66\x66\x6C\x69\x6E\x65\x44\x61\x74\x61\x33","\x72\x6F\x6C\x6C\x62\x61\x63\x6B","\x63\x6F\x6D\x6D\x69\x74","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E","\x67\x65\x74\x54\x72\x61\x6E\x73\x63\x72\x69\x70\x74","\x55\x73\x65\x72\x49\x64","\x72\x65\x70\x6C\x61\x63\x65","\x62\x6F\x64\x79","\x63\x72\x65\x61\x74\x65\x64\x41\x74","\x70\x75\x73\x68","\x66\x6F\x72\x45\x61\x63\x68","\x74\x65\x78\x74\x2F\x63\x73\x76","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79","\x67\x65\x74\x48\x74\x6D\x6C\x42\x79\x57\x65\x62\x73\x69\x74\x65","\x74\x65\x6D\x70\x6C\x61\x74\x65","\x65\x6E\x71\x75\x69\x72\x79\x5F\x65\x6E\x61\x62\x6C\x65","\x4F\x6E\x6C\x69\x6E\x65","\x3C\x64\x69\x76\x20\x63\x6C\x61\x73\x73\x3D\x22\x78\x63\x5F\x64\x69\x76\x5F\x67\x72\x6F\x75\x70\x22\x3E","\x3C\x6C\x61\x62\x65\x6C\x20\x63\x6C\x61\x73\x73\x3D\x22\x78\x63\x5F\x6C\x61\x62\x65\x6C\x22\x20\x66\x6F\x72\x3D\x22\x25\x64\x22\x3E\x25\x73\x20\x25\x73\x3C\x2F\x6C\x61\x62\x65\x6C\x3E","\x6C\x61\x62\x65\x6C","\x72\x65\x71\x75\x69\x72\x65\x64","\x2A","\x66\x6F\x72\x6D\x61\x74","\x3C\x69\x6E\x70\x75\x74\x20\x64\x61\x74\x61\x2D\x6C\x61\x62\x65\x6C\x3D\x22\x25\x73\x22\x20\x74\x79\x70\x65\x3D\x22\x74\x65\x78\x74\x22\x20\x69\x64\x3D\x22\x25\x64\x22\x20\x6E\x61\x6D\x65\x3D\x22\x64\x61\x74\x61\x5B\x44\x69\x73\x63\x75\x73\x73\x69\x6F\x6E\x5D\x5B\x64\x61\x74\x61\x25\x64\x5D\x22\x20\x70\x6C\x61\x63\x65\x68\x6F\x6C\x64\x65\x72\x3D\x22\x25\x73\x22\x20\x25\x73\x2F\x3E","\x70\x6C\x61\x63\x65\x68\x6F\x6C\x64\x65\x72","\x3C\x2F\x64\x69\x76\x3E","\x74\x65\x78\x74\x49\x6E\x70\x75\x74","\x3C\x74\x65\x78\x74\x61\x72\x65\x61\x20\x69\x64\x3D\x22\x25\x64\x22\x20\x64\x61\x74\x61\x2D\x6C\x61\x62\x65\x6C\x3D\x22\x25\x73\x22\x20\x6E\x61\x6D\x65\x3D\x22\x64\x61\x74\x61\x5B\x44\x69\x73\x63\x75\x73\x73\x69\x6F\x6E\x5D\x5B\x64\x61\x74\x61\x25\x64\x5D\x22\x20\x70\x6C\x61\x63\x65\x68\x6F\x6C\x64\x65\x72\x3D\x22\x25\x73\x22\x20\x25\x73\x3E\x3C\x2F\x74\x65\x78\x74\x61\x72\x65\x61\x3E","\x74\x65\x78\x74\x41\x72\x65\x61","\x3C\x6C\x61\x62\x65\x6C\x20\x63\x6C\x61\x73\x73\x3D\x22\x78\x63\x5F\x6C\x61\x62\x65\x6C\x22\x3E\x25\x73\x3C\x2F\x6C\x61\x62\x65\x6C\x3E","\x6F\x70\x74\x69\x6F\x6E\x73","\x3C\x6C\x61\x62\x65\x6C\x20\x73\x74\x79\x6C\x65\x3D\x22\x64\x69\x73\x70\x6C\x61\x79\x3A\x62\x6C\x6F\x63\x6B\x3B\x22\x3E","\x3C\x69\x6E\x70\x75\x74\x20\x74\x79\x70\x65\x3D\x22\x63\x68\x65\x63\x6B\x62\x6F\x78\x22\x20\x6E\x61\x6D\x65\x3D\x22\x64\x61\x74\x61\x5B\x44\x69\x73\x63\x75\x73\x73\x69\x6F\x6E\x5D\x5B\x64\x61\x74\x61\x25\x64\x5D\x22\x20\x76\x61\x6C\x75\x65\x3D\x22\x25\x73\x22\x3E\x20\x25\x73\x3C\x62\x72\x3E","\x3C\x2F\x6C\x61\x62\x65\x6C\x3E","\x63\x68\x65\x63\x6B\x62\x6F\x78","\x3C\x69\x6E\x70\x75\x74\x20\x74\x79\x70\x65\x3D\x22\x72\x61\x64\x69\x6F\x22\x20\x6E\x61\x6D\x65\x3D\x22\x64\x61\x74\x61\x5B\x44\x69\x73\x63\x75\x73\x73\x69\x6F\x6E\x5D\x5B\x64\x61\x74\x61\x25\x64\x5D\x22\x20\x76\x61\x6C\x75\x65\x3D\x22\x25\x73\x22\x3E\x20\x25\x73\x3C\x62\x72\x3E","\x72\x61\x64\x69\x6F","\x3C\x6C\x61\x62\x65\x6C\x20\x63\x6C\x61\x73\x73\x3D\x22\x78\x63\x5F\x6C\x61\x62\x65\x6C\x22\x20\x66\x6F\x72\x3D\x22\x25\x64\x22\x3E\x25\x73\x3C\x2F\x6C\x61\x62\x65\x6C\x3E","\x3C\x73\x65\x6C\x65\x63\x74\x20\x6E\x61\x6D\x65\x3D\x22\x64\x61\x74\x61\x5B\x44\x69\x73\x63\x75\x73\x73\x69\x6F\x6E\x5D\x5B\x64\x61\x74\x61\x25\x64\x5D\x22\x3E","\x3C\x6F\x70\x74\x69\x6F\x6E\x20\x76\x61\x6C\x75\x65\x3D\x22\x25\x73\x22\x3E\x25\x73\x3C\x2F\x6F\x70\x74\x69\x6F\x6E\x3E","\x3C\x2F\x73\x65\x6C\x65\x63\x74\x3E\x3C\x2F\x64\x69\x76\x3E","\x73\x65\x6C\x65\x63\x74","\x63\x6F\x6D\x70\x6F\x6E\x65\x6E\x74","\x3C\x62\x72\x3E","\x3C\x69\x6E\x70\x75\x74\x20\x74\x79\x70\x65\x3D\x22\x68\x69\x64\x64\x65\x6E\x22\x20\x6E\x61\x6D\x65\x3D\x22\x64\x61\x74\x61\x5B\x44\x69\x73\x63\x75\x73\x73\x69\x6F\x6E\x5D\x5B\x6C\x61\x62\x65\x6C\x44\x61\x74\x61\x25\x64\x5D\x22\x20\x76\x61\x6C\x75\x65\x3D\x22\x25\x73\x22\x3E","\x4F\x66\x66\x6C\x69\x6E\x65","\x3C\x6C\x61\x62\x65\x6C\x20\x63\x6C\x61\x73\x73\x3D\x22\x78\x63\x5F\x6C\x61\x62\x65\x6C\x22\x20\x66\x6F\x72\x3D\x22\x6F\x66\x66\x6C\x69\x6E\x65\x25\x64\x22\x3E\x25\x73\x20\x25\x73\x3C\x2F\x6C\x61\x62\x65\x6C\x3E","\x3C\x69\x6E\x70\x75\x74\x20\x64\x61\x74\x61\x2D\x6C\x61\x62\x65\x6C\x3D\x22\x25\x73\x22\x20\x74\x79\x70\x65\x3D\x22\x74\x65\x78\x74\x22\x20\x69\x64\x3D\x22\x6F\x66\x66\x6C\x69\x6E\x65\x25\x64\x22\x20\x6E\x61\x6D\x65\x3D\x22\x64\x61\x74\x61\x5B\x45\x6E\x71\x75\x69\x72\x79\x5D\x5B\x6F\x66\x66\x6C\x69\x6E\x65\x44\x61\x74\x61\x25\x64\x5D\x22\x20\x70\x6C\x61\x63\x65\x68\x6F\x6C\x64\x65\x72\x3D\x22\x25\x73\x22\x20\x25\x73\x2F\x3E","\x3C\x74\x65\x78\x74\x61\x72\x65\x61\x20\x69\x64\x3D\x22\x6F\x66\x66\x6C\x69\x6E\x65\x25\x64\x22\x20\x64\x61\x74\x61\x2D\x6C\x61\x62\x65\x6C\x3D\x22\x25\x73\x22\x20\x6E\x61\x6D\x65\x3D\x22\x64\x61\x74\x61\x5B\x45\x6E\x71\x75\x69\x72\x79\x5D\x5B\x6F\x66\x66\x6C\x69\x6E\x65\x44\x61\x74\x61\x25\x64\x5D\x22\x20\x70\x6C\x61\x63\x65\x68\x6F\x6C\x64\x65\x72\x3D\x22\x25\x73\x22\x20\x25\x73\x3E\x3C\x2F\x74\x65\x78\x74\x61\x72\x65\x61\x3E","\x3C\x69\x6E\x70\x75\x74\x20\x74\x79\x70\x65\x3D\x22\x63\x68\x65\x63\x6B\x62\x6F\x78\x22\x20\x6E\x61\x6D\x65\x3D\x22\x64\x61\x74\x61\x5B\x45\x6E\x71\x75\x69\x72\x79\x5D\x5B\x6F\x66\x66\x6C\x69\x6E\x65\x44\x61\x74\x61\x25\x64\x5D\x22\x20\x76\x61\x6C\x75\x65\x3D\x22\x25\x73\x22\x3E\x20\x25\x73\x3C\x62\x72\x3E","\x3C\x69\x6E\x70\x75\x74\x20\x74\x79\x70\x65\x3D\x22\x72\x61\x64\x69\x6F\x22\x20\x6E\x61\x6D\x65\x3D\x22\x64\x61\x74\x61\x5B\x45\x6E\x71\x75\x69\x72\x79\x5D\x5B\x6F\x66\x66\x6C\x69\x6E\x65\x44\x61\x74\x61\x25\x64\x5D\x22\x20\x76\x61\x6C\x75\x65\x3D\x22\x25\x73\x22\x3E\x20\x25\x73\x3C\x62\x72\x3E","\x3C\x73\x65\x6C\x65\x63\x74\x20\x6E\x61\x6D\x65\x3D\x22\x64\x61\x74\x61\x5B\x45\x6E\x71\x75\x69\x72\x79\x5D\x5B\x6F\x66\x66\x6C\x69\x6E\x65\x44\x61\x74\x61\x25\x64\x5D\x22\x3E","\x3C\x69\x6E\x70\x75\x74\x20\x74\x79\x70\x65\x3D\x22\x68\x69\x64\x64\x65\x6E\x22\x20\x6E\x61\x6D\x65\x3D\x22\x64\x61\x74\x61\x5B\x45\x6E\x71\x75\x69\x72\x79\x5D\x5B\x6C\x61\x62\x65\x6C\x4F\x66\x66\x6C\x69\x6E\x65\x44\x61\x74\x61\x25\x64\x5D\x22\x20\x76\x61\x6C\x75\x65\x3D\x22\x25\x73\x22\x3E","\x6A\x73\x6F\x6E\x70","\x67\x65\x74\x50\x72\x6F\x61\x63\x74\x69\x76\x65\x41\x63\x74\x69\x6F\x6E\x73\x42\x79\x57\x65\x62\x73\x69\x74\x65","\x73\x65\x74\x52\x61\x74\x69\x6E\x67","\x72\x61\x74\x69\x6E\x67","\x68\x61\x73\x4F\x77\x6E\x50\x72\x6F\x70\x65\x72\x74\x79","\x52\x61\x74\x69\x6E\x67","\x61\x62\x61\x6E\x64\x6F\x6E\x43\x75\x73\x74\x6F\x6D\x65\x72","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x66\x69\x6E\x64"];_0x77c2[0];var _=require(_0x77c2[1]);var jsmin=require(_0x77c2[2])[_0x77c2[2]];var Mustache=require(_0x77c2[3]);var querystring=require(_0x77c2[4]);var path=require(_0x77c2[5]);var md5=require(_0x77c2[6]);var fs=require(_0x77c2[7]);var UAParser=require(_0x77c2[8]);var uaParser= new UAParser();var languageParser=require(_0x77c2[9]);var ipaddr=require(_0x77c2[10]);var geoip=require(_0x77c2[11]);var csv=require(_0x77c2[12]);var util=require(_0x77c2[13]);var moment=require(_0x77c2[14]);var config=require(_0x77c2[15]);var Xchatty=require(_0x77c2[17])[_0x77c2[16]];var xchatty_components=require(_0x77c2[18]);var Util=require(_0x77c2[19]);var sequelize=require(_0x77c2[17])[_0x77c2[20]];var User=require(_0x77c2[17])[_0x77c2[21]];var Agent=require(_0x77c2[17])[_0x77c2[21]];var ChatRoom=require(_0x77c2[17])[_0x77c2[22]];var ChatEnquiry=require(_0x77c2[17])[_0x77c2[23]];var ChatVisitor=require(_0x77c2[17])[_0x77c2[24]];var ChatMessage=require(_0x77c2[17])[_0x77c2[25]];var ChatWebsite=require(_0x77c2[17])[_0x77c2[26]];var ChatWebsitesField=require(_0x77c2[17])[_0x77c2[27]];var ChatProactiveAction=require(_0x77c2[17])[_0x77c2[28]];var ReportChatSession=require(_0x77c2[17])[_0x77c2[29]];var id=1;exports[_0x77c2[30]]=function(_0xe0e0x20,_0xe0e0x21,_0xe0e0x22){return Xchatty[_0x77c2[35]]()[_0x77c2[34]](function(_0xe0e0x24){return _0xe0e0x21[_0x77c2[33]](200)[_0x77c2[32]](_0xe0e0x24)})[_0x77c2[31]](function(_0xe0e0x23){return _0xe0e0x22(_0xe0e0x23)})};exports[_0x77c2[36]]=function(_0xe0e0x20,_0xe0e0x21,_0xe0e0x22){ChatWebsite[_0x77c2[67]](_0xe0e0x20[_0x77c2[42]][_0x77c2[41]])[_0x77c2[34]](function(_0xe0e0x25){_0xe0e0x21[_0x77c2[39]]({"\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65":_0x77c2[37],"\x78\x2D\x74\x69\x6D\x65\x73\x74\x61\x6D\x70":Date[_0x77c2[38]](),"\x78\x2D\x73\x65\x6E\x74":true});var _0xe0e0x26=xchatty_components[_0x77c2[40]];var _0xe0e0x27={websiteId:_0xe0e0x20[_0x77c2[42]][_0x77c2[41]],rootPath:Util[_0x77c2[44]](_0xe0e0x25[_0x77c2[43]])+_0x77c2[45],signedUp:_0x77c2[46],windowFocused:_0x77c2[46],isNewPage:_0x77c2[47],processingSignUp:_0x77c2[46],processingEnquiry:_0x77c2[46],processingSend:_0x77c2[46],processingRating:_0x77c2[46],visitorFullname:_0x77c2[48],visitorAvatar:_0x77c2[48],timerReadMessages:_0x77c2[49],timerCheckStatus:_0x77c2[49],isOnline:_0x77c2[46],decayHistory:0,defaultTimeout:5000,isInitialStatusCheck:_0x77c2[47],muteNotificationSoundOnce:_0x77c2[46],assetBase:Util[_0x77c2[44]](_0xe0e0x25[_0x77c2[43]])+_0x77c2[50],hasSessionSaf:_0x77c2[46],restoreOpenState:_0x77c2[46],animateHover:_0xe0e0x25[_0x77c2[51]],hideEmail:_0x77c2[46],hideOffline:_0x77c2[46],headerShape:_0xe0e0x25[_0x77c2[52]],HeaderOnline:_0xe0e0x25[_0x77c2[53]],OnlineMessage:_0xe0e0x25[_0x77c2[54]],UsernamePlaceholder:_0xe0e0x25[_0x77c2[55]],EmailPlaceholder:_0xe0e0x25[_0x77c2[56]],StartChatButtonText:_0xe0e0x25[_0x77c2[57]],OfflineMessage:_0xe0e0x25[_0x77c2[58]],HeaderOffline:_0xe0e0x25[_0x77c2[59]],EnquiryMessagePlaceholder:_0xe0e0x25[_0x77c2[60]],EnquiryButtonText:_0xe0e0x25[_0x77c2[61]],downloadTranscript:_0xe0e0x25[_0x77c2[62]],RatingMessage:_0xe0e0x25[_0x77c2[63]],RatingSend:_0xe0e0x25[_0x77c2[64]],RatingSkip:_0xe0e0x25[_0x77c2[65]]};_0xe0e0x26=Mustache[_0x77c2[66]](_0xe0e0x26,_0xe0e0x27);_0xe0e0x21[_0x77c2[32]](_0xe0e0x26)})[_0x77c2[31]](function(_0xe0e0x23){_0xe0e0x22(_0xe0e0x23)})};exports[_0x77c2[68]]=function(_0xe0e0x20,_0xe0e0x21,_0xe0e0x22){ChatWebsite[_0x77c2[67]](_0xe0e0x20[_0x77c2[42]][_0x77c2[41]])[_0x77c2[34]](function(_0xe0e0x25){_0xe0e0x21[_0x77c2[39]]({"\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65":_0x77c2[69],"\x78\x2D\x74\x69\x6D\x65\x73\x74\x61\x6D\x70":Date[_0x77c2[38]](),"\x78\x2D\x73\x65\x6E\x74":true});var _0xe0e0x28=xchatty_components[_0x77c2[70]];var _0xe0e0x29={assetBase:Util[_0x77c2[44]](_0xe0e0x25[_0x77c2[43]])+_0x77c2[50],color:_0xe0e0x25[_0x77c2[71]],colorFocus:_0xe0e0x25[_0x77c2[72]],colorButton:_0xe0e0x25[_0x77c2[73]]};_0xe0e0x28=Mustache[_0x77c2[66]](_0xe0e0x28,_0xe0e0x29);_0xe0e0x21[_0x77c2[32]](_0xe0e0x28)})[_0x77c2[31]](function(_0xe0e0x23){_0xe0e0x22(_0xe0e0x23)})};exports[_0x77c2[74]]=function(_0xe0e0x20,_0xe0e0x21,_0xe0e0x22){_0xe0e0x21[_0x77c2[83]](path[_0x77c2[82]](config[_0x77c2[75]],_0x77c2[76],_0x77c2[77],_0x77c2[78],_0x77c2[79],_0xe0e0x20[_0x77c2[81]][_0x77c2[80]]))};exports[_0x77c2[84]]=function(_0xe0e0x20,_0xe0e0x21,_0xe0e0x22){_0xe0e0x21[_0x77c2[39]]({"\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65":_0x77c2[37],"\x78\x2D\x74\x69\x6D\x65\x73\x74\x61\x6D\x70":Date[_0x77c2[38]](),"\x78\x2D\x73\x65\x6E\x74":true});var _0xe0e0x2a=xchatty_components[_0x77c2[85]];_0xe0e0x21[_0x77c2[32]](_0xe0e0x2a)};exports[_0x77c2[86]]=function(_0xe0e0x20,_0xe0e0x21,_0xe0e0x22){if(!_0xe0e0x20[_0x77c2[87]][_0x77c2[78]]){_0xe0e0x20[_0x77c2[87]][_0x77c2[78]]={}};var _0xe0e0x2b={};return Agent[_0x77c2[35]]({where:{online:true,role:_0x77c2[106]}})[_0x77c2[34]](function(_0xe0e0x2e){if(_0xe0e0x20[_0x77c2[81]][_0x77c2[101]][_0x77c2[100]]){_0xe0e0x20[_0x77c2[87]][_0x77c2[78]][_0x77c2[100]]=_0xe0e0x20[_0x77c2[81]][_0x77c2[101]][_0x77c2[100]]===_0x77c2[47]?true:false};_0xe0e0x2b={success:true,has_session_saf:null,signed_up:_0xe0e0x20[_0x77c2[87]][_0x77c2[78]][_0x77c2[96]]?true:false,fullname:_0xe0e0x20[_0x77c2[87]][_0x77c2[78]][_0x77c2[102]]?_0xe0e0x20[_0x77c2[87]][_0x77c2[78]][_0x77c2[102]]:_0x77c2[99],email:_0xe0e0x20[_0x77c2[87]][_0x77c2[78]][_0x77c2[103]]?_0xe0e0x20[_0x77c2[87]][_0x77c2[78]][_0x77c2[103]]:_0x77c2[99],avatar:_0xe0e0x20[_0x77c2[87]][_0x77c2[78]][_0x77c2[104]]?_0xe0e0x20[_0x77c2[87]][_0x77c2[78]][_0x77c2[104]]:_0x77c2[99],open_state:_0xe0e0x20[_0x77c2[87]][_0x77c2[78]][_0x77c2[100]]||_0xe0e0x20[_0x77c2[87]][_0x77c2[78]][_0x77c2[96]]?true:false,online:_0xe0e0x2e[_0x77c2[105]]?true:false,is_unserved:false,room_id:0};return})[_0x77c2[34]](function(){if(_0xe0e0x20[_0x77c2[87]][_0x77c2[78]][_0x77c2[93]]){return ChatRoom[_0x77c2[95]]({where:{ChatVisitorId:_0xe0e0x20[_0x77c2[87]][_0x77c2[78]][_0x77c2[93]],status:_0x77c2[98],token:{$ne:_0x77c2[99]}}})};return})[_0x77c2[34]](function(_0xe0e0x2d){if(_0xe0e0x2d){_0xe0e0x20[_0x77c2[87]][_0x77c2[78]][_0x77c2[96]]=_0xe0e0x2d[_0x77c2[41]];_0xe0e0x2b[_0x77c2[96]]=_0xe0e0x2d[_0x77c2[41]];_0xe0e0x2b[_0x77c2[97]]=true}else {_0xe0e0x2b[_0x77c2[97]]=false};return})[_0x77c2[34]](function(){if(_0xe0e0x20[_0x77c2[87]][_0x77c2[78]][_0x77c2[93]]){return ChatVisitor[_0x77c2[95]]({where:{id:_0xe0e0x20[_0x77c2[87]][_0x77c2[78]][_0x77c2[93]],status:_0x77c2[94]}})};return})[_0x77c2[34]](function(_0xe0e0x2c){if(_0xe0e0x2c){_0xe0e0x2b[_0x77c2[88]]=true};return _0xe0e0x21[_0x77c2[32]](_0xe0e0x20[_0x77c2[81]][_0x77c2[89]]+_0x77c2[90]+JSON[_0x77c2[91]](_0xe0e0x2b)+_0x77c2[92])})[_0x77c2[31]](function(_0xe0e0x23){return _0xe0e0x22(_0xe0e0x23)})};exports[_0x77c2[107]]=function(_0xe0e0x20,_0xe0e0x21,_0xe0e0x22){var _0xe0e0x2f={where:{ChatRoomId:_0xe0e0x20[_0x77c2[87]][_0x77c2[78]][_0x77c2[96]]},include:[{model:User,attributes:[_0x77c2[41],_0x77c2[108],_0x77c2[102],_0x77c2[103]]},{model:ChatVisitor,attributes:[_0x77c2[41],_0x77c2[102],_0x77c2[103]]}]};if(_0xe0e0x20[_0x77c2[81]][_0x77c2[101]][_0x77c2[109]]===_0x77c2[46]){_0xe0e0x2f[_0x77c2[110]][_0x77c2[41]]={$gt:_0xe0e0x20[_0x77c2[81]][_0x77c2[101]][_0x77c2[111]]}};ChatMessage[_0x77c2[35]](_0xe0e0x2f)[_0x77c2[34]](function(_0xe0e0x30){var _0xe0e0x31={success:true,messages:_0xe0e0x30,composing:false,composing_fullname:null};_0xe0e0x21[_0x77c2[32]](_0xe0e0x20[_0x77c2[81]][_0x77c2[89]]+_0x77c2[90]+JSON[_0x77c2[91]](_0xe0e0x31)+_0x77c2[92])})[_0x77c2[31]](function(_0xe0e0x23){_0xe0e0x22(_0xe0e0x23)})};exports[_0x77c2[112]]=function(_0xe0e0x20,_0xe0e0x21,_0xe0e0x22){var _0xe0e0x2f={where:{ChatRoomId:_0xe0e0x20[_0x77c2[87]][_0x77c2[78]][_0x77c2[96]]},include:[{model:User,attributes:[_0x77c2[41],_0x77c2[108],_0x77c2[102],_0x77c2[103]]},{model:ChatVisitor,attributes:[_0x77c2[41],_0x77c2[102],_0x77c2[103]]}]};if(_0xe0e0x20[_0x77c2[81]][_0x77c2[101]][_0x77c2[109]]===_0x77c2[46]){_0xe0e0x2f[_0x77c2[110]][_0x77c2[41]]={$gt:_0xe0e0x20[_0x77c2[81]][_0x77c2[101]][_0x77c2[111]]}};ChatMessage[_0x77c2[115]]({body:_0xe0e0x20[_0x77c2[81]][_0x77c2[101]][_0x77c2[114]][_0x77c2[113]],ChatRoomId:_0xe0e0x20[_0x77c2[87]][_0x77c2[78]][_0x77c2[96]],ChatVisitorId:_0xe0e0x20[_0x77c2[87]][_0x77c2[78]][_0x77c2[93]]})[_0x77c2[34]](function(_0xe0e0x32){ChatMessage[_0x77c2[35]](_0xe0e0x2f)[_0x77c2[34]](function(_0xe0e0x30){var _0xe0e0x31={errors:[],success:true,data:_0xe0e0x32,messages:_0xe0e0x30};_0xe0e0x21[_0x77c2[32]](_0xe0e0x20[_0x77c2[81]][_0x77c2[89]]+_0x77c2[90]+JSON[_0x77c2[91]](_0xe0e0x31)+_0x77c2[92])})[_0x77c2[31]](function(_0xe0e0x23){_0xe0e0x22(_0xe0e0x23)})})[_0x77c2[31]](function(_0xe0e0x23){_0xe0e0x22(_0xe0e0x23)})};exports[_0x77c2[116]]=function(_0xe0e0x20,_0xe0e0x21,_0xe0e0x22){return ChatRoom[_0x77c2[67]](_0xe0e0x20[_0x77c2[87]][_0x77c2[78]][_0x77c2[96]])[_0x77c2[34]](function(_0xe0e0x2d){return _0xe0e0x2d[_0x77c2[118]]({status:_0x77c2[117]})})[_0x77c2[34]](function(){var _0xe0e0x31={success:true,errors:[]};_0xe0e0x20[_0x77c2[87]][_0x77c2[78]]={};_0xe0e0x21[_0x77c2[32]](_0xe0e0x20[_0x77c2[81]][_0x77c2[89]]+_0x77c2[90]+JSON[_0x77c2[91]](_0xe0e0x31)+_0x77c2[92])})[_0x77c2[31]](function(_0xe0e0x23){_0xe0e0x22(_0xe0e0x23)})};exports[_0x77c2[119]]=function(_0xe0e0x20,_0xe0e0x21,_0xe0e0x22){var _0xe0e0x33=uaParser[_0x77c2[123]](_0xe0e0x20[_0x77c2[122]][_0x77c2[121]])[_0x77c2[120]]();var _0xe0e0x34=languageParser[_0x77c2[125]](_0xe0e0x20[_0x77c2[122]][_0x77c2[124]]);var _0xe0e0x35=_0xe0e0x20[_0x77c2[122]][_0x77c2[126]]?_0xe0e0x20[_0x77c2[122]][_0x77c2[126]]:_0xe0e0x20[_0x77c2[128]][_0x77c2[127]]||_0xe0e0x20[_0x77c2[129]];var _0xe0e0x36={fullname:_0xe0e0x20[_0x77c2[81]][_0x77c2[101]][_0x77c2[130]][_0x77c2[102]],email:_0xe0e0x20[_0x77c2[81]][_0x77c2[101]][_0x77c2[130]][_0x77c2[103]],remote_address:_0xe0e0x35,user_agent:_0xe0e0x20[_0x77c2[122]][_0x77c2[121]],visitor_language:_0xe0e0x20[_0x77c2[122]][_0x77c2[124]],referer:_0xe0e0x20[_0x77c2[122]][_0x77c2[131]],origin:_0x77c2[132],browser:_0xe0e0x33[_0x77c2[133]][_0x77c2[108]]+_0x77c2[134]+_0xe0e0x33[_0x77c2[133]][_0x77c2[135]],engine:_0xe0e0x33[_0x77c2[136]][_0x77c2[108]]+_0x77c2[134]+_0xe0e0x33[_0x77c2[136]][_0x77c2[135]],os:_0xe0e0x33[_0x77c2[137]][_0x77c2[108]]+_0x77c2[134]+_0xe0e0x33[_0x77c2[137]][_0x77c2[135]],device:_0xe0e0x33[_0x77c2[139]][_0x77c2[138]]?_0xe0e0x33[_0x77c2[139]][_0x77c2[138]]+_0x77c2[134]+_0xe0e0x33[_0x77c2[139]][_0x77c2[140]]+_0x77c2[134]+_0xe0e0x33[_0x77c2[139]][_0x77c2[141]]:null,ChatWebsiteId:_0xe0e0x20[_0x77c2[81]][_0x77c2[142]]};if(_0xe0e0x20[_0x77c2[81]][_0x77c2[101]][_0x77c2[130]][_0x77c2[143]]&&_0xe0e0x20[_0x77c2[81]][_0x77c2[101]][_0x77c2[130]][_0x77c2[144]]){_0xe0e0x36[_0x77c2[143]]=_0xe0e0x20[_0x77c2[81]][_0x77c2[101]][_0x77c2[130]][_0x77c2[143]];_0xe0e0x36[_0x77c2[144]]=_0xe0e0x20[_0x77c2[81]][_0x77c2[101]][_0x77c2[130]][_0x77c2[144]]};if(_0xe0e0x20[_0x77c2[81]][_0x77c2[101]][_0x77c2[130]][_0x77c2[145]]&&_0xe0e0x20[_0x77c2[81]][_0x77c2[101]][_0x77c2[130]][_0x77c2[146]]){_0xe0e0x36[_0x77c2[145]]=_0xe0e0x20[_0x77c2[81]][_0x77c2[101]][_0x77c2[130]][_0x77c2[145]];_0xe0e0x36[_0x77c2[146]]=_0xe0e0x20[_0x77c2[81]][_0x77c2[101]][_0x77c2[130]][_0x77c2[146]]};if(_0xe0e0x20[_0x77c2[81]][_0x77c2[101]][_0x77c2[130]][_0x77c2[147]]&&_0xe0e0x20[_0x77c2[81]][_0x77c2[101]][_0x77c2[130]][_0x77c2[148]]){_0xe0e0x36[_0x77c2[147]]=_0xe0e0x20[_0x77c2[81]][_0x77c2[101]][_0x77c2[130]][_0x77c2[147]];_0xe0e0x36[_0x77c2[148]]=_0xe0e0x20[_0x77c2[81]][_0x77c2[101]][_0x77c2[130]][_0x77c2[148]]};return ChatVisitor[_0x77c2[115]](_0xe0e0x36)[_0x77c2[34]](function(_0xe0e0x37){_0xe0e0x20[_0x77c2[87]][_0x77c2[78]][_0x77c2[102]]=_0xe0e0x37[_0x77c2[102]];_0xe0e0x20[_0x77c2[87]][_0x77c2[78]][_0x77c2[103]]=_0xe0e0x37[_0x77c2[103]];_0xe0e0x20[_0x77c2[87]][_0x77c2[78]][_0x77c2[104]]=md5(_0xe0e0x37[_0x77c2[103]]).toString(_0x77c2[149]);_0xe0e0x20[_0x77c2[87]][_0x77c2[78]][_0x77c2[93]]=_0xe0e0x37[_0x77c2[41]];var _0xe0e0x31={success:true,errors:[],chatVisitor:{id:_0xe0e0x37[_0x77c2[41]]}};_0xe0e0x21[_0x77c2[32]](_0xe0e0x20[_0x77c2[81]][_0x77c2[89]]+_0x77c2[90]+JSON[_0x77c2[91]](_0xe0e0x31)+_0x77c2[92])})[_0x77c2[31]](function(_0xe0e0x23){_0xe0e0x22(_0xe0e0x23)})};exports[_0x77c2[150]]=function(_0xe0e0x20,_0xe0e0x21,_0xe0e0x22){return ChatVisitor[_0x77c2[67]](_0xe0e0x20[_0x77c2[87]][_0x77c2[78]][_0x77c2[93]])[_0x77c2[34]](function(_0xe0e0x37){return _0xe0e0x37[_0x77c2[118]]({status:_0x77c2[94]})})[_0x77c2[34]](function(){var _0xe0e0x31={success:true,errors:[]};_0xe0e0x20[_0x77c2[87]][_0x77c2[78]]={};_0xe0e0x21[_0x77c2[32]](_0xe0e0x20[_0x77c2[81]][_0x77c2[89]]+_0x77c2[90]+JSON[_0x77c2[91]](_0xe0e0x31)+_0x77c2[92])})[_0x77c2[31]](function(_0xe0e0x23){_0xe0e0x22(_0xe0e0x23)})};exports[_0x77c2[151]]=function(_0xe0e0x20,_0xe0e0x21,_0xe0e0x22){return sequelize[_0x77c2[163]]()[_0x77c2[34]](function(_0xe0e0x38){var _0xe0e0x35=_0xe0e0x20[_0x77c2[122]][_0x77c2[126]]?_0xe0e0x20[_0x77c2[122]][_0x77c2[126]]:_0xe0e0x20[_0x77c2[128]][_0x77c2[127]]||_0xe0e0x20[_0x77c2[129]];var _0xe0e0x33=uaParser[_0x77c2[123]](_0xe0e0x20[_0x77c2[122]][_0x77c2[121]])[_0x77c2[120]]();var _0xe0e0x34=languageParser[_0x77c2[125]](_0xe0e0x20[_0x77c2[122]][_0x77c2[124]]);var _0xe0e0x36={fullname:_0xe0e0x20[_0x77c2[81]][_0x77c2[101]][_0x77c2[152]][_0x77c2[102]],email:_0xe0e0x20[_0x77c2[81]][_0x77c2[101]][_0x77c2[152]][_0x77c2[103]],remote_address:_0xe0e0x35,user_agent:_0xe0e0x20[_0x77c2[122]][_0x77c2[121]],visitor_language:_0xe0e0x20[_0x77c2[122]][_0x77c2[124]],browser:_0xe0e0x33[_0x77c2[133]][_0x77c2[108]]+_0x77c2[134]+_0xe0e0x33[_0x77c2[133]][_0x77c2[135]],engine:_0xe0e0x33[_0x77c2[136]][_0x77c2[108]]+_0x77c2[134]+_0xe0e0x33[_0x77c2[136]][_0x77c2[135]],os:_0xe0e0x33[_0x77c2[137]][_0x77c2[108]]+_0x77c2[134]+_0xe0e0x33[_0x77c2[137]][_0x77c2[135]],device:_0xe0e0x33[_0x77c2[139]][_0x77c2[138]]?_0xe0e0x33[_0x77c2[139]][_0x77c2[138]]+_0x77c2[134]+_0xe0e0x33[_0x77c2[139]][_0x77c2[140]]+_0x77c2[134]+_0xe0e0x33[_0x77c2[139]][_0x77c2[141]]:null,referer:_0xe0e0x20[_0x77c2[122]][_0x77c2[131]],origin:_0x77c2[153],status:_0x77c2[94],ChatWebsiteId:parseInt(_0xe0e0x20[_0x77c2[81]][_0x77c2[101]][_0x77c2[152]][_0x77c2[154]],10),ChatEnquiry:{username:_0xe0e0x20[_0x77c2[81]][_0x77c2[101]][_0x77c2[152]][_0x77c2[102]],email:_0xe0e0x20[_0x77c2[81]][_0x77c2[101]][_0x77c2[152]][_0x77c2[103]],text:_0xe0e0x20[_0x77c2[81]][_0x77c2[101]][_0x77c2[152]][_0x77c2[113]],ChatWebsiteId:parseInt(_0xe0e0x20[_0x77c2[81]][_0x77c2[101]][_0x77c2[152]][_0x77c2[154]],10)}};if(_0xe0e0x20[_0x77c2[81]][_0x77c2[101]][_0x77c2[152]][_0x77c2[155]]&&_0xe0e0x20[_0x77c2[81]][_0x77c2[101]][_0x77c2[152]][_0x77c2[156]]){_0xe0e0x36[_0x77c2[155]]=_0xe0e0x20[_0x77c2[81]][_0x77c2[101]][_0x77c2[152]][_0x77c2[155]];_0xe0e0x36[_0x77c2[156]]=_0xe0e0x20[_0x77c2[81]][_0x77c2[101]][_0x77c2[152]][_0x77c2[156]]};if(_0xe0e0x20[_0x77c2[81]][_0x77c2[101]][_0x77c2[152]][_0x77c2[157]]&&_0xe0e0x20[_0x77c2[81]][_0x77c2[101]][_0x77c2[152]][_0x77c2[158]]){_0xe0e0x36[_0x77c2[157]]=_0xe0e0x20[_0x77c2[81]][_0x77c2[101]][_0x77c2[152]][_0x77c2[157]];_0xe0e0x36[_0x77c2[158]]=_0xe0e0x20[_0x77c2[81]][_0x77c2[101]][_0x77c2[152]][_0x77c2[158]]};if(_0xe0e0x20[_0x77c2[81]][_0x77c2[101]][_0x77c2[152]][_0x77c2[159]]&&_0xe0e0x20[_0x77c2[81]][_0x77c2[101]][_0x77c2[152]][_0x77c2[160]]){_0xe0e0x36[_0x77c2[159]]=_0xe0e0x20[_0x77c2[81]][_0x77c2[101]][_0x77c2[152]][_0x77c2[159]];_0xe0e0x36[_0x77c2[160]]=_0xe0e0x20[_0x77c2[81]][_0x77c2[101]][_0x77c2[152]][_0x77c2[160]]};return ChatVisitor[_0x77c2[115]](_0xe0e0x36,{transaction:_0xe0e0x38,include:[{model:ChatEnquiry}]})[_0x77c2[34]](function(){_0xe0e0x38[_0x77c2[162]]();_0xe0e0x21[_0x77c2[32]](_0xe0e0x20[_0x77c2[81]][_0x77c2[89]]+_0x77c2[90]+JSON[_0x77c2[91]]({success:true,errors:[]})+_0x77c2[92])})[_0x77c2[31]](function(_0xe0e0x23){_0xe0e0x38[_0x77c2[161]]();_0xe0e0x22(_0xe0e0x23)})})};exports[_0x77c2[164]]=function(_0xe0e0x20,_0xe0e0x21,_0xe0e0x22){if(_0xe0e0x20[_0x77c2[87]][_0x77c2[78]]&&_0xe0e0x20[_0x77c2[87]][_0x77c2[78]][_0x77c2[93]]&&_0xe0e0x20[_0x77c2[87]][_0x77c2[78]][_0x77c2[96]]){ChatMessage[_0x77c2[35]]({where:{ChatRoomId:_0xe0e0x20[_0x77c2[87]][_0x77c2[78]][_0x77c2[96]]},include:[{model:Agent,attributes:[_0x77c2[41],_0x77c2[102]]},{model:ChatVisitor,attributes:[_0x77c2[41],_0x77c2[102]]}]})[_0x77c2[34]](function(_0xe0e0x30){var _0xe0e0x39=[];_0xe0e0x30[_0x77c2[170]](function(_0xe0e0x32){var _0xe0e0x3a={name:_0xe0e0x32[_0x77c2[165]]?_0xe0e0x32[_0x77c2[21]][_0x77c2[102]]:_0xe0e0x32[_0x77c2[24]][_0x77c2[102]],text:_0xe0e0x32[_0x77c2[167]][_0x77c2[166]](/(\r\n|\n|\r)/gm,_0x77c2[134]),date:_0xe0e0x32[_0x77c2[168]]};_0xe0e0x39[_0x77c2[169]](_0xe0e0x3a)});var _0xe0e0x3b=csv(_0xe0e0x39);_0xe0e0x21[_0x77c2[141]](_0x77c2[171])[_0x77c2[33]](200)[_0x77c2[32]](_0xe0e0x3b)})[_0x77c2[31]](function(_0xe0e0x23){_0xe0e0x22(_0xe0e0x23)})}};exports[_0x77c2[172]]=function(_0xe0e0x20,_0xe0e0x21,_0xe0e0x22){return Xchatty[_0x77c2[67]](_0xe0e0x20[_0x77c2[42]][_0x77c2[41]])[_0x77c2[34]](function(_0xe0e0x3c){if(!_0xe0e0x3c){return _0xe0e0x21[_0x77c2[173]](404)};return _0xe0e0x21[_0x77c2[32]](_0xe0e0x3c)})[_0x77c2[31]](function(_0xe0e0x23){return _0xe0e0x22(_0xe0e0x23)})};exports[_0x77c2[115]]=function(_0xe0e0x20,_0xe0e0x21,_0xe0e0x22){return Xchatty[_0x77c2[115]](_0xe0e0x20[_0x77c2[167]])[_0x77c2[34]](function(_0xe0e0x3c){return _0xe0e0x21[_0x77c2[33]](201)[_0x77c2[32]](_0xe0e0x3c)})[_0x77c2[31]](function(_0xe0e0x23){return _0xe0e0x22(_0xe0e0x23)})};exports[_0x77c2[118]]=function(_0xe0e0x20,_0xe0e0x21,_0xe0e0x22){if(_0xe0e0x20[_0x77c2[167]][_0x77c2[41]]){delete _0xe0e0x20[_0x77c2[167]][_0x77c2[41]]};return Xchatty[_0x77c2[67]](_0xe0e0x20[_0x77c2[42]][_0x77c2[41]])[_0x77c2[34]](function(_0xe0e0x3c){if(!_0xe0e0x3c){return _0xe0e0x21[_0x77c2[173]](404)};var _0xe0e0x3d=_[_0x77c2[174]](_0xe0e0x3c,_0xe0e0x20[_0x77c2[167]]);_0xe0e0x3d[_0x77c2[175]]()[_0x77c2[34]](function(){return _0xe0e0x21[_0x77c2[33]](200)[_0x77c2[32]](_0xe0e0x3c)})[_0x77c2[31]](function(_0xe0e0x23){return _0xe0e0x22(_0xe0e0x23)})})[_0x77c2[31]](function(_0xe0e0x23){return _0xe0e0x22(_0xe0e0x23)})};exports[_0x77c2[176]]=function(_0xe0e0x20,_0xe0e0x21,_0xe0e0x22){return Xchatty[_0x77c2[67]](_0xe0e0x20[_0x77c2[42]][_0x77c2[41]])[_0x77c2[34]](function(_0xe0e0x3c){if(!_0xe0e0x3c){return _0xe0e0x21[_0x77c2[173]](404)};_0xe0e0x3c[_0x77c2[176]]()[_0x77c2[34]](function(){return _0xe0e0x21[_0x77c2[173]](204)})[_0x77c2[31]](function(_0xe0e0x23){return _0xe0e0x22(_0xe0e0x23)})})[_0x77c2[31]](function(_0xe0e0x23){return _0xe0e0x22(_0xe0e0x23)})};exports[_0x77c2[177]]=function(_0xe0e0x20,_0xe0e0x21,_0xe0e0x22){var _0xe0e0x3e=xchatty_components[_0x77c2[178]];return ChatWebsite[_0x77c2[67]](_0xe0e0x20[_0x77c2[42]][_0x77c2[41]],{include:[{all:true}]})[_0x77c2[34]](function(_0xe0e0x25){var _0xe0e0x3f={rootPath:Util[_0x77c2[44]](_0xe0e0x25[_0x77c2[43]])+_0x77c2[45],headerShape:_0xe0e0x25[_0x77c2[52]],enquiryEnable:_0xe0e0x25[_0x77c2[179]],onlineFields:_0xe0e0x25[_0x77c2[180]],renderedOnlineField:function(){var _0xe0e0x40=_0x77c2[99];var _0xe0e0x41=this;switch(this[_0x77c2[206]]){case _0x77c2[190]:_0xe0e0x40=_0x77c2[181];_0xe0e0x40+=util[_0x77c2[186]](_0x77c2[182],_0xe0e0x41[_0x77c2[30]],_0xe0e0x41[_0x77c2[183]],_0xe0e0x41[_0x77c2[184]]?_0x77c2[185]:_0x77c2[99]);_0xe0e0x40+=util[_0x77c2[186]](_0x77c2[187],_0xe0e0x41[_0x77c2[183]],_0xe0e0x41[_0x77c2[30]],_0xe0e0x41[_0x77c2[30]]+1,_0xe0e0x41[_0x77c2[188]],_0xe0e0x41[_0x77c2[184]]?_0x77c2[184]:_0x77c2[99]);_0xe0e0x40+=_0x77c2[189];break;case _0x77c2[192]:_0xe0e0x40=_0x77c2[181];_0xe0e0x40+=util[_0x77c2[186]](_0x77c2[182],_0xe0e0x41[_0x77c2[30]],_0xe0e0x41[_0x77c2[183]],_0xe0e0x41[_0x77c2[184]]?_0x77c2[185]:_0x77c2[99]);_0xe0e0x40+=util[_0x77c2[186]](_0x77c2[191],_0xe0e0x41[_0x77c2[30]],_0xe0e0x41[_0x77c2[183]],_0xe0e0x41[_0x77c2[30]]+1,_0xe0e0x41[_0x77c2[188]],_0xe0e0x41[_0x77c2[184]]?_0x77c2[184]:_0x77c2[99]);_0xe0e0x40+=_0x77c2[189];break;case _0x77c2[198]:_0xe0e0x40=_0x77c2[181];_0xe0e0x40+=util[_0x77c2[186]](_0x77c2[193],_0xe0e0x41[_0x77c2[183]]);_[_0x77c2[170]](_0xe0e0x41[_0x77c2[194]],function(_0xe0e0x42){_0xe0e0x40+=_0x77c2[195];_0xe0e0x40+=util[_0x77c2[186]](_0x77c2[196],_0xe0e0x41[_0x77c2[30]]+1,_0xe0e0x42,_0xe0e0x42);_0xe0e0x40+=_0x77c2[197]});_0xe0e0x40+=_0x77c2[189];break;case _0x77c2[200]:_0xe0e0x40=_0x77c2[181];_0xe0e0x40+=util[_0x77c2[186]](_0x77c2[193],_0xe0e0x41[_0x77c2[183]]);_[_0x77c2[170]](_0xe0e0x41[_0x77c2[194]],function(_0xe0e0x42){_0xe0e0x40+=_0x77c2[195];_0xe0e0x40+=util[_0x77c2[186]](_0x77c2[199],_0xe0e0x41[_0x77c2[30]]+1,_0xe0e0x42,_0xe0e0x42);_0xe0e0x40+=_0x77c2[197]});_0xe0e0x40+=_0x77c2[189];break;case _0x77c2[205]:_0xe0e0x40=_0x77c2[181];_0xe0e0x40+=util[_0x77c2[186]](_0x77c2[201],_0xe0e0x41[_0x77c2[30]],_0xe0e0x41[_0x77c2[183]]);_0xe0e0x40+=util[_0x77c2[186]](_0x77c2[202],_0xe0e0x41[_0x77c2[30]]+1);_[_0x77c2[170]](_0xe0e0x41[_0x77c2[194]],function(_0xe0e0x42){_0xe0e0x40+=util[_0x77c2[186]](_0x77c2[203],_0xe0e0x42,_0xe0e0x42)});_0xe0e0x40+=_0x77c2[204];break};_0xe0e0x40+=_0x77c2[207];_0xe0e0x40+=util[_0x77c2[186]](_0x77c2[208],_0xe0e0x41[_0x77c2[30]]+1,_0xe0e0x41[_0x77c2[183]]);return _0xe0e0x40},offlineFields:_0xe0e0x25[_0x77c2[209]],renderedOfflineField:function(){var _0xe0e0x40=_0x77c2[99];var _0xe0e0x41=this;switch(this[_0x77c2[206]]){case _0x77c2[190]:_0xe0e0x40=_0x77c2[181];_0xe0e0x40+=util[_0x77c2[186]](_0x77c2[210],_0xe0e0x41[_0x77c2[30]],_0xe0e0x41[_0x77c2[183]],_0xe0e0x41[_0x77c2[184]]?_0x77c2[185]:_0x77c2[99]);_0xe0e0x40+=util[_0x77c2[186]](_0x77c2[211],_0xe0e0x41[_0x77c2[183]],_0xe0e0x41[_0x77c2[30]],_0xe0e0x41[_0x77c2[30]]+1,_0xe0e0x41[_0x77c2[188]],_0xe0e0x41[_0x77c2[184]]?_0x77c2[184]:_0x77c2[99]);_0xe0e0x40+=_0x77c2[189];break;case _0x77c2[192]:_0xe0e0x40=_0x77c2[181];_0xe0e0x40+=util[_0x77c2[186]](_0x77c2[210],_0xe0e0x41[_0x77c2[30]],_0xe0e0x41[_0x77c2[183]],_0xe0e0x41[_0x77c2[184]]?_0x77c2[185]:_0x77c2[99]);_0xe0e0x40+=util[_0x77c2[186]](_0x77c2[212],_0xe0e0x41[_0x77c2[30]],_0xe0e0x41[_0x77c2[183]],_0xe0e0x41[_0x77c2[30]]+1,_0xe0e0x41[_0x77c2[188]],_0xe0e0x41[_0x77c2[184]]?_0x77c2[184]:_0x77c2[99]);_0xe0e0x40+=_0x77c2[189];break;case _0x77c2[198]:_0xe0e0x40=_0x77c2[181];_0xe0e0x40+=util[_0x77c2[186]](_0x77c2[193],_0xe0e0x41[_0x77c2[183]]);_[_0x77c2[170]](_0xe0e0x41[_0x77c2[194]],function(_0xe0e0x42){_0xe0e0x40+=_0x77c2[195];_0xe0e0x40+=util[_0x77c2[186]](_0x77c2[213],_0xe0e0x41[_0x77c2[30]]+1,_0xe0e0x42,_0xe0e0x42);_0xe0e0x40+=_0x77c2[197]});_0xe0e0x40+=_0x77c2[189];break;case _0x77c2[200]:_0xe0e0x40=_0x77c2[181];_0xe0e0x40+=util[_0x77c2[186]](_0x77c2[193],_0xe0e0x41[_0x77c2[183]]);_[_0x77c2[170]](_0xe0e0x41[_0x77c2[194]],function(_0xe0e0x42){_0xe0e0x40+=_0x77c2[195];_0xe0e0x40+=util[_0x77c2[186]](_0x77c2[214],_0xe0e0x41[_0x77c2[30]]+1,_0xe0e0x42,_0xe0e0x42);_0xe0e0x40+=_0x77c2[197]});_0xe0e0x40+=_0x77c2[189];break;case _0x77c2[205]:_0xe0e0x40=_0x77c2[181];_0xe0e0x40+=util[_0x77c2[186]](_0x77c2[193],_0xe0e0x41[_0x77c2[183]]);_0xe0e0x40+=util[_0x77c2[186]](_0x77c2[215],_0xe0e0x41[_0x77c2[30]]+1);_[_0x77c2[170]](_0xe0e0x41[_0x77c2[194]],function(_0xe0e0x42){_0xe0e0x40+=util[_0x77c2[186]](_0x77c2[203],_0xe0e0x42,_0xe0e0x42)});_0xe0e0x40+=_0x77c2[204];break};_0xe0e0x40+=_0x77c2[207];_0xe0e0x40+=util[_0x77c2[186]](_0x77c2[216],_0xe0e0x41[_0x77c2[30]]+1,_0xe0e0x41[_0x77c2[183]]);return _0xe0e0x40}};_0xe0e0x3e=Mustache[_0x77c2[66]](_0xe0e0x3e,_0xe0e0x3f);return _0xe0e0x21[_0x77c2[33]](200)[_0x77c2[217]](_0xe0e0x3e)})[_0x77c2[31]](function(_0xe0e0x23){return _0xe0e0x22(_0xe0e0x23)})};exports[_0x77c2[218]]=function(_0xe0e0x20,_0xe0e0x21,_0xe0e0x22){return ChatWebsite[_0x77c2[67]](_0xe0e0x20[_0x77c2[42]][_0x77c2[41]],{include:[{model:ChatProactiveAction}]})[_0x77c2[34]](function(_0xe0e0x25){if(!_0xe0e0x25){return _0xe0e0x21[_0x77c2[33]](400)[_0x77c2[217]]({})};return _0xe0e0x21[_0x77c2[33]](200)[_0x77c2[217]](_0xe0e0x25.ChatProactiveActions)})[_0x77c2[31]](function(_0xe0e0x23){return _0xe0e0x22(_0xe0e0x23)})};exports[_0x77c2[219]]=function(_0xe0e0x20,_0xe0e0x21,_0xe0e0x22){return ChatRoom[_0x77c2[67]](_0xe0e0x20[_0x77c2[81]][_0x77c2[101]][_0x77c2[222]][_0x77c2[96]])[_0x77c2[34]](function(_0xe0e0x2d){if(!_0xe0e0x2d){return _0xe0e0x21[_0x77c2[33]](400)[_0x77c2[217]]({})};if(_0xe0e0x20[_0x77c2[81]][_0x77c2[101]][_0x77c2[222]][_0x77c2[221]](_0x77c2[220])&&_0xe0e0x20[_0x77c2[81]][_0x77c2[101]][_0x77c2[222]][_0x77c2[221]](_0x77c2[113])){return _0xe0e0x2d[_0x77c2[118]]({rating:_0xe0e0x20[_0x77c2[81]][_0x77c2[101]][_0x77c2[222]][_0x77c2[220]],ratingMessage:_0xe0e0x20[_0x77c2[81]][_0x77c2[101]][_0x77c2[222]][_0x77c2[113]]})};return})[_0x77c2[34]](function(){return _0xe0e0x21[_0x77c2[33]](200)[_0x77c2[217]]({})})[_0x77c2[31]](function(_0xe0e0x23){return _0xe0e0x21[_0x77c2[33]](400)[_0x77c2[217]](_0xe0e0x23)})};exports[_0x77c2[223]]=function(_0xe0e0x20,_0xe0e0x21,_0xe0e0x22){if(_0xe0e0x20[_0x77c2[87]][_0x77c2[78]][_0x77c2[221]](_0x77c2[93])&&_0xe0e0x20[_0x77c2[87]][_0x77c2[78]][_0x77c2[93]]>0){return ReportChatSession[_0x77c2[225]]({where:{visitorid:_0xe0e0x20[_0x77c2[87]][_0x77c2[78]][_0x77c2[93]]}})[_0x77c2[34]](function(_0xe0e0x43){return _0xe0e0x43[_0x77c2[118]]({abandonAt:moment()[_0x77c2[186]](_0x77c2[224])})})[_0x77c2[34]](function(){return _0xe0e0x21[_0x77c2[33]](200)[_0x77c2[217]]({})})[_0x77c2[31]](function(_0xe0e0x23){_0xe0e0x21[_0x77c2[33]](500)[_0x77c2[217]]({})})};return _0xe0e0x21[_0x77c2[33]](200)[_0x77c2[217]]({})}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var jsmin = require('jsmin').jsmin;
+var Mustache = require('mustache');
+var querystring = require('querystring');
+var path = require('path');
+var md5 = require('md5');
+var fs = require('fs');
+var UAParser = require('ua-parser-js');
+var uaParser = new UAParser();
+var languageParser = require('accept-language-parser');
+var ipaddr = require('ipaddr.js');
+var geoip = require('geoip-lite');
+var csv = require('to-csv');
+var util = require('util');
+var moment = require('moment');
+
+var config = require('../../config/environment');
+var Xchatty = require('../../models').Xchatty;
+var xchatty_components = require('../../components/xchatty');
+var Util = require('../../config/util');
+
+var sequelize = require('../../models').sequelize;
+var User = require('../../models').User;
+var Agent = require('../../models').User;
+var ChatRoom = require('../../models').ChatRoom;
+var ChatEnquiry = require('../../models').ChatEnquiry;
+var ChatVisitor = require('../../models').ChatVisitor;
+var ChatMessage = require('../../models').ChatMessage;
+var ChatWebsite = require('../../models').ChatWebsite;
+var ChatWebsitesField = require('../../models').ChatWebsitesField;
+var ChatProactiveAction = require('../../models').ChatProactiveAction;
+var ReportChatSession = require('../../models').ReportChatSession;
+
+var id = 1;
+
+// Get list of xchattys
+exports.index = function(req, res, next) {
+  return Xchatty
+    .findAll()
+    .then(function(xchattys) {
+      return res.status(200).send(xchattys);
+    })
+    .catch(function(err) {
+      return next(err);
+    });
+};
+
+exports.getJsByWebsite = function(req, res, next) {
+
+  // TO DO: Find the configuration of the website and replace configuration in the file
+  ChatWebsite
+    .findById(req.params.id)
+    .then(function(chatWebsite) {
+      res.set({
+        'Content-Type': 'application/javascript',
+        'x-timestamp': Date.now(),
+        'x-sent': true
+      });
+
+      var js = xchatty_components.js;
+      /*jshint multistr: true */
+      var configJS = {
+        websiteId: req.params.id,
+        // rootPath: path.join(chatWebsite.remote, 'api', 'xchatty/'),
+        rootPath: Util.stripTrailingSlash(chatWebsite.remote) + '/api/xchatty/',
+        signedUp: 'false',
+        windowFocused: 'false',
+        isNewPage: 'true',
+        processingSignUp: 'false',
+        processingEnquiry: 'false',
+        processingSend: 'false',
+        processingRating: 'false',
+        visitorFullname: '""',
+        visitorAvatar: '""',
+        timerReadMessages: 'null',
+        timerCheckStatus: 'null',
+        isOnline: 'false',
+        decayHistory: 0,
+        defaultTimeout: 5000,
+        isInitialStatusCheck: 'true',
+        muteNotificationSoundOnce: 'false',
+        assetBase: Util.stripTrailingSlash(chatWebsite.remote) + '/api/xchatty/assets',
+        hasSessionSaf: 'false',
+        restoreOpenState: 'false',
+        animateHover: chatWebsite.animation,
+        hideEmail: 'false',
+        hideOffline: 'false',
+        headerShape: chatWebsite.header_shape,
+        HeaderOnline: chatWebsite.header_online,
+        OnlineMessage: chatWebsite.online_message,
+        UsernamePlaceholder: chatWebsite.username_placeholder,
+        EmailPlaceholder: chatWebsite.email_placeholder,
+        StartChatButtonText: chatWebsite.start_chat_button,
+        OfflineMessage: chatWebsite.offline_message,
+        HeaderOffline: chatWebsite.header_offline,
+        EnquiryMessagePlaceholder: chatWebsite.enquiry_message_placeholder,
+        EnquiryButtonText: chatWebsite.enquiry_button,
+        downloadTranscript: chatWebsite.download_transcript,
+        RatingMessage: chatWebsite.rating_message,
+        RatingSend: chatWebsite.rating_send,
+        RatingSkip: chatWebsite.rating_skip
+      };
+
+      js = Mustache.render(js, configJS);
+      res.send(js);
+
+    })
+    .catch(function(err) {
+      next(err);
+    });
+
+};
+
+exports.getStyleByWebsite = function(req, res, next) {
+
+  // TO DO: Find the configuration of the website and replace configuration in the file
+  ChatWebsite
+    .findById(req.params.id)
+    .then(function(chatWebsite) {
+
+      res.set({
+        'Content-Type': 'text/css',
+        'x-timestamp': Date.now(),
+        'x-sent': true
+      });
+
+      var css = xchatty_components.css;
+
+      var configCSS = {
+        // assetBase: path.join(chatWebsite.remote, 'api', 'xchatty',
+        //   'assets'),
+        assetBase: Util.stripTrailingSlash(chatWebsite.remote) + '/api/xchatty/assets',
+        color: chatWebsite.color,
+        colorFocus: chatWebsite.color_focus,
+        colorButton: chatWebsite.color_button
+      };
+
+      css = Mustache.render(css, configCSS);
+      res.send(css);
+    })
+    .catch(function(err) {
+      next(err);
+    });
+};
+
+exports.getAssets = function(req, res, next) {
+  res.download(path.join(config.root, 'server', 'components', 'xchatty', 'assets', req.query.resource));
+};
+
+exports.getJqueryLibrary = function(req, res, next) {
+
+  // TODO: Find the configuration of the website and replace configuration in the file
+  res.set({
+    'Content-Type': 'application/javascript',
+    'x-timestamp': Date.now(),
+    'x-sent': true
+  });
+
+  var jquery = xchatty_components.jquery;
+  res.send(jquery);
+
+};
+
+exports.getStatus = function(req, res, next) {
+
+  if (!req.session.xchatty) {
+    req.session.xchatty = {};
+  }
+
+  var _jsonResponse = {};
+
+  return Agent
+    .findAll({
+      where: {
+        online: true,
+        role: 'agent'
+      }
+    })
+    .then(function(agents) {
+      if (req.query.data.open_state)
+        req.session.xchatty.open_state = req.query.data.open_state === 'true' ? true : false;
+      _jsonResponse = {
+        success: true,
+        has_session_saf: null,
+        signed_up: req.session.xchatty.room_id ? true : false,
+        fullname: req.session.xchatty.fullname ? req.session.xchatty.fullname : '',
+        email: req.session.xchatty.email ? req.session.xchatty.email : '',
+        avatar: req.session.xchatty.avatar ? req.session.xchatty.avatar : '',
+        open_state: req.session.xchatty.open_state || req.session.xchatty.room_id ? true : false,
+        online: agents.length ? true : false,
+        is_unserved: false,
+        room_id: 0
+      };
+      return;
+    })
+    .then(function() {
+      if (req.session.xchatty.visitor_id) {
+        return ChatRoom
+          .findOne({
+            where: {
+              ChatVisitorId: req.session.xchatty.visitor_id,
+              status: 'OPEN',
+              token: {
+                $ne: ''
+              }
+            }
+          });
+      }
+      return;
+    })
+    .then(function(chatRoom) {
+      if (chatRoom) {
+        req.session.xchatty.room_id = chatRoom.id;
+        _jsonResponse.room_id = chatRoom.id;
+        _jsonResponse.signed_up = true;
+      } else {
+        _jsonResponse.signed_up = false;
+      }
+      return;
+    })
+    .then(function() {
+      if (req.session.xchatty.visitor_id) {
+        return ChatVisitor
+          .findOne({
+            where: {
+              id: req.session.xchatty.visitor_id,
+              status: 'unserved'
+            }
+          })
+      }
+      return;
+    })
+    .then(function(visitor) {
+      if (visitor) {
+        _jsonResponse.is_unserved = true;
+      }
+      return res.send(req.query.callback + '(' + JSON.stringify(_jsonResponse) + ')');
+    })
+    .catch(function(err) {
+      return next(err);
+    });
+};
+
+exports.getMessages = function(req, res, next) {
+
+  /*jshint multistr: true */
+  var condition = {
+    where: {
+      ChatRoomId: req.session.xchatty.room_id
+    },
+    include: [{
+      model: User,
+      attributes: ['id', 'name', 'fullname', 'email']
+    }, {
+      model: ChatVisitor,
+      attributes: ['id', 'fullname', 'email']
+    }]
+  };
+
+  if (req.query.data.is_new_page === 'false') {
+    condition.where.id = {
+      $gt: req.query.data.last_id
+    };
+  }
+
+  ChatMessage
+    .findAll(condition)
+    .then(function(chatMessages) {
+      var json = {
+        success: true,
+        messages: chatMessages,
+        composing: false,
+        composing_fullname: null
+      };
+
+      res.send(req.query.callback + '(' + JSON.stringify(json) + ')');
+    })
+    .catch(function(err) {
+      next(err);
+    });
+};
+
+exports.sendMessage = function(req, res, next) {
+
+  /*jshint multistr: true */
+  var condition = {
+    where: {
+      ChatRoomId: req.session.xchatty.room_id
+    },
+    include: [{
+      model: User,
+      attributes: ['id', 'name', 'fullname', 'email']
+    }, {
+      model: ChatVisitor,
+      attributes: ['id', 'fullname', 'email']
+    }]
+  };
+
+  if (req.query.data.is_new_page === 'false') {
+    condition.where.id = {
+      $gt: req.query.data.last_id
+    };
+  }
+
+  ChatMessage
+    .create({
+      body: req.query.data.Message.message,
+      ChatRoomId: req.session.xchatty.room_id,
+      ChatVisitorId: req.session.xchatty.visitor_id
+    })
+    .then(function(chatMessage) {
+      ChatMessage
+        .findAll(condition)
+        .then(function(chatMessages) {
+          var json = {
+            errors: [],
+            success: true,
+            data: chatMessage,
+            messages: chatMessages
+          };
+
+          res.send(req.query.callback + '(' + JSON.stringify(json) + ')');
+        })
+        .catch(function(err) {
+          next(err);
+        });
+    })
+    .catch(function(err) {
+      next(err);
+    });
+
+};
+
+exports.signoutCustomer = function(req, res, next) {
+  return ChatRoom
+    .findById(req.session.xchatty.room_id)
+    .then(function(chatRoom) {
+      return chatRoom
+        .update({
+          status: 'CLOSED'
+        });
+    })
+    .then(function() {
+      var json = {
+        success: true,
+        errors: []
+      };
+      req.session.xchatty = {};
+      res.send(req.query.callback + '(' + JSON.stringify(json) + ')');
+    })
+    .catch(function(err) {
+      next(err);
+    });
+};
+
+exports.signupCustomer = function(req, res, next) {
+
+  var ua = uaParser.setUA(req.headers['user-agent']).getResult();
+  var languages = languageParser.parse(req.headers['accept-language']);
+  // var addr = ipaddr.parse(req.connection.remoteAddress);
+
+  var remoteAddress = req.headers['x-forwarded-for'] ? req.headers['x-forwarded-for'] : req.connection.remoteAddress || req.ip;
+
+  // var ipv4Addr = "151.0.175.186";
+  // var geo = geoip.lookup(ipv4Addr);
+
+  var body = {
+    fullname: req.query.data.Discussion.fullname,
+    email: req.query.data.Discussion.email,
+    // remote_address: addr,
+    remote_address: remoteAddress,
+    user_agent: req.headers['user-agent'],
+    visitor_language: req.headers['accept-language'],
+    referer: req.headers.referer,
+    origin: 'webchat',
+    browser: ua.browser.name + ' ' + ua.browser.version,
+    engine: ua.engine.name + ' ' + ua.engine.version,
+    os: ua.os.name + ' ' + ua.os.version,
+    device: ua.device.model ? ua.device.model + ' ' + ua.device.vendor + ' ' + ua.device.type : null,
+    // country: geo.country,
+    // city: geo.city,
+    // region: geo.region,
+    // latitude: geo.ll.length ? geo.ll[0].toString() : null,
+    // longitude: geo.ll.length ? geo.ll[1].toString() : null,
+    ChatWebsiteId: req.query.chatWebsiteId
+  };
+
+  if (req.query.data.Discussion.data1 && req.query.data.Discussion.labelData1) {
+    body.data1 = req.query.data.Discussion.data1;
+    body.labelData1 = req.query.data.Discussion.labelData1;
+  }
+  if (req.query.data.Discussion.data2 && req.query.data.Discussion.labelData2) {
+    body.data2 = req.query.data.Discussion.data2;
+    body.labelData2 = req.query.data.Discussion.labelData2;
+  }
+  if (req.query.data.Discussion.data3 && req.query.data.Discussion.labelData3) {
+    body.data3 = req.query.data.Discussion.data3;
+    body.labelData3 = req.query.data.Discussion.labelData3;
+  }
+
+  return ChatVisitor
+    .create(body)
+    .then(function(chatVisitor) {
+
+      req.session.xchatty.fullname = chatVisitor.fullname;
+      req.session.xchatty.email = chatVisitor.email;
+      req.session.xchatty.avatar = md5(chatVisitor.email).toString('base64');
+      req.session.xchatty.visitor_id = chatVisitor.id;
+
+      var json = {
+        success: true,
+        errors: [],
+        chatVisitor: {
+          id: chatVisitor.id
+        }
+      };
+
+      /*jshint multistr: true */
+      res.send(req.query.callback + '(' + JSON.stringify(json) + ')');
+    })
+    .catch(function(err) {
+      next(err);
+    });
+};
+
+exports.unservedCustomer = function(req, res, next) {
+  return ChatVisitor
+    .findById(req.session.xchatty.visitor_id)
+    .then(function(chatVisitor) {
+      return chatVisitor
+        .update({
+          status: 'unserved'
+        });
+    })
+    .then(function() {
+      var json = {
+        success: true,
+        errors: []
+      };
+      req.session.xchatty = {};
+      res.send(req.query.callback + '(' + JSON.stringify(json) + ')');
+    })
+    .catch(function(err) {
+      next(err);
+    });
+};
+
+exports.submitEnquiry = function(req, res, next) {
+
+  return sequelize.transaction().then(function(t) {
+
+    var remoteAddress = req.headers['x-forwarded-for'] ? req.headers['x-forwarded-for'] : req.connection.remoteAddress || req.ip;
+
+    var ua = uaParser.setUA(req.headers['user-agent']).getResult();
+    var languages = languageParser.parse(req.headers['accept-language']);
+    var body = {
+      fullname: req.query.data.Enquiry.fullname,
+      email: req.query.data.Enquiry.email,
+      remote_address: remoteAddress,
+      user_agent: req.headers['user-agent'],
+      visitor_language: req.headers['accept-language'],
+      browser: ua.browser.name + ' ' + ua.browser.version,
+      engine: ua.engine.name + ' ' + ua.engine.version,
+      os: ua.os.name + ' ' + ua.os.version,
+      device: ua.device.model ? ua.device.model + ' ' + ua.device.vendor + ' ' + ua.device.type : null,
+      referer: req.headers.referer,
+      origin: 'enquiry',
+      status: 'unserved',
+      ChatWebsiteId: parseInt(req.query.data.Enquiry.websiteId, 10),
+      ChatEnquiry: {
+        username: req.query.data.Enquiry.fullname,
+        email: req.query.data.Enquiry.email,
+        text: req.query.data.Enquiry.message,
+        ChatWebsiteId: parseInt(req.query.data.Enquiry.websiteId, 10)
+      }
+    };
+
+    if (req.query.data.Enquiry.offlineData1 && req.query.data.Enquiry.labelOfflineData1) {
+      body.offlineData1 = req.query.data.Enquiry.offlineData1;
+      body.labelOfflineData1 = req.query.data.Enquiry.labelOfflineData1;
+    }
+    if (req.query.data.Enquiry.offlineData2 && req.query.data.Enquiry.labelOfflineData2) {
+      body.offlineData2 = req.query.data.Enquiry.offlineData2;
+      body.labelOfflineData2 = req.query.data.Enquiry.labelOfflineData2;
+    }
+    if (req.query.data.Enquiry.offlineData3 && req.query.data.Enquiry.labelOfflineData3) {
+      body.offlineData3 = req.query.data.Enquiry.offlineData3;
+      body.labelOfflineData3 = req.query.data.Enquiry.labelOfflineData3;
+    }
+
+    return ChatVisitor
+      .create(body, {
+        transaction: t,
+        include: [{
+          model: ChatEnquiry
+        }]
+      })
+      .then(function() {
+        t.commit();
+        res.send(req.query.callback + '(' + JSON.stringify({
+          success: true,
+          errors: []
+        }) + ')');
+      })
+      .catch(function(err) {
+        t.rollback();
+        next(err);
+      });
+  });
+};
+
+exports.getTranscript = function(req, res, next) {
+  if (req.session.xchatty && req.session.xchatty.visitor_id && req.session.xchatty.room_id) {
+    ChatMessage
+      .findAll({
+        where: {
+          ChatRoomId: req.session.xchatty.room_id
+        },
+        include: [{
+          model: Agent,
+          attributes: ['id', 'fullname']
+        }, {
+          model: ChatVisitor,
+          attributes: ['id', 'fullname']
+        }]
+      })
+      .then(function(chatMessages) {
+        var chatMessageForCSV = [];
+        chatMessages.forEach(function(chatMessage) {
+          var chatMsg = {
+            name: chatMessage.UserId ? chatMessage.User.fullname : chatMessage.ChatVisitor.fullname,
+            text: chatMessage.body.replace(/(\r\n|\n|\r)/gm, " "),
+            date: chatMessage.createdAt
+          };
+          chatMessageForCSV.push(chatMsg);
+        });
+        var csv_transcript = csv(chatMessageForCSV);
+        res.type('text/csv').status(200).send(csv_transcript);
+      })
+      .catch(function(err) {
+        next(err);
+      });
+  }
+};
+
+// Get a single xchatty
+exports.show = function(req, res, next) {
+  return Xchatty
+    .findById(req.params.id)
+    .then(function(xchatty) {
+      if (!xchatty) {
+        return res.sendStatus(404);
+      }
+      return res.send(xchatty);
+    })
+    .catch(function(err) {
+      return next(err);
+    });
+};
+
+// Creates a new xchatty in the DB.
+exports.create = function(req, res, next) {
+  return Xchatty
+    .create(req.body)
+    .then(function(xchatty) {
+      return res.status(201).send(xchatty);
+    })
+    .catch(function(err) {
+      return next(err);
+    });
+};
+
+// Updates an existing xchatty in the DB.
+exports.update = function(req, res, next) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+
+  return Xchatty
+    .findById(req.params.id)
+    .then(function(xchatty) {
+      if (!xchatty) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(xchatty, req.body);
+      updated.save()
+        .then(function() {
+          return res.status(200).send(xchatty);
+        })
+        .catch(function(err) {
+          return next(err);
+        });
+    })
+    .catch(function(err) {
+      return next(err);
+    });
+};
+
+// Deletes a xchatty from the DB.
+exports.destroy = function(req, res, next) {
+  return Xchatty
+    .findById(req.params.id)
+    .then(function(xchatty) {
+      if (!xchatty) {
+        return res.sendStatus(404);
+      }
+      xchatty.destroy()
+        .then(function() {
+          return res.sendStatus(204);
+        })
+        .catch(function(err) {
+          return next(err);
+        });
+    })
+    .catch(function(err) {
+      return next(err);
+    });
+};
+
+
+exports.getHtmlByWebsite = function(req, res, next) {
+  var template = xchatty_components.template;
+  return ChatWebsite
+    .findById(req.params.id, {
+      include: [{
+        all: true
+      }]
+    })
+    .then(function(chatWebsite) {
+      var configWebsite = {
+        rootPath: Util.stripTrailingSlash(chatWebsite.remote) + '/api/xchatty/',
+        headerShape: chatWebsite.header_shape,
+        enquiryEnable: chatWebsite.enquiry_enable,
+        onlineFields: chatWebsite.Online,
+        renderedOnlineField: function() {
+          var renderedElement = '';
+          var element = this;
+          switch (this.component) {
+            case 'textInput':
+              renderedElement = '<div class="xc_div_group">';
+              renderedElement += util.format('<label class="xc_label" for="%d">%s %s</label>', element.index, element.label, element.required ? '*' : '');
+              renderedElement += util.format('<input data-label="%s" type="text" id="%d" name="data[Discussion][data%d]" placeholder="%s" %s/>', element.label, element.index, element.index +
+                1,
+                element.placeholder, element.required ?
+                'required' :
+                '');
+              renderedElement += '</div>';
+              break;
+            case 'textArea':
+              renderedElement = '<div class="xc_div_group">';
+              renderedElement += util.format('<label class="xc_label" for="%d">%s %s</label>', element.index, element.label, element.required ? '*' : '');
+              renderedElement += util.format('<textarea id="%d" data-label="%s" name="data[Discussion][data%d]" placeholder="%s" %s></textarea>', element.index, element.label, element.index +
+                1,
+                element.placeholder, element.required ?
+                'required' :
+                '');
+              renderedElement += '</div>';
+              break;
+            case 'checkbox':
+              renderedElement = '<div class="xc_div_group">';
+              renderedElement += util.format('<label class="xc_label">%s</label>', element.label);
+              _.forEach(element.options, function(item) {
+                renderedElement += '<label style="display:block;">';
+                renderedElement += util.format('<input type="checkbox" name="data[Discussion][data%d]" value="%s"> %s<br>', element.index + 1, item, item);
+                renderedElement += '</label>';
+              });
+              renderedElement += '</div>';
+              break;
+            case 'radio':
+              renderedElement = '<div class="xc_div_group">';
+              renderedElement += util.format('<label class="xc_label">%s</label>', element.label);
+              _.forEach(element.options, function(item) {
+                renderedElement += '<label style="display:block;">';
+                renderedElement += util.format('<input type="radio" name="data[Discussion][data%d]" value="%s"> %s<br>', element.index + 1, item, item);
+                renderedElement += '</label>';
+              });
+              renderedElement += '</div>';
+              break;
+            case 'select':
+              renderedElement = '<div class="xc_div_group">';
+              renderedElement += util.format('<label class="xc_label" for="%d">%s</label>', element.index, element.label);
+              renderedElement += util.format('<select name="data[Discussion][data%d]">', element.index + 1);
+              _.forEach(element.options, function(item) {
+                renderedElement += util.format('<option value="%s">%s</option>', item, item);
+              });
+              renderedElement += '</select></div>';
+              break;
+          }
+          renderedElement += '<br>';
+          renderedElement += util.format('<input type="hidden" name="data[Discussion][labelData%d]" value="%s">', element.index + 1, element.label);
+          return renderedElement;
+        },
+        offlineFields: chatWebsite.Offline,
+        renderedOfflineField: function() {
+          var renderedElement = '';
+          var element = this;
+          switch (this.component) {
+            case 'textInput':
+              renderedElement = '<div class="xc_div_group">';
+              renderedElement += util.format('<label class="xc_label" for="offline%d">%s %s</label>', element.index, element.label, element.required ? '*' : '');
+              renderedElement += util.format('<input data-label="%s" type="text" id="offline%d" name="data[Enquiry][offlineData%d]" placeholder="%s" %s/>', element.label, element.index,
+                element.index +
+                1,
+                element.placeholder, element.required ?
+                'required' :
+                '');
+              renderedElement += '</div>';
+              break;
+            case 'textArea':
+              renderedElement = '<div class="xc_div_group">';
+              renderedElement += util.format('<label class="xc_label" for="offline%d">%s %s</label>', element.index, element.label, element.required ? '*' : '');
+              renderedElement += util.format('<textarea id="offline%d" data-label="%s" name="data[Enquiry][offlineData%d]" placeholder="%s" %s></textarea>', element.index, element.label,
+                element.index +
+                1,
+                element.placeholder, element.required ?
+                'required' :
+                '');
+              renderedElement += '</div>';
+              break;
+            case 'checkbox':
+              renderedElement = '<div class="xc_div_group">';
+              renderedElement += util.format('<label class="xc_label">%s</label>', element.label);
+              _.forEach(element.options, function(item) {
+                renderedElement += '<label style="display:block;">';
+                renderedElement += util.format('<input type="checkbox" name="data[Enquiry][offlineData%d]" value="%s"> %s<br>', element.index + 1, item, item);
+                renderedElement += '</label>';
+              });
+              renderedElement += '</div>';
+              break;
+            case 'radio':
+              renderedElement = '<div class="xc_div_group">';
+              renderedElement += util.format('<label class="xc_label">%s</label>', element.label);
+              _.forEach(element.options, function(item) {
+                renderedElement += '<label style="display:block;">';
+                renderedElement += util.format('<input type="radio" name="data[Enquiry][offlineData%d]" value="%s"> %s<br>', element.index + 1, item, item);
+                renderedElement += '</label>';
+              });
+              renderedElement += '</div>';
+              break;
+            case 'select':
+              renderedElement = '<div class="xc_div_group">';
+              renderedElement += util.format('<label class="xc_label">%s</label>', element.label);
+              renderedElement += util.format('<select name="data[Enquiry][offlineData%d]">', element.index + 1);
+              _.forEach(element.options, function(item) {
+                renderedElement += util.format('<option value="%s">%s</option>', item, item);
+              });
+              renderedElement += '</select></div>';
+              break;
+          }
+          renderedElement += '<br>';
+          renderedElement += util.format('<input type="hidden" name="data[Enquiry][labelOfflineData%d]" value="%s">', element.index + 1, element.label);
+          return renderedElement;
+        }
+      };
+      template = Mustache.render(template, configWebsite);
+      return res.status(200).jsonp(template);
+    })
+    .catch(function(err) {
+      return next(err);
+    });
+};
+
+exports.getProactiveActionsByWebsite = function(req, res, next) {
+  return ChatWebsite
+    .findById(req.params.id, {
+      include: [{
+        model: ChatProactiveAction
+      }]
+    })
+    .then(function(chatWebsite) {
+      if (!chatWebsite) {
+        return res.status(400).jsonp({});
+      }
+      return res.status(200).jsonp(chatWebsite.ChatProactiveActions);
+    })
+    .catch(function(err) {
+      return next(err);
+    });
+};
+
+exports.setRating = function(req, res, next) {
+  return ChatRoom
+    .findById(req.query.data.Rating.room_id)
+    .then(function(chatRoom) {
+      if (!chatRoom) {
+        return res.status(400).jsonp({});
+      }
+      if (req.query.data.Rating.hasOwnProperty('rating') && req.query.data.Rating.hasOwnProperty('message')) {
+        return chatRoom
+          .update({
+            rating: req.query.data.Rating.rating,
+            ratingMessage: req.query.data.Rating.message
+          });
+      }
+      return;
+    })
+    .then(function() {
+      return res.status(200).jsonp({});
+    })
+    .catch(function(err) {
+      return res.status(400).jsonp(err);
+    });
+}
+
+exports.abandonCustomer = function(req, res, next) {
+  if (req.session.xchatty.hasOwnProperty('visitor_id') && req.session.xchatty.visitor_id > 0) {
+    return ReportChatSession
+      .find({
+        where: {
+          visitorid: req.session.xchatty.visitor_id
+        }
+      })
+      .then(function(reportChatSession) {
+        return reportChatSession
+          .update({
+            abandonAt: moment().format("YYYY-MM-DD HH:mm:ss")
+          });
+      })
+      .then(function() {
+        return res.status(200).jsonp({});
+      })
+      .catch(function(err) {
+        res.status(500).jsonp({});
+      });
+  }
+  return res.status(200).jsonp({});
+}
index d62b659..b8ec557 100644 (file)
@@ -1 +1,24 @@
-var _0x8e2e=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x58\x63\x68\x61\x74\x74\x79","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x78\x63\x68\x61\x74\x74\x79\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x78\x63\x68\x61\x74\x74\x79\x3A\x72\x65\x6D\x6F\x76\x65"];_0x8e2e[0];var xchatty=require(_0x8e2e[2])[_0x8e2e[1]];exports[_0x8e2e[3]]=function(_0xde6bx2){};function onSave(_0xde6bx2,_0xde6bx4,_0xde6bx5){_0xde6bx2[_0x8e2e[5]](_0x8e2e[4],_0xde6bx4)}function onRemove(_0xde6bx2,_0xde6bx4,_0xde6bx5){_0xde6bx2[_0x8e2e[5]](_0x8e2e[6],_0xde6bx4)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var xchatty = require('../../models').Xchatty;
+
+exports.register = function(socket) {
+  // xchatty.afterCreate(function (doc) {
+  //   onSave(socket, doc);
+  // });
+  // xchatty.afterDestroy(function (doc) {
+  //   onRemove(socket, doc);
+  // });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('xchatty:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('xchatty:remove', doc);
+}
index 68f7291..1d3a00a 100644 (file)
@@ -1 +1,32 @@
-var _0x30ee=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x7A\x65\x6E\x64\x65\x73\x6B\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x2F\x3A\x69\x64\x2F\x63\x68\x65\x63\x6B","\x63\x68\x65\x63\x6B\x41\x63\x63\x6F\x75\x6E\x74","\x2F\x3A\x69\x64\x2F\x66\x69\x65\x6C\x64\x73","\x67\x65\x74\x46\x69\x65\x6C\x64\x73","\x2F\x3A\x69\x64\x2F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73","\x67\x65\x74\x41\x63\x63\x6F\x75\x6E\x74\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73","\x2F\x3A\x69\x64\x2F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73\x2F\x3A\x63\x69\x64","\x67\x65\x74\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x2F\x76\x61\x6C\x69\x64\x61\x74\x65\x2F\x3A\x66\x69\x65\x6C\x64","\x7A\x65\x6E\x64\x65\x73\x6B\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E","\x70\x6F\x73\x74","\x63\x72\x65\x61\x74\x65","\x63\x72\x65\x61\x74\x65\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x2F\x3A\x69\x64\x2F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73\x2F\x3A\x63\x69\x64\x2F\x3A\x74\x79\x70\x65","\x63\x72\x65\x61\x74\x65\x46\x69\x65\x6C\x64","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x2F\x3A\x69\x64\x2F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73\x2F\x3A\x63\x69\x64\x2F\x74\x61\x67\x73","\x61\x64\x64\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x54\x61\x67\x73","\x2F\x3A\x69\x64\x2F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73\x2F\x3A\x63\x69\x64\x2F\x66\x69\x65\x6C\x64\x73\x2F\x3A\x66\x69\x64","\x75\x70\x64\x61\x74\x65\x46\x69\x65\x6C\x64","\x70\x61\x74\x63\x68","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73","\x64\x65\x73\x74\x72\x6F\x79\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x64\x65\x73\x74\x72\x6F\x79\x46\x69\x65\x6C\x64","\x65\x78\x70\x6F\x72\x74\x73"];_0x30ee[0];var express=require(_0x30ee[1]);var auth=require(_0x30ee[2]);var controller=require(_0x30ee[3]);var router=express.Router();router[_0x30ee[7]](_0x30ee[4],auth[_0x30ee[5]](),controller[_0x30ee[6]]);router[_0x30ee[7]](_0x30ee[8],auth[_0x30ee[5]](),controller[_0x30ee[9]]);router[_0x30ee[7]](_0x30ee[10],auth[_0x30ee[5]](),controller[_0x30ee[11]]);router[_0x30ee[7]](_0x30ee[12],auth[_0x30ee[5]](),controller[_0x30ee[13]]);router[_0x30ee[7]](_0x30ee[14],auth[_0x30ee[5]](),controller[_0x30ee[15]]);router[_0x30ee[7]](_0x30ee[16],auth[_0x30ee[5]](),controller[_0x30ee[17]]);router[_0x30ee[20]](_0x30ee[18],auth[_0x30ee[5]](),controller[_0x30ee[19]]);router[_0x30ee[20]](_0x30ee[4],auth[_0x30ee[5]](),controller[_0x30ee[21]]);router[_0x30ee[20]](_0x30ee[14],auth[_0x30ee[5]](),controller[_0x30ee[22]]);router[_0x30ee[20]](_0x30ee[23],auth[_0x30ee[5]](),controller[_0x30ee[24]]);router[_0x30ee[26]](_0x30ee[8],auth[_0x30ee[5]](),controller[_0x30ee[25]]);router[_0x30ee[26]](_0x30ee[27],auth[_0x30ee[5]](),controller[_0x30ee[28]]);router[_0x30ee[26]](_0x30ee[29],auth[_0x30ee[5]](),controller[_0x30ee[30]]);router[_0x30ee[31]](_0x30ee[8],auth[_0x30ee[5]](),controller[_0x30ee[25]]);router[_0x30ee[31]](_0x30ee[29],auth[_0x30ee[5]](),controller[_0x30ee[30]]);router[_0x30ee[33]](_0x30ee[4],auth[_0x30ee[5]](),controller[_0x30ee[32]]);router[_0x30ee[33]](_0x30ee[8],auth[_0x30ee[5]](),controller[_0x30ee[34]]);router[_0x30ee[33]](_0x30ee[14],auth[_0x30ee[5]](),controller[_0x30ee[35]]);router[_0x30ee[33]](_0x30ee[16],auth[_0x30ee[5]](),controller[_0x30ee[36]]);router[_0x30ee[33]](_0x30ee[29],auth[_0x30ee[5]](),controller[_0x30ee[37]]);module[_0x30ee[38]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var auth = require('../../auth/auth.service');
+var controller = require('./zendesk_account.controller');
+
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), controller.index);
+router.get('/:id', auth.isAuthenticated(), controller.show);
+router.get('/:id/check', auth.isAuthenticated(), controller.checkAccount);
+router.get('/:id/fields', auth.isAuthenticated(), controller.getFields);
+router.get('/:id/configurations', auth.isAuthenticated(), controller.getAccountConfigurations);
+router.get('/:id/configurations/:cid', auth.isAuthenticated(), controller.getConfiguration);
+router.post('/validate/:field', auth.isAuthenticated(), controller.zendeskValidation);
+router.post('/', auth.isAuthenticated(), controller.create);
+router.post('/:id/configurations', auth.isAuthenticated(), controller.createConfiguration);
+router.post('/:id/configurations/:cid/:type', auth.isAuthenticated(), controller.createField);
+router.put('/:id', auth.isAuthenticated(), controller.update);
+// router.put('/:id/configurations/:cid', auth.isAuthenticated(), controller.updateConfiguration);
+router.put('/:id/configurations/:cid/tags', auth.isAuthenticated(), controller.addConfigurationTags);
+router.put('/:id/configurations/:cid/fields/:fid', auth.isAuthenticated(), controller.updateField);
+router.patch('/:id', auth.isAuthenticated(), controller.update);
+// router.patch('/:id/configurations/:cid', auth.isAuthenticated(), controller.updateConfiguration);
+router.patch('/:id/configurations/:cid/fields/:fid', auth.isAuthenticated(), controller.updateField);
+router.delete('/', auth.isAuthenticated(), controller.bulkDestroy);
+router.delete('/:id', auth.isAuthenticated(), controller.destroy);
+router.delete('/:id/configurations', auth.isAuthenticated(), controller.bulkDestroyConfigurations);
+router.delete('/:id/configurations/:cid', auth.isAuthenticated(), controller.destroyConfiguration);
+router.delete('/:id/configurations/:cid/fields/:fid', auth.isAuthenticated(), controller.destroyField);
+
+module.exports = router;
index 9436b5b..78030cd 100644 (file)
@@ -1 +1,316 @@
-var _0xd4a6=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x6E\x6F\x64\x65\x2D\x7A\x65\x6E\x64\x65\x73\x6B","\x5A\x65\x6E\x64\x65\x73\x6B\x41\x63\x63\x6F\x75\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x5A\x65\x6E\x64\x65\x73\x6B\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x5A\x65\x6E\x64\x65\x73\x6B\x46\x69\x65\x6C\x64","\x45\x72\x72\x6F\x72\x3A","\x65\x72\x72\x6F\x72","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6A\x73\x6F\x6E","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x65\x6E\x64","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x73\x74\x72\x6F\x79","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73","\x73\x63\x6F\x70\x65","\x73\x68\x6F\x77","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73","\x7A\x65\x6E\x64\x65\x73\x6B\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E","\x66\x69\x65\x6C\x64","\x76\x61\x6C\x75\x65","\x63\x6F\x75\x6E\x74","\x63\x68\x65\x63\x6B\x41\x63\x63\x6F\x75\x6E\x74","\x75\x73\x65\x72\x6E\x61\x6D\x65","\x72\x65\x6D\x6F\x74\x65\x55\x72\x69","\x61\x75\x74\x68\x54\x79\x70\x65","\x70\x61\x73\x73\x77\x6F\x72\x64","\x74\x6F\x6B\x65\x6E","\x63\x72\x65\x61\x74\x65\x43\x6C\x69\x65\x6E\x74","\x76\x65\x72\x69\x66\x69\x65\x64","\x61\x75\x74\x68","\x75\x73\x65\x72\x73","\x67\x65\x74\x46\x69\x65\x6C\x64\x73","\x6C\x69\x73\x74","\x74\x69\x63\x6B\x65\x74\x66\x69\x65\x6C\x64\x73","\x67\x65\x74\x41\x63\x63\x6F\x75\x6E\x74\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73","\x61\x63\x63\x6F\x75\x6E\x74","\x67\x65\x74\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x63\x69\x64","\x64\x65\x73\x74\x72\x6F\x79\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73","\x63\x72\x65\x61\x74\x65\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x41\x63\x63\x6F\x75\x6E\x74\x49\x64","\x63\x72\x65\x61\x74\x65\x46\x69\x65\x6C\x64","\x53\x75\x62\x6A\x65\x63\x74\x49\x64","\x73\x75\x62\x6A\x65\x63\x74","\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x49\x64","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x46\x69\x65\x6C\x64\x49\x64","\x74\x79\x70\x65","\x75\x70\x64\x61\x74\x65\x46\x69\x65\x6C\x64","\x66\x69\x64","\x64\x65\x73\x74\x72\x6F\x79\x46\x69\x65\x6C\x64","\x61\x64\x64\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x54\x61\x67\x73","\x73\x65\x74\x54\x61\x67\x73"];_0xd4a6[0];var _=require(_0xd4a6[1]);var Util=require(_0xd4a6[2]);var zendesk=require(_0xd4a6[3]);var ZendeskAccount=require(_0xd4a6[5])[_0xd4a6[4]];var ZendeskConfiguration=require(_0xd4a6[5])[_0xd4a6[6]];var ZendeskField=require(_0xd4a6[5])[_0xd4a6[7]];function handleError(_0xc540x8,_0xc540x9){_0xc540x9=_0xc540x9||500;return function(_0xc540xa){console[_0xd4a6[9]](_0xd4a6[8],_0xc540xa);_0xc540x8[_0xd4a6[11]](_0xc540x9)[_0xd4a6[10]](_0xc540xa)}}function responseWithResult(_0xc540x8,_0xc540x9){_0xc540x9=_0xc540x9||200;return function(_0xc540xc){if(_0xc540xc){_0xc540x8[_0xd4a6[11]](_0xc540x9)[_0xd4a6[12]](_0xc540xc)}}}function responseWithoutResult(_0xc540x8,_0xc540x9){_0xc540x9=_0xc540x9||200;return function(){_0xc540x8[_0xd4a6[13]](_0xc540x9)}}function handleEntityNotFound(_0xc540x8){return function(_0xc540xc){if(!_0xc540xc){_0xc540x8[_0xd4a6[11]](404)[_0xd4a6[14]]();return null};return _0xc540xc}}function saveUpdates(_0xc540x10){return function(_0xc540xc){return _0xc540xc[_0xd4a6[16]](_0xc540x10)[_0xd4a6[15]](function(_0xc540x11){return _0xc540x11})}}function removeEntity(_0xc540x8){return function(_0xc540xc){if(_0xc540xc){return _0xc540xc[_0xd4a6[17]]()[_0xd4a6[15]](function(){_0xc540x8[_0xd4a6[11]](204)[_0xd4a6[14]]()})}}}exports[_0xd4a6[18]]=function(_0xc540x13,_0xc540x8,_0xc540x14){return ZendeskAccount[_0xd4a6[24]](_0xd4a6[23])[_0xd4a6[22]](Util[_0xd4a6[21]](_0xc540x13[_0xd4a6[20]]))[_0xd4a6[15]](responseWithResult(_0xc540x8))[_0xd4a6[19]](handleError(_0xc540x8))};exports[_0xd4a6[25]]=function(_0xc540x13,_0xc540x8){return ZendeskAccount[_0xd4a6[28]](_0xc540x13[_0xd4a6[27]][_0xd4a6[26]])[_0xd4a6[15]](handleEntityNotFound(_0xc540x8))[_0xd4a6[15]](responseWithResult(_0xc540x8))[_0xd4a6[19]](handleError(_0xc540x8))};exports[_0xd4a6[29]]=function(_0xc540x13,_0xc540x8){return ZendeskAccount[_0xd4a6[29]](_0xc540x13[_0xd4a6[30]])[_0xd4a6[15]](responseWithResult(_0xc540x8,201))[_0xd4a6[19]](handleError(_0xc540x8))};exports[_0xd4a6[31]]=function(_0xc540x13,_0xc540x8){if(_0xc540x13[_0xd4a6[30]][_0xd4a6[26]]){delete _0xc540x13[_0xd4a6[30]][_0xd4a6[26]]};return ZendeskAccount[_0xd4a6[28]](_0xc540x13[_0xd4a6[27]][_0xd4a6[26]])[_0xd4a6[15]](handleEntityNotFound(_0xc540x8))[_0xd4a6[15]](saveUpdates(_0xc540x13[_0xd4a6[30]]))[_0xd4a6[15]](responseWithResult(_0xc540x8))[_0xd4a6[19]](handleError(_0xc540x8))};exports[_0xd4a6[17]]=function(_0xc540x13,_0xc540x8){return ZendeskAccount[_0xd4a6[28]](_0xc540x13[_0xd4a6[27]][_0xd4a6[26]])[_0xd4a6[15]](handleEntityNotFound(_0xc540x8))[_0xd4a6[15]](removeEntity(_0xc540x8))[_0xd4a6[19]](handleError(_0xc540x8))};exports[_0xd4a6[32]]=function(_0xc540x13,_0xc540x8){return ZendeskAccount[_0xd4a6[17]]({where:{id:_0xc540x13[_0xd4a6[20]][_0xd4a6[33]]},individualHooks:true})[_0xd4a6[15]](responseWithResult(_0xc540x8,204))[_0xd4a6[19]](handleError(_0xc540x8))};exports[_0xd4a6[34]]=function(_0xc540x13,_0xc540x8){var _0xc540x15={};_0xc540x15[_0xc540x13[_0xd4a6[27]][_0xd4a6[35]]]=_0xc540x13[_0xd4a6[30]][_0xd4a6[36]];return ZendeskAccount[_0xd4a6[22]]({where:_0xc540x15})[_0xd4a6[15]](function(_0xc540x16){if(_0xc540x16[_0xd4a6[37]]){return _0xc540x8[_0xd4a6[11]](200)[_0xd4a6[10]]({isValid:false,value:_0xc540x13[_0xd4a6[30]][_0xd4a6[36]]})};return _0xc540x8[_0xd4a6[11]](200)[_0xd4a6[10]]({isValid:true,value:_0xc540x13[_0xd4a6[30]][_0xd4a6[36]]})})[_0xd4a6[19]](handleError(_0xc540x8))};exports[_0xd4a6[38]]=function(_0xc540x13,_0xc540x8){return ZendeskAccount[_0xd4a6[28]](_0xc540x13[_0xd4a6[27]][_0xd4a6[26]])[_0xd4a6[15]](function(_0xc540x17){var _0xc540x18={username:_0xc540x17[_0xd4a6[39]],remoteUri:_0xc540x17[_0xd4a6[40]]};if(_0xc540x17[_0xd4a6[41]]===_0xd4a6[42]){_0xc540x18[_0xd4a6[42]]=_0xc540x17[_0xd4a6[42]]}else {if(_0xc540x17[_0xd4a6[41]]===_0xd4a6[43]){_0xc540x18[_0xd4a6[43]]=_0xc540x17[_0xd4a6[43]]}};var _0xc540x19=zendesk[_0xd4a6[44]](_0xc540x18);_0xc540x19[_0xd4a6[47]][_0xd4a6[46]](function(_0xc540xa,_0xc540x1a,_0xc540x16){if(_0xc540xa){console[_0xd4a6[9]](_0xc540xa);return handleError(_0xc540x8,_0xc540xa)};if(!_0xc540x16[_0xd4a6[45]]){return _0xc540x8[_0xd4a6[13]](500)};return _0xc540x8[_0xd4a6[13]](204)})})[_0xd4a6[19]](handleError(_0xc540x8))};exports[_0xd4a6[48]]=function(_0xc540x13,_0xc540x8){return ZendeskAccount[_0xd4a6[28]](_0xc540x13[_0xd4a6[27]][_0xd4a6[26]])[_0xd4a6[15]](function(_0xc540x17){var _0xc540x18={username:_0xc540x17[_0xd4a6[39]],remoteUri:_0xc540x17[_0xd4a6[40]]};if(_0xc540x17[_0xd4a6[41]]===_0xd4a6[42]){_0xc540x18[_0xd4a6[42]]=_0xc540x17[_0xd4a6[42]]}else {if(_0xc540x17[_0xd4a6[41]]===_0xd4a6[43]){_0xc540x18[_0xd4a6[43]]=_0xc540x17[_0xd4a6[43]]}};var _0xc540x19=zendesk[_0xd4a6[44]](_0xc540x18);_0xc540x19[_0xd4a6[50]][_0xd4a6[49]](function(_0xc540xa,_0xc540x1a,_0xc540x16){if(_0xc540xa){console[_0xd4a6[9]](_0xc540xa);return handleError(_0xc540x8,_0xc540xa)};return _0xc540x8[_0xd4a6[11]](200)[_0xd4a6[10]](_0xc540x16)})})[_0xd4a6[19]](handleError(_0xc540x8))};exports[_0xd4a6[51]]=function(_0xc540x13,_0xc540x8){return ZendeskConfiguration[_0xd4a6[24]]({method:[_0xd4a6[52],_0xc540x13[_0xd4a6[27]][_0xd4a6[26]]]})[_0xd4a6[22]](Util[_0xd4a6[21]](_0xc540x13[_0xd4a6[20]]))[_0xd4a6[15]](responseWithResult(_0xc540x8))[_0xd4a6[19]](handleError(_0xc540x8))};exports[_0xd4a6[53]]=function(_0xc540x13,_0xc540x8){return ZendeskConfiguration[_0xd4a6[24]]({method:[_0xd4a6[52],_0xc540x13[_0xd4a6[27]][_0xd4a6[26]]]})[_0xd4a6[28]](_0xc540x13[_0xd4a6[27]][_0xd4a6[54]])[_0xd4a6[15]](handleEntityNotFound(_0xc540x8))[_0xd4a6[15]](responseWithResult(_0xc540x8))[_0xd4a6[19]](handleError(_0xc540x8))};exports[_0xd4a6[55]]=function(_0xc540x13,_0xc540x8){return ZendeskConfiguration[_0xd4a6[24]]({method:[_0xd4a6[52],_0xc540x13[_0xd4a6[27]][_0xd4a6[26]]]})[_0xd4a6[28]](_0xc540x13[_0xd4a6[27]][_0xd4a6[54]])[_0xd4a6[15]](handleEntityNotFound(_0xc540x8))[_0xd4a6[15]](removeEntity(_0xc540x8))[_0xd4a6[19]](handleError(_0xc540x8))};exports[_0xd4a6[56]]=function(_0xc540x13,_0xc540x8){return ZendeskConfiguration[_0xd4a6[17]]({where:{id:_0xc540x13[_0xd4a6[20]][_0xd4a6[33]]},individualHooks:true})[_0xd4a6[15]](responseWithResult(_0xc540x8,204))[_0xd4a6[19]](handleError(_0xc540x8))};exports[_0xd4a6[57]]=function(_0xc540x13,_0xc540x8){_0xc540x13[_0xd4a6[30]][_0xd4a6[58]]=_0xc540x13[_0xd4a6[27]][_0xd4a6[26]];return ZendeskConfiguration[_0xd4a6[29]](_0xc540x13[_0xd4a6[30]])[_0xd4a6[15]](responseWithResult(_0xc540x8,201))[_0xd4a6[19]](handleError(_0xc540x8))};exports[_0xd4a6[59]]=function(_0xc540x13,_0xc540x8){return ZendeskConfiguration[_0xd4a6[24]]({method:[_0xd4a6[52],_0xc540x13[_0xd4a6[27]][_0xd4a6[26]]]})[_0xd4a6[28]](_0xc540x13[_0xd4a6[27]][_0xd4a6[54]])[_0xd4a6[15]](handleEntityNotFound(_0xc540x8))[_0xd4a6[15]](function(_0xc540x1b){switch(_0xc540x13[_0xd4a6[27]][_0xd4a6[65]]){case _0xd4a6[61]:_0xc540x13[_0xd4a6[30]][_0xd4a6[60]]=_0xc540x13[_0xd4a6[27]][_0xd4a6[54]];break;case _0xd4a6[63]:_0xc540x13[_0xd4a6[30]][_0xd4a6[62]]=_0xc540x13[_0xd4a6[27]][_0xd4a6[54]];break;case _0xd4a6[35]:_0xc540x13[_0xd4a6[30]][_0xd4a6[64]]=_0xc540x13[_0xd4a6[27]][_0xd4a6[54]];break};return ZendeskField[_0xd4a6[29]](_0xc540x13[_0xd4a6[30]])})[_0xd4a6[15]](responseWithResult(_0xc540x8,201))[_0xd4a6[19]](handleError(_0xc540x8))};exports[_0xd4a6[66]]=function(_0xc540x13,_0xc540x8){if(_0xc540x13[_0xd4a6[30]][_0xd4a6[26]]){delete _0xc540x13[_0xd4a6[30]][_0xd4a6[26]]};return ZendeskField[_0xd4a6[28]](_0xc540x13[_0xd4a6[27]][_0xd4a6[67]])[_0xd4a6[15]](handleEntityNotFound(_0xc540x8))[_0xd4a6[15]](saveUpdates(_0xc540x13[_0xd4a6[30]]))[_0xd4a6[15]](responseWithResult(_0xc540x8))[_0xd4a6[19]](handleError(_0xc540x8))};exports[_0xd4a6[68]]=function(_0xc540x13,_0xc540x8){return ZendeskField[_0xd4a6[28]](_0xc540x13[_0xd4a6[27]][_0xd4a6[67]])[_0xd4a6[15]](handleEntityNotFound(_0xc540x8))[_0xd4a6[15]](removeEntity(_0xc540x8))[_0xd4a6[19]](handleError(_0xc540x8))};exports[_0xd4a6[69]]=function(_0xc540x13,_0xc540x8,_0xc540x14){return ZendeskConfiguration[_0xd4a6[28]](_0xc540x13[_0xd4a6[27]][_0xd4a6[54]])[_0xd4a6[15]](handleEntityNotFound(_0xc540x8))[_0xd4a6[15]](function(_0xc540x1b){return _0xc540x1b[_0xd4a6[70]](_0xc540x13[_0xd4a6[30]])})[_0xd4a6[15]](responseWithoutResult(_0xc540x8,200))[_0xd4a6[19]](function(_0xc540xa){console[_0xd4a6[9]](_0xc540xa);return handleError(_0xc540x8,_0xc540xa)})}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var Util = require('../../config/util');
+var zendesk = require('node-zendesk');
+
+var ZendeskAccount = require('../../models').ZendeskAccount;
+var ZendeskConfiguration = require('../../models').ZendeskConfiguration;
+var ZendeskField = require('../../models').ZendeskField;
+
+function handleError(res, statusCode) {
+  statusCode = statusCode || 500;
+  return function(err) {
+    console.error('Error:', err);
+    res.status(statusCode).send(err);
+  };
+}
+
+function responseWithResult(res, statusCode) {
+  statusCode = statusCode || 200;
+  return function(entity) {
+    if (entity) {
+      res.status(statusCode).json(entity);
+    }
+  };
+}
+
+function responseWithoutResult(res, statusCode) {
+  statusCode = statusCode || 200;
+  return function() {
+    res.sendStatus(statusCode);
+  };
+}
+
+function handleEntityNotFound(res) {
+  return function(entity) {
+    if (!entity) {
+      res.status(404).end();
+      return null;
+    }
+    return entity;
+  };
+}
+
+function saveUpdates(updates) {
+  return function(entity) {
+    return entity.updateAttributes(updates)
+      .then(function(updated) {
+        return updated;
+      });
+  };
+}
+
+function removeEntity(res) {
+  return function(entity) {
+    if (entity) {
+      return entity.destroy()
+        .then(function() {
+          res.status(204).end();
+        });
+    }
+  };
+}
+
+// Get list of zendesk_accounts
+exports.index = function(req, res, next) {
+  return ZendeskAccount
+    .scope('configurations')
+    .findAndCountAll(Util.getQuery(req.query))
+    .then(responseWithResult(res))
+    .catch(handleError(res));
+};
+
+// Get a single zendesk_account
+exports.show = function(req, res) {
+  return ZendeskAccount
+    .findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(responseWithResult(res))
+    .catch(handleError(res));
+};
+
+// Creates a new zendesk_account in the DB.
+exports.create = function(req, res) {
+  return ZendeskAccount
+    .create(req.body)
+    .then(responseWithResult(res, 201))
+    .catch(handleError(res));
+};
+
+// Updates an existing zendesk_account in the DB.
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  return ZendeskAccount
+    .findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(saveUpdates(req.body))
+    .then(responseWithResult(res))
+    .catch(handleError(res));
+};
+
+// Deletes a zendesk_account from the DB.
+exports.destroy = function(req, res) {
+  return ZendeskAccount
+    .findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(removeEntity(res))
+    .catch(handleError(res));
+};
+
+exports.bulkDestroy = function(req, res) {
+  return ZendeskAccount
+    .destroy({
+      where: {
+        id: req.query.ids
+      },
+      individualHooks: true
+    })
+    .then(responseWithResult(res, 204))
+    .catch(handleError(res));
+};
+
+exports.zendeskValidation = function(req, res) {
+  var where = {};
+  where[req.params.field] = req.body.value;
+  return ZendeskAccount
+    .findAndCountAll({
+      where: where
+    })
+    .then(function(result) {
+      if (result.count) {
+        return res.status(200).send({
+          isValid: false,
+          value: req.body.value
+        });
+      }
+      return res.status(200).send({
+        isValid: true,
+        value: req.body.value
+      });
+    })
+    .catch(handleError(res));
+
+};
+
+exports.checkAccount = function(req, res) {
+  return ZendeskAccount
+    .findById(req.params.id)
+    .then(function(account) {
+      var accountZendesk = {
+        username: account.username,
+        remoteUri: account.remoteUri,
+        // debug: true
+      };
+      if (account.authType === 'password') {
+        accountZendesk.password = account.password;
+      } else if (account.authType === 'token') {
+        accountZendesk.token = account.token;
+        // accountZendesk.oauth = true;
+      }
+      // console.log(accountZendesk);
+      var client = zendesk.createClient(accountZendesk);
+      client.users.auth(function(err, res2, result) {
+        if (err) {
+          console.error(err);
+          return handleError(res, err);
+        }
+        // console.log(result);
+        if (!result.verified) {
+          return res.sendStatus(500);
+        }
+        return res.sendStatus(204);
+      });
+    })
+    .catch(handleError(res));
+};
+
+exports.getFields = function(req, res) {
+  return ZendeskAccount
+    .findById(req.params.id)
+    .then(function(account) {
+      var accountZendesk = {
+        username: account.username,
+        remoteUri: account.remoteUri,
+        // debug: true
+      };
+      if (account.authType === 'password') {
+        accountZendesk.password = account.password;
+      } else if (account.authType === 'token') {
+        accountZendesk.token = account.token;
+      }
+      var client = zendesk.createClient(accountZendesk);
+      client.ticketfields.list(function(err, res2, result) {
+        if (err) {
+          console.error(err);
+          return handleError(res, err);
+        }
+        return res.status(200).send(result);
+      });
+    })
+    .catch(handleError(res));
+}
+
+exports.getAccountConfigurations = function(req, res) {
+  return ZendeskConfiguration
+    .scope({
+      method: ['account', req.params.id]
+    })
+    .findAndCountAll(Util.getQuery(req.query))
+    .then(responseWithResult(res))
+    .catch(handleError(res));
+}
+
+exports.getConfiguration = function(req, res) {
+
+  return ZendeskConfiguration
+    .scope({
+      method: ['account', req.params.id]
+    })
+    .findById(req.params.cid)
+    .then(handleEntityNotFound(res))
+    .then(responseWithResult(res))
+    .catch(handleError(res));
+}
+
+exports.destroyConfiguration = function(req, res) {
+  return ZendeskConfiguration
+    .scope({
+      method: ['account', req.params.id]
+    })
+    .findById(req.params.cid)
+    .then(handleEntityNotFound(res))
+    .then(removeEntity(res))
+    .catch(handleError(res));
+};
+
+exports.bulkDestroyConfigurations = function(req, res) {
+  return ZendeskConfiguration
+    .destroy({
+      where: {
+        id: req.query.ids
+      },
+      individualHooks: true
+    })
+    .then(responseWithResult(res, 204))
+    .catch(handleError(res));
+};
+
+exports.createConfiguration = function(req, res) {
+  req.body['AccountId'] = req.params.id;
+  return ZendeskConfiguration
+    .create(req.body)
+    .then(responseWithResult(res, 201))
+    .catch(handleError(res));
+};
+
+exports.createField = function(req, res) {
+  return ZendeskConfiguration
+    .scope({
+      method: ['account', req.params.id]
+    })
+    .findById(req.params.cid)
+    .then(handleEntityNotFound(res))
+    .then(function(configuration) {
+      switch (req.params.type) {
+        case 'subject':
+          req.body['SubjectId'] = req.params.cid;
+          break;
+        case 'description':
+          req.body['DescriptionId'] = req.params.cid;
+          break;
+        case 'field':
+          req.body['FieldId'] = req.params.cid;
+          break;
+      }
+      return ZendeskField.create(req.body);
+    })
+    .then(responseWithResult(res, 201))
+    .catch(handleError(res));
+};
+
+exports.updateField = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  return ZendeskField
+    .findById(req.params.fid)
+    .then(handleEntityNotFound(res))
+    .then(saveUpdates(req.body))
+    .then(responseWithResult(res))
+    .catch(handleError(res));
+};
+
+exports.destroyField = function(req, res) {
+  return ZendeskField
+    .findById(req.params.fid)
+    .then(handleEntityNotFound(res))
+    .then(removeEntity(res))
+    .catch(handleError(res));
+};
+
+exports.addConfigurationTags = function(req, res, next) {
+  return ZendeskConfiguration
+    .findById(req.params.cid)
+    .then(handleEntityNotFound(res))
+    .then(function(configuration) {
+      return configuration.setTags(req.body);
+    })
+    .then(responseWithoutResult(res, 200))
+    .catch(function(err) {
+      console.error(err);
+      return handleError(res, err);
+    });
+};
index c9304df..96c8214 100644 (file)
@@ -1 +1,24 @@
-var _0x98d6=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x5A\x65\x6E\x64\x65\x73\x6B\x41\x63\x63\x6F\x75\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x7A\x65\x6E\x64\x65\x73\x6B\x5F\x61\x63\x63\x6F\x75\x6E\x74\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x7A\x65\x6E\x64\x65\x73\x6B\x5F\x61\x63\x63\x6F\x75\x6E\x74\x3A\x72\x65\x6D\x6F\x76\x65"];_0x98d6[0];var ZendeskAccount=require(_0x98d6[2])[_0x98d6[1]];exports[_0x98d6[3]]=function(_0x316fx2){ZendeskAccount[_0x98d6[4]](function(_0x316fx3){onSave(_0x316fx2,_0x316fx3)});ZendeskAccount[_0x98d6[5]](function(_0x316fx3){onRemove(_0x316fx2,_0x316fx3)})};function onSave(_0x316fx2,_0x316fx3,_0x316fx5){_0x316fx2[_0x98d6[7]](_0x98d6[6],_0x316fx3)}function onRemove(_0x316fx2,_0x316fx3,_0x316fx5){_0x316fx2[_0x98d6[7]](_0x98d6[8],_0x316fx3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var ZendeskAccount = require('../../models').ZendeskAccount;
+
+exports.register = function(socket) {
+  ZendeskAccount.afterCreate(function (doc) {
+    onSave(socket, doc);
+  });
+  ZendeskAccount.afterDestroy(function (doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('zendesk_account:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('zendesk_account:remove', doc);
+}
index 1212bf8..68c8389 100644 (file)
@@ -1 +1,20 @@
-var _0x6c5b=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x73\x68\x6F\x75\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x70\x70","\x73\x75\x70\x65\x72\x74\x65\x73\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x7A\x65\x6E\x64\x65\x73\x6B\x2F\x61\x63\x63\x6F\x75\x6E\x74\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x70\x6F\x6E\x64\x20\x77\x69\x74\x68\x20\x4A\x53\x4F\x4E\x20\x61\x72\x72\x61\x79","\x69\x6E\x73\x74\x61\x6E\x63\x65\x6F\x66","\x62\x65","\x62\x6F\x64\x79","\x65\x6E\x64","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x65\x78\x70\x65\x63\x74","\x2F\x61\x70\x69\x2F\x7A\x65\x6E\x64\x65\x73\x6B\x2F\x61\x63\x63\x6F\x75\x6E\x74\x73","\x67\x65\x74"];_0x6c5b[0];var should=require(_0x6c5b[1]);var app=require(_0x6c5b[2]);var request=require(_0x6c5b[3]);describe(_0x6c5b[4],function(){it(_0x6c5b[5],function(_0x2dc4x4){request(app)[_0x6c5b[13]](_0x6c5b[12])[_0x6c5b[11]](200)[_0x6c5b[11]](_0x6c5b[10],/json/)[_0x6c5b[9]](function(_0x2dc4x5,_0x2dc4x6){if(_0x2dc4x5){return _0x2dc4x4(_0x2dc4x5)};_0x2dc4x6[_0x6c5b[8]][_0x6c5b[1]][_0x6c5b[7]][_0x6c5b[6]](Array);_0x2dc4x4()})})})
\ No newline at end of file
+'use strict';
+
+var should = require('should');
+var app = require('../../app');
+var request = require('supertest');
+
+describe('GET /api/zendesk/accounts', function() {
+
+  it('should respond with JSON array', function(done) {
+    request(app)
+      .get('/api/zendesk/accounts')
+      .expect(200)
+      .expect('Content-Type', /json/)
+      .end(function(err, res) {
+        if (err) return done(err);
+        res.body.should.be.instanceof(Array);
+        done();
+      });
+  });
+});
\ No newline at end of file
index 16572ef..e0bc33f 100644 (file)
@@ -1 +1,17 @@
-var _0xe346=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x7A\x65\x6E\x64\x65\x73\x6B\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x2F\x3A\x69\x64\x2F\x74\x61\x67\x73","\x61\x64\x64\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x54\x61\x67\x73","\x2F\x3A\x69\x64\x2F\x3A\x74\x79\x70\x65","\x61\x64\x64\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x46\x69\x65\x6C\x64","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0xe346[0];var express=require(_0xe346[1]);var controller=require(_0xe346[2]);var auth=require(_0xe346[3]);var router=express.Router();router[_0xe346[7]](_0xe346[4],auth[_0xe346[5]](),controller[_0xe346[6]]);router[_0xe346[7]](_0xe346[8],auth[_0xe346[5]](),controller[_0xe346[9]]);router[_0xe346[11]](_0xe346[4],auth[_0xe346[5]](),controller[_0xe346[10]]);router[_0xe346[13]](_0xe346[8],auth[_0xe346[5]](),controller[_0xe346[12]]);router[_0xe346[11]](_0xe346[14],auth[_0xe346[5]](),controller[_0xe346[15]]);router[_0xe346[11]](_0xe346[16],auth[_0xe346[5]](),controller[_0xe346[17]]);router[_0xe346[18]](_0xe346[8],auth[_0xe346[5]](),controller[_0xe346[12]]);router[_0xe346[20]](_0xe346[8],auth[_0xe346[5]](),controller[_0xe346[19]]);module[_0xe346[21]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./zendesk_configuration.controller');
+var auth = require('../../auth/auth.service');
+var router = express.Router();
+
+router.get('/', auth.isAuthenticated(), controller.index);
+router.get('/:id', auth.isAuthenticated(), controller.show);
+router.post('/', auth.isAuthenticated(), controller.create);
+router.put('/:id', auth.isAuthenticated(), controller.update);
+router.post('/:id/tags', auth.isAuthenticated(), controller.addConfigurationTags);
+router.post('/:id/:type', auth.isAuthenticated(), controller.addConfigurationField);
+router.patch('/:id', auth.isAuthenticated(), controller.update);
+router.delete('/:id', auth.isAuthenticated(), controller.destroy);
+
+module.exports = router;
index 4eac4e5..e299424 100644 (file)
@@ -1 +1,181 @@
-var _0x212b=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x5A\x65\x6E\x64\x65\x73\x6B\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x5A\x65\x6E\x64\x65\x73\x6B\x46\x69\x65\x6C\x64","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x66\x69\x6E\x64\x42\x79\x49\x64","\x64\x65\x73\x74\x72\x6F\x79","\x61\x64\x64\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x46\x69\x65\x6C\x64","\x61\x64\x64\x53\x75\x62\x6A\x65\x63\x74","\x73\x75\x62\x6A\x65\x63\x74","\x61\x64\x64\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x61\x64\x64\x46\x69\x65\x6C\x64","\x66\x69\x65\x6C\x64","\x74\x79\x70\x65","\x61\x64\x64\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x54\x61\x67\x73","\x65\x72\x72\x6F\x72","\x73\x65\x74\x54\x61\x67\x73","\x65\x6E\x64"];_0x212b[0];var _=require(_0x212b[1]);var ZendeskConfiguration=require(_0x212b[3])[_0x212b[2]];var ZendeskField=require(_0x212b[3])[_0x212b[4]];exports[_0x212b[5]]=function(_0x4d8ax4,_0x4d8ax5){ZendeskConfiguration[_0x212b[11]]({where:_0x4d8ax4[_0x212b[10]]})[_0x212b[9]](function(_0x4d8ax7){return _0x4d8ax5[_0x212b[8]](200)[_0x212b[7]](_0x4d8ax7)})[_0x212b[6]](function(_0x4d8ax6){return handleError(_0x4d8ax5,_0x4d8ax6)})};exports[_0x212b[12]]=function(_0x4d8ax4,_0x4d8ax5){ZendeskConfiguration[_0x212b[16]]({where:{id:_0x4d8ax4[_0x212b[15]][_0x212b[14]]},include:[{all:true}]})[_0x212b[9]](function(_0x4d8ax8){if(!_0x4d8ax8){return _0x4d8ax5[_0x212b[13]](404)};return _0x4d8ax5[_0x212b[7]](_0x4d8ax8)})[_0x212b[6]](function(_0x4d8ax6){return handleError(_0x4d8ax5,_0x4d8ax6)})};exports[_0x212b[17]]=function(_0x4d8ax4,_0x4d8ax5){ZendeskConfiguration[_0x212b[17]](_0x4d8ax4[_0x212b[18]])[_0x212b[9]](function(_0x4d8ax8){return _0x4d8ax5[_0x212b[8]](201)[_0x212b[7]](_0x4d8ax8)})[_0x212b[6]](function(_0x4d8ax6){return handleError(_0x4d8ax5,_0x4d8ax6)})};exports[_0x212b[19]]=function(_0x4d8ax4,_0x4d8ax5){if(_0x4d8ax4[_0x212b[18]][_0x212b[14]]){delete _0x4d8ax4[_0x212b[18]][_0x212b[14]]};ZendeskConfiguration[_0x212b[22]](_0x4d8ax4[_0x212b[15]][_0x212b[14]])[_0x212b[9]](function(_0x4d8ax8){if(!_0x4d8ax8){return _0x4d8ax5[_0x212b[13]](404)};var _0x4d8ax9=_[_0x212b[20]](_0x4d8ax8,_0x4d8ax4[_0x212b[18]]);_0x4d8ax9[_0x212b[21]]()[_0x212b[9]](function(){return _0x4d8ax5[_0x212b[8]](200)[_0x212b[7]](_0x4d8ax8)})[_0x212b[6]](function(_0x4d8ax6){return handleError(_0x4d8ax5,_0x4d8ax6)})})[_0x212b[6]](function(_0x4d8ax6){return handleError(_0x4d8ax5,_0x4d8ax6)})};exports[_0x212b[23]]=function(_0x4d8ax4,_0x4d8ax5){ZendeskConfiguration[_0x212b[22]](_0x4d8ax4[_0x212b[15]][_0x212b[14]])[_0x212b[9]](function(_0x4d8ax8){if(!_0x4d8ax8){return _0x4d8ax5[_0x212b[13]](404)};_0x4d8ax8[_0x212b[23]]()[_0x212b[9]](function(){return _0x4d8ax5[_0x212b[13]](204)})[_0x212b[6]](function(_0x4d8ax6){return handleError(_0x4d8ax5,_0x4d8ax6)})})[_0x212b[6]](function(_0x4d8ax6){return handleError(_0x4d8ax5,_0x4d8ax6)})};exports[_0x212b[24]]=function(_0x4d8ax4,_0x4d8ax5,_0x4d8axa){ZendeskConfiguration[_0x212b[22]](_0x4d8ax4[_0x212b[15]][_0x212b[14]])[_0x212b[9]](function(_0x4d8axb){if(!_0x4d8axb){return _0x4d8ax5[_0x212b[13]](500)};ZendeskField[_0x212b[17]](_0x4d8ax4[_0x212b[18]])[_0x212b[9]](function(_0x4d8axc){switch(_0x4d8ax4[_0x212b[15]][_0x212b[31]]){case _0x212b[26]:_0x4d8axb[_0x212b[25]](_0x4d8axc)[_0x212b[9]](function(){return _0x4d8ax5[_0x212b[8]](200)[_0x212b[7]](_0x4d8axc)})[_0x212b[6]](function(_0x4d8ax6){return handleError(_0x4d8ax5,_0x4d8ax6)});break;case _0x212b[28]:_0x4d8axb[_0x212b[27]](_0x4d8axc)[_0x212b[9]](function(){return _0x4d8ax5[_0x212b[8]](200)[_0x212b[7]](_0x4d8axc)})[_0x212b[6]](function(_0x4d8ax6){return handleError(_0x4d8ax5,_0x4d8ax6)});break;case _0x212b[30]:_0x4d8axb[_0x212b[29]](_0x4d8axc)[_0x212b[9]](function(){return _0x4d8ax5[_0x212b[8]](200)[_0x212b[7]](_0x4d8axc)})[_0x212b[6]](function(_0x4d8ax6){return handleError(_0x4d8ax5,_0x4d8ax6)});break}})[_0x212b[6]](function(_0x4d8ax6){return handleError(_0x4d8ax5,_0x4d8ax6)})})[_0x212b[6]](function(_0x4d8ax6){return handleError(_0x4d8ax5,_0x4d8ax6)})};exports[_0x212b[32]]=function(_0x4d8ax4,_0x4d8ax5,_0x4d8axa){ZendeskConfiguration[_0x212b[22]](_0x4d8ax4[_0x212b[15]][_0x212b[14]])[_0x212b[9]](handleEntityNotFound(_0x4d8ax5))[_0x212b[9]](function(_0x4d8axb){return _0x4d8axb[_0x212b[34]](_0x4d8ax4[_0x212b[18]])})[_0x212b[9]](function(_0x4d8axd){return _0x4d8ax5[_0x212b[13]](200)})[_0x212b[6]](function(_0x4d8ax6){console[_0x212b[33]](_0x4d8ax6);return handleError(_0x4d8ax5,_0x4d8ax6)})};function handleEntityNotFound(_0x4d8ax5){return function(_0x4d8axf){if(!_0x4d8axf){_0x4d8ax5[_0x212b[8]](404)[_0x212b[35]]();return null};return _0x4d8axf}}function handleError(_0x4d8ax5,_0x4d8ax6){return _0x4d8ax5[_0x212b[8]](500)[_0x212b[7]](_0x4d8ax6)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var ZendeskConfiguration = require('../../models').ZendeskConfiguration;
+var ZendeskField = require('../../models').ZendeskField;
+
+// Get list of zendesk_configurations
+exports.index = function(req, res) {
+  ZendeskConfiguration
+    .findAll({
+      where: req.query
+    })
+    .then(function(zendesk_configurations) {
+      return res.status(200).send(zendesk_configurations);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single zendesk_configuration
+exports.show = function(req, res) {
+  ZendeskConfiguration
+    .find({
+      where: {
+        id: req.params.id
+      },
+      include: [{
+        all: true
+      }]
+    })
+    .then(function(zendesk_configuration) {
+      if (!zendesk_configuration) {
+        return res.sendStatus(404);
+      }
+      return res.send(zendesk_configuration);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new zendesk_configuration in the DB.
+exports.create = function(req, res) {
+  ZendeskConfiguration
+    .create(req.body)
+    .then(function(zendesk_configuration) {
+      return res.status(201).send(zendesk_configuration);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Updates an existing zendesk_configuration in the DB.
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  ZendeskConfiguration
+    .findById(req.params.id)
+    .then(function(zendesk_configuration) {
+      if (!zendesk_configuration) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(zendesk_configuration, req.body);
+      updated.save()
+        .then(function() {
+          return res.status(200).send(zendesk_configuration);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a zendesk_configuration from the DB.
+exports.destroy = function(req, res) {
+  ZendeskConfiguration
+    .findById(req.params.id)
+    .then(function(zendesk_configuration) {
+      if (!zendesk_configuration) {
+        return res.sendStatus(404);
+      }
+      zendesk_configuration.destroy()
+        .then(function() {
+          return res.sendStatus(204);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+exports.addConfigurationField = function(req, res, next) {
+  // console.log(req.params);
+  ZendeskConfiguration
+    .findById(req.params.id)
+    .then(function(configuration) {
+      if (!configuration) {
+        return res.sendStatus(500);
+      }
+      ZendeskField
+        .create(req.body)
+        .then(function(field) {
+          switch (req.params.type) {
+            case 'subject':
+              configuration.addSubject(field)
+                .then(function() {
+                  return res.status(200).send(field);
+                })
+                .catch(function(err) {
+                  return handleError(res, err);
+                });
+              break;
+            case 'description':
+              configuration.addDescription(field)
+                .then(function() {
+                  return res.status(200).send(field);
+                })
+                .catch(function(err) {
+                  return handleError(res, err);
+                });
+              break;
+            case 'field':
+              configuration.addField(field)
+                .then(function() {
+                  return res.status(200).send(field);
+                })
+                .catch(function(err) {
+                  return handleError(res, err);
+                });
+              break;
+          }
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+          // return next(err);
+        });
+    })
+    .catch(function(err) {
+      // return next(err);
+      return handleError(res, err);
+    });
+};
+
+exports.addConfigurationTags = function(req, res, next) {
+  ZendeskConfiguration
+    .findById(req.params.id)
+    .then(handleEntityNotFound(res))
+    .then(function(configuration) {
+      return configuration.setTags(req.body);
+    })
+    .then(function(data) {
+      return res.sendStatus(200);
+    })
+    .catch(function(err) {
+      console.error(err);
+      return handleError(res, err);
+    });
+};
+
+function handleEntityNotFound(res) {
+  return function(entity) {
+    if (!entity) {
+      res.status(404).end();
+      return null;
+    }
+    return entity;
+  };
+}
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index 0aa8993..d9a56f1 100644 (file)
@@ -1 +1,24 @@
-var _0xaacf=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x5A\x65\x6E\x64\x65\x73\x6B\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x7A\x65\x6E\x64\x65\x73\x6B\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x7A\x65\x6E\x64\x65\x73\x6B\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x3A\x72\x65\x6D\x6F\x76\x65"];_0xaacf[0];var ZendeskConfiguration=require(_0xaacf[2])[_0xaacf[1]];exports[_0xaacf[3]]=function(_0x88dax2){ZendeskConfiguration[_0xaacf[4]](function(_0x88dax3){onSave(_0x88dax2,_0x88dax3)});ZendeskConfiguration[_0xaacf[5]](function(_0x88dax3){onRemove(_0x88dax2,_0x88dax3)})};function onSave(_0x88dax2,_0x88dax3,_0x88dax5){_0x88dax2[_0xaacf[7]](_0xaacf[6],_0x88dax3)}function onRemove(_0x88dax2,_0x88dax3,_0x88dax5){_0x88dax2[_0xaacf[7]](_0xaacf[8],_0x88dax3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var ZendeskConfiguration = require('../../models').ZendeskConfiguration;
+
+exports.register = function(socket) {
+  ZendeskConfiguration.afterCreate(function (doc) {
+    onSave(socket, doc);
+  });
+  ZendeskConfiguration.afterDestroy(function (doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('zendesk_configuration:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('zendesk_configuration:remove', doc);
+}
index 1cb418e..3589f5d 100644 (file)
@@ -1 +1,20 @@
-var _0x502e=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x73\x68\x6F\x75\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x70\x70","\x73\x75\x70\x65\x72\x74\x65\x73\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x7A\x65\x6E\x64\x65\x73\x6B\x2F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x70\x6F\x6E\x64\x20\x77\x69\x74\x68\x20\x4A\x53\x4F\x4E\x20\x61\x72\x72\x61\x79","\x69\x6E\x73\x74\x61\x6E\x63\x65\x6F\x66","\x62\x65","\x62\x6F\x64\x79","\x65\x6E\x64","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x65\x78\x70\x65\x63\x74","\x2F\x61\x70\x69\x2F\x7A\x65\x6E\x64\x65\x73\x6B\x2F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73","\x67\x65\x74"];_0x502e[0];var should=require(_0x502e[1]);var app=require(_0x502e[2]);var request=require(_0x502e[3]);describe(_0x502e[4],function(){it(_0x502e[5],function(_0xcf64x4){request(app)[_0x502e[13]](_0x502e[12])[_0x502e[11]](200)[_0x502e[11]](_0x502e[10],/json/)[_0x502e[9]](function(_0xcf64x5,_0xcf64x6){if(_0xcf64x5){return _0xcf64x4(_0xcf64x5)};_0xcf64x6[_0x502e[8]][_0x502e[1]][_0x502e[7]][_0x502e[6]](Array);_0xcf64x4()})})})
\ No newline at end of file
+'use strict';
+
+var should = require('should');
+var app = require('../../app');
+var request = require('supertest');
+
+describe('GET /api/zendesk/configurations', function() {
+
+  it('should respond with JSON array', function(done) {
+    request(app)
+      .get('/api/zendesk/configurations')
+      .expect(200)
+      .expect('Content-Type', /json/)
+      .end(function(err, res) {
+        if (err) return done(err);
+        res.body.should.be.instanceof(Array);
+        done();
+      });
+  });
+});
\ No newline at end of file
index e27e759..76f5c48 100644 (file)
@@ -1 +1,15 @@
-var _0xd788=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x7A\x65\x6E\x64\x65\x73\x6B\x5F\x66\x69\x65\x6C\x64\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0xd788[0];var express=require(_0xd788[1]);var controller=require(_0xd788[2]);var router=express.Router();router[_0xd788[5]](_0xd788[3],controller[_0xd788[4]]);router[_0xd788[5]](_0xd788[6],controller[_0xd788[7]]);router[_0xd788[9]](_0xd788[3],controller[_0xd788[8]]);router[_0xd788[11]](_0xd788[6],controller[_0xd788[10]]);router[_0xd788[12]](_0xd788[6],controller[_0xd788[10]]);router[_0xd788[14]](_0xd788[6],controller[_0xd788[13]]);module[_0xd788[15]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var controller = require('./zendesk_field.controller');
+
+var router = express.Router();
+
+router.get('/', controller.index);
+router.get('/:id', controller.show);
+router.post('/', controller.create);
+router.put('/:id', controller.update);
+router.patch('/:id', controller.update);
+router.delete('/:id', controller.destroy);
+
+module.exports = router;
index 7bcd9bf..48d0c38 100644 (file)
@@ -1 +1,93 @@
-var _0x41ec=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x5A\x65\x6E\x64\x65\x73\x6B\x46\x69\x65\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79"];_0x41ec[0];var _=require(_0x41ec[1]);var ZendeskField=require(_0x41ec[3])[_0x41ec[2]];exports[_0x41ec[4]]=function(_0x120cx3,_0x120cx4){ZendeskField[_0x41ec[9]]()[_0x41ec[8]](function(_0x120cx6){return _0x120cx4[_0x41ec[7]](200)[_0x41ec[6]](_0x120cx6)})[_0x41ec[5]](function(_0x120cx5){return handleError(_0x120cx4,_0x120cx5)})};exports[_0x41ec[10]]=function(_0x120cx3,_0x120cx4){ZendeskField[_0x41ec[14]](_0x120cx3[_0x41ec[13]][_0x41ec[12]])[_0x41ec[8]](function(_0x120cx7){if(!_0x120cx7){return _0x120cx4[_0x41ec[11]](404)};return _0x120cx4[_0x41ec[6]](_0x120cx7)})[_0x41ec[5]](function(_0x120cx5){return handleError(_0x120cx4,_0x120cx5)})};exports[_0x41ec[15]]=function(_0x120cx3,_0x120cx4){ZendeskField[_0x41ec[15]](_0x120cx3[_0x41ec[16]])[_0x41ec[8]](function(_0x120cx7){return _0x120cx4[_0x41ec[7]](201)[_0x41ec[6]](_0x120cx7)})[_0x41ec[5]](function(_0x120cx5){return handleError(_0x120cx4,_0x120cx5)})};exports[_0x41ec[17]]=function(_0x120cx3,_0x120cx4){if(_0x120cx3[_0x41ec[16]][_0x41ec[12]]){delete _0x120cx3[_0x41ec[16]][_0x41ec[12]]};ZendeskField[_0x41ec[14]](_0x120cx3[_0x41ec[13]][_0x41ec[12]])[_0x41ec[8]](function(_0x120cx7){if(!_0x120cx7){return _0x120cx4[_0x41ec[11]](404)};var _0x120cx8=_[_0x41ec[18]](_0x120cx7,_0x120cx3[_0x41ec[16]]);_0x120cx8[_0x41ec[19]]()[_0x41ec[8]](function(){return _0x120cx4[_0x41ec[7]](200)[_0x41ec[6]](_0x120cx7)})[_0x41ec[5]](function(_0x120cx5){return handleError(_0x120cx4,_0x120cx5)})})[_0x41ec[5]](function(_0x120cx5){return handleError(_0x120cx4,_0x120cx5)})};exports[_0x41ec[20]]=function(_0x120cx3,_0x120cx4){ZendeskField[_0x41ec[14]](_0x120cx3[_0x41ec[13]][_0x41ec[12]])[_0x41ec[8]](function(_0x120cx7){if(!_0x120cx7){return _0x120cx4[_0x41ec[11]](404)};_0x120cx7[_0x41ec[20]]()[_0x41ec[8]](function(){return _0x120cx4[_0x41ec[11]](204)})[_0x41ec[5]](function(_0x120cx5){return handleError(_0x120cx4,_0x120cx5)})})[_0x41ec[5]](function(_0x120cx5){return handleError(_0x120cx4,_0x120cx5)})};function handleError(_0x120cx4,_0x120cx5){return _0x120cx4[_0x41ec[7]](500)[_0x41ec[6]](_0x120cx5)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var ZendeskField = require('../../models').ZendeskField;
+
+// Get list of zendesk_fields
+exports.index = function(req, res) {
+  ZendeskField
+    .findAll()
+    .then(function(zendesk_fields) {
+      return res.status(200).send(zendesk_fields);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single zendesk_field
+exports.show = function(req, res) {
+  ZendeskField
+    .findById(req.params.id)
+    .then(function(zendesk_field) {
+      if (!zendesk_field) {
+        return res.sendStatus(404);
+      }
+      return res.send(zendesk_field);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new zendesk_field in the DB.
+exports.create = function(req, res) {
+  ZendeskField
+    .create(req.body)
+    .then(function(zendesk_field) {
+      return res.status(201).send(zendesk_field);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Updates an existing zendesk_field in the DB.
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  ZendeskField
+    .findById(req.params.id)
+    .then(function(zendesk_field) {
+      if (!zendesk_field) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(zendesk_field, req.body);
+      updated.save()
+        .then(function() {
+          return res.status(200).send(zendesk_field);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a zendesk_field from the DB.
+exports.destroy = function(req, res) {
+  ZendeskField
+    .findById(req.params.id)
+    .then(function(zendesk_field) {
+      if (!zendesk_field) {
+        return res.sendStatus(404);
+      }
+      zendesk_field.destroy()
+        .then(function() {
+          return res.sendStatus(204);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}
index 784cc09..8a5419b 100644 (file)
@@ -1 +1,24 @@
-var _0xea81=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x5A\x65\x6E\x64\x65\x73\x6B\x46\x69\x65\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x7A\x65\x6E\x64\x65\x73\x6B\x5F\x66\x69\x65\x6C\x64\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x7A\x65\x6E\x64\x65\x73\x6B\x5F\x66\x69\x65\x6C\x64\x3A\x72\x65\x6D\x6F\x76\x65"];_0xea81[0];var ZendeskField=require(_0xea81[2])[_0xea81[1]];exports[_0xea81[3]]=function(_0xe43ax2){ZendeskField[_0xea81[4]](function(_0xe43ax3){onSave(_0xe43ax2,_0xe43ax3)});ZendeskField[_0xea81[5]](function(_0xe43ax3){onRemove(_0xe43ax2,_0xe43ax3)})};function onSave(_0xe43ax2,_0xe43ax3,_0xe43ax5){_0xe43ax2[_0xea81[7]](_0xea81[6],_0xe43ax3)}function onRemove(_0xe43ax2,_0xe43ax3,_0xe43ax5){_0xe43ax2[_0xea81[7]](_0xea81[8],_0xe43ax3)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var ZendeskField = require('../../models').ZendeskField;
+
+exports.register = function(socket) {
+  ZendeskField.afterCreate(function(doc) {
+    onSave(socket, doc);
+  });
+  ZendeskField.afterDestroy(function(doc) {
+    onRemove(socket, doc);
+  });
+}
+
+function onSave(socket, doc, cb) {
+  socket.emit('zendesk_field:save', doc);
+}
+
+function onRemove(socket, doc, cb) {
+  socket.emit('zendesk_field:remove', doc);
+}
index 45a05ae..1527fe8 100644 (file)
@@ -1 +1,20 @@
-var _0xf2ff=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x73\x68\x6F\x75\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x70\x70","\x73\x75\x70\x65\x72\x74\x65\x73\x74","\x47\x45\x54\x20\x2F\x61\x70\x69\x2F\x7A\x65\x6E\x64\x65\x73\x6B\x2F\x66\x69\x65\x6C\x64\x73","\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x70\x6F\x6E\x64\x20\x77\x69\x74\x68\x20\x4A\x53\x4F\x4E\x20\x61\x72\x72\x61\x79","\x69\x6E\x73\x74\x61\x6E\x63\x65\x6F\x66","\x62\x65","\x62\x6F\x64\x79","\x65\x6E\x64","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x65\x78\x70\x65\x63\x74","\x2F\x61\x70\x69\x2F\x7A\x65\x6E\x64\x65\x73\x6B\x2F\x66\x69\x65\x6C\x64\x73","\x67\x65\x74"];_0xf2ff[0];var should=require(_0xf2ff[1]);var app=require(_0xf2ff[2]);var request=require(_0xf2ff[3]);describe(_0xf2ff[4],function(){it(_0xf2ff[5],function(_0xd26ax4){request(app)[_0xf2ff[13]](_0xf2ff[12])[_0xf2ff[11]](200)[_0xf2ff[11]](_0xf2ff[10],/json/)[_0xf2ff[9]](function(_0xd26ax5,_0xd26ax6){if(_0xd26ax5){return _0xd26ax4(_0xd26ax5)};_0xd26ax6[_0xf2ff[8]][_0xf2ff[1]][_0xf2ff[7]][_0xf2ff[6]](Array);_0xd26ax4()})})})
\ No newline at end of file
+'use strict';
+
+var should = require('should');
+var app = require('../../app');
+var request = require('supertest');
+
+describe('GET /api/zendesk/fields', function() {
+
+  it('should respond with JSON array', function(done) {
+    request(app)
+      .get('/api/zendesk/fields')
+      .expect(200)
+      .expect('Content-Type', /json/)
+      .end(function(err, res) {
+        if (err) return done(err);
+        res.body.should.be.instanceof(Array);
+        done();
+      });
+  });
+});
index c9acc5c..5b16a4a 100644 (file)
@@ -1 +1,112 @@
-var _0x9eb6=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x4E\x4F\x44\x45\x5F\x45\x4E\x56","\x65\x6E\x76","\x64\x65\x76\x65\x6C\x6F\x70\x6D\x65\x6E\x74","\x4E\x4F\x44\x45\x5F\x54\x4C\x53\x5F\x52\x45\x4A\x45\x43\x54\x5F\x55\x4E\x41\x55\x54\x48\x4F\x52\x49\x5A\x45\x44","\x75\x6E\x63\x61\x75\x67\x68\x74\x45\x78\x63\x65\x70\x74\x69\x6F\x6E","\x6F\x62\x6A\x65\x63\x74","\x6D\x65\x73\x73\x61\x67\x65","\x0A\x4D\x65\x73\x73\x61\x67\x65\x3A\x20","\x6C\x6F\x67","\x73\x74\x61\x63\x6B","\x0A\x53\x74\x61\x63\x6B\x74\x72\x61\x63\x65\x3A","\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D","\x64\x75\x6D\x70\x45\x72\x72\x6F\x72\x20\x3A\x3A\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x20\x69\x73\x20\x6E\x6F\x74\x20\x61\x6E\x20\x6F\x62\x6A\x65\x63\x74","\x6F\x6E","\x6F\x73","\x68\x74\x74\x70","\x75\x74\x69\x6C","\x63\x72\x79\x70\x74\x6F","\x43\x72\x6F\x6E\x4A\x6F\x62","\x63\x72\x6F\x6E","\x73\x68\x65\x6C\x6C\x6A\x73\x2F\x67\x6C\x6F\x62\x61\x6C","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x53\x65\x74\x74\x69\x6E\x67\x73","\x63\x72\x65\x61\x74\x65\x53\x65\x72\x76\x65\x72","\x70\x72\x6F\x64\x75\x63\x74\x69\x6F\x6E","\x2F\x73\x6F\x63\x6B\x65\x74\x2E\x69\x6F\x2D\x63\x6C\x69\x65\x6E\x74","\x73\x6F\x63\x6B\x65\x74\x2E\x69\x6F","\x70\x6F\x72\x74","\x61\x73\x74\x65\x72\x69\x73\x6B","\x68\x6F\x73\x74","\x75\x73\x65\x72\x6E\x61\x6D\x65","\x70\x61\x73\x73\x77\x6F\x72\x64","\x61\x73\x74\x65\x72\x69\x73\x6B\x2D\x6D\x61\x6E\x61\x67\x65\x72","\x6B\x65\x65\x70\x43\x6F\x6E\x6E\x65\x63\x74\x65\x64","\x6B\x75\x65","\x6C\x69\x73\x74\x65\x6E","\x61\x70\x70","\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x72\x6F\x75\x74\x65\x73","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x68\x69\x73\x74\x6F\x72\x79","\x74\x68\x65\x6E","\x73\x79\x6E\x63","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65\x5F\x68\x69\x73\x74\x6F\x72\x79","\x73\x65\x65\x64\x44\x42","\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x73\x65\x65\x64","\x73\x65\x65\x64\x50\x44\x42","\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x73\x65\x65\x64\x70","\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x73\x6F\x63\x6B\x65\x74\x69\x6F","\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x72\x6F\x75\x74\x69\x6E\x67\x2F\x6D\x61\x69\x6C","\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x72\x6F\x75\x74\x69\x6E\x67\x2F\x63\x68\x61\x74","\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x61\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x73\x2F\x6D\x61\x69\x6C","\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x61\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x73\x2F\x66\x61\x78","\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x74\x72\x69\x67\x67\x65\x72\x73","\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x69\x6D\x61\x70","\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x73\x6D\x74\x70","\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x74\x6F\x6F\x6C\x73","\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x61\x6D\x69","\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x61\x67\x69","\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65","\x69\x70","\x45\x78\x70\x72\x65\x73\x73\x20\x73\x65\x72\x76\x65\x72\x20\x6C\x69\x73\x74\x65\x6E\x69\x6E\x67\x20\x6F\x6E\x20\x25\x64\x2C\x20\x69\x6E\x20\x25\x73\x20\x6D\x6F\x64\x65","\x67\x65\x74","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x9eb6[0];process[_0x9eb6[2]][_0x9eb6[1]]=process[_0x9eb6[2]][_0x9eb6[1]]||_0x9eb6[3];process[_0x9eb6[2]][_0x9eb6[4]]=0;process[_0x9eb6[14]](_0x9eb6[5],function(_0xa703x1){if( typeof _0xa703x1===_0x9eb6[6]){if(_0xa703x1[_0x9eb6[7]]){console[_0x9eb6[9]](_0x9eb6[8]+_0xa703x1[_0x9eb6[7]])};if(_0xa703x1[_0x9eb6[10]]){console[_0x9eb6[9]](_0x9eb6[11]);console[_0x9eb6[9]](_0x9eb6[12]);console[_0x9eb6[9]](_0xa703x1[_0x9eb6[10]])}}else {console[_0x9eb6[9]](_0x9eb6[13])}});var os=require(_0x9eb6[15]);var http=require(_0x9eb6[16]);var util=require(_0x9eb6[17]);var crypto=require(_0x9eb6[18]);var cronjob=require(_0x9eb6[20])[_0x9eb6[19]];var shelljs=require(_0x9eb6[21]);var express=require(_0x9eb6[22]);var models=require(_0x9eb6[23]);var config=require(_0x9eb6[24]);var Settings=models[_0x9eb6[25]];var app=express();var server=require(_0x9eb6[16])[_0x9eb6[26]](app);var io=require(_0x9eb6[29])(server,{serveClient:(config[_0x9eb6[2]]===_0x9eb6[27])?false:true,path:_0x9eb6[28]});var ami=require(_0x9eb6[35])(config[_0x9eb6[31]][_0x9eb6[30]],config[_0x9eb6[31]][_0x9eb6[32]],config[_0x9eb6[31]][_0x9eb6[33]],config[_0x9eb6[31]][_0x9eb6[34]],true);ami[_0x9eb6[36]]();var kue=require(_0x9eb6[37]);kue[_0x9eb6[39]][_0x9eb6[38]](3001);var _setting;var _license;require(_0x9eb6[40])(app);require(_0x9eb6[41])(app);models[_0x9eb6[67]][_0x9eb6[46]]()[_0x9eb6[45]](function(){require(_0x9eb6[41])(app);if(config[_0x9eb6[48]]){require(_0x9eb6[49])};if(config[_0x9eb6[50]]){require(_0x9eb6[51])};require(_0x9eb6[52])(io);require(_0x9eb6[53])();require(_0x9eb6[54])();require(_0x9eb6[55])();require(_0x9eb6[56])();require(_0x9eb6[57])(ami);require(_0x9eb6[58])();require(_0x9eb6[59])();require(_0x9eb6[60])();require(_0x9eb6[61])(ami);require(_0x9eb6[62])();require(_0x9eb6[63])();server[_0x9eb6[38]](config[_0x9eb6[30]],config[_0x9eb6[64]],function(){console[_0x9eb6[9]](_0x9eb6[65],config[_0x9eb6[30]],app[_0x9eb6[66]](_0x9eb6[2]))})})[_0x9eb6[45]](function(){return models[_0x9eb6[47]][_0x9eb6[46]]()})[_0x9eb6[45]](function(){require(_0x9eb6[44])(cronjob)})[_0x9eb6[43]](function(_0xa703x1){console[_0x9eb6[42]](_0xa703x1)});exports=module[_0x9eb6[68]]=app
\ No newline at end of file
+/**
+ * Main application file
+ */
+
+'use strict';
+
+// Set default node environment to development
+process.env.NODE_ENV = process.env.NODE_ENV || 'development';
+process.env.NODE_TLS_REJECT_UNAUTHORIZED = 0;
+
+process.on('uncaughtException', function(err) {
+  if (typeof err === 'object') {
+    if (err.message) {
+      console.log('\nMessage: ' + err.message)
+    }
+    if (err.stack) {
+      console.log('\nStacktrace:')
+      console.log('====================')
+      console.log(err.stack);
+    }
+  } else {
+    console.log('dumpError :: argument is not an object');
+  }
+});
+
+var os = require('os');
+var http = require('http');
+var util = require('util');
+var crypto = require('crypto');
+var cronjob = require('cron').CronJob;
+var shelljs = require('shelljs/global');
+
+var express = require('express');
+var models = require('./models');
+var config = require('./config/environment');
+
+var Settings = models.Settings;
+
+// Setup server
+var app = express();
+var server = require('http').createServer(app);
+var io = require('socket.io')(server, {
+  serveClient: (config.env === 'production') ? false : true,
+  path: '/socket.io-client'
+});
+
+var ami = require('asterisk-manager')(config.asterisk.port,
+  config.asterisk.host,
+  config.asterisk.username,
+  config.asterisk.password,
+  true);
+ami.keepConnected();
+
+// Initialization Kue
+var kue = require('kue');
+kue.app.listen(3001);
+
+var _setting;
+var _license;
+
+require('./config/express')(app);
+require('./routes')(app);
+
+models
+  .sequelize
+  .sync()
+  .then(function() {
+
+    require('./routes')(app);
+    // Populate DB Develop with sample data
+    if (config.seedDB) {
+      require('./config/seed');
+    }
+    // Populate DB Production with sample data
+    if (config.seedPDB) {
+      require('./config/seedp');
+    }
+
+    // Start Cally Square Projects
+    require('./config/socketio')(io);
+    require('./config/routing/mail')();
+    require('./config/routing/chat')();
+    require('./config/automations/mail')();
+    require('./config/automations/fax')();
+    require('./config/triggers')(ami);
+    require('./config/imap')();
+    require('./config/smtp')();
+    require('./config/tools')();
+    require('./config/ami')(ami);
+    require('./config/agi')();
+    require('./config/license')();
+
+    // Start server
+    server.listen(config.port, config.ip, function() {
+      console.log('Express server listening on %d, in %s mode', config.port, app.get('env'));
+    });
+  })
+  .then(function() {
+    // Connect to database history
+    return models
+      .sequelize_history
+      .sync();
+  })
+  .then(function() {
+    require('./config/history')(cronjob);
+  })
+  .catch(function(err) {
+    console.error(err);
+  });
+
+// Expose app
+exports = module.exports = app;
index 28c7e36..f4e7fbe 100644 (file)
@@ -8,6 +8,7 @@
     "cwd": "/var/opt/motion/server",
     "error_file": "/var/log/xcally/motion-err.log",
     "out_file": "/var/log/xcally/motion-out.log",
-    "log_date_format": "YYYY-MM-DD HH:mm Z"
+    "log_date_format": "YYYY-MM-DD HH:mm Z",
+    "watch": false
   }]
 }
index 1db738d..a606070 100644 (file)
@@ -1 +1,95 @@
-var _0x2b3b=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x70\x61\x73\x73\x70\x6F\x72\x74","\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x6A\x73\x6F\x6E\x77\x65\x62\x74\x6F\x6B\x65\x6E","\x65\x78\x70\x72\x65\x73\x73\x2D\x6A\x77\x74","\x63\x6F\x6D\x70\x6F\x73\x61\x62\x6C\x65\x2D\x6D\x69\x64\x64\x6C\x65\x77\x61\x72\x65","\x55\x73\x65\x72","\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x53\x65\x72\x76\x69\x63\x65","\x73\x65\x63\x72\x65\x74","\x73\x65\x73\x73\x69\x6F\x6E","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x75\x73\x65\x72","\x74\x68\x65\x6E","\x69\x64","\x66\x69\x6E\x64\x42\x79\x49\x64","\x75\x73\x65","\x71\x75\x65\x72\x79","\x61\x63\x63\x65\x73\x73\x5F\x74\x6F\x6B\x65\x6E","\x68\x61\x73\x4F\x77\x6E\x50\x72\x6F\x70\x65\x72\x74\x79","\x61\x75\x74\x68\x6F\x72\x69\x7A\x61\x74\x69\x6F\x6E","\x68\x65\x61\x64\x65\x72\x73","\x42\x65\x61\x72\x65\x72\x20","\x52\x65\x71\x75\x69\x72\x65\x64\x20\x72\x6F\x6C\x65\x20\x6E\x65\x65\x64\x73\x20\x74\x6F\x20\x62\x65\x20\x73\x65\x74","\x72\x6F\x6C\x65","\x69\x6E\x64\x65\x78\x4F\x66","\x75\x73\x65\x72\x52\x6F\x6C\x65\x73","\x31\x64","\x73\x69\x67\x6E","\x53\x6F\x6D\x65\x74\x68\x69\x6E\x67\x20\x77\x65\x6E\x74\x20\x77\x72\x6F\x6E\x67\x2C\x20\x70\x6C\x65\x61\x73\x65\x20\x74\x72\x79\x20\x61\x67\x61\x69\x6E\x2E","\x6A\x73\x6F\x6E","\x74\x6F\x6B\x65\x6E","\x73\x74\x72\x69\x6E\x67\x69\x66\x79","\x63\x6F\x6F\x6B\x69\x65","\x2F","\x72\x65\x64\x69\x72\x65\x63\x74","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x68\x61\x73\x52\x6F\x6C\x65","\x73\x69\x67\x6E\x54\x6F\x6B\x65\x6E","\x73\x65\x74\x54\x6F\x6B\x65\x6E\x43\x6F\x6F\x6B\x69\x65"];_0x2b3b[0];var passport=require(_0x2b3b[1]);var config=require(_0x2b3b[2]);var jwt=require(_0x2b3b[3]);var expressJwt=require(_0x2b3b[4]);var compose=require(_0x2b3b[5]);var User=require(_0x2b3b[7])[_0x2b3b[6]];var Service=require(_0x2b3b[7])[_0x2b3b[8]];var validateJwt=expressJwt({secret:config[_0x2b3b[10]][_0x2b3b[9]]});function isAuthenticated(){return compose()[_0x2b3b[17]](function(_0x523fxa,_0x523fxb,_0x523fxc){if(_0x523fxa[_0x2b3b[18]]&&_0x523fxa[_0x2b3b[18]][_0x2b3b[20]](_0x2b3b[19])){_0x523fxa[_0x2b3b[22]][_0x2b3b[21]]=_0x2b3b[23]+_0x523fxa[_0x2b3b[18]][_0x2b3b[19]]};validateJwt(_0x523fxa,_0x523fxb,_0x523fxc)})[_0x2b3b[17]](function(_0x523fxa,_0x523fxb,_0x523fxc){User[_0x2b3b[16]](_0x523fxa[_0x2b3b[13]][_0x2b3b[15]],{include:[{model:Service}]})[_0x2b3b[14]](function(_0x523fxe){if(!_0x523fxe){return _0x523fxb[_0x2b3b[12]](401)};_0x523fxa[_0x2b3b[13]]=_0x523fxe;return _0x523fxc()})[_0x2b3b[11]](function(_0x523fxd){return _0x523fxc(_0x523fxd)})})}function hasRole(_0x523fx10){if(!_0x523fx10){throw  new Error(_0x2b3b[24])};return compose()[_0x2b3b[17]](isAuthenticated())[_0x2b3b[17]](function _0x523fx11(_0x523fxa,_0x523fxb,_0x523fxc){if(config[_0x2b3b[27]][_0x2b3b[26]](_0x523fxa[_0x2b3b[13]][_0x2b3b[25]])>=config[_0x2b3b[27]][_0x2b3b[26]](_0x523fx10)){return _0x523fxc()}else {return _0x523fxb[_0x2b3b[12]](403)}})}function signToken(_0x523fx13,_0x523fx14,_0x523fx15){var _0x523fx16=60*24*365*5;if(!_0x523fx15){_0x523fx16=_0x2b3b[28]};return jwt[_0x2b3b[29]]({id:_0x523fx13},config[_0x2b3b[10]][_0x2b3b[9]],{expiresIn:_0x523fx16})}function setTokenCookie(_0x523fxa,_0x523fxb){if(!_0x523fxa[_0x2b3b[13]]){return _0x523fxb[_0x2b3b[31]](404,{message:_0x2b3b[30]})};var _0x523fx18=signToken(_0x523fxa[_0x2b3b[13]][_0x2b3b[15]],_0x523fxa[_0x2b3b[13]][_0x2b3b[25]]);_0x523fxb[_0x2b3b[34]](_0x2b3b[32],JSON[_0x2b3b[33]](_0x523fx18));_0x523fxb[_0x2b3b[36]](_0x2b3b[35])}exports[_0x2b3b[37]]=isAuthenticated;exports[_0x2b3b[38]]=hasRole;exports[_0x2b3b[39]]=signToken;exports[_0x2b3b[40]]=setTokenCookie
\ No newline at end of file
+'use strict';
+
+//var mongoose = require('mongoose');
+var passport = require('passport');
+var config = require('../config/environment');
+var jwt = require('jsonwebtoken');
+var expressJwt = require('express-jwt');
+var compose = require('composable-middleware');
+// var User = require('../api/user/user.model');
+var User = require('../models').User;
+var Service = require('../models').Service;
+var validateJwt = expressJwt({
+  secret: config.session.secret
+});
+
+/**
+ * Attaches the user object to the request if authenticated
+ * Otherwise returns 403
+ */
+function isAuthenticated() {
+  return compose()
+    // Validate jwt
+    .use(function(req, res, next) {
+      // allow access_token to be passed through query parameter as well
+      if (req.query && req.query.hasOwnProperty('access_token')) {
+        req.headers.authorization = 'Bearer ' + req.query.access_token;
+      }
+      validateJwt(req, res, next);
+    })
+    // Attach user to request
+    .use(function(req, res, next) {
+      User
+        .findById(req.user.id, {
+          include: [{
+            model: Service
+          }]
+        })
+        .then(function(user) {
+          if (!user) return res.send(401);
+          req.user = user;
+          return next();
+        })
+        .catch(function(err) {
+          return next(err);
+        });
+    });
+}
+
+/**
+ * Checks if the user role meets the minimum requirements of the route
+ */
+function hasRole(roleRequired) {
+  if (!roleRequired) throw new Error('Required role needs to be set');
+
+  return compose()
+    .use(isAuthenticated())
+    .use(function meetsRequirements(req, res, next) {
+      if (config.userRoles.indexOf(req.user.role) >= config.userRoles.indexOf(roleRequired)) {
+        return next();
+      } else {
+        return res.send(403);
+      }
+    });
+}
+
+/**
+ * Returns a jwt token signed by the app secret
+ */
+function signToken(id, role, remember) {
+  var expiresIn = 60 * 24 * 365 * 5; //If remember, it expires in 5 years
+  if (!remember)
+    expiresIn = "1d"; //Expire in one day
+  return jwt.sign({
+    id: id
+  }, config.session.secret, {
+    expiresIn: expiresIn
+  });
+}
+
+/**
+ * Set token cookie directly for oAuth strategies
+ */
+function setTokenCookie(req, res) {
+  if (!req.user) return res.json(404, {
+    message: 'Something went wrong, please try again.'
+  });
+  var token = signToken(req.user.id, req.user.role);
+  res.cookie('token', JSON.stringify(token));
+  res.redirect('/');
+}
+
+exports.isAuthenticated = isAuthenticated;
+exports.hasRole = hasRole;
+exports.signToken = signToken;
+exports.setTokenCookie = setTokenCookie;
index cd9fbb7..4a6f878 100644 (file)
@@ -1 +1,21 @@
-var _0x39b0=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x70\x61\x73\x73\x70\x6F\x72\x74","\x2E\x2E\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F\x63\x61\x6C\x6C\x62\x61\x63\x6B","\x66\x61\x63\x65\x62\x6F\x6F\x6B","\x2F\x73\x69\x67\x6E\x75\x70","\x61\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65","\x73\x65\x74\x54\x6F\x6B\x65\x6E\x43\x6F\x6F\x6B\x69\x65","\x67\x65\x74","\x2F","\x65\x6D\x61\x69\x6C","\x75\x73\x65\x72\x5F\x61\x62\x6F\x75\x74\x5F\x6D\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x39b0[0];var express=require(_0x39b0[1]);var passport=require(_0x39b0[2]);var auth=require(_0x39b0[3]);var router=express.Router();router[_0x39b0[9]](_0x39b0[10],passport[_0x39b0[7]](_0x39b0[5],{scope:[_0x39b0[11],_0x39b0[12]],failureRedirect:_0x39b0[6],session:false}))[_0x39b0[9]](_0x39b0[4],passport[_0x39b0[7]](_0x39b0[5],{failureRedirect:_0x39b0[6],session:false}),auth[_0x39b0[8]]);module[_0x39b0[13]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var passport = require('passport');
+var auth = require('../auth.service');
+
+var router = express.Router();
+
+router
+  .get('/', passport.authenticate('facebook', {
+    scope: ['email', 'user_about_me'],
+    failureRedirect: '/signup',
+    session: false
+  }))
+
+  .get('/callback', passport.authenticate('facebook', {
+    failureRedirect: '/signup',
+    session: false
+  }), auth.setTokenCookie);
+
+module.exports = router;
\ No newline at end of file
index 4708837..90ae489 100644 (file)
@@ -1 +1,37 @@
-var _0x2b6a=["\x70\x61\x73\x73\x70\x6F\x72\x74","\x53\x74\x72\x61\x74\x65\x67\x79","\x70\x61\x73\x73\x70\x6F\x72\x74\x2D\x66\x61\x63\x65\x62\x6F\x6F\x6B","\x73\x65\x74\x75\x70","\x63\x6C\x69\x65\x6E\x74\x49\x44","\x66\x61\x63\x65\x62\x6F\x6F\x6B","\x63\x6C\x69\x65\x6E\x74\x53\x65\x63\x72\x65\x74","\x63\x61\x6C\x6C\x62\x61\x63\x6B\x55\x52\x4C","\x69\x64","\x64\x69\x73\x70\x6C\x61\x79\x4E\x61\x6D\x65","\x76\x61\x6C\x75\x65","\x65\x6D\x61\x69\x6C\x73","\x75\x73\x65\x72","\x75\x73\x65\x72\x6E\x61\x6D\x65","\x5F\x6A\x73\x6F\x6E","\x73\x61\x76\x65","\x66\x69\x6E\x64\x4F\x6E\x65","\x75\x73\x65"];var passport=require(_0x2b6a[0]);var FacebookStrategy=require(_0x2b6a[2])[_0x2b6a[1]];exports[_0x2b6a[3]]=function(_0x551fx3,_0x551fx4){passport[_0x2b6a[17]]( new FacebookStrategy({clientID:_0x551fx4[_0x2b6a[5]][_0x2b6a[4]],clientSecret:_0x551fx4[_0x2b6a[5]][_0x2b6a[6]],callbackURL:_0x551fx4[_0x2b6a[5]][_0x2b6a[7]]},function(_0x551fx5,_0x551fx6,_0x551fx7,_0x551fx8){_0x551fx3[_0x2b6a[16]]({"\x66\x61\x63\x65\x62\x6F\x6F\x6B\x2E\x69\x64":_0x551fx7[_0x2b6a[8]]},function(_0x551fx9,_0x551fxa){if(_0x551fx9){return _0x551fx8(_0x551fx9)};if(!_0x551fxa){_0x551fxa= new _0x551fx3({name:_0x551fx7[_0x2b6a[9]],email:_0x551fx7[_0x2b6a[11]][0][_0x2b6a[10]],role:_0x2b6a[12],username:_0x551fx7[_0x2b6a[13]],provider:_0x2b6a[5],facebook:_0x551fx7[_0x2b6a[14]]});_0x551fxa[_0x2b6a[15]](function(_0x551fx9){if(_0x551fx9){_0x551fx8(_0x551fx9)};return _0x551fx8(_0x551fx9,_0x551fxa)})}else {return _0x551fx8(_0x551fx9,_0x551fxa)}})}))}
\ No newline at end of file
+var passport = require('passport');
+var FacebookStrategy = require('passport-facebook').Strategy;
+
+exports.setup = function (User, config) {
+  passport.use(new FacebookStrategy({
+      clientID: config.facebook.clientID,
+      clientSecret: config.facebook.clientSecret,
+      callbackURL: config.facebook.callbackURL
+    },
+    function(accessToken, refreshToken, profile, done) {
+      User.findOne({
+        'facebook.id': profile.id
+      },
+      function(err, user) {
+        if (err) {
+          return done(err);
+        }
+        if (!user) {
+          user = new User({
+            name: profile.displayName,
+            email: profile.emails[0].value,
+            role: 'user',
+            username: profile.username,
+            provider: 'facebook',
+            facebook: profile._json
+          });
+          user.save(function(err) {
+            if (err) done(err);
+            return done(err, user);
+          });
+        } else {
+          return done(err, user);
+        }
+      })
+    }
+  ));
+};
\ No newline at end of file
index 760f642..9b1ce39 100644 (file)
@@ -1 +1,24 @@
-var _0x89bc=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x70\x61\x73\x73\x70\x6F\x72\x74","\x2E\x2E\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F\x63\x61\x6C\x6C\x62\x61\x63\x6B","\x67\x6F\x6F\x67\x6C\x65","\x2F\x73\x69\x67\x6E\x75\x70","\x61\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65","\x73\x65\x74\x54\x6F\x6B\x65\x6E\x43\x6F\x6F\x6B\x69\x65","\x67\x65\x74","\x2F","\x68\x74\x74\x70\x73\x3A\x2F\x2F\x77\x77\x77\x2E\x67\x6F\x6F\x67\x6C\x65\x61\x70\x69\x73\x2E\x63\x6F\x6D\x2F\x61\x75\x74\x68\x2F\x75\x73\x65\x72\x69\x6E\x66\x6F\x2E\x70\x72\x6F\x66\x69\x6C\x65","\x68\x74\x74\x70\x73\x3A\x2F\x2F\x77\x77\x77\x2E\x67\x6F\x6F\x67\x6C\x65\x61\x70\x69\x73\x2E\x63\x6F\x6D\x2F\x61\x75\x74\x68\x2F\x75\x73\x65\x72\x69\x6E\x66\x6F\x2E\x65\x6D\x61\x69\x6C","\x65\x78\x70\x6F\x72\x74\x73"];_0x89bc[0];var express=require(_0x89bc[1]);var passport=require(_0x89bc[2]);var auth=require(_0x89bc[3]);var router=express.Router();router[_0x89bc[9]](_0x89bc[10],passport[_0x89bc[7]](_0x89bc[5],{failureRedirect:_0x89bc[6],scope:[_0x89bc[11],_0x89bc[12]],session:false}))[_0x89bc[9]](_0x89bc[4],passport[_0x89bc[7]](_0x89bc[5],{failureRedirect:_0x89bc[6],session:false}),auth[_0x89bc[8]]);module[_0x89bc[13]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var passport = require('passport');
+var auth = require('../auth.service');
+
+var router = express.Router();
+
+router
+  .get('/', passport.authenticate('google', {
+    failureRedirect: '/signup',
+    scope: [
+      'https://www.googleapis.com/auth/userinfo.profile',
+      'https://www.googleapis.com/auth/userinfo.email'
+    ],
+    session: false
+  }))
+
+  .get('/callback', passport.authenticate('google', {
+    failureRedirect: '/signup',
+    session: false
+  }), auth.setTokenCookie);
+
+module.exports = router;
\ No newline at end of file
index 0ec5987..d304e8a 100644 (file)
@@ -1 +1,33 @@
-var _0x3a72=["\x70\x61\x73\x73\x70\x6F\x72\x74","\x4F\x41\x75\x74\x68\x32\x53\x74\x72\x61\x74\x65\x67\x79","\x70\x61\x73\x73\x70\x6F\x72\x74\x2D\x67\x6F\x6F\x67\x6C\x65\x2D\x6F\x61\x75\x74\x68","\x73\x65\x74\x75\x70","\x63\x6C\x69\x65\x6E\x74\x49\x44","\x67\x6F\x6F\x67\x6C\x65","\x63\x6C\x69\x65\x6E\x74\x53\x65\x63\x72\x65\x74","\x63\x61\x6C\x6C\x62\x61\x63\x6B\x55\x52\x4C","\x69\x64","\x64\x69\x73\x70\x6C\x61\x79\x4E\x61\x6D\x65","\x76\x61\x6C\x75\x65","\x65\x6D\x61\x69\x6C\x73","\x75\x73\x65\x72","\x75\x73\x65\x72\x6E\x61\x6D\x65","\x5F\x6A\x73\x6F\x6E","\x73\x61\x76\x65","\x66\x69\x6E\x64\x4F\x6E\x65","\x75\x73\x65"];var passport=require(_0x3a72[0]);var GoogleStrategy=require(_0x3a72[2])[_0x3a72[1]];exports[_0x3a72[3]]=function(_0x1f99x3,_0x1f99x4){passport[_0x3a72[17]]( new GoogleStrategy({clientID:_0x1f99x4[_0x3a72[5]][_0x3a72[4]],clientSecret:_0x1f99x4[_0x3a72[5]][_0x3a72[6]],callbackURL:_0x1f99x4[_0x3a72[5]][_0x3a72[7]]},function(_0x1f99x5,_0x1f99x6,_0x1f99x7,_0x1f99x8){_0x1f99x3[_0x3a72[16]]({"\x67\x6F\x6F\x67\x6C\x65\x2E\x69\x64":_0x1f99x7[_0x3a72[8]]},function(_0x1f99x9,_0x1f99xa){if(!_0x1f99xa){_0x1f99xa= new _0x1f99x3({name:_0x1f99x7[_0x3a72[9]],email:_0x1f99x7[_0x3a72[11]][0][_0x3a72[10]],role:_0x3a72[12],username:_0x1f99x7[_0x3a72[13]],provider:_0x3a72[5],google:_0x1f99x7[_0x3a72[14]]});_0x1f99xa[_0x3a72[15]](function(_0x1f99x9){if(_0x1f99x9){_0x1f99x8(_0x1f99x9)};return _0x1f99x8(_0x1f99x9,_0x1f99xa)})}else {return _0x1f99x8(_0x1f99x9,_0x1f99xa)}})}))}
\ No newline at end of file
+var passport = require('passport');
+var GoogleStrategy = require('passport-google-oauth').OAuth2Strategy;
+
+exports.setup = function (User, config) {
+  passport.use(new GoogleStrategy({
+      clientID: config.google.clientID,
+      clientSecret: config.google.clientSecret,
+      callbackURL: config.google.callbackURL
+    },
+    function(accessToken, refreshToken, profile, done) {
+      User.findOne({
+        'google.id': profile.id
+      }, function(err, user) {
+        if (!user) {
+          user = new User({
+            name: profile.displayName,
+            email: profile.emails[0].value,
+            role: 'user',
+            username: profile.username,
+            provider: 'google',
+            google: profile._json
+          });
+          user.save(function(err) {
+            if (err) done(err);
+            return done(err, user);
+          });
+        } else {
+          return done(err, user);
+        }
+      });
+    }
+  ));
+};
index 4a38c78..a034241 100644 (file)
@@ -1 +1,22 @@
-var _0xbf26=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x70\x61\x73\x73\x70\x6F\x72\x74","\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x55\x73\x65\x72","\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x75\x70","\x2E\x2F\x6C\x6F\x63\x61\x6C\x2F\x70\x61\x73\x73\x70\x6F\x72\x74","\x2E\x2F\x66\x61\x63\x65\x62\x6F\x6F\x6B\x2F\x70\x61\x73\x73\x70\x6F\x72\x74","\x2E\x2F\x67\x6F\x6F\x67\x6C\x65\x2F\x70\x61\x73\x73\x70\x6F\x72\x74","\x2E\x2F\x74\x77\x69\x74\x74\x65\x72\x2F\x70\x61\x73\x73\x70\x6F\x72\x74","\x2F\x6C\x6F\x63\x61\x6C","\x2E\x2F\x6C\x6F\x63\x61\x6C","\x75\x73\x65","\x2F\x66\x61\x63\x65\x62\x6F\x6F\x6B","\x2E\x2F\x66\x61\x63\x65\x62\x6F\x6F\x6B","\x2F\x74\x77\x69\x74\x74\x65\x72","\x2E\x2F\x74\x77\x69\x74\x74\x65\x72","\x2F\x67\x6F\x6F\x67\x6C\x65","\x2E\x2F\x67\x6F\x6F\x67\x6C\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0xbf26[0];var express=require(_0xbf26[1]);var passport=require(_0xbf26[2]);var config=require(_0xbf26[3]);var User=require(_0xbf26[5])[_0xbf26[4]];require(_0xbf26[7])[_0xbf26[6]](User,config);require(_0xbf26[8])[_0xbf26[6]](User,config);require(_0xbf26[9])[_0xbf26[6]](User,config);require(_0xbf26[10])[_0xbf26[6]](User,config);var router=express.Router();router[_0xbf26[13]](_0xbf26[11],require(_0xbf26[12]));router[_0xbf26[13]](_0xbf26[14],require(_0xbf26[15]));router[_0xbf26[13]](_0xbf26[16],require(_0xbf26[17]));router[_0xbf26[13]](_0xbf26[18],require(_0xbf26[19]));module[_0xbf26[20]]=router
\ No newline at end of file
+'use strict';
+
+var express   = require('express');
+var passport  = require('passport');
+var config    = require('../config/environment');
+var User      = require('../models').User;
+
+
+// Passport Configuration
+require('./local/passport').setup(User, config);
+require('./facebook/passport').setup(User, config);
+require('./google/passport').setup(User, config);
+require('./twitter/passport').setup(User, config);
+
+var router = express.Router();
+
+router.use('/local', require('./local'));
+router.use('/facebook', require('./facebook'));
+router.use('/twitter', require('./twitter'));
+router.use('/google', require('./google'));
+
+module.exports = router;
index 73c72f4..d60d5e0 100644 (file)
@@ -1 +1,63 @@
-var _0xce55=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x70\x61\x73\x73\x70\x6F\x72\x74","\x61\x73\x79\x6E\x63","\x2E\x2E\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x55\x73\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x41\x63\x74\x69\x6F\x6E","\x52\x65\x70\x6F\x72\x74\x4D\x65\x6D\x62\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x76\x6F\x69\x63\x65","\x63\x68\x61\x74","\x6D\x61\x69\x6C","\x66\x61\x78","\x2F","\x6C\x6F\x63\x61\x6C\x2D\x6C\x6F\x67\x69\x6E","\x6A\x73\x6F\x6E","\x73\x74\x61\x74\x75\x73","\x53\x6F\x6D\x65\x74\x68\x69\x6E\x67\x20\x77\x65\x6E\x74\x20\x77\x72\x6F\x6E\x67\x2C\x20\x70\x6C\x65\x61\x73\x65\x20\x74\x72\x79\x20\x61\x67\x61\x69\x6E\x2E","\x63\x61\x74\x63\x68","\x72\x6F\x6C\x65","\x69\x64","\x72\x65\x6D\x65\x6D\x62\x65\x72","\x62\x6F\x64\x79","\x73\x69\x67\x6E\x54\x6F\x6B\x65\x6E","\x74\x68\x65\x6E","\x6C\x6F\x67\x69\x6E","\x6E\x61\x6D\x65","\x63\x72\x65\x61\x74\x65","\x61\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65","\x70\x6F\x73\x74","\x2F\x6C\x6F\x67\x6F\x75\x74","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x6C\x6F\x67\x6F\x75\x74","\x72\x65\x64\x69\x72\x65\x63\x74","\x75\x73\x65\x72","\x67\x65\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xce55[0];var express=require(_0xce55[1]);var passport=require(_0xce55[2]);var async=require(_0xce55[3]);var auth=require(_0xce55[4]);var User=require(_0xce55[6])[_0xce55[5]];var Action=require(_0xce55[6])[_0xce55[7]];var ReportMember=require(_0xce55[6])[_0xce55[8]];var license=require(_0xce55[9]);var channels=[_0xce55[10],_0xce55[11],_0xce55[12],_0xce55[13]];var router=express.Router();router[_0xce55[30]](_0xce55[14],function(_0x1ddfxb,_0x1ddfxc,_0x1ddfxd){passport[_0xce55[29]](_0xce55[15],function(_0x1ddfxe,_0x1ddfxf,_0x1ddfx10){var _0x1ddfx11=_0x1ddfxe||_0x1ddfx10;if(_0x1ddfx11){return _0x1ddfxc[_0xce55[17]](401)[_0xce55[16]](_0x1ddfx11)};if(!_0x1ddfxf){return _0x1ddfxc[_0xce55[17]](404)[_0xce55[16]]({message:_0xce55[18]})};return Action[_0xce55[28]]({name:_0xce55[26],data1:_0x1ddfxf[_0xce55[21]],data2:_0x1ddfxf[_0xce55[27]],UserId:_0x1ddfxf[_0xce55[21]]})[_0xce55[25]](function(_0x1ddfx12){return _0x1ddfxc[_0xce55[16]]({role:_0x1ddfxf[_0xce55[20]],token:auth[_0xce55[24]](_0x1ddfxf[_0xce55[21]],_0x1ddfxf[_0xce55[20]],_0x1ddfxb[_0xce55[23]][_0xce55[22]]||false),userId:_0x1ddfxf[_0xce55[21]]})})[_0xce55[19]](function(_0x1ddfxe){return _0x1ddfxd(_0x1ddfxe)})})(_0x1ddfxb,_0x1ddfxc,_0x1ddfxd)});router[_0xce55[36]](_0xce55[31],auth[_0xce55[32]](),function(_0x1ddfxb,_0x1ddfxc,_0x1ddfxd){return Action[_0xce55[28]]({name:_0xce55[33],data1:_0x1ddfxb[_0xce55[35]][_0xce55[21]],data2:_0x1ddfxb[_0xce55[35]][_0xce55[27]],UserId:_0x1ddfxb[_0xce55[35]][_0xce55[21]]})[_0xce55[25]](function(){_0x1ddfxb[_0xce55[33]]();_0x1ddfxc[_0xce55[34]](_0xce55[14])})[_0xce55[19]](function(_0x1ddfxe){return _0x1ddfxd(_0x1ddfxe)})});module[_0xce55[37]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var passport = require('passport');
+var async = require('async');
+
+var auth = require('../auth.service');
+var User = require('../../models').User;
+var Action = require('../../models').Action;
+var ReportMember = require('../../models').ReportMember;
+var license = require('../../config/license/license.service');
+
+var channels = ['voice', 'chat', 'mail', 'fax'];
+var router = express.Router();
+
+router.post('/', function(req, res, next) {
+  passport.authenticate('local-login', function(err, user, info) {
+    var error = err || info;
+    if (error) return res.status(401).json(error);
+    if (!user) return res.status(404).json({
+      message: 'Something went wrong, please try again.'
+    });
+
+    return Action
+      .create({
+        name: 'login',
+        data1: user.id,
+        data2: user.name,
+        UserId: user.id
+      })
+      .then(function(action) {
+        return res.json({
+          role: user.role,
+          token: auth.signToken(user.id, user.role, req.body.remember || false),
+          userId: user.id
+        });
+      })
+      .catch(function(err) {
+        return next(err);
+      });
+
+  })(req, res, next)
+});
+
+router
+  .get('/logout', auth.isAuthenticated(), function(req, res, next) {
+    return Action
+      .create({
+        name: 'logout',
+        data1: req.user.id,
+        data2: req.user.name,
+        UserId: req.user.id
+      })
+      .then(function() {
+        req.logout();
+        res.redirect('/');
+      })
+      .catch(function(err) {
+        return next(err);
+      });
+  });
+
+module.exports = router;
index 7ad3607..bfb533d 100644 (file)
@@ -1 +1,51 @@
-var _0xeb9c=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x75\x74\x69\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x70\x69\x2F\x61\x6D\x69\x2F\x61\x6D\x69\x2E\x61\x6D\x69","\x6C\x6F\x67\x6F\x75\x74","\x51\x75\x65\x75\x65\x50\x61\x75\x73\x65","\x53\x49\x50\x2F\x25\x73","\x66\x6F\x72\x6D\x61\x74","\x64\x61\x74\x61","\x73\x74\x72\x69\x6E\x67\x69\x66\x79","\x55\x73\x65\x72\x49\x64","\x6C\x6F\x67","\x51\x75\x65\x75\x65\x52\x65\x6D\x6F\x76\x65","\x61\x63\x74\x69\x6F\x6E","\x6C\x6F\x67\x69\x6E","\x51\x75\x65\x75\x65\x41\x64\x64"];_0xeb9c[0];var util=require(_0xeb9c[1]);var amiController=require(_0xeb9c[2]);exports[_0xeb9c[3]]=function(_0x5a10x3,_0x5a10x4,_0x5a10x5,_0x5a10x6){var _0x5a10x7={action:_0xeb9c[4],queue:_0x5a10x5,interface:util[_0xeb9c[6]](_0xeb9c[5],_0x5a10x4),paused:false};_0x5a10x7[_0xeb9c[7]]=JSON[_0xeb9c[8]](_0x5a10x7);_0x5a10x7[_0xeb9c[9]]=_0x5a10x3;amiController[_0xeb9c[12]](_0x5a10x7,function(_0x5a10x8,_0x5a10x9){if(_0x5a10x8){console[_0xeb9c[10]](_0x5a10x8)};var _0x5a10x7={action:_0xeb9c[11],queue:_0x5a10x5,interface:util[_0xeb9c[6]](_0xeb9c[5],_0x5a10x4)};_0x5a10x7[_0xeb9c[7]]=JSON[_0xeb9c[8]](_0x5a10x7);_0x5a10x7[_0xeb9c[9]]=_0x5a10x3;amiController[_0xeb9c[12]](_0x5a10x7,_0x5a10x6)})};exports[_0xeb9c[13]]=function(_0x5a10x3,_0x5a10x4,_0x5a10x5,_0x5a10x6){var _0x5a10x7={action:_0xeb9c[14],queue:_0x5a10x5,interface:util[_0xeb9c[6]](_0xeb9c[5],_0x5a10x4),penalty:0,paused:false,membername:_0x5a10x4};_0x5a10x7[_0xeb9c[7]]=JSON[_0xeb9c[8]](_0x5a10x7);_0x5a10x7[_0xeb9c[9]]=_0x5a10x3;amiController[_0xeb9c[12]](_0x5a10x7,_0x5a10x6)}
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var util = require('util');
+var amiController = require('../../api/ami/ami.ami');
+
+exports.logout = function(userid, username, queuename, callback) {
+  var body = {
+    action: 'QueuePause',
+    queue: queuename,
+    interface: util.format('SIP/%s', username),
+    paused: false
+  };
+  body.data = JSON.stringify(body);
+  body.UserId = userid;
+
+  amiController.action(body, function(err, res) {
+    if (err) {
+      console.log(err);
+    }
+    var body = {
+      action: 'QueueRemove',
+      queue: queuename,
+      interface: util.format('SIP/%s', username)
+    };
+    body.data = JSON.stringify(body);
+    body.UserId = userid;
+
+    amiController.action(body, callback);
+  });
+}
+
+exports.login = function(userid, username, queuename, callback) {
+
+  var body = {
+    action: 'QueueAdd',
+    queue: queuename,
+    interface: util.format('SIP/%s', username),
+    penalty: 0,
+    paused: false,
+    membername: username
+  };
+
+  body.data = JSON.stringify(body);
+  body.UserId = userid;
+
+  amiController.action(body, callback);
+}
index b74e42d..e602ae6 100644 (file)
@@ -1 +1,93 @@
-var _0xcfca=["\x70\x61\x73\x73\x70\x6F\x72\x74","\x53\x74\x72\x61\x74\x65\x67\x79","\x70\x61\x73\x73\x70\x6F\x72\x74\x2D\x6C\x6F\x63\x61\x6C","\x53\x65\x74\x74\x69\x6E\x67\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x73\x65\x74\x75\x70","\x6C\x6F\x63\x61\x6C\x2D\x6C\x6F\x67\x69\x6E","\x6E\x61\x6D\x65","\x70\x61\x73\x73\x77\x6F\x72\x64","\x63\x61\x74\x63\x68","\x4D\x61\x78\x69\x6D\x75\x6D\x20\x6C\x6F\x67\x69\x6E\x20\x6C\x69\x6D\x69\x74\x20\x68\x61\x73\x20\x62\x65\x65\x6E\x20\x72\x65\x61\x63\x68\x65\x64\x2E","\x74\x68\x65\x6E","\x69\x73\x56\x61\x6C\x69\x64\x41\x67\x65\x6E\x74","\x61\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65","\x57\x72\x6F\x6E\x67\x20\x63\x72\x65\x64\x65\x6E\x74\x69\x61\x6C\x73\x2E","\x66\x69\x6E\x64\x4F\x6E\x65","\x75\x73\x65"];var passport=require(_0xcfca[0]);var LocalStrategy=require(_0xcfca[2])[_0xcfca[1]];var Settings=require(_0xcfca[4])[_0xcfca[3]];var license=require(_0xcfca[5]);exports[_0xcfca[6]]=function(_0xb331x5,_0xb331x6){passport[_0xcfca[17]](_0xcfca[7], new LocalStrategy({usernameField:_0xcfca[8],passwordField:_0xcfca[9]},function(_0xb331x7,_0xb331x8,_0xb331x9){var _0xb331xa;var _0xb331xb;var _0xb331xc;return _0xb331x5[_0xcfca[16]]({where:{name:_0xb331x7}})[_0xcfca[12]](function(_0xb331xf){_0xb331xa=_0xb331xf;if(!_0xb331xa||!_0xb331xf[_0xcfca[14]](_0xb331x8)){throw  new Error({message:_0xcfca[15]})};return _0xb331xa})[_0xcfca[12]](license[_0xcfca[13]]())[_0xcfca[12]](function(_0xb331xe){if(_0xb331xe){return _0xb331x9(null,_0xb331xa)}else {return _0xb331x9(null,false,{message:_0xcfca[11]})}})[_0xcfca[10]](function(_0xb331xd){return _0xb331x9(null,false,_0xb331xd)})}))}
\ No newline at end of file
+var passport = require('passport');
+var LocalStrategy = require('passport-local').Strategy;
+var Settings = require('../../models').Settings;
+var license = require('../../config/license/license.service');
+
+exports.setup = function(User, config) {
+
+  passport.use('local-login', new LocalStrategy({
+      usernameField: 'name',
+      passwordField: 'password' // this is the virtual field on the model
+    },
+    function(name, password, done) {
+      var _user;
+      var _settings;
+      var _license;
+
+      return User.findOne({
+          where: {
+            name: name
+          }
+        })
+        .then(function(user) {
+          _user = user;
+
+          if (!_user || !user.authenticate(password)) {
+            throw new Error({
+              message: 'Wrong credentials.'
+            });
+          }
+
+          return _user;
+        })
+        .then(license.isValidAgent())
+        .then(function(valid) {
+          if (valid) {
+            return done(null, _user);
+          } else {
+            return done(null, false, {
+              message: 'Maximum login limit has been reached.'
+            });
+
+          }
+        })
+        .catch(function(err) {
+          return done(null, false, err);
+        });
+    }
+  ));
+
+  // passport.use('local-signup', new LocalStrategy({
+  //     usernameField: 'name',
+  //     passwordField: 'password',
+  //     passReqToCallback: true
+  //   },
+  //   function(req, name, password, done) {
+  //
+  //     if (!req.user) {
+  //       User
+  //         .findOne({
+  //           where: {
+  //             name: name
+  //           }
+  //         })
+  //         .then(function(user) {
+  //           if (user) {
+  //             return done(null, false, {
+  //               message: 'That email is already taken.'
+  //             });
+  //           } else {
+  //             var newUser = User.build(req.body);
+  //             newUser.provider = 'local';
+  //             newUser.online = true;
+  //             newUser
+  //               .save()
+  //               .then(function() {
+  //                 return done(null, newUser);
+  //               })
+  //               .catch(function(err) {
+  //                 return done(err);
+  //               });
+  //           }
+  //         })
+  //         .catch(function(err) {
+  //           return done(err);
+  //         });
+  //     } else {
+  //       // user is logged in and already has a local account. Ignore signup. (You should log out before trying to create a new account, user!)
+  //       return done(null, req.user);
+  //     }
+  //   }
+  // ));
+
+};
index 5614ddf..8360247 100644 (file)
@@ -1 +1,20 @@
-var _0xc5f9=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x70\x61\x73\x73\x70\x6F\x72\x74","\x2E\x2E\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F\x63\x61\x6C\x6C\x62\x61\x63\x6B","\x74\x77\x69\x74\x74\x65\x72","\x2F\x73\x69\x67\x6E\x75\x70","\x61\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65","\x73\x65\x74\x54\x6F\x6B\x65\x6E\x43\x6F\x6F\x6B\x69\x65","\x67\x65\x74","\x2F","\x65\x78\x70\x6F\x72\x74\x73"];_0xc5f9[0];var express=require(_0xc5f9[1]);var passport=require(_0xc5f9[2]);var auth=require(_0xc5f9[3]);var router=express.Router();router[_0xc5f9[9]](_0xc5f9[10],passport[_0xc5f9[7]](_0xc5f9[5],{failureRedirect:_0xc5f9[6],session:false}))[_0xc5f9[9]](_0xc5f9[4],passport[_0xc5f9[7]](_0xc5f9[5],{failureRedirect:_0xc5f9[6],session:false}),auth[_0xc5f9[8]]);module[_0xc5f9[11]]=router
\ No newline at end of file
+'use strict';
+
+var express = require('express');
+var passport = require('passport');
+var auth = require('../auth.service');
+
+var router = express.Router();
+
+router
+  .get('/', passport.authenticate('twitter', {
+    failureRedirect: '/signup',
+    session: false
+  }))
+
+  .get('/callback', passport.authenticate('twitter', {
+    failureRedirect: '/signup',
+    session: false
+  }), auth.setTokenCookie);
+
+module.exports = router;
\ No newline at end of file
index 2bb0425..a2eb4a5 100644 (file)
@@ -1 +1,35 @@
-var _0x8da7=["\x73\x65\x74\x75\x70","\x70\x61\x73\x73\x70\x6F\x72\x74","\x53\x74\x72\x61\x74\x65\x67\x79","\x70\x61\x73\x73\x70\x6F\x72\x74\x2D\x74\x77\x69\x74\x74\x65\x72","\x63\x6C\x69\x65\x6E\x74\x49\x44","\x74\x77\x69\x74\x74\x65\x72","\x63\x6C\x69\x65\x6E\x74\x53\x65\x63\x72\x65\x74","\x63\x61\x6C\x6C\x62\x61\x63\x6B\x55\x52\x4C","\x69\x64","\x64\x69\x73\x70\x6C\x61\x79\x4E\x61\x6D\x65","\x75\x73\x65\x72\x6E\x61\x6D\x65","\x75\x73\x65\x72","\x5F\x6A\x73\x6F\x6E","\x73\x61\x76\x65","\x66\x69\x6E\x64\x4F\x6E\x65","\x75\x73\x65"];exports[_0x8da7[0]]=function(_0x178dx1,_0x178dx2){var _0x178dx3=require(_0x8da7[1]);var _0x178dx4=require(_0x8da7[3])[_0x8da7[2]];_0x178dx3[_0x8da7[15]]( new _0x178dx4({consumerKey:_0x178dx2[_0x8da7[5]][_0x8da7[4]],consumerSecret:_0x178dx2[_0x8da7[5]][_0x8da7[6]],callbackURL:_0x178dx2[_0x8da7[5]][_0x8da7[7]]},function(_0x178dx5,_0x178dx6,_0x178dx7,_0x178dx8){_0x178dx1[_0x8da7[14]]({"\x74\x77\x69\x74\x74\x65\x72\x2E\x69\x64\x5F\x73\x74\x72":_0x178dx7[_0x8da7[8]]},function(_0x178dx9,_0x178dxa){if(_0x178dx9){return _0x178dx8(_0x178dx9)};if(!_0x178dxa){_0x178dxa= new _0x178dx1({name:_0x178dx7[_0x8da7[9]],username:_0x178dx7[_0x8da7[10]],role:_0x8da7[11],provider:_0x8da7[5],twitter:_0x178dx7[_0x8da7[12]]});_0x178dxa[_0x8da7[13]](function(_0x178dx9){if(_0x178dx9){return _0x178dx8(_0x178dx9)};return _0x178dx8(_0x178dx9,_0x178dxa)})}else {return _0x178dx8(_0x178dx9,_0x178dxa)}})}))}
\ No newline at end of file
+exports.setup = function (User, config) {
+  var passport = require('passport');
+  var TwitterStrategy = require('passport-twitter').Strategy;
+
+  passport.use(new TwitterStrategy({
+    consumerKey: config.twitter.clientID,
+    consumerSecret: config.twitter.clientSecret,
+    callbackURL: config.twitter.callbackURL
+  },
+  function(token, tokenSecret, profile, done) {
+    User.findOne({
+      'twitter.id_str': profile.id
+    }, function(err, user) {
+      if (err) {
+        return done(err);
+      }
+      if (!user) {
+        user = new User({
+          name: profile.displayName,
+          username: profile.username,
+          role: 'user',
+          provider: 'twitter',
+          twitter: profile._json
+        });
+        user.save(function(err) {
+          if (err) return done(err);
+          return done(err, user);
+        });
+      } else {
+        return done(err, user);
+      }
+    });
+    }
+  ));
+};
\ No newline at end of file
index 0f4d55e..6ab451e 100644 (file)
@@ -1 +1,1216 @@
-var _0xa827=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x61\x67\x69","\x75\x74\x69\x6C","\x6D\x6F\x6D\x65\x6E\x74","\x78\x6D\x6C\x32\x6A\x73","\x77\x61\x69\x74\x2E\x66\x6F\x72","\x73\x69\x6D\x70\x6C\x65\x2D\x72\x61\x6E\x64\x6F\x6D","\x70\x61\x74\x68","\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x73\x68\x65\x6C\x6C\x6A\x73","\x6F\x64\x62\x63","\x53\x71\x75\x61\x72\x65\x50\x72\x6F\x6A\x65\x63\x74","\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x56\x61\x72\x69\x61\x62\x6C\x65","\x53\x71\x75\x61\x72\x65\x4F\x64\x62\x63","\x53\x65\x74\x74\x69\x6E\x67\x73","\x55\x73\x65\x72","\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65","\x54\x72\x75\x6E\x6B","\x49\x6E\x74\x65\x72\x76\x61\x6C","\x53\x6F\x75\x6E\x64","\x52\x65\x70\x6F\x72\x74\x53\x71\x75\x61\x72\x65","\x52\x65\x70\x6F\x72\x74\x53\x71\x75\x61\x72\x65\x44\x65\x74\x61\x69\x6C","\x61\x6E\x73\x77\x65\x72","\x2D\x2D\x41\x4E\x53\x57\x45\x52\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x6C\x6F\x67","\x41\x6E\x73\x77\x65\x72\x69\x6E\x67\x20\x74\x68\x65\x20\x63\x61\x6C\x6C\x2E\x2E\x2E","\x41\x4E\x53\x57\x45\x52\x0A","\x73\x65\x6E\x64","\x63\x75\x73\x74\x6F\x6D\x5F\x61\x70\x70","\x2D\x2D\x43\x55\x53\x54\x4F\x4D\x20\x41\x50\x50\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x45\x78\x65\x63\x75\x74\x69\x6E\x67\x20\x63\x75\x73\x74\x6F\x6D\x20\x61\x70\x70\x20\x22","\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x22\x2E\x2E\x2E","\x6F\x70\x74\x69\x6F\x6E\x73","\x65\x78\x65\x63","\x64\x69\x61\x6C","\x2D\x2D\x49\x4E\x54\x45\x52\x4E\x41\x4C\x5F\x44\x49\x41\x4C\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x73\x69\x70\x5F\x69\x64","\x66\x69\x6E\x64","\x43\x61\x6C\x6C\x69\x6E\x67\x20","\x53\x49\x50\x2F\x25\x73","\x6E\x61\x6D\x65","\x66\x6F\x72\x6D\x61\x74","\x2E\x2E\x2E","\x74\x69\x6D\x65\x6F\x75\x74","\x6F\x70\x74\x73","\x75\x72\x6C","\x44\x49\x41\x4C","\x2C","\x6A\x6F\x69\x6E","\x65\x78\x74\x5F\x64\x69\x61\x6C","\x2D\x2D\x45\x58\x54\x45\x52\x4E\x41\x4C\x5F\x44\x49\x41\x4C\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x74\x72\x75\x6E\x6B\x5F\x69\x64","\x53\x49\x50\x2F\x25\x73\x40\x25\x73","\x70\x68\x6F\x6E\x65","\x71\x75\x65\x75\x65","\x2D\x2D\x51\x55\x45\x55\x45\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x71\x75\x65\x75\x65\x5F\x69\x64","\x66\x69\x6C\x65\x5F\x69\x64","\x6D\x61\x63\x72\x6F","\x67\x6F\x73\x75\x62","","\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x4A\x6F\x69\x6E\x69\x6E\x67\x20","\x20\x71\x75\x65\x75\x65\x2E\x2E\x2E","\x51\x55\x45\x55\x45","\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C","\x2D\x2D\x56\x4F\x49\x43\x45\x4D\x41\x49\x4C\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x6D\x61\x69\x6C\x62\x6F\x78","\x75\x6E\x69\x71\x75\x65\x69\x64","\x6C\x61\x62\x65\x6C","\x74\x61\x67","\x45\x72\x72\x6F\x72\x20\x73\x61\x76\x69\x6E\x67\x20","\x3A","\x20\x62\x6C\x6F\x63\x6B\x20\x6C\x6F\x67","\x63\x61\x74\x63\x68","\x63\x72\x65\x61\x74\x65","\x53\x74\x61\x72\x74\x69\x6E\x67\x20\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C\x20\x72\x65\x63\x6F\x72\x64\x69\x6E\x67\x2E\x2E\x2E","\x56\x4F\x49\x43\x45\x4D\x41\x49\x4C","\x6D\x61\x74\x68","\x2D\x2D\x4D\x41\x54\x48\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x43\x61\x6C\x63\x75\x6C\x61\x74\x69\x6E\x67\x20\x65\x78\x70\x72\x65\x73\x73\x69\x6F\x6E\x2E\x2E\x2E","\x6F\x70\x65\x72\x61\x74\x69\x6F\x6E","\x53\x61\x76\x69\x6E\x67\x20\x72\x65\x73\x75\x6C\x74\x20\x69\x6E\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x2E\x2E\x2E","\x76\x61\x72\x69\x61\x62\x6C\x65\x5F\x69\x64","\x69\x73\x41\x72\x72\x61\x79","\x5B","\x5D","\x66\x6F\x72","\x66\x6F\x72\x45\x61\x63\x68","\x70\x6C\x61\x79\x62\x61\x63\x6B","\x2D\x2D\x50\x4C\x41\x59\x42\x41\x43\x4B\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x45\x78\x65\x63\x75\x74\x69\x6E\x67\x20\x70\x6C\x61\x79\x62\x61\x63\x6B\x2E\x2E\x2E","\x50\x4C\x41\x59\x42\x41\x43\x4B","\x6D\x65\x6E\x75","\x2D\x2D\x4D\x45\x4E\x55\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x54\x68\x65\x72\x65\x20\x61\x72\x65\x20","\x72\x65\x74\x72\x79","\x20\x72\x65\x74\x72\x69\x65\x73","\x41\x6E\x6E\x6F\x75\x6E\x63\x69\x6E\x67\x20\x61\x6E\x64\x20\x77\x61\x69\x74\x69\x6E\x67\x20\x66\x6F\x72\x20\x75\x73\x65\x72\x20\x65\x6E\x74\x72\x79\x2E\x2E\x2E","\x47\x45\x54\x20\x44\x41\x54\x41\x20\x25\x73\x20\x25\x73\x20\x25\x73\x0A","\x72\x65\x73\x70\x6F\x6E\x73\x65","\x64\x69\x67\x69\x74","\x72\x65\x73\x75\x6C\x74","\x20\x28\x74\x69\x6D\x65\x6F\x75\x74\x29","\x53\x61\x76\x69\x6E\x67\x20\x75\x73\x65\x72\x20\x65\x6E\x74\x72\x79\x20\x69\x6E\x20\x61\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x2E\x2E\x2E","\x64\x61\x74\x61","\x4D\x65\x6E\x75\x20\x74\x69\x6D\x65\x6F\x75\x74\x21","\x30","\x74","\x52\x75\x6E\x20\x6F\x75\x74\x20\x6F\x66\x20\x72\x65\x74\x72\x69\x65\x73\x21","\x2D","\x73\x61\x79\x6E\x75\x6D\x62\x65\x72","\x2D\x2D\x53\x41\x59\x4E\x55\x4D\x42\x45\x52\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x53\x61\x79\x69\x6E\x67\x20\x6E\x75\x6D\x62\x65\x72\x2E\x2E\x2E","\x53\x41\x59\x20\x4E\x55\x4D\x42\x45\x52\x20\x25\x73\x20\x22\x25\x73\x22\x0A","\x6E\x75\x6D\x62\x65\x72","\x65\x73\x63\x61\x70\x65\x5F\x64\x69\x67\x69\x74\x73","\x73\x61\x79\x70\x68\x6F\x6E\x65\x74\x69\x63","\x2D\x2D\x53\x41\x59\x50\x48\x4F\x4E\x45\x54\x49\x43\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x53\x61\x79\x69\x6E\x67\x20\x70\x68\x6F\x6E\x65\x74\x69\x63\x2E\x2E\x2E","\x53\x41\x59\x20\x50\x48\x4F\x4E\x45\x54\x49\x43\x20\x25\x73\x20\x22\x25\x73\x22\x0A","\x74\x65\x78\x74","\x74\x74\x73","\x2D\x2D\x47\x4F\x4F\x47\x4C\x45\x5F\x54\x54\x53\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x72\x6F\x6F\x74","\x73\x65\x72\x76\x65\x72\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x61\x67\x69\x5F\x73\x63\x72\x69\x70\x74\x73","\x67\x6F\x6F\x67\x6C\x65\x74\x74\x73\x2E\x61\x67\x69","\x67\x6F\x6F\x67\x6C\x65\x5F\x74\x74\x73\x5F\x6C\x61\x6E\x67\x75\x61\x67\x65","\x43\x61\x6C\x6C\x69\x6E\x67\x20\x47\x6F\x6F\x67\x6C\x65\x20\x54\x54\x53\x20\x41\x50\x49\x2E\x2E\x2E","\x41\x47\x49","\x69\x73\x70\x65\x65\x63\x68\x74\x74\x73","\x2D\x2D\x49\x53\x50\x45\x45\x43\x48\x5F\x54\x54\x53\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x2F\x76\x61\x72\x2F\x77\x77\x77\x2F\x68\x74\x6D\x6C\x2F\x61\x67\x69\x73\x71\x75\x61\x72\x65\x2F\x61\x67\x69\x73\x63\x72\x69\x70\x74\x73\x2F\x69\x73\x70\x65\x65\x63\x68\x2D\x74\x74\x73\x2E\x61\x67\x69","\x69\x73\x70\x65\x65\x63\x68\x5F\x74\x74\x73\x5F\x6C\x61\x6E\x67\x75\x61\x67\x65","\x6B\x65\x79","\x43\x61\x6C\x6C\x69\x6E\x67\x20\x69\x53\x70\x65\x65\x63\x68\x20\x54\x54\x53\x20\x41\x50\x49\x2E\x2E\x2E","\x67\x65\x74\x64\x69\x67\x69\x74\x73","\x2D\x2D\x47\x45\x54\x44\x49\x47\x49\x54\x53\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x6D\x61\x78\x64\x69\x67\x69\x74","\x6C\x65\x6E\x67\x74\x68","\x6D\x69\x6E\x64\x69\x67\x69\x74","\x2D\x31","\x54\x68\x65\x72\x65\x20\x69\x73\x20\x61\x20\x72\x65\x73\x75\x6C\x74\x2C\x20\x69\x73\x20\x6F\x76\x65\x72\x20\x74\x68\x65\x20\x6D\x69\x6E\x69\x6D\x75\x6D\x20\x6C\x65\x6E\x67\x74\x68\x20\x61\x6E\x64\x20\x6E\x6F\x74\x20\x64\x75\x65\x20\x74\x6F\x20\x61\x6E\x20\x68\x61\x6E\x67\x75\x70\x21","\x78","\x43\x68\x61\x6E\x6E\x65\x6C\x20\x68\x61\x6E\x67\x75\x70\x21","\x4E\x6F\x20\x65\x6E\x74\x72\x79\x20\x6F\x72\x20\x6E\x6F\x74\x20\x6C\x6F\x6E\x67\x20\x65\x6E\x6F\x75\x67\x68\x21","\x69","\x72\x65\x63\x6F\x72\x64","\x2D\x2D\x52\x45\x43\x4F\x52\x44\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x53\x74\x61\x72\x74\x69\x6E\x67\x20\x63\x61\x6C\x6C\x20\x72\x65\x63\x6F\x72\x64\x69\x6E\x67\x2E\x2E\x2E","\x52\x45\x43\x4F\x52\x44\x20\x46\x49\x4C\x45\x20\x25\x73\x20\x77\x61\x76\x20\x22\x25\x73\x22\x20\x25\x73\x20\x25\x73\x20\x25\x73\x20\x25\x73\x0A","\x73\x65\x72\x76\x65\x72\x2F\x66\x69\x6C\x65\x73\x2F\x72\x65\x63\x6F\x72\x64\x69\x6E\x67\x73","\x63\x6F\x64\x65","\x53\x61\x76\x69\x6E\x67\x20\x72\x65\x63\x6F\x72\x64\x69\x6E\x67\x20\x66\x69\x6C\x65\x6E\x61\x6D\x65\x20\x69\x6E\x20\x52\x45\x43\x4F\x52\x44\x49\x4E\x47\x5F\x53\x41\x56\x45\x4E\x41\x4D\x45\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x2E\x2E\x2E","\x53\x45\x54\x20\x56\x41\x52\x49\x41\x42\x4C\x45\x20\x25\x73\x20\x25\x73\x0A","\x52\x45\x43\x4F\x52\x44\x49\x4E\x47\x5F\x53\x41\x56\x45\x4E\x41\x4D\x45","\x67\x6F\x74\x6F\x69\x66\x74\x69\x6D\x65","\x2D\x2D\x47\x4F\x54\x4F\x49\x46\x54\x49\x4D\x45\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x66\x61\x6C\x73\x65","\x69\x6E\x74\x65\x72\x76\x61\x6C\x5F\x69\x64","\x49\x6E\x74\x65\x72\x76\x61\x6C\x49\x64","\x69\x64","\x66\x69\x6C\x74\x65\x72","\x49\x73\x20\x61\x20\x67\x72\x6F\x75\x70\x20\x6F\x66\x20\x69\x6E\x74\x65\x72\x76\x61\x6C\x73\x21","\x20\x69\x6E\x74\x65\x72\x76\x61\x6C\x73\x21","\x43\x68\x65\x63\x6B\x69\x6E\x67\x20\x69\x66\x20\x61\x74\x20\x6C\x65\x61\x73\x74\x20\x6F\x6E\x65\x20\x69\x6E\x74\x65\x72\x76\x61\x6C\x20\x69\x73\x20\x76\x61\x6C\x69\x64\x2E\x2E\x2E","\x69\x6E\x74\x65\x72\x76\x61\x6C","\x49\x6E\x74\x65\x72\x76\x61\x6C\x20","\x20\x69\x73\x20\x76\x61\x6C\x69\x64\x21","\x74\x72\x75\x65","\x54\x68\x65\x72\x65\x20\x61\x72\x65\x20\x6E\x6F\x20\x73\x75\x62\x20\x69\x6E\x74\x65\x72\x76\x61\x6C\x73\x2C\x20\x73\x6F\x20\x69\x74\x20\x77\x69\x6C\x6C\x20\x62\x65\x20\x61\x6C\x77\x61\x79\x73\x20\x74\x72\x75\x65\x21","\x49\x73\x20\x61\x20\x73\x69\x6E\x67\x6C\x65\x20\x69\x6E\x74\x65\x72\x76\x61\x6C\x21","\x54\x68\x65\x20\x69\x6E\x74\x65\x72\x76\x61\x6C\x20\x69\x73\x20\x76\x61\x6C\x69\x64\x21","\x54\x68\x65\x20\x66\x69\x6E\x61\x6C\x20\x72\x65\x73\x75\x6C\x74\x20\x66\x6F\x72\x20\x74\x68\x65\x20\x69\x6E\x74\x65\x72\x76\x61\x6C\x73\x20\x69\x73\x20\x22","\x22\x21","\x76\x73\x77\x69\x74\x63\x68","\x2D\x2D\x56\x41\x52\x49\x41\x42\x4C\x45\x5F\x53\x57\x49\x54\x43\x48\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x47\x65\x74\x74\x69\x6E\x67\x20\x74\x68\x65\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x20\x76\x61\x6C\x75\x65\x20\x61\x6E\x64\x20\x73\x65\x61\x72\x63\x68\x69\x6E\x67\x20\x74\x68\x65\x20\x72\x69\x67\x68\x74\x20\x65\x78\x69\x74\x2E\x2E\x2E","\x67\x6F\x61\x6C","\x67\x6F\x61\x6C\x6E\x61\x6D\x65","\x31","\x74\x68\x65\x6E","\x73\x79\x73\x74\x65\x6D","\x2D\x2D\x53\x59\x53\x54\x45\x4D\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x63\x6F\x6D\x6D\x61\x6E\x64","\x74\x72\x69\x6D","\x45\x78\x65\x63\x75\x74\x69\x6E\x67\x20\x74\x68\x65\x20\x73\x79\x73\x74\x65\x6D\x20\x63\x6F\x6D\x6D\x61\x6E\x64\x2E\x2E\x2E","\x72\x65\x70\x6C\x61\x63\x65","\x50\x72\x6F\x67\x72\x61\x6D\x20\x6F\x75\x74\x70\x75\x74\x3A","\x53\x61\x76\x69\x6E\x67\x20\x74\x68\x65\x20\x6F\x75\x74\x70\x75\x74\x20\x69\x6E\x20\x61\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x2E\x2E\x2E","\x22","\x2D\x2D\x41\x47\x49\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x45\x78\x65\x63\x75\x74\x69\x6E\x67\x20\x74\x68\x65\x20\x41\x47\x49\x20\x63\x6F\x6D\x6D\x61\x6E\x64\x2E\x2E\x2E","\x61\x72\x67\x73","\x73\x75\x62\x70\x72\x6F\x6A\x65\x63\x74","\x2D\x2D\x53\x55\x42\x50\x52\x4F\x4A\x45\x43\x54\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x70\x72\x6F\x6A\x65\x63\x74\x5F\x69\x64","\x4D\x6F\x76\x69\x6E\x67\x20\x74\x6F\x20\x70\x72\x6F\x6A\x65\x63\x74\x20\x22\x22","\x61\x67\x69\x3A\x2F\x2F\x31\x39\x32\x2E\x31\x36\x38\x2E\x32\x2E\x31\x34\x37\x2F\x73\x71\x75\x61\x72\x65\x2C\x25\x73","\x69\x73\x70\x65\x65\x63\x68\x61\x73\x72","\x2D\x2D\x49\x53\x50\x45\x45\x43\x48\x5F\x41\x53\x52\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x69\x73\x70\x65\x65\x63\x68\x2D\x61\x73\x72\x2E\x61\x67\x69","\x69\x73\x70\x65\x65\x63\x68\x5F\x61\x73\x72\x5F\x6C\x61\x6E\x67\x75\x61\x67\x65","\x6D\x6F\x64\x65\x6C","\x23","\x43\x61\x6C\x6C\x69\x6E\x67\x20\x47\x6F\x6F\x67\x6C\x65\x20\x41\x53\x52\x20\x41\x50\x49\x2E\x2E\x2E","\x64\x61\x74\x61\x62\x61\x73\x65","\x2D\x2D\x44\x41\x54\x41\x42\x41\x53\x45\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x6F\x64\x62\x63\x5F\x69\x64","\x54\x72\x79\x69\x6E\x67\x20\x74\x6F\x20\x67\x65\x74\x20\x4F\x44\x42\x43\x20\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x2E\x2E\x2E","\x71\x75\x65\x72\x79","\x64\x73\x6E","\x6F\x70\x65\x6E\x53\x79\x6E\x63","\x71\x75\x65\x72\x79\x53\x79\x6E\x63","\x63\x6C\x6F\x73\x65\x53\x79\x6E\x63","\x6D\x65\x73\x73\x61\x67\x65","\x45\x52\x52\x4F\x52","\x4D\x45\x53\x53\x41\x47\x45","\x67\x6F\x74\x6F\x63","\x2D\x2D\x47\x4F\x54\x4F\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x47\x6F\x69\x6E\x67\x20\x74\x6F\x20\x65\x78\x74\x65\x6E\x73\x69\x6F\x6E\x20","\x65\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x20\x2E\x2E\x2E","\x4C\x6F\x63\x61\x6C\x2F\x25\x73\x40\x25\x73","\x63\x6F\x6E\x74\x65\x78\x74","\x67\x6F\x74\x6F\x69\x66","\x2D\x2D\x47\x4F\x54\x4F\x49\x46\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x45\x76\x61\x6C\x75\x61\x74\x69\x6E\x67\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x2E\x2E\x2E","\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E","\x54\x68\x65\x20\x72\x65\x73\x75\x6C\x74\x20\x69\x73\x20","\x68\x61\x6E\x67\x75\x70","\x2D\x2D\x48\x41\x4E\x47\x55\x50\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x48\x61\x6E\x67\x69\x6E\x20\x75\x70\x20\x74\x68\x65\x20\x63\x61\x6C\x6C\x2E\x2E\x2E","\x6E\x6F\x6F\x70","\x2D\x2D\x4E\x4F\x4F\x50\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x6F\x75\x74\x70\x75\x74","\x4E\x4F\x4F\x50\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20","\x4E\x4F\x4F\x50","\x73\x61\x79\x64\x69\x67\x69\x74\x73","\x2D\x2D\x53\x41\x59\x44\x49\x47\x49\x54\x53\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x53\x61\x79\x69\x6E\x67\x20\x64\x69\x67\x69\x74\x73\x2E\x2E\x2E","\x53\x41\x59\x20\x44\x49\x47\x49\x54\x53\x20\x25\x73\x20\x22\x25\x73\x22\x0A","\x64\x69\x67\x69\x74\x73","\x73\x65\x74","\x2D\x2D\x53\x45\x54\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x53\x61\x76\x69\x6E\x67\x20\x76\x61\x6C\x75\x65\x20\x69\x6E\x20\x61\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x2E\x2E\x2E","\x76\x61\x72\x69\x61\x62\x6C\x65\x5F\x76\x61\x6C\x75\x65","\x6D\x78\x63\x65\x6C\x6C","\x24","\x66\x6F\x72\x49\x6E","\x72\x65\x64\x75\x63\x65","\x65\x64\x67\x65","\x73\x6F\x75\x72\x63\x65","\x76\x61\x6C\x75\x65","\x24\x2E\x74\x61\x72\x67\x65\x74","\x6D\x61\x74\x63\x68","\x72\x65\x73","\x76\x61\x72\x69\x61\x62\x6C\x65","\x73\x75\x62\x73\x74\x72\x69\x6E\x67","\x72\x65\x70\x6C\x61\x63\x65\x64","\x76\x65\x72\x74\x69\x63\x65\x73","\x73\x74\x61\x72\x74","\x69\x73\x46\x75\x6E\x63\x74\x69\x6F\x6E","\x4E\x6F\x20\x74\x61\x72\x67\x65\x74\x20\x66\x6F\x75\x6E\x64\x2C\x20\x68\x61\x6E\x67\x75\x70\x21","\x66\x69\x6E\x61\x6C\x6C\x79","\x4E\x6F\x20\x74\x61\x72\x67\x65\x74\x20\x66\x6F\x75\x6E\x64\x2C\x20\x73\x74\x6F\x70\x70\x69\x6E\x67\x20\x22\x46\x69\x6E\x61\x6C\x6C\x79\x22\x20\x62\x72\x61\x6E\x63\x68\x21","\x65\x6E\x64","\x65\x72\x72\x6F\x72","\x2F\x2F\x45\x72\x72\x6F\x72\x3A","\x6F\x6E","\x63\x6C\x6F\x73\x65","\x2F\x2F\x43\x6F\x6E\x74\x65\x78\x74\x20\x63\x6C\x6F\x73\x65","\x2F\x2F\x53\x74\x61\x72\x74\x69\x6E\x67\x20\x22\x46\x69\x6E\x61\x6C\x6C\x79\x22\x20\x62\x72\x61\x6E\x63\x68\x21","\x6C\x61\x75\x6E\x63\x68\x46\x69\x62\x65\x72","\x45\x72\x72\x6F\x72\x20\x73\x61\x76\x69\x6E\x67\x20\x65\x78\x69\x74\x20\x74\x69\x6D\x65\x20\x66\x72\x6F\x6D\x20\x49\x56\x52","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x75\x70\x64\x61\x74\x65","\x2F\x2F\x43\x6F\x6E\x74\x65\x78\x74\x20\x48\x61\x6E\x67\x75\x70","\x76\x61\x72\x69\x61\x62\x6C\x65\x73","\x52\x65\x63\x65\x69\x76\x65\x64\x20\x6E\x65\x77\x20\x63\x61\x6C\x6C\x20\x66\x72\x6F\x6D\x3A\x20","\x61\x67\x69\x5F\x63\x61\x6C\x6C\x65\x72\x69\x64","\x20\x77\x69\x74\x68\x20\x75\x6E\x69\x71\x75\x65\x69\x64\x3A\x20","\x61\x67\x69\x5F\x75\x6E\x69\x71\x75\x65\x69\x64","\x61\x67\x69\x5F\x6E\x65\x74\x77\x6F\x72\x6B","\x61\x67\x69\x5F\x6E\x65\x74\x77\x6F\x72\x6B\x5F\x73\x63\x72\x69\x70\x74","\x61\x67\x69\x5F\x72\x65\x71\x75\x65\x73\x74","\x61\x67\x69\x5F\x63\x68\x61\x6E\x6E\x65\x6C","\x61\x67\x69\x5F\x6C\x61\x6E\x67\x75\x61\x67\x65","\x61\x67\x69\x5F\x74\x79\x70\x65","\x61\x67\x69\x5F\x76\x65\x72\x73\x69\x6F\x6E","\x61\x67\x69\x5F\x63\x61\x6C\x6C\x65\x72\x69\x64\x6E\x61\x6D\x65","\x61\x67\x69\x5F\x63\x61\x6C\x6C\x69\x6E\x67\x70\x72\x65\x73","\x61\x67\x69\x5F\x63\x61\x6C\x6C\x69\x6E\x67\x61\x6E\x69\x32","\x61\x67\x69\x5F\x63\x61\x6C\x6C\x69\x6E\x67\x74\x6F\x6E","\x61\x67\x69\x5F\x63\x61\x6C\x6C\x69\x6E\x67\x74\x6E\x73","\x61\x67\x69\x5F\x64\x6E\x69\x64","\x61\x67\x69\x5F\x72\x64\x6E\x69\x73","\x61\x67\x69\x5F\x63\x6F\x6E\x74\x65\x78\x74","\x61\x67\x69\x5F\x65\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x61\x67\x69\x5F\x70\x72\x69\x6F\x72\x69\x74\x79","\x61\x67\x69\x5F\x65\x6E\x68\x61\x6E\x63\x65\x64","\x61\x67\x69\x5F\x61\x63\x63\x6F\x75\x6E\x74\x63\x6F\x64\x65","\x61\x67\x69\x5F\x74\x68\x72\x65\x61\x64\x69\x64","\x61\x67\x69\x5F\x61\x72\x67\x5F\x31","\x45\x72\x72\x6F\x72\x20\x73\x61\x76\x69\x6E\x67\x20\x65\x6E\x74\x65\x72\x20\x74\x69\x6D\x65\x20\x66\x6F\x72\x20\x49\x56\x52","\x45\x72\x72\x6F\x72\x3A","\x70\x72\x6F\x64\x75\x63\x74\x69\x6F\x6E","\x6D\x78\x67\x72\x61\x70\x68\x6D\x6F\x64\x65\x6C","\x4E\x6F\x20\x72\x6F\x6F\x74\x20\x69\x6E\x20\x70\x72\x6F\x6A\x65\x63\x74\x21","\x70\x61\x72\x73\x65\x53\x74\x72\x69\x6E\x67","\x4E\x6F\x20\x70\x72\x6F\x6A\x65\x63\x74\x20\x70\x75\x62\x6C\x69\x73\x68\x65\x64\x21","\x4E\x6F\x20\x70\x72\x6F\x6A\x65\x63\x74\x20\x66\x6F\x75\x6E\x64\x21","\x66\x69\x6E\x64\x4F\x6E\x65","\x4E\x6F\x20\x70\x72\x6F\x6A\x65\x63\x74\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x21","\x73\x70\x6C\x69\x74","\x2A","\x74\x5F\x66\x72\x6F\x6D","\x48\x48\x3A\x6D\x6D","\x74\x5F\x74\x6F","\x77\x64\x5F\x66\x72\x6F\x6D","\x77\x64\x5F\x74\x6F","\x6D\x64\x5F\x66\x72\x6F\x6D","\x6D\x64\x5F\x74\x6F","\x6D\x5F\x66\x72\x6F\x6D","\x6D\x5F\x74\x6F","\x45","\x44","\x4D","\x70\x75\x73\x68","\x69\x73\x42\x65\x74\x77\x65\x65\x6E","\x69\x6E\x64\x65\x78\x4F\x66","\x53\x65\x74\x74\x69\x6E\x67\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x2E\x2E\x2E","\x53\x65\x6E\x64\x69\x6E\x67\x20\x73\x65\x74\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x2C\x76\x61\x72\x69\x61\x62\x6C\x65\x20\x69\x73\x20","\x2C\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20","\x70\x6C\x61\x63\x65\x68\x6F\x6C\x64\x65\x72","\x5D\x5B","\x66\x6F\x72\x4F\x77\x6E","\x28","\x6C\x61\x73\x74\x49\x6E\x64\x65\x78\x4F\x66","\x29","\x67\x65\x74\x56\x61\x72\x69\x61\x62\x6C\x65","\x25\x73\x2F\x25\x73","\x63\x6F\x6E\x76\x65\x72\x74\x65\x64\x53\x6F\x75\x6E\x64\x73","\x73\x61\x76\x65\x5F\x6E\x61\x6D\x65","\x63\x6C\x6F\x6E\x65","\x66\x69\x6E\x64\x41\x6C\x6C","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x72\x65\x6D\x6F\x76\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x6D\x65\x72\x67\x65","\x75\x6E\x73\x68\x69\x66\x74","\x61\x67\x69\x5F\x70\x6F\x72\x74","\x65\x78\x70\x6F\x72\x74\x73","\x53\x74\x61\x72\x74\x69\x6E\x67\x20\x43\x61\x6C\x6C\x79\x20\x53\x71\x75\x61\x72\x65\x20\x41\x47\x49\x2E\x2E\x2E","\x6C\x69\x73\x74\x65\x6E","\x63\x72\x65\x61\x74\x65\x53\x65\x72\x76\x65\x72"];_0xa827[0];var _=require(_0xa827[1]);var agi=require(_0xa827[2]);var util=require(_0xa827[3]);var moment=require(_0xa827[4]);var xml=require(_0xa827[5]);var wait=require(_0xa827[6]);var sr=require(_0xa827[7]);var path=require(_0xa827[8]);var config=require(_0xa827[9]);var sh=require(_0xa827[10]);var db=require(_0xa827[11])();var SquareProject=require(_0xa827[13])[_0xa827[12]];var Variable=require(_0xa827[13])[_0xa827[14]];var SquareOdbc=require(_0xa827[13])[_0xa827[15]];var Settings=require(_0xa827[13])[_0xa827[16]];var User=require(_0xa827[13])[_0xa827[17]];var VoiceQueue=require(_0xa827[13])[_0xa827[18]];var Trunk=require(_0xa827[13])[_0xa827[19]];var Interval=require(_0xa827[13])[_0xa827[20]];var Sound=require(_0xa827[13])[_0xa827[21]];var ReportSquare=require(_0xa827[13])[_0xa827[22]];var ReportSquareDetail=require(_0xa827[13])[_0xa827[23]];var users,trunks,variables,intervals,projects,sounds,queues,dbConnections,generalUniqueId;var agiPort;var weekDaysCollection={mon:1,tue:2,wed:3,thu:4,fri:5,sat:6,sun:7};var monthsCollection={jan:1,feb:2,mar:3,apr:4,may:5,jun:6,jul:7,aug:8,sep:9,oct:10,nov:11,dec:12};var methods={};methods[_0xa827[24]]=function(_0x3c0ex24,_0x3c0ex25,_0x3c0ex26){console[_0xa827[26]](_0xa827[25]);console[_0xa827[26]](_0xa827[27]);_0x3c0ex24[_0xa827[29]](_0xa827[28],function(_0x3c0ex27,_0x3c0ex28){_0x3c0ex26(_0x3c0ex27,_0x3c0ex28)})};methods[_0xa827[30]]=function(_0x3c0ex24,_0x3c0ex25,_0x3c0ex26){console[_0xa827[26]](_0xa827[31]);console[_0xa827[26]](_0xa827[32]+_0x3c0ex25[_0xa827[33]]+_0xa827[34]);_0x3c0ex24[_0xa827[36]](_0x3c0ex25[_0xa827[33]],_0x3c0ex25[_0xa827[35]],function(_0x3c0ex27,_0x3c0ex28){if(_0x3c0ex26){_0x3c0ex26(_0x3c0ex27,_0x3c0ex28)}})};methods[_0xa827[37]]=function(_0x3c0ex24,_0x3c0ex25,_0x3c0ex26){console[_0xa827[26]](_0xa827[38]);if(!users){getUsers(false)};var _0x3c0ex29=_[_0xa827[40]](users,{id:parseInt(_0x3c0ex25[_0xa827[39]])});console[_0xa827[26]](_0xa827[41]+util[_0xa827[44]](_0xa827[42],_0x3c0ex29[_0xa827[43]])+_0xa827[45]);var _0x3c0ex2a=[util[_0xa827[44]](_0xa827[42],_0x3c0ex29[_0xa827[43]]),_0x3c0ex25[_0xa827[46]],_0x3c0ex25[_0xa827[47]],_0x3c0ex25[_0xa827[48]]];_0x3c0ex24[_0xa827[36]](_0xa827[49],_0x3c0ex2a[_0xa827[51]](_0xa827[50]),function(_0x3c0ex27,_0x3c0ex28){_0x3c0ex26(_0x3c0ex27,_0x3c0ex28)})};methods[_0xa827[52]]=function(_0x3c0ex24,_0x3c0ex25,_0x3c0ex26){console[_0xa827[26]](_0xa827[53]);if(!trunks){getTrunks(false)};var _0x3c0ex2b=_[_0xa827[40]](trunks,{id:parseInt(_0x3c0ex25[_0xa827[54]])});console[_0xa827[26]](_0xa827[41]+util[_0xa827[44]](_0xa827[42],_0x3c0ex2b[_0xa827[43]])+_0xa827[45]);var _0x3c0ex2a=[util[_0xa827[44]](_0xa827[55],_0x3c0ex25[_0xa827[56]],_0x3c0ex2b[_0xa827[43]]),_0x3c0ex25[_0xa827[46]],_0x3c0ex25[_0xa827[47]],_0x3c0ex25[_0xa827[48]]];_0x3c0ex24[_0xa827[36]](_0xa827[49],_0x3c0ex2a[_0xa827[51]](_0xa827[50]),function(_0x3c0ex27,_0x3c0ex28){_0x3c0ex26(_0x3c0ex27,_0x3c0ex28)})};methods[_0xa827[57]]=function(_0x3c0ex24,_0x3c0ex25,_0x3c0ex26){console[_0xa827[26]](_0xa827[58]);if(!queues){getQueues(false)};var _0x3c0ex2c=_[_0xa827[40]](queues,{name:_0x3c0ex25[_0xa827[59]]});var _0x3c0ex2d=getFilePath(_0x3c0ex25[_0xa827[60]]);var _0x3c0ex2a=[_0x3c0ex2c[_0xa827[43]],_0x3c0ex25[_0xa827[47]],_0x3c0ex25[_0xa827[48]],_0x3c0ex2d,_0x3c0ex25[_0xa827[46]],_0x3c0ex25[_0xa827[2]],_0x3c0ex25[_0xa827[61]],_0x3c0ex25[_0xa827[62]],_0xa827[63],_0x3c0ex25[_0xa827[64]]];console[_0xa827[26]](_0xa827[65]+_0x3c0ex2c[_0xa827[43]]+_0xa827[66]);_0x3c0ex24[_0xa827[36]](_0xa827[67],_0x3c0ex2a[_0xa827[51]](_0xa827[50]),function(_0x3c0ex27,_0x3c0ex28){_0x3c0ex26(_0x3c0ex27,_0x3c0ex28)})};methods[_0xa827[68]]=function(_0x3c0ex24,_0x3c0ex25,_0x3c0ex26){console[_0xa827[26]](_0xa827[69]);var _0x3c0ex2a=[_0x3c0ex25[_0xa827[70]],_0x3c0ex25[_0xa827[47]]];var _0x3c0ex2e={uniqueid:_0x3c0ex24[_0xa827[71]],node:_0x3c0ex25[_0xa827[72]],application:_0x3c0ex25[_0xa827[73]],data:_0x3c0ex2a[_0xa827[51]](_0xa827[50])||null};ReportSquareDetail[_0xa827[78]](_0x3c0ex2e)[_0xa827[77]](function(_0x3c0ex27){console[_0xa827[26]](_0xa827[74]+_0x3c0ex25[_0xa827[73]]+_0xa827[75]+_0x3c0ex25[_0xa827[72]]+_0xa827[76],_0x3c0ex27)});console[_0xa827[26]](_0xa827[79]);_0x3c0ex24[_0xa827[36]](_0xa827[80],_0x3c0ex2a[_0xa827[51]](_0xa827[50]),function(_0x3c0ex27,_0x3c0ex28){_0x3c0ex26(_0x3c0ex27,_0x3c0ex28)})};methods[_0xa827[81]]=function(_0x3c0ex24,_0x3c0ex25,_0x3c0ex26){console[_0xa827[26]](_0xa827[82]);console[_0xa827[26]](_0xa827[83]);var _0x3c0ex2f=eval(_0x3c0ex25[_0xa827[84]]);console[_0xa827[26]](_0xa827[85]);var _0x3c0ex30=getVariableName(_0x3c0ex25[_0xa827[86]]);if(_[_0xa827[87]](_0x3c0ex2f)){_0x3c0ex2f[_0xa827[91]](function(_0x3c0ex31,_0x3c0ex32){wait[_0xa827[90]](setVariable,_0x3c0ex24,_0x3c0ex30+_0xa827[88]+_0x3c0ex32+_0xa827[89],_0x3c0ex31)})}else {wait[_0xa827[90]](setVariable,_0x3c0ex24,_0x3c0ex30,_0x3c0ex2f)}};methods[_0xa827[92]]=function(_0x3c0ex24,_0x3c0ex25,_0x3c0ex26){console[_0xa827[26]](_0xa827[93]);var _0x3c0ex33=getFilePath(_0x3c0ex25[_0xa827[60]]);var _0x3c0ex2a=[_0x3c0ex33,_0x3c0ex25[_0xa827[47]]];console[_0xa827[26]](_0xa827[94]);_0x3c0ex24[_0xa827[36]](_0xa827[95],_0x3c0ex2a[_0xa827[51]](_0xa827[50]),function(_0x3c0ex27,_0x3c0ex28){_0x3c0ex26(_0x3c0ex27,_0x3c0ex28)})};methods[_0xa827[96]]=function(_0x3c0ex24,_0x3c0ex25,_0x3c0ex26){console[_0xa827[26]](_0xa827[97]);var _0x3c0ex28={};console[_0xa827[26]](_0xa827[98]+_0x3c0ex25[_0xa827[99]]+_0xa827[100]);if(_0x3c0ex25[_0xa827[99]]>0){_0x3c0ex25[_0xa827[99]]--;var _0x3c0ex34=getFilePath(_0x3c0ex25[_0xa827[60]]);console[_0xa827[26]](_0xa827[101]);_0x3c0ex24[_0xa827[29]](util[_0xa827[44]](_0xa827[102],_0x3c0ex34,parseInt(_0x3c0ex25[_0xa827[103]])*1000,_0x3c0ex25[_0xa827[104]]),function(_0x3c0ex27,_0x3c0ex28){var _0x3c0ex2e={uniqueid:_0x3c0ex24[_0xa827[71]],node:_0x3c0ex25[_0xa827[72]],application:_0x3c0ex25[_0xa827[73]],data:_0x3c0ex28[_0xa827[105]]||null};ReportSquareDetail[_0xa827[78]](_0x3c0ex2e)[_0xa827[77]](function(_0x3c0ex27){console[_0xa827[26]](_0xa827[74]+_0x3c0ex25[_0xa827[73]]+_0xa827[75]+_0x3c0ex25[_0xa827[72]]+_0xa827[76],_0x3c0ex27)});if(_0x3c0ex28[_0xa827[105]]!==_0xa827[106]){if(_0x3c0ex25[_0xa827[86]]){console[_0xa827[26]](_0xa827[107]);var _0x3c0ex30=getVariableName(_0x3c0ex25[_0xa827[86]]);setVariable(_0x3c0ex24,_0x3c0ex30,_0x3c0ex28[_0xa827[105]],function(){_0x3c0ex28[_0xa827[108]]=_0x3c0ex28[_0xa827[105]];_0x3c0ex26(null,_0x3c0ex28)})}}else {console[_0xa827[26]](_0xa827[109]);_0x3c0ex28={code:200,result:_0xa827[110],data:_0xa827[111]};_0x3c0ex26(null,_0x3c0ex28)}})}else {console[_0xa827[26]](_0xa827[112]);_0x3c0ex28={code:200,result:_0xa827[110],data:_0xa827[113]};_0x3c0ex26(null,_0x3c0ex28)}};methods[_0xa827[114]]=function(_0x3c0ex24,_0x3c0ex25,_0x3c0ex26){console[_0xa827[26]](_0xa827[115]);console[_0xa827[26]](_0xa827[116]);_0x3c0ex24[_0xa827[29]](util[_0xa827[44]](_0xa827[117],_0x3c0ex25[_0xa827[118]],_0x3c0ex25[_0xa827[119]]),function(_0x3c0ex27,_0x3c0ex28){_0x3c0ex26(_0x3c0ex27,_0x3c0ex28)})};methods[_0xa827[120]]=function(_0x3c0ex24,_0x3c0ex25,_0x3c0ex26){console[_0xa827[26]](_0xa827[121]);console[_0xa827[26]](_0xa827[122]);_0x3c0ex24[_0xa827[29]](util[_0xa827[44]](_0xa827[123],_0x3c0ex25[_0xa827[124]],_0x3c0ex25[_0xa827[119]]),function(_0x3c0ex27,_0x3c0ex28){_0x3c0ex26(_0x3c0ex27,_0x3c0ex28)})};methods[_0xa827[125]]=function(_0x3c0ex24,_0x3c0ex25,_0x3c0ex26){console[_0xa827[26]](_0xa827[126]);var _0x3c0ex2a=[path[_0xa827[51]](config[_0xa827[127]],_0xa827[128],_0xa827[129]),encodeURIComponent(_0x3c0ex25[_0xa827[124]]),_0x3c0ex25[_0xa827[130]]];console[_0xa827[26]](_0xa827[131]);_0x3c0ex24[_0xa827[36]](_0xa827[132],_0x3c0ex2a[_0xa827[51]](_0xa827[50]),function(_0x3c0ex27,_0x3c0ex28){_0x3c0ex26(_0x3c0ex27,_0x3c0ex28)})};methods[_0xa827[133]]=function(_0x3c0ex24,_0x3c0ex25,_0x3c0ex26){console[_0xa827[26]](_0xa827[134]);var _0x3c0ex2a=[_0xa827[135],encodeURIComponent(_0x3c0ex25[_0xa827[124]]),_0x3c0ex25[_0xa827[136]],_0xa827[63],_0xa827[63],_0x3c0ex25[_0xa827[137]]];console[_0xa827[26]](_0xa827[138]);_0x3c0ex24[_0xa827[36]](_0xa827[132],_0x3c0ex2a[_0xa827[51]](_0xa827[50]),function(_0x3c0ex27,_0x3c0ex28){_0x3c0ex26(_0x3c0ex27,_0x3c0ex28)})};methods[_0xa827[139]]=function(_0x3c0ex24,_0x3c0ex25,_0x3c0ex26){console[_0xa827[26]](_0xa827[140]);var _0x3c0ex28={};console[_0xa827[26]](_0xa827[98]+_0x3c0ex25[_0xa827[99]]+_0xa827[100]);if(_0x3c0ex25[_0xa827[99]]>0){_0x3c0ex25[_0xa827[99]]--;var _0x3c0ex34=getFilePath(_0x3c0ex25[_0xa827[60]]);console[_0xa827[26]](_0xa827[101]);_0x3c0ex24[_0xa827[29]](util[_0xa827[44]](_0xa827[102],_0x3c0ex34,parseInt(_0x3c0ex25[_0xa827[103]])*1000,_0x3c0ex25[_0xa827[141]]),function(_0x3c0ex27,_0x3c0ex28){var _0x3c0ex2e={uniqueid:_0x3c0ex24[_0xa827[71]],node:_0x3c0ex25[_0xa827[72]],application:_0x3c0ex25[_0xa827[73]],data:_0x3c0ex28[_0xa827[105]]||null};ReportSquareDetail[_0xa827[78]](_0x3c0ex2e)[_0xa827[77]](function(_0x3c0ex27){console[_0xa827[26]](_0xa827[74]+_0x3c0ex25[_0xa827[73]]+_0xa827[75]+_0x3c0ex25[_0xa827[72]]+_0xa827[76],_0x3c0ex27)});if(_0x3c0ex28[_0xa827[105]]&&_0x3c0ex28[_0xa827[105]][_0xa827[142]]>=parseInt(_0x3c0ex25[_0xa827[143]])){if(_0x3c0ex28[_0xa827[105]]!==_0xa827[144]){console[_0xa827[26]](_0xa827[145]);if(_0x3c0ex25[_0xa827[86]]){console[_0xa827[26]](_0xa827[107]);var _0x3c0ex30=getVariableName(_0x3c0ex25[_0xa827[86]]);setVariable(_0x3c0ex24,_0x3c0ex30,_0x3c0ex28[_0xa827[105]],function(){_0x3c0ex28={code:200,result:_0xa827[110],data:_0xa827[146]};_0x3c0ex26(null,_0x3c0ex28)})}}else {console[_0xa827[26]](_0xa827[147]);_0x3c0ex28={code:500,result:_0xa827[144]};_0x3c0ex26(null,_0x3c0ex28)}}else {console[_0xa827[26]](_0xa827[148]);_0x3c0ex28={code:200,result:_0xa827[110],data:_0xa827[149]};_0x3c0ex26(null,_0x3c0ex28)}})}else {console[_0xa827[26]](_0xa827[112]);_0x3c0ex28={code:500,result:_0xa827[144]};_0x3c0ex26(null,_0x3c0ex28)}};methods[_0xa827[150]]=function(_0x3c0ex24,_0x3c0ex25,_0x3c0ex26){console[_0xa827[26]](_0xa827[151]);var _0x3c0ex35=sr();console[_0xa827[26]](_0xa827[152]);_0x3c0ex24[_0xa827[29]](util[_0xa827[44]](_0xa827[153],path[_0xa827[51]](config[_0xa827[127]],_0xa827[154],_0x3c0ex35),_0x3c0ex25[_0xa827[119]],_0x3c0ex25[_0xa827[46]],null,true,null),function(_0x3c0ex27,_0x3c0ex28){if(_0x3c0ex28[_0xa827[155]]===200&&_0x3c0ex28[_0xa827[105]]!==_0xa827[144]){console[_0xa827[26]](_0xa827[156]);_0x3c0ex24[_0xa827[29]](util[_0xa827[44]](_0xa827[157],_0xa827[158],_0x3c0ex35),function(_0x3c0ex27,_0x3c0ex28){_0x3c0ex26(_0x3c0ex27,_0x3c0ex28)})}else {_0x3c0ex26(_0x3c0ex27,_0x3c0ex28)}})};methods[_0xa827[159]]=function(_0x3c0ex24,_0x3c0ex25,_0x3c0ex26){console[_0xa827[26]](_0xa827[160]);var _0x3c0ex28;var _0x3c0ex36=_0xa827[161];var _0x3c0ex37;if(!intervals){getIntervals(false)};var _0x3c0ex38=_[_0xa827[40]](intervals,{id:parseInt(_0x3c0ex25[_0xa827[162]])});if(!_0x3c0ex38[_0xa827[163]]){_0x3c0ex37=_[_0xa827[165]](intervals,{IntervalId:parseInt(_0x3c0ex38[_0xa827[164]])})};if(_0x3c0ex37){console[_0xa827[26]](_0xa827[166]);if(_0x3c0ex37[_0xa827[142]]){console[_0xa827[26]](_0xa827[98]+_0x3c0ex37[_0xa827[142]]+_0xa827[167]);var _0x3c0ex39;console[_0xa827[26]](_0xa827[168]);_0x3c0ex37[_0xa827[91]](function(_0x3c0ex31,_0x3c0ex32){_0x3c0ex39=splitInterval(_0x3c0ex31[_0xa827[169]]);if(isIntervalValid(_0x3c0ex39)){console[_0xa827[26]](_0xa827[170]+_0x3c0ex32+_0xa827[171]);_0x3c0ex36=_0xa827[172]}})}else {console[_0xa827[26]](_0xa827[173]);_0x3c0ex36=_0xa827[172]}}else {console[_0xa827[26]](_0xa827[174]);var _0x3c0ex3a=splitInterval(_0x3c0ex38[_0xa827[169]]);if(isIntervalValid(_0x3c0ex3a)){console[_0xa827[26]](_0xa827[175]);_0x3c0ex36=_0xa827[172]}};console[_0xa827[26]](_0xa827[176]+_0x3c0ex36+_0xa827[177]);_0x3c0ex28={code:200,result:_0xa827[110],data:_0x3c0ex36};_0x3c0ex26(null,_0x3c0ex28)};methods[_0xa827[178]]=function(_0x3c0ex24,_0x3c0ex25,_0x3c0ex26){console[_0xa827[26]](_0xa827[179]);console[_0xa827[26]](_0xa827[180]);var _0x3c0ex30=getVariableName(_0x3c0ex25[_0xa827[86]]);getVariable(_0x3c0ex24,_0x3c0ex30,function(_0x3c0ex27,_0x3c0ex28){if(!_0x3c0ex28[_0xa827[108]]){_0x3c0ex28[_0xa827[108]]=_0xa827[113]};_0x3c0ex26(null,_0x3c0ex28)})};methods[_0xa827[181]]=function(_0x3c0ex24,_0x3c0ex25,_0x3c0ex26){var _0x3c0ex2e={uniqueid:_0x3c0ex24[_0xa827[71]],node:_0x3c0ex25[_0xa827[72]],application:_0x3c0ex25[_0xa827[73]],data:_0x3c0ex25[_0xa827[182]]||null};ReportSquareDetail[_0xa827[78]](_0x3c0ex2e)[_0xa827[184]](function(_0x3c0ex28){_0x3c0ex28={code:200,result:_0xa827[183]};_0x3c0ex26(null,_0x3c0ex28)})[_0xa827[77]](function(_0x3c0ex27){console[_0xa827[26]](_0xa827[74]+_0x3c0ex25[_0xa827[73]]+_0xa827[75]+_0x3c0ex25[_0xa827[72]]+_0xa827[76],_0x3c0ex27);var _0x3c0ex28={code:200,result:_0xa827[183]};_0x3c0ex26(_0x3c0ex27,_0x3c0ex28)})};methods[_0xa827[185]]=function(_0x3c0ex24,_0x3c0ex25,_0x3c0ex26){console[_0xa827[26]](_0xa827[186]);var _0x3c0ex2e={uniqueid:_0x3c0ex24[_0xa827[71]],node:_0x3c0ex25[_0xa827[72]],application:_0x3c0ex25[_0xa827[73]],data:_[_0xa827[188]](_0x3c0ex25[_0xa827[187]])||null};ReportSquareDetail[_0xa827[78]](_0x3c0ex2e)[_0xa827[77]](function(_0x3c0ex27){console[_0xa827[26]](_0xa827[74]+_0x3c0ex25[_0xa827[73]]+_0xa827[75]+_0x3c0ex25[_0xa827[72]]+_0xa827[76],_0x3c0ex27)});console[_0xa827[26]](_0xa827[189]);sh[_0xa827[36]](_[_0xa827[188]](_0x3c0ex25[_0xa827[187]]),function(_0x3c0ex3b,_0x3c0ex3c){var _0x3c0ex3d=_0x3c0ex3c[_0xa827[190]](/(\r\n|\n|\r)/gm,_0xa827[63]);console[_0xa827[26]](_0xa827[191],_0x3c0ex3d);console[_0xa827[26]](_0xa827[192]);var _0x3c0ex30=getVariableName(_0x3c0ex25[_0xa827[86]]);setVariable(_0x3c0ex24,_0x3c0ex30,_0xa827[193]+_0x3c0ex3d+_0xa827[193],_0x3c0ex26)})};methods[_0xa827[2]]=function(_0x3c0ex24,_0x3c0ex25,_0x3c0ex26){console[_0xa827[26]](_0xa827[194]);console[_0xa827[26]](_0xa827[195]);_0x3c0ex24[_0xa827[36]](_0xa827[132],_0x3c0ex25[_0xa827[187]],_0x3c0ex25[_0xa827[196]],function(_0x3c0ex27,_0x3c0ex28){_0x3c0ex26(_0x3c0ex27,_0x3c0ex28)})};methods[_0xa827[197]]=function(_0x3c0ex24,_0x3c0ex25,_0x3c0ex26){console[_0xa827[26]](_0xa827[198]);if(!projects){getProjects(false)};var _0x3c0ex3e=_[_0xa827[40]](projects,{id:parseInt(_0x3c0ex25[_0xa827[199]])});console[_0xa827[26]](_0xa827[200]+_0x3c0ex3e[_0xa827[43]]+_0xa827[34]);_0x3c0ex24[_0xa827[36]](_0xa827[132],util[_0xa827[44]](_0xa827[201],_0x3c0ex3e[_0xa827[43]]),function(_0x3c0ex27,_0x3c0ex28){_0x3c0ex26(_0x3c0ex27,_0x3c0ex28)})};methods[_0xa827[202]]=function(_0x3c0ex24,_0x3c0ex25,_0x3c0ex26){console[_0xa827[26]](_0xa827[203]);var _0x3c0ex2a=[path[_0xa827[51]](config[_0xa827[127]],_0xa827[128],_0xa827[204]),_0x3c0ex25[_0xa827[205]],_0xa827[63],(_0x3c0ex25[_0xa827[206]]===_0xa827[110]?_0xa827[63]:_0x3c0ex25[_0xa827[206]]),_0xa827[183],_0xa827[207],_0xa827[63],_0x3c0ex25[_0xa827[137]]];console[_0xa827[26]](_0xa827[208]);_0x3c0ex24[_0xa827[36]](_0xa827[132],_0x3c0ex2a[_0xa827[51]](_0xa827[50]),function(_0x3c0ex27,_0x3c0ex28){_0x3c0ex26(_0x3c0ex27,_0x3c0ex28)})};methods[_0xa827[209]]=function(_0x3c0ex24,_0x3c0ex25,_0x3c0ex26){console[_0xa827[26]](_0xa827[210]);if(!dbConnections){getDbConnections(false)};var _0x3c0ex3f=_[_0xa827[40]](dbConnections,{id:parseInt(_0x3c0ex25[_0xa827[211]])});console[_0xa827[26]](_0xa827[212]);var _0x3c0ex2e={uniqueid:_0x3c0ex24[_0xa827[71]],node:_0x3c0ex25[_0xa827[72]],application:_0x3c0ex25[_0xa827[73]],data:_0x3c0ex25[_0xa827[213]]||null};ReportSquareDetail[_0xa827[78]](_0x3c0ex2e)[_0xa827[77]](function(_0x3c0ex27){console[_0xa827[26]](_0xa827[74]+_0x3c0ex25[_0xa827[73]]+_0xa827[75]+_0x3c0ex25[_0xa827[72]]+_0xa827[76],_0x3c0ex27)});try{db[_0xa827[215]](_0x3c0ex3f[_0xa827[214]]);var _0x3c0ex40=db[_0xa827[216]](_0x3c0ex25[_0xa827[213]]);db[_0xa827[217]]();setVariablesMatrix(_0x3c0ex24,_0x3c0ex25,_0x3c0ex26,_0x3c0ex40)}catch(e){console[_0xa827[26]](e[_0xa827[218]]);wait[_0xa827[90]](setVariable,_0x3c0ex24,_0xa827[219],_0xa827[172]);wait[_0xa827[90]](setVariable,_0x3c0ex24,_0xa827[220],e[_0xa827[218]])}};methods[_0xa827[221]]=function(_0x3c0ex24,_0x3c0ex25,_0x3c0ex26){console[_0xa827[26]](_0xa827[222]);console[_0xa827[26]](_0xa827[223]+_0x3c0ex25[_0xa827[224]]+_0xa827[225]);_0x3c0ex24[_0xa827[36]](_0xa827[49],util[_0xa827[44]](_0xa827[226],_0x3c0ex25[_0xa827[224]],_0x3c0ex25[_0xa827[227]]),function(_0x3c0ex27,_0x3c0ex28){_0x3c0ex26(_0x3c0ex27,_0x3c0ex28)})};methods[_0xa827[228]]=function(_0x3c0ex24,_0x3c0ex25,_0x3c0ex26){console[_0xa827[26]](_0xa827[229]);var _0x3c0ex28={code:200,result:_0xa827[110]};console[_0xa827[26]](_0xa827[230]);_0x3c0ex28[_0xa827[108]]=String(eval(_0x3c0ex25[_0xa827[231]])?_0xa827[172]:_0xa827[161]);console[_0xa827[26]](_0xa827[232]+_0x3c0ex28[_0xa827[108]]);_0x3c0ex26(null,_0x3c0ex28)};methods[_0xa827[233]]=function(_0x3c0ex24,_0x3c0ex25,_0x3c0ex26){console[_0xa827[26]](_0xa827[234]);console[_0xa827[26]](_0xa827[235]);_0x3c0ex24[_0xa827[233]]()};methods[_0xa827[236]]=function(_0x3c0ex24,_0x3c0ex25,_0x3c0ex26){console[_0xa827[26]](_0xa827[237]);var _0x3c0ex3c=(_0x3c0ex25[_0xa827[238]])?_0xa827[193]+_0x3c0ex25[_0xa827[238]]+_0xa827[193]:_0xa827[193]+_0x3c0ex25[_0xa827[72]]+_0xa827[193];console[_0xa827[26]](_0xa827[239]+_0x3c0ex3c);_0x3c0ex24[_0xa827[36]](_0xa827[240],_0x3c0ex3c,function(_0x3c0ex27,_0x3c0ex28){_0x3c0ex26(_0x3c0ex27,_0x3c0ex28)})};methods[_0xa827[241]]=function(_0x3c0ex24,_0x3c0ex25,_0x3c0ex26){console[_0xa827[26]](_0xa827[242]);console[_0xa827[26]](_0xa827[243]);_0x3c0ex24[_0xa827[29]](util[_0xa827[44]](_0xa827[244],_0x3c0ex25[_0xa827[245]],_0x3c0ex25[_0xa827[119]]),function(_0x3c0ex27,_0x3c0ex28){_0x3c0ex26(_0x3c0ex27,_0x3c0ex28)})};methods[_0xa827[246]]=function(_0x3c0ex24,_0x3c0ex25,_0x3c0ex26){console[_0xa827[26]](_0xa827[247]);console[_0xa827[26]](_0xa827[248]);var _0x3c0ex30=getVariableName(_0x3c0ex25[_0xa827[86]]);wait[_0xa827[90]](setVariable,_0x3c0ex24,_0x3c0ex30,_0x3c0ex25[_0xa827[249]])};function getVertices(_0x3c0ex42){return _[_0xa827[253]](_0x3c0ex42,function(_0x3c0ex2f,_0x3c0ex43,_0x3c0ex44){if(_0x3c0ex44===_0xa827[250]){return _0x3c0ex2f};if(_[_0xa827[87]](_0x3c0ex43)){_[_0xa827[252]](_0x3c0ex43,function(_0x3c0ex45,_0x3c0ex46){_0x3c0ex2f[_0x3c0ex45[_0xa827[251]][_0xa827[164]]]=_0x3c0ex45[_0xa827[251]];_0x3c0ex2f[_0x3c0ex45[_0xa827[251]][_0xa827[164]]][_0xa827[73]]=_0x3c0ex44});return _0x3c0ex2f};_0x3c0ex2f[_0x3c0ex43[_0xa827[251]][_0xa827[164]]]=_0x3c0ex43[_0xa827[251]];_0x3c0ex2f[_0x3c0ex43[_0xa827[251]][_0xa827[164]]][_0xa827[73]]=_0x3c0ex44;return _0x3c0ex2f},{})}function getTargetBySource(_0x3c0ex42,_0x3c0ex48,_0x3c0ex45){return _[_0xa827[105]](_[_0xa827[40]](_0x3c0ex42[_0xa827[250]],function(_0x3c0ex43){if(_0x3c0ex43[_0xa827[251]][_0xa827[254]]&&_0x3c0ex43[_0xa827[251]][_0xa827[255]]){if(_0x3c0ex43[_0xa827[251]][_0xa827[255]]===_0x3c0ex48){if(_0x3c0ex43[_0xa827[251]][_0xa827[256]]&&_0x3c0ex43[_0xa827[251]][_0xa827[256]]!==_0x3c0ex45){return false};return true}};return false}),_0xa827[257])}function replaceAllVariables(_0x3c0ex24,_0x3c0ex25,_0x3c0ex26){var _0x3c0ex4a=_0x3c0ex25;for(var _0x3c0ex46 in _0x3c0ex4a){var _0x3c0ex28=_0x3c0ex4a[_0x3c0ex46][_0xa827[258]](/{+(.*?)}/gi);if(_0x3c0ex28){console[_0xa827[26]](_0xa827[259],_0x3c0ex28);_0x3c0ex28[_0xa827[91]](function(_0x3c0ex4b,_0x3c0ex32){console[_0xa827[26]](_0xa827[260],_0x3c0ex28[_0x3c0ex32][_0xa827[261]](1,_0x3c0ex28[_0x3c0ex32][_0xa827[142]]-1));var _0x3c0ex45=wait[_0xa827[90]](getVariable,_0x3c0ex24,_0x3c0ex28[_0x3c0ex32][_0xa827[261]](1,_0x3c0ex28[_0x3c0ex32][_0xa827[142]]-1));console[_0xa827[26]](_0xa827[256],_0x3c0ex45);if(_0x3c0ex45[_0xa827[108]]){_0x3c0ex4a[_0x3c0ex46]=_0x3c0ex4a[_0x3c0ex46][_0xa827[190]](_0x3c0ex28[_0x3c0ex32],_0x3c0ex45[_0xa827[108]])}})}};_0x3c0ex4a[_0xa827[262]]=true;return _0x3c0ex4a}function xstart(_0x3c0ex24){var _0x3c0ex42=_0x3c0ex24[_0xa827[127]];var _0x3c0ex4d=_0x3c0ex24[_0xa827[263]];if(_0x3c0ex42[_0xa827[264]]){if(!_[_0xa827[87]](_0x3c0ex42[_0xa827[264]])){var _0x3c0ex48=_0x3c0ex42[_0xa827[264]][_0xa827[251]][_0xa827[164]];var _0x3c0ex28={};do{try{var _0x3c0ex25=_0x3c0ex4d[_0x3c0ex48][_0xa827[262]]?_0x3c0ex4d[_0x3c0ex48]:replaceAllVariables(_0x3c0ex24,_0x3c0ex4d[_0x3c0ex48]);if(_0x3c0ex25){if(_[_0xa827[265]](methods[_0x3c0ex25[_0xa827[73]]])){_0x3c0ex28=wait[_0xa827[90]](methods[_0x3c0ex25[_0xa827[73]]],_0x3c0ex24,_0x3c0ex25)}else {_0x3c0ex28=wait[_0xa827[90]](methods[_0xa827[236]],_0x3c0ex24,_0x3c0ex25)};if(_0x3c0ex28[_0xa827[155]]===200&&_0x3c0ex28[_0xa827[105]]!==_0xa827[144]){var _0x3c0ex4e=getTargetBySource(_0x3c0ex42,_0x3c0ex48,_0x3c0ex28[_0xa827[108]]);if(!_0x3c0ex4e){if(_0x3c0ex25[_0xa827[73]]===_0xa827[96]){if(_0x3c0ex25[_0xa827[99]]>0){_0x3c0ex4e=getTargetBySource(_0x3c0ex42,_0x3c0ex48,_0xa827[149]);if(!_0x3c0ex4e){_0x3c0ex4e=_0x3c0ex48}}};if(_0x3c0ex25[_0xa827[73]]===_0xa827[139]&&_0x3c0ex25[_0xa827[99]]>0){_0x3c0ex4e=_0x3c0ex48};if(_0x3c0ex25[_0xa827[73]]===_0xa827[178]){_0x3c0ex4e=getTargetBySource(_0x3c0ex42,_0x3c0ex48,_0xa827[113]);if(!_0x3c0ex4e){_0x3c0ex4e=_0x3c0ex48}}};_0x3c0ex48=_0x3c0ex4e}else {_0x3c0ex48=null}}else {_0x3c0ex48=null}}catch(err){console[_0xa827[26]](err)}}while(_0x3c0ex48);;console[_0xa827[26]](_0xa827[266]);_0x3c0ex24[_0xa827[233]]()}}}function xfinally(_0x3c0ex24){var _0x3c0ex42=_0x3c0ex24[_0xa827[127]];var _0x3c0ex4d=_0x3c0ex24[_0xa827[263]];if(_0x3c0ex42[_0xa827[267]]){if(!_[_0xa827[87]](_0x3c0ex42[_0xa827[267]])){var _0x3c0ex48=_0x3c0ex42[_0xa827[267]][_0xa827[251]][_0xa827[164]];var _0x3c0ex28={};do{try{var _0x3c0ex25=replaceAllVariables(_0x3c0ex24,_0x3c0ex4d[_0x3c0ex48]);if(_0x3c0ex25){if(_[_0xa827[265]](methods[_0x3c0ex25[_0xa827[73]]])){_0x3c0ex28=wait[_0xa827[90]](methods[_0x3c0ex25[_0xa827[73]]],_0x3c0ex24,_0x3c0ex25)}else {_0x3c0ex28=wait[_0xa827[90]](methods[_0xa827[236]],_0x3c0ex24,_0x3c0ex25)};if(_0x3c0ex28[_0xa827[155]]===200&&_0x3c0ex28[_0xa827[105]]!==_0xa827[144]){var _0x3c0ex4e=getTargetBySource(_0x3c0ex42,_0x3c0ex48,_0x3c0ex28[_0xa827[108]]);if(!_0x3c0ex4e){if(_0x3c0ex25[_0xa827[73]]===_0xa827[96]){if(_0x3c0ex25[_0xa827[99]]>0){_0x3c0ex4e=getTargetBySource(_0x3c0ex42,_0x3c0ex48,_0xa827[149]);if(!_0x3c0ex4e){_0x3c0ex4e=_0x3c0ex48}}};if(_0x3c0ex25[_0xa827[73]]===_0xa827[139]&&_0x3c0ex25[_0xa827[99]]>0){_0x3c0ex4e=_0x3c0ex48}};_0x3c0ex48=_0x3c0ex4e}else {_0x3c0ex48=null}}else {_0x3c0ex48=null}}catch(err){console[_0xa827[26]](err)}}while(_0x3c0ex48);;_0x3c0ex24[_0xa827[233]]();console[_0xa827[26]](_0xa827[268])}};_0x3c0ex24[_0xa827[269]]()}function main(_0x3c0ex24){_0x3c0ex24[_0xa827[272]](_0xa827[270],function(_0x3c0ex27){console[_0xa827[26]](_0xa827[271],_0x3c0ex27)});_0x3c0ex24[_0xa827[272]](_0xa827[273],function(){console[_0xa827[26]](_0xa827[274])});_0x3c0ex24[_0xa827[272]](_0xa827[233],function(){if(_0x3c0ex24[_0xa827[267]]){_0x3c0ex24[_0xa827[267]]=false;console[_0xa827[26]](_0xa827[275]);wait[_0xa827[276]](xfinally,_0x3c0ex24)}else {ReportSquare[_0xa827[279]]({leaveAt:moment()[_0xa827[44]](_0xa827[278])},{where:{uniqueid:_0x3c0ex24[_0xa827[71]]}})[_0xa827[77]](function(_0x3c0ex27){console[_0xa827[26]](_0xa827[277],_0x3c0ex27)});console[_0xa827[26]](_0xa827[280])}});_0x3c0ex24[_0xa827[272]](_0xa827[103],function(_0x3c0ex28){});_0x3c0ex24[_0xa827[272]](_0xa827[281],function(_0x3c0ex51){console[_0xa827[26]](_0x3c0ex51);console[_0xa827[26]](_0xa827[282]+_0x3c0ex51[_0xa827[283]]+_0xa827[284]+_0x3c0ex51[_0xa827[285]]);var _0x3c0ex52={network:_0x3c0ex51[_0xa827[286]],network_script:_0x3c0ex51[_0xa827[287]],request:_0x3c0ex51[_0xa827[288]],channel:_0x3c0ex51[_0xa827[289]],language:_0x3c0ex51[_0xa827[290]],type:_0x3c0ex51[_0xa827[291]],uniqueid:_0x3c0ex51[_0xa827[285]],version:_0x3c0ex51[_0xa827[292]],callerid:_0x3c0ex51[_0xa827[283]],calleridname:_0x3c0ex51[_0xa827[293]],callingpres:_0x3c0ex51[_0xa827[294]],callingani2:_0x3c0ex51[_0xa827[295]],callington:_0x3c0ex51[_0xa827[296]],callingtns:_0x3c0ex51[_0xa827[297]],dnid:_0x3c0ex51[_0xa827[298]],rdnis:_0x3c0ex51[_0xa827[299]],context:_0x3c0ex51[_0xa827[300]],extension:_0x3c0ex51[_0xa827[301]],priority:_0x3c0ex51[_0xa827[302]],enhanced:_0x3c0ex51[_0xa827[303]],accountcode:_0x3c0ex51[_0xa827[304]],threadid:_0x3c0ex51[_0xa827[305]],project_name:_0x3c0ex51[_0xa827[306]],joinAt:moment()[_0xa827[44]](_0xa827[278])};ReportSquare[_0xa827[78]](_0x3c0ex52)[_0xa827[77]](function(_0x3c0ex27){console[_0xa827[26]](_0xa827[307],_0x3c0ex27)});if(_0x3c0ex51[_0xa827[306]]){SquareProject[_0xa827[315]]({where:{name:_0x3c0ex51[_0xa827[306]]},attributes:[_0xa827[164],_0xa827[309]]})[_0xa827[184]](function(_0x3c0ex3e){if(_0x3c0ex3e){if(_0x3c0ex3e[_0xa827[309]]){xml[_0xa827[312]](_0x3c0ex3e[_0xa827[309]],{normalizeTags:true,explicitArray:false},function(_0x3c0ex27,_0x3c0ex2f){var _0x3c0ex42=_0x3c0ex2f[_0xa827[310]][_0xa827[127]];if(_0x3c0ex42){_0x3c0ex24[_0xa827[127]]=_0x3c0ex42;_0x3c0ex24[_0xa827[267]]=true;_0x3c0ex24[_0xa827[71]]=_0x3c0ex51[_0xa827[285]];_0x3c0ex24[_0xa827[263]]=getVertices(_0x3c0ex42);wait[_0xa827[276]](xstart,_0x3c0ex24)}else {console[_0xa827[26]](_0xa827[311]);_0x3c0ex24[_0xa827[269]]()}})}else {console[_0xa827[26]](_0xa827[313]);_0x3c0ex24[_0xa827[269]]()}}else {console[_0xa827[26]](_0xa827[314]);_0x3c0ex24[_0xa827[269]]()}})[_0xa827[77]](function(_0x3c0ex27){console[_0xa827[26]](_0xa827[308],_0x3c0ex27);_0x3c0ex24[_0xa827[269]]()})}else {console[_0xa827[26]](_0xa827[316]);_0x3c0ex24[_0xa827[269]]()}})}function splitInterval(_0x3c0ex38){var _0x3c0ex54={};var _0x3c0ex3a=_0x3c0ex38[_0xa827[317]](_0xa827[50]);var _0x3c0ex55;_0x3c0ex3a[_0xa827[91]](function(_0x3c0ex56,_0x3c0ex32){switch(_0x3c0ex32){case 0:if(_0x3c0ex56!==_0xa827[318]){_0x3c0ex55=_0x3c0ex56[_0xa827[317]](_0xa827[113]);_0x3c0ex54[_0xa827[319]]=moment(_0x3c0ex55[0],_0xa827[320]);_0x3c0ex54[_0xa827[321]]=moment(_0x3c0ex55[1],_0xa827[320])}else {_0x3c0ex54[_0xa827[319]]=null;_0x3c0ex54[_0xa827[321]]=null};break;case 1:if(_0x3c0ex56!==_0xa827[318]){_0x3c0ex55=_0x3c0ex56[_0xa827[317]](_0xa827[113]);_0x3c0ex54[_0xa827[322]]=weekDaysCollection[_0x3c0ex55[0]];_0x3c0ex54[_0xa827[323]]=_0x3c0ex55[1]?weekDaysCollection[_0x3c0ex55[1]]:null}else {_0x3c0ex54[_0xa827[322]]=null;_0x3c0ex54[_0xa827[323]]=null};break;case 2:if(_0x3c0ex56!==_0xa827[318]){_0x3c0ex55=_0x3c0ex56[_0xa827[317]](_0xa827[113]);_0x3c0ex54[_0xa827[324]]=_0x3c0ex55[0];_0x3c0ex54[_0xa827[325]]=_0x3c0ex55[1]?_0x3c0ex55[1]:null}else {_0x3c0ex54[_0xa827[324]]=null;_0x3c0ex54[_0xa827[325]]=null};break;case 3:if(_0x3c0ex56!==_0xa827[318]){_0x3c0ex55=_0x3c0ex56[_0xa827[317]](_0xa827[113]);_0x3c0ex54[_0xa827[326]]=monthsCollection[_0x3c0ex55[0]];_0x3c0ex54[_0xa827[327]]=_0x3c0ex55[1]?monthsCollection[_0x3c0ex55[1]]:null}else {_0x3c0ex54[_0xa827[326]]=null;_0x3c0ex54[_0xa827[327]]=null};break;default:}});return _0x3c0ex54}function isIntervalValid(_0x3c0ex38){var _0x3c0ex58=moment()[_0xa827[44]](_0xa827[320]);var _0x3c0ex59=moment()[_0xa827[44]](_0xa827[328]);var _0x3c0ex5a=moment()[_0xa827[44]](_0xa827[329]);var _0x3c0ex5b=moment()[_0xa827[44]](_0xa827[330]);var _0x3c0ex5c,_0x3c0ex5d,_0x3c0ex5e,_0x3c0ex5f;var _0x3c0ex60=[1,2,3,4,5,6,7,8,9,10,11,12];var _0x3c0ex61=[1,2,3,4,5,6,7];var _0x3c0ex62=[];for(var _0x3c0ex63=1;_0x3c0ex63<=31;_0x3c0ex63++){_0x3c0ex62[_0xa827[331]](_0x3c0ex63)};_0x3c0ex5c=(_0x3c0ex38[_0xa827[319]]&&_0x3c0ex38[_0xa827[321]])?moment(_0x3c0ex58,_0xa827[320])[_0xa827[332]](moment(_0x3c0ex38[_0xa827[319]],_0xa827[320]),moment(_0x3c0ex38[_0xa827[321]],_0xa827[320])):true;if(_0x3c0ex38[_0xa827[322]]){if(_0x3c0ex38[_0xa827[323]]){var _0x3c0ex64=_[_0xa827[165]](_0x3c0ex61,function(_0x3c0ex31){return (_0x3c0ex31>=_0x3c0ex38[_0xa827[322]])||(_0x3c0ex31<=_0x3c0ex38[_0xa827[323]])});_0x3c0ex5d=(_0x3c0ex64[_0xa827[333]](parseInt(_0x3c0ex59))!== -1)?true:false}else {_0x3c0ex5d=(parseInt(_0x3c0ex59)===_0x3c0ex38[_0xa827[322]])?true:false}}else {_0x3c0ex5d=true};if(_0x3c0ex38[_0xa827[324]]){if(_0x3c0ex38[_0xa827[325]]){var _0x3c0ex65=_[_0xa827[165]](_0x3c0ex62,function(_0x3c0ex31){return (_0x3c0ex31>=_0x3c0ex38[_0xa827[324]])||(_0x3c0ex31<=_0x3c0ex38[_0xa827[325]])});_0x3c0ex5e=(_0x3c0ex65[_0xa827[333]](parseInt(_0x3c0ex5a))!== -1)?true:false}else {_0x3c0ex5e=(parseInt(_0x3c0ex5a)===_0x3c0ex38[_0xa827[324]])?true:false}}else {_0x3c0ex5e=true};if(_0x3c0ex38[_0xa827[326]]){if(_0x3c0ex38[_0xa827[327]]){var _0x3c0ex66=_[_0xa827[165]](_0x3c0ex60,function(_0x3c0ex31){return (_0x3c0ex31>=_0x3c0ex38[_0xa827[326]])||(_0x3c0ex31<=_0x3c0ex38[_0xa827[327]])});_0x3c0ex5f=(_0x3c0ex66[_0xa827[333]](parseInt(_0x3c0ex5b))!== -1)?true:false}else {_0x3c0ex5f=(parseInt(_0x3c0ex5b)===_0x3c0ex38[_0xa827[326]])?true:false}}else {_0x3c0ex5f=true};return _0x3c0ex5c&&_0x3c0ex5d&&_0x3c0ex5e&&_0x3c0ex5f}function setVariable(_0x3c0ex24,_0x3c0ex68,_0x3c0ex45,_0x3c0ex26){console[_0xa827[26]](_0xa827[334]);console[_0xa827[26]](_0xa827[335]+_0x3c0ex68+_0xa827[336],_0x3c0ex45);_0x3c0ex24[_0xa827[29]](util[_0xa827[44]](_0xa827[157],_0x3c0ex68,_0x3c0ex45),function(_0x3c0ex27,_0x3c0ex28){if(_0x3c0ex26){_0x3c0ex26(_0x3c0ex27,_0x3c0ex28)}})}function getVariableName(_0x3c0ex6a){if(!variables){getVariables(false)};var _0x3c0ex4b={name:_0xa827[337]};if(_0x3c0ex6a){_0x3c0ex4b=_[_0xa827[40]](variables,{id:parseInt(_0x3c0ex6a)})};return _0x3c0ex4b[_0xa827[43]]}function setVariablesMatrix(_0x3c0ex24,_0x3c0ex25,_0x3c0ex26,_0x3c0ex40){var _0x3c0ex30=getVariableName(_0x3c0ex25[_0xa827[86]]);_[_0xa827[91]](_0x3c0ex40,function(_0x3c0ex6c,_0x3c0ex32){_[_0xa827[339]](_0x3c0ex6c,function(_0x3c0ex45,_0x3c0ex46){wait[_0xa827[90]](setVariable,_0x3c0ex24,_0x3c0ex30+_0xa827[88]+_0x3c0ex32+_0xa827[338]+_0x3c0ex46+_0xa827[89],_0x3c0ex45)})})}function getVariable(_0x3c0ex24,_0x3c0ex68,_0x3c0ex26){_0x3c0ex24[_0xa827[343]](_0x3c0ex68,function(_0x3c0ex27,_0x3c0ex28){if(_0x3c0ex28[_0xa827[155]]===200&&_0x3c0ex28[_0xa827[105]]!==_0xa827[110]){_0x3c0ex28[_0xa827[108]]=_0x3c0ex28[_0xa827[105]][_0xa827[261]](_0x3c0ex28[_0xa827[105]][_0xa827[341]](_0xa827[340])+1,_0x3c0ex28[_0xa827[105]][_0xa827[341]](_0xa827[342]))}else {_0x3c0ex28[_0xa827[108]]=_0xa827[63]};_0x3c0ex26(null,_0x3c0ex28)})}function getFilePath(_0x3c0ex6a){if(!sounds){getSounds(false)};if(_0x3c0ex6a>0){var _0x3c0ex6f=_[_0xa827[40]](sounds,{id:parseInt(_0x3c0ex6a)});return util[_0xa827[44]](_0xa827[344],config[_0xa827[345]],_0x3c0ex6f[_0xa827[346]])};return _0xa827[63]}function getUsers(_0x3c0ex71){User[_0xa827[348]]()[_0xa827[184]](function(_0x3c0ex2f){users=_[_0xa827[347]](_0x3c0ex2f);if(_0x3c0ex71){synchUpdates(User,users,_0xa827[164])}})[_0xa827[77]](function(_0x3c0ex27){console[_0xa827[26]](_0x3c0ex27)})}function getQueues(_0x3c0ex71){VoiceQueue[_0xa827[348]]()[_0xa827[184]](function(_0x3c0ex2f){queues=_[_0xa827[347]](_0x3c0ex2f);if(_0x3c0ex71){synchUpdates(VoiceQueue,queues,_0xa827[43])}})[_0xa827[77]](function(_0x3c0ex27){console[_0xa827[26]](_0x3c0ex27)})}function getTrunks(_0x3c0ex71){Trunk[_0xa827[348]]()[_0xa827[184]](function(_0x3c0ex2f){trunks=_[_0xa827[347]](_0x3c0ex2f);if(_0x3c0ex71){synchUpdates(Trunk,trunks,_0xa827[164])}})[_0xa827[77]](function(_0x3c0ex27){console[_0xa827[26]](_0x3c0ex27)})}function getVariables(_0x3c0ex71){Variable[_0xa827[348]]()[_0xa827[184]](function(_0x3c0ex2f){variables=_[_0xa827[347]](_0x3c0ex2f);if(_0x3c0ex71){synchUpdates(Variable,variables,_0xa827[164])}})[_0xa827[77]](function(_0x3c0ex27){console[_0xa827[26]](_0x3c0ex27)})}function getDbConnections(_0x3c0ex71){SquareOdbc[_0xa827[348]]()[_0xa827[184]](function(_0x3c0ex2f){dbConnections=_[_0xa827[347]](_0x3c0ex2f);if(_0x3c0ex71){synchUpdates(SquareOdbc,dbConnections,_0xa827[164])}})[_0xa827[77]](function(_0x3c0ex27){console[_0xa827[26]](_0x3c0ex27)})}function getIntervals(_0x3c0ex71){Interval[_0xa827[348]]()[_0xa827[184]](function(_0x3c0ex2f){intervals=_[_0xa827[347]](_0x3c0ex2f);if(_0x3c0ex71){synchUpdates(Interval,intervals,_0xa827[164])}})[_0xa827[77]](function(_0x3c0ex27){console[_0xa827[26]](_0x3c0ex27)})}function getProjects(_0x3c0ex71){SquareProject[_0xa827[348]]()[_0xa827[184]](function(_0x3c0ex2f){projects=_[_0xa827[347]](_0x3c0ex2f);if(_0x3c0ex71){synchUpdates(SquareProject,projects,_0xa827[164])}})[_0xa827[77]](function(_0x3c0ex27){console[_0xa827[26]](_0x3c0ex27)})}function getSounds(_0x3c0ex71){Sound[_0xa827[348]]()[_0xa827[184]](function(_0x3c0ex2f){sounds=_[_0xa827[347]](_0x3c0ex2f);if(_0x3c0ex71){synchUpdates(Sound,sounds,_0xa827[164])}})[_0xa827[77]](function(_0x3c0ex27){console[_0xa827[26]](_0x3c0ex27)})}function synchUpdates(_0x3c0ex7a,_0x3c0ex7b,_0x3c0ex46){var _0x3c0ex7c={};_0x3c0ex7a[_0xa827[349]](function(_0x3c0ex7d){_0x3c0ex7c[_0x3c0ex46]=_0x3c0ex7d[_0x3c0ex46];updateCollection(_0x3c0ex7b,_0x3c0ex7c,_0x3c0ex7d)});_0x3c0ex7a[_0xa827[350]](function(_0x3c0ex7d){_0x3c0ex7c[_0x3c0ex46]=_0x3c0ex7d[_0x3c0ex46];updateCollection(_0x3c0ex7b,_0x3c0ex7c,_0x3c0ex7d)});_0x3c0ex7a[_0xa827[352]](function(_0x3c0ex7d){_0x3c0ex7c[_0x3c0ex46]=_0x3c0ex7d[_0x3c0ex46];_[_0xa827[351]](_0x3c0ex7b,_0x3c0ex7c)})}function updateCollection(_0x3c0ex7b,_0x3c0ex7c,_0x3c0ex7d){var _0x3c0ex7f=_[_0xa827[40]](_0x3c0ex7b,_0x3c0ex7c);var _0x3c0ex32=_0x3c0ex7b[_0xa827[333]](_0x3c0ex7f);if(_0x3c0ex7f){_[_0xa827[353]](_0x3c0ex7b[_0x3c0ex32],_0x3c0ex7d)}else {_0x3c0ex7b[_0xa827[354]](_0x3c0ex7d)}}function getPort(){Settings[_0xa827[315]]()[_0xa827[184]](function(_0x3c0ex2f){agiPort=_0x3c0ex2f[_0xa827[355]]})[_0xa827[77]](function(_0x3c0ex27){console[_0xa827[26]](_0x3c0ex27)})}module[_0xa827[356]]=function(){console[_0xa827[26]](_0xa827[357]);getPort();var _0x3c0ex81=agi[_0xa827[359]](main)[_0xa827[358]](agiPort?agiPort:4573);getUsers(true);getQueues(true);getTrunks(true);getVariables(true);getIntervals(true);getProjects(true);getSounds(true);getDbConnections(true)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+
+var agi = require('agi');
+var util = require('util');
+var moment = require('moment');
+var xml = require('xml2js');
+var wait = require('wait.for');
+var sr = require('simple-random');
+var path = require('path');
+var config = require('../config/environment');
+var sh = require('shelljs');
+
+var db = require("odbc")();
+
+var SquareProject = require('../models').SquareProject;
+var Variable = require('../models').Variable;
+var SquareOdbc = require('../models').SquareOdbc;
+var Settings = require('../models').Settings;
+var User = require('../models').User;
+var VoiceQueue = require('../models').VoiceQueue;
+var Trunk = require('../models').Trunk;
+var Interval = require('../models').Interval;
+var Sound = require('../models').Sound;
+var ReportSquare = require('../models').ReportSquare;
+var ReportSquareDetail = require('../models').ReportSquareDetail;
+// var TempTable = require('../models').TempTable;
+// var FakeTable = require('../models').FakeTable;
+var users, trunks, variables, intervals, projects, sounds, queues, dbConnections, generalUniqueId;
+var agiPort;
+var weekDaysCollection = {
+  mon: 1,
+  tue: 2,
+  wed: 3,
+  thu: 4,
+  fri: 5,
+  sat: 6,
+  sun: 7
+};
+var monthsCollection = {
+  jan: 1,
+  feb: 2,
+  mar: 3,
+  apr: 4,
+  may: 5,
+  jun: 6,
+  jul: 7,
+  aug: 8,
+  sep: 9,
+  oct: 10,
+  nov: 11,
+  dec: 12
+};
+var methods = {};
+
+methods.answer = function(context, vertex, callback) {
+  console.log('--ANSWER BLOCK--');
+  console.log('Answering the call...');
+  context.send('ANSWER\n', function(err, res) {
+    callback(err, res);
+  });
+};
+
+methods.custom_app = function(context, vertex, callback) {
+  console.log('--CUSTOM APP BLOCK--');
+  console.log('Executing custom app "' + vertex.application + '"...');
+  context.exec(vertex.application, vertex.options, function(err, res) {
+    if (callback) {
+      callback(err, res);
+    }
+  });
+};
+
+
+methods.dial = function(context, vertex, callback) {
+  console.log('--INTERNAL_DIAL BLOCK--');
+  if (!users) {
+    getUsers(false);
+  }
+  var sip = _.find(users, {
+    id: parseInt(vertex.sip_id)
+  });
+  console.log('Calling ' + util.format('SIP/%s', sip.name) + '...');
+  var parameters = [util.format('SIP/%s', sip.name), vertex.timeout, vertex.opts, vertex.url];
+  context.exec('DIAL', parameters.join(','),
+    function(err, res) {
+      callback(err, res);
+    });
+};
+
+methods.ext_dial = function(context, vertex, callback) {
+  console.log('--EXTERNAL_DIAL BLOCK--');
+  if (!trunks) {
+    getTrunks(false);
+  }
+  var trunk = _.find(trunks, {
+    id: parseInt(vertex.trunk_id)
+  });
+  console.log('Calling ' + util.format('SIP/%s', trunk.name) + '...');
+  var parameters = [util.format('SIP/%s@%s', vertex.phone, trunk.name), vertex.timeout, vertex.opts, vertex.url];
+  context.exec('DIAL', parameters.join(','),
+    function(err, res) {
+      callback(err, res);
+    });
+};
+
+methods.queue = function(context, vertex, callback) {
+  console.log('--QUEUE BLOCK--');
+  if (!queues) {
+    getQueues(false);
+  }
+  var queue = _.find(queues, {
+    name: vertex.queue_id
+  });
+  var announceOverride = getFilePath(vertex.file_id);
+  var parameters = [queue.name, vertex.opts, vertex.url, announceOverride, vertex.timeout, vertex.agi, vertex.macro, vertex.gosub, '', vertex.position];
+  console.log('Joining ' + queue.name + ' queue...');
+  context.exec('QUEUE', parameters.join(','), function(err, res) {
+    callback(err, res);
+  });
+};
+
+methods.voicemail = function(context, vertex, callback) {
+  console.log('--VOICEMAIL BLOCK--');
+  var parameters = [vertex.mailbox, vertex.opts];
+  var squareDetail = {
+    uniqueid: context.uniqueid,
+    node: vertex.label,
+    application: vertex.tag,
+    data: parameters.join(',') || null
+  }
+  ReportSquareDetail
+    .create(squareDetail)
+    .catch(function(err) {
+      console.log('Error saving ' + vertex.tag + ':' + vertex.label + ' block log', err);
+    });
+  console.log('Starting voicemail recording...');
+  context.exec('VOICEMAIL', parameters.join(','), function(err, res) {
+    callback(err, res);
+  });
+};
+
+// methods.callback = function(context, vertex, callback) {
+//   context.send('ANSWER\n', function(err, res) {
+//     callback(err, res);
+//   });
+// };
+
+methods.math = function(context, vertex, callback) {
+  console.log('--MATH BLOCK--');
+  console.log('Calculating expression...');
+  var result = eval(vertex.operation);
+  console.log('Saving result in variable...');
+  var varName = getVariableName(vertex.variable_id);
+  if (_.isArray(result)) {
+    result.forEach(function(elem, index) {
+      wait.for(setVariable, context, varName + '[' + index + ']', elem);
+    });
+  } else {
+    wait.for(setVariable, context, varName, result);
+  }
+}
+
+// methods.background = function(context, vertex, callback) {
+//   var parameters = [getFilePath(vertex.file_id), vertex.opts];
+//   context.exec('BACKGROUND', parameters.join('|'), function(err, res) {
+//     callback(err, res);
+//   });
+// };
+
+methods.playback = function(context, vertex, callback) {
+  console.log('--PLAYBACK BLOCK--');
+  var audiofile = getFilePath(vertex.file_id);
+  // var audiofile = '/var/www/html/files/sounds/d0269ff87187df665ece75538e4cddfd';
+  var parameters = [audiofile, vertex.opts];
+  console.log('Executing playback...');
+  context.exec('PLAYBACK', parameters.join(','), function(err, res) {
+    callback(err, res);
+  });
+};
+
+methods.menu = function(context, vertex, callback) {
+  console.log('--MENU BLOCK--');
+  var res = {};
+  console.log('There are ' + vertex.retry + ' retries');
+  if (vertex.retry > 0) {
+    vertex.retry--;
+    var announce = getFilePath(vertex.file_id);
+    // var announce = '/var/www/html/files/sounds/b19642d2f71e9cfffbd783fcc79c7415';
+    // console.log(announce);
+    console.log('Announcing and waiting for user entry...');
+    context.send(util.format('GET DATA %s %s %s\n', announce, parseInt(vertex.response) * 1000, vertex.digit),
+      function(err, res) {
+        var squareDetail = {
+          uniqueid: context.uniqueid,
+          node: vertex.label,
+          application: vertex.tag,
+          data: res.result || null
+        }
+        ReportSquareDetail
+          .create(squareDetail)
+          .catch(function(err) {
+            console.log('Error saving ' + vertex.tag + ':' + vertex.label + ' block log', err);
+          });
+        if (res.result !== ' (timeout)') {
+          if (vertex.variable_id) {
+            console.log('Saving user entry in a variable...');
+            var varName = getVariableName(vertex.variable_id);
+            setVariable(context, varName, res.result, function() {
+              res.data = res.result;
+              callback(null, res);
+            });
+            // setVariable(context, variableId, res.result);
+          }
+
+        } else {
+          console.log('Menu timeout!');
+          res = {
+            code: 200,
+            result: '0',
+            data: 't'
+          };
+          callback(null, res);
+        }
+      });
+
+  } else {
+    console.log('Run out of retries!');
+    res = {
+      code: 200,
+      result: '0',
+      data: '-'
+    };
+    callback(null, res);
+  }
+};
+
+methods.saynumber = function(context, vertex, callback) {
+  console.log('--SAYNUMBER BLOCK--');
+  console.log('Saying number...');
+  context.send(util.format('SAY NUMBER %s "%s"\n', vertex.number, vertex.escape_digits),
+    function(err, res) {
+      callback(err, res);
+    });
+};
+
+methods.sayphonetic = function(context, vertex, callback) {
+  console.log('--SAYPHONETIC BLOCK--');
+  console.log('Saying phonetic...');
+  context.send(util.format('SAY PHONETIC %s "%s"\n', vertex.text, vertex.escape_digits),
+    function(err, res) {
+      callback(err, res);
+    });
+};
+
+methods.tts = function(context, vertex, callback) {
+  console.log('--GOOGLE_TTS BLOCK--');
+  var parameters = [path.join(config.root, 'server/config/agi_scripts', 'googletts.agi'), encodeURIComponent(vertex.text), vertex.google_tts_language];
+  // var parameters = ['/var/www/html/agisquare/agiscripts/googletts.agi', encodeURIComponent(vertex.text), vertex.google_tts_language];
+  console.log('Calling Google TTS API...');
+  context.exec('AGI', parameters.join(','),
+    function(err, res) {
+      callback(err, res);
+    });
+};
+
+methods.ispeechtts = function(context, vertex, callback) {
+  console.log('--ISPEECH_TTS BLOCK--');
+  // var parameters = [path.join(config.root, 'server/config/agi_scripts', 'ispeech-tts.agi'), encodeURIComponent(vertex.text), vertex.ispeech_tts_language, '', '', vertex.key];
+  var parameters = ['/var/www/html/agisquare/agiscripts/ispeech-tts.agi', encodeURIComponent(vertex.text), vertex.ispeech_tts_language, '', '', vertex.key];
+  console.log('Calling iSpeech TTS API...');
+  context.exec('AGI', parameters.join(','),
+    function(err, res) {
+      callback(err, res);
+    });
+};
+
+methods.getdigits = function(context, vertex, callback) {
+  console.log('--GETDIGITS BLOCK--');
+  var res = {};
+  console.log('There are ' + vertex.retry + ' retries');
+  if (vertex.retry > 0) {
+    vertex.retry--;
+    var announce = getFilePath(vertex.file_id);
+    // var announce = '/var/www/html/files/sounds/b19642d2f71e9cfffbd783fcc79c7415';
+    console.log('Announcing and waiting for user entry...');
+    context.send(util.format('GET DATA %s %s %s\n', announce, parseInt(vertex.response) * 1000, vertex.maxdigit),
+      function(err, res) {
+        var squareDetail = {
+          uniqueid: context.uniqueid,
+          node: vertex.label,
+          application: vertex.tag,
+          data: res.result || null
+        }
+        ReportSquareDetail
+          .create(squareDetail)
+          .catch(function(err) {
+            console.log('Error saving ' + vertex.tag + ':' + vertex.label + ' block log', err);
+          });
+        if (res.result && res.result.length >= parseInt(vertex.mindigit)) {
+          if (res.result !== '-1') {
+            console.log('There is a result, is over the minimum length and not due to an hangup!');
+            if (vertex.variable_id) {
+              console.log('Saving user entry in a variable...');
+              var varName = getVariableName(vertex.variable_id);
+              setVariable(context, varName, res.result, function() {
+                res = {
+                  code: 200,
+                  result: '0',
+                  data: 'x'
+                };
+                callback(null, res);
+              });
+            }
+          } else {
+            console.log('Channel hangup!');
+            res = {
+              code: 500,
+              result: '-1'
+            };
+            callback(null, res);
+          }
+        } else {
+          console.log('No entry or not long enough!');
+          res = {
+            code: 200,
+            result: '0',
+            data: 'i'
+          };
+          callback(null, res);
+        }
+      });
+  } else {
+    console.log('Run out of retries!');
+    res = {
+      code: 500,
+      result: '-1'
+    };
+    callback(null, res);
+  }
+};
+
+methods.record = function(context, vertex, callback) {
+  console.log('--RECORD BLOCK--');
+  var saveName = sr();
+  // FakeTable
+  //   .create({
+  //     name: vertex.name,
+  //     filename: saveName
+  //   })
+  //   .then(function() {
+  console.log('Starting call recording...');
+  context.send(util.format('RECORD FILE %s wav "%s" %s %s %s %s\n', path.join(config.root, 'server/files/recordings', saveName), vertex.escape_digits, vertex.timeout, null, true, null), function(
+    err, res) {
+    if (res.code === 200 && res.result !== '-1') {
+      console.log('Saving recording filename in RECORDING_SAVENAME variable...');
+      context.send(util.format('SET VARIABLE %s %s\n', 'RECORDING_SAVENAME', saveName), function(err, res) {
+        callback(err, res);
+      });
+    } else {
+      callback(err, res);
+    }
+  });
+  // })
+  // .catch(function(err) {
+  //   console.log(err);
+  // });
+};
+
+methods.gotoiftime = function(context, vertex, callback) { //single or multiple intervals
+  console.log('--GOTOIFTIME BLOCK--');
+  var res;
+  var valid = 'false';
+  var gotoIntervals;
+  if (!intervals) {
+    getIntervals(false);
+  }
+  var interval = _.find(intervals, {
+    id: parseInt(vertex.interval_id)
+  });
+  if (!interval.IntervalId) {
+    gotoIntervals = _.filter(intervals, {
+      IntervalId: parseInt(interval.id)
+    });
+  }
+  if (gotoIntervals) {
+    console.log('Is a group of intervals!');
+    if (gotoIntervals.length) {
+      console.log('There are ' + gotoIntervals.length + ' intervals!');
+      var subInterval;
+      console.log('Checking if at least one interval is valid...');
+      gotoIntervals.forEach(function(elem, index) {
+        subInterval = splitInterval(elem.interval);
+        if (isIntervalValid(subInterval)) {
+          console.log('Interval ' + index + ' is valid!');
+          valid = 'true';
+        }
+      });
+    } else {
+      console.log('There are no sub intervals, so it will be always true!');
+      valid = 'true';
+    }
+  } else {
+    console.log('Is a single interval!');
+    var splittedInterval = splitInterval(interval.interval);
+    if (isIntervalValid(splittedInterval)) {
+      console.log('The interval is valid!');
+      valid = 'true';
+    }
+  }
+  console.log('The final result for the intervals is "' + valid + '"!');
+  res = {
+    code: 200,
+    result: '0',
+    data: valid
+  };
+  callback(null, res);
+};
+
+methods.vswitch = function(context, vertex, callback) {
+  console.log('--VARIABLE_SWITCH BLOCK--');
+  console.log('Getting the variable value and searching the right exit...');
+  var varName = getVariableName(vertex.variable_id);
+  getVariable(context, varName, function(err, res) {
+    if (!res.data) {
+      res.data = '-';
+    }
+    callback(null, res);
+  });
+
+};
+
+methods.goal = function(context, vertex, callback) {
+  var squareDetail = {
+    uniqueid: context.uniqueid,
+    node: vertex.label,
+    application: vertex.tag,
+    data: vertex.goalname || null
+  }
+  ReportSquareDetail
+    .create(squareDetail)
+    .then(function(res) {
+      res = {
+        code: 200,
+        result: '1'
+      };
+      callback(null, res);
+    })
+    .catch(function(err) {
+      console.log('Error saving ' + vertex.tag + ':' + vertex.label + ' block log', err);
+      var res = {
+        code: 200,
+        result: '1'
+      };
+      callback(err, res);
+    });
+};
+
+methods.system = function(context, vertex, callback) {
+  console.log('--SYSTEM BLOCK--');
+  var squareDetail = {
+    uniqueid: context.uniqueid,
+    node: vertex.label,
+    application: vertex.tag,
+    data: _.trim(vertex.command) || null
+  }
+  ReportSquareDetail
+    .create(squareDetail)
+    .catch(function(err) {
+      console.log('Error saving ' + vertex.tag + ':' + vertex.label + ' block log', err);
+    });
+  console.log('Executing the system command...');
+  sh.exec(_.trim(vertex.command), function(code, output) {
+    var formattedOutput = output.replace(/(\r\n|\n|\r)/gm, "");
+    console.log('Program output:', formattedOutput);
+    console.log('Saving the output in a variable...');
+    var varName = getVariableName(vertex.variable_id);
+    setVariable(context, varName, '"' + formattedOutput + '"', callback);
+  });
+};
+
+methods.agi = function(context, vertex, callback) {
+  console.log('--AGI BLOCK--');
+  console.log('Executing the AGI command...');
+  context.exec('AGI', vertex.command, vertex.args,
+    function(err, res) {
+      callback(err, res);
+    });
+};
+
+methods.subproject = function(context, vertex, callback) {
+  console.log('--SUBPROJECT BLOCK--');
+  if (!projects) {
+    getProjects(false);
+  }
+  var project = _.find(projects, {
+    id: parseInt(vertex.project_id)
+  });
+  console.log('Moving to project ""' + project.name + '"...');
+  context.exec('AGI', util.format('agi://192.168.2.147/square,%s', project.name),
+    function(err, res) {
+      callback(err, res);
+    });
+};
+
+methods.ispeechasr = function(context, vertex, callback) {
+  console.log('--ISPEECH_ASR BLOCK--');
+  // var parameters = ['/var/www/html/agisquare/agiscripts/ispeech-asr.agi', vertex.ispeech_asr_language, '', (vertex.model === '0' ? '' : vertex.model), '1', '#', '', vertex.key];
+  var parameters = [path.join(config.root, 'server/config/agi_scripts', 'ispeech-asr.agi'), vertex.ispeech_asr_language, '', (vertex.model === '0' ? '' : vertex.model), '1', '#', '', vertex.key];
+  console.log('Calling Google ASR API...');
+  context.exec('AGI', parameters.join(','),
+    function(err, res) {
+      callback(err, res);
+    });
+};
+
+methods.database = function(context, vertex, callback) {
+  console.log('--DATABASE BLOCK--');
+  if (!dbConnections) {
+    getDbConnections(false);
+  }
+  var connection = _.find(dbConnections, {
+    id: parseInt(vertex.odbc_id)
+  });
+  console.log('Trying to get ODBC connection...');
+  var squareDetail = {
+    uniqueid: context.uniqueid,
+    node: vertex.label,
+    application: vertex.tag,
+    data: vertex.query || null
+  }
+  ReportSquareDetail
+    .create(squareDetail)
+    .catch(function(err) {
+      console.log('Error saving ' + vertex.tag + ':' + vertex.label + ' block log', err);
+    });
+  try {
+    db.openSync(connection.dsn);
+    var data = db.querySync(vertex.query);
+    db.closeSync();
+    setVariablesMatrix(context, vertex, callback, data);
+  } catch (e) {
+    console.log(e.message);
+    wait.for(setVariable, context, 'ERROR', 'true');
+    wait.for(setVariable, context, 'MESSAGE', e.message);
+  }
+};
+
+methods.gotoc = function(context, vertex, callback) {
+  console.log('--GOTO BLOCK--');
+  console.log('Going to extension ' + vertex.extension + ' ...');
+  context.exec('DIAL', util.format('Local/%s@%s', vertex.extension, vertex.context),
+    function(err, res) {
+      callback(err, res);
+    });
+};
+
+methods.gotoif = function(context, vertex, callback) {
+  console.log('--GOTOIF BLOCK--');
+  var res = {
+    code: 200,
+    result: '0'
+  };
+  console.log('Evaluating condition...');
+  res.data = String(eval(vertex.condition) ? 'true' : 'false');
+  console.log('The result is ' + res.data);
+  callback(null, res);
+};
+
+methods.hangup = function(context, vertex, callback) {
+  console.log('--HANGUP BLOCK--');
+  console.log('Hangin up the call...');
+  context.hangup();
+};
+
+methods.noop = function(context, vertex, callback) {
+  console.log('--NOOP BLOCK--');
+  var output = (vertex.output) ? '\"' + vertex.output + '\"' : '\"' +
+    vertex.label + '\"';
+  console.log('NOOP value is ' + output);
+  context.exec('NOOP', output,
+    function(err, res) {
+      callback(err, res);
+    });
+};
+
+methods.saydigits = function(context, vertex, callback) {
+  console.log('--SAYDIGITS BLOCK--');
+  console.log('Saying digits...');
+  context.send(util.format('SAY DIGITS %s "%s"\n', vertex.digits, vertex.escape_digits),
+    function(err, res) {
+      callback(err, res);
+    });
+};
+
+methods.set = function(context, vertex, callback) {
+  console.log('--SET BLOCK--');
+  console.log('Saving value in a variable...');
+  var varName = getVariableName(vertex.variable_id);
+  wait.for(setVariable, context, varName, vertex.variable_value);
+};
+
+function getVertices(root) {
+  return _.reduce(root, function(result, edge, tag) {
+
+    if (tag === 'mxcell') {
+      return result;
+    }
+
+    if (_.isArray(edge)) {
+      _.forIn(edge, function(value, key) {
+        result[value.$.id] = value.$;
+        result[value.$.id].tag = tag;
+      });
+      return result;
+    }
+
+    result[edge.$.id] = edge.$;
+    result[edge.$.id].tag = tag;
+    return result;
+
+  }, {});
+}
+
+function getTargetBySource(root, source, value) {
+  return _.result(_.find(root.mxcell, function(edge) {
+    if (edge.$.edge && edge.$.source) {
+      if (edge.$.source === source) {
+        if (edge.$.value && edge.$.value !== value) {
+          return false;
+        }
+        return true;
+      }
+    }
+    return false;
+  }), '$.target');
+}
+
+function replaceAllVariables(context, vertex, callback) {
+  var obj = vertex;
+  for (var key in obj) {
+    var res = obj[key].match(/{+(.*?)}/gi);
+    if (res) {
+      console.log('res', res);
+      res.forEach(function(variable, index) {
+        console.log('variable', res[index].substring(1, res[index].length - 1));
+        var value = wait.for(getVariable, context, res[index].substring(1, res[index].length - 1));
+        console.log('value', value);
+        if (value.data) {
+          obj[key] = obj[key].replace(res[index], value.data);
+          // console.log('Replace', res[index], string);
+        }
+      })
+    }
+  }
+  obj.replaced = true;
+  return obj;
+}
+
+function xstart(context) {
+  var root = context.root;
+  var vertices = context.vertices;
+
+  if (root.start) {
+    if (!_.isArray(root.start)) {
+      var source = root.start.$.id;
+      var res = {};
+      do {
+        try {
+          var vertex = vertices[source].replaced ? vertices[source] : replaceAllVariables(context, vertices[source]);
+          if (vertex) {
+            if (_.isFunction(methods[vertex.tag])) {
+              res = wait.for(methods[vertex.tag], context, vertex);
+            } else {
+              res = wait.for(methods.noop, context, vertex);
+            }
+            if (res.code === 200 && res.result !== '-1') {
+              var target = getTargetBySource(root, source, res.data);
+              if (!target) {
+                if (vertex.tag === 'menu') {
+                  if (vertex.retry > 0) {
+                    target = getTargetBySource(root, source, 'i');
+                    if (!target) {
+                      target = source;
+                    }
+                  }
+                }
+                if (vertex.tag === 'getdigits' && vertex.retry > 0) {
+                  target = source;
+                }
+                if (vertex.tag === 'vswitch') {
+                  target = getTargetBySource(root, source, '-');
+                  if (!target) {
+                    target = source;
+                  }
+                }
+              }
+              source = target;
+            } else {
+              source = null;
+            }
+          } else {
+            source = null;
+          }
+        } catch (err) {
+          console.log(err);
+        }
+      }
+      while (source);
+      console.log('No target found, hangup!');
+      context.hangup();
+    }
+  }
+}
+
+
+function xfinally(context) {
+  var root = context.root;
+  var vertices = context.vertices;
+
+  if (root.finally) {
+    if (!_.isArray(root.finally)) {
+      var source = root.finally.$.id;
+      var res = {};
+      do {
+        try {
+          var vertex = replaceAllVariables(context, vertices[source]);
+          if (vertex) {
+            if (_.isFunction(methods[vertex.tag])) {
+              res = wait.for(methods[vertex.tag], context, vertex);
+            } else {
+              res = wait.for(methods.noop, context, vertex);
+            }
+            if (res.code === 200 && res.result !== '-1') {
+              var target = getTargetBySource(root, source, res.data);
+              if (!target) {
+                if (vertex.tag === 'menu') {
+                  if (vertex.retry > 0) {
+                    target = getTargetBySource(root, source, 'i');
+                    if (!target) {
+                      target = source;
+                    }
+                  }
+                }
+                if (vertex.tag === 'getdigits' && vertex.retry > 0) {
+                  target = source;
+                }
+              }
+              source = target;
+            } else {
+              source = null;
+            }
+          } else {
+            source = null;
+          }
+        } catch (err) {
+          console.log(err);
+        }
+      } while (source);
+      context.hangup();
+      console.log('No target found, stopping "Finally" branch!');
+    }
+  }
+  context.end();
+}
+
+
+function main(context) {
+
+  context.on('error', function(err) {
+    console.log('//Error:', err);
+  });
+
+  context.on('close', function() {
+    console.log('//Context close');
+  });
+
+  context.on('hangup', function() {
+    if (context.finally) {
+      context.finally = false;
+      console.log('//Starting "Finally" branch!');
+      wait.launchFiber(xfinally, context);
+    } else {
+      ReportSquare.update({
+          leaveAt: moment().format("YYYY-MM-DD HH:mm:ss")
+        }, {
+          where: {
+            uniqueid: context.uniqueid
+          }
+        })
+        .catch(function(err) {
+          console.log('Error saving exit time from IVR', err);
+        });
+      console.log('//Context Hangup');
+    }
+  });
+
+  context.on('response', function(res) {
+    //console.log('Response:', res);
+  });
+
+  context.on('variables', function(vars) {
+    console.log(vars);
+    console.log('Received new call from: ' + vars.agi_callerid +
+      ' with uniqueid: ' + vars.agi_uniqueid);
+    var squareLog = {
+      network: vars.agi_network,
+      network_script: vars.agi_network_script,
+      request: vars.agi_request,
+      channel: vars.agi_channel,
+      language: vars.agi_language,
+      type: vars.agi_type,
+      uniqueid: vars.agi_uniqueid,
+      version: vars.agi_version,
+      callerid: vars.agi_callerid,
+      calleridname: vars.agi_calleridname,
+      callingpres: vars.agi_callingpres,
+      callingani2: vars.agi_callingani2,
+      callington: vars.agi_callington,
+      callingtns: vars.agi_callingtns,
+      dnid: vars.agi_dnid,
+      rdnis: vars.agi_rdnis,
+      context: vars.agi_context,
+      extension: vars.agi_extension,
+      priority: vars.agi_priority,
+      enhanced: vars.agi_enhanced,
+      accountcode: vars.agi_accountcode,
+      threadid: vars.agi_threadid,
+      project_name: vars.agi_arg_1,
+      joinAt: moment().format("YYYY-MM-DD HH:mm:ss")
+    };
+
+    ReportSquare
+      .create(squareLog)
+      .catch(function(err) {
+        console.log('Error saving enter time for IVR', err);
+      });
+
+    if (vars.agi_arg_1) {
+      SquareProject
+        .findOne({
+          where: {
+            name: vars.agi_arg_1
+          },
+          attributes: ['id', 'production']
+        })
+        .then(function(project) {
+          if (project) {
+            if (project.production) {
+              xml.parseString(project.production, {
+                normalizeTags: true,
+                explicitArray: false
+              }, function(err, result) {
+                var root = result.mxgraphmodel.root;
+                if (root) {
+                  context.root = root;
+                  context.finally = true;
+                  context.uniqueid = vars.agi_uniqueid;
+                  context.vertices = getVertices(root);
+                  wait.launchFiber(xstart, context);
+                } else {
+                  console.log('No root in project!');
+                  context.end();
+                }
+              });
+            } else {
+              console.log('No project published!');
+              context.end();
+            }
+          } else {
+            console.log('No project found!');
+            context.end();
+          }
+        })
+        .catch(function(err) {
+          console.log('Error:', err);
+          context.end();
+        });
+    } else {
+      console.log('No project argument!');
+      context.end();
+    }
+  });
+}
+
+function splitInterval(interval) {
+  var finalInterval = {};
+  var splittedInterval = interval.split(',');
+  var intValues;
+  splittedInterval.forEach(function(element, index) {
+    switch (index) {
+      case 0:
+        if (element !== '*') {
+          intValues = element.split('-');
+          finalInterval.t_from = moment(intValues[0], 'HH:mm');
+          finalInterval.t_to = moment(intValues[1], 'HH:mm');
+        } else {
+          finalInterval.t_from = null;
+          finalInterval.t_to = null;
+        }
+        break;
+      case 1:
+        if (element !== '*') {
+          intValues = element.split('-');
+          finalInterval.wd_from = weekDaysCollection[intValues[0]];
+          finalInterval.wd_to = intValues[1] ? weekDaysCollection[intValues[1]] : null;
+        } else {
+          finalInterval.wd_from = null;
+          finalInterval.wd_to = null;
+        }
+        break;
+      case 2:
+        if (element !== '*') {
+          intValues = element.split('-');
+          finalInterval.md_from = intValues[0];
+          finalInterval.md_to = intValues[1] ? intValues[1] : null;
+        } else {
+          finalInterval.md_from = null;
+          finalInterval.md_to = null;
+        }
+        break;
+      case 3:
+        if (element !== '*') {
+          intValues = element.split('-');
+          finalInterval.m_from = monthsCollection[intValues[0]];
+          finalInterval.m_to = intValues[1] ? monthsCollection[intValues[1]] : null;
+        } else {
+          finalInterval.m_from = null;
+          finalInterval.m_to = null;
+        }
+        break;
+      default:
+
+    }
+
+
+  });
+  return finalInterval;
+}
+
+function isIntervalValid(interval) {
+  var hour = moment().format("HH:mm");
+  var day = moment().format("E");
+  var monthDay = moment().format("D");
+  var month = moment().format("M");
+  var tValid, wdValid, mdValid, mValid;
+  var monthsNumbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
+  var weekDaysNumbers = [1, 2, 3, 4, 5, 6, 7];
+  var daysOfMonthsNumbers = [];
+  for (var i = 1; i <= 31; i++) {
+    daysOfMonthsNumbers.push(i);
+  }
+  tValid = (interval.t_from && interval.t_to) ? moment(hour, "HH:mm").isBetween(moment(interval.t_from, "HH:mm"), moment(interval.t_to, "HH:mm")) : true;
+  if (interval.wd_from) {
+    if (interval.wd_to) {
+      var validWeekdays = _.filter(weekDaysNumbers, function(elem) {
+        return (elem >= interval.wd_from) || (elem <= interval.wd_to);
+      });
+      wdValid = (validWeekdays.indexOf(parseInt(day)) !== -1) ? true : false;
+    } else {
+      wdValid = (parseInt(day) === interval.wd_from) ? true : false;
+    }
+  } else {
+    wdValid = true;
+  }
+  if (interval.md_from) {
+    if (interval.md_to) {
+      var validMonthsdays = _.filter(daysOfMonthsNumbers, function(elem) {
+        return (elem >= interval.md_from) || (elem <= interval.md_to);
+      });
+      mdValid = (validMonthsdays.indexOf(parseInt(monthDay)) !== -1) ? true : false;
+    } else {
+      mdValid = (parseInt(monthDay) === interval.md_from) ? true : false;
+    }
+  } else {
+    mdValid = true;
+  }
+  if (interval.m_from) {
+    if (interval.m_to) {
+      var validMonths = _.filter(monthsNumbers, function(elem) {
+        return (elem >= interval.m_from) || (elem <= interval.m_to);
+      });
+      mValid = (validMonths.indexOf(parseInt(month)) !== -1) ? true : false;
+    } else {
+      mValid = (parseInt(month) === interval.m_from) ? true : false;
+    }
+  } else {
+    mValid = true;
+  }
+
+  return tValid && wdValid && mdValid && mValid;
+
+}
+
+function setVariable(context, name, value, callback) {
+  console.log('Setting variable...');
+  console.log('Sending set variable,variable is ' + name + ', value is ', value);
+  context.send(util.format('SET VARIABLE %s %s\n', name, value), function(err, res) {
+    if (callback) {
+      callback(err, res);
+    }
+  });
+}
+
+function getVariableName(id) {
+  if (!variables) {
+    getVariables(false);
+  }
+  var variable = {
+    name: 'placeholder' //if for any reason i don't receive both the name and the id of the variable, the value will be saved in a placeholder variable
+  };
+  if (id) {
+    variable = _.find(variables, {
+      id: parseInt(id)
+    });
+  }
+  return variable.name;
+}
+
+function setVariablesMatrix(context, vertex, callback, data) {
+  var varName = getVariableName(vertex.variable_id);
+  _.forEach(data, function(row, index) {
+    _.forOwn(row, function(value, key) {
+      wait.for(setVariable, context, varName + '[' + index + '][' + key + ']', value);
+    });
+  });
+}
+
+function getVariable(context, name, callback) {
+  context.getVariable(name, function(err, res) {
+    if (res.code === 200 && res.result !== '0') {
+      res.data = res.result.substring(res.result.lastIndexOf("(") + 1,
+        res.result.lastIndexOf(")"));
+    } else {
+      res.data = '';
+    }
+    callback(null, res);
+  })
+}
+
+function getFilePath(id) {
+  if (!sounds) {
+    getSounds(false);
+  }
+  if (id > 0) {
+    var file = _.find(sounds, {
+      id: parseInt(id)
+    });
+    return util.format('%s/%s', config.convertedSounds, file.save_name);
+  }
+  return '';
+}
+
+function getUsers(synch) {
+  User
+    .findAll()
+    .then(function(result) {
+      users = _.clone(result);
+      if (synch) {
+        synchUpdates(User, users, 'id');
+      }
+    })
+    .catch(function(err) {
+      console.log(err);
+    });
+}
+
+function getQueues(synch) {
+  VoiceQueue
+    .findAll()
+    .then(function(result) {
+      queues = _.clone(result);
+      if (synch) {
+        synchUpdates(VoiceQueue, queues, 'name');
+      }
+    })
+    .catch(function(err) {
+      console.log(err);
+    });
+}
+
+function getTrunks(synch) {
+  Trunk
+    .findAll()
+    .then(function(result) {
+      trunks = _.clone(result);
+      if (synch) {
+        synchUpdates(Trunk, trunks, 'id');
+      }
+    })
+    .catch(function(err) {
+      console.log(err);
+    });
+}
+
+function getVariables(synch) {
+  Variable
+    .findAll()
+    .then(function(result) {
+      variables = _.clone(result);
+      if (synch) {
+        synchUpdates(Variable, variables, 'id');
+      }
+    })
+    .catch(function(err) {
+      console.log(err);
+    });
+}
+
+function getDbConnections(synch) {
+  SquareOdbc
+    .findAll()
+    .then(function(result) {
+      dbConnections = _.clone(result);
+      if (synch) {
+        synchUpdates(SquareOdbc, dbConnections, 'id');
+      }
+    })
+    .catch(function(err) {
+      console.log(err);
+    });
+}
+
+function getIntervals(synch) {
+  Interval
+    .findAll()
+    .then(function(result) {
+      intervals = _.clone(result);
+      if (synch) {
+        synchUpdates(Interval, intervals, 'id');
+      }
+    })
+    .catch(function(err) {
+      console.log(err);
+    });
+}
+
+function getProjects(synch) {
+  SquareProject
+    .findAll()
+    .then(function(result) {
+      projects = _.clone(result);
+      if (synch) {
+        synchUpdates(SquareProject, projects, 'id');
+      }
+    })
+    .catch(function(err) {
+      console.log(err);
+    });
+}
+
+function getSounds(synch) {
+  Sound
+    .findAll()
+    .then(function(result) {
+      sounds = _.clone(result);
+      if (synch) {
+        synchUpdates(Sound, sounds, 'id');
+      }
+    })
+    .catch(function(err) {
+      console.log(err);
+    });
+}
+
+function synchUpdates(Model, collection, key) {
+  var condition = {};
+  Model.afterCreate(function(doc) {
+    condition[key] = doc[key];
+    updateCollection(collection, condition, doc);
+  });
+  Model.afterUpdate(function(doc) {
+    condition[key] = doc[key];
+    updateCollection(collection, condition, doc);
+  });
+  Model.afterDestroy(function(doc) {
+    condition[key] = doc[key];
+    _.remove(collection, condition);
+  });
+}
+
+function updateCollection(collection, condition, doc) {
+  var oldItem = _.find(collection, condition);
+  var index = collection.indexOf(oldItem);
+  if (oldItem) {
+    _.merge(collection[index], doc);
+  } else {
+    collection.unshift(doc);
+  }
+}
+
+function getPort() {
+  Settings
+    .findOne()
+    .then(function(result) {
+      agiPort = result.agi_port;
+    })
+    .catch(function(err) {
+      console.log(err);
+    });
+}
+
+module.exports = function() {
+  console.log('Starting Cally Square AGI...');
+  getPort();
+  var server = agi.createServer(main).listen(agiPort ? agiPort : 4573);
+  getUsers(true);
+  getQueues(true);
+  getTrunks(true);
+  getVariables(true);
+  getIntervals(true);
+  getProjects(true);
+  getSounds(true);
+  getDbConnections(true);
+};
index bf3713b..99ebb83 100644 (file)
@@ -1 +1,574 @@
-var _0x40d8=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6D\x6F\x6D\x65\x6E\x74","\x75\x74\x69\x6C","\x62\x6C\x75\x65\x62\x69\x72\x64","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x52\x65\x70\x6F\x72\x74\x4D\x65\x6D\x62\x65\x72","\x41\x63\x74\x69\x6F\x6E","\x55\x73\x65\x72","\x55\x73\x65\x72\x48\x61\x73\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65","\x55\x73\x65\x72\x48\x61\x73\x43\x68\x61\x74\x51\x75\x65\x75\x65","\x55\x73\x65\x72\x48\x61\x73\x4D\x61\x69\x6C\x51\x75\x65\x75\x65","\x55\x73\x65\x72\x48\x61\x73\x46\x61\x78\x51\x75\x65\x75\x65","\x41\x63\x74\x69\x6F\x6E\x20\x49\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x2E\x2E","\x6C\x6F\x67","\x76\x6F\x69\x63\x65","\x63\x68\x61\x74","\x6D\x61\x69\x6C","\x66\x61\x78","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x6C\x6C","\x65\x6E\x74\x65\x72\x41\x74","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x66\x6F\x72\x6D\x61\x74","\x73\x65\x63\x6F\x6E\x64\x73","\x64\x69\x66\x66","\x75\x70\x64\x61\x74\x65","\x70\x75\x73\x68","\x66\x6F\x72\x45\x61\x63\x68","\x74\x68\x65\x6E","\x63\x68\x61\x6E\x6E\x65\x6C","\x6D\x65\x6D\x62\x65\x72\x6E\x61\x6D\x65","\x69\x6E\x74\x65\x72\x66\x61\x63\x65","\x66\x69\x6E\x64\x41\x6C\x6C","\x62\x65\x66\x6F\x72\x65\x43\x72\x65\x61\x74\x65","\x6E\x61\x6D\x65","\x25\x73\x2F\x25\x73","\x53\x49\x50","\x74\x79\x70\x65","\x62\x6F\x64\x79","\x64\x61\x74\x61\x31","\x64\x61\x74\x61\x32","\x64\x61\x74\x61\x33","\x64\x61\x74\x61\x34","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E","\x62\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x51\x75\x65\x75\x65\x50\x61\x75\x73\x65","\x61\x63\x74\x69\x6F\x6E","\x70\x72\x6F\x6D\x69\x73\x69\x66\x79","\x41\x6C\x72\x65\x61\x64\x79\x20\x50\x61\x75\x73\x65\x20\x4F\x66\x66","\x66\x69\x6E\x64\x4F\x6E\x65","\x25\x73\x25\x73","\x50\x61\x75\x73\x65","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x4C\x4F\x47\x49\x4E","\x51\x75\x65\x75\x65\x41\x64\x64","\x67\x65\x74\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65\x73","\x51\x75\x65\x75\x65\x52\x65\x6D\x6F\x76\x65","\x69\x64","\x53\x49\x50\x2F\x25\x73","\x66\x69\x6E\x64\x4F\x72\x43\x72\x65\x61\x74\x65","\x71\x75\x65\x75\x65\x73","\x71\x75\x65\x75\x65\x20\x61\x73\x73\x6F\x63\x69\x61\x74\x69\x6F\x6E\x20\x72\x65\x6D\x6F\x76\x65\x20\x65\x72\x72\x6F\x72\x20\x3A","\x71\x75\x65\x75\x65","\x64\x65\x73\x74\x72\x6F\x79","\x71\x75\x65\x75\x65\x49\x64","\x55\x6E\x6B\x6E\x6F\x77\x6E\x20\x41\x67\x65\x6E\x74","\x61\x67\x65\x6E\x74","\x66\x69\x6E\x64\x42\x79\x49\x64","\x70\x61\x75\x73\x65","\x75\x6E\x70\x61\x75\x73\x65","\x6C\x6F\x67\x69\x6E","\x6C\x6F\x67\x6F\x75\x74","\x55\x6E\x6B\x6E\x6F\x77\x6E\x20\x41\x63\x74\x69\x6F\x6E","\x65\x78\x70\x6F\x72\x74\x73"];_0x40d8[0];var moment=require(_0x40d8[1]);var util=require(_0x40d8[2]);var Promise=require(_0x40d8[3]);var Sequelize=require(_0x40d8[5])[_0x40d8[4]];var ReportMember=require(_0x40d8[5])[_0x40d8[6]];var _Action=require(_0x40d8[5])[_0x40d8[7]];var Agent=require(_0x40d8[5])[_0x40d8[8]];var UserHasVoiceQueue=require(_0x40d8[5])[_0x40d8[9]];var UserHasChatQueue=require(_0x40d8[5])[_0x40d8[10]];var UserHasMailQueue=require(_0x40d8[5])[_0x40d8[11]];var UserHasFaxQueue=require(_0x40d8[5])[_0x40d8[12]];function Action(_0x63ddxd){console[_0x40d8[14]](_0x40d8[13]);var _0x63ddxe=[_0x40d8[15],_0x40d8[16],_0x40d8[17],_0x40d8[18]];_Action[_0x40d8[19]](function(_0x63ddxf,_0x63ddx10){return _0x63ddx2d(_0x63ddxf,_0x63ddx10,_0x63ddxd)});ReportMember[_0x40d8[34]](function(_0x63ddxf,_0x63ddx10){return ReportMember[_0x40d8[33]]({where:{channel:_0x63ddxf[_0x40d8[30]],membername:_0x63ddxf[_0x40d8[31]],interface:_0x63ddxf[_0x40d8[32]],exitAt:null}})[_0x40d8[29]](function(_0x63ddx11){var _0x63ddx12=[];var _0x63ddx13=moment();_0x63ddx11[_0x40d8[28]](function(_0x63ddx14){var _0x63ddx15=moment(_0x63ddx14[_0x40d8[21]]);_0x63ddx12[_0x40d8[27]](_0x63ddx14[_0x40d8[26]]({exitAt:_0x63ddx13[_0x40d8[23]](_0x40d8[22]),duration:_0x63ddx13[_0x40d8[25]](_0x63ddx15,_0x40d8[24])}))});return _0x63ddx12})[_0x40d8[20]]()});function _0x63ddx16(_0x63ddx10,_0x63ddx17){return function(_0x63ddx18){return Promise[_0x40d8[48]](_0x63ddxd[_0x40d8[47]])({action:_0x40d8[46],interface:util[_0x40d8[23]](_0x40d8[36],_0x40d8[37],_0x63ddx18[_0x40d8[35]]),paused:true,reason:_0x63ddx10[_0x40d8[39]][_0x40d8[38]]})[_0x40d8[29]](function(_0x63ddx1b){return _0x63ddx18[_0x40d8[26]]({voicePause:true,chatPause:true,mailPause:true,faxPause:true,pauseType:_0x63ddx10[_0x40d8[39]][_0x40d8[38]],lastPauseAt:moment()[_0x40d8[23]](_0x40d8[22])},{transaction:_0x63ddx10[_0x40d8[44]]||null})})[_0x40d8[29]](function(_0x63ddx18){var _0x63ddx19=[];_0x63ddxe[_0x40d8[28]](function(_0x63ddx1a){_0x63ddx19[_0x40d8[27]]({channel:_0x63ddx1a,membername:_0x63ddx18[_0x40d8[35]],interface:util[_0x40d8[23]](_0x40d8[36],_0x40d8[37],_0x63ddx18[_0x40d8[35]]),type:_0x63ddx10[_0x40d8[39]][_0x40d8[38]],enterAt:moment()[_0x40d8[23]](_0x40d8[22]),data1:_0x63ddx17[_0x40d8[40]],data2:_0x63ddx17[_0x40d8[41]],data3:_0x63ddx17[_0x40d8[42]],data4:_0x63ddx17[_0x40d8[43]]})});return ReportMember[_0x40d8[45]](_0x63ddx19,{individualHooks:true,transaction:_0x63ddx10[_0x40d8[44]]||null})})}}function _0x63ddx1c(_0x63ddx10,_0x63ddx17){return function(_0x63ddx18){if(!_0x63ddx10[_0x40d8[39]]){_0x63ddx10[_0x40d8[39]]={}};switch(_0x63ddx10[_0x40d8[39]][_0x40d8[30]]){case _0x40d8[15]:return Promise[_0x40d8[48]](_0x63ddxd[_0x40d8[47]])({action:_0x40d8[46],interface:util[_0x40d8[23]](_0x40d8[36],_0x40d8[37],_0x63ddx18[_0x40d8[35]]),paused:false,reason:_0x63ddx10[_0x40d8[39]][_0x40d8[38]]})[_0x40d8[29]](function(){return _0x63ddx18[_0x40d8[26]]({voicePause:false},{transaction:_0x63ddx10[_0x40d8[44]]||null})})[_0x40d8[29]](function(_0x63ddx18){var _0x63ddx13=moment();return ReportMember[_0x40d8[50]]({where:{channel:_0x63ddx10[_0x40d8[39]][_0x40d8[30]],membername:_0x63ddx18[_0x40d8[35]],interface:util[_0x40d8[23]](_0x40d8[36],_0x40d8[37],_0x63ddx18[_0x40d8[35]]),exitAt:null}})})[_0x40d8[29]](_0x63ddx2a({message:_0x40d8[49]}))[_0x40d8[29]](function(_0x63ddx1d){var _0x63ddx13=moment();var _0x63ddx15=moment(_0x63ddx1d[_0x40d8[21]]);return _0x63ddx1d[_0x40d8[26]]({exitAt:_0x63ddx13[_0x40d8[23]](_0x40d8[22]),duration:_0x63ddx13[_0x40d8[25]](_0x63ddx15,_0x40d8[24])},{individualHooks:true,transaction:_0x63ddx10[_0x40d8[44]]||null})})[_0x40d8[29]](function(){return _0x63ddx18});case _0x40d8[16]:;case _0x40d8[17]:;case _0x40d8[18]:var _0x63ddx1e={};_0x63ddx1e[util[_0x40d8[23]](_0x40d8[51],_0x63ddx10[_0x40d8[39]][_0x40d8[30]],_0x40d8[52])]=false;return _0x63ddx18[_0x40d8[26]](_0x63ddx1e,{transaction:_0x63ddx10[_0x40d8[44]]})[_0x40d8[29]](function(_0x63ddx18){var _0x63ddx13=moment();return ReportMember[_0x40d8[50]]({where:{channel:_0x63ddx10[_0x40d8[39]][_0x40d8[30]],membername:_0x63ddx18[_0x40d8[35]],interface:util[_0x40d8[23]](_0x40d8[36],_0x40d8[37],_0x63ddx18[_0x40d8[35]]),exitAt:null}})})[_0x40d8[29]](_0x63ddx2a({message:_0x40d8[49]}))[_0x40d8[29]](function(_0x63ddx1d){var _0x63ddx13=moment();var _0x63ddx15=moment(_0x63ddx1d[_0x40d8[21]]);return _0x63ddx1d[_0x40d8[26]]({exitAt:_0x63ddx13[_0x40d8[23]](_0x40d8[22]),duration:_0x63ddx13[_0x40d8[25]](_0x63ddx15,_0x40d8[24])},{individualHooks:true,transaction:_0x63ddx10[_0x40d8[44]]})})[_0x40d8[29]](function(){return _0x63ddx18});default:var _0x63ddx17=Promise[_0x40d8[48]](_0x63ddxd[_0x40d8[47]]);return _0x63ddx17({action:_0x40d8[46],interface:util[_0x40d8[23]](_0x40d8[36],_0x40d8[37],_0x63ddx18[_0x40d8[35]]),paused:false})[_0x40d8[54]](function(_0x63ddx1f){console[_0x40d8[53]](_0x63ddx1f)})[_0x40d8[29]](function(){return _0x63ddx18[_0x40d8[26]]({voicePause:false,mailPause:false,chatPause:false,faxPause:false},{transaction:_0x63ddx10[_0x40d8[44]]})})[_0x40d8[29]](function(_0x63ddx18){var _0x63ddx13=moment();return ReportMember[_0x40d8[26]]({exitAt:_0x63ddx13},{where:{membername:_0x63ddx18[_0x40d8[35]],interface:util[_0x40d8[23]](_0x40d8[36],_0x40d8[37],_0x63ddx18[_0x40d8[35]]),exitAt:null},transaction:_0x63ddx10[_0x40d8[44]]})})[_0x40d8[29]](function(){return _0x63ddx18})}}}function _0x63ddx20(_0x63ddx10,_0x63ddx17){return function(_0x63ddx18){return _0x63ddx18[_0x40d8[57]]()[_0x40d8[29]](function(_0x63ddx21){var _0x63ddx22=[];_0x63ddx21[_0x40d8[28]](function(_0x63ddx23){_0x63ddx22[_0x40d8[27]](_0x63ddxd[_0x40d8[47]]({action:_0x40d8[56],queue:_0x63ddx23[_0x40d8[35]],interface:util[_0x40d8[23]](_0x40d8[36],_0x40d8[37],_0x63ddx18[_0x40d8[35]]),membername:_0x63ddx18[_0x40d8[35]]}))});return Promise[_0x40d8[20]](_0x63ddx22)})[_0x40d8[29]](function(_0x63ddx1b){var _0x63ddx19=[];_0x63ddxe[_0x40d8[28]](function(_0x63ddx1a){_0x63ddx19[_0x40d8[27]]({channel:_0x63ddx1a,membername:_0x63ddx18[_0x40d8[35]],interface:util[_0x40d8[23]](_0x40d8[36],_0x40d8[37],_0x63ddx18[_0x40d8[35]]),type:_0x40d8[55],enterAt:moment()[_0x40d8[23]](_0x40d8[22])})});return ReportMember[_0x40d8[45]](_0x63ddx19,{individualHooks:true})})}}function _0x63ddx24(_0x63ddx10,_0x63ddx17){return function(_0x63ddx18){return _0x63ddx18[_0x40d8[57]]()[_0x40d8[29]](function(_0x63ddx21){var _0x63ddx22=[];_0x63ddx21[_0x40d8[28]](function(_0x63ddx23){_0x63ddx22[_0x40d8[27]](_0x63ddxd[_0x40d8[47]]({action:_0x40d8[58],queue:_0x63ddx23[_0x40d8[35]],interface:util[_0x40d8[23]](_0x40d8[36],_0x40d8[37],_0x63ddx18[_0x40d8[35]])}))});return Promise[_0x40d8[20]](_0x63ddx22)[_0x40d8[54]](function(_0x63ddx1f){console[_0x40d8[53]](_0x63ddx1f)})})[_0x40d8[29]](function(_0x63ddx1b){return ReportMember[_0x40d8[26]]({exitAt:moment()[_0x40d8[23]](_0x40d8[22])},{where:{membername:_0x63ddx18[_0x40d8[35]],interface:util[_0x40d8[23]](_0x40d8[36],_0x40d8[37],_0x63ddx18[_0x40d8[35]]),type:_0x40d8[55],exitAt:null},individualHooks:true,transaction:_0x63ddx10[_0x40d8[44]]})})}}function _0x63ddx25(_0x63ddx10,_0x63ddx17){return function(_0x63ddx18){var _0x63ddx26=[];switch(_0x63ddx10[_0x40d8[39]][_0x40d8[30]]){case _0x40d8[15]:_0x63ddx10[_0x40d8[39]][_0x40d8[62]][_0x40d8[28]](function(_0x63ddx27){_0x63ddx26[_0x40d8[27]](UserHasVoiceQueue[_0x40d8[61]]({where:{UserId:_0x63ddx18[_0x40d8[59]],queue:_0x63ddx27},defaults:{queue:_0x63ddx27,location:util[_0x40d8[23]](_0x40d8[60],_0x63ddx18[_0x40d8[35]]),membername:_0x63ddx18[_0x40d8[35]],UserId:_0x63ddx18[_0x40d8[59]]},transaction:_0x63ddx10[_0x40d8[44]]}))});return Promise[_0x40d8[20]](_0x63ddx26)[_0x40d8[29]](function(){var _0x63ddx22=[];_0x63ddx10[_0x40d8[39]][_0x40d8[62]][_0x40d8[28]](function(_0x63ddx27){_0x63ddx22[_0x40d8[27]](_0x63ddxd[_0x40d8[47]]({action:_0x40d8[56],queue:_0x63ddx27,interface:util[_0x40d8[23]](_0x40d8[36],_0x40d8[37],_0x63ddx18[_0x40d8[35]]),membername:_0x63ddx18[_0x40d8[35]]}))});return Promise[_0x40d8[20]](_0x63ddx22)})[_0x40d8[54]](function(_0x63ddx1f){console[_0x40d8[53]](_0x63ddx1f)});case _0x40d8[16]:_0x63ddx10[_0x40d8[39]][_0x40d8[62]][_0x40d8[28]](function(_0x63ddx27){_0x63ddx26[_0x40d8[27]](UserHasChatQueue[_0x40d8[61]]({where:{UserId:_0x63ddx18[_0x40d8[59]],ChatQueueId:_0x63ddx27[_0x40d8[59]]},defaults:{ChatQueueId:_0x63ddx27[_0x40d8[59]],queue:_0x63ddx27[_0x40d8[35]],UserId:_0x63ddx18[_0x40d8[59]]},transaction:_0x63ddx10[_0x40d8[44]]}))});return Promise[_0x40d8[20]](_0x63ddx26)[_0x40d8[54]](function(_0x63ddx1f){console[_0x40d8[14]](_0x63ddx1f)});case _0x40d8[17]:_0x63ddx10[_0x40d8[39]][_0x40d8[62]][_0x40d8[28]](function(_0x63ddx27){_0x63ddx26[_0x40d8[27]](UserHasMailQueue[_0x40d8[61]]({where:{UserId:_0x63ddx18[_0x40d8[59]],MailQueueId:_0x63ddx27[_0x40d8[59]]},defaults:{MailQueueId:_0x63ddx27[_0x40d8[59]],queue:_0x63ddx27[_0x40d8[35]],UserId:_0x63ddx18[_0x40d8[59]]},transaction:_0x63ddx10[_0x40d8[44]]}))});return Promise[_0x40d8[20]](_0x63ddx26)[_0x40d8[54]](function(_0x63ddx1f){console[_0x40d8[14]](_0x63ddx1f)});case _0x40d8[18]:_0x63ddx10[_0x40d8[39]][_0x40d8[62]][_0x40d8[28]](function(_0x63ddx27){_0x63ddx26[_0x40d8[27]](UserHasFaxQueue[_0x40d8[61]]({where:{UserId:_0x63ddx18[_0x40d8[59]],FaxQueueId:_0x63ddx27[_0x40d8[59]]},defaults:{faxQueueId:_0x63ddx27[_0x40d8[59]],queue:_0x63ddx27[_0x40d8[35]],UserId:_0x63ddx18[_0x40d8[59]]},transaction:_0x63ddx10[_0x40d8[44]]}))});return Promise[_0x40d8[20]](_0x63ddx26)[_0x40d8[54]](function(_0x63ddx1f){console[_0x40d8[14]](_0x63ddx1f)});default:}}}function _0x63ddx28(_0x63ddx10,_0x63ddx17){return function(_0x63ddx18){switch(_0x63ddx10[_0x40d8[39]][_0x40d8[30]]){case _0x40d8[15]:return UserHasVoiceQueue[_0x40d8[65]]({where:{UserId:_0x63ddx18[_0x40d8[59]],queue:_0x63ddx10[_0x40d8[39]][_0x40d8[64]]},transaction:_0x63ddx10[_0x40d8[44]],individualHooks:true})[_0x40d8[29]](function(){var _0x63ddx29=Promise[_0x40d8[48]](_0x63ddxd[_0x40d8[47]]);return _0x63ddx29({action:_0x40d8[58],queue:_0x63ddx10[_0x40d8[39]][_0x40d8[64]],interface:util[_0x40d8[23]](_0x40d8[36],_0x40d8[37],_0x63ddx18[_0x40d8[35]])})})[_0x40d8[54]](function(_0x63ddx1f){console[_0x40d8[53]](_0x40d8[63],_0x63ddx1f)});case _0x40d8[16]:return UserHasChatQueue[_0x40d8[65]]({where:{UserId:_0x63ddx18[_0x40d8[59]],ChatQueueId:_0x63ddx10[_0x40d8[39]][_0x40d8[66]]},transaction:_0x63ddx10[_0x40d8[44]],individualHooks:true})[_0x40d8[54]](function(_0x63ddx1f){console[_0x40d8[53]](_0x40d8[63],_0x63ddx1f)});case _0x40d8[17]:return UserHasMailQueue[_0x40d8[65]]({where:{UserId:_0x63ddx18[_0x40d8[59]],MailQueueId:_0x63ddx10[_0x40d8[39]][_0x40d8[66]]},transaction:_0x63ddx10[_0x40d8[44]],individualHooks:true})[_0x40d8[54]](function(_0x63ddx1f){console[_0x40d8[53]](_0x40d8[63],_0x63ddx1f)});case _0x40d8[18]:return UserHasFaxQueue[_0x40d8[65]]({where:{UserId:_0x63ddx18[_0x40d8[59]],FaxQueueId:_0x63ddx10[_0x40d8[39]][_0x40d8[66]]},transaction:_0x63ddx10[_0x40d8[44]],individualHooks:true})[_0x40d8[54]](function(_0x63ddx1f){console[_0x40d8[53]](_0x40d8[63],_0x63ddx1f)});default:}}}function _0x63ddx2a(_0x63ddx2b){return function(_0x63ddx2c){if(!_0x63ddx2c){throw _0x63ddx2b};return _0x63ddx2c}}function _0x63ddx2d(_0x63ddx17,_0x63ddx10,_0x63ddxd){switch(_0x63ddx17[_0x40d8[35]]){case _0x40d8[70]:return Agent[_0x40d8[69]](_0x63ddx10[_0x40d8[39]][_0x40d8[68]])[_0x40d8[29]](_0x63ddx2a({message:_0x40d8[67]}))[_0x40d8[29]](_0x63ddx16(_0x63ddx10,_0x63ddx17));case _0x40d8[71]:return Agent[_0x40d8[69]](_0x63ddx10[_0x40d8[39]][_0x40d8[68]])[_0x40d8[29]](_0x63ddx2a({message:_0x40d8[67]}))[_0x40d8[29]](_0x63ddx1c(_0x63ddx10,_0x63ddx17));case _0x40d8[72]:return Agent[_0x40d8[69]](_0x63ddx17[_0x40d8[40]])[_0x40d8[29]](_0x63ddx2a({message:_0x40d8[67]}))[_0x40d8[29]](_0x63ddx20(_0x63ddx10,_0x63ddx17));case _0x40d8[73]:return Agent[_0x40d8[69]](_0x63ddx17[_0x40d8[40]])[_0x40d8[29]](_0x63ddx2a({message:_0x40d8[67]}))[_0x40d8[29]](_0x63ddx1c(_0x63ddx10,_0x63ddx17))[_0x40d8[29]](_0x63ddx24(_0x63ddx10,_0x63ddx17));case _0x40d8[56]:return Agent[_0x40d8[69]](_0x63ddx10[_0x40d8[39]][_0x40d8[68]])[_0x40d8[29]](_0x63ddx2a({message:_0x40d8[67]}))[_0x40d8[29]](_0x63ddx25(_0x63ddx10,_0x63ddx17));case _0x40d8[58]:return Agent[_0x40d8[69]](_0x63ddx10[_0x40d8[39]][_0x40d8[68]])[_0x40d8[29]](_0x63ddx2a({message:_0x40d8[67]}))[_0x40d8[29]](_0x63ddx28(_0x63ddx10,_0x63ddx17));default:throw {message:_0x40d8[74]}}}return {}}module[_0x40d8[75]]=Action
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+var moment = require('moment');
+var util = require('util');
+var Promise = require('bluebird');
+
+var Sequelize = require('../../models').sequelize;
+var ReportMember = require('../../models').ReportMember;
+var _Action = require('../../models').Action;
+var Agent = require('../../models').User;
+var UserHasVoiceQueue = require('../../models').UserHasVoiceQueue;
+var UserHasChatQueue = require('../../models').UserHasChatQueue;
+var UserHasMailQueue = require('../../models').UserHasMailQueue;
+var UserHasFaxQueue = require('../../models').UserHasFaxQueue;
+
+function Action(ami) {
+  console.log('Action Initialization...');
+  var channels = ['voice', 'chat', 'mail', 'fax'];
+
+  _Action.afterCreate(function(doc, options) {
+    return onSave(doc, options, ami);
+  });
+
+  ReportMember.beforeCreate(function(doc, options) {
+    return ReportMember
+      .findAll({
+        where: {
+          channel: doc.channel,
+          membername: doc.membername,
+          interface: doc.interface,
+          exitAt: null
+        }
+      })
+      .then(function(elms) {
+        var queries = [];
+        var exitAt = moment();
+        elms.forEach(function(elm) {
+          var enterAt = moment(elm.enterAt);
+          queries.push(elm.update({
+            exitAt: exitAt.format("YYYY-MM-DD HH:mm:ss"),
+            duration: exitAt.diff(enterAt, 'seconds')
+          }));
+        })
+        return queries;
+      })
+      .all();
+  });
+
+  // HANDLE PAUSE FUNCTION
+  function handlePause(options, action) {
+    return function(agent) {
+      return Promise
+        .promisify(ami.action)({
+          action: 'QueuePause',
+          interface: util.format('%s/%s', 'SIP', agent.name),
+          paused: true,
+          reason: options.body.type
+        })
+        .then(function(astData) {
+          return agent
+            .update({
+              voicePause: true,
+              chatPause: true,
+              mailPause: true,
+              faxPause: true,
+              pauseType: options.body.type,
+              lastPauseAt: moment().format("YYYY-MM-DD HH:mm:ss")
+            }, {
+              transaction: options.transaction || null
+            });
+        })
+        .then(function(agent) {
+          var reportMembers = [];
+          channels.forEach(function(channel) {
+            reportMembers.push({
+              channel: channel,
+              membername: agent.name,
+              interface: util.format('%s/%s', 'SIP', agent.name),
+              type: options.body.type,
+              enterAt: moment().format("YYYY-MM-DD HH:mm:ss"),
+              data1: action.data1,
+              data2: action.data2,
+              data3: action.data3,
+              data4: action.data4
+            });
+          })
+          return ReportMember
+            .bulkCreate(reportMembers, {
+              individualHooks: true,
+              transaction: options.transaction || null
+            });
+        });
+    }
+  }
+
+  // HANDLE UNPAUSE FUNCTION
+  function handleUnpause(options, action) {
+    return function(agent) {
+      if (!options.body) options.body = {};
+
+      switch (options.body.channel) {
+        case 'voice':
+
+          return Promise
+            .promisify(ami.action)({
+              action: 'QueuePause',
+              interface: util.format('%s/%s', 'SIP', agent.name),
+              paused: false,
+              reason: options.body.type
+            })
+            .then(function() {
+              return agent
+                .update({
+                  voicePause: false,
+                }, {
+                  transaction: options.transaction || null
+                })
+            })
+            .then(function(agent) {
+              var exitAt = moment();
+              return ReportMember
+                .findOne({
+                  where: {
+                    channel: options.body.channel,
+                    membername: agent.name,
+                    interface: util.format('%s/%s', 'SIP', agent.name),
+                    exitAt: null
+                  }
+                });
+            })
+            .then(handleEntityNotFound({
+              message: 'Already Pause Off'
+            }))
+            .then(function(reportMember) {
+              var exitAt = moment();
+              var enterAt = moment(reportMember.enterAt);
+
+              return reportMember
+                .update({
+                  exitAt: exitAt.format("YYYY-MM-DD HH:mm:ss"),
+                  duration: exitAt.diff(enterAt, 'seconds')
+                }, {
+                  individualHooks: true,
+                  transaction: options.transaction || null
+                });
+            })
+            .then(function() {
+              return agent;
+            });
+
+        case 'chat':
+        case 'mail':
+        case 'fax':
+
+          var data = {};
+          data[util.format('%s%s', options.body.channel, 'Pause')] = false;
+
+          return agent
+            .update(data, {
+              transaction: options.transaction
+            })
+            .then(function(agent) {
+              var exitAt = moment();
+
+              return ReportMember
+                .findOne({
+                  where: {
+                    channel: options.body.channel,
+                    membername: agent.name,
+                    interface: util.format('%s/%s', 'SIP', agent.name),
+                    exitAt: null
+                  }
+                });
+            })
+            .then(handleEntityNotFound({
+              message: 'Already Pause Off'
+            }))
+            .then(function(reportMember) {
+              var exitAt = moment();
+              var enterAt = moment(reportMember.enterAt);
+
+              return reportMember
+                .update({
+                  exitAt: exitAt.format("YYYY-MM-DD HH:mm:ss"),
+                  duration: exitAt.diff(enterAt, 'seconds')
+                }, {
+                  individualHooks: true,
+                  transaction: options.transaction
+                });
+            })
+            .then(function() {
+              return agent;
+            });
+
+        default:
+          var action = Promise.promisify(ami.action);
+          return action({
+              action: 'QueuePause',
+              interface: util.format('%s/%s', 'SIP', agent.name),
+              paused: false
+            })
+            .catch(function(err) {
+              console.error(err);
+            })
+            .then(function() {
+              return agent
+                .update({
+                  voicePause: false,
+                  mailPause: false,
+                  chatPause: false,
+                  faxPause: false
+                }, {
+                  transaction: options.transaction
+                });
+            })
+            .then(function(agent) {
+              var exitAt = moment();
+              return ReportMember
+                .update({
+                  exitAt: exitAt
+                }, {
+                  where: {
+                    membername: agent.name,
+                    interface: util.format('%s/%s', 'SIP', agent.name),
+                    exitAt: null
+                  },
+                  transaction: options.transaction
+                });
+            })
+            .then(function() {
+              return agent;
+            });
+      }
+    }
+  }
+
+  // HANDLE LOGIN FUNCTION
+  function handleLogin(options, action) {
+    return function(agent) {
+      return agent
+        .getVoiceQueues()
+        .then(function(voiceQueues) {
+          var actions = [];
+          voiceQueues.forEach(function(voiceQueue) {
+            actions.push(ami.action({
+              action: 'QueueAdd',
+              queue: voiceQueue.name,
+              interface: util.format('%s/%s', 'SIP', agent.name),
+              membername: agent.name
+            }));
+          });
+          return Promise.all(actions);
+        })
+        .then(function(astData) {
+          var reportMembers = [];
+          channels.forEach(function(channel) {
+            reportMembers.push({
+              channel: channel,
+              membername: agent.name,
+              interface: util.format('%s/%s', 'SIP', agent.name),
+              type: 'LOGIN',
+              enterAt: moment().format("YYYY-MM-DD HH:mm:ss")
+            });
+          });
+          return ReportMember
+            .bulkCreate(reportMembers, {
+              individualHooks: true
+            });
+        });
+    }
+  }
+
+  // HANDLE LOGOUT FUNCTION
+  function handleLogout(options, action) {
+    return function(agent) {
+      return agent
+        .getVoiceQueues()
+        .then(function(voiceQueues) {
+          var actions = [];
+          voiceQueues.forEach(function(voiceQueue) {
+            actions.push(ami.action({
+              action: 'QueueRemove',
+              queue: voiceQueue.name,
+              interface: util.format('%s/%s', 'SIP', agent.name)
+            }));
+          });
+          return Promise
+            .all(actions)
+            .catch(function(err) {
+              console.error(err);
+            });
+        })
+        .then(function(astData) {
+          return ReportMember
+            .update({
+              exitAt: moment().format("YYYY-MM-DD HH:mm:ss")
+            }, {
+              where: {
+                membername: agent.name,
+                interface: util.format('%s/%s', 'SIP', agent.name),
+                type: 'LOGIN',
+                exitAt: null
+              },
+              individualHooks: true,
+              transaction: options.transaction
+            });
+        });
+    }
+  }
+
+  // HANDLE QUEUEADD FUNCTION
+  function handleQueueAdd(options, action) {
+    return function(agent) {
+      var bulkQueues = [];
+      switch (options.body.channel) {
+        case 'voice':
+          options.body.queues.forEach(function(queue) {
+            bulkQueues.push(UserHasVoiceQueue
+              .findOrCreate({
+                where: {
+                  UserId: agent.id,
+                  queue: queue
+                },
+                defaults: {
+                  queue: queue,
+                  location: util.format('SIP/%s', agent.name),
+                  membername: agent.name,
+                  UserId: agent.id,
+                },
+                transaction: options.transaction
+              }));
+          });
+          return Promise
+            .all(bulkQueues)
+            .then(function() {
+              var actions = [];
+              options.body.queues.forEach(function(queue) {
+                actions.push(ami.action({
+                  action: 'QueueAdd',
+                  queue: queue,
+                  interface: util.format('%s/%s', 'SIP', agent.name),
+                  membername: agent.name
+                }));
+              });
+              return Promise
+                .all(actions);
+            })
+            .catch(function(err) {
+              console.error(err);
+            })
+        case 'chat':
+          options.body.queues.forEach(function(queue) {
+            bulkQueues.push(UserHasChatQueue
+              .findOrCreate({
+                where: {
+                  UserId: agent.id,
+                  ChatQueueId: queue.id
+                },
+                defaults: {
+                  ChatQueueId: queue.id,
+                  queue: queue.name,
+                  UserId: agent.id,
+                },
+                transaction: options.transaction
+              }));
+          });
+          return Promise
+            .all(bulkQueues)
+            .catch(function(err) {
+              console.log(err);
+            });
+        case 'mail':
+          options.body.queues.forEach(function(queue) {
+            bulkQueues.push(UserHasMailQueue
+              .findOrCreate({
+                where: {
+                  UserId: agent.id,
+                  MailQueueId: queue.id
+                },
+                defaults: {
+                  MailQueueId: queue.id,
+                  queue: queue.name,
+                  UserId: agent.id,
+                },
+                transaction: options.transaction
+              }));
+          });
+          return Promise
+            .all(bulkQueues)
+            .catch(function(err) {
+              console.log(err);
+            });
+        case 'fax':
+          options.body.queues.forEach(function(queue) {
+            bulkQueues.push(UserHasFaxQueue
+              .findOrCreate({
+                where: {
+                  UserId: agent.id,
+                  FaxQueueId: queue.id
+                },
+                defaults: {
+                  faxQueueId: queue.id,
+                  queue: queue.name,
+                  UserId: agent.id,
+                },
+                transaction: options.transaction
+              }));
+          });
+          return Promise
+            .all(bulkQueues)
+            .catch(function(err) {
+              console.log(err);
+            });
+        default:
+      }
+    }
+  }
+
+  // HANDLE QUEUEREMOVE FUNCTION
+  function handleQueueRemove(options, action) {
+    return function(agent) {
+      switch (options.body.channel) {
+        case 'voice':
+          return UserHasVoiceQueue
+            .destroy({
+              where: {
+                UserId: agent.id,
+                queue: options.body.queue
+              },
+              transaction: options.transaction,
+              individualHooks: true
+            })
+            .then(function() {
+              var newAction = Promise.promisify(ami.action);
+              return newAction({
+                action: 'QueueRemove',
+                queue: options.body.queue,
+                interface: util.format('%s/%s', 'SIP', agent.name),
+              });
+            })
+            .catch(function(err) {
+              console.error('queue association remove error :', err);
+            });
+        case 'chat':
+          return UserHasChatQueue
+            .destroy({
+              where: {
+                UserId: agent.id,
+                ChatQueueId: options.body.queueId
+              },
+              transaction: options.transaction,
+              individualHooks: true
+            })
+            .catch(function(err) {
+              console.error('queue association remove error :', err);
+            });
+        case 'mail':
+          return UserHasMailQueue
+            .destroy({
+              where: {
+                UserId: agent.id,
+                MailQueueId: options.body.queueId
+              },
+              transaction: options.transaction,
+              individualHooks: true
+            })
+            .catch(function(err) {
+              console.error('queue association remove error :', err);
+            });
+        case 'fax':
+          return UserHasFaxQueue
+            .destroy({
+              where: {
+                UserId: agent.id,
+                FaxQueueId: options.body.queueId
+              },
+              transaction: options.transaction,
+              individualHooks: true
+            })
+            .catch(function(err) {
+              console.error('queue association remove error :', err);
+            });
+        default:
+      }
+    }
+  }
+
+  // HANDLE ENTITY NOT FOUND
+  function handleEntityNotFound(error) {
+    return function(entity) {
+      if (!entity) {
+        throw error;
+      }
+      return entity;
+    };
+  }
+
+  function onSave(action, options, ami) {
+    // START ACTION STATEMENT
+    switch (action.name) {
+      case 'pause':
+        // START HANDLE PAUSE
+        return Agent
+          .findById(options.body.agent)
+          .then(handleEntityNotFound({
+            message: 'Unknown Agent'
+          }))
+          .then(handlePause(options, action));
+        // END HANDLE PAUSE
+      case 'unpause':
+        // START HANDLE UNPAUSE
+        return Agent
+          .findById(options.body.agent)
+          .then(handleEntityNotFound({
+            message: 'Unknown Agent'
+          }))
+          .then(handleUnpause(options, action));
+        // END HANDLE UNPAUSE
+
+      case 'login':
+        // START HANDLE LOGIN
+        return Agent
+          .findById(action.data1)
+          .then(handleEntityNotFound({
+            message: 'Unknown Agent'
+          }))
+          .then(handleLogin(options, action));
+        // END HANDLE LOGING
+
+      case 'logout':
+        // START HANDLE LOGOUT
+        return Agent
+          .findById(action.data1)
+          .then(handleEntityNotFound({
+            message: 'Unknown Agent'
+          }))
+          .then(handleUnpause(options, action))
+          .then(handleLogout(options, action));
+        // END HANDLE LOGOUT
+      case 'QueueAdd':
+        // START HANDLE QUEUEADD
+        return Agent
+          .findById(options.body.agent)
+          .then(handleEntityNotFound({
+            message: 'Unknown Agent'
+          }))
+          .then(handleQueueAdd(options, action));
+        // END HANDLE QUEUEADD
+      case 'QueueRemove':
+        // START HANDLE QUEUEREMOVE
+        return Agent
+          .findById(options.body.agent)
+          .then(handleEntityNotFound({
+            message: 'Unknown Agent'
+          }))
+          .then(handleQueueRemove(options, action));
+        // END HANDLE QUEUEREMOVE
+
+      default:
+        throw {
+          message: 'Unknown Action'
+        };
+    }
+    // END ACTION STATEMENT
+  }
+
+  return {};
+}
+
+module.exports = Action;
index 10be274..d3f273e 100644 (file)
@@ -1 +1,152 @@
-var _0xaa3f=["\x6D\x6F\x6D\x65\x6E\x74","\x6C\x6F\x64\x61\x73\x68","\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x55\x73\x65\x72","\x41\x63\x74\x69\x6F\x6E","\x52\x65\x70\x6F\x72\x74\x41\x67\x65\x6E\x74","\x41\x43\x57\x20\x49\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x2E\x2E","\x6C\x6F\x67","\x63\x61\x74\x63\x68","\x69\x64","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x74\x68\x65\x6E","\x6E\x61\x6D\x65","\x66\x69\x6E\x64\x41\x6C\x6C","\x61\x67\x65\x6E\x74","\x73\x63\x6F\x70\x65","\x75\x6E\x70\x61\x75\x73\x65","\x62\x6F\x64\x79","\x61\x63\x77\x54\x69\x6D\x65","\x74\x69\x6D\x65\x6F\x75\x74","\x61\x73\x53\x65\x63\x6F\x6E\x64\x73","\x61\x63\x77\x41\x74","\x64\x75\x72\x61\x74\x69\x6F\x6E","\x75\x6E\x69\x71\x75\x65\x69\x64","\x64\x65\x73\x74\x75\x6E\x69\x71\x75\x65\x69\x64","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E","\x75\x70\x64\x61\x74\x65","\x61\x67\x65\x6E\x74\x63\x6F\x6D\x70\x6C\x65\x74\x65","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x71\x75\x65\x75\x65","\x66\x69\x6E\x64","\x6D\x65\x6D\x62\x65\x72\x6E\x61\x6D\x65","\x50\x41\x55\x53\x45\x44\x20\x42\x59\x20\x41\x43\x57","\x61\x63\x77\x54\x69\x6D\x65\x6F\x75\x74","\x55\x4E\x50\x41\x55\x53\x45\x44\x20\x42\x59\x20\x41\x43\x57","\x41\x43\x57","\x63\x72\x65\x61\x74\x65","\x70\x61\x75\x73\x65","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x72\x65\x6D\x6F\x76\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x69\x6E\x64\x65\x78\x4F\x66","\x6D\x65\x72\x67\x65","\x75\x6E\x73\x68\x69\x66\x74","\x65\x78\x70\x6F\x72\x74\x73"];var moment=require(_0xaa3f[0]);var _=require(_0xaa3f[1]);var VoiceQueue=require(_0xaa3f[3])[_0xaa3f[2]];var Agent=require(_0xaa3f[3])[_0xaa3f[4]];var Action=require(_0xaa3f[3])[_0xaa3f[5]];var ReportAgent=require(_0xaa3f[3])[_0xaa3f[6]];var _voiceQueues;var _agents;var activeAcw={};function ACW(_0x6b47xb){console[_0xaa3f[8]](_0xaa3f[7]);VoiceQueue[_0xaa3f[14]]()[_0xaa3f[12]](function(_0x6b47x10){_voiceQueues=_0x6b47x10;synchCollection(VoiceQueue,_voiceQueues,_0xaa3f[13]);return Agent[_0xaa3f[16]](_0xaa3f[15])[_0xaa3f[14]]()})[_0xaa3f[12]](function(_0x6b47xd){_agents=_0x6b47xd;synchCollection(Agent,_agents,_0xaa3f[10]);Action[_0xaa3f[11]](function(_0x6b47xe,_0x6b47xf){return onSave(_0x6b47xe,_0x6b47xf)})})[_0xaa3f[9]](function(_0x6b47xc){console[_0xaa3f[8]](_0x6b47xc)})}function onSave(_0x6b47xe,_0x6b47xf){if(_0x6b47xe[_0xaa3f[13]]===_0xaa3f[17]&&activeAcw[_0x6b47xf[_0xaa3f[18]][_0xaa3f[15]]]){var _0x6b47x12;if(activeAcw[_0x6b47xf[_0xaa3f[18]][_0xaa3f[15]]][_0xaa3f[17]]){_0x6b47x12=activeAcw[_0x6b47xf[_0xaa3f[18]][_0xaa3f[15]]][_0xaa3f[19]]}else {clearTimeout(activeAcw[_0x6b47xf[_0xaa3f[18]][_0xaa3f[15]]][_0xaa3f[20]]);_0x6b47x12=moment[_0xaa3f[23]](moment()-activeAcw[_0x6b47xf[_0xaa3f[18]][_0xaa3f[15]]][_0xaa3f[22]])[_0xaa3f[21]]()};return ReportAgent[_0xaa3f[27]]({agentacw:true,acwtime:_0x6b47x12},{where:{uniqueid:activeAcw[_0x6b47xf[_0xaa3f[18]][_0xaa3f[15]]][_0xaa3f[24]],destuniqueid:activeAcw[_0x6b47xf[_0xaa3f[18]][_0xaa3f[15]]][_0xaa3f[25]]},transaction:_0x6b47xf[_0xaa3f[26]],individualHooks:true})[_0xaa3f[12]](function(){delete activeAcw[_0x6b47xf[_0xaa3f[18]][_0xaa3f[15]]]})[_0xaa3f[9]](function(_0x6b47xc){console[_0xaa3f[8]](_0x6b47xc)})}}ACW[_0xaa3f[29]][_0xaa3f[28]]=function(_0x6b47x13){var _0x6b47x14=_[_0xaa3f[31]](_voiceQueues,{name:_0x6b47x13[_0xaa3f[30]],acw:true});if(_0x6b47x14){var _0x6b47x15=_[_0xaa3f[31]](_agents,{name:_0x6b47x13[_0xaa3f[32]]});Action[_0xaa3f[37]]({name:_0xaa3f[38],data1:_0x6b47x13[_0xaa3f[30]],data2:_0x6b47x14[_0xaa3f[34]],data3:_0x6b47x13[_0xaa3f[24]],data4:_0xaa3f[36]},{body:{agent:_0x6b47x15[_0xaa3f[10]],type:_0xaa3f[36]}})[_0xaa3f[12]](function(){console[_0xaa3f[8]](_0xaa3f[33]);activeAcw[_0x6b47x15[_0xaa3f[10]]]={uniqueid:_0x6b47x13[_0xaa3f[24]],destuniqueid:_0x6b47x13[_0xaa3f[25]],acwTime:_0x6b47x14[_0xaa3f[34]],acwAt:moment(),unpause:false};activeAcw[_0x6b47x15[_0xaa3f[10]]][_0xaa3f[20]]=setTimeout(function(){console[_0xaa3f[8]](_0xaa3f[35]);activeAcw[_0x6b47x15[_0xaa3f[10]]][_0xaa3f[17]]=true;return Action[_0xaa3f[37]]({name:_0xaa3f[17],data1:_0x6b47x13[_0xaa3f[30]],data2:_0x6b47x14[_0xaa3f[34]],data3:_0x6b47x13[_0xaa3f[24]],data4:_0xaa3f[36]},{body:{agent:_0x6b47x15[_0xaa3f[10]],type:_0xaa3f[36]}})[_0xaa3f[9]](function(_0x6b47xc){console[_0xaa3f[8]](_0x6b47xc)})},_0x6b47x14[_0xaa3f[34]]*1000)})[_0xaa3f[9]](function(_0x6b47xc){console[_0xaa3f[8]](_0x6b47xc)})}};function synchCollection(_0x6b47x17,_0x6b47x18,_0x6b47x19){var _0x6b47x1a={};_0x6b47x17[_0xaa3f[11]](function(_0x6b47xe){_0x6b47x1a[_0x6b47x19]=_0x6b47xe[_0x6b47x19];updateCollection(_0x6b47x18,_0x6b47xe,_0x6b47x1a)});_0x6b47x17[_0xaa3f[39]](function(_0x6b47xe){_0x6b47x1a[_0x6b47x19]=_0x6b47xe[_0x6b47x19];updateCollection(_0x6b47x18,_0x6b47xe,_0x6b47x1a)});_0x6b47x17[_0xaa3f[41]](function(_0x6b47xe){_0x6b47x1a[_0x6b47x19]=_0x6b47xe[_0x6b47x19];_[_0xaa3f[40]](_0x6b47x18,_0x6b47x1a)})}function updateCollection(_0x6b47x1c,_0x6b47xe,_0x6b47x1a){var _0x6b47x1d=_[_0xaa3f[31]](_0x6b47x1c,_0x6b47x1a);var _0x6b47x1e=_0x6b47x1c[_0xaa3f[42]](_0x6b47x1d);if(_0x6b47x1d){_[_0xaa3f[43]](_0x6b47x1c[_0x6b47x1e],_0x6b47xe)}else {_0x6b47x1c[_0xaa3f[44]](_0x6b47xe)}}module[_0xaa3f[45]]=ACW
\ No newline at end of file
+var moment = require('moment');
+var _ = require('lodash');
+var VoiceQueue = require('../../models').VoiceQueue;
+var Agent = require('../../models').User;
+var Action = require('../../models').Action;
+var ReportAgent = require('../../models').ReportAgent;
+var _voiceQueues;
+var _agents;
+var activeAcw = {};
+
+
+function ACW(ami) {
+  console.log('ACW Initialization...');
+  VoiceQueue
+    .findAll()
+    .then(function(voiceQueues) {
+      _voiceQueues = voiceQueues;
+      // console.log('_voiceQueues', _.map(_voiceQueues, 'dataValues'));
+      synchCollection(VoiceQueue, _voiceQueues, 'name');
+      return Agent
+        .scope('agent')
+        .findAll();
+    })
+    .then(function(agents) {
+      _agents = agents;
+      // console.log('_agents', _.map(_agents, 'dataValues'));
+      synchCollection(Agent, _agents, 'id');
+      Action.afterCreate(function(doc, options) {
+        return onSave(doc, options);
+      });
+    })
+    .catch(function(err) {
+      console.log(err);
+    });
+}
+
+function onSave(doc, options) {
+  if (doc.name === 'unpause' && activeAcw[options.body.agent]) {
+    var acwTime;
+    if (activeAcw[options.body.agent].unpause) {
+      acwTime = activeAcw[options.body.agent].acwTime;
+    } else {
+      clearTimeout(activeAcw[options.body.agent].timeout);
+      acwTime = moment.duration(moment() - activeAcw[options.body.agent].acwAt).asSeconds();
+    }
+    return ReportAgent
+      .update({
+        agentacw: true,
+        acwtime: acwTime
+      }, {
+        where: {
+          uniqueid: activeAcw[options.body.agent].uniqueid,
+          destuniqueid: activeAcw[options.body.agent].destuniqueid
+        },
+        transaction: options.transaction,
+        individualHooks: true
+      })
+      .then(function() {
+        delete activeAcw[options.body.agent];
+      })
+      .catch(function(err) {
+        console.log(err);
+      });
+  }
+}
+
+ACW.prototype.agentcomplete = function(evt) {
+  var queueIsAcw = _.find(_voiceQueues, {
+    name: evt.queue,
+    acw: true
+  });
+  if (queueIsAcw) {
+    var agent = _.find(_agents, {
+      name: evt.membername
+    });
+    Action
+      .create({
+        name: 'pause',
+        data1: evt.queue,
+        data2: queueIsAcw.acwTimeout,
+        data3: evt.uniqueid,
+        data4: 'ACW'
+      }, {
+        body: {
+          agent: agent.id,
+          type: 'ACW'
+        }
+      })
+      .then(function() {
+        console.log('PAUSED BY ACW');
+        activeAcw[agent.id] = {
+          uniqueid: evt.uniqueid,
+          destuniqueid: evt.destuniqueid,
+          acwTime: queueIsAcw.acwTimeout,
+          acwAt: moment(),
+          unpause: false
+        };
+
+        activeAcw[agent.id].timeout = setTimeout(function() {
+          console.log('UNPAUSED BY ACW');
+          activeAcw[agent.id].unpause = true;
+          return Action
+            .create({
+              name: 'unpause',
+              data1: evt.queue,
+              data2: queueIsAcw.acwTimeout,
+              data3: evt.uniqueid,
+              data4: 'ACW'
+            }, {
+              body: {
+                agent: agent.id,
+                type: 'ACW'
+              }
+            })
+            .catch(function(err) {
+              console.log(err);
+            });
+        }, queueIsAcw.acwTimeout * 1000);
+      })
+      .catch(function(err) {
+        console.log(err);
+      });
+  }
+}
+
+function synchCollection(model, array, uniqueProperty) {
+  var condition = {};
+  model.afterCreate(function(doc) {
+    condition[uniqueProperty] = doc[uniqueProperty]
+    updateCollection(array, doc, condition);
+  });
+  model.afterUpdate(function(doc) {
+    condition[uniqueProperty] = doc[uniqueProperty]
+    updateCollection(array, doc, condition);
+  });
+  model.afterDestroy(function(doc) {
+    condition[uniqueProperty] = doc[uniqueProperty]
+    _.remove(array, condition);
+  });
+}
+
+function updateCollection(collection, doc, condition) {
+  var oldItem = _.find(collection, condition);
+  var index = collection.indexOf(oldItem);
+  if (oldItem) {
+    _.merge(collection[index], doc);
+  } else {
+    collection.unshift(doc);
+  }
+}
+
+module.exports = ACW;
index 5cc2e87..1aca579 100644 (file)
@@ -1 +1,94 @@
-var _0x91ec=["\x6D\x6F\x6D\x65\x6E\x74","\x52\x65\x70\x6F\x72\x74\x41\x67\x65\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x41\x67\x65\x6E\x74\x20\x49\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x2E\x2E","\x6C\x6F\x67","\x63\x61\x6C\x6C\x65\x64","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x6C\x61\x73\x74\x65\x76\x65\x6E\x74","\x61\x67\x65\x6E\x74\x63\x61\x6C\x6C\x65\x64\x41\x74","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x66\x6F\x72\x6D\x61\x74","\x63\x6F\x6E\x6E\x65\x63\x74","\x61\x67\x65\x6E\x74\x63\x6F\x6E\x6E\x65\x63\x74\x41\x74","\x61\x6E\x73\x77\x65\x72\x65\x64\x5F\x65\x6C\x73\x65\x77\x68\x65\x72\x65","\x75\x6E\x69\x71\x75\x65\x69\x64","\x64\x65\x73\x74\x75\x6E\x69\x71\x75\x65\x69\x64","\x63\x6F\x6D\x70\x6C\x65\x74\x65","\x61\x67\x65\x6E\x74\x63\x6F\x6D\x70\x6C\x65\x74\x65","\x61\x67\x65\x6E\x74\x63\x6F\x6D\x70\x6C\x65\x74\x65\x41\x74","\x64\x75\x6D\x70","\x61\x67\x65\x6E\x74\x64\x75\x6D\x70","\x61\x67\x65\x6E\x74\x64\x75\x6D\x70\x41\x74","\x72\x69\x6E\x67\x6E\x6F\x61\x6E\x73\x77\x65\x72","\x72\x65\x6A\x65\x63\x74\x65\x64","\x61\x67\x65\x6E\x74\x72\x69\x6E\x67\x6E\x6F\x61\x6E\x73\x77\x65\x72","\x61\x67\x65\x6E\x74\x72\x69\x6E\x67\x6E\x6F\x61\x6E\x73\x77\x65\x72\x41\x74","\x72\x65\x61\x73\x6F\x6E","\x63\x61\x6C\x6C\x65\x72\x61\x62\x61\x6E\x64\x6F\x6E","\x61\x62\x61\x6E\x64\x6F\x6E\x65\x64","\x5B\x72\x65\x70\x6F\x72\x74\x5D\x20\x61\x67\x65\x6E\x74\x20","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x5B\x72\x65\x70\x6F\x72\x74\x5D\x20\x61\x67\x65\x6E\x74\x20\x62\x65\x67\x69\x6E\x20\x63\x72\x65\x61\x74\x65\x64","\x74\x68\x65\x6E","\x63\x72\x65\x61\x74\x65","\x5B\x61\x67\x65\x6E\x74\x5D\x20\x61\x67\x65\x6E\x74\x20\x65\x72\x72\x6F\x72\x3A\x20","\x5B\x61\x67\x65\x6E\x74\x5D\x20\x61\x67\x65\x6E\x74","\x75\x70\x64\x61\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];var moment=require(_0x91ec[0]);var ReportAgent=require(_0x91ec[2])[_0x91ec[1]];function Agent(){console[_0x91ec[4]](_0x91ec[3])}Agent[_0x91ec[6]][_0x91ec[5]]=function(_0xe39dx4){_0xe39dx4[_0x91ec[7]]=_0x91ec[5];_0xe39dx4[_0x91ec[8]]=moment()[_0x91ec[10]](_0x91ec[9]);return createAgent(_0xe39dx4)};Agent[_0x91ec[6]][_0x91ec[11]]=function(_0xe39dx4){_0xe39dx4[_0x91ec[7]]=_0x91ec[11];_0xe39dx4[_0x91ec[12]]=moment()[_0x91ec[10]](_0x91ec[9]);updateAgents(_0xe39dx4);updateAgents({agentringnoanswer:true,agentringnoanswerAt:moment()[_0x91ec[10]](_0x91ec[9]),reason:_0x91ec[13],lastevent:_0x91ec[13]},{uniqueid:_0xe39dx4[_0x91ec[14]],destuniqueid:{$ne:_0xe39dx4[_0x91ec[15]]},reason:null})};Agent[_0x91ec[6]][_0x91ec[16]]=function(_0xe39dx4){_0xe39dx4[_0x91ec[7]]=_0x91ec[16];_0xe39dx4[_0x91ec[17]]=true;_0xe39dx4[_0x91ec[18]]=moment()[_0x91ec[10]](_0x91ec[9]);return updateAgents(_0xe39dx4)};Agent[_0x91ec[6]][_0x91ec[19]]=function(_0xe39dx4){_0xe39dx4[_0x91ec[7]]=_0x91ec[19];_0xe39dx4[_0x91ec[20]]=true;_0xe39dx4[_0x91ec[21]]=moment()[_0x91ec[10]](_0x91ec[9]);return updateAgents(_0xe39dx4)};Agent[_0x91ec[6]][_0x91ec[22]]=function(_0xe39dx4){_0xe39dx4[_0x91ec[7]]=_0x91ec[23];_0xe39dx4[_0x91ec[24]]=true;_0xe39dx4[_0x91ec[25]]=moment()[_0x91ec[10]](_0x91ec[9]);_0xe39dx4[_0x91ec[26]]=_0x91ec[23];return updateAgents(_0xe39dx4)};Agent[_0x91ec[6]][_0x91ec[27]]=function(_0xe39dx4){_0xe39dx4[_0x91ec[7]]=_0x91ec[28];_0xe39dx4[_0x91ec[24]]=true;_0xe39dx4[_0x91ec[25]]=moment()[_0x91ec[10]](_0x91ec[9]);_0xe39dx4[_0x91ec[26]]=_0x91ec[28];return updateAgents(_0xe39dx4,{uniqueid:_0xe39dx4[_0x91ec[14]],reason:null})};function createAgent(_0xe39dx4){return ReportAgent[_0x91ec[34]](_0xe39dx4)[_0x91ec[33]](function(_0xe39dx7){console[_0x91ec[4]](_0x91ec[32])})[_0x91ec[31]](function(_0xe39dx6){console[_0x91ec[30]](_0x91ec[29]+_0xe39dx6)})}function updateAgents(_0xe39dx4,_0xe39dx9){return ReportAgent[_0x91ec[37]](_0xe39dx4,{where:(_0xe39dx9)?_0xe39dx9:{uniqueid:_0xe39dx4[_0x91ec[14]],destuniqueid:_0xe39dx4[_0x91ec[15]]},individualHooks:true})[_0x91ec[33]](function(_0xe39dx7){console[_0x91ec[4]](_0x91ec[36])})[_0x91ec[31]](function(_0xe39dx6){console[_0x91ec[30]](_0x91ec[35]+_0xe39dx6)})}module[_0x91ec[38]]=Agent
\ No newline at end of file
+var moment = require('moment');
+var ReportAgent = require('../../models').ReportAgent;
+
+function Agent() {
+  console.log('Agent Initialization...');
+}
+
+Agent.prototype.called = function(evt) {
+  evt.lastevent = 'called';
+  evt.agentcalledAt = moment().format("YYYY-MM-DD HH:mm:ss");
+  return createAgent(evt);
+}
+
+Agent.prototype.connect = function(evt) {
+  evt.lastevent = 'connect';
+  evt.agentconnectAt = moment().format("YYYY-MM-DD HH:mm:ss");
+  updateAgents(evt);
+  updateAgents({
+    agentringnoanswer: true,
+    agentringnoanswerAt: moment().format("YYYY-MM-DD HH:mm:ss"),
+    reason: 'answered_elsewhere',
+    lastevent: 'answered_elsewhere'
+  }, {
+    uniqueid: evt.uniqueid,
+    destuniqueid: {
+      $ne: evt.destuniqueid
+    },
+    reason: null
+  })
+}
+
+Agent.prototype.complete = function(evt) {
+  evt.lastevent = 'complete';
+  evt.agentcomplete = true;
+  evt.agentcompleteAt = moment().format("YYYY-MM-DD HH:mm:ss");
+  return updateAgents(evt);
+}
+
+Agent.prototype.dump = function(evt) {
+  evt.lastevent = 'dump';
+
+  evt.agentdump = true;
+  evt.agentdumpAt = moment().format("YYYY-MM-DD HH:mm:ss");
+  return updateAgents(evt);
+}
+
+Agent.prototype.ringnoanswer = function(evt) {
+  evt.lastevent = 'rejected';
+  evt.agentringnoanswer = true;
+  evt.agentringnoanswerAt = moment().format("YYYY-MM-DD HH:mm:ss");
+  evt.reason = 'rejected';
+  return updateAgents(evt);
+}
+
+Agent.prototype.callerabandon = function(evt) {
+  evt.lastevent = 'abandoned';
+  evt.agentringnoanswer = true;
+  evt.agentringnoanswerAt = moment().format("YYYY-MM-DD HH:mm:ss");
+  evt.reason = 'abandoned';
+  return updateAgents(evt, {
+    uniqueid: evt.uniqueid,
+    reason: null
+  });
+}
+
+function createAgent(evt) {
+  return ReportAgent
+    .create(evt)
+    .then(function(agent) {
+      console.log('[report] agent begin created');
+    })
+    .catch(function(err) {
+      console.error('[report] agent ' + err);
+    });
+}
+
+function updateAgents(evt, where) {
+  return ReportAgent
+    .update(evt, {
+      where: (where) ? where : {
+        uniqueid: evt.uniqueid,
+        destuniqueid: evt.destuniqueid
+      },
+      individualHooks: true
+    })
+    .then(function(agent) {
+      console.log('[agent] agent')
+    })
+    .catch(function(err) {
+      console.error('[agent] agent error: ' + err);
+    });
+}
+
+module.exports = Agent;
index e012cb2..15e34b3 100644 (file)
@@ -1 +1,26 @@
-var _0xe07b=["\x43\x61\x6C\x6C\x20\x49\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x2E\x2E","\x6C\x6F\x67","\x61\x64\x64","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x52\x65\x70\x6F\x72\x74\x43\x61\x6C\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x5B\x72\x65\x70\x6F\x72\x74\x5D\x20\x63\x61\x6C\x6C\x20","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x5B\x72\x65\x70\x6F\x72\x74\x5D\x20\x63\x61\x6C\x6C\x20\x63\x72\x65\x61\x74\x65\x64\x3A\x20","\x73\x70\x72\x65\x61\x64","\x75\x6E\x69\x71\x75\x65\x69\x64","\x66\x69\x6E\x64\x4F\x72\x43\x72\x65\x61\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];function Call(){console[_0xe07b[1]](_0xe07b[0])}Call[_0xe07b[3]][_0xe07b[2]]=function(_0x8e4fx2){create(_0x8e4fx2)};function create(_0x8e4fx2){var _0x8e4fx4=require(_0xe07b[5])[_0xe07b[4]];_0x8e4fx4[_0xe07b[12]]({where:{uniqueid:_0x8e4fx2[_0xe07b[11]]},defaults:_0x8e4fx2})[_0xe07b[10]](function(_0x8e4fx4,_0x8e4fx6){console[_0xe07b[1]](_0xe07b[9],_0x8e4fx6)})[_0xe07b[8]](function(_0x8e4fx5){console[_0xe07b[7]](_0xe07b[6]+_0x8e4fx5)})}module[_0xe07b[13]]=Call
\ No newline at end of file
+function Call() {
+  console.log('Call Initialization...');
+}
+
+Call.prototype.add = function(evt) {
+  create(evt);
+}
+
+function create(evt) {
+  var call = require('../../models').ReportCall;
+  call
+    .findOrCreate({
+      where: {
+        uniqueid: evt.uniqueid
+      },
+      defaults: evt
+    })
+    .spread(function(call, created) {
+      console.log('[report] call created: ', created);
+    })
+    .catch(function(err) {
+      console.error('[report] call ' + err);
+    });
+}
+
+module.exports = Call;
index 96d9888..3d7c92b 100644 (file)
@@ -1 +1,217 @@
-var _0x6d04=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x61\x67\x65\x6E\x74","\x2E\x2F\x61\x63\x74\x69\x6F\x6E","\x2E\x2F\x63\x61\x6C\x6C","\x2E\x2F\x6D\x65\x6D\x62\x65\x72","\x2E\x2F\x71\x75\x65\x75\x65\x5F\x63\x61\x6C\x6C\x65\x72","\x2E\x2F\x71\x75\x65\x75\x65\x5F\x6D\x65\x6D\x62\x65\x72","\x2E\x2F\x72\x65\x63\x6F\x72\x64\x69\x6E\x67","\x2E\x2F\x74\x72\x75\x6E\x6B","\x2E\x2F\x76\x6F\x69\x63\x65\x5F\x63\x6F\x6E\x74\x65\x78\x74","\x2E\x2F\x61\x63\x77","\x2E\x2F\x75\x73\x65\x72","\x2E\x2F\x74\x72\x61\x6E\x73\x66\x65\x72","\x76\x61\x72\x69\x61\x62\x6C\x65","\x6B\x65\x79\x73","\x65\x78\x70\x6F\x72\x74\x73","\x63\x6F\x6E\x6E\x65\x63\x74","\x5B\x25\x73\x3A\x25\x73\x5D\x20\x41\x4D\x49\x20\x43\x4F\x4E\x4E\x45\x43\x54\x45\x44","\x68\x6F\x73\x74","\x6F\x70\x74\x69\x6F\x6E\x73","\x70\x6F\x72\x74","\x69\x6E\x66\x6F","\x63\x6F\x6E\x6E\x65\x63\x74\x65\x64\x41\x74","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x5B\x25\x73\x3A\x25\x73\x5D\x20\x41\x4D\x49\x20\x44\x49\x53\x43\x4F\x4E\x4E\x45\x43\x54\x45\x44","\x63\x6C\x6F\x73\x65","\x5B\x25\x73\x3A\x25\x73\x5D\x20\x41\x4D\x49\x20\x43\x4C\x4F\x53\x45\x3A\x20\x25\x73","\x6C\x6F\x67","\x65\x72\x72\x6F\x72","\x5B\x25\x73\x3A\x25\x73\x5D\x20\x41\x4D\x49\x20\x45\x52\x52\x4F\x52\x3A\x20\x25\x73","\x6D\x61\x6E\x61\x67\x65\x72\x65\x76\x65\x6E\x74","\x64\x65\x76\x69\x63\x65\x73\x74\x61\x74\x65\x63\x68\x61\x6E\x67\x65","\x53\x49\x50\x2F","\x69\x6E\x64\x65\x78\x4F\x66","\x64\x65\x76\x69\x63\x65","\x73\x74\x61\x74\x65\x55\x70\x64\x61\x74\x65","\x61\x67\x65\x6E\x74\x63\x61\x6C\x6C\x65\x64","\x63\x61\x6C\x6C\x65\x64","\x61\x67\x65\x6E\x74\x63\x6F\x6D\x70\x6C\x65\x74\x65","\x63\x6F\x6D\x70\x6C\x65\x74\x65","\x61\x67\x65\x6E\x74\x63\x6F\x6E\x6E\x65\x63\x74","\x61\x67\x65\x6E\x74\x64\x75\x6D\x70","\x64\x75\x6D\x70","\x61\x67\x65\x6E\x74\x72\x69\x6E\x67\x6E\x6F\x61\x6E\x73\x77\x65\x72","\x72\x69\x6E\x67\x6E\x6F\x61\x6E\x73\x77\x65\x72","\x71\x75\x65\x75\x65\x6D\x65\x6D\x62\x65\x72\x61\x64\x64\x65\x64","\x6C\x6F\x67\x69\x6E","\x61\x64\x64\x65\x64","\x71\x75\x65\x75\x65\x6D\x65\x6D\x62\x65\x72\x70\x61\x75\x73\x65","\x70\x61\x75\x73\x65","\x71\x75\x65\x75\x65\x6D\x65\x6D\x62\x65\x72\x70\x65\x6E\x61\x6C\x74\x79","\x70\x65\x6E\x61\x6C\x74\x79","\x71\x75\x65\x75\x65\x6D\x65\x6D\x62\x65\x72\x72\x65\x6D\x6F\x76\x65\x64","\x6C\x6F\x67\x6F\x75\x74","\x72\x65\x6D\x6F\x76\x65\x64","\x71\x75\x65\x75\x65\x6D\x65\x6D\x62\x65\x72\x72\x69\x6E\x67\x69\x6E\x75\x73\x65","\x72\x69\x6E\x67\x69\x6E\x75\x73\x65","\x71\x75\x65\x75\x65\x6D\x65\x6D\x62\x65\x72\x73\x74\x61\x74\x75\x73","\x73\x74\x61\x74\x75\x73","\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6A\x6F\x69\x6E","\x6A\x6F\x69\x6E","\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x61\x62\x61\x6E\x64\x6F\x6E","\x61\x62\x61\x6E\x64\x6F\x6E","\x63\x61\x6C\x6C\x65\x72\x61\x62\x61\x6E\x64\x6F\x6E","\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6C\x65\x61\x76\x65","\x6C\x65\x61\x76\x65","\x63\x64\x72","\x61\x64\x64","\x68\x61\x6E\x67\x75\x70","\x6D\x6F\x6E\x69\x74\x6F\x72\x73\x74\x61\x72\x74","\x6D\x6F\x6E\x69\x74\x6F\x72\x73\x74\x6F\x70","\x6F\x75\x74\x62\x6F\x75\x6E\x64","\x63\x72\x65\x61\x74\x65","\x62\x6C\x69\x6E\x64\x74\x72\x61\x6E\x73\x66\x65\x72","\x74\x79\x70\x65","\x62\x6C\x69\x6E\x64","\x63\x72\x65\x61\x74\x65\x42\x6C\x69\x6E\x64","\x61\x74\x74\x65\x6E\x64\x65\x64\x74\x72\x61\x6E\x73\x66\x65\x72","\x61\x74\x74\x65\x6E\x64\x65\x64","\x63\x72\x65\x61\x74\x65\x41\x74\x74\x65\x6E\x64\x65\x64","\x76\x61\x72\x73\x65\x74","\x69\x6E\x62\x6F\x75\x6E\x64","\x6D\x69\x78\x6D\x6F\x6E\x69\x74\x6F\x72\x5F\x66\x69\x6C\x65\x6E\x61\x6D\x65","\x65\x78\x69\x74","\x71\x75\x65\x75\x65\x73\x74\x61\x74\x75\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x2E\x2F\x2E\x2E\x2F\x66\x61\x78","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x70\x69\x2F\x61\x6D\x69\x2F\x61\x6D\x69\x2E\x61\x6D\x69"];_0x6d04[0];var Agent=require(_0x6d04[1]);var Action=require(_0x6d04[2]);var Call=require(_0x6d04[3]);var Member=require(_0x6d04[4]);var QueueCaller=require(_0x6d04[5]);var QueueMember=require(_0x6d04[6]);var Recording=require(_0x6d04[7]);var Trunk=require(_0x6d04[8]);var Context=require(_0x6d04[9]);var ACW=require(_0x6d04[10]);var User=require(_0x6d04[11]);var Transfer=require(_0x6d04[12]);function onDisconnect(_0x149bxe){}function onConnect(_0x149bxe){}function getVariable(_0x149bx11){var _0x149bx12=Object[_0x6d04[14]](_0x149bx11[_0x6d04[13]]);_0x149bx11[_0x6d04[13]]=_0x149bx12[0];return _0x149bx11}module[_0x6d04[15]]=function(_0x149bxe){var _0x149bx13= new Agent();var _0x149bx14= new Call();var _0x149bx15= new Member();var _0x149bx16= new QueueMember();var _0x149bx17= new QueueCaller();var _0x149bx18= new Recording();var _0x149bx19= new Trunk(_0x149bxe);var _0x149bx1a= new Context(_0x149bxe);var _0x149bx1b= new Action(_0x149bxe);var _0x149bx1c= new ACW(_0x149bxe);var _0x149bx1d= new User();var _0x149bx1e= new Transfer();_0x149bxe[_0x6d04[23]](_0x6d04[16],function(){console[_0x6d04[21]](_0x6d04[17],_0x149bxe[_0x6d04[19]][_0x6d04[18]],_0x149bxe[_0x6d04[19]][_0x6d04[20]]);_0x149bxe[_0x6d04[19]][_0x6d04[22]]= new Date();onConnect(_0x149bxe)});_0x149bxe[_0x6d04[23]](_0x6d04[24],function(){onDisconnect(_0x149bxe);console[_0x6d04[21]](_0x6d04[25],_0x149bxe[_0x6d04[19]][_0x6d04[18]],_0x149bxe[_0x6d04[19]][_0x6d04[20]])});_0x149bxe[_0x6d04[23]](_0x6d04[26],function(_0x149bx1f){console[_0x6d04[28]](_0x6d04[27],_0x149bxe[_0x6d04[19]][_0x6d04[18]],_0x149bxe[_0x6d04[19]][_0x6d04[20]],_0x149bx1f)});_0x149bxe[_0x6d04[23]](_0x6d04[29],function(_0x149bx20){console[_0x6d04[28]](_0x6d04[30],_0x149bxe[_0x6d04[19]][_0x6d04[18]],_0x149bxe[_0x6d04[19]][_0x6d04[20]],_0x149bx20)});_0x149bxe[_0x6d04[23]](_0x6d04[31],function(_0x149bx21){});_0x149bxe[_0x6d04[23]](_0x6d04[32],function(_0x149bx21){if(_0x149bx21[_0x6d04[35]][_0x6d04[34]](_0x6d04[33])===0){_0x149bx1d[_0x6d04[36]](_0x149bx21)}});_0x149bxe[_0x6d04[23]](_0x6d04[37],function(_0x149bx21){_0x149bx13[_0x6d04[38]](_0x149bx21)});_0x149bxe[_0x6d04[23]](_0x6d04[39],function(_0x149bx21){console[_0x6d04[28]](_0x6d04[39],_0x149bx21);_0x149bx1c[_0x6d04[39]](_0x149bx21);_0x149bx13[_0x6d04[40]](_0x149bx21);_0x149bx17[_0x6d04[40]](_0x149bx21)});_0x149bxe[_0x6d04[23]](_0x6d04[41],function(_0x149bx21){_0x149bx13[_0x6d04[16]](_0x149bx21)});_0x149bxe[_0x6d04[23]](_0x6d04[42],function(_0x149bx21){_0x149bx13[_0x6d04[43]](_0x149bx21)});_0x149bxe[_0x6d04[23]](_0x6d04[44],function(_0x149bx21){_0x149bx13[_0x6d04[45]](_0x149bx21)});_0x149bxe[_0x6d04[23]](_0x6d04[46],function(_0x149bx21){_0x149bx15[_0x6d04[47]](_0x149bx21);_0x149bx16[_0x6d04[48]](_0x149bx21)});_0x149bxe[_0x6d04[23]](_0x6d04[49],function(_0x149bx21){_0x149bx15[_0x6d04[50]](_0x149bx21);_0x149bx16[_0x6d04[50]](_0x149bx21)});_0x149bxe[_0x6d04[23]](_0x6d04[51],function(_0x149bx21){_0x149bx16[_0x6d04[52]](_0x149bx21)});_0x149bxe[_0x6d04[23]](_0x6d04[53],function(_0x149bx21){_0x149bx15[_0x6d04[54]](_0x149bx21);_0x149bx16[_0x6d04[55]](_0x149bx21)});_0x149bxe[_0x6d04[23]](_0x6d04[56],function(_0x149bx21){_0x149bx16[_0x6d04[57]](_0x149bx21)});_0x149bxe[_0x6d04[23]](_0x6d04[58],function(_0x149bx21){_0x149bx16[_0x6d04[59]](_0x149bx21)});_0x149bxe[_0x6d04[23]](_0x6d04[60],function(_0x149bx21){_0x149bx17[_0x6d04[61]](_0x149bx21)});_0x149bxe[_0x6d04[23]](_0x6d04[62],function(_0x149bx21){_0x149bx17[_0x6d04[63]](_0x149bx21);_0x149bx13[_0x6d04[64]](_0x149bx21)});_0x149bxe[_0x6d04[23]](_0x6d04[65],function(_0x149bx21){_0x149bx17[_0x6d04[66]](_0x149bx21)});_0x149bxe[_0x6d04[23]](_0x6d04[67],function(_0x149bx21){_0x149bx14[_0x6d04[68]](_0x149bx21)});_0x149bxe[_0x6d04[23]](_0x6d04[69],function(_0x149bx21){});_0x149bxe[_0x6d04[23]](_0x6d04[70],function(_0x149bx21){});_0x149bxe[_0x6d04[23]](_0x6d04[71],function(_0x149bx21){_0x149bx18[_0x6d04[73]](_0x149bx21,_0x6d04[72])});_0x149bxe[_0x6d04[23]](_0x6d04[74],function(_0x149bx21){console[_0x6d04[28]](_0x6d04[74],_0x149bx21);_0x149bx21[_0x6d04[75]]=_0x6d04[76];_0x149bx1e[_0x6d04[77]](_0x149bx21)});_0x149bxe[_0x6d04[23]](_0x6d04[78],function(_0x149bx21){console[_0x6d04[28]](_0x6d04[78],_0x149bx21);_0x149bx21[_0x6d04[75]]=_0x6d04[79];_0x149bx1e[_0x6d04[80]](_0x149bx21)});_0x149bxe[_0x6d04[23]](_0x6d04[81],function(_0x149bx21){var _0x149bx11=getVariable(_0x149bx21);switch(_0x149bx11[_0x6d04[13]]){case _0x6d04[83]:_0x149bx18[_0x6d04[73]](_0x149bx11,_0x6d04[82]);break;case _0x6d04[85]:_0x149bx17[_0x6d04[84]](_0x149bx11);break;default:break}});require(_0x6d04[87])[_0x6d04[86]](_0x149bxe);require(_0x6d04[88])[_0x6d04[86]](_0x149bxe)}
\ No newline at end of file
+'use strict';
+
+var Agent = require('./agent');
+var Action = require('./action');
+var Call = require('./call');
+var Member = require('./member');
+var QueueCaller = require('./queue_caller');
+var QueueMember = require('./queue_member');
+var Recording = require('./recording');
+var Trunk = require('./trunk');
+var Context = require('./voice_context');
+var ACW = require('./acw');
+var User = require('./user');
+var Transfer = require('./transfer');
+
+// When the ami disconnects.. perform this
+function onDisconnect(ami) {}
+
+// When the ami connects.. perform this
+function onConnect(ami) {}
+
+function getVariable(event) {
+  var keys = Object.keys(event.variable);
+  event.variable = keys[0];
+  return event;
+}
+
+module.exports = function(ami) {
+
+  var agent = new Agent();
+  var call = new Call();
+  var member = new Member();
+  var queuemember = new QueueMember();
+  var queuecaller = new QueueCaller();
+  var recording = new Recording();
+  var trunk = new Trunk(ami);
+  var context = new Context(ami);
+  var action = new Action(ami);
+  var acw = new ACW(ami);
+  var user = new User();
+  var tranfer = new Transfer();
+
+  // Asterisk Status Connect
+
+  // Raised when asterisk is connected
+  ami.on('connect', function() {
+    console.info('[%s:%s] AMI CONNECTED', ami.options.host, ami.options.port);
+    ami.options.connectedAt = new Date();
+    // Call onConnect.
+    onConnect(ami);
+  });
+
+  // Raised when asterisk is disconnected
+  ami.on('disconnect', function() {
+    // Call onDisconnect.
+    onDisconnect(ami);
+    console.info('[%s:%s] AMI DISCONNECTED', ami.options.host, ami.options.port);
+  });
+
+  // Raised when asterisk is closed
+  ami.on('close', function(flag) {
+    console.log('[%s:%s] AMI CLOSE: %s', ami.options.host, ami.options.port, flag);
+  });
+
+  // Raised when asterisk has an error
+  ami.on('error', function(err) {
+    console.log('[%s:%s] AMI ERROR: %s', ami.options.host, ami.options.port, err);
+  });
+
+  ami.on('managerevent', function(evt) {
+    // console.log(evt);
+  });
+
+  ami.on('devicestatechange', function(evt) {
+    // console.log(evt);
+    if (evt.device.indexOf('SIP/') === 0) {
+      user.stateUpdate(evt);
+    }
+  });
+
+  // Agent Status Events
+
+  // Raised when an Agent is notified of a member in the queue.
+  ami.on('agentcalled', function(evt) {
+    agent.called(evt);
+  });
+
+  // Raised when an agent has finished servicing a member in the queue.
+  ami.on('agentcomplete', function(evt) {
+    console.log('agentcomplete', evt);
+    acw.agentcomplete(evt);
+    agent.complete(evt);
+    queuecaller.complete(evt);
+  });
+
+  // Raised when an agent answers and is bridged to a member in the queue.
+  ami.on('agentconnect', function(evt) {
+    agent.connect(evt);
+  });
+
+  // Raised when an agent hangs up on a member in the queue.
+  ami.on('agentdump', function(evt) {
+    agent.dump(evt);
+  });
+
+  // Raised when an agent is notified of a member in the queue and fails to answer.
+  ami.on('agentringnoanswer', function(evt) {
+    agent.ringnoanswer(evt);
+  });
+
+  // Member Status Events in Queue
+
+  // Raised when a member is added to the queue.
+  ami.on('queuememberadded', function(evt) {
+    member.login(evt);
+    queuemember.added(evt);
+  });
+
+  // Raised when a member is paused/unpaused in the queue with a reason.
+  ami.on('queuememberpause', function(evt) {
+    member.pause(evt);
+    queuemember.pause(evt);
+  });
+
+  // Raised when a member's penalty is changed.
+  ami.on('queuememberpenalty', function(evt) {
+    queuemember.penalty(evt);
+  });
+
+  // Raised when a member is removed from the queue.
+  ami.on('queuememberremoved', function(evt) {
+    member.logout(evt);
+    queuemember.removed(evt);
+  });
+
+  // Raised when a member's ringinuse setting is changed.
+  ami.on('queuememberringinuse', function(evt) {
+    queuemember.ringinuse(evt);
+  });
+
+  // Raised when a Queue member's status has changed.
+  ami.on('queuememberstatus', function(evt) {
+    queuemember.status(evt);
+  });
+
+  // Queue Status Events
+
+  // Raised when a caller joins a Queue.
+  ami.on('queuecallerjoin', function(evt) {
+    queuecaller.join(evt);
+  });
+
+  // Raised when a caller abandons the queue.
+  ami.on('queuecallerabandon', function(evt) {
+    queuecaller.abandon(evt);
+    //queuemember.callerabandon(evt);
+    agent.callerabandon(evt);
+  });
+
+  // Raised when a caller leaves a Queue.
+  ami.on('queuecallerleave', function(evt) {
+    queuecaller.leave(evt);
+  });
+
+  // Cdr Status Events
+
+  // Raised when a CDR is generated.
+  ami.on('cdr', function(evt) {
+    call.add(evt);
+  });
+
+  // Hangup Status Events
+  ami.on('hangup', function(evt) {
+    //agent.hangup(evt);
+  });
+
+  // Recordings Events
+  ami.on('monitorstart', function(evt) {
+    // console.log('evt', evt);
+  });
+
+  ami.on('monitorstop', function(evt) {
+    // console.log('evt', evt);
+    recording.create(evt, 'outbound');
+  });
+
+  ami.on('blindtransfer', function(evt) {
+    console.log('blindtransfer', evt);
+    evt.type = 'blind';
+    tranfer.createBlind(evt);
+  });
+
+  ami.on('attendedtransfer', function(evt) {
+    console.log('attendedtransfer', evt);
+    evt.type = 'attended';
+    tranfer.createAttended(evt);
+  });
+
+  // Variable Events
+  ami.on('varset', function(evt) {
+    var event = getVariable(evt);
+    switch (event.variable) {
+      case 'mixmonitor_filename':
+        recording.create(event, 'inbound');
+        break;
+      case 'queuestatus':
+        queuecaller.exit(event);
+        break;
+      default:
+        // console.log('Variable not managed:', event.variable);
+        break;
+    }
+  });
+
+  require('./../fax').register(ami);
+  require('../../api/ami/ami.ami').register(ami);
+};
index 014efd2..0c4d403 100644 (file)
@@ -1 +1,111 @@
-var _0xfde9=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6D\x6F\x6D\x65\x6E\x74","\x52\x65\x70\x6F\x72\x74\x4D\x65\x6D\x62\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x4D\x65\x6D\x62\x65\x72\x20\x49\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x2E\x2E","\x6C\x6F\x67","\x6C\x6F\x67\x69\x6E","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x73\x74\x61\x74\x65","\x73\x74\x61\x74\x65\x64\x65\x73\x63","\x4C\x4F\x47\x49\x4E","\x65\x6E\x74\x65\x72\x64\x61\x74\x65","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x66\x6F\x72\x6D\x61\x74","\x6C\x6F\x67\x6F\x75\x74","\x65\x78\x69\x74\x64\x61\x74\x65","\x70\x61\x75\x73\x65","\x50\x41\x55\x53\x45","\x70\x61\x75\x73\x65\x64","\x72\x65\x61\x73\x6F\x6E","\x65\x78\x70\x6F\x72\x74\x73"];_0xfde9[0];var moment=require(_0xfde9[1]);var member=require(_0xfde9[3])[_0xfde9[2]];function Member(){console[_0xfde9[5]](_0xfde9[4])}Member[_0xfde9[7]][_0xfde9[6]]=function(_0x7ca5x4){_0x7ca5x4[_0xfde9[8]]=0;_0x7ca5x4[_0xfde9[9]]=_0xfde9[10];_0x7ca5x4[_0xfde9[11]]=moment()[_0xfde9[13]](_0xfde9[12]);findOrCreate(_0x7ca5x4)};Member[_0xfde9[7]][_0xfde9[14]]=function(_0x7ca5x4){_0x7ca5x4[_0xfde9[8]]=0;_0x7ca5x4[_0xfde9[9]]=_0xfde9[10];_0x7ca5x4[_0xfde9[15]]=moment()[_0xfde9[13]](_0xfde9[12]);findAndUpdate(_0x7ca5x4)};Member[_0xfde9[7]][_0xfde9[16]]=function(_0x7ca5x4){_0x7ca5x4[_0xfde9[8]]=1;_0x7ca5x4[_0xfde9[9]]=_0xfde9[17];var _0x7ca5x5=parseInt(_0x7ca5x4[_0xfde9[18]],10);if(_0x7ca5x5){_0x7ca5x4[_0xfde9[11]]=moment()[_0xfde9[13]](_0xfde9[12]);findOrCreate(_0x7ca5x4)}else {if(_0x7ca5x4[_0xfde9[19]]){delete _0x7ca5x4[_0xfde9[19]]};_0x7ca5x4[_0xfde9[15]]=moment()[_0xfde9[13]](_0xfde9[12]);findAndUpdate(_0x7ca5x4)}};function findOrCreate(_0x7ca5x4){}function findAndUpdate(_0x7ca5x4){}module[_0xfde9[20]]=Member
\ No newline at end of file
+'use strict';
+
+var moment = require('moment');
+
+var member = require('../../models').ReportMember;
+
+function Member() {
+  console.log('Member Initialization...');
+
+
+}
+
+Member.prototype.login = function (evt) {
+  evt.state = 0;
+  evt.statedesc = 'LOGIN';
+
+  evt.enterdate = moment().format("YYYY-MM-DD HH:mm:ss");
+
+  findOrCreate(evt);
+}
+
+Member.prototype.logout = function (evt) {
+  evt.state = 0;
+  evt.statedesc = 'LOGIN';
+
+  evt.exitdate = moment().format("YYYY-MM-DD HH:mm:ss");
+  findAndUpdate(evt);
+}
+
+Member.prototype.pause = function (evt) {
+  evt.state = 1;
+  evt.statedesc = 'PAUSE';
+
+  var paused = parseInt(evt.paused, 10);
+  if (paused) {
+    evt.enterdate = moment().format("YYYY-MM-DD HH:mm:ss");
+    findOrCreate(evt);
+  } else {
+    if (evt.reason) {
+      delete evt.reason;
+    }
+
+    evt.exitdate = moment().format("YYYY-MM-DD HH:mm:ss");
+    findAndUpdate(evt);
+  }
+}
+
+function findOrCreate(evt) {
+  // member.
+  // findOne({
+  //   where: {
+  //     queue: evt.queue,
+  //     membername: evt.membername,
+  //     state: evt.state,
+  //   }
+  // });
+
+  // member
+  //   .findOrCreate({
+  //     where: {
+  //       queue: evt.queue,
+  //       membername: evt.membername,
+  //       state: evt.state,
+  //       enterdate: {
+  //         $ne: null
+  //       },
+  //       exitdate: null
+  //     },
+  //     defaults: evt
+  //   })
+  //   .spread(function(mem, created) {
+  //     if (created) {
+  //       console.log('[member] member created');
+  //     } else {
+  //       console.log('[member] member exist');
+  //       mem
+  //         .updateAttributes({
+  //           exitdate: moment().format("YYYY-MM-DD HH:mm:ss")
+  //         })
+  //         .then(function(res) {
+  //           console.log('[member] member updated');
+  //           findOrCreate(evt);
+  //         });
+  //     }
+  //   });
+}
+
+function findAndUpdate(evt) {
+  // var member = require('../../models').ReportMember;
+  // member
+  //   .update(evt, {
+  //     where: {
+  //       queue: evt.queue,
+  //       membername: evt.membername,
+  //       state: evt.state,
+  //       enterdate: {
+  //         $ne: null
+  //       },
+  //       exitdate: null,
+  //       reason: null
+  //     }
+  //   })
+  //   .then(function(member) {
+  //     console.log('[member] member updated');
+  //   })
+  //   .catch(function(err) {
+  //     console.error('[member] member error: ' + err);
+  //   });
+}
+
+module.exports = Member;
index dc2e90d..d5ebc2a 100644 (file)
@@ -1 +1,69 @@
-var _0x7b73=["\x6D\x6F\x6D\x65\x6E\x74","\x52\x65\x70\x6F\x72\x74\x51\x75\x65\x75\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x51\x75\x65\x75\x65\x43\x61\x6C\x6C\x65\x72\x20\x49\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x2E\x2E","\x6C\x6F\x67","\x6A\x6F\x69\x6E","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6A\x6F\x69\x6E\x41\x74","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x66\x6F\x72\x6D\x61\x74","\x6C\x65\x61\x76\x65","\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6C\x65\x61\x76\x65\x41\x74","\x61\x62\x61\x6E\x64\x6F\x6E","\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x61\x62\x61\x6E\x64\x6F\x6E","\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x61\x62\x61\x6E\x64\x6F\x6E\x41\x74","\x63\x6F\x6D\x70\x6C\x65\x74\x65","\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x63\x6F\x6D\x70\x6C\x65\x74\x65","\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x63\x6F\x6D\x70\x6C\x65\x74\x65\x41\x74","\x65\x78\x69\x74","\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x65\x78\x69\x74","\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x65\x78\x69\x74\x41\x74","\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x65\x78\x69\x74\x72\x65\x61\x73\x6F\x6E","\x74\x6F\x4C\x6F\x77\x65\x72\x43\x61\x73\x65","\x76\x61\x6C\x75\x65","\x5B\x72\x65\x70\x6F\x72\x74\x5D\x20\x71\x75\x65\x75\x65\x20","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x5B\x72\x65\x70\x6F\x72\x74\x5D\x20\x71\x75\x65\x75\x65\x20\x63\x72\x65\x61\x74\x65\x64","\x74\x68\x65\x6E","\x63\x72\x65\x61\x74\x65","\x5B\x71\x75\x65\x75\x65\x5F\x63\x61\x6C\x6C\x65\x72\x5D\x20\x71\x75\x65\x75\x65\x5F\x63\x61\x6C\x6C\x65\x72\x20\x65\x72\x72\x6F\x72\x3A\x20","\x5B\x71\x75\x65\x75\x65\x5F\x63\x61\x6C\x6C\x65\x72\x5D\x20\x71\x75\x65\x75\x65\x5F\x63\x61\x6C\x6C\x65\x72\x20\x75\x70\x64\x61\x74\x65\x64","\x69\x6E\x66\x6F","\x75\x6E\x69\x71\x75\x65\x69\x64","\x75\x70\x64\x61\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];var moment=require(_0x7b73[0]);var ReportQueue=require(_0x7b73[2])[_0x7b73[1]];function QueueCaller(){console[_0x7b73[4]](_0x7b73[3])}QueueCaller[_0x7b73[6]][_0x7b73[5]]=function(_0x8033x4){_0x8033x4[_0x7b73[7]]=moment()[_0x7b73[9]](_0x7b73[8]);return create(_0x8033x4)};QueueCaller[_0x7b73[6]][_0x7b73[10]]=function(_0x8033x4){_0x8033x4[_0x7b73[11]]=moment()[_0x7b73[9]](_0x7b73[8]);return findAndUpdate(_0x8033x4)};QueueCaller[_0x7b73[6]][_0x7b73[12]]=function(_0x8033x4){_0x8033x4[_0x7b73[13]]=true;_0x8033x4[_0x7b73[14]]=moment()[_0x7b73[9]](_0x7b73[8]);return findAndUpdate(_0x8033x4)};QueueCaller[_0x7b73[6]][_0x7b73[15]]=function(_0x8033x4){_0x8033x4[_0x7b73[16]]=true;_0x8033x4[_0x7b73[17]]=moment()[_0x7b73[9]](_0x7b73[8]);return findAndUpdate(_0x8033x4)};QueueCaller[_0x7b73[6]][_0x7b73[18]]=function(_0x8033x4){_0x8033x4[_0x7b73[13]]=false;_0x8033x4[_0x7b73[14]]=null;_0x8033x4[_0x7b73[19]]=true;_0x8033x4[_0x7b73[20]]=moment()[_0x7b73[9]](_0x7b73[8]);_0x8033x4[_0x7b73[21]]=_0x8033x4[_0x7b73[23]][_0x7b73[22]]();return findAndUpdate(_0x8033x4)};function create(_0x8033x4){return ReportQueue[_0x7b73[29]](_0x8033x4)[_0x7b73[28]](function(_0x8033x7){console[_0x7b73[4]](_0x7b73[27])})[_0x7b73[26]](function(_0x8033x6){console[_0x7b73[25]](_0x7b73[24]+_0x8033x6)})}function findAndUpdate(_0x8033x4){return ReportQueue[_0x7b73[34]](_0x8033x4,{where:{uniqueid:_0x8033x4[_0x7b73[33]]},individualHooks:true})[_0x7b73[28]](function(_0x8033x7){console[_0x7b73[32]](_0x7b73[31])})[_0x7b73[26]](function(_0x8033x6){console[_0x7b73[25]](_0x7b73[30]+_0x8033x6)})}module[_0x7b73[35]]=QueueCaller
\ No newline at end of file
+var moment = require('moment');
+
+var ReportQueue = require('../../models').ReportQueue;
+
+function QueueCaller() {
+  console.log('QueueCaller Initialization...');
+}
+
+QueueCaller.prototype.join = function(evt) {
+  evt.queuecallerjoinAt = moment().format("YYYY-MM-DD HH:mm:ss");
+  return create(evt);
+}
+
+QueueCaller.prototype.leave = function(evt) {
+  evt.queuecallerleaveAt = moment().format("YYYY-MM-DD HH:mm:ss");
+  return findAndUpdate(evt);
+}
+
+QueueCaller.prototype.abandon = function(evt) {
+  evt.queuecallerabandon = true;
+  evt.queuecallerabandonAt = moment().format("YYYY-MM-DD HH:mm:ss");
+  return findAndUpdate(evt);
+}
+
+QueueCaller.prototype.complete = function(evt) {
+  evt.queuecallercomplete = true;
+  evt.queuecallercompleteAt = moment().format("YYYY-MM-DD HH:mm:ss");
+  return findAndUpdate(evt);
+}
+
+QueueCaller.prototype.exit = function(evt) {
+  evt.queuecallerabandon = false;
+  evt.queuecallerabandonAt = null;
+
+  evt.queuecallerexit = true;
+  evt.queuecallerexitAt = moment().format("YYYY-MM-DD HH:mm:ss");
+  evt.queuecallerexitreason = evt.value.toLowerCase();
+
+  return findAndUpdate(evt);
+}
+
+function create(evt) {
+  return ReportQueue
+    .create(evt)
+    .then(function(queue) {
+      console.log('[report] queue created');
+    })
+    .catch(function(err) {
+      console.error('[report] queue ' + err);
+    });
+}
+
+function findAndUpdate(evt) {
+  return ReportQueue
+    .update(evt, {
+      where: {
+        uniqueid: evt.uniqueid
+      },
+      individualHooks: true
+    })
+    .then(function(queue) {
+      console.info('[queue_caller] queue_caller updated');
+    })
+    .catch(function(err) {
+      console.error('[queue_caller] queue_caller error: ' + err);
+    });
+}
+
+module.exports = QueueCaller;
index f4ac262..f7417d4 100644 (file)
@@ -1 +1,54 @@
-var _0x2291=["\x6D\x6F\x6D\x65\x6E\x74","\x55\x73\x65\x72\x48\x61\x73\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x51\x75\x65\x75\x65\x4D\x65\x6D\x62\x65\x72\x20\x49\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x2E\x2E","\x6C\x6F\x67","\x61\x64\x64\x65\x64","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x6C\x6F\x67\x67\x65\x64","\x6C\x6F\x67\x67\x65\x64\x41\x74","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x66\x6F\x72\x6D\x61\x74","\x70\x61\x75\x73\x65","\x70\x61\x75\x73\x65\x64\x41\x74","\x70\x61\x75\x73\x65\x64","\x70\x65\x6E\x61\x6C\x74\x79","\x72\x65\x6D\x6F\x76\x65\x64","\x72\x69\x6E\x67\x69\x6E\x75\x73\x65","\x73\x74\x61\x74\x75\x73","\x5B\x71\x75\x65\x75\x65\x6D\x65\x6D\x62\x65\x72\x5D\x20\x75\x70\x64\x61\x74\x65\x20\x6D\x65\x6D\x62\x65\x72\x20\x65\x72\x72\x6F\x72\x3A\x20","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x5B\x71\x75\x65\x75\x65\x6D\x65\x6D\x62\x65\x72\x5D\x20\x75\x70\x64\x61\x74\x65\x20\x6D\x65\x6D\x62\x65\x72","\x74\x68\x65\x6E","\x71\x75\x65\x75\x65","\x6D\x65\x6D\x62\x65\x72\x6E\x61\x6D\x65","\x75\x70\x64\x61\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];var moment=require(_0x2291[0]);var UserHasVoiceQueue=require(_0x2291[2])[_0x2291[1]];function QueueMember(){console[_0x2291[4]](_0x2291[3])}QueueMember[_0x2291[6]][_0x2291[5]]=function(_0x3cc6x4){_0x3cc6x4[_0x2291[7]]=true;_0x3cc6x4[_0x2291[8]]=moment()[_0x2291[10]](_0x2291[9]);return findAndUpdate(_0x3cc6x4)};QueueMember[_0x2291[6]][_0x2291[11]]=function(_0x3cc6x4){_0x3cc6x4[_0x2291[12]]=(parseInt(_0x3cc6x4[_0x2291[13]],10))?moment()[_0x2291[10]](_0x2291[9]):null;return findAndUpdate(_0x3cc6x4)};QueueMember[_0x2291[6]][_0x2291[14]]=function(_0x3cc6x4){return findAndUpdate(_0x3cc6x4)};QueueMember[_0x2291[6]][_0x2291[15]]=function(_0x3cc6x4){_0x3cc6x4[_0x2291[7]]=false;_0x3cc6x4[_0x2291[8]]=null;return findAndUpdate(_0x3cc6x4)};QueueMember[_0x2291[6]][_0x2291[16]]=function(_0x3cc6x4){return findAndUpdate(_0x3cc6x4)};QueueMember[_0x2291[6]][_0x2291[17]]=function(_0x3cc6x4){return findAndUpdate(_0x3cc6x4)};function findAndUpdate(_0x3cc6x4,_0x3cc6x6){return UserHasVoiceQueue[_0x2291[25]](_0x3cc6x4,{where:{queue:_0x3cc6x4[_0x2291[23]],membername:_0x3cc6x4[_0x2291[24]]},individualHooks:true})[_0x2291[22]](function(_0x3cc6x8){console[_0x2291[4]](_0x2291[21])})[_0x2291[20]](function(_0x3cc6x7){console[_0x2291[19]](_0x2291[18]+_0x3cc6x7)})}module[_0x2291[26]]=QueueMember
\ No newline at end of file
+var moment = require('moment');
+var UserHasVoiceQueue = require('../../models').UserHasVoiceQueue;
+
+function QueueMember() {
+  console.log('QueueMember Initialization...');
+}
+
+QueueMember.prototype.added = function(evt) {
+  evt.logged = true;
+  evt.loggedAt = moment().format("YYYY-MM-DD HH:mm:ss");
+  return findAndUpdate(evt);
+}
+
+QueueMember.prototype.pause = function(evt) {
+  evt.pausedAt = (parseInt(evt.paused, 10)) ? moment().format("YYYY-MM-DD HH:mm:ss") : null;
+  return findAndUpdate(evt);
+}
+
+QueueMember.prototype.penalty = function(evt) {
+  return findAndUpdate(evt);
+}
+
+QueueMember.prototype.removed = function(evt) {
+  evt.logged = false;
+  evt.loggedAt = null;
+  return findAndUpdate(evt);
+}
+
+QueueMember.prototype.ringinuse = function(evt) {
+  return findAndUpdate(evt);
+}
+
+QueueMember.prototype.status = function(evt) {
+  return findAndUpdate(evt);
+}
+
+function findAndUpdate(evt, options) {
+  return UserHasVoiceQueue
+    .update(evt, {
+      where: {
+        queue: evt.queue,
+        membername: evt.membername
+      },
+      individualHooks: true
+    })
+    .then(function(member) {
+      console.log('[queuemember] update member');
+    })
+    .catch(function(err) {
+      console.error('[queuemember] update member error: ' + err);
+    });
+}
+
+module.exports = QueueMember;
index 98c9e87..1d22902 100644 (file)
@@ -1 +1,22 @@
-var _0x99ef=["\x56\x6F\x69\x63\x65\x52\x65\x63\x6F\x72\x64\x69\x6E\x67","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x52\x65\x63\x6F\x72\x64\x69\x6E\x67\x20\x49\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x2E\x2E","\x6C\x6F\x67","\x63\x72\x65\x61\x74\x65","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x74\x79\x70\x65","\x72\x63\x6F\x72\x64\x69\x6E\x67\x20","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x74\x68\x65\x6E","\x65\x78\x70\x6F\x72\x74\x73"];var VoiceRecording=require(_0x99ef[1])[_0x99ef[0]];function Recording(){console[_0x99ef[3]](_0x99ef[2])}Recording[_0x99ef[5]][_0x99ef[4]]=function(_0x2ee6x3,_0x2ee6x4){create(_0x2ee6x3,_0x2ee6x4)};function create(_0x2ee6x3,_0x2ee6x4){_0x2ee6x3[_0x99ef[6]]=_0x2ee6x4;return VoiceRecording[_0x99ef[4]](_0x2ee6x3)[_0x99ef[10]](function(){})[_0x99ef[9]](function(_0x2ee6x6){console[_0x99ef[8]](_0x99ef[7]+_0x2ee6x6)})}module[_0x99ef[11]]=Recording
\ No newline at end of file
+var VoiceRecording = require('../../models').VoiceRecording;
+
+function Recording() {
+  console.log('Recording Initialization...');
+}
+
+Recording.prototype.create = function(evt, type) {
+  create(evt, type);
+}
+
+function create(evt, type) {
+  evt.type = type;
+
+  return VoiceRecording
+    .create(evt)
+    .then(function() {})
+    .catch(function(err) {
+      console.error('rcording ' + err);
+    });
+}
+
+module.exports = Recording;
index 3d755a1..0a82a2b 100644 (file)
@@ -1 +1,19 @@
-var _0x8b87=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x4E\x65\x77\x20\x73\x6F\x63\x6B\x65\x74\x20\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E","\x6C\x6F\x67","\x52\x65\x70\x6F\x72\x74\x41\x67\x65\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x74\x65\x73\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x8b87[0];function Socket(_0x4e27x2,_0x4e27x3){console[_0x8b87[2]](_0x8b87[1]);var _0x4e27x4=require(_0x8b87[4])[_0x8b87[3]];return {test:function(){console[_0x8b87[2]](_0x8b87[5])}}}module[_0x8b87[6]]=Socket
\ No newline at end of file
+/**
+ * Broadcast updates to client when the model changes
+ */
+
+'use strict';
+
+function Socket(socket, ami) {
+  console.log('New socket connection');
+
+  var ReportAgent = require('../../models').ReportAgent;
+
+  return {
+    test: function () {
+      console.log('test');
+    }
+  }
+}
+
+module.exports = Socket;
index 6359572..9c903b6 100644 (file)
@@ -1 +1,43 @@
-var _0xf219=["\x6D\x6F\x6D\x65\x6E\x74","\x52\x65\x70\x6F\x72\x74\x54\x72\x61\x6E\x73\x66\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x54\x72\x61\x6E\x73\x66\x65\x72\x20\x49\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x2E\x2E","\x6C\x6F\x67","\x63\x72\x65\x61\x74\x65\x42\x6C\x69\x6E\x64","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x5B\x74\x72\x61\x6E\x66\x65\x72\x5D\x20\x63\x72\x65\x61\x74\x65\x64\x20\x65\x72\x72\x6F\x72\x3A\x20","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x5B\x74\x72\x61\x6E\x66\x65\x72\x5D\x20\x63\x72\x65\x61\x74\x65\x64","\x74\x68\x65\x6E","\x63\x72\x65\x61\x74\x65","\x63\x72\x65\x61\x74\x65\x41\x74\x74\x65\x6E\x64\x65\x64","\x61\x74\x74\x65\x6E\x64\x65\x64","\x6F\x72\x69\x67\x74\x72\x61\x6E\x73\x66\x65\x72\x65\x72\x63\x61\x6C\x6C\x65\x72\x69\x64\x6E\x75\x6D","\x6F\x72\x69\x67\x74\x72\x61\x6E\x73\x66\x65\x72\x65\x72\x63\x61\x6C\x6C\x65\x72\x69\x64\x6E\x61\x6D\x65","\x73\x65\x63\x6F\x6E\x64\x74\x72\x61\x6E\x73\x66\x65\x72\x65\x72\x63\x6F\x6E\x6E\x65\x63\x74\x65\x64\x6C\x69\x6E\x65\x6E\x75\x6D","\x73\x65\x63\x6F\x6E\x64\x74\x72\x61\x6E\x73\x66\x65\x72\x65\x72\x63\x6F\x6E\x6E\x65\x63\x74\x65\x64\x6C\x69\x6E\x65\x6E\x61\x6D\x65","\x6F\x72\x69\x67\x74\x72\x61\x6E\x73\x66\x65\x72\x65\x72\x63\x6F\x6E\x74\x65\x78\x74","\x6F\x72\x69\x67\x74\x72\x61\x6E\x73\x66\x65\x72\x65\x72\x65\x78\x74\x65\x6E","\x73\x65\x63\x6F\x6E\x64\x74\x72\x61\x6E\x73\x66\x65\x72\x65\x72\x63\x6F\x6E\x74\x65\x78\x74","\x73\x65\x63\x6F\x6E\x64\x74\x72\x61\x6E\x73\x66\x65\x72\x65\x72\x65\x78\x74\x65\x6E","\x73\x65\x63\x6F\x6E\x64\x74\x72\x61\x6E\x73\x66\x65\x72\x65\x72\x75\x6E\x69\x71\x75\x65\x69\x64","\x73\x65\x63\x6F\x6E\x64\x74\x72\x61\x6E\x73\x66\x65\x72\x65\x72\x6C\x69\x6E\x6B\x65\x64\x69\x64","\x65\x78\x70\x6F\x72\x74\x73"];var moment=require(_0xf219[0]);var ReportTransfer=require(_0xf219[2])[_0xf219[1]];function Transfer(){console[_0xf219[4]](_0xf219[3])}Transfer[_0xf219[6]][_0xf219[5]]=function(_0x1de6x4){return ReportTransfer[_0xf219[12]](_0x1de6x4)[_0xf219[11]](function(_0x1de6x6){console[_0xf219[4]](_0xf219[10])})[_0xf219[9]](function(_0x1de6x5){console[_0xf219[8]](_0xf219[7]+_0x1de6x5)})};Transfer[_0xf219[6]][_0xf219[13]]=function(_0x1de6x4){return ReportTransfer[_0xf219[12]]({type:_0xf219[14],transferercalleridnum:_0x1de6x4[_0xf219[15]],transferercalleridname:_0x1de6x4[_0xf219[16]],transfererconnectedlinenum:_0x1de6x4[_0xf219[17]],transfererconnectedlinename:_0x1de6x4[_0xf219[18]],transferercontext:_0x1de6x4[_0xf219[19]],transfererexten:_0x1de6x4[_0xf219[20]],transfereecontext:_0x1de6x4[_0xf219[21]],transfereeexten:_0x1de6x4[_0xf219[22]],transfereruniqueid:_0x1de6x4[_0xf219[23]],transfererlinkedid:_0x1de6x4[_0xf219[24]],extension:_0x1de6x4[_0xf219[20]]})[_0xf219[11]](function(_0x1de6x6){console[_0xf219[4]](_0xf219[10])})[_0xf219[9]](function(_0x1de6x5){console[_0xf219[8]](_0xf219[7]+_0x1de6x5)})};module[_0xf219[25]]=Transfer
\ No newline at end of file
+var moment = require('moment');
+var ReportTransfer = require('../../models').ReportTransfer;
+
+function Transfer() {
+  console.log('Transfer Initialization...');
+}
+
+Transfer.prototype.createBlind = function(evt) {
+  return ReportTransfer
+    .create(evt)
+    .then(function(member) {
+      console.log('[tranfer] created');
+    })
+    .catch(function(err) {
+      console.error('[tranfer] created error: ' + err);
+    });
+}
+
+Transfer.prototype.createAttended = function(evt) {
+  return ReportTransfer
+    .create({
+      type: 'attended',
+      transferercalleridnum: evt.origtransferercalleridnum,
+      transferercalleridname: evt.origtransferercalleridname,
+      transfererconnectedlinenum: evt.secondtransfererconnectedlinenum,
+      transfererconnectedlinename: evt.secondtransfererconnectedlinename,
+      transferercontext: evt.origtransferercontext,
+      transfererexten: evt.origtransfererexten,
+      transfereecontext: evt.secondtransferercontext,
+      transfereeexten: evt.secondtransfererexten,
+      transfereruniqueid: evt.secondtransfereruniqueid,
+      transfererlinkedid: evt.secondtransfererlinkedid,
+      extension: evt.origtransfererexten,
+    })
+    .then(function(member) {
+      console.log('[tranfer] created');
+    })
+    .catch(function(err) {
+      console.error('[tranfer] created error: ' + err);
+    });
+}
+
+module.exports = Transfer;
index 053c88c..638620f 100644 (file)
@@ -1 +1,124 @@
-var _0x6da6=["\x54\x72\x75\x6E\x6B","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x66\x73","\x75\x74\x69\x6C","\x70\x61\x74\x68","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x6C\x6F\x64\x61\x73\x68","\x54\x72\x75\x6E\x6B\x20\x49\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x2E\x2E","\x6C\x6F\x67","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x6C\x65\x74\x65","","\x72\x65\x67\x69\x73\x74\x65\x72\x20\x3D\x3E\x20\x25\x73\x0A","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x63\x6C\x6F\x6E\x65","\x63\x72\x65\x61\x74\x65\x64\x41\x74","\x75\x70\x64\x61\x74\x65\x64\x41\x74","\x5B\x25\x73\x5D\x0A","\x6E\x61\x6D\x65","\x66\x6F\x72\x6D\x61\x74","\x6F\x74\x68\x65\x72\x46\x69\x65\x6C\x64\x73","\x25\x73\x0A","\x3B","\x73\x70\x6C\x69\x74","\x25\x73\x3D\x25\x73\x0A","\x66\x6F\x72\x45\x61\x63\x68","\x61\x6C\x6C\x6F\x77","\x72\x65\x67\x69\x73\x74\x72\x79","\x63\x61\x74\x63\x68","\x6D\x61\x70","\x61\x73\x74\x65\x72\x69\x73\x6B\x43\x6F\x6E\x66","\x73\x69\x70\x5F\x78\x63\x61\x6C\x6C\x79\x5F\x74\x72\x75\x6E\x6B\x73\x2E\x63\x6F\x6E\x66","\x6A\x6F\x69\x6E","\x77","\x30\x37\x37\x37","\x54\x72\x75\x6E\x6B\x73\x20\x66\x69\x6C\x65\x20\x73\x61\x76\x65\x64\x21","\x73\x69\x70\x5F\x78\x63\x61\x6C\x6C\x79\x5F\x72\x65\x67\x69\x73\x74\x65\x72\x73\x2E\x63\x6F\x6E\x66","\x54\x72\x75\x6E\x6B\x73\x20\x72\x65\x67\x69\x73\x74\x65\x72\x20\x66\x69\x6C\x65\x20\x73\x61\x76\x65\x64\x21","\x77\x72\x69\x74\x65\x46\x69\x6C\x65","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6C\x6C","\x52\x65\x6C\x6F\x61\x64","\x65\x72\x72\x6F\x72","\x61\x63\x74\x69\x6F\x6E","\x65\x78\x70\x6F\x72\x74\x73"];var TrunkModel=require(_0x6da6[1])[_0x6da6[0]];var fs=require(_0x6da6[2]);var util=require(_0x6da6[3]);var path=require(_0x6da6[4]);var config=require(_0x6da6[5]);var _=require(_0x6da6[6]);function Trunk(_0xcd2ex8){console[_0x6da6[8]](_0x6da6[7]);TrunkModel[_0x6da6[9]](function(_0xcd2ex9){trunksRewrite(_0xcd2ex9,_0xcd2ex8,false)});TrunkModel[_0x6da6[10]](function(_0xcd2ex9){trunksRewrite(_0xcd2ex9,_0xcd2ex8,false)});TrunkModel[_0x6da6[11]](function(_0xcd2ex9){trunksRewrite(_0xcd2ex9,_0xcd2ex8,true)})}function trunksRewrite(_0xcd2ex9,_0xcd2ex8,_0xcd2exb){var _0xcd2exc=_0x6da6[12];var _0xcd2exd=_0x6da6[12];var _0xcd2exe=_0x6da6[13];if(!_0xcd2exb){var _0xcd2exf=_[_0x6da6[15]](_0xcd2ex9[_0x6da6[14]]);delete _0xcd2exf[_0x6da6[16]];delete _0xcd2exf[_0x6da6[17]];_0xcd2exc+=util[_0x6da6[20]](_0x6da6[18],_0xcd2exf[_0x6da6[19]]);if(_0xcd2exf[_0x6da6[21]]){_0xcd2exc+=util[_0x6da6[20]](_0x6da6[22],_0xcd2exf[_0x6da6[21]]);delete _0xcd2exf[_0x6da6[21]]};for(var _0xcd2ex10 in _0xcd2exf){if(_0xcd2exf[_0xcd2ex10]){switch(_0xcd2ex10){case _0x6da6[27]:var _0xcd2ex11=_0xcd2exf[_0xcd2ex10][_0x6da6[24]](_0x6da6[23]);_0xcd2ex11[_0x6da6[26]](function(_0xcd2ex12){_0xcd2exc+=util[_0x6da6[20]](_0x6da6[25],_0xcd2ex10,_0xcd2ex12)});break;default:_0xcd2exc+=util[_0x6da6[20]](_0x6da6[25],_0xcd2ex10,_0xcd2exf[_0xcd2ex10])}}};if(_0xcd2exf[_0x6da6[28]]){_0xcd2exd+=util[_0x6da6[20]](_0xcd2exe,_0xcd2exf[_0x6da6[28]])}};return TrunkModel[_0x6da6[41]]({where:{name:{$ne:_0xcd2ex9[_0x6da6[19]]}}})[_0x6da6[40]](function(_0xcd2ex14){var _0xcd2ex15=_[_0x6da6[30]](_0xcd2ex14,_0x6da6[14]);_0xcd2ex15[_0x6da6[26]](function(_0xcd2ex16){delete _0xcd2ex16[_0x6da6[16]];delete _0xcd2ex16[_0x6da6[17]];_0xcd2exc+=util[_0x6da6[20]](_0x6da6[18],_0xcd2ex16[_0x6da6[19]]);if(_0xcd2ex16[_0x6da6[21]]){_0xcd2exc+=util[_0x6da6[20]](_0x6da6[22],_0xcd2ex16[_0x6da6[21]]);delete _0xcd2ex16[_0x6da6[21]]};for(var _0xcd2ex10 in _0xcd2ex16){if(_0xcd2ex16[_0xcd2ex10]){switch(_0xcd2ex10){case _0x6da6[27]:var _0xcd2ex11=_0xcd2ex16[_0xcd2ex10][_0x6da6[24]](_0x6da6[23]);_0xcd2ex11[_0x6da6[26]](function(_0xcd2ex12){_0xcd2exc+=util[_0x6da6[20]](_0x6da6[25],_0xcd2ex10,_0xcd2ex12)});break;default:_0xcd2exc+=util[_0x6da6[20]](_0x6da6[25],_0xcd2ex10,_0xcd2ex16[_0xcd2ex10])}}};if(_0xcd2ex16[_0x6da6[28]]){_0xcd2exd+=util[_0x6da6[20]](_0xcd2exe,_0xcd2ex16[_0x6da6[28]])}});fs[_0x6da6[39]](path[_0x6da6[33]](config[_0x6da6[31]],_0x6da6[32]),_0xcd2exc,{flags:_0x6da6[34],mode:parseInt(_0x6da6[35],8)},function(_0xcd2ex13){if(_0xcd2ex13){throw _0xcd2ex13};console[_0x6da6[8]](_0x6da6[36]);fs[_0x6da6[39]](path[_0x6da6[33]](config[_0x6da6[31]],_0x6da6[37]),_0xcd2exd,{flags:_0x6da6[34],mode:parseInt(_0x6da6[35],8)},function(_0xcd2ex13){if(_0xcd2ex13){throw _0xcd2ex13};reload(_0xcd2ex8);console[_0x6da6[8]](_0x6da6[38])})})})[_0x6da6[29]](function(_0xcd2ex13){console[_0x6da6[8]](_0xcd2ex13)})}function reload(_0xcd2ex8){_0xcd2ex8[_0x6da6[44]]({Action:_0x6da6[42]},function(_0xcd2ex13,_0xcd2ex18){if(_0xcd2ex13){console[_0x6da6[43]](_0xcd2ex13)}else {console[_0x6da6[8]](_0xcd2ex18)}})}module[_0x6da6[45]]=Trunk
\ No newline at end of file
+var TrunkModel = require('../../models').Trunk;
+var fs = require('fs');
+var util = require('util');
+var path = require('path');
+var config = require('../../config/environment');
+var _ = require('lodash');
+
+function Trunk(ami) {
+  console.log('Trunk Initialization...');
+  TrunkModel.afterCreate(function(doc) {
+    trunksRewrite(doc, ami, false);
+  })
+  TrunkModel.afterUpdate(function(doc) {
+    trunksRewrite(doc, ami, false);
+  })
+  TrunkModel.afterDelete(function(doc) {
+    trunksRewrite(doc, ami, true);
+  })
+}
+
+function trunksRewrite(doc, ami, deleteTrunk) {
+  var trunksFile = '';
+  var trunksRegistersFile = '';
+  var registryString = 'register => %s\n';
+  if (!deleteTrunk) {
+    var newTrunk = _.clone(doc.dataValues);
+    delete newTrunk.createdAt;
+    delete newTrunk.updatedAt;
+    trunksFile += util.format('[%s]\n', newTrunk.name);
+    if (newTrunk.otherFields) {
+      trunksFile += util.format('%s\n', newTrunk.otherFields);
+      delete newTrunk.otherFields;
+    }
+    for (var key in newTrunk) {
+      if (newTrunk[key]) {
+        switch (key) {
+          case 'allow':
+            var codecs = newTrunk[key].split(';');
+            codecs.forEach(function(elem) {
+              trunksFile += util.format('%s=%s\n', key, elem);
+            })
+            break;
+          default:
+            trunksFile += util.format('%s=%s\n', key, newTrunk[key]);
+        }
+      }
+    }
+    if (newTrunk.registry) {
+      trunksRegistersFile += util.format(registryString, newTrunk.registry);
+    }
+  }
+  return TrunkModel
+    .findAll({
+      where: {
+        name: {
+          $ne: doc.name
+        }
+      }
+    })
+    .then(function(trunks) {
+      var oldTrunks = _.map(trunks, 'dataValues');
+      oldTrunks.forEach(function(element) {
+        delete element.createdAt;
+        delete element.updatedAt;
+        trunksFile += util.format('[%s]\n', element.name);
+        if (element.otherFields) {
+          trunksFile += util.format('%s\n', element.otherFields);
+          delete element.otherFields;
+        }
+        for (var key in element) {
+          if (element[key]) {
+            switch (key) {
+              case 'allow':
+                var codecs = element[key].split(';');
+                codecs.forEach(function(elem) {
+                  trunksFile += util.format('%s=%s\n', key, elem);
+                })
+                break;
+              default:
+                trunksFile += util.format('%s=%s\n', key, element[key]);
+            }
+          }
+        }
+        if (element.registry) {
+          trunksRegistersFile += util.format(registryString, element.registry);
+        }
+      });
+      fs.writeFile(path.join(config.asteriskConf, 'sip_xcally_trunks.conf'), trunksFile, {
+        flags: 'w',
+        mode: parseInt('0777', 8)
+      }, function(err) {
+        if (err) throw err;
+        console.log("Trunks file saved!");
+        fs.writeFile(path.join(config.asteriskConf, 'sip_xcally_registers.conf'), trunksRegistersFile, {
+          flags: 'w',
+          mode: parseInt('0777', 8)
+        }, function(err) {
+          if (err) throw err;
+          reload(ami);
+          console.log("Trunks register file saved!");
+        });
+      });
+
+
+    })
+    .catch(function(err) {
+      console.log(err);
+    });
+}
+
+function reload(ami) {
+  ami.action({
+    Action: 'Reload'
+  }, function(err, res) {
+    if (err) {
+      console.error(err);
+    } else {
+      console.log(res);
+    }
+  });
+}
+
+
+module.exports = Trunk;
index 626958e..45d1db1 100644 (file)
@@ -1 +1,33 @@
-var _0xd3cb=["\x6D\x6F\x6D\x65\x6E\x74","\x55\x73\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x51\x75\x65\x75\x65\x4D\x65\x6D\x62\x65\x72\x20\x49\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x2E\x2E","\x6C\x6F\x67","\x73\x74\x61\x74\x65\x55\x70\x64\x61\x74\x65","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x73\x74\x61\x74\x65","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x66\x6F\x72\x6D\x61\x74","\x53\x49\x50\x2F","","\x72\x65\x70\x6C\x61\x63\x65","\x64\x65\x76\x69\x63\x65","\x5B\x75\x73\x65\x72\x5D\x20\x73\x74\x61\x74\x75\x73\x20\x75\x70\x64\x61\x74\x65\x20\x65\x72\x72\x6F\x72\x3A\x20","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x5B\x75\x73\x65\x72\x5D\x20\x73\x74\x61\x74\x75\x73\x20\x75\x70\x64\x61\x74\x65","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];var moment=require(_0xd3cb[0]);var UserModel=require(_0xd3cb[2])[_0xd3cb[1]];function User(){console[_0xd3cb[4]](_0xd3cb[3])}User[_0xd3cb[6]][_0xd3cb[5]]=function(_0x49f0x4){var _0x49f0x5={status:_0x49f0x4[_0xd3cb[7]],statusAt:moment()[_0xd3cb[9]](_0xd3cb[8])};return findAndUpdate(_0x49f0x5,_0x49f0x4[_0xd3cb[13]][_0xd3cb[12]](_0xd3cb[10],_0xd3cb[11]))};function findAndUpdate(_0x49f0x5,_0x49f0x7){return UserModel[_0xd3cb[19]](_0x49f0x5,{where:{name:_0x49f0x7},individualHooks:true})[_0xd3cb[18]](function(_0x49f0x9){console[_0xd3cb[4]](_0xd3cb[17])})[_0xd3cb[16]](function(_0x49f0x8){console[_0xd3cb[15]](_0xd3cb[14]+_0x49f0x8)})}module[_0xd3cb[20]]=User
\ No newline at end of file
+var moment = require('moment');
+var UserModel = require('../../models').User;
+
+function User() {
+  console.log('QueueMember Initialization...');
+}
+
+User.prototype.stateUpdate = function(evt) {
+  var obj = {
+    status: evt.state,
+    statusAt: moment().format("YYYY-MM-DD HH:mm:ss")
+  }
+  return findAndUpdate(obj, evt.device.replace('SIP/', ''));
+}
+
+
+function findAndUpdate(obj, agentName) {
+  return UserModel
+    .update(obj, {
+      where: {
+        name: agentName
+      },
+      individualHooks: true
+    })
+    .then(function(member) {
+      console.log('[user] status update');
+    })
+    .catch(function(err) {
+      console.error('[user] status update error: ' + err);
+    });
+}
+
+module.exports = User;
index 759307e..4b4a8ef 100644 (file)
@@ -1 +1,92 @@
-var _0xd388=["\x56\x6F\x69\x63\x65\x43\x6F\x6E\x74\x65\x78\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x56\x6F\x69\x63\x65\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x66\x73","\x75\x74\x69\x6C","\x70\x61\x74\x68","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x6E\x61\x6D\x65","\x63\x68\x61\x6E\x67\x65\x64","\x59\x6F\x75\x20\x63\x61\x6E\x27\x74\x20\x6D\x6F\x64\x69\x66\x79\x20\x61\x20\x63\x6F\x6E\x74\x65\x78\x74\x20\x6E\x61\x6D\x65","\x64\x65\x66\x61\x75\x6C\x74\x45\x6E\x74\x72\x79","\x59\x6F\x75\x20\x63\x61\x6E\x27\x74\x20\x6D\x6F\x64\x69\x66\x79\x20\x61\x20\x64\x65\x66\x61\x75\x6C\x74\x20\x63\x6F\x6E\x74\x65\x78\x74","\x62\x65\x66\x6F\x72\x65\x55\x70\x64\x61\x74\x65","\x59\x6F\x75\x20\x63\x61\x6E\x27\x74\x20\x64\x65\x6C\x65\x74\x65\x20\x61\x20\x64\x65\x66\x61\x75\x6C\x74\x20\x63\x6F\x6E\x74\x65\x78\x74","\x62\x65\x66\x6F\x72\x65\x44\x65\x6C\x65\x74\x65","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x6C\x65\x74\x65","","\x5B\x25\x73\x5D\x0A\x73\x77\x69\x74\x63\x68\x20\x3D\x3E\x20\x52\x65\x61\x6C\x74\x69\x6D\x65\x0A","\x66\x6F\x72\x6D\x61\x74","\x6C\x6F\x67","\x63\x61\x74\x63\x68","\x66\x6F\x72\x45\x61\x63\x68","\x61\x73\x74\x65\x72\x69\x73\x6B\x43\x6F\x6E\x66","\x65\x78\x74\x65\x6E\x73\x69\x6F\x6E\x73\x5F\x78\x63\x61\x6C\x6C\x79\x5F\x63\x6F\x6E\x74\x65\x78\x74\x73\x2E\x63\x6F\x6E\x66","\x6A\x6F\x69\x6E","\x77","\x30\x37\x37\x37","\x43\x6F\x6E\x74\x65\x78\x74\x73\x20\x66\x69\x6C\x65\x20\x73\x61\x76\x65\x64\x21","\x52\x65\x6C\x6F\x61\x64","\x65\x72\x72\x6F\x72","\x61\x63\x74\x69\x6F\x6E","\x77\x72\x69\x74\x65\x46\x69\x6C\x65","\x74\x68\x65\x6E","\x69\x64","\x66\x69\x6E\x64\x41\x6C\x6C","\x68","\x6E","\x61\x6E\x79","\x48\x61\x6E\x67\x75\x70","\x68\x61\x6E\x67\x75\x70\x20\x65\x78\x74\x65\x6E\x73\x69\x6F\x6E\x20\x63\x72\x65\x61\x74\x65\x64","\x63\x72\x65\x61\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];var VoiceContext=require(_0xd388[1])[_0xd388[0]];var VoiceExtension=require(_0xd388[1])[_0xd388[2]];var fs=require(_0xd388[3]);var util=require(_0xd388[4]);var path=require(_0xd388[5]);var config=require(_0xd388[6]);function Context(_0x1003x8){VoiceContext[_0xd388[12]](function(_0x1003x9){if(_0x1003x9[_0xd388[8]](_0xd388[7])){throw  new Error(_0xd388[9])};if(_0x1003x9[_0xd388[10]]){throw  new Error(_0xd388[11])}});VoiceContext[_0xd388[14]](function(_0x1003xa){if(_0x1003xa[_0xd388[10]]){throw  new Error(_0xd388[13])}});VoiceContext[_0xd388[15]](function(_0x1003xb){rewriteContexts(_0x1003xb,_0x1003x8,false);createHangup(_0x1003xb)});VoiceContext[_0xd388[16]](function(_0x1003xb){rewriteContexts(_0x1003xb,_0x1003x8,true)})}function rewriteContexts(_0x1003xb,_0x1003x8,_0x1003xd){var _0x1003xe=_0xd388[17];if(!_0x1003xd){_0x1003xe=util[_0xd388[19]](_0xd388[18],_0x1003xb[_0xd388[7]])};VoiceContext[_0xd388[35]]({where:{id:{$ne:_0x1003xb[_0xd388[34]]}}})[_0xd388[33]](function(_0x1003x10){_0x1003x10[_0xd388[22]](function(_0x1003x11){_0x1003xe+=util[_0xd388[19]](_0xd388[18],_0x1003x11[_0xd388[7]])});fs[_0xd388[32]](path[_0xd388[25]](config[_0xd388[23]],_0xd388[24]),_0x1003xe,{flags:_0xd388[26],mode:parseInt(_0xd388[27],8)},function(_0x1003xf){if(_0x1003xf){throw _0x1003xf};console[_0xd388[20]](_0xd388[28]);_0x1003x8[_0xd388[31]]({Action:_0xd388[29]},function(_0x1003xf,_0x1003x12){if(_0x1003xf){console[_0xd388[30]](_0x1003xf)}else {console[_0xd388[20]](_0x1003x12)}})})})[_0xd388[21]](function(_0x1003xf){console[_0xd388[20]](_0x1003xf)})}function createHangup(_0x1003xb){var _0x1003x14={context:_0x1003xb[_0xd388[7]],exten:_0xd388[36],priority:_0xd388[37],VoiceContextId:_0x1003xb[_0xd388[34]],type:_0xd388[38],app:_0xd388[39]};VoiceExtension[_0xd388[41]](_0x1003x14)[_0xd388[33]](function(_0x1003x12){console[_0xd388[20]](_0xd388[40])})[_0xd388[21]](function(_0x1003xf){console[_0xd388[20]](_0x1003xf)})}module[_0xd388[42]]=Context
\ No newline at end of file
+var VoiceContext = require('../../models').VoiceContext;
+var VoiceExtension = require('../../models').VoiceExtension;
+var fs = require('fs');
+var util = require('util');
+var path = require('path');
+var config = require('../../config/environment');
+
+function Context(ami) {
+  VoiceContext.beforeUpdate(function(updatedContext) {
+    if (updatedContext.changed('name')) {
+      throw new Error("You can't modify a context name");
+    }
+    if (updatedContext.defaultEntry) {
+      throw new Error("You can't modify a default context");
+    }
+  });
+
+  VoiceContext.beforeDelete(function(context) {
+    if (context.defaultEntry) {
+      throw new Error("You can't delete a default context");
+    }
+  });
+  VoiceContext.afterCreate(function(doc) {
+    rewriteContexts(doc, ami, false);
+    createHangup(doc);
+  })
+
+  VoiceContext.afterDelete(function(doc) {
+    rewriteContexts(doc, ami, true);
+  })
+}
+
+function rewriteContexts(doc, ami, deleteContext) {
+  var contextValues = '';
+  if (!deleteContext) {
+    contextValues = util.format('[%s]\nswitch => Realtime\n', doc.name);
+  }
+  VoiceContext
+    .findAll({
+      where: {
+        id: {
+          $ne: doc.id
+        }
+      }
+    })
+    .then(function(contexts) {
+      contexts.forEach(function(element) {
+        contextValues += util.format('[%s]\nswitch => Realtime\n', element.name);
+      });
+      fs.writeFile(path.join(config.asteriskConf, 'extensions_xcally_contexts.conf'), contextValues, {
+        flags: 'w',
+        mode: parseInt('0777', 8)
+      }, function(err) {
+        if (err) throw err;
+        console.log("Contexts file saved!");
+        ami.action({
+          Action: 'Reload',
+        }, function(err, res) {
+          if (err) {
+            console.error(err);
+          } else {
+            console.log(res);
+          }
+        });
+      });
+    })
+    .catch(function(err) {
+      console.log(err);
+    });
+}
+
+function createHangup(doc) {
+  var data = {
+    context: doc.name,
+    exten: 'h',
+    priority: 'n',
+    VoiceContextId: doc.id,
+    type: 'any',
+    app: 'Hangup'
+  };
+
+  VoiceExtension
+    .create(data)
+    .then(function(res) {
+      console.log('hangup extension created');
+    })
+    .catch(function(err) {
+      console.log(err);
+    });
+}
+
+module.exports = Context;
index 4ab5cf9..e69de29 100644 (file)
@@ -1 +0,0 @@
-var _0x27ec=[]
\ No newline at end of file
index 6a4f7c2..a47295f 100644 (file)
@@ -1 +1,125 @@
-var _0x14a5=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x75\x74\x69\x6C","\x2E\x2F\x70\x72\x6F\x63\x65\x73\x73","\x65\x78\x70\x6F\x72\x74\x73","\x41\x75\x74\x6F\x64\x69\x61\x6C\x65\x72\x20\x53\x74\x61\x72\x74\x69\x6E\x67\x2E\x2E\x2E","\x6C\x6F\x67","\x67\x65\x74\x50\x72\x6F\x63\x65\x73\x73\x65\x73"];_0x14a5[0];var util=require(_0x14a5[1]);var Process=require(_0x14a5[2]);module[_0x14a5[3]]=function(_0xedcdx3){console[_0x14a5[5]](_0x14a5[4]);var _0xedcdx4= new Process();_0xedcdx4[_0x14a5[6]](function(_0xedcdx5,_0xedcdx6){if(_0xedcdx6){console[_0x14a5[5]](_0xedcdx6);return}})}
\ No newline at end of file
+'use strict';
+var util = require('util');
+var Process = require('./process');
+
+module.exports = function(ami) {
+
+  console.log('Autodialer Starting...');
+  var proc = new Process();
+
+  proc.getProcesses(function(res, err) {
+    if(err)
+    {
+      console.log(err);
+      return;
+    }
+    // console.log(res.Contacts);
+    // if (util.isArray(res.Contacts))
+    // {
+    //   var contact = res.Contacts;
+    //   console.log(contact);
+    // }
+    // else
+    // {
+    //   var contacts = res.Contacts;
+    //   if (contacts.length)
+    //   {
+    //     contacts.forEach(function(contact) {
+    //       console.log(contact);
+    //     })
+    //   }
+    // }
+
+
+
+  });
+
+}
+
+// var _ = require('lodash');
+//
+// var agents = ['SIP/massimiliano.bungaro', 'SIP/daniele.cinti'];
+// var channels = [];
+// var peers = [];
+// var contacts = ['600', '600', '600'];
+//
+// var ami;
+//
+// function coreshow() {
+//   channels = [];
+//   if (contacts.length > 0) {
+//     ami.action({
+//       action: 'CoreShowChannels'
+//     }, function(err, res) {
+//       if (err) {
+//         console.log(err);
+//       }
+//       console.log(res);
+//     });
+//   }
+//
+// }
+//
+// function peerstatus() {
+//   peers = [];
+//   if (contacts.length > 0) {
+//     ami.action({
+//       action: 'SIPpeerstatus'
+//     }, function(err, res) {
+//       if (err) {
+//         console.log(err);
+//       }
+//       console.log(res);
+//     })
+//   }
+// }
+//
+// module.exports = function(asterisk_manager) {
+//
+//   ami = asterisk_manager;
+//
+//   peerstatus();
+//
+//   ami.on('peerstatus', function(evt) {
+//     if (evt.peerstatus == 'Reachable') {
+//       peers.push(evt.peer);
+//     }
+//   });
+//
+//   ami.on('coreshowchannel', function(evt) {
+//     channels.push(evt.channel.split('-')[0]);
+//   });
+//
+//   ami.on('sippeerstatuscomplete', function(evt) {
+//     coreshow();
+//   });
+//
+//   ami.on('coreshowchannelscomplete', function(evt) {
+//     console.log('Agents registered ', peers);
+//     console.log('Agents in call ', channels);
+//
+//
+//     var agent = _.find(agents, function(agent) {
+//       return !_.includes(channels, agent);
+//     });
+//
+//     if (agent) {
+//       if (_.includes(peers, agent)) {
+//         ami.action({
+//           action: 'originate',
+//           channel: agent,
+//           exten: contacts.pop(),
+//           context: 'demo',
+//           priority: 1,
+//           async: true
+//         }, function(err, res) {
+//           if (err) {
+//             console.log(err);
+//           }
+//           console.log(res);
+//         });
+//       }
+//     }
+//     peerstatus();
+//   });
+// };
index 8291f96..7974168 100644 (file)
@@ -1 +1,26 @@
-var _0x4fea=["\x41\x75\x74\x6F\x64\x69\x61\x6C\x65\x72\x50\x72\x6F\x63\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x43\x6F\x6E\x74\x61\x63\x74","\x50\x72\x6F\x63\x65\x73\x73\x20\x49\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x2E\x2E","\x6C\x6F\x67","\x67\x65\x74\x50\x72\x6F\x63\x65\x73\x73\x65\x73","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x63\x61\x74\x63\x68","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6C\x6C","\x65\x78\x70\x6F\x72\x74\x73"];var AutodialerProcess=require(_0x4fea[1])[_0x4fea[0]];var Contact=require(_0x4fea[1])[_0x4fea[2]];function Process(){console[_0x4fea[4]](_0x4fea[3])}Process[_0x4fea[6]][_0x4fea[5]]=function(_0xafe0x4){AutodialerProcess[_0x4fea[9]]({where:{enable:true},include:[Contact]})[_0x4fea[8]](function(_0xafe0x6){_0xafe0x4(_0xafe0x6)})[_0x4fea[7]](function(_0xafe0x5){_0xafe0x4(null,_0xafe0x5)})};module[_0x4fea[10]]=Process
\ No newline at end of file
+var AutodialerProcess = require('../../models').AutodialerProcess;
+var Contact = require('../../models').Contact;
+
+function Process() {
+  console.log('Process Initialization...');
+}
+
+Process.prototype.getProcesses = function(callback) {
+
+  AutodialerProcess
+  .findAll({
+    where: {
+      enable: true
+    },
+    include: [Contact]
+  })
+  .then(function(res) {
+    callback(res);
+  })
+  .catch(function(err) {
+    callback(null, err);
+  });
+
+}
+
+module.exports = Process;
index c57ce3f..d31e0c8 100644 (file)
@@ -1 +1,155 @@
-var _0xe6fa=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x2E\x2E\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x6D\x6F\x6D\x65\x6E\x74","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E","\x46\x61\x78\x52\x6F\x6F\x6D","\x53\x65\x74\x74\x69\x6E\x67\x73","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x70\x75\x73\x68","\x24\x61\x6E\x64","\x77\x68\x65\x72\x65","\x66\x6F\x72\x45\x61\x63\x68","\x41\x6C\x6C","\x24\x6F\x72","\x41\x6E\x79","\x6C\x6F\x67","\x63\x61\x74\x63\x68","\x69\x64","\x64\x61\x74\x61\x31","\x73\x74\x61\x74\x75\x73","\x61\x63\x74\x69\x6F\x6E","\x41\x63\x74\x69\x6F\x6E\x73","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6C\x6C","\x75\x70\x64\x61\x74\x65","\x66\x69\x65\x6C\x64","\x76\x61\x6C\x75\x65","\x65\x71\x75\x61\x6C\x73","\x6E\x6F\x74\x5F\x65\x71\x75\x61\x6C\x73","\x6F\x70\x65\x72\x61\x74\x6F\x72","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x66\x6F\x72\x6D\x61\x74","\x68\x6F\x75\x72\x73","\x73\x75\x62\x74\x72\x61\x63\x74","\x67\x72\x65\x61\x74\x65\x72","\x67\x72\x65\x61\x74\x65\x72\x5F\x6F\x72\x5F\x65\x71\x75\x61\x6C","\x6C\x65\x73\x73","\x6C\x65\x73\x73\x5F\x6F\x72\x5F\x65\x71\x75\x61\x6C","\x63\x72\x65\x61\x74\x65\x64\x41\x74","\x69\x6E\x74\x65\x72\x76\x61\x6C","\x74\x69\x6D\x65\x6F\x75\x74","\x65\x78\x70\x6F\x72\x74\x73","\x63\x68\x61\x6E\x6E\x65\x6C","\x66\x61\x78","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x6C\x65\x74\x65","\x65\x72\x72\x6F\x72","\x61\x6C\x6C","\x73\x63\x6F\x70\x65"];_0xe6fa[0];var _=require(_0xe6fa[1]);var config=require(_0xe6fa[2]);var moment=require(_0xe6fa[3]);var sequelize=require(_0xe6fa[5])[_0xe6fa[4]];var Automation=require(_0xe6fa[5])[_0xe6fa[6]];var FaxRoom=require(_0xe6fa[5])[_0xe6fa[7]];var Settings=require(_0xe6fa[5])[_0xe6fa[8]];var automationTimeout;var activeAutomations={};function executeAutomation(_0x3f76xb){var _0x3f76xc={where:{$and:[],$or:[]}};var _0x3f76xd={};_0x3f76xb[_0xe6fa[14]][_0xe6fa[13]](function(_0x3f76xe){_0x3f76xc[_0xe6fa[12]][_0xe6fa[11]][_0xe6fa[10]](getCondition(_0x3f76xe[_0xe6fa[9]]))});_0x3f76xb[_0xe6fa[16]][_0xe6fa[13]](function(_0x3f76xe){_0x3f76xc[_0xe6fa[12]][_0xe6fa[15]][_0xe6fa[10]](getCondition(_0x3f76xe[_0xe6fa[9]]))});return FaxRoom[_0xe6fa[25]](_0x3f76xc)[_0xe6fa[24]](function(_0x3f76x10){_0x3f76x10[_0xe6fa[13]](function(_0x3f76x11){_0x3f76xb[_0xe6fa[23]][_0xe6fa[13]](function(_0x3f76x12){switch(_0x3f76x12[_0xe6fa[22]]){case _0xe6fa[21]:setStatus(_0x3f76x11[_0xe6fa[19]],_0x3f76x12[_0xe6fa[20]]);break;default:}})})})[_0xe6fa[18]](function(_0x3f76xf){console[_0xe6fa[17]](_0x3f76xf)})}function setStatus(_0x3f76x14,_0x3f76x15){return FaxRoom[_0xe6fa[26]]({status:_0x3f76x15},{where:{id:_0x3f76x14}})[_0xe6fa[18]](function(_0x3f76xf){console[_0xe6fa[17]](_0x3f76xf)})}function getCondition(_0x3f76xe){var _0x3f76x17={};switch(_0x3f76xe[_0xe6fa[27]]){case _0xe6fa[21]:switch(_0x3f76xe[_0xe6fa[31]]){case _0xe6fa[29]:_0x3f76x17[_0x3f76xe[_0xe6fa[27]]]=_0x3f76xe[_0xe6fa[28]];break;case _0xe6fa[30]:_0x3f76x17[_0x3f76xe[_0xe6fa[27]]]={$ne:_0x3f76xe[_0xe6fa[28]]};break;default:};break;case _0xe6fa[40]:var _0x3f76x18=moment()[_0xe6fa[35]](parseInt(_0x3f76xe[_0xe6fa[28]],10),_0xe6fa[34])[_0xe6fa[33]](_0xe6fa[32]);switch(_0x3f76xe[_0xe6fa[31]]){case _0xe6fa[36]:_0x3f76x17[_0x3f76xe[_0xe6fa[27]]]={lt:_0x3f76x18};break;case _0xe6fa[37]:_0x3f76x17[_0x3f76xe[_0xe6fa[27]]]={$lte:_0x3f76x18};break;case _0xe6fa[38]:_0x3f76x17[_0x3f76xe[_0xe6fa[27]]]={$gt:_0x3f76x18};break;case _0xe6fa[39]:_0x3f76x17[_0x3f76xe[_0xe6fa[27]]]={$gte:_0x3f76x18};break;default:};break;default:};return _0x3f76x17}function createInterval(_0x3f76xb){activeAutomations[_0xe6fa[41]+_0x3f76xb[_0xe6fa[19]]]=setInterval(function(){executeAutomation(_0x3f76xb)},_0x3f76xb[_0xe6fa[42]]*1000)}module[_0xe6fa[43]]=function(){Automation[_0xe6fa[46]](function(_0x3f76x1a,_0x3f76x1b){if(_0x3f76x1a[_0xe6fa[21]]&&_0x3f76x1a[_0xe6fa[44]]===_0xe6fa[45]){createInterval(_0x3f76x1a)}});Automation[_0xe6fa[47]](function(_0x3f76x1a,_0x3f76x1b){if(activeAutomations[_0xe6fa[41]+_0x3f76x1a[_0xe6fa[19]]]){clearInterval(activeAutomations[_0xe6fa[41]+_0x3f76x1a[_0xe6fa[19]]])};if(_0x3f76x1a[_0xe6fa[21]]&&_0x3f76x1a[_0xe6fa[44]]===_0xe6fa[45]){createInterval(_0x3f76x1a)}});Automation[_0xe6fa[48]](function(_0x3f76x1a,_0x3f76x1b){if(activeAutomations[_0xe6fa[41]+_0x3f76x1a[_0xe6fa[19]]]){clearInterval(activeAutomations[_0xe6fa[41]+_0x3f76x1a[_0xe6fa[19]]])}});Automation[_0xe6fa[51]](_0xe6fa[50])[_0xe6fa[25]]({where:{status:true,channel:_0xe6fa[45]}})[_0xe6fa[24]](function(_0x3f76x1c){_0x3f76x1c[_0xe6fa[13]](function(_0x3f76xb){createInterval(_0x3f76xb)})})[_0xe6fa[18]](function(_0x3f76xf){console[_0xe6fa[49]](_0x3f76xf)})}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var config = require('../environment');
+var moment = require('moment');
+// var stringifyObject = require('stringify-object');
+
+var sequelize = require('../../models').sequelize;
+var Automation = require('../../models').Automation;
+var FaxRoom = require('../../models').FaxRoom;
+var Settings = require('../../models').Settings;
+var automationTimeout;
+var activeAutomations = {};
+
+function executeAutomation(faxAutomation) {
+  var query = {
+    where: {
+      $and: [],
+      $or: []
+    }
+  };
+  var actions = {};
+  faxAutomation.All.forEach(function(condition) {
+    query.where.$and.push(getCondition(condition.dataValues));
+  });
+  faxAutomation.Any.forEach(function(condition) {
+    query.where.$or.push(getCondition(condition.dataValues));
+  });
+
+  return FaxRoom
+    .findAll(query)
+    .then(function(faxes) {
+      faxes.forEach(function(fax) {
+        faxAutomation.Actions.forEach(function(action) {
+          switch (action.action) {
+            case 'status':
+              setStatus(fax.id, action.data1);
+              break;
+            default:
+          }
+        });
+      });
+    })
+    .catch(function(err) {
+      console.log(err);
+    });
+}
+
+function setStatus(ticketId, newStatus) {
+  return FaxRoom.update({
+      status: newStatus,
+    }, {
+      where: {
+        id: ticketId
+      }
+    })
+    .catch(function(err) {
+      console.log(err);
+    });
+}
+
+function getCondition(condition) {
+  var result = {};
+  switch (condition.field) {
+    case 'status':
+      switch (condition.operator) {
+        case 'equals':
+          result[condition.field] = condition.value;
+          break;
+        case 'not_equals':
+          result[condition.field] = {
+            $ne: condition.value
+          };
+          break;
+        default:
+      }
+      break;
+    case 'createdAt':
+      var compareDate = moment().subtract(parseInt(condition.value, 10), 'hours').format("YYYY-MM-DD HH:mm:ss");
+      switch (condition.operator) {
+        case 'greater':
+          result[condition.field] = {
+            lt: compareDate
+          };
+          break;
+        case 'greater_or_equal':
+          result[condition.field] = {
+            $lte: compareDate
+          };
+          break;
+        case 'less':
+          result[condition.field] = {
+            $gt: compareDate
+          };
+          break;
+        case 'less_or_equal':
+          result[condition.field] = {
+            $gte: compareDate
+          };
+          break;
+        default:
+      }
+      break;
+    default:
+  }
+  return result;
+}
+
+function createInterval(faxAutomation) {
+  activeAutomations['interval' + faxAutomation.id] = setInterval(function() {
+    executeAutomation(faxAutomation);
+  }, faxAutomation.timeout * 1000);
+}
+
+module.exports = function() {
+
+  Automation.afterCreate(function(doc, options) {
+    if (doc.status && doc.channel === 'fax') {
+      createInterval(doc);
+    }
+  });
+
+  Automation.afterUpdate(function(doc, options) {
+    if (activeAutomations['interval' + doc.id]) {
+      clearInterval(activeAutomations['interval' + doc.id]);
+    }
+    if (doc.status && doc.channel === 'fax') {
+      createInterval(doc);
+    }
+  });
+
+  Automation.afterDelete(function(doc, options) {
+    if (activeAutomations['interval' + doc.id]) {
+      clearInterval(activeAutomations['interval' + doc.id]);
+    }
+  });
+
+  Automation
+    .scope('all')
+    .findAll({
+      where: {
+        status: true,
+        channel: 'fax'
+      }
+    })
+    .then(function(faxAutomations) {
+
+      faxAutomations.forEach(function(faxAutomation) {
+        createInterval(faxAutomation);
+      });
+    })
+    .catch(function(err) {
+      console.error(err);
+    });
+};
index 8038600..dfd4a14 100644 (file)
@@ -1 +1,154 @@
-var _0x3256=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x2E\x2E\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x6D\x6F\x6D\x65\x6E\x74","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E","\x4D\x61\x69\x6C\x52\x6F\x6F\x6D","\x53\x65\x74\x74\x69\x6E\x67\x73","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x70\x75\x73\x68","\x24\x61\x6E\x64","\x77\x68\x65\x72\x65","\x66\x6F\x72\x45\x61\x63\x68","\x41\x6C\x6C","\x24\x6F\x72","\x41\x6E\x79","\x6C\x6F\x67","\x63\x61\x74\x63\x68","\x69\x64","\x64\x61\x74\x61\x31","\x73\x74\x61\x74\x75\x73","\x61\x63\x74\x69\x6F\x6E","\x41\x63\x74\x69\x6F\x6E\x73","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6C\x6C","\x75\x70\x64\x61\x74\x65","\x66\x69\x65\x6C\x64","\x76\x61\x6C\x75\x65","\x65\x71\x75\x61\x6C\x73","\x6E\x6F\x74\x5F\x65\x71\x75\x61\x6C\x73","\x6F\x70\x65\x72\x61\x74\x6F\x72","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x66\x6F\x72\x6D\x61\x74","\x68\x6F\x75\x72\x73","\x73\x75\x62\x74\x72\x61\x63\x74","\x67\x72\x65\x61\x74\x65\x72","\x67\x72\x65\x61\x74\x65\x72\x5F\x6F\x72\x5F\x65\x71\x75\x61\x6C","\x6C\x65\x73\x73","\x6C\x65\x73\x73\x5F\x6F\x72\x5F\x65\x71\x75\x61\x6C","\x63\x72\x65\x61\x74\x65\x64\x41\x74","\x69\x6E\x74\x65\x72\x76\x61\x6C","\x74\x69\x6D\x65\x6F\x75\x74","\x65\x78\x70\x6F\x72\x74\x73","\x63\x68\x61\x6E\x6E\x65\x6C","\x6D\x61\x69\x6C","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x6C\x65\x74\x65","\x65\x72\x72\x6F\x72","\x61\x6C\x6C","\x73\x63\x6F\x70\x65"];_0x3256[0];var _=require(_0x3256[1]);var config=require(_0x3256[2]);var moment=require(_0x3256[3]);var sequelize=require(_0x3256[5])[_0x3256[4]];var Automation=require(_0x3256[5])[_0x3256[6]];var MailRoom=require(_0x3256[5])[_0x3256[7]];var Settings=require(_0x3256[5])[_0x3256[8]];var activeAutomations={};function executeAutomation(_0x1eecxa){var _0x1eecxb={where:{$and:[],$or:[]}};var _0x1eecxc={};_0x1eecxa[_0x3256[14]][_0x3256[13]](function(_0x1eecxd){_0x1eecxb[_0x3256[12]][_0x3256[11]][_0x3256[10]](getCondition(_0x1eecxd[_0x3256[9]]))});_0x1eecxa[_0x3256[16]][_0x3256[13]](function(_0x1eecxd){_0x1eecxb[_0x3256[12]][_0x3256[15]][_0x3256[10]](getCondition(_0x1eecxd[_0x3256[9]]))});return MailRoom[_0x3256[25]](_0x1eecxb)[_0x3256[24]](function(_0x1eecxf){_0x1eecxf[_0x3256[13]](function(_0x1eecx10){_0x1eecxa[_0x3256[23]][_0x3256[13]](function(_0x1eecx11){switch(_0x1eecx11[_0x3256[22]]){case _0x3256[21]:setStatus(_0x1eecx10[_0x3256[19]],_0x1eecx11[_0x3256[20]]);break;default:}})})})[_0x3256[18]](function(_0x1eecxe){console[_0x3256[17]](_0x1eecxe)})}function setStatus(_0x1eecx13,_0x1eecx14){return MailRoom[_0x3256[26]]({status:_0x1eecx14},{where:{id:_0x1eecx13}})[_0x3256[18]](function(_0x1eecxe){console[_0x3256[17]](_0x1eecxe)})}function getCondition(_0x1eecxd){var _0x1eecx16={};switch(_0x1eecxd[_0x3256[27]]){case _0x3256[21]:switch(_0x1eecxd[_0x3256[31]]){case _0x3256[29]:_0x1eecx16[_0x1eecxd[_0x3256[27]]]=_0x1eecxd[_0x3256[28]];break;case _0x3256[30]:_0x1eecx16[_0x1eecxd[_0x3256[27]]]={$ne:_0x1eecxd[_0x3256[28]]};break;default:};break;case _0x3256[40]:var _0x1eecx17=moment()[_0x3256[35]](parseInt(_0x1eecxd[_0x3256[28]],10),_0x3256[34])[_0x3256[33]](_0x3256[32]);switch(_0x1eecxd[_0x3256[31]]){case _0x3256[36]:_0x1eecx16[_0x1eecxd[_0x3256[27]]]={lt:_0x1eecx17};break;case _0x3256[37]:_0x1eecx16[_0x1eecxd[_0x3256[27]]]={$lte:_0x1eecx17};break;case _0x3256[38]:_0x1eecx16[_0x1eecxd[_0x3256[27]]]={$gt:_0x1eecx17};break;case _0x3256[39]:_0x1eecx16[_0x1eecxd[_0x3256[27]]]={$gte:_0x1eecx17};break;default:};break;default:};return _0x1eecx16}function createInterval(_0x1eecxa){activeAutomations[_0x3256[41]+_0x1eecxa[_0x3256[19]]]=setInterval(function(){executeAutomation(_0x1eecxa)},_0x1eecxa[_0x3256[42]]*1000)}module[_0x3256[43]]=function(){Automation[_0x3256[46]](function(_0x1eecx19,_0x1eecx1a){if(_0x1eecx19[_0x3256[21]]&&_0x1eecx19[_0x3256[44]]===_0x3256[45]){createInterval(_0x1eecx19)}});Automation[_0x3256[47]](function(_0x1eecx19,_0x1eecx1a){if(activeAutomations[_0x3256[41]+_0x1eecx19[_0x3256[19]]]){clearInterval(activeAutomations[_0x3256[41]+_0x1eecx19[_0x3256[19]]])};if(_0x1eecx19[_0x3256[21]]&&_0x1eecx19[_0x3256[44]]===_0x3256[45]){createInterval(_0x1eecx19)}});Automation[_0x3256[48]](function(_0x1eecx19,_0x1eecx1a){if(activeAutomations[_0x3256[41]+_0x1eecx19[_0x3256[19]]]){clearInterval(activeAutomations[_0x3256[41]+_0x1eecx19[_0x3256[19]]])}});Automation[_0x3256[51]](_0x3256[50])[_0x3256[25]]({where:{status:true,channel:_0x3256[45]}})[_0x3256[24]](function(_0x1eecx1b){_0x1eecx1b[_0x3256[13]](function(_0x1eecxa){createInterval(_0x1eecxa)})})[_0x3256[18]](function(_0x1eecxe){console[_0x3256[49]](_0x1eecxe)})}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var config = require('../environment');
+var moment = require('moment');
+// var stringifyObject = require('stringify-object');
+
+var sequelize = require('../../models').sequelize;
+var Automation = require('../../models').Automation;
+var MailRoom = require('../../models').MailRoom;
+var Settings = require('../../models').Settings;
+var activeAutomations = {};
+
+function executeAutomation(mailAutomation) {
+  var query = {
+    where: {
+      $and: [],
+      $or: []
+    }
+  };
+  var actions = {};
+  mailAutomation.All.forEach(function(condition) {
+    query.where.$and.push(getCondition(condition.dataValues));
+  });
+  mailAutomation.Any.forEach(function(condition) {
+    query.where.$or.push(getCondition(condition.dataValues));
+  });
+
+  return MailRoom
+    .findAll(query)
+    .then(function(mails) {
+      mails.forEach(function(mail) {
+        mailAutomation.Actions.forEach(function(action) {
+          switch (action.action) {
+            case 'status':
+              setStatus(mail.id, action.data1);
+              break;
+            default:
+          }
+        });
+      });
+    })
+    .catch(function(err) {
+      console.log(err);
+    });
+}
+
+function setStatus(ticketId, newStatus) {
+  return MailRoom.update({
+      status: newStatus,
+    }, {
+      where: {
+        id: ticketId
+      }
+    })
+    .catch(function(err) {
+      console.log(err);
+    });
+}
+
+function getCondition(condition) {
+  var result = {};
+  switch (condition.field) {
+    case 'status':
+      switch (condition.operator) {
+        case 'equals':
+          result[condition.field] = condition.value;
+          break;
+        case 'not_equals':
+          result[condition.field] = {
+            $ne: condition.value
+          };
+          break;
+        default:
+      }
+      break;
+    case 'createdAt':
+      var compareDate = moment().subtract(parseInt(condition.value, 10), 'hours').format("YYYY-MM-DD HH:mm:ss");
+      switch (condition.operator) {
+        case 'greater':
+          result[condition.field] = {
+            lt: compareDate
+          };
+          break;
+        case 'greater_or_equal':
+          result[condition.field] = {
+            $lte: compareDate
+          };
+          break;
+        case 'less':
+          result[condition.field] = {
+            $gt: compareDate
+          };
+          break;
+        case 'less_or_equal':
+          result[condition.field] = {
+            $gte: compareDate
+          };
+          break;
+        default:
+      }
+      break;
+    default:
+  }
+  return result;
+}
+
+function createInterval(mailAutomation) {
+  activeAutomations['interval' + mailAutomation.id] = setInterval(function() {
+    executeAutomation(mailAutomation);
+  }, mailAutomation.timeout * 1000);
+}
+
+module.exports = function() {
+
+  Automation.afterCreate(function(doc, options) {
+    if (doc.status && doc.channel === 'mail') {
+      createInterval(doc);
+    }
+  });
+
+  Automation.afterUpdate(function(doc, options) {
+    if (activeAutomations['interval' + doc.id]) {
+      clearInterval(activeAutomations['interval' + doc.id]);
+    }
+    if (doc.status && doc.channel === 'mail') {
+      createInterval(doc);
+    }
+  });
+
+  Automation.afterDelete(function(doc, options) {
+    if (activeAutomations['interval' + doc.id]) {
+      clearInterval(activeAutomations['interval' + doc.id]);
+    }
+  });
+
+  Automation
+    .scope('all')
+    .findAll({
+      where: {
+        status: true,
+        channel: 'mail'
+      }
+    })
+    .then(function(mailAutomations) {
+
+      mailAutomations.forEach(function(mailAutomation) {
+        createInterval(mailAutomation);
+      });
+    })
+    .catch(function(err) {
+      console.error(err);
+    });
+};
index a0a463c..1b2d7a3 100644 (file)
@@ -1 +1,74 @@
-var _0x429b=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x73\x65\x72\x76\x65\x2D\x66\x61\x76\x69\x63\x6F\x6E","\x6D\x6F\x72\x67\x61\x6E","\x63\x6F\x6D\x70\x72\x65\x73\x73\x69\x6F\x6E","\x62\x6F\x64\x79\x2D\x70\x61\x72\x73\x65\x72","\x65\x78\x70\x72\x65\x73\x73\x2D\x71\x75\x65\x72\x79\x2D\x69\x6E\x74","\x6D\x65\x74\x68\x6F\x64\x2D\x6F\x76\x65\x72\x72\x69\x64\x65","\x63\x6F\x6F\x6B\x69\x65\x2D\x70\x61\x72\x73\x65\x72","\x65\x72\x72\x6F\x72\x68\x61\x6E\x64\x6C\x65\x72","\x70\x61\x74\x68","\x70\x61\x73\x73\x70\x6F\x72\x74","\x65\x78\x70\x72\x65\x73\x73\x2D\x73\x65\x73\x73\x69\x6F\x6E","\x63\x6F\x6E\x6E\x65\x63\x74\x2D\x66\x6C\x61\x73\x68","\x65\x78\x70\x72\x65\x73\x73\x2D\x6D\x79\x73\x71\x6C\x2D\x73\x65\x73\x73\x69\x6F\x6E","\x2E\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x65\x78\x70\x6F\x72\x74\x73","\x65\x6E\x76","\x67\x65\x74","\x76\x69\x65\x77\x73","\x72\x6F\x6F\x74","\x2F\x73\x65\x72\x76\x65\x72\x2F\x76\x69\x65\x77\x73","\x73\x65\x74","\x68\x74\x6D\x6C","\x72\x65\x6E\x64\x65\x72\x46\x69\x6C\x65","\x65\x6A\x73","\x65\x6E\x67\x69\x6E\x65","\x76\x69\x65\x77\x20\x65\x6E\x67\x69\x6E\x65","\x75\x73\x65","\x75\x72\x6C\x65\x6E\x63\x6F\x64\x65\x64","\x6A\x73\x6F\x6E","\x69\x6E\x69\x74\x69\x61\x6C\x69\x7A\x65","\x73\x65\x63\x72\x65\x74","\x73\x65\x73\x73\x69\x6F\x6E","\x68\x6F\x73\x74","\x64\x62","\x70\x6F\x72\x74","\x75\x73\x65\x72\x6E\x61\x6D\x65","\x70\x61\x73\x73\x77\x6F\x72\x64","\x64\x61\x74\x61\x62\x61\x73\x65","\x63\x6F\x6F\x6B\x69\x65","\x6E\x61\x6D\x65","\x70\x72\x6F\x64\x75\x63\x74\x69\x6F\x6E","\x70\x75\x62\x6C\x69\x63","\x66\x61\x76\x69\x63\x6F\x6E\x2E\x69\x63\x6F","\x6A\x6F\x69\x6E","\x73\x74\x61\x74\x69\x63","\x61\x70\x70\x50\x61\x74\x68","\x2F\x70\x75\x62\x6C\x69\x63","\x64\x65\x76","\x64\x65\x76\x65\x6C\x6F\x70\x6D\x65\x6E\x74","\x74\x65\x73\x74","\x63\x6F\x6E\x6E\x65\x63\x74\x2D\x6C\x69\x76\x65\x72\x65\x6C\x6F\x61\x64","\x2E\x74\x6D\x70","\x63\x6C\x69\x65\x6E\x74"];_0x429b[0];var express=require(_0x429b[1]);var favicon=require(_0x429b[2]);var morgan=require(_0x429b[3]);var compression=require(_0x429b[4]);var bodyParser=require(_0x429b[5]);var queryParser=require(_0x429b[6]);var methodOverride=require(_0x429b[7]);var cookieParser=require(_0x429b[8]);var errorHandler=require(_0x429b[9]);var path=require(_0x429b[10]);var passport=require(_0x429b[11]);var session=require(_0x429b[12]);var flash=require(_0x429b[13]);var SessionStore=require(_0x429b[14]);var session=require(_0x429b[12]);var config=require(_0x429b[15]);module[_0x429b[16]]=function(_0xd20dx10){var _0xd20dx11=_0xd20dx10[_0x429b[18]](_0x429b[17]);_0xd20dx10[_0x429b[22]](_0x429b[19],config[_0x429b[20]]+_0x429b[21]);_0xd20dx10[_0x429b[26]](_0x429b[23],require(_0x429b[25])[_0x429b[24]]);_0xd20dx10[_0x429b[22]](_0x429b[27],_0x429b[23]);_0xd20dx10[_0x429b[28]](compression());_0xd20dx10[_0x429b[28]](bodyParser[_0x429b[29]]({extended:false}));_0xd20dx10[_0x429b[28]](bodyParser[_0x429b[30]]());_0xd20dx10[_0x429b[28]](methodOverride());_0xd20dx10[_0x429b[28]](cookieParser());_0xd20dx10[_0x429b[28]](passport[_0x429b[31]]());_0xd20dx10[_0x429b[28]](session({secret:config[_0x429b[33]][_0x429b[32]],store: new SessionStore({host:config[_0x429b[35]][_0x429b[34]],port:config[_0x429b[35]][_0x429b[36]],user:config[_0x429b[35]][_0x429b[37]],password:config[_0x429b[35]][_0x429b[38]],database:config[_0x429b[35]][_0x429b[39]]}),cookie:config[_0x429b[33]][_0x429b[40]],name:config[_0x429b[33]][_0x429b[41]],resave:true,saveUninitialized:true}));if(_0x429b[42]===_0xd20dx11){_0xd20dx10[_0x429b[28]](favicon(path[_0x429b[45]](config[_0x429b[20]],_0x429b[43],_0x429b[44])));_0xd20dx10[_0x429b[28]](express[_0x429b[46]](path[_0x429b[45]](config[_0x429b[20]],_0x429b[43])));_0xd20dx10[_0x429b[22]](_0x429b[47],config[_0x429b[20]]+_0x429b[48]);_0xd20dx10[_0x429b[28]](morgan(_0x429b[49]))};if(_0x429b[50]===_0xd20dx11||_0x429b[51]===_0xd20dx11){_0xd20dx10[_0x429b[28]](require(_0x429b[52])());_0xd20dx10[_0x429b[28]](express[_0x429b[46]](path[_0x429b[45]](config[_0x429b[20]],_0x429b[53])));_0xd20dx10[_0x429b[28]](express[_0x429b[46]](path[_0x429b[45]](config[_0x429b[20]],_0x429b[54])));_0xd20dx10[_0x429b[22]](_0x429b[47],_0x429b[54]);_0xd20dx10[_0x429b[28]](morgan(_0x429b[49]));_0xd20dx10[_0x429b[28]](errorHandler())};_0xd20dx10[_0x429b[28]](flash())}
\ No newline at end of file
+/**
+ * Express configuration
+ */
+
+'use strict';
+
+var express = require('express');
+var favicon = require('serve-favicon');
+var morgan = require('morgan');
+var compression = require('compression');
+var bodyParser = require('body-parser');
+var queryParser = require('express-query-int');
+var methodOverride = require('method-override');
+var cookieParser = require('cookie-parser');
+var errorHandler = require('errorhandler');
+var path = require('path');
+var passport = require('passport');
+var session = require('express-session');
+var flash = require('connect-flash');
+var SessionStore = require('express-mysql-session');
+var session = require('express-session');
+var config = require('./environment');
+
+module.exports = function (app) {
+  var env = app.get('env');
+
+  app.set('views', config.root + '/server/views');
+  app.engine('html', require('ejs').renderFile);
+  app.set('view engine', 'html');
+  app.use(compression());
+  app.use(bodyParser.urlencoded({
+    extended: false
+  }));
+  app.use(bodyParser.json());
+  // app.use(queryParser());
+  app.use(methodOverride());
+  app.use(cookieParser());
+  app.use(passport.initialize());
+
+  // Express/MySQL session storage
+  app.use(session({
+    secret: config.session.secret,
+    store: new SessionStore({
+      host: config.db.host,
+      port: config.db.port,
+      user: config.db.username,
+      password: config.db.password,
+      database: config.db.database
+    }),
+    cookie: config.session.cookie,
+    name: config.session.name,
+    resave: true,
+    saveUninitialized: true
+  }));
+
+  if ('production' === env) {
+    app.use(favicon(path.join(config.root, 'public', 'favicon.ico')));
+    app.use(express.static(path.join(config.root, 'public')));
+    app.set('appPath', config.root + '/public');
+    app.use(morgan('dev'));
+  }
+
+  if ('development' === env || 'test' === env) {
+    app.use(require('connect-livereload')());
+    app.use(express.static(path.join(config.root, '.tmp')));
+    app.use(express.static(path.join(config.root, 'client')));
+    app.set('appPath', 'client');
+    app.use(morgan('dev'));
+    app.use(errorHandler()); // Error handler - has to be last
+  }
+
+  // Connect flash for flash messages
+  app.use(flash());
+};
index 3a34622..c64343b 100644 (file)
@@ -1 +1,240 @@
-var _0xc7cf=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x6E\x6F\x64\x65\x2D\x75\x75\x69\x64","\x74\x69\x66\x66\x2D\x74\x6F\x2D\x70\x6E\x67","\x65\x78\x65\x63","\x63\x68\x69\x6C\x64\x5F\x70\x72\x6F\x63\x65\x73\x73","\x66\x73","\x70\x61\x74\x68","\x46\x61\x78\x4D\x65\x73\x73\x61\x67\x65","\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x46\x61\x78\x52\x6F\x6F\x6D","\x43\x6F\x6E\x74\x61\x63\x74","\x45\x76\x65\x6E\x74","\x2E\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x72\x65\x67\x69\x73\x74\x65\x72","\x72\x65\x63\x65\x69\x76\x65\x66\x61\x78","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x73\x74\x61\x74\x75\x73","\x52\x45\x43\x45\x49\x56\x45\x44","\x46\x61\x78\x52\x6F\x6F\x6D\x49\x64","\x69\x64","\x49\x4E\x43\x4F\x4D\x49\x4E\x47","\x46\x41\x58","\x63\x72\x65\x61\x74\x65","\x73\x65\x74\x46\x72\x6F\x6D","\x73\x70\x72\x65\x61\x64","\x72\x65\x6D\x6F\x74\x65\x73\x74\x61\x74\x69\x6F\x6E\x69\x64","\x66\x69\x6E\x64\x4F\x72\x43\x72\x65\x61\x74\x65","\x73\x65\x74\x54\x6F","\x6C\x6F\x63\x61\x6C\x73\x74\x61\x74\x69\x6F\x6E\x69\x64","\x76\x34","\x66\x69\x6C\x65\x6E\x61\x6D\x65","\x72\x6F\x6F\x74","\x73\x65\x72\x76\x65\x72","\x66\x69\x6C\x65\x73","\x66\x61\x78","\x69\x6E\x62\x6F\x75\x6E\x64","\x2E\x70\x64\x66","\x6A\x6F\x69\x6E","\x63\x6F\x6E\x76\x65\x72\x74\x20","\x20","\x54\x68\x65\x20\x66\x69\x6C\x65\x20","\x20\x65\x78\x69\x74\x73","\x20\x77\x61\x73\x20\x63\x6F\x6E\x76\x65\x72\x74\x65\x64\x20\x69\x6E\x20\x50\x44\x46","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x20\x64\x6F\x65\x73\x20\x6E\x6F\x74\x20\x65\x78\x69\x74\x73","\x65\x78\x69\x73\x74\x73","\x4E\x45\x57","\x6F\x6E","\x73\x65\x6E\x64\x66\x61\x78","\x2A\x2A\x2A\x53\x65\x6E\x64\x46\x41\x58\x2A\x2A\x2A","\x6C\x6F\x67","\x75\x6E\x69\x71\x75\x65\x69\x64","\x66\x69\x6E\x64\x4F\x6E\x65","\x76\x61\x72\x73\x65\x74","\x66\x61\x78\x73\x74\x61\x74\x75\x73","\x68\x61\x73\x4F\x77\x6E\x50\x72\x6F\x70\x65\x72\x74\x79","\x76\x61\x72\x69\x61\x62\x6C\x65","\x56\x61\x72\x53\x65\x74\x3A\x20","\x76\x61\x6C\x75\x65","\x46\x41\x49\x4C\x45\x44","\x53\x45\x4E\x54","\x66\x61\x78\x65\x72\x72\x6F\x72","\x66\x61\x78\x73\x74\x61\x74\x75\x73\x73\x74\x72\x69\x6E\x67","\x6C\x61\x73\x74\x73\x74\x61\x74\x75\x73","\x75\x73\x65\x72\x65\x76\x65\x6E\x74","\x46\x61\x78","\x53\x45\x4E\x44\x49\x4E\x47","\x75\x75\x69\x64","\x46\x41\x58\x53\x74\x61\x74\x75\x73\x3A\x20","\x6F\x70\x65\x72\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x61\x70\x69\x2F\x66\x61\x78\x5F\x6D\x65\x73\x73\x61\x67\x65\x2F\x66\x61\x78\x5F\x6D\x65\x73\x73\x61\x67\x65\x2E\x61\x6D\x69"];_0xc7cf[0];var _=require(_0xc7cf[1]);var uuidLib=require(_0xc7cf[2]);var ConvertTiff=require(_0xc7cf[3]);var exec=require(_0xc7cf[5])[_0xc7cf[4]];var fs=require(_0xc7cf[6]);var path=require(_0xc7cf[7]);var FaxMessage=require(_0xc7cf[9])[_0xc7cf[8]];var FaxRoom=require(_0xc7cf[9])[_0xc7cf[10]];var Contact=require(_0xc7cf[9])[_0xc7cf[11]];var Event=require(_0xc7cf[9])[_0xc7cf[12]];var config=require(_0xc7cf[13]);exports[_0xc7cf[14]]=function(_0xc60cxc){_0xc60cxc[_0xc7cf[50]](_0xc7cf[15],function(_0xc60cxd){FaxRoom[_0xc7cf[24]]({status:_0xc7cf[49],from:_0xc60cxd[_0xc7cf[27]],FaxAccountId:1})[_0xc7cf[45]](function(_0xc60cxf){_0xc60cxd[_0xc7cf[18]]=_0xc7cf[19];_0xc60cxd[_0xc7cf[20]]=_0xc60cxf[_0xc7cf[21]];FaxMessage[_0xc7cf[24]](_0xc60cxd)[_0xc7cf[45]](function(_0xc60cx10){Event[_0xc7cf[24]]({name:_0xc7cf[22],channel:_0xc7cf[23],FaxRoomId:_0xc60cxf[_0xc7cf[21]],FaxAccountId:1})[_0xc7cf[17]](function(_0xc60cxe){console[_0xc7cf[16]](_0xc60cxe)});Contact[_0xc7cf[28]]({where:{phone:_0xc60cxd[_0xc7cf[27]]},defaults:{phone:_0xc60cxd[_0xc7cf[27]],fullname:_0xc60cxd[_0xc7cf[27]]}})[_0xc7cf[26]](function(_0xc60cx11,_0xc60cx12){_0xc60cx10[_0xc7cf[25]](_0xc60cx11)});Contact[_0xc7cf[28]]({where:{phone:_0xc60cxd[_0xc7cf[30]]},defaults:{phone:_0xc60cxd[_0xc7cf[30]],fullname:_0xc60cxd[_0xc7cf[30]]}})[_0xc7cf[26]](function(_0xc60cx11,_0xc60cx12){_0xc60cx10[_0xc7cf[29]](_0xc60cx11)});var _0xc60cx13=uuidLib[_0xc7cf[31]]();var _0xc60cx14=_0xc60cxd[_0xc7cf[32]];var _0xc60cx15=path[_0xc7cf[39]](config[_0xc7cf[33]],_0xc7cf[34],_0xc7cf[35],_0xc7cf[36],_0xc7cf[37],_0xc60cx13+_0xc7cf[38]);var _0xc60cx16=_0xc7cf[40]+_0xc60cx14+_0xc7cf[41]+_0xc60cx15;fs[_0xc7cf[48]](_0xc60cx14,function(_0xc60cx17){if(_0xc60cx17){console[_0xc7cf[16]](_0xc7cf[42]+_0xc60cx14+_0xc7cf[43]);exec(_0xc60cx16,function(_0xc60cxe){if(_0xc60cxe){console[_0xc7cf[16]](_0xc60cxe)}else {_0xc60cx10[_0xc7cf[46]]({filenamePDF:_0xc60cx13+_0xc7cf[38]})[_0xc7cf[45]](function(){console[_0xc7cf[16]](_0xc7cf[42]+_0xc60cx14+_0xc7cf[44])})[_0xc7cf[17]](function(_0xc60cxe){console[_0xc7cf[16]](_0xc60cxe)})}})}else {console[_0xc7cf[16]](_0xc7cf[42]+_0xc60cx14+_0xc7cf[47])}})})[_0xc7cf[17]](function(_0xc60cxe){console[_0xc7cf[16]](_0xc60cxe)})})[_0xc7cf[17]](function(_0xc60cxe){console[_0xc7cf[16]](_0xc60cxe)})});_0xc60cxc[_0xc7cf[50]](_0xc7cf[51],function(_0xc60cxd){console[_0xc7cf[53]](_0xc7cf[52]);FaxMessage[_0xc7cf[55]]({where:{uniqueid:_0xc60cxd[_0xc7cf[54]]}})[_0xc7cf[45]](function(_0xc60cx10){if(_0xc60cx10){_0xc60cx10[_0xc7cf[46]](_0xc60cxd)}})[_0xc7cf[17]](function(_0xc60cxe){console[_0xc7cf[16]](_0xc60cxe)})});_0xc60cxc[_0xc7cf[50]](_0xc7cf[56],function(_0xc60cxd){if(_0xc60cxd[_0xc7cf[59]][_0xc7cf[58]](_0xc7cf[57])){FaxMessage[_0xc7cf[55]]({where:{uniqueid:_0xc60cxd[_0xc7cf[54]]}})[_0xc7cf[45]](function(_0xc60cx10){if(_0xc60cx10){console[_0xc7cf[53]](_0xc7cf[60],_0xc7cf[18],_0xc60cxd[_0xc7cf[61]]);_0xc60cx10[_0xc7cf[46]]({status:_0xc60cxd[_0xc7cf[61]]==_0xc7cf[62]?_0xc7cf[62]:_0xc7cf[63]})}})[_0xc7cf[17]](function(_0xc60cxe){console[_0xc7cf[16]](_0xc60cxe)})}else {if(_0xc60cxd[_0xc7cf[59]][_0xc7cf[58]](_0xc7cf[64])){FaxMessage[_0xc7cf[55]]({where:{uniqueid:_0xc60cxd[_0xc7cf[54]]}})[_0xc7cf[45]](function(_0xc60cx10){if(_0xc60cx10){console[_0xc7cf[53]](_0xc7cf[60],_0xc7cf[16],_0xc60cxd[_0xc7cf[61]]);_0xc60cx10[_0xc7cf[46]]({error:_0xc60cxd[_0xc7cf[61]]})}})[_0xc7cf[17]](function(_0xc60cxe){console[_0xc7cf[16]](_0xc60cxe)})}else {if(_0xc60cxd[_0xc7cf[59]][_0xc7cf[58]](_0xc7cf[65])){FaxMessage[_0xc7cf[55]]({where:{uniqueid:_0xc60cxd[_0xc7cf[54]]}})[_0xc7cf[45]](function(_0xc60cx10){if(_0xc60cx10){console[_0xc7cf[53]](_0xc7cf[60],_0xc7cf[66],_0xc60cxd[_0xc7cf[61]]);_0xc60cx10[_0xc7cf[46]]({laststatus:_0xc60cxd[_0xc7cf[61]]})}})[_0xc7cf[17]](function(_0xc60cxe){console[_0xc7cf[16]](_0xc60cxe)})}}}});_0xc60cxc[_0xc7cf[50]](_0xc7cf[67],function(_0xc60cxd){if(_0xc60cxd[_0xc7cf[67]]===_0xc7cf[68]){FaxMessage[_0xc7cf[55]]({where:{uuid:_0xc60cxd[_0xc7cf[70]]}})[_0xc7cf[45]](function(_0xc60cx10){if(_0xc60cx10){_0xc60cxd[_0xc7cf[18]]=_0xc7cf[69];_0xc60cx10[_0xc7cf[46]](_0xc60cxd)}})[_0xc7cf[17]](function(_0xc60cxe){console[_0xc7cf[16]](_0xc60cxe)})}});_0xc60cxc[_0xc7cf[50]](_0xc7cf[57],function(_0xc60cxd){FaxMessage[_0xc7cf[55]]({where:{uniqueid:_0xc60cxd[_0xc7cf[54]]}})[_0xc7cf[45]](function(_0xc60cx10){if(_0xc60cx10){console[_0xc7cf[53]](_0xc7cf[71],_0xc60cxd[_0xc7cf[54]],_0xc60cxd[_0xc7cf[18]]);_0xc60cx10[_0xc7cf[46]]({operation:_0xc60cxd[_0xc7cf[72]],laststatus:_0xc60cxd[_0xc7cf[18]]})}})[_0xc7cf[17]](function(_0xc60cxe){console[_0xc7cf[16]](_0xc60cxe)})});require(_0xc7cf[73])[_0xc7cf[14]](_0xc60cxc)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var uuidLib = require('node-uuid');
+var ConvertTiff = require('tiff-to-png');
+var exec = require('child_process').exec;
+var fs = require('fs');
+var path = require('path');
+
+var FaxMessage = require('../models').FaxMessage;
+var FaxRoom = require('../models').FaxRoom;
+var Contact = require('../models').Contact;
+var Event = require('../models').Event;
+var config = require('./environment');
+
+exports.register = function(ami) {
+
+  ami.on('receivefax', function(evt) {
+
+    FaxRoom
+      .create({
+        status: 'NEW',
+        from: evt.remotestationid,
+        FaxAccountId: 1, //TODO Handle account ID
+      })
+      .then(function(faxRoom) {
+
+        evt.status = 'RECEIVED';
+        evt.FaxRoomId = faxRoom.id;
+
+        FaxMessage
+          .create(evt)
+          .then(function(faxMessage) {
+
+            Event
+              .create({
+                name: 'INCOMING',
+                channel: 'FAX',
+                FaxRoomId: faxRoom.id,
+                FaxAccountId: 1 //TODO Handle account ID
+              })
+              .catch(function(err) {
+                console.error(err);
+              });
+
+            Contact
+              .findOrCreate({
+                where: {
+                  phone: evt.remotestationid
+                },
+                defaults: {
+                  phone: evt.remotestationid,
+                  fullname: evt.remotestationid
+                }
+              })
+              .spread(function(contact, created) {
+                faxMessage.setFrom(contact);
+              });
+
+            Contact
+              .findOrCreate({
+                where: {
+                  phone: evt.localstationid
+                },
+                defaults: {
+                  phone: evt.localstationid,
+                  fullname: evt.localstationid
+                }
+              })
+              .spread(function(contact, created) {
+                faxMessage.setTo(contact);
+              });
+
+            //Convert tiff to png
+            var uuid = uuidLib.v4();
+            var inputPath = evt.filename; //Restore for normal usage
+            // var inputPath = '/tmp/sample.tif' //Used for testing
+            var resultPath = path.join(config.root, 'server', 'files', 'fax', 'inbound', uuid + '.pdf');
+            var command = 'convert ' + inputPath + ' ' + resultPath;
+            fs.exists(inputPath, function(exists) {
+              if (exists) {
+                console.error('The file ' + inputPath + ' exits');
+                //Install ImageMagick for doing that!
+                exec(command, function(err) {
+                  if (err) {
+                    console.error(err);
+                  } else {
+                    faxMessage.updateAttributes({
+                        filenamePDF: uuid + '.pdf'
+                      })
+                      .then(function() {
+                        console.error('The file ' + inputPath + ' was converted in PDF');
+                      })
+                      .catch(function(err) {
+                        console.error(err);
+                      });
+                  }
+                });
+              } else {
+                console.error('The file ' + inputPath + ' does not exits');
+              }
+            });
+          })
+          .catch(function(err) {
+            console.error(err);
+          });
+
+      })
+      .catch(function(err) {
+        console.error(err);
+      });
+  });
+
+  ami.on('sendfax', function(evt) {
+    console.log('***SendFAX***');
+
+    FaxMessage
+      .findOne({
+        where: {
+          uniqueid: evt.uniqueid
+        }
+      })
+      .then(function(faxMessage) {
+        if (faxMessage) {
+          faxMessage.updateAttributes(evt);
+        }
+      })
+      .catch(function(err) {
+        console.error(err);
+      });
+
+  });
+
+  ami.on('varset', function(evt) {
+    if (evt.variable.hasOwnProperty('faxstatus')) {
+      FaxMessage
+        .findOne({
+          where: {
+            uniqueid: evt.uniqueid
+          }
+        })
+        .then(function(faxMessage) {
+          if (faxMessage) {
+            console.log('VarSet: ', 'status', evt.value);
+            faxMessage.updateAttributes({
+              status: evt.value == 'FAILED' ? 'FAILED' : 'SENT'
+            });
+          }
+        })
+        .catch(function(err) {
+          console.error(err);
+        });
+    } else if (evt.variable.hasOwnProperty('faxerror')) {
+      FaxMessage
+        .findOne({
+          where: {
+            uniqueid: evt.uniqueid
+          }
+        })
+        .then(function(faxMessage) {
+          if (faxMessage) {
+            console.log('VarSet: ', 'error', evt.value);
+            faxMessage.updateAttributes({
+              error: evt.value
+            });
+          }
+        })
+        .catch(function(err) {
+          console.error(err);
+        });
+    } else if (evt.variable.hasOwnProperty('faxstatusstring')) {
+      FaxMessage
+        .findOne({
+          where: {
+            uniqueid: evt.uniqueid
+          }
+        })
+        .then(function(faxMessage) {
+          if (faxMessage) {
+            console.log('VarSet: ', 'laststatus', evt.value);
+            faxMessage.updateAttributes({
+              laststatus: evt.value
+            });
+          }
+        })
+        .catch(function(err) {
+          console.error(err);
+        });
+    }
+
+  });
+
+  ami.on('userevent', function(evt) {
+    if (evt.userevent === 'Fax') {
+      FaxMessage
+        .findOne({
+          where: {
+            uuid: evt.uuid
+          }
+        })
+        .then(function(faxMessage) {
+          if (faxMessage) {
+            evt.status = 'SENDING';
+            faxMessage.updateAttributes(evt);
+          }
+        })
+        .catch(function(err) {
+          console.error(err);
+        });
+    }
+
+  });
+
+  ami.on('faxstatus', function(evt) {
+    FaxMessage
+      .findOne({
+        where: {
+          uniqueid: evt.uniqueid
+        }
+      })
+      .then(function(faxMessage) {
+        if (faxMessage) {
+
+          console.log('FAXStatus: ', evt.uniqueid, evt.status);
+
+          faxMessage.updateAttributes({
+            operation: evt.operation,
+            laststatus: evt.status
+          });
+        }
+      })
+      .catch(function(err) {
+        console.error(err);
+      });
+
+  })
+
+  require('../api/fax_message/fax_message.ami').register(ami);
+
+};
index eeaa290..160778b 100644 (file)
@@ -1 +1,328 @@
-var _0x288c=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x6D\x6F\x6D\x65\x6E\x74","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x52\x65\x70\x6F\x72\x74\x41\x67\x65\x6E\x74","\x52\x65\x70\x6F\x72\x74\x43\x61\x6C\x6C","\x52\x65\x70\x6F\x72\x74\x44\x69\x61\x6C","\x52\x65\x70\x6F\x72\x74\x4D\x65\x6D\x62\x65\x72","\x52\x65\x70\x6F\x72\x74\x51\x75\x65\x75\x65","\x52\x65\x70\x6F\x72\x74\x49\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x52\x65\x70\x6F\x72\x74\x4D\x61\x69\x6C\x53\x65\x73\x73\x69\x6F\x6E","\x52\x65\x70\x6F\x72\x74\x41\x67\x65\x6E\x74\x48\x69\x73\x74\x6F\x72\x79","\x68\x69\x73\x74\x6F\x72\x79","\x52\x65\x70\x6F\x72\x74\x43\x61\x6C\x6C\x48\x69\x73\x74\x6F\x72\x79","\x52\x65\x70\x6F\x72\x74\x44\x69\x61\x6C\x48\x69\x73\x74\x6F\x72\x79","\x52\x65\x70\x6F\x72\x74\x4D\x65\x6D\x62\x65\x72\x48\x69\x73\x74\x6F\x72\x79","\x52\x65\x70\x6F\x72\x74\x51\x75\x65\x75\x65\x48\x69\x73\x74\x6F\x72\x79","\x52\x65\x70\x6F\x72\x74\x49\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x48\x69\x73\x74\x6F\x72\x79","\x52\x65\x70\x6F\x72\x74\x4D\x61\x69\x6C\x53\x65\x73\x73\x69\x6F\x6E\x48\x69\x73\x74\x6F\x72\x79","\x5B\x72\x65\x70\x6F\x72\x74\x5F\x61\x67\x65\x6E\x74\x5D\x20\x65\x72\x72\x6F\x72\x3A\x20","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x5B\x72\x65\x70\x6F\x72\x74\x5F\x61\x67\x65\x6E\x74\x5D\x20\x66\x6F\x75\x6E\x64\x3A\x20","\x6C\x65\x6E\x67\x74\x68","\x6C\x6F\x67","\x5B\x72\x65\x70\x6F\x72\x74\x5F\x61\x67\x65\x6E\x74\x5D\x20","\x69\x64","\x20\x72\x6F\x77\x20\x63\x6F\x70\x69\x65\x64","\x20\x72\x6F\x77\x20\x64\x65\x6C\x65\x74\x65\x64","\x74\x68\x65\x6E","\x64\x65\x73\x74\x72\x6F\x79","\x63\x72\x65\x61\x74\x65","\x66\x6F\x72\x45\x61\x63\x68","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x66\x6F\x72\x6D\x61\x74","\x66\x69\x6E\x64\x41\x6C\x6C","\x5B\x72\x65\x70\x6F\x72\x74\x5F\x63\x61\x6C\x6C\x5D\x20\x65\x72\x72\x6F\x72\x3A\x20","\x5B\x72\x65\x70\x6F\x72\x74\x5F\x63\x61\x6C\x6C\x5D\x20\x66\x6F\x75\x6E\x64\x3A\x20","\x5B\x63\x5D\x20","\x5B\x72\x65\x70\x6F\x72\x74\x5F\x63\x61\x6C\x6C\x5D\x20","\x5B\x72\x65\x70\x6F\x72\x74\x5F\x64\x69\x61\x6C\x5D\x20\x65\x72\x72\x6F\x72\x3A\x20","\x5B\x72\x65\x70\x6F\x72\x74\x5F\x64\x69\x61\x6C\x5D\x20\x66\x6F\x75\x6E\x64\x3A\x20","\x5B\x72\x65\x70\x6F\x72\x74\x5F\x64\x69\x61\x6C\x5D\x20","\x5B\x72\x65\x70\x6F\x72\x74\x5F\x6D\x65\x6D\x62\x65\x72\x5D\x20\x65\x72\x72\x6F\x72\x3A\x20","\x5B\x72\x65\x70\x6F\x72\x74\x5F\x6D\x65\x6D\x62\x65\x72\x5D\x20\x66\x6F\x75\x6E\x64\x3A\x20","\x5B\x72\x65\x70\x6F\x72\x74\x5F\x6D\x65\x6D\x62\x65\x72\x5D\x20","\x5B\x72\x65\x70\x6F\x72\x74\x5F\x71\x75\x65\x75\x65\x5D\x20\x65\x72\x72\x6F\x72\x3A\x20","\x5B\x72\x65\x70\x6F\x72\x74\x5F\x71\x75\x65\x75\x65\x5D\x20\x66\x6F\x75\x6E\x64\x3A\x20","\x5B\x72\x65\x70\x6F\x72\x74\x5F\x71\x75\x65\x75\x65\x5D\x20","\x5B\x72\x65\x70\x6F\x72\x74\x5F\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x5D\x20\x65\x72\x72\x6F\x72\x3A\x20","\x5B\x72\x65\x70\x6F\x72\x74\x5F\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x5D\x20\x66\x6F\x75\x6E\x64\x3A\x20","\x5B\x72\x65\x70\x6F\x72\x74\x5F\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x5D\x20","\x6D\x61\x70","\x5B\x72\x65\x70\x6F\x72\x74\x5F\x6D\x61\x69\x6C\x5F\x73\x65\x73\x73\x69\x6F\x6E\x5D\x20\x66\x6F\x75\x6E\x64\x3A\x20","\x5F\x72\x65\x70\x6F\x72\x74\x4D\x61\x69\x6C\x53\x65\x73\x73\x69\x6F\x6E\x73","\x62\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E","\x65\x78\x70\x6F\x72\x74\x73","\x30\x30\x20\x35\x39\x20\x32\x33\x20\x2A\x20\x2A\x20\x2A","\x63\x72\x6F\x6E\x54\x69\x6D\x65\x20\x6F\x6E\x54\x69\x63\x6B","\x73\x74\x61\x72\x74"];_0x288c[0];var _=require(_0x288c[1]);var moment=require(_0x288c[2]);var sequelize=require(_0x288c[4])[_0x288c[3]];var ReportAgent=require(_0x288c[4])[_0x288c[5]];var ReportCall=require(_0x288c[4])[_0x288c[6]];var ReportDial=require(_0x288c[4])[_0x288c[7]];var ReportMember=require(_0x288c[4])[_0x288c[8]];var ReportQueue=require(_0x288c[4])[_0x288c[9]];var ReportIntegration=require(_0x288c[4])[_0x288c[10]];var ReportMailSession=require(_0x288c[4])[_0x288c[11]];var ReportAgentHistory=require(_0x288c[4])[_0x288c[13]][_0x288c[12]];var ReportCallHistory=require(_0x288c[4])[_0x288c[13]][_0x288c[14]];var ReportDialHistory=require(_0x288c[4])[_0x288c[13]][_0x288c[15]];var ReportMemberHistory=require(_0x288c[4])[_0x288c[13]][_0x288c[16]];var ReportQueueHistory=require(_0x288c[4])[_0x288c[13]][_0x288c[17]];var ReportIntegrationHistory=require(_0x288c[4])[_0x288c[13]][_0x288c[18]];var ReportMailSessionHistory=require(_0x288c[4])[_0x288c[13]][_0x288c[19]];function ReportAgentInReportAgentHistory(){ReportAgent[_0x288c[36]]({where:{createdAt:{$lte:moment()[_0x288c[35]](_0x288c[34])},reason:{$ne:null}},raw:true})[_0x288c[30]](function(_0xc59dx14){console[_0x288c[25]](_0x288c[23]+_0xc59dx14[_0x288c[24]]);_0xc59dx14[_0x288c[33]](function(_0xc59dx15,_0xc59dx16){ReportAgentHistory[_0x288c[32]](_0xc59dx15)[_0x288c[30]](function(){console[_0x288c[25]](_0x288c[26]+_0xc59dx15[_0x288c[27]]+_0x288c[28]);ReportAgent[_0x288c[31]]({where:{id:_0xc59dx15[_0x288c[27]]},individualHooks:true})[_0x288c[30]](function(_0xc59dx17){console[_0x288c[25]](_0x288c[26]+_0xc59dx15[_0x288c[27]]+_0x288c[29])})[_0x288c[22]](function(_0xc59dx13){console[_0x288c[25]](_0x288c[20]+_0xc59dx13)})})[_0x288c[22]](function(_0xc59dx13){console[_0x288c[25]](_0x288c[20]+_0xc59dx13)})})})[_0x288c[22]](function(_0xc59dx13){console[_0x288c[21]](_0x288c[20]+_0xc59dx13)})}function ReportCallInReportCallHistory(){ReportCall[_0x288c[36]]({where:{createdAt:{$lte:moment()[_0x288c[35]](_0x288c[34])}},raw:true})[_0x288c[30]](function(_0xc59dx14){_0xc59dx14[_0x288c[33]](function(_0xc59dx15,_0xc59dx16){console[_0x288c[25]](_0x288c[38]+_0xc59dx14[_0x288c[24]]);ReportCallHistory[_0x288c[32]](_0xc59dx15)[_0x288c[30]](function(){console[_0x288c[25]](_0x288c[39]+_0xc59dx15[_0x288c[27]]+_0x288c[28]);ReportCall[_0x288c[31]]({where:{id:_0xc59dx15[_0x288c[27]]},individualHooks:true})[_0x288c[30]](function(_0xc59dx17){console[_0x288c[25]](_0x288c[40]+_0xc59dx15[_0x288c[27]]+_0x288c[29])})[_0x288c[22]](function(_0xc59dx13){console[_0x288c[25]](_0x288c[37]+_0xc59dx13)})})[_0x288c[22]](function(_0xc59dx13){console[_0x288c[25]](_0x288c[37]+_0xc59dx13)})})})[_0x288c[22]](function(_0xc59dx13){console[_0x288c[21]](_0x288c[37]+_0xc59dx13)})}function ReportDialInReportDialHistory(){ReportDial[_0x288c[36]]({where:{createdAt:{$lte:moment()[_0x288c[35]](_0x288c[34])},dialstatus:{$ne:null}},raw:true})[_0x288c[30]](function(_0xc59dx14){console[_0x288c[25]](_0x288c[42]+_0xc59dx14[_0x288c[24]]);_0xc59dx14[_0x288c[33]](function(_0xc59dx15,_0xc59dx16){ReportDialHistory[_0x288c[32]](_0xc59dx15)[_0x288c[30]](function(){console[_0x288c[25]](_0x288c[43]+_0xc59dx15[_0x288c[27]]+_0x288c[28]);ReportDial[_0x288c[31]]({where:{id:_0xc59dx15[_0x288c[27]]},individualHooks:true})[_0x288c[30]](function(_0xc59dx17){console[_0x288c[25]](_0x288c[43]+_0xc59dx15[_0x288c[27]]+_0x288c[29])})[_0x288c[22]](function(_0xc59dx13){console[_0x288c[25]](_0x288c[41]+_0xc59dx13)})})[_0x288c[22]](function(_0xc59dx13){console[_0x288c[25]](_0x288c[41]+_0xc59dx13)})})})[_0x288c[22]](function(_0xc59dx13){console[_0x288c[21]](_0x288c[41]+_0xc59dx13)})}function ReportMemberInReportMemberHistory(){ReportMember[_0x288c[36]]({where:{createdAt:{$lte:moment()[_0x288c[35]](_0x288c[34])},exitdate:{$ne:null}},raw:true})[_0x288c[30]](function(_0xc59dx14){console[_0x288c[25]](_0x288c[45]+_0xc59dx14[_0x288c[24]]);_0xc59dx14[_0x288c[33]](function(_0xc59dx15,_0xc59dx16){ReportMemberHistory[_0x288c[32]](_0xc59dx15)[_0x288c[30]](function(){console[_0x288c[25]](_0x288c[46]+_0xc59dx15[_0x288c[27]]+_0x288c[28]);ReportMember[_0x288c[31]]({where:{id:_0xc59dx15[_0x288c[27]]},individualHooks:true})[_0x288c[30]](function(_0xc59dx17){console[_0x288c[25]](_0x288c[46]+_0xc59dx15[_0x288c[27]]+_0x288c[29])})[_0x288c[22]](function(_0xc59dx13){console[_0x288c[25]](_0x288c[44]+_0xc59dx13)})})[_0x288c[22]](function(_0xc59dx13){console[_0x288c[25]](_0x288c[44]+_0xc59dx13)})})})[_0x288c[22]](function(_0xc59dx13){console[_0x288c[21]](_0x288c[44]+_0xc59dx13)})}function ReportQueueInReportQueueHistory(){ReportQueue[_0x288c[36]]({where:{createdAt:{$lte:moment()[_0x288c[35]](_0x288c[34])},queuecallerleaveAt:{$ne:null}},raw:true})[_0x288c[30]](function(_0xc59dx14){console[_0x288c[25]](_0x288c[48]+_0xc59dx14[_0x288c[24]]);_0xc59dx14[_0x288c[33]](function(_0xc59dx15,_0xc59dx16){ReportQueueHistory[_0x288c[32]](_0xc59dx15)[_0x288c[30]](function(){console[_0x288c[25]](_0x288c[49]+_0xc59dx15[_0x288c[27]]+_0x288c[28]);ReportQueue[_0x288c[31]]({where:{id:_0xc59dx15[_0x288c[27]]},individualHooks:true})[_0x288c[30]](function(_0xc59dx17){console[_0x288c[25]](_0x288c[49]+_0xc59dx15[_0x288c[27]]+_0x288c[29])})[_0x288c[22]](function(_0xc59dx13){console[_0x288c[25]](_0x288c[47]+_0xc59dx13)})})[_0x288c[22]](function(_0xc59dx13){console[_0x288c[25]](_0x288c[47]+_0xc59dx13)})})})[_0x288c[22]](function(_0xc59dx13){console[_0x288c[21]](_0x288c[47]+_0xc59dx13)})}function ReportIntegrationInReportIntegrationHistory(){ReportIntegration[_0x288c[36]]({where:{createdAt:{$lte:moment()[_0x288c[35]](_0x288c[34])}},raw:true})[_0x288c[30]](function(_0xc59dx14){_0xc59dx14[_0x288c[33]](function(_0xc59dx15,_0xc59dx16){console[_0x288c[25]](_0x288c[51]+_0xc59dx14[_0x288c[24]]);ReportIntegrationHistory[_0x288c[32]](_0xc59dx15)[_0x288c[30]](function(){console[_0x288c[25]](_0x288c[39]+_0xc59dx15[_0x288c[27]]+_0x288c[28]);ReportIntegration[_0x288c[31]]({where:{id:_0xc59dx15[_0x288c[27]]},individualHooks:true})[_0x288c[30]](function(_0xc59dx17){console[_0x288c[25]](_0x288c[52]+_0xc59dx15[_0x288c[27]]+_0x288c[29])})[_0x288c[22]](function(_0xc59dx13){console[_0x288c[25]](_0x288c[50]+_0xc59dx13)})})[_0x288c[22]](function(_0xc59dx13){console[_0x288c[25]](_0x288c[50]+_0xc59dx13)})})})[_0x288c[22]](function(_0xc59dx13){console[_0x288c[21]](_0x288c[50]+_0xc59dx13)})}function ReportMailSessionInReportMailSessionHistory(){return sequelize[_0x288c[57]](function(_0xc59dx1f){var _0xc59dx20;return ReportMailSession[_0x288c[36]]({where:{createdAt:{$lte:moment()[_0x288c[35]](_0x288c[34])},leaveAt:{$ne:null}},raw:true})[_0x288c[30]](function(_0xc59dx21){console[_0x288c[25]](_0x288c[54]+_0xc59dx21[_0x288c[24]]);_0xc59dx20=_0xc59dx21;console[_0x288c[25]](_0x288c[55],_0xc59dx20);return ReportMailSessionHistory[_0x288c[56]](_0xc59dx20,{individualHooks:true,transaction:_0xc59dx1f})})[_0x288c[30]](function(){return ReportMailSession[_0x288c[31]]({where:{id:_[_0x288c[53]](_0xc59dx20,_0x288c[27])},individualHooks:true,transaction:_0xc59dx1f})})})[_0x288c[30]](function(_0xc59dx1e){})[_0x288c[22]](function(_0xc59dx13){})}module[_0x288c[58]]=function(_0xc59dx22){var _0xc59dx23= new _0xc59dx22({cronTime:_0x288c[59],onTick:function(){console[_0x288c[25]](_0x288c[60]); new ReportAgentInReportAgentHistory(); new ReportCallInReportCallHistory(); new ReportDialInReportDialHistory(); new ReportMemberInReportMemberHistory(); new ReportQueueInReportQueueHistory(); new ReportIntegrationInReportIntegrationHistory(); new ReportMailSessionInReportMailSessionHistory()}});_0xc59dx23[_0x288c[61]]()}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var moment = require('moment');
+
+var sequelize = require('../models').sequelize;
+
+var ReportAgent = require('../models').ReportAgent;
+var ReportCall = require('../models').ReportCall;
+var ReportDial = require('../models').ReportDial;
+var ReportMember = require('../models').ReportMember;
+var ReportQueue = require('../models').ReportQueue;
+var ReportIntegration = require('../models').ReportIntegration;
+var ReportMailSession = require('../models').ReportMailSession;
+
+var ReportAgentHistory = require('../models').history.ReportAgentHistory;
+var ReportCallHistory = require('../models').history.ReportCallHistory;
+var ReportDialHistory = require('../models').history.ReportDialHistory;
+var ReportMemberHistory = require('../models').history.ReportMemberHistory;
+var ReportQueueHistory = require('../models').history.ReportQueueHistory;
+var ReportIntegrationHistory = require('../models').history.ReportIntegrationHistory;
+var ReportMailSessionHistory = require('../models').history.ReportMailSessionHistory;
+
+function ReportAgentInReportAgentHistory() {
+  ReportAgent
+    .findAll({
+      where: {
+        createdAt: {
+          $lte: moment().format("YYYY-MM-DD HH:mm:ss")
+        },
+        reason: {
+          $ne: null
+        }
+      },
+      raw: true
+    })
+    .then(function(rows) {
+      console.log('[report_agent] found: ' + rows.length);
+      rows.forEach(function(row, key) {
+        ReportAgentHistory
+          .create(row)
+          .then(function() {
+            console.log('[report_agent] ' + row.id + ' row copied');
+            ReportAgent.destroy({
+              where: {
+                id: row.id
+              },
+              individualHooks: true
+            }).then(function(res) {
+              console.log('[report_agent] ' + row.id + ' row deleted');
+            }).catch(function(err) {
+              console.log('[report_agent] error: ' + err)
+            });
+          })
+          .catch(function(err) {
+            console.log('[report_agent] error: ' + err);
+          });
+      });
+    })
+    .catch(function(err) {
+      console.error('[report_agent] error: ' + err);
+    });
+}
+
+function ReportCallInReportCallHistory() {
+  ReportCall
+    .findAll({
+      where: {
+        createdAt: {
+          $lte: moment().format("YYYY-MM-DD HH:mm:ss")
+        }
+      },
+      raw: true
+    })
+    .then(function(rows) {
+      rows.forEach(function(row, key) {
+        console.log('[report_call] found: ' + rows.length);
+        ReportCallHistory
+          .create(row)
+          .then(function() {
+            console.log('[c] ' + row.id + ' row copied');
+            ReportCall.destroy({
+              where: {
+                id: row.id
+              },
+              individualHooks: true
+            }).then(function(res) {
+              console.log('[report_call] ' + row.id + ' row deleted');
+            }).catch(function(err) {
+              console.log('[report_call] error: ' + err)
+            });
+          })
+          .catch(function(err) {
+            console.log('[report_call] error: ' + err);
+          });
+      });
+    })
+    .catch(function(err) {
+      console.error('[report_call] error: ' + err);
+    });
+}
+
+function ReportDialInReportDialHistory() {
+  ReportDial
+    .findAll({
+      where: {
+        createdAt: {
+          $lte: moment().format("YYYY-MM-DD HH:mm:ss")
+        },
+        dialstatus: {
+          $ne: null
+        }
+      },
+      raw: true
+    })
+    .then(function(rows) {
+      console.log('[report_dial] found: ' + rows.length);
+      rows.forEach(function(row, key) {
+        ReportDialHistory
+          .create(row)
+          .then(function() {
+            console.log('[report_dial] ' + row.id + ' row copied');
+            ReportDial.destroy({
+              where: {
+                id: row.id
+              },
+              individualHooks: true
+            }).then(function(res) {
+              console.log('[report_dial] ' + row.id + ' row deleted');
+            }).catch(function(err) {
+              console.log('[report_dial] error: ' + err)
+            });
+          })
+          .catch(function(err) {
+            console.log('[report_dial] error: ' + err);
+          });
+      });
+    })
+    .catch(function(err) {
+      console.error('[report_dial] error: ' + err);
+    });
+}
+
+function ReportMemberInReportMemberHistory() {
+  ReportMember
+    .findAll({
+      where: {
+        createdAt: {
+          $lte: moment().format("YYYY-MM-DD HH:mm:ss")
+        },
+        exitdate: {
+          $ne: null
+        }
+      },
+      raw: true
+    })
+    .then(function(rows) {
+      console.log('[report_member] found: ' + rows.length);
+      rows.forEach(function(row, key) {
+        ReportMemberHistory
+          .create(row)
+          .then(function() {
+            console.log('[report_member] ' + row.id + ' row copied');
+            ReportMember.destroy({
+              where: {
+                id: row.id
+              },
+              individualHooks: true
+            }).then(function(res) {
+              console.log('[report_member] ' + row.id + ' row deleted');
+            }).catch(function(err) {
+              console.log('[report_member] error: ' + err)
+            });
+          })
+          .catch(function(err) {
+            console.log('[report_member] error: ' + err);
+          });
+      });
+    })
+    .catch(function(err) {
+      console.error('[report_member] error: ' + err);
+    });
+}
+
+function ReportQueueInReportQueueHistory() {
+  ReportQueue
+    .findAll({
+      where: {
+        createdAt: {
+          $lte: moment().format("YYYY-MM-DD HH:mm:ss")
+        },
+        queuecallerleaveAt: {
+          $ne: null
+        }
+      },
+      raw: true
+    })
+    .then(function(rows) {
+      console.log('[report_queue] found: ' + rows.length);
+      rows.forEach(function(row, key) {
+        ReportQueueHistory
+          .create(row)
+          .then(function() {
+            console.log('[report_queue] ' + row.id + ' row copied');
+            ReportQueue.destroy({
+              where: {
+                id: row.id
+              },
+              individualHooks: true
+            }).then(function(res) {
+              console.log('[report_queue] ' + row.id + ' row deleted');
+            }).catch(function(err) {
+              console.log('[report_queue] error: ' + err)
+            });
+          })
+          .catch(function(err) {
+            console.log('[report_queue] error: ' + err);
+          });
+      });
+    })
+    .catch(function(err) {
+      console.error('[report_queue] error: ' + err);
+    });
+}
+
+function ReportIntegrationInReportIntegrationHistory() {
+  ReportIntegration
+    .findAll({
+      where: {
+        createdAt: {
+          $lte: moment().format("YYYY-MM-DD HH:mm:ss")
+        }
+      },
+      raw: true
+    })
+    .then(function(rows) {
+      rows.forEach(function(row, key) {
+        console.log('[report_integration] found: ' + rows.length);
+        ReportIntegrationHistory
+          .create(row)
+          .then(function() {
+            console.log('[c] ' + row.id + ' row copied');
+            ReportIntegration.destroy({
+              where: {
+                id: row.id
+              },
+              individualHooks: true
+            }).then(function(res) {
+              console.log('[report_integration] ' + row.id + ' row deleted');
+            }).catch(function(err) {
+              console.log('[report_integration] error: ' + err)
+            });
+          })
+          .catch(function(err) {
+            console.log('[report_integration] error: ' + err);
+          });
+      });
+    })
+    .catch(function(err) {
+      console.error('[report_integration] error: ' + err);
+    });
+}
+
+function ReportMailSessionInReportMailSessionHistory() {
+  return sequelize.transaction(function(t) {
+    var _reportMailSessions;
+    return ReportMailSession
+      .findAll({
+        where: {
+          createdAt: {
+            $lte: moment().format("YYYY-MM-DD HH:mm:ss")
+          },
+          leaveAt: {
+            $ne: null
+          }
+        },
+        raw: true
+      })
+      .then(function(reportMailSessions) {
+        console.log('[report_mail_session] found: ' + reportMailSessions.length);
+        _reportMailSessions = reportMailSessions;
+        console.log('_reportMailSessions', _reportMailSessions);
+        return ReportMailSessionHistory
+          .bulkCreate(_reportMailSessions, {
+            individualHooks: true,
+            transaction: t
+          });
+      })
+      .then(function() {
+        return ReportMailSession
+          .destroy({
+            where: {
+              id: _.map(_reportMailSessions, 'id')
+            },
+            individualHooks: true,
+            transaction: t
+          });
+      })
+
+  }).then(function(result) {
+    // Transaction has been committed
+    // result is whatever the result of the promise chain returned to the transaction callback
+  }).catch(function(err) {
+    // Transaction has been rolled back
+    // err is whatever rejected the promise chain returned to the transaction callback
+  });
+}
+
+module.exports = function(CronJob) {
+
+  // Every 1 Minute
+  var job = new CronJob({
+    cronTime: '00 59 23 * * *',
+    // cronTime: '* * * * *',
+    onTick: function() {
+      console.log('cronTime onTick');
+      new ReportAgentInReportAgentHistory();
+      new ReportCallInReportCallHistory();
+      new ReportDialInReportDialHistory();
+      new ReportMemberInReportMemberHistory();
+      new ReportQueueInReportQueueHistory();
+      new ReportIntegrationInReportIntegrationHistory();
+      new ReportMailSessionInReportMailSessionHistory();
+    }
+  });
+
+  job.start();
+}
index fcca415..e2c946d 100644 (file)
@@ -1 +1,219 @@
-var _0x163c=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x70\x61\x74\x68","\x2E\x2E\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x6D\x61\x69\x6C\x2D\x6C\x69\x73\x74\x65\x6E\x65\x72\x32","\x4D\x61\x69\x6C\x53\x65\x72\x76\x65\x72\x49\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x4D\x61\x69\x6C\x4D\x65\x73\x73\x61\x67\x65","\x4D\x61\x69\x6C\x41\x74\x74\x61\x63\x68\x6D\x65\x6E\x74","\x4D\x61\x69\x6C\x52\x6F\x6F\x6D","\x43\x6F\x6E\x74\x61\x63\x74","\x43\x6F\x6E\x74\x61\x63\x74\x45\x6D\x61\x69\x6C","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x73\x74\x61\x74\x65","\x63\x68\x61\x6E\x67\x65\x64","\x73\x6F\x75\x72\x63\x65","\x75\x73\x65\x72\x6E\x61\x6D\x65","\x75\x73\x65\x72","\x5F\x63\x6F\x6E\x66\x69\x67","\x69\x6D\x61\x70","\x4D\x41\x49\x4C\x20\x2D\x20\x41\x63\x63\x6F\x75\x6E\x74\x20","\x20\x49\x4D\x41\x50\x20\x55\x50\x44\x41\x54\x45\x44","\x6C\x6F\x67","\x73\x74\x6F\x70","\x20\x49\x4D\x41\x50\x20\x44\x45\x53\x54\x52\x4F\x59","\x70\x61\x73\x73\x77\x6F\x72\x64","\x68\x6F\x73\x74","\x70\x6F\x72\x74","\x73\x73\x6C","\x6D\x61\x69\x6C\x62\x6F\x78","\x66\x69\x6C\x74\x65\x72","\x72\x6F\x6F\x74","\x73\x65\x72\x76\x65\x72","\x66\x69\x6C\x65\x73","\x61\x74\x74\x61\x63\x68\x6D\x65\x6E\x74\x73","\x2F","\x6A\x6F\x69\x6E","\x73\x74\x61\x72\x74","\x73\x65\x72\x76\x65\x72\x3A\x63\x6F\x6E\x6E\x65\x63\x74\x65\x64","\x20\x49\x4D\x41\x50\x20\x43\x4F\x4E\x4E\x45\x43\x54\x45\x44","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x43\x4F\x4E\x4E\x45\x43\x54\x45\x44","\x75\x70\x64\x61\x74\x65","\x74\x68\x65\x6E","\x69\x64","\x66\x69\x6E\x64\x42\x79\x49\x64","\x6F\x6E","\x73\x65\x72\x76\x65\x72\x3A\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x65\x64","\x4D\x61\x69\x6C\x41\x63\x63\x6F\x75\x6E\x74\x49\x64","\x20\x49\x4D\x41\x50\x20\x44\x49\x53\x43\x4F\x4E\x4E\x45\x43\x54\x45\x44","\x44\x49\x53\x43\x4F\x4E\x4E\x45\x43\x54\x45\x44","\x20\x49\x4D\x41\x50\x20\x45\x52\x52\x4F\x52","\x45\x52\x52\x4F\x52","\x6D\x61\x69\x6C","\x69\x6E\x52\x65\x70\x6C\x79\x54\x6F","\x6D\x73\x67","\x6D\x65\x73\x73\x61\x67\x65\x49\x64","\x52\x45\x43\x45\x49\x56\x45\x44","\x73\x75\x62\x6A\x65\x63\x74","\x66\x72\x6F\x6D","\x61\x64\x64\x72\x65\x73\x73","\x6D\x61\x70","\x74\x6F","\x63\x63","\x62\x63\x63","\x68\x74\x6D\x6C","\x74\x65\x78\x74","\x63\x72\x65\x61\x74\x65","\x67\x65\x74\x4D\x61\x69\x6C\x52\x6F\x6F\x6D","\x66\x69\x6E\x64\x4F\x6E\x65","\x3B","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E","\x61\x74\x74\x61\x63\x68\x6D\x65\x6E\x74","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0x163c[0];var _=require(_0x163c[1]);var path=require(_0x163c[2]);var config=require(_0x163c[3]);var ImapListener=require(_0x163c[4]);var MailServerIn=require(_0x163c[6])[_0x163c[5]];var MailMessage=require(_0x163c[6])[_0x163c[7]];var MailAttachment=require(_0x163c[6])[_0x163c[8]];var MailRoom=require(_0x163c[6])[_0x163c[9]];var Contact=require(_0x163c[6])[_0x163c[10]];var ContactEmail=require(_0x163c[6])[_0x163c[11]];var sequelize=require(_0x163c[6])[_0x163c[12]];function Imap(_0x543fxd){var _0x543fxe;function _0x543fxf(_0x543fxd){if(!_0x543fxd[_0x163c[14]](_0x163c[13])&&!_0x543fxd[_0x163c[14]](_0x163c[15])&&_0x543fxd[_0x163c[16]]===_0x543fxe[_0x163c[19]][_0x163c[18]][_0x163c[17]]){console[_0x163c[22]](_0x163c[20]+_0x543fxd[_0x163c[16]]+_0x163c[21]);_0x543fxe[_0x163c[23]]();_0x543fx11(_0x543fxd)}}function _0x543fx10(_0x543fxd){if(_0x543fxd[_0x163c[16]]===_0x543fxe[_0x163c[19]][_0x163c[18]][_0x163c[17]]){console[_0x163c[22]](_0x163c[20]+_0x543fxd[_0x163c[16]]+_0x163c[24]);_0x543fxe[_0x163c[23]]();_0x543fxe=null}}function _0x543fx11(_0x543fxd){if(_0x543fxe){_0x543fxe[_0x163c[23]](_0x543fxd);_0x543fxe=null};_0x543fxe= new ImapListener({username:_0x543fxd[_0x163c[16]],password:_0x543fxd[_0x163c[25]],host:_0x543fxd[_0x163c[26]],port:_0x543fxd[_0x163c[27]],tls:_0x543fxd[_0x163c[28]],tlsOptions:{rejectUnauthorized:false},connTimeout:30000,mailbox:_0x543fxd[_0x163c[29]],searchFilter:[_0x543fxd[_0x163c[30]]],markSeen:true,fetchUnreadOnStart:true,mailParserOptions:{streamAttachments:false},attachments:true,attachmentOptions:{directory:path[_0x163c[36]](config[_0x163c[31]],_0x163c[32],_0x163c[33],_0x163c[34],_0x163c[35])}});_0x543fxe[_0x163c[37]]();_0x543fxe[_0x163c[47]](_0x163c[38],function(){console[_0x163c[22]](_0x163c[20]+_0x543fxd[_0x163c[16]]+_0x163c[39]);return MailServerIn[_0x163c[46]](_0x543fxd[_0x163c[45]])[_0x163c[44]](function(_0x543fx13){return _0x543fx13[_0x163c[43]]({state:_0x163c[42]})})[_0x163c[41]](function(_0x543fx12){console[_0x163c[40]](_0x543fx12)})});_0x543fxe[_0x163c[47]](_0x163c[48],function(){console[_0x163c[22]](_0x163c[20]+_0x543fxd[_0x163c[49]]+_0x163c[50]);return MailServerIn[_0x163c[46]](_0x543fxd[_0x163c[45]])[_0x163c[44]](function(_0x543fx13){if(_0x543fx13){return _0x543fx13[_0x163c[43]]({state:_0x163c[51]})}})[_0x163c[41]](function(_0x543fx12){console[_0x163c[40]](_0x543fx12)})});_0x543fxe[_0x163c[47]](_0x163c[40],function(_0x543fx12){console[_0x163c[22]](_0x163c[20]+_0x543fxd[_0x163c[49]]+_0x163c[52],_0x543fx12);return MailServerIn[_0x163c[46]](_0x543fxd[_0x163c[45]])[_0x163c[44]](function(_0x543fx13){if(_0x543fx13){return _0x543fx13[_0x163c[43]]({state:_0x163c[53],source:_0x543fx12[_0x163c[15]]})}})[_0x163c[41]](function(_0x543fx12){console[_0x163c[40]](_0x543fx12)})});_0x543fxe[_0x163c[47]](_0x163c[54],function(_0x543fx14,_0x543fx15,_0x543fx16){var _0x543fx17;var _0x543fx18;var _0x543fx19,_0x543fx1a,_0x543fx1b,_0x543fx1c;return sequelize[_0x163c[72]](function(_0x543fx1d){if(_0x543fx14[_0x163c[55]]){return MailMessage[_0x163c[70]]({where:{messageId:_0x543fx14[_0x163c[55]][0]},include:[{all:true}]})[_0x163c[44]](function(_0x543fx1f){return _0x543fx1f[_0x163c[69]]()})[_0x163c[44]](function(_0x543fx1e){_0x543fx17=_0x543fx1e;console[_0x163c[22]](_0x163c[56],_0x543fx14);return MailMessage[_0x163c[68]]({messageId:_0x543fx14[_0x163c[57]],status:_0x163c[58],subject:_0x543fx14[_0x163c[59]],from:_[_0x163c[62]](_0x543fx14[_0x163c[60]],_0x163c[61]),to:_0x543fx14[_0x163c[63]]?_[_0x163c[62]](_0x543fx14[_0x163c[63]],_0x163c[61]):[],cc:_0x543fx14[_0x163c[64]]?_[_0x163c[62]](_0x543fx14[_0x163c[64]],_0x163c[61]):[],bcc:_0x543fx14[_0x163c[65]]?_[_0x163c[62]](_0x543fx14[_0x163c[65]],_0x163c[61]):[],html:_0x543fx14[_0x163c[66]]||null,text:_0x543fx14[_0x163c[67]]||null,MailAttachments:_0x543fx14[_0x163c[34]]||[],MailRoomId:_0x543fx1e[_0x163c[45]]},{include:[{model:MailAttachment}],transaction:_0x543fx1d})})}else {return MailRoom[_0x163c[68]]({roomId:_0x543fx14[_0x163c[57]],subject:_0x543fx14[_0x163c[59]],from:_[_0x163c[62]](_0x543fx14[_0x163c[60]],_0x163c[61])[_0x163c[36]](_0x163c[71]),MailMessages:[{messageId:_0x543fx14[_0x163c[57]],subject:_0x543fx14[_0x163c[59]],from:_[_0x163c[62]](_0x543fx14[_0x163c[60]],_0x163c[61]),to:_0x543fx14[_0x163c[63]]?_[_0x163c[62]](_0x543fx14[_0x163c[63]],_0x163c[61]):[],cc:_0x543fx14[_0x163c[64]]?_[_0x163c[62]](_0x543fx14[_0x163c[64]],_0x163c[61]):[],bcc:_0x543fx14[_0x163c[65]]?_[_0x163c[62]](_0x543fx14[_0x163c[65]],_0x163c[61]):[],status:_0x163c[58],html:_0x543fx14[_0x163c[66]]||null,text:_0x543fx14[_0x163c[67]]||null,MailAttachments:_0x543fx14[_0x163c[34]]||[]}],MailAccountId:_0x543fxd[_0x163c[49]]},{transaction:_0x543fx1d,include:[{model:MailMessage,include:[{model:MailAttachment}]}]})}})[_0x163c[41]](function(_0x543fx12){console[_0x163c[40]](_0x543fx12)})});_0x543fxe[_0x163c[47]](_0x163c[73],function(_0x543fx20){console[_0x163c[22]](_0x543fx20[_0x163c[2]])})}_0x543fx11(_0x543fxd);MailServerIn[_0x163c[74]](function(_0x543fxd){_0x543fx11(_0x543fxd)});MailServerIn[_0x163c[75]](function(_0x543fxd){_0x543fxf(_0x543fxd)});MailServerIn[_0x163c[76]](function(_0x543fxd){_0x543fx10(_0x543fxd)});return {}}module[_0x163c[77]]=Imap
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var path = require('path');
+
+var config = require('../environment');
+
+var ImapListener = require("mail-listener2");
+var MailServerIn = require('../../models').MailServerIn;
+var MailMessage = require('../../models').MailMessage;
+var MailAttachment = require('../../models').MailAttachment;
+var MailRoom = require('../../models').MailRoom;
+var Contact = require('../../models').Contact;
+var ContactEmail = require('../../models').ContactEmail;
+var sequelize = require('../../models').sequelize;
+
+// Public
+
+function Imap(doc) {
+  var imap;
+
+  function onUpdate(doc) {
+    if (!doc.changed('state') && !doc.changed('source') && doc.username === imap.imap._config.user) {
+      console.log("MAIL - Account " + doc.username + " IMAP UPDATED");
+      imap.stop();
+      onSave(doc);
+    }
+  }
+
+  function onRemove(doc) {
+    if (doc.username === imap.imap._config.user) {
+      console.log("MAIL - Account " + doc.username + " IMAP DESTROY");
+      imap.stop();
+      imap = null;
+    }
+  }
+
+  function onSave(doc) {
+    if (imap) {
+      imap.stop(doc);
+      imap = null;
+    }
+
+    imap = new ImapListener({
+      username: doc.username,
+      password: doc.password,
+      host: doc.host,
+      port: doc.port,
+      tls: doc.ssl,
+      tlsOptions: {
+        rejectUnauthorized: false
+      },
+      connTimeout: 30000,
+      mailbox: doc.mailbox, // mailbox to monitor
+      searchFilter: [doc.filter], // the search filter being used after an IDLE notification has been retrieved
+      markSeen: true, // all fetched email willbe marked as seen and not fetched next time
+      fetchUnreadOnStart: true, // use it only if you want to get all unread email on lib start. Default is `false`,,
+      mailParserOptions: {
+        streamAttachments: false
+      }, // options to be passed to mailParser lib.
+      attachments: true, // download attachments as they are encountered to the project directory
+      attachmentOptions: {
+        directory: path.join(config.root, 'server', 'files', 'attachments', '/')
+      } // specify a download directory for attachments
+    });
+
+    imap.start();
+
+    imap.on("server:connected", function() {
+      console.log("MAIL - Account " + doc.username + " IMAP CONNECTED");
+      // SETUP CONNECTED STATUS
+      return MailServerIn
+        .findById(doc.id)
+        .then(function(msi) {
+          return msi
+            .update({
+              state: 'CONNECTED'
+            });
+        })
+        .catch(function(err) {
+          console.error(err);
+        });
+    });
+
+    imap.on("server:disconnected", function() {
+      console.log("MAIL - Account " + doc.MailAccountId + " IMAP DISCONNECTED");
+      return MailServerIn
+        .findById(doc.id)
+        .then(function(msi) {
+          if (msi) {
+            return msi
+              .update({
+                state: 'DISCONNECTED'
+              });
+          }
+        })
+        .catch(function(err) {
+          console.error(err);
+        });
+    });
+
+    imap.on("error", function(err) {
+      console.log("MAIL - Account " + doc.MailAccountId + " IMAP ERROR", err);
+      return MailServerIn
+        .findById(doc.id)
+        .then(function(msi) {
+          if (msi) {
+            return msi
+              .update({
+                state: 'ERROR',
+                source: err.source
+              });
+          }
+        })
+        .catch(function(err) {
+          console.error(err);
+        });
+    });
+
+    imap.on("mail", function(msg, seqno, attributes) {
+      var _mRoom;
+      var _mMessage;
+      var _mFrom, _mTo, _mCc, _mBcc;
+
+      return sequelize.transaction(function(t) {
+        if (msg.inReplyTo) {
+          return MailMessage
+            .findOne({
+              where: {
+                messageId: msg.inReplyTo[0]
+              },
+              include: [{
+                all: true
+              }]
+            })
+            .then(function(mailMessageParent) {
+              return mailMessageParent
+                .getMailRoom();
+            })
+            .then(function(mailRoom) {
+              _mRoom = mailRoom;
+              console.log('msg', msg);
+
+              return MailMessage
+                .create({
+                  messageId: msg.messageId,
+                  status: 'RECEIVED',
+                  subject: msg.subject,
+                  from: _.map(msg.from, 'address'),
+                  to: msg.to ? _.map(msg.to, 'address') : [],
+                  cc: msg.cc ? _.map(msg.cc, 'address') : [],
+                  bcc: msg.bcc ? _.map(msg.bcc, 'address') : [],
+                  html: msg.html || null,
+                  text: msg.text || null,
+                  MailAttachments: msg.attachments || [],
+                  MailRoomId: mailRoom.id,
+                }, {
+                  include: [{
+                    model: MailAttachment
+                  }],
+                  transaction: t
+                });
+            });
+
+        } else {
+          return MailRoom
+            .create({
+              roomId: msg.messageId,
+              subject: msg.subject,
+              from: _.map(msg.from, 'address').join(';'),
+              MailMessages: [{
+                messageId: msg.messageId,
+                subject: msg.subject,
+                from: _.map(msg.from, 'address'),
+                to: msg.to ? _.map(msg.to, 'address') : [],
+                cc: msg.cc ? _.map(msg.cc, 'address') : [],
+                bcc: msg.bcc ? _.map(msg.bcc, 'address') : [],
+                status: 'RECEIVED',
+                html: msg.html || null,
+                text: msg.text || null,
+                MailAttachments: msg.attachments || []
+              }],
+              MailAccountId: doc.MailAccountId
+            }, {
+              transaction: t,
+              include: [{
+                model: MailMessage,
+                include: [{
+                  model: MailAttachment
+                }]
+              }]
+            });
+        }
+      }).catch(function(err) {
+        console.error(err);
+      });
+    });
+
+    imap.on("attachment", function(attachment) {
+      console.log(attachment.path);
+    });
+  }
+
+  onSave(doc);
+
+  MailServerIn.afterCreate(function(doc) {
+    onSave(doc);
+  });
+  MailServerIn.afterUpdate(function(doc) {
+    onUpdate(doc);
+  });
+  MailServerIn.afterDestroy(function(doc) {
+    onRemove(doc);
+  });
+
+  return {};
+}
+
+module.exports = Imap;
index f22dd42..89d4f28 100644 (file)
@@ -1 +1,22 @@
-var _0xde9f=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x69\x6D\x61\x70","\x4D\x61\x69\x6C\x53\x65\x72\x76\x65\x72\x49\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x65\x78\x70\x6F\x72\x74\x73","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x66\x6F\x72\x45\x61\x63\x68","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6C\x6C"];_0xde9f[0];var Imap=require(_0xde9f[1]);var MailServerIn=require(_0xde9f[3])[_0xde9f[2]];module[_0xde9f[4]]=function(){MailServerIn[_0xde9f[5]](function(_0xe1bfx3){ new Imap(_0xe1bfx3)});return MailServerIn[_0xde9f[10]]()[_0xde9f[9]](function(_0xe1bfx5){_0xe1bfx5[_0xde9f[8]](function(_0xe1bfx6){ new Imap(_0xe1bfx6)})})[_0xde9f[7]](function(_0xe1bfx4){console[_0xde9f[6]](_0xe1bfx4)})}
\ No newline at end of file
+'use strict';
+
+var Imap = require('./imap');
+var MailServerIn = require('../../models').MailServerIn;
+
+module.exports = function() {
+  MailServerIn.afterCreate(function(doc) {
+    new Imap(doc);
+  });
+
+  // Get all Mail Accounts
+  return MailServerIn
+    .findAll()
+    .then(function(servers) {
+      servers.forEach(function(server) {
+        new Imap(server);
+      });
+    })
+    .catch(function(err) {
+      console.error(err);
+    });
+}
index c321b7b..8b87bc5 100644 (file)
@@ -1 +1,24 @@
-var _0x370e=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x70\x61\x74\x68","\x66\x73","\x49\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x65\x78\x70\x6F\x72\x74\x73","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x70\x61\x72\x73\x65","\x64\x69\x72","\x6E\x61\x6D\x65","\x6D\x61\x69\x6E","\x6A\x6F\x69\x6E","\x65\x78\x69\x73\x74\x73\x53\x79\x6E\x63","\x66\x6F\x72\x45\x61\x63\x68","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6C\x6C"];_0x370e[0];var path=require(_0x370e[1]);var fs=require(_0x370e[2]);var Integration=require(_0x370e[4])[_0x370e[3]];module[_0x370e[5]]=function(_0x855cx4,_0x855cx5){Integration[_0x370e[16]]()[_0x370e[15]](function(_0x855cx7){_0x855cx7[_0x370e[14]](function(_0x855cx8){var _0x855cx9=path[_0x370e[8]](_0x855cx8[_0x370e[1]]);var _0x855cxa=path[_0x370e[12]](_0x855cx9[_0x370e[9]],_0x855cx9[_0x370e[10]],_0x855cx8[_0x370e[11]]);if(fs[_0x370e[13]](_0x855cxa)){require(_0x855cxa)(_0x855cx4,_0x855cx5)}})})[_0x370e[7]](function(_0x855cx6){console[_0x370e[6]](_0x855cx6)})}
\ No newline at end of file
+'use strict';
+
+var path = require('path');
+var fs = require('fs');
+
+var Integration = require('../models').Integration;
+
+module.exports = function(io, ami) {
+
+  Integration
+    .findAll()
+    .then(function(integrations) {
+      integrations.forEach(function(integration) {
+        var info = path.parse(integration.path);
+        var file = path.join(info.dir, info.name, integration.main);
+        if (fs.existsSync(file)) {
+          require(file)(io, ami);
+        }
+      });
+    })
+    .catch(function(err) {
+      console.error(err);
+    });
+};
index 2fafeb2..46f19fb 100644 (file)
@@ -1 +1,120 @@
-var _0x3c33=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x49\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x56\x61\x72\x69\x61\x62\x6C\x65","\x2E\x2F\x7A\x65\x6E\x64\x65\x73\x6B","\x54\x72\x69\x67\x67\x65\x72\x20\x49\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x20\x49\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x2E\x2E","\x6C\x6F\x67","\x76\x61\x72\x73\x65\x74","\x75\x6E\x69\x71\x75\x65\x69\x64","\x68\x61\x73\x4F\x77\x6E\x50\x72\x6F\x70\x65\x72\x74\x79","\x76\x61\x72\x69\x61\x62\x6C\x65","\x76\x61\x6C\x75\x65","\x6B\x65\x79\x73","\x68\x65\x61\x64","\x66\x69\x6E\x64\x49\x6E\x64\x65\x78","\x70\x75\x73\x68","\x6F\x6E","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6C\x6C","\x6D\x61\x6E\x61\x67\x65\x45\x76\x65\x6E\x74","\x49\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x3A\x20\x6D\x61\x6E\x61\x67\x65\x45\x76\x65\x6E\x74","\x64\x61\x74\x61\x31","\x64\x61\x74\x61\x32","\x64\x61\x74\x61\x33","\x72\x65\x73\x75\x6C\x74","\x68\x61\x6E\x64\x6C\x65\x45\x76\x65\x6E\x74","\x7A\x65\x6E\x64\x65\x73\x6B","\x49\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x20\x6E\x6F\x74\x20\x72\x65\x63\x6F\x67\x6E\x69\x7A\x65\x64\x3A\x20","\x73\x74\x61\x74\x65","\x6D\x61\x70","\x69\x6E\x64\x65\x78\x4F\x66","\x61\x63\x74\x69\x76\x65","\x69\x64","\x72\x65\x6D\x6F\x76\x65","\x41\x66\x74\x65\x72\x20\x75\x70\x64\x61\x74\x65\x2C\x20\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x73\x20\x61\x72\x65\x20","\x6C\x65\x6E\x67\x74\x68","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x41\x66\x74\x65\x72\x20\x63\x72\x65\x61\x74\x65\x2C\x20\x56\x61\x72\x69\x61\x62\x6C\x65\x73\x20\x61\x72\x65\x20","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x41\x66\x74\x65\x72\x20\x75\x70\x64\x61\x74\x65\x2C\x20\x56\x61\x72\x69\x61\x62\x6C\x65\x73\x20\x61\x72\x65\x20","\x41\x66\x74\x65\x72\x20\x64\x65\x73\x74\x72\x6F\x79\x2C\x20\x56\x61\x72\x69\x61\x62\x6C\x65\x73\x20\x61\x72\x65\x20","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x66\x69\x6E\x64","\x6D\x65\x72\x67\x65","\x75\x6E\x73\x68\x69\x66\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x3c33[0];var _=require(_0x3c33[1]);var IntegrationModel=require(_0x3c33[3])[_0x3c33[2]];var Variable=require(_0x3c33[3])[_0x3c33[4]];var Zendesk=require(_0x3c33[5]);function Integration(_0xffc1x6){console[_0x3c33[7]](_0x3c33[6]);var _0xffc1x7= new Zendesk();var _0xffc1x8=[];var _0xffc1x9=[];var _0xffc1xa={};_0xffc1x6[_0x3c33[17]](_0x3c33[8],function(_0xffc1xb){if(!_0xffc1xa[_0x3c33[10]](_0xffc1xb[_0x3c33[9]])){_0xffc1xa[_0xffc1xb[_0x3c33[9]]]=[]};if(_0xffc1xb[_0x3c33[10]](_0x3c33[11])&&_0xffc1xb[_0x3c33[10]](_0x3c33[12])){var _0xffc1xc=_[_0x3c33[15]](_0xffc1x9,{"\x6E\x61\x6D\x65":_[_0x3c33[14]](_[_0x3c33[13]](_0xffc1xb[_0x3c33[11]]))});if(_0xffc1xc>=0){var _0xffc1xd={name:_[_0x3c33[14]](_[_0x3c33[13]](_0xffc1xb[_0x3c33[11]])),value:_0xffc1xb[_0x3c33[12]]};_0xffc1xa[_0xffc1xb[_0x3c33[9]]][_0x3c33[16]](_0xffc1xd)}}});Variable[_0x3c33[19]]()[_0x3c33[18]](function(_0xffc1xe){_0xffc1x9=_0xffc1xe;synchVariables(_0xffc1x9)});IntegrationModel[_0x3c33[19]]({where:{active:1}})[_0x3c33[18]](function(_0xffc1xf){_0xffc1x8=_0xffc1xf;synchIntegrations(_0xffc1x8)});this[_0x3c33[20]]=function(_0xffc1x10,_0xffc1x11,_0xffc1x12){console[_0x3c33[7]](_0x3c33[21]);if(integrationIsActive(_0xffc1x10[_0x3c33[22]],_0xffc1x8)){switch(_0xffc1x10[_0x3c33[22]]){case _0x3c33[27]:_0xffc1x7[_0x3c33[26]](_0xffc1x10[_0x3c33[23]],_0xffc1x10[_0x3c33[24]],_0xffc1x12,_0xffc1x11,_[_0x3c33[25]](_0xffc1xa,_0xffc1x11[_0x3c33[9]]));break;default:console[_0x3c33[7]](_0x3c33[28],_0xffc1x10[_0x3c33[22]])}}}}function integrationIsActive(_0xffc1x14,_0xffc1x15){var _0xffc1x16=_[_0x3c33[30]](_0xffc1x15,_0x3c33[29]);if(_[_0x3c33[31]](_0xffc1x16,_0xffc1x14)>=0){return true};return false}function synchIntegrations(_0xffc1x15){IntegrationModel[_0x3c33[37]](function(_0xffc1x11){if(_0xffc1x11[_0x3c33[32]]){updateCollection(_0xffc1x15,_0xffc1x11)}else {_[_0x3c33[34]](_0xffc1x15,{id:_0xffc1x11[_0x3c33[33]]})};console[_0x3c33[7]](_0x3c33[35],_0xffc1x15[_0x3c33[36]])})}function synchVariables(_0xffc1x15){Variable[_0x3c33[39]](function(_0xffc1x11){updateCollection(_0xffc1x15,_0xffc1x11);console[_0x3c33[7]](_0x3c33[38],_0xffc1x15[_0x3c33[36]])});Variable[_0x3c33[37]](function(_0xffc1x11){updateCollection(_0xffc1x15,_0xffc1x11);console[_0x3c33[7]](_0x3c33[40],_0xffc1x15[_0x3c33[36]])});Variable[_0x3c33[42]](function(_0xffc1x11){_[_0x3c33[34]](_0xffc1x15,{id:_0xffc1x11[_0x3c33[33]]});console[_0x3c33[7]](_0x3c33[41],_0xffc1x15[_0x3c33[36]])})}function updateCollection(_0xffc1x1a,_0xffc1x11){var _0xffc1x1b=_[_0x3c33[43]](_0xffc1x1a,{id:_0xffc1x11[_0x3c33[33]]});var _0xffc1xc=_0xffc1x1a[_0x3c33[31]](_0xffc1x1b);if(_0xffc1x1b){_[_0x3c33[44]](_0xffc1x1a[_0xffc1xc],_0xffc1x11)}else {_0xffc1x1a[_0x3c33[45]](_0xffc1x11)}}module[_0x3c33[46]]=Integration
\ No newline at end of file
+'use strict';
+
+// Library
+var _ = require('lodash');
+// Models
+var IntegrationModel = require('../../models').Integration;
+var Variable = require('../../models').Variable;
+// Integration service
+var Zendesk = require('./zendesk');
+
+function Integration(ami) {
+  console.log('Trigger Integration Initialization...');
+
+  var zendesk = new Zendesk();
+
+  var activeIntegrations = [];
+  var activeVariables = [];
+  var channelVariables = {};
+
+  ami.on('varset', function(evt) {
+    if (!channelVariables.hasOwnProperty(evt.uniqueid)) {
+      channelVariables[evt.uniqueid] = [];
+    }
+    if (evt.hasOwnProperty('variable') && evt.hasOwnProperty('value')) {
+      var index = _.findIndex(activeVariables, {
+        'name': _.head(_.keys(evt.variable))
+      });
+      if (index >= 0) {
+        var variable = {
+          name: _.head(_.keys(evt.variable)),
+          value: evt.value
+        };
+        channelVariables[evt.uniqueid].push(variable);
+      }
+    }
+  });
+
+  Variable
+    .findAll()
+    .then(function(variables) {
+      activeVariables = variables;
+      synchVariables(activeVariables);
+    })
+
+  IntegrationModel
+    .findAll({
+      where: {
+        active: 1
+      }
+    })
+    .then(function(integrations) {
+      activeIntegrations = integrations;
+      synchIntegrations(activeIntegrations);
+    });
+
+  this.manageEvent = function(rule, doc, channel) {
+    console.log('Integration: manageEvent');
+    if (integrationIsActive(rule.data1, activeIntegrations)) {
+      switch (rule.data1) {
+        case 'zendesk':
+          zendesk.handleEvent(rule.data2, rule.data3, channel, doc, _.result(channelVariables, doc.uniqueid));
+          break;
+        default:
+          console.log('Integration not recognized: ', rule.data1);
+      }
+    }
+  }
+}
+
+function integrationIsActive(integration, active) {
+  var integratioNames = _.map(active, 'state');
+  if (_.indexOf(integratioNames, integration) >= 0) {
+    return true;
+  }
+  return false;
+}
+
+function synchIntegrations(active) {
+  IntegrationModel.afterUpdate(function(doc) {
+    if (doc.active) {
+      updateCollection(active, doc);
+    } else {
+      _.remove(active, {
+        id: doc.id
+      });
+    }
+    console.log('After update, integrations are ', active.length);
+  });
+}
+
+function synchVariables(active) {
+  Variable.afterCreate(function(doc) {
+    updateCollection(active, doc);
+    console.log('After create, Variables are ', active.length);
+  });
+  Variable.afterUpdate(function(doc) {
+    updateCollection(active, doc);
+    console.log('After update, Variables are ', active.length);
+  });
+  Variable.afterDestroy(function(doc) {
+    _.remove(active, {
+      id: doc.id
+    });
+    console.log('After destroy, Variables are ', active.length);
+  });
+}
+
+function updateCollection(collection, doc) {
+  var oldItem = _.find(collection, {
+    id: doc.id
+  });
+  var index = collection.indexOf(oldItem);
+  if (oldItem) {
+    _.merge(collection[index], doc);
+  } else {
+    collection.unshift(doc);
+  }
+}
+
+module.exports = Integration;
index ccbbc41..5abebe0 100644 (file)
@@ -1 +1,530 @@
-var _0xd9ba=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x72\x65\x71\x75\x65\x73\x74\x2D\x70\x72\x6F\x6D\x69\x73\x65","\x5A\x65\x6E\x64\x65\x73\x6B\x49\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x5A\x65\x6E\x64\x65\x73\x6B\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x52\x65\x70\x6F\x72\x74\x49\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x5A\x65\x6E\x64\x65\x73\x6B\x20\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x20\x69\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x2E\x2E","\x6C\x6F\x67","\x68\x61\x6E\x64\x6C\x65\x45\x76\x65\x6E\x74","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x50\x61\x73\x73\x65\x64\x20\x70\x61\x72\x61\x6D\x65\x74\x65\x72\x73\x20\x61\x72\x65\x20\x6E\x6F\x74\x20\x65\x6E\x6F\x75\x67\x68\x20\x74\x6F\x20\x63\x72\x65\x61\x74\x65\x20\x61\x20\x6E\x65\x77\x20\x74\x69\x63\x6B\x65\x74\x3A\x20\x6D\x69\x73\x73\x20\x49\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x49\x64\x20\x6F\x72\x20\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x49\x64","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x74\x68\x65\x6E","\x66\x69\x6E\x64","\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x75\x72\x69","\x68\x65\x61\x64\x65\x72\x73","\x72\x65\x6D\x6F\x74\x65\x55\x72\x69","\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2F\x6A\x73\x6F\x6E","\x75\x73\x65\x72\x6E\x61\x6D\x65","\x61\x75\x74\x68\x54\x79\x70\x65","\x70\x61\x73\x73\x77\x6F\x72\x64","\x3A","\x74\x6F\x6B\x65\x6E","\x2F\x74\x6F\x6B\x65\x6E\x3A","\x41\x75\x74\x68\x6F\x72\x69\x7A\x61\x74\x69\x6F\x6E","\x42\x61\x73\x69\x63\x20","\x62\x61\x73\x65\x36\x34","\x5B\x5A\x65\x6E\x64\x65\x73\x6B\x5D\x20\x41\x67\x65\x6E\x74\x20\x74\x6F\x20\x73\x65\x61\x72\x63\x68\x3A","\x2F\x73\x65\x61\x72\x63\x68\x2E\x6A\x73\x6F\x6E","\x74\x79\x70\x65\x3A\x75\x73\x65\x72\x20\x72\x6F\x6C\x65\x3A\x61\x67\x65\x6E\x74\x20\x6E\x61\x6D\x65\x3A\x25\x73","\x66\x6F\x72\x6D\x61\x74","","\x64\x65\x73\x74\x63\x61\x6C\x6C\x65\x72\x69\x64\x6E\x61\x6D\x65","\x76\x6F\x69\x63\x65","\x43\x68\x61\x6E\x6E\x65\x6C\x20\x6E\x6F\x74\x20\x72\x65\x63\x6F\x67\x6E\x69\x7A\x65\x64\x3A","\x72\x65\x73\x75\x6C\x74","\x6C\x65\x6E\x67\x74\x68","\x72\x65\x73\x75\x6C\x74\x73","\x63\x6F\x75\x6E\x74","\x5B\x5A\x65\x6E\x64\x65\x73\x6B\x5D\x20\x41\x67\x65\x6E\x74\x20\x66\x6F\x75\x6E\x64\x3A","\x61\x67\x65\x6E\x74","\x6E\x61\x6D\x65","\x66\x69\x72\x73\x74","\x5B\x5A\x65\x6E\x64\x65\x73\x6B\x5D\x20\x41\x67\x65\x6E\x74\x20\x6E\x6F\x74\x20\x66\x6F\x75\x6E\x64\x2E\x20\x55\x73\x65\x20\x74\x68\x65\x20\x61\x64\x6D\x69\x6E\x20\x61\x63\x63\x6F\x75\x6E\x74","\x2F\x75\x73\x65\x72\x73\x2F\x6D\x65\x2E\x6A\x73\x6F\x6E","\x75\x73\x65\x72","\x5B\x5A\x65\x6E\x64\x65\x73\x6B\x5D\x20\x41\x64\x6D\x69\x6E\x20\x73\x65\x6C\x65\x63\x74\x65\x64","\x5B\x5A\x65\x6E\x64\x65\x73\x6B\x5D\x20\x45\x6E\x64\x20\x55\x73\x65\x72\x20\x74\x6F\x20\x73\x65\x61\x72\x63\x68\x3A","\x74\x79\x70\x65\x3A\x75\x73\x65\x72\x20\x72\x6F\x6C\x65\x3A\x65\x6E\x64\x2D\x75\x73\x65\x72\x20\x25\x73\x3A\x25\x73","\x70\x68\x6F\x6E\x65","\x64\x65\x73\x74\x63\x6F\x6E\x6E\x65\x63\x74\x65\x64\x6C\x69\x6E\x65\x6E\x75\x6D","\x64\x65\x73\x74\x63\x6F\x6E\x6E\x65\x63\x74\x65\x64\x6C\x69\x6E\x65\x6E\x61\x6D\x65","\x5B\x5A\x65\x6E\x64\x65\x73\x6B\x5D\x20\x45\x6E\x64\x20\x55\x73\x65\x72\x20\x66\x6F\x75\x6E\x64\x3A","\x65\x6E\x64\x75\x73\x65\x72","\x5B\x5A\x65\x6E\x64\x65\x73\x6B\x5D\x20\x45\x6E\x64\x20\x55\x73\x65\x72\x20\x6E\x6F\x74\x20\x66\x6F\x75\x6E\x64\x3A","\x2F\x75\x73\x65\x72\x73\x2E\x6A\x73\x6F\x6E","\x50\x4F\x53\x54","\x65\x6E\x64\x2D\x75\x73\x65\x72","\x43\x61\x6C\x6C\x65\x72\x20\x2D\x20\x25\x73","\x5B\x5A\x65\x6E\x64\x65\x73\x6B\x5D\x20\x45\x6E\x64\x20\x55\x73\x65\x72\x20\x63\x72\x65\x61\x74\x65\x64\x3A\x20","\x69\x64","\x76\x61\x6C\x75\x65","\x66\x6F\x72\x45\x61\x63\x68","\x5B\x5A\x65\x6E\x64\x65\x73\x6B\x5D\x20\x54\x69\x63\x6B\x65\x74\x20\x62\x6F\x64\x79\x3A","\x2F\x74\x69\x63\x6B\x65\x74\x73\x2E\x6A\x73\x6F\x6E","\x54\x61\x67\x73","\x6D\x61\x70","\x53\x75\x62\x6A\x65\x63\x74","\x73\x6F\x72\x74\x42\x79","\x74\x79\x70\x65","\x73\x74\x72\x69\x6E\x67","\x63\x6F\x6E\x74\x65\x6E\x74","\x70\x75\x73\x68","\x76\x61\x72\x69\x61\x62\x6C\x65","\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65","\x63\x75\x73\x74\x6F\x6D\x56\x61\x72\x69\x61\x62\x6C\x65","\x56\x61\x72\x69\x61\x62\x6C\x65","\x20","\x6A\x6F\x69\x6E","\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x6B\x65\x79\x56\x61\x6C\x75\x65","\x6B\x65\x79\x54\x79\x70\x65","\x25\x73\x3A\x20\x25\x73","\x6B\x65\x79","\x6B\x65\x79\x43\x6F\x6E\x74\x65\x6E\x74","\x0A","\x46\x69\x65\x6C\x64","\x66\x69\x6C\x74\x65\x72","\x69\x64\x46\x69\x65\x6C\x64","\x6E\x61\x6D\x65\x46\x69\x65\x6C\x64","\x74\x69\x63\x6B\x65\x74","\x5B\x5A\x65\x6E\x64\x65\x73\x6B\x5D\x20\x54\x69\x63\x6B\x65\x74\x20\x63\x72\x65\x61\x74\x65\x64","\x2F\x63\x68\x61\x6E\x6E\x65\x6C\x73\x2F\x76\x6F\x69\x63\x65\x2F\x61\x67\x65\x6E\x74\x73\x2F\x25\x64\x2F\x74\x69\x63\x6B\x65\x74\x73\x2F\x25\x64\x2F\x64\x69\x73\x70\x6C\x61\x79\x2E\x6A\x73\x6F\x6E","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x7A\x65\x6E\x64\x65\x73\x6B","\x65\x76\x65\x6E\x74\x43\x68\x61\x6E\x6E\x65\x6C","\x65\x78\x69\x74\x53\x74\x61\x74\x75\x73","\x73\x75\x63\x63\x65\x73\x73","\x74\x69\x63\x6B\x65\x74\x49\x64","\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x49\x64","\x63\x72\x65\x61\x74\x65","\x5B\x5A\x65\x6E\x64\x65\x73\x6B\x5D\x20\x54\x69\x63\x6B\x65\x74\x20\x25\x64\x20\x64\x69\x73\x70\x6C\x61\x79\x65\x64\x20\x74\x6F\x20\x61\x67\x65\x6E\x74\x20\x25\x64","\x5B\x5A\x65\x6E\x64\x65\x73\x6B\x5D\x20\x45\x72\x72\x6F\x72\x20\x69\x6E\x20\x74\x69\x63\x6B\x65\x74\x20\x63\x72\x65\x61\x74\x69\x6F\x6E","\x5B\x5A\x65\x6E\x64\x65\x73\x6B\x5D\x20\x4D\x65\x73\x73\x61\x67\x65\x3A","\x6D\x65\x73\x73\x61\x67\x65","\x5B\x5A\x65\x6E\x64\x65\x73\x6B\x5D\x20\x53\x74\x61\x63\x6B\x3A","\x73\x74\x61\x63\x6B","\x66\x61\x69\x6C\x65\x64","\x5B\x5A\x65\x6E\x64\x65\x73\x6B\x5D\x20\x45\x72\x72\x6F\x72\x20\x69\x6E\x20\x52\x65\x70\x6F\x72\x74\x20\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x20\x63\x72\x65\x61\x74\x65","\x73\x75\x62\x73\x74\x72","\x2F","\x65\x78\x70\x6F\x72\x74\x73"];_0xd9ba[0];var _=require(_0xd9ba[1]);var util=require(_0xd9ba[2]);var rp=require(_0xd9ba[3]);var ZendeskIntegration=require(_0xd9ba[5])[_0xd9ba[4]];var ZendeskConfiguration=require(_0xd9ba[5])[_0xd9ba[6]];var ReportIntegration=require(_0xd9ba[5])[_0xd9ba[7]];function Zendesk(){console[_0xd9ba[9]](_0xd9ba[8])}Zendesk[_0xd9ba[11]][_0xd9ba[10]]=function(_0x3276x8,_0x3276x9,_0x3276xa,_0x3276xb,_0x3276xc){var _0x3276xd={uri:undefined,headers:undefined,agent:undefined,enduser:undefined,ticket:undefined,configuration:undefined};if(!_0x3276x8|| !_0x3276x9){console[_0xd9ba[13]](_0xd9ba[12]);return};ZendeskConfiguration[_0xd9ba[16]]({where:{id:_0x3276x9,AccountId:_0x3276x8},include:[{all:true,include:[{all:true}]}]})[_0xd9ba[15]](handleEntityNotFound())[_0xd9ba[15]](handleConnection(_0x3276xd))[_0xd9ba[15]](searchAgent(_0x3276xd,_0x3276xa,_0x3276xb))[_0xd9ba[15]](handleAgent(_0x3276xd,_0x3276xa,_0x3276xb))[_0xd9ba[15]](searchAdmin(_0x3276xd))[_0xd9ba[15]](handleAdmin(_0x3276xd))[_0xd9ba[15]](searchEndUser(_0x3276xd,_0x3276xa,_0x3276xb))[_0xd9ba[15]](handleEndUser(_0x3276xd,_0x3276xa,_0x3276xb))[_0xd9ba[15]](endUserCreation(_0x3276xd,_0x3276xa,_0x3276xb))[_0xd9ba[15]](handleEndUserCreation(_0x3276xd,_0x3276xa,_0x3276xb))[_0xd9ba[15]](ticketCreation(_0x3276xd,_0x3276xb,_0x3276xc))[_0xd9ba[15]](handleTicketDisplay(_0x3276xd))[_0xd9ba[15]](handleReportIntegration(_0x3276xd,_0x3276xa,_0x3276xb,_0x3276x8))[_0xd9ba[15]](handleEnd(_0x3276xd))[_0xd9ba[14]](handleError(_0x3276xd,_0x3276xa,_0x3276xb,_0x3276x8))};function handleEntityNotFound(){return function(_0x3276xf){if(!_0x3276xf){return null};return _0x3276xf}}function handleConnection(_0x3276xd){return function(_0x3276x11){var _0x3276x12=getAccountConfiguration(_0x3276x11.ZendeskAccount);_0x3276xd[_0xd9ba[17]]=_0x3276x11;_0x3276xd[_0xd9ba[18]]=_0x3276x12[_0xd9ba[18]];_0x3276xd[_0xd9ba[19]]=_0x3276x12[_0xd9ba[19]]}}function getAccountConfiguration(_0x3276x14){var _0x3276x15={uri:stripTrailingSlash(_0x3276x14[_0xd9ba[20]]),headers:{"\x41\x75\x74\x68\x6F\x72\x69\x7A\x61\x74\x69\x6F\x6E":undefined,"\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65":_0xd9ba[21],"\x41\x63\x63\x65\x70\x74":_0xd9ba[21]}};var _0x3276x16=_0x3276x14[_0xd9ba[22]];if(_0x3276x14[_0xd9ba[23]]===_0xd9ba[24]){_0x3276x16=_0x3276x16+_0xd9ba[25]+_0x3276x14[_0xd9ba[24]]}else {if(_0x3276x14[_0xd9ba[23]]===_0xd9ba[26]){_0x3276x16=_0x3276x16+_0xd9ba[27]+_0x3276x14[_0xd9ba[26]]}};_0x3276x15[_0xd9ba[19]][_0xd9ba[28]]=_0xd9ba[29]+ new Buffer(_0x3276x16).toString(_0xd9ba[30]);return _0x3276x15}function searchAgent(_0x3276xd,_0x3276xa,_0x3276xb){return function(){console[_0xd9ba[9]](_0xd9ba[31],getValueFromPropertyName(_0x3276xb,getAgentSearchPropertyFromChannel(_0x3276xa)));return rp({uri:_0x3276xd[_0xd9ba[18]]+_0xd9ba[32],qs:{"\x71\x75\x65\x72\x79":util[_0xd9ba[34]](_0xd9ba[33],getValueFromPropertyName(_0x3276xb,getAgentSearchPropertyFromChannel(_0x3276xa)))},headers:_0x3276xd[_0xd9ba[19]],json:true})}}function getAgentSearchPropertyFromChannel(_0x3276xa){var _0x3276x19=_0xd9ba[35];if(_0x3276xa){switch(_0x3276xa){case _0xd9ba[37]:_0x3276x19=_0xd9ba[36];break;default:_0x3276x19=_0xd9ba[36];console[_0xd9ba[13]](_0xd9ba[38],_0x3276xa)}};return _0x3276x19}function getValueFromPropertyName(_0x3276xb,_0x3276x19){return _[_0xd9ba[39]](_0x3276xb,_0x3276x19)}function handleAgent(_0x3276xd,_0x3276xa,_0x3276x1c){return function(_0x3276xb){if(_0x3276xb[_0xd9ba[41]][_0xd9ba[40]]>0&&_0x3276xb[_0xd9ba[42]]>0){console[_0xd9ba[9]](_0xd9ba[43],getValueFromPropertyName(_0x3276x1c,getAgentSearchPropertyFromChannel(_0x3276xa)));_0x3276xd[_0xd9ba[44]]=getMatchObject(_0x3276xb[_0xd9ba[41]],_0xd9ba[45],getValueFromPropertyName(_0x3276x1c,getAgentSearchPropertyFromChannel(_0x3276xa)));return _0x3276xd[_0xd9ba[44]]};return}}function getMatchObject(_0x3276x1e,_0x3276x19,_0x3276x1f){var _0x3276x20=_[_0xd9ba[16]](_0x3276x1e,{property:_0x3276x1f});if(_0x3276x20){return _0x3276x20};return _[_0xd9ba[46]](_0x3276x1e)}function searchAdmin(_0x3276xd){return function(_0x3276xb){if(_0x3276xb){return};console[_0xd9ba[9]](_0xd9ba[47]);return rp({uri:_0x3276xd[_0xd9ba[18]]+_0xd9ba[48],headers:_0x3276xd[_0xd9ba[19]],json:true})}}function handleAdmin(_0x3276xd){return function(_0x3276xb){if(!_0x3276xb){return};if(_0x3276xb[_0xd9ba[49]]){console[_0xd9ba[9]](_0xd9ba[50]);_0x3276xd[_0xd9ba[44]]=_0x3276xb[_0xd9ba[49]]};return}}function searchEndUser(_0x3276xd,_0x3276xa,_0x3276xb){return function(){console[_0xd9ba[9]](_0xd9ba[51],getValueFromPropertyName(_0x3276xb,getEndUserSearchPropertyFromChannel(_0x3276xa)));return rp({uri:_0x3276xd[_0xd9ba[18]]+_0xd9ba[32],qs:{"\x71\x75\x65\x72\x79":util[_0xd9ba[34]](_0xd9ba[52],getEndUserSearchQueryFromChannel(_0x3276xa),getValueFromPropertyName(_0x3276xb,getEndUserSearchPropertyFromChannel(_0x3276xa)))},headers:_0x3276xd[_0xd9ba[19]],json:true})}}function getEndUserSearchQueryFromChannel(_0x3276xa){var _0x3276x19=_0xd9ba[35];if(_0x3276xa){switch(_0x3276xa){case _0xd9ba[37]:_0x3276x19=_0xd9ba[53];break;default:_0x3276x19=_0xd9ba[53];console[_0xd9ba[13]](_0xd9ba[38],_0x3276xa)}};return _0x3276x19}function getEndUserSearchPropertyFromChannel(_0x3276xa){var _0x3276x19=_0xd9ba[35];if(_0x3276xa){switch(_0x3276xa){case _0xd9ba[37]:_0x3276x19=_0xd9ba[54];break;default:_0x3276x19=_0xd9ba[54];console[_0xd9ba[13]](_0xd9ba[38],_0x3276xa)}};return _0x3276x19}function getEndUserNamePropertyFromChannel(_0x3276xa){var _0x3276x19=_0xd9ba[35];if(_0x3276xa){switch(_0x3276xa){case _0xd9ba[37]:_0x3276x19=_0xd9ba[55];break;default:_0x3276x19=_0xd9ba[55];console[_0xd9ba[13]](_0xd9ba[38],_0x3276xa)}};return _0x3276x19}function handleEndUser(_0x3276xd,_0x3276xa,_0x3276x1c){return function(_0x3276xb){if(_0x3276xb[_0xd9ba[41]][_0xd9ba[40]]>0&&_0x3276xb[_0xd9ba[42]]>0){console[_0xd9ba[9]](_0xd9ba[56],getValueFromPropertyName(_0x3276x1c,getEndUserSearchPropertyFromChannel(_0x3276xa)));_0x3276xd[_0xd9ba[57]]=_0x3276xb[_0xd9ba[41]][0];return _0x3276xd[_0xd9ba[57]]};return}}function endUserCreation(_0x3276xd,_0x3276xa,_0x3276x1c){return function(_0x3276xb){if(_0x3276xb){return};console[_0xd9ba[9]](_0xd9ba[58],getValueFromPropertyName(_0x3276x1c,getEndUserSearchPropertyFromChannel(_0x3276xa)));console[_0xd9ba[9]](getJsonForEndUserCreation(_0x3276xa,_0x3276x1c));return rp({uri:_0x3276xd[_0xd9ba[18]]+_0xd9ba[59],method:_0xd9ba[60],body:{user:getJsonForEndUserCreation(_0x3276xa,_0x3276x1c)},headers:_0x3276xd[_0xd9ba[19]],json:true})}}function getJsonForEndUserCreation(_0x3276xa,_0x3276xb){var _0x3276x2a={role:_0xd9ba[61]};switch(_0x3276xa){case _0xd9ba[37]:if(_0x3276xb[_0xd9ba[55]]){_0x3276x2a[_0xd9ba[45]]=getValueFromPropertyName(_0x3276xb,getEndUserNamePropertyFromChannel(_0x3276xa))}else {_0x3276x2a[_0xd9ba[45]]=util[_0xd9ba[34]](_0xd9ba[62],getValueFromPropertyName(_0x3276xb,getAgentSearchPropertyFromChannel(_0x3276xa)))};_0x3276x2a[_0xd9ba[53]]=getValueFromPropertyName(_0x3276xb,getEndUserSearchPropertyFromChannel(_0x3276xa));break;default:console[_0xd9ba[13]](_0xd9ba[38],_0x3276xa)};return _0x3276x2a}function handleEndUserCreation(_0x3276xd,_0x3276xa,_0x3276x1c){return function(_0x3276xb){if(!_0x3276xb){return};if(_0x3276xb[_0xd9ba[49]]){console[_0xd9ba[9]](_0xd9ba[63],getValueFromPropertyName(_0x3276x1c,getEndUserSearchPropertyFromChannel(_0x3276xa)));_0x3276xd[_0xd9ba[57]]=_0x3276xb[_0xd9ba[49]]};return}}function ticketCreation(_0x3276xd,_0x3276x1c,_0x3276xc){return function(){var _0x3276x2d={requester_id:_0x3276xd[_0xd9ba[44]][_0xd9ba[64]],submitter_id:_0x3276xd[_0xd9ba[57]][_0xd9ba[64]],assignee_id:_0x3276xd[_0xd9ba[57]][_0xd9ba[64]],tags:createTagsFromConfiguration(_0x3276xd),subject:createSubjectFromConfiguration(_0x3276xd,_0x3276x1c,_0x3276xc),description:createDescriptionFromConfiguration(_0x3276xd,_0x3276x1c,_0x3276xc),custom_fields:createCustomFieldsFromConfiguration(_0x3276xd,_0x3276x1c,_0x3276xc)};var _0x3276x2e=createFieldsFromConfiguration(_0x3276xd);if(_0x3276x2e[_0xd9ba[40]]>0){_[_0xd9ba[66]](_0x3276x2e,function(_0x3276x2f){_0x3276x2d[_0x3276x2f[_0xd9ba[64]]]=_0x3276x2f[_0xd9ba[65]]})};console[_0xd9ba[9]](_0xd9ba[67],_0x3276x2d);return rp({uri:_0x3276xd[_0xd9ba[18]]+_0xd9ba[68],method:_0xd9ba[60],body:{ticket:_0x3276x2d},headers:_0x3276xd[_0xd9ba[19]],json:true})}}function createTagsFromConfiguration(_0x3276xd){var _0x3276x31=[];if(_0x3276xd[_0xd9ba[17]][_0xd9ba[69]][_0xd9ba[40]]>0){_0x3276x31=_[_0xd9ba[70]](_0x3276xd[_0xd9ba[17]].Tags,_0xd9ba[45])};return _0x3276x31}function createSubjectFromConfiguration(_0x3276xd,_0x3276x1c,_0x3276xc){var _0x3276x33=_0xd9ba[35];var _0x3276x34=[];if(_0x3276xd[_0xd9ba[17]][_0xd9ba[71]][_0xd9ba[40]]>0){var _0x3276x35=_[_0xd9ba[72]](_0x3276xd[_0xd9ba[17]].Subject,[_0xd9ba[64]]);_[_0xd9ba[66]](_0x3276x35,function(_0x3276x36){if(_0x3276x36[_0xd9ba[73]]===_0xd9ba[74]){_0x3276x34[_0xd9ba[76]](_0x3276x36[_0xd9ba[75]])}else {if(_0x3276x36[_0xd9ba[73]]===_0xd9ba[77]&&_0x3276x36[_0xd9ba[78]]){var _0x3276x37=getValueFromPropertyName(_0x3276x1c,_0x3276x36[_0xd9ba[78]]);if(_0x3276x37){_0x3276x34[_0xd9ba[76]](_0x3276x37.toString())}}else {if(_0x3276x36[_0xd9ba[73]]===_0xd9ba[79]){var _0x3276x38=_[_0xd9ba[16]](_0x3276xc,{"\x6E\x61\x6D\x65":_0x3276x36[_0xd9ba[80]][_0xd9ba[45]]});if(_0x3276x38){_0x3276x34[_0xd9ba[76]](_0x3276x38[_0xd9ba[65]].toString())}}}}});_0x3276x33=_0x3276x34[_0xd9ba[82]](_0xd9ba[81])};return _0x3276x33}function createDescriptionFromConfiguration(_0x3276xd,_0x3276x1c,_0x3276xc){var _0x3276x3a=_0xd9ba[35];var _0x3276x34=[];if(_0x3276xd[_0xd9ba[17]][_0xd9ba[83]][_0xd9ba[40]]>0){var _0x3276x3b=_[_0xd9ba[72]](_0x3276xd[_0xd9ba[17]].Description,[_0xd9ba[64]]);_[_0xd9ba[66]](_0x3276x3b,function(_0x3276x36){if(_0x3276x36[_0xd9ba[73]]===_0xd9ba[74]){_0x3276x34[_0xd9ba[76]](_0x3276x36[_0xd9ba[75]])}else {if(_0x3276x36[_0xd9ba[73]]===_0xd9ba[84]){if(_0x3276x36[_0xd9ba[85]]===_0xd9ba[74]){_0x3276x34[_0xd9ba[76]](util[_0xd9ba[34]](_0xd9ba[86],_0x3276x36[_0xd9ba[87]],_0x3276x36[_0xd9ba[88]]))}else {if(_0x3276x36[_0xd9ba[85]]===_0xd9ba[77]&&_0x3276x36[_0xd9ba[78]]){var _0x3276x37=getValueFromPropertyName(_0x3276x1c,_0x3276x36[_0xd9ba[78]]);if(_0x3276x37){_0x3276x34[_0xd9ba[76]](util[_0xd9ba[34]](_0xd9ba[86],_0x3276x36[_0xd9ba[87]],_0x3276x37.toString()))}}else {if(_0x3276x36[_0xd9ba[85]]===_0xd9ba[79]){var _0x3276x38=_[_0xd9ba[16]](_0x3276xc,{"\x6E\x61\x6D\x65":_0x3276x36[_0xd9ba[80]][_0xd9ba[45]]});if(_0x3276x38){_0x3276x34[_0xd9ba[76]](util[_0xd9ba[34]](_0xd9ba[86],_0x3276x36[_0xd9ba[87]],_0x3276x38[_0xd9ba[65]].toString()))}}}}}}});_0x3276x3a=_0x3276x34[_0xd9ba[82]](_0xd9ba[89])};return _0x3276x3a}function createCustomFieldsFromConfiguration(_0x3276xd,_0x3276x1c,_0x3276xc){var _0x3276x3d=[];var _0x3276x3e=[];if(_0x3276xd[_0xd9ba[17]][_0xd9ba[90]][_0xd9ba[40]]>0){_0x3276x3d=_[_0xd9ba[91]](_0x3276xd[_0xd9ba[17]].Field,{"\x63\x75\x73\x74\x6F\x6D\x46\x69\x65\x6C\x64":true});_[_0xd9ba[66]](_0x3276x3d,function(_0x3276x2f){if(_0x3276x2f[_0xd9ba[73]]===_0xd9ba[74]){_0x3276x3e[_0xd9ba[76]]({id:_0x3276x2f[_0xd9ba[92]],value:_0x3276x2f[_0xd9ba[75]]})}else {if(_0x3276x2f[_0xd9ba[73]]===_0xd9ba[77]){var _0x3276x37=getValueFromPropertyName(_0x3276x1c,_0x3276x2f[_0xd9ba[78]]);if(_0x3276x37){_0x3276x3e[_0xd9ba[76]]({id:_0x3276x2f[_0xd9ba[92]],value:_0x3276x37.toString()})}}else {if(_0x3276x2f[_0xd9ba[73]]===_0xd9ba[79]){var _0x3276x38=_[_0xd9ba[16]](_0x3276xc,{"\x6E\x61\x6D\x65":_0x3276x2f[_0xd9ba[80]][_0xd9ba[45]]});if(_0x3276x38){_0x3276x3e[_0xd9ba[76]]({id:_0x3276x2f[_0xd9ba[92]],value:_0x3276x38[_0xd9ba[65]].toString()})}}}}})};return _0x3276x3e}function createFieldsFromConfiguration(_0x3276xd){var _0x3276x2e=[];var _0x3276x3e=[];if(_0x3276xd[_0xd9ba[17]][_0xd9ba[90]][_0xd9ba[40]]>0){_0x3276x2e=_[_0xd9ba[91]](_0x3276xd[_0xd9ba[17]].Field,{"\x63\x75\x73\x74\x6F\x6D\x46\x69\x65\x6C\x64":false});_[_0xd9ba[66]](_0x3276x2e,function(_0x3276x2f){if(_0x3276x2f[_0xd9ba[73]]===_0xd9ba[74]){_0x3276x3e[_0xd9ba[76]]({id:_0x3276x2f[_0xd9ba[93]],value:_0x3276x2f[_0xd9ba[75]]})}})};return _0x3276x3e}function handleTicketDisplay(_0x3276xd){return function(_0x3276xb){if(_0x3276xb[_0xd9ba[94]]){console[_0xd9ba[9]](_0xd9ba[95]);_0x3276xd[_0xd9ba[94]]=_0x3276xb[_0xd9ba[94]];var _0x3276x41=util[_0xd9ba[34]](_0xd9ba[96],_0x3276xd[_0xd9ba[44]][_0xd9ba[64]],_0x3276xd[_0xd9ba[94]][_0xd9ba[64]]);return rp({uri:_0x3276xd[_0xd9ba[18]]+_0x3276x41,method:_0xd9ba[60],headers:_0x3276xd[_0xd9ba[19]],json:true})};return}}function handleReportIntegration(_0x3276xd,_0x3276xa,_0x3276xb,_0x3276x8){return function(){_0x3276xb=_0x3276xb[_0xd9ba[97]];delete _0x3276xb[_0xd9ba[64]];_0x3276xb[_0xd9ba[98]]=_0xd9ba[99];_0x3276xb[_0xd9ba[100]]=_0x3276xa;_0x3276xb[_0xd9ba[101]]=_0xd9ba[102];_0x3276xb[_0xd9ba[103]]=_0x3276xd[_0xd9ba[94]][_0xd9ba[64]];_0x3276xb[_0xd9ba[104]]=_0x3276x8;return ReportIntegration[_0xd9ba[105]](_0x3276xb)}}function handleEnd(_0x3276xd,_0x3276xb,_0x3276xa){return function(){console[_0xd9ba[9]](util[_0xd9ba[34]](_0xd9ba[106],_0x3276xd[_0xd9ba[94]][_0xd9ba[64]],_0x3276xd[_0xd9ba[44]][_0xd9ba[64]]));_0x3276xd=undefined;return}}function handleError(_0x3276xd,_0x3276xa,_0x3276xb,_0x3276x8){return function(_0x3276x45){console[_0xd9ba[13]](_0xd9ba[107]);console[_0xd9ba[13]](_0xd9ba[108],_0x3276x45[_0xd9ba[109]]);console[_0xd9ba[13]](_0xd9ba[110],_0x3276x45[_0xd9ba[111]]);_0x3276xd=undefined;delete _0x3276xb[_0xd9ba[64]];_0x3276xb=_0x3276xb[_0xd9ba[97]];_0x3276xb[_0xd9ba[98]]=_0xd9ba[99];_0x3276xb[_0xd9ba[100]]=_0x3276xa;_0x3276xb[_0xd9ba[101]]=_0xd9ba[112];_0x3276xb[_0xd9ba[104]]=_0x3276x8;ReportIntegration[_0xd9ba[105]](_0x3276xb)[_0xd9ba[15]](function(){return})[_0xd9ba[14]](function(_0x3276x45){console[_0xd9ba[13]](_0xd9ba[113]);return})}}function stripTrailingSlash(_0x3276x47){if(_0x3276x47[_0xd9ba[114]](-1)===_0xd9ba[115]){return _0x3276x47[_0xd9ba[114]](0,_0x3276x47[_0xd9ba[40]]-1)};return _0x3276x47}module[_0xd9ba[116]]=Zendesk
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var util = require('util');
+var rp = require('request-promise');
+
+var ZendeskIntegration = require('../../models').ZendeskIntegration;
+var ZendeskConfiguration = require('../../models').ZendeskConfiguration;
+var ReportIntegration = require('../../models').ReportIntegration;
+
+function Zendesk() {
+  console.log('Zendesk integration initialization...');
+}
+
+Zendesk.prototype.handleEvent = function(integrationId, configurationId, channel, data, variables) {
+
+  var zendeskData = {
+    uri: undefined,
+    headers: undefined,
+    agent: undefined,
+    enduser: undefined,
+    ticket: undefined,
+    configuration: undefined
+  };
+
+  if (!integrationId || !configurationId) {
+    console.error('Passed parameters are not enough to create a new ticket: miss IntegrationId or ConfigurationId');
+    return;
+  }
+
+  ZendeskConfiguration
+    .find({
+      where: {
+        id: configurationId,
+        AccountId: integrationId
+      },
+      include: [{
+        all: true,
+        include: [{
+          all: true
+        }]
+      }]
+    })
+    .then(handleEntityNotFound())
+    .then(handleConnection(zendeskData))
+    .then(searchAgent(zendeskData, channel, data))
+    .then(handleAgent(zendeskData, channel, data))
+    .then(searchAdmin(zendeskData))
+    .then(handleAdmin(zendeskData))
+    .then(searchEndUser(zendeskData, channel, data))
+    .then(handleEndUser(zendeskData, channel, data))
+    .then(endUserCreation(zendeskData, channel, data))
+    .then(handleEndUserCreation(zendeskData, channel, data))
+    .then(ticketCreation(zendeskData, data, variables))
+    .then(handleTicketDisplay(zendeskData))
+    .then(handleReportIntegration(zendeskData, channel, data, integrationId))
+    .then(handleEnd(zendeskData))
+    .catch(handleError(zendeskData, channel, data, integrationId));
+
+};
+
+function handleEntityNotFound() {
+  return function(entity) {
+    if (!entity) {
+      return null;
+    }
+    return entity;
+  };
+}
+
+function handleConnection(zendeskData) {
+  return function(configuration) {
+    var accConfiguration = getAccountConfiguration(configuration.ZendeskAccount);
+    zendeskData.configuration = configuration;
+    zendeskData.uri = accConfiguration.uri;
+    zendeskData.headers = accConfiguration.headers;
+  }
+}
+
+function getAccountConfiguration(account) {
+  var authJson = {
+    uri: stripTrailingSlash(account.remoteUri),
+    headers: {
+      'Authorization': undefined,
+      'Content-Type': 'application/json',
+      'Accept': 'application/json'
+    }
+  };
+  var auth = account.username;
+  if (account.authType === 'password') {
+    auth = auth + ':' + account.password;
+  } else if (account.authType === 'token') {
+    auth = auth + '/token:' + account.token;
+  }
+  authJson.headers.Authorization = 'Basic ' + new Buffer(auth).toString('base64');
+  return authJson;
+}
+
+function searchAgent(zendeskData, channel, data) {
+  return function() {
+    console.log('[Zendesk] Agent to search:', getValueFromPropertyName(data, getAgentSearchPropertyFromChannel(channel)));
+    return rp({
+      uri: zendeskData.uri + '/search.json',
+      qs: {
+        // 'query': "type:user role:agent name:Andrea Bianco"
+        'query': util.format("type:user role:agent name:%s", getValueFromPropertyName(data, getAgentSearchPropertyFromChannel(channel)))
+      },
+      headers: zendeskData.headers,
+      json: true
+    });
+  }
+}
+
+function getAgentSearchPropertyFromChannel(channel) {
+  var property = '';
+  if (channel) {
+    switch (channel) {
+      case 'voice':
+        property = 'destcalleridname';
+        break;
+      default:
+        property = 'destcalleridname';
+        console.error('Channel not recognized:', channel);
+    }
+  }
+  return property;
+}
+
+function getValueFromPropertyName(data, property) {
+  return _.result(data, property);
+}
+
+function handleAgent(zendeskData, channel, event) {
+  return function(data) {
+    if (data.results.length > 0 && data.count > 0) {
+      console.log('[Zendesk] Agent found:', getValueFromPropertyName(event, getAgentSearchPropertyFromChannel(channel)));
+      zendeskData.agent = getMatchObject(data.results, 'name', getValueFromPropertyName(event, getAgentSearchPropertyFromChannel(channel)));
+      return zendeskData.agent;
+    }
+    return;
+  }
+}
+
+function getMatchObject(collection, property, valueToSearch) {
+  var valueFound = _.find(collection, {
+    property: valueToSearch
+  });
+  if (valueFound) {
+    return valueFound;
+  }
+  return _.first(collection);
+}
+
+function searchAdmin(zendeskData) {
+  return function(data) {
+    if (data) {
+      return;
+    }
+    console.log('[Zendesk] Agent not found. Use the admin account');
+    return rp({
+      uri: zendeskData.uri + '/users/me.json',
+      headers: zendeskData.headers,
+      json: true
+    });
+  }
+}
+
+function handleAdmin(zendeskData) {
+  return function(data) {
+    if (!data) {
+      return;
+    }
+    if (data.user) {
+      console.log('[Zendesk] Admin selected');
+      zendeskData.agent = data.user;
+    }
+    return;
+  }
+}
+
+function searchEndUser(zendeskData, channel, data) {
+  return function() {
+    console.log('[Zendesk] End User to search:', getValueFromPropertyName(data, getEndUserSearchPropertyFromChannel(channel)));
+    return rp({
+      uri: zendeskData.uri + '/search.json',
+      qs: {
+        'query': util.format("type:user role:end-user %s:%s", getEndUserSearchQueryFromChannel(channel), getValueFromPropertyName(data, getEndUserSearchPropertyFromChannel(channel)))
+      },
+      headers: zendeskData.headers,
+      json: true
+    });
+  }
+}
+
+function getEndUserSearchQueryFromChannel(channel) {
+  var property = '';
+  if (channel) {
+    switch (channel) {
+      case 'voice':
+        property = 'phone';
+        break;
+      default:
+        property = 'phone';
+        console.error('Channel not recognized:', channel);
+    }
+  }
+  return property;
+}
+
+function getEndUserSearchPropertyFromChannel(channel) {
+  var property = '';
+  if (channel) {
+    switch (channel) {
+      case 'voice':
+        // TODO: Change with rigth field name: destconnectedlinenum
+        property = 'destconnectedlinenum';
+        break;
+      default:
+        property = 'destconnectedlinenum';
+        console.error('Channel not recognized:', channel);
+    }
+  }
+  return property;
+}
+
+function getEndUserNamePropertyFromChannel(channel) {
+  var property = '';
+  if (channel) {
+    switch (channel) {
+      case 'voice':
+        property = 'destconnectedlinename';
+        break;
+      default:
+        property = 'destconnectedlinename';
+        console.error('Channel not recognized:', channel);
+    }
+  }
+  return property;
+}
+
+function handleEndUser(zendeskData, channel, event) {
+  return function(data) {
+    if (data.results.length > 0 && data.count > 0) {
+      console.log('[Zendesk] End User found:', getValueFromPropertyName(event, getEndUserSearchPropertyFromChannel(channel)));
+      zendeskData.enduser = data.results[0];
+      return zendeskData.enduser;
+    }
+    return;
+  }
+}
+
+function endUserCreation(zendeskData, channel, event) {
+  return function(data) {
+    if (data) {
+      return;
+    }
+    console.log('[Zendesk] End User not found:', getValueFromPropertyName(event, getEndUserSearchPropertyFromChannel(channel)));
+    console.log(getJsonForEndUserCreation(channel, event));
+    return rp({
+      uri: zendeskData.uri + '/users.json',
+      method: 'POST',
+      body: {
+        user: getJsonForEndUserCreation(channel, event)
+      },
+      headers: zendeskData.headers,
+      json: true
+    });
+  }
+}
+
+function getJsonForEndUserCreation(channel, data) {
+  var user = {
+    role: 'end-user'
+  };
+
+  switch (channel) {
+    case 'voice':
+      if (data.destconnectedlinename) {
+        user.name = getValueFromPropertyName(data, getEndUserNamePropertyFromChannel(channel));
+      } else {
+        user.name = util.format('Caller - %s', getValueFromPropertyName(data, getAgentSearchPropertyFromChannel(channel)))
+      }
+      user.phone = getValueFromPropertyName(data, getEndUserSearchPropertyFromChannel(channel));
+      break;
+    default:
+      console.error('Channel not recognized:', channel);
+  }
+
+  return user;
+}
+
+function handleEndUserCreation(zendeskData, channel, event) {
+  return function(data) {
+    if (!data) {
+      return;
+    }
+    if (data.user) {
+      console.log('[Zendesk] End User created: ', getValueFromPropertyName(event, getEndUserSearchPropertyFromChannel(channel)));
+      zendeskData.enduser = data.user;
+    }
+    return;
+  }
+}
+
+function ticketCreation(zendeskData, event, variables) {
+  return function() {
+    var ticketBody = {
+      //Standard Field
+      requester_id: zendeskData.agent.id,
+      submitter_id: zendeskData.enduser.id,
+      assignee_id: zendeskData.enduser.id,
+      //Tag
+      tags: createTagsFromConfiguration(zendeskData),
+      //Configurated Field
+      subject: createSubjectFromConfiguration(zendeskData, event, variables),
+      description: createDescriptionFromConfiguration(zendeskData, event, variables),
+      custom_fields: createCustomFieldsFromConfiguration(zendeskData, event, variables)
+    };
+    var fields = createFieldsFromConfiguration(zendeskData);
+    if (fields.length > 0) {
+      _.forEach(fields, function(item) {
+        ticketBody[item.id] = item.value;
+      });
+    }
+    console.log('[Zendesk] Ticket body:', ticketBody);
+    return rp({
+      uri: zendeskData.uri + '/tickets.json',
+      method: 'POST',
+      body: {
+        ticket: ticketBody
+      },
+      headers: zendeskData.headers,
+      json: true
+    });
+  }
+}
+
+function createTagsFromConfiguration(zendeskData) {
+  var tags = [];
+  if (zendeskData.configuration.Tags.length > 0) {
+    tags = _.map(zendeskData.configuration.Tags, 'name');
+  }
+  return tags;
+}
+
+function createSubjectFromConfiguration(zendeskData, event, variables) {
+  var subject = '';
+  var stringsArray = [];
+  if (zendeskData.configuration.Subject.length > 0) {
+    var subjectConfiguration = _.sortBy(zendeskData.configuration.Subject, ['id']);
+    _.forEach(subjectConfiguration, function(value) {
+      if (value.type === 'string') {
+        stringsArray.push(value.content);
+      } else if (value.type === 'variable' && value.variableName) {
+        var prop = getValueFromPropertyName(event, value.variableName);
+        if (prop) {
+          stringsArray.push(prop.toString());
+        }
+      } else if (value.type === 'customVariable') {
+        var varFound = _.find(variables, {
+          'name': value.Variable.name
+        });
+        if (varFound) {
+          stringsArray.push(varFound.value.toString());
+        }
+      }
+    });
+    subject = stringsArray.join(' ');
+  }
+  return subject;
+}
+
+function createDescriptionFromConfiguration(zendeskData, event, variables) {
+  var description = '';
+  var stringsArray = [];
+  if (zendeskData.configuration.Description.length > 0) {
+    var descriptionConfiguration = _.sortBy(zendeskData.configuration.Description, ['id']);
+    _.forEach(descriptionConfiguration, function(value) {
+      if (value.type === 'string') {
+        stringsArray.push(value.content);
+      } else if (value.type === 'keyValue') {
+        if (value.keyType === 'string') {
+          stringsArray.push(util.format('%s: %s', value.key, value.keyContent));
+        } else if (value.keyType === 'variable' && value.variableName) {
+          var prop = getValueFromPropertyName(event, value.variableName);
+          if (prop) {
+            stringsArray.push(util.format('%s: %s', value.key, prop.toString()));
+          }
+        } else if (value.keyType === 'customVariable') {
+          var varFound = _.find(variables, {
+            'name': value.Variable.name
+          });
+          if (varFound) {
+            stringsArray.push(util.format('%s: %s', value.key, varFound.value.toString()));
+          }
+        }
+      }
+    });
+    description = stringsArray.join('\n');
+  }
+  return description;
+}
+
+function createCustomFieldsFromConfiguration(zendeskData, event, variables) {
+  var customFields = [];
+  var fieldArray = [];
+  if (zendeskData.configuration.Field.length > 0) {
+    customFields = _.filter(zendeskData.configuration.Field, {
+      'customField': true
+    });
+    _.forEach(customFields, function(item) {
+      if (item.type === 'string') {
+        fieldArray.push({
+          id: item.idField,
+          value: item.content
+        });
+      } else if (item.type === 'variable') {
+        var prop = getValueFromPropertyName(event, item.variableName);
+        if (prop) {
+          fieldArray.push({
+            id: item.idField,
+            value: prop.toString()
+          });
+        }
+      } else if (item.type === 'customVariable') {
+        var varFound = _.find(variables, {
+          'name': item.Variable.name
+        });
+        if (varFound) {
+          fieldArray.push({
+            id: item.idField,
+            value: varFound.value.toString()
+          });
+        }
+      }
+    });
+  }
+  return fieldArray;
+}
+
+function createFieldsFromConfiguration(zendeskData) {
+  var fields = [];
+  var fieldArray = [];
+  if (zendeskData.configuration.Field.length > 0) {
+    fields = _.filter(zendeskData.configuration.Field, {
+      'customField': false
+    });
+    _.forEach(fields, function(item) {
+      if (item.type === 'string') {
+        fieldArray.push({
+          id: item.nameField,
+          value: item.content
+        });
+      }
+    });
+  }
+  return fieldArray;
+}
+
+function handleTicketDisplay(zendeskData) {
+  return function(data) {
+    if (data.ticket) {
+      console.log('[Zendesk] Ticket created');
+      zendeskData.ticket = data.ticket;
+      var urlDisplay = util.format('/channels/voice/agents/%d/tickets/%d/display.json', zendeskData.agent.id, zendeskData.ticket.id);
+      return rp({
+        uri: zendeskData.uri + urlDisplay,
+        method: 'POST',
+        headers: zendeskData.headers,
+        json: true
+      });
+    }
+    return;
+  }
+}
+
+function handleReportIntegration(zendeskData, channel, data, integrationId) {
+  return function() {
+    data = data.dataValues;
+    delete data.id;
+    data.integration = 'zendesk';
+    data.eventChannel = channel;
+    data.exitStatus = 'success';
+    data.ticketId = zendeskData.ticket.id;
+    data.integrationId = integrationId;
+    return ReportIntegration.create(data);
+  }
+}
+
+function handleEnd(zendeskData, data, channel) {
+  return function() {
+    console.log(util.format('[Zendesk] Ticket %d displayed to agent %d', zendeskData.ticket.id, zendeskData.agent.id));
+    zendeskData = undefined;
+    return;
+  }
+}
+
+function handleError(zendeskData, channel, data, integrationId) {
+  return function(err) {
+    console.error('[Zendesk] Error in ticket creation');
+    console.error('[Zendesk] Message:', err.message);
+    console.error('[Zendesk] Stack:', err.stack);
+    zendeskData = undefined;
+
+    delete data.id;
+    data = data.dataValues;
+    data.integration = 'zendesk';
+    data.eventChannel = channel;
+    data.exitStatus = 'failed';
+    data.integrationId = integrationId;
+    ReportIntegration
+      .create(data)
+      .then(function() {
+        return;
+      })
+      .catch(function(err) {
+        console.error('[Zendesk] Error in Report integration create');
+        return;
+      });
+  }
+}
+
+function stripTrailingSlash(str) {
+  if (str.substr(-1) === '/') {
+    return str.substr(0, str.length - 1);
+  }
+  return str;
+}
+
+module.exports = Zendesk;
index c708e99..fb29ba1 100644 (file)
@@ -1 +1,61 @@
-var _0xc076=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2E\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x72\x65\x71\x75\x65\x73\x74\x2D\x70\x72\x6F\x6D\x69\x73\x65","\x75\x74\x69\x6C","\x75\x72\x6C","\x43\x72\x6F\x6E\x4A\x6F\x62","\x63\x72\x6F\x6E","\x53\x65\x74\x74\x69\x6E\x67\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x2E\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x70\x72\x6F\x76\x69\x73\x69\x6F\x6E\x69\x6E\x67","\x2F\x73\x65\x72\x76\x65\x72\x73\x2F","\x67\x65\x74\x55\x75\x69\x64","\x2F\x63\x68\x65\x63\x6B","\x6C\x6F\x67","\x2A\x20\x2A\x20\x2A\x20\x2A\x20\x2A","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x6C\x69\x63\x65\x6E\x73\x65","\x75\x70\x64\x61\x74\x65","\x73\x70\x72\x65\x61\x64","\x66\x69\x6E\x64\x4F\x72\x43\x72\x65\x61\x74\x65","\x74\x68\x65\x6E","\x73\x74\x61\x72\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xc076[0];var config=require(_0xc076[1]);var rp=require(_0xc076[2]);var util=require(_0xc076[3]);var url=require(_0xc076[4]);var CronJob=require(_0xc076[6])[_0xc076[5]];var Settings=require(_0xc076[8])[_0xc076[7]];var license=require(_0xc076[9]);var provisioning=config[_0xc076[10]]+_0xc076[11]+license[_0xc076[12]]()+_0xc076[13];console[_0xc076[14]](provisioning);function licenseManager(){var _0x8ff2xa= new CronJob({cronTime:_0xc076[15],onTick:function(){var _0x8ff2xb;return rp({uri:provisioning,json:true})[_0xc076[22]](function(_0x8ff2xe){_0x8ff2xb=_0x8ff2xe;return Settings[_0xc076[21]]({where:{id:1}})})[_0xc076[20]](function(_0x8ff2xd){return _0x8ff2xd[_0xc076[19]]({license:_0x8ff2xb[_0xc076[18]]})})[_0xc076[17]](function(_0x8ff2xc){console[_0xc076[16]](_0x8ff2xc)})},start:false});_0x8ff2xa[_0xc076[23]]();return {}}module[_0xc076[24]]=licenseManager
\ No newline at end of file
+'use strict';
+
+var config = require('../environment');
+var rp = require('request-promise');
+var util = require('util');
+var url = require('url');
+var CronJob = require('cron').CronJob;
+var Settings = require('../../models').Settings;
+var license = require('./license.service');
+
+var provisioning = config.provisioning + '/servers/' + license.getUuid() + '/check';
+console.log(provisioning);
+
+
+// Define the factory
+function licenseManager() {
+  // Store the settings in a closure
+  var job = new CronJob({
+    cronTime: '* * * * *',
+    onTick: function() {
+      // console.log('Check License Start');
+      var _data;
+
+      return rp({
+          uri: provisioning,
+          json: true // Automatically stringifies the body to JSON
+        })
+        .then(function(data) {
+          _data = data;
+
+          return Settings
+            .findOrCreate({
+              where: {
+                id: 1
+              }
+            });
+        })
+        .spread(function(settings) {
+          return settings
+            .update({
+              license: _data.license
+            });
+        })
+        .catch(function(err) {
+          console.error(err);
+        });
+    },
+    start: false
+  });
+
+  job.start();
+  return {
+
+    // Define a sync function
+    // getLicence: function getLicence() {
+    //   return settings;
+    // },
+  };
+}
+
+module.exports = licenseManager;
index a75bece..05c372a 100644 (file)
@@ -1 +1,361 @@
-var _0x89f3=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x63\x6F\x6D\x70\x6F\x73\x61\x62\x6C\x65\x2D\x6D\x69\x64\x64\x6C\x65\x77\x61\x72\x65","\x6D\x6F\x6D\x65\x6E\x74","\x63\x72\x79\x70\x74\x6F","\x75\x74\x69\x6C","\x6F\x73","\x2E\x2E\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x55\x73\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x54\x65\x6C\x65\x70\x68\x6F\x6E\x65","\x53\x65\x74\x74\x69\x6E\x67\x73","\x44\x45\x4D\x4F\x20\x4C\x49\x43\x45\x4E\x53\x45","\x70\x6C\x61\x74\x66\x6F\x72\x6D","\x6C\x69\x6E\x75\x78","\x6F\x75\x74\x70\x75\x74","\x64\x6D\x69\x64\x65\x63\x6F\x64\x65\x20\x2D\x2D\x73\x74\x72\x69\x6E\x67\x20\x73\x79\x73\x74\x65\x6D\x2D\x75\x75\x69\x64","\x73\x6C\x69\x63\x65","\x0A","\x73\x70\x6C\x69\x74","\x62\x6C\x6B\x69\x64\x20\x2D\x67\x20\x26\x26\x20\x62\x6C\x6B\x69\x64","\x6D\x61\x74\x63\x68","\x74\x6F\x4C\x6F\x77\x65\x72\x43\x61\x73\x65","\x65\x78\x65\x63","\x6D\x61\x70","\x75\x75\x69\x64","\x63\x61\x74\x63\x68","\x6C\x69\x63\x65\x6E\x73\x65","\x70\x61\x72\x73\x65","\x63\x68\x61\x74","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x73\x70\x72\x65\x61\x64","\x66\x69\x6E\x64\x4F\x72\x43\x72\x65\x61\x74\x65","\x75\x73\x65","\x6D\x61\x69\x6C","\x66\x61\x78","\x65\x78\x70\x69\x72\x61\x74\x69\x6F\x6E","\x69\x73\x53\x61\x6D\x65\x4F\x72\x42\x65\x66\x6F\x72\x65","\x75\x73\x65\x72\x73","\x4D\x61\x78\x69\x6D\x75\x6D\x20\x75\x73\x65\x72\x73\x20\x6C\x69\x6D\x69\x74\x20\x68\x61\x76\x65\x20\x62\x65\x65\x6E\x20\x72\x65\x61\x63\x68\x65\x64","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x61\x64\x6D\x69\x6E","\x75\x73\x65\x72","\x63\x6F\x75\x6E\x74","\x74\x65\x6C\x65\x70\x68\x6F\x6E\x65\x73","\x4D\x61\x78\x69\x6D\x75\x6D\x20\x74\x65\x6C\x65\x70\x68\x6F\x6E\x65\x73\x20\x6C\x69\x6D\x69\x74\x20\x68\x61\x76\x65\x20\x62\x65\x65\x6E\x20\x72\x65\x61\x63\x68\x65\x64","\x74\x65\x6C\x65\x70\x68\x6F\x6E\x65","\x72\x6F\x6C\x65","\x61\x67\x65\x6E\x74","\x6F\x6E\x6C\x69\x6E\x65","\x61\x67\x65\x6E\x74\x73","\x2D","\x61\x65\x73\x2D\x32\x35\x36\x2D\x63\x74\x72","\x25\x73\x3A\x25\x73\x3A\x25\x73","\x66\x6F\x72\x6D\x61\x74","\x63\x72\x65\x61\x74\x65\x44\x65\x63\x69\x70\x68\x65\x72","\x62\x61\x73\x65\x36\x34","\x75\x74\x66\x38","\x75\x70\x64\x61\x74\x65","\x66\x69\x6E\x61\x6C","\x67\x65\x74\x55\x75\x69\x64","\x69\x73\x56\x61\x6C\x69\x64\x44\x61\x74\x65","\x69\x73\x55\x73\x65\x72\x73\x4C\x69\x6D\x69\x74","\x69\x73\x54\x65\x6C\x65\x70\x68\x6F\x6E\x65\x73\x4C\x69\x6D\x69\x74","\x68\x61\x73\x43\x68\x61\x74","\x68\x61\x73\x4D\x61\x69\x6C","\x68\x61\x73\x46\x61\x78","\x69\x73\x56\x61\x6C\x69\x64\x41\x67\x65\x6E\x74","\x64\x65\x6D\x6F\x4C\x69\x63\x65\x6E\x73\x65","\x64\x65\x63\x72\x79\x70\x74"];_0x89f3[0];var compose=require(_0x89f3[1]);var moment=require(_0x89f3[2]);var crypto=require(_0x89f3[3]);var util=require(_0x89f3[4]);var os=require(_0x89f3[5]);var config=require(_0x89f3[6]);var User=require(_0x89f3[8])[_0x89f3[7]];var Telephone=require(_0x89f3[8])[_0x89f3[9]];var Settings=require(_0x89f3[8])[_0x89f3[10]];var demoLicense={users:1,agents:1,telephones:0,chat:false,mail:false,fax:false,description:_0x89f3[11]};function getUuid(){if(os[_0x89f3[12]]()!==_0x89f3[13]){var _0x887cxc=exec(_0x89f3[15],{silent:true})[_0x89f3[14]];var _0x887cxd=_0x887cxc[_0x89f3[18]](_0x89f3[17])[_0x89f3[16]](0,-1);return _0x887cxd[0]}else {var _0x887cxc=exec(_0x89f3[19],{silent:true})[_0x89f3[14]];var _0x887cxd=_0x887cxc[_0x89f3[18]](_0x89f3[17])[_0x89f3[16]](0,-1)[_0x89f3[23]](function(_0x887cxe){var _0x887cxf,_0x887cx10,_0x887cxd;_0x887cx10= new RegExp(/(\w+)\=\"([^\"]+)/g);_0x887cxf={partition:_0x887cxe[_0x89f3[20]](/^(\S+)\:\ /)[1]};while(_0x887cxd=_0x887cx10[_0x89f3[22]](_0x887cxe)){_0x887cxf[_0x887cxd[1][_0x89f3[21]]()]=_0x887cxd[2]};return _0x887cxf});return _0x887cxd[0][_0x89f3[24]]}}function hasChat(){return compose()[_0x89f3[32]](function(_0x887cx12,_0x887cx13,_0x887cx14){return Settings[_0x89f3[31]]({where:{id:1}})[_0x89f3[30]](function(_0x887cx16){var _0x887cx17=null,_0x887cx18=false;if(_0x887cx16[_0x89f3[26]]){_0x887cx17=decrypt(_0x887cx16[_0x89f3[26]]);_0x887cx17=JSON[_0x89f3[27]](_0x887cx17)}else {_0x887cx17=demoLicense};_0x887cx18=_0x887cx17[_0x89f3[28]];if(!_0x887cx18){return _0x887cx13[_0x89f3[29]](403)};return _0x887cx14()})[_0x89f3[25]](function(_0x887cx15){return _0x887cx14(_0x887cx15)})})}function hasMail(){return compose()[_0x89f3[32]](function(_0x887cx12,_0x887cx13,_0x887cx14){return Settings[_0x89f3[31]]({where:{id:1}})[_0x89f3[30]](function(_0x887cx16){var _0x887cx17=null,_0x887cx1a=false;if(_0x887cx16[_0x89f3[26]]){_0x887cx17=decrypt(_0x887cx16[_0x89f3[26]]);_0x887cx17=JSON[_0x89f3[27]](_0x887cx17)}else {_0x887cx17=demoLicense};_0x887cx1a=_0x887cx17[_0x89f3[33]];if(!_0x887cx1a){return _0x887cx13[_0x89f3[29]](403)};return _0x887cx14()})[_0x89f3[25]](function(_0x887cx15){return _0x887cx14(_0x887cx15)})})}function hasFax(){return compose()[_0x89f3[32]](function(_0x887cx12,_0x887cx13,_0x887cx14){return Settings[_0x89f3[31]]({where:{id:1}})[_0x89f3[30]](function(_0x887cx16){var _0x887cx17=null,_0x887cx1c=false;if(_0x887cx16[_0x89f3[26]]){_0x887cx17=decrypt(_0x887cx16[_0x89f3[26]]);_0x887cx17=JSON[_0x89f3[27]](_0x887cx17)}else {_0x887cx17=demoLicense};_0x887cx1c=_0x887cx17[_0x89f3[34]];if(!_0x887cx1c){return _0x887cx13[_0x89f3[29]](403)};return _0x887cx14()})[_0x89f3[25]](function(_0x887cx15){return _0x887cx14(_0x887cx15)})})}function isValidDate(){return compose()[_0x89f3[32]](function(_0x887cx12,_0x887cx13,_0x887cx14){return Settings[_0x89f3[31]]({where:{id:1}})[_0x89f3[30]](function(_0x887cx16){var _0x887cx17=null,_0x887cx1e=false;if(_0x887cx16[_0x89f3[26]]){_0x887cx17=decrypt(_0x887cx16[_0x89f3[26]]);_0x887cx17=JSON[_0x89f3[27]](_0x887cx17);if(moment()[_0x89f3[36]](_0x887cx17[_0x89f3[35]])){_0x887cx1e=true}};if(!_0x887cx1e){return _0x887cx13[_0x89f3[29]](403)};return _0x887cx14()})[_0x89f3[25]](function(_0x887cx15){return _0x887cx14(_0x887cx15)})})}function isUsersLimit(){return compose()[_0x89f3[32]](function(_0x887cx12,_0x887cx13,_0x887cx14){var _0x887cx20;return Settings[_0x89f3[31]]({where:{id:1}})[_0x89f3[30]](function(_0x887cx16){_0x887cx20=_0x887cx16;return User[_0x89f3[44]]({where:{$or:[{role:_0x89f3[42]},{role:_0x89f3[43]}]}})})[_0x89f3[41]](function(_0x887cx21){var _0x887cx17=null,_0x887cx22=false;if(_0x887cx20[_0x89f3[26]]){_0x887cx17=decrypt(_0x887cx20[_0x89f3[26]]);_0x887cx17=JSON[_0x89f3[27]](_0x887cx17)}else {_0x887cx17=demoLicense};if(_0x887cx17[_0x89f3[37]]>_0x887cx21){_0x887cx22=true};if(!_0x887cx22){return _0x887cx13[_0x89f3[40]](403)[_0x89f3[39]]({message:_0x89f3[38]})};return _0x887cx14()})[_0x89f3[25]](function(_0x887cx15){return _0x887cx14(_0x887cx15)})})}function isTelephonesLimit(){return compose()[_0x89f3[32]](function(_0x887cx12,_0x887cx13,_0x887cx14){var _0x887cx20;return Settings[_0x89f3[31]]({where:{id:1}})[_0x89f3[30]](function(_0x887cx16){_0x887cx20=_0x887cx16;return User[_0x89f3[44]]({where:{role:_0x89f3[47]}})})[_0x89f3[41]](function(_0x887cx24){var _0x887cx17=null,_0x887cx22=false;if(_0x887cx20[_0x89f3[26]]){_0x887cx17=decrypt(_0x887cx20[_0x89f3[26]]);_0x887cx17=JSON[_0x89f3[27]](_0x887cx17)}else {_0x887cx17=demoLicense};if(_0x887cx17[_0x89f3[45]]>_0x887cx24){_0x887cx22=true};if(!_0x887cx22){return _0x887cx13[_0x89f3[40]](403)[_0x89f3[39]]({message:_0x89f3[46]})};return _0x887cx14()})[_0x89f3[25]](function(_0x887cx15){return _0x887cx14(_0x887cx15)})})}function isValidAgent(){return function(_0x887cx26){var _0x887cx20;var _0x887cx27=false;if(_0x887cx26[_0x89f3[48]]===_0x89f3[42]||_0x887cx26[_0x89f3[48]]===_0x89f3[43]||(_0x887cx26[_0x89f3[48]]===_0x89f3[49]&&_0x887cx26[_0x89f3[50]])){_0x887cx27=true};return Settings[_0x89f3[31]]({where:{id:1}})[_0x89f3[30]](function(_0x887cx16){_0x887cx20=_0x887cx16;return User[_0x89f3[44]]({where:{role:_0x89f3[49],online:true}})})[_0x89f3[41]](function(_0x887cx28){var _0x887cx17=null;if(_0x887cx20[_0x89f3[26]]){_0x887cx17=decrypt(_0x887cx20[_0x89f3[26]]);_0x887cx17=JSON[_0x89f3[27]](_0x887cx17)}else {_0x887cx17=demoLicense};if(_0x887cx17[_0x89f3[51]]>_0x887cx28){_0x887cx27=true};return _0x887cx27})}}function decrypt(_0x887cx2a){var _0x887cx2b=getUuid();var _0x887cx2c=_0x887cx2b[_0x89f3[18]](_0x89f3[52])[4];var _0x887cx2d=_0x887cx2b[_0x89f3[18]](_0x89f3[52])[0];var _0x887cx2e=crypto[_0x89f3[56]](_0x89f3[53],util[_0x89f3[55]](_0x89f3[54],_0x887cx2c,_0x887cx2b,_0x887cx2d));var _0x887cx17=_0x887cx2e[_0x89f3[59]](_0x887cx2a,_0x89f3[57],_0x89f3[58]);_0x887cx17+=_0x887cx2e[_0x89f3[60]](_0x89f3[58]);return _0x887cx17}exports[_0x89f3[61]]=getUuid;exports[_0x89f3[62]]=isValidDate;exports[_0x89f3[63]]=isUsersLimit;exports[_0x89f3[64]]=isTelephonesLimit;exports[_0x89f3[65]]=hasChat;exports[_0x89f3[66]]=hasMail;exports[_0x89f3[67]]=hasFax;exports[_0x89f3[68]]=isValidAgent;exports[_0x89f3[69]]=demoLicense;exports[_0x89f3[70]]=decrypt
\ No newline at end of file
+'use strict';
+
+var compose = require('composable-middleware');
+var moment = require('moment');
+var crypto = require('crypto');
+var util = require('util');
+var os = require('os');
+
+var config = require('../environment');
+
+
+var User = require('../../models').User;
+var Telephone = require('../../models').Telephone;
+var Settings = require('../../models').Settings;
+
+var demoLicense = {
+  users: 1,
+  agents: 1,
+  telephones: 0,
+  chat: false,
+  mail: false,
+  fax: false,
+  description: 'DEMO LICENSE'
+};
+
+function getUuid() {
+  if (os.platform() !== 'linux') {
+    var out = exec('dmidecode --string system-uuid', {
+      silent: true
+    }).output;
+    var result = out.split('\n').slice(0, -1);
+    return result[0];
+  } else {
+    var out = exec('blkid -g && blkid', {
+      silent: true
+    }).output;
+    var result = out.split('\n').slice(0, -1).map(function(line) {
+      var part, regex, result;
+      regex = new RegExp(/(\w+)\=\"([^\"]+)/g);
+      part = {
+        partition: line.match(/^(\S+)\:\ /)[1]
+      };
+      while (result = regex.exec(line)) {
+        part[result[1].toLowerCase()] = result[2];
+      }
+      return part;
+    });
+    return result[0].uuid;
+  }
+}
+
+/**
+ * Checks if the chat meets the requirements
+ */
+function hasChat() {
+
+  return compose()
+    .use(function(req, res, next) {
+      return Settings
+        .findOrCreate({
+          where: {
+            id: 1
+          }
+        })
+        .spread(function(settings) {
+          var license = null,
+            chat = false;
+
+          if (settings.license) {
+            license = decrypt(settings.license);
+            license = JSON.parse(license);
+          } else {
+            license = demoLicense;
+          }
+
+          chat = license.chat;
+
+          if (!chat) return res.sendStatus(403);
+          return next();
+        })
+        .catch(function(err) {
+          return next(err);
+        });
+    });
+}
+
+/**
+ * Checks if the mail meets the requirements
+ */
+function hasMail() {
+
+  return compose()
+    .use(function(req, res, next) {
+      return Settings
+        .findOrCreate({
+          where: {
+            id: 1
+          }
+        })
+        .spread(function(settings) {
+          var license = null,
+            mail = false;
+
+          if (settings.license) {
+            license = decrypt(settings.license);
+            license = JSON.parse(license);
+          } else {
+            license = demoLicense;
+          }
+
+          mail = license.mail;
+
+          if (!mail) return res.sendStatus(403);
+          return next();
+        })
+        .catch(function(err) {
+          return next(err);
+        });
+    });
+}
+
+/**
+ * Checks if the fax meets the requirements
+ */
+function hasFax() {
+
+  return compose()
+    .use(function(req, res, next) {
+      return Settings
+        .findOrCreate({
+          where: {
+            id: 1
+          }
+        })
+        .spread(function(settings) {
+          var license = null,
+            fax = false;
+
+          if (settings.license) {
+            license = decrypt(settings.license);
+            license = JSON.parse(license);
+          } else {
+            license = demoLicense;
+          }
+
+          fax = license.fax;
+
+          if (!fax) return res.sendStatus(403);
+          return next();
+        })
+        .catch(function(err) {
+          return next(err);
+        });
+    });
+}
+
+/**
+ * Checks if the date meets the requirements
+ */
+function isValidDate() {
+
+  return compose()
+    .use(function(req, res, next) {
+      return Settings
+        .findOrCreate({
+          where: {
+            id: 1
+          }
+        })
+        .spread(function(settings) {
+          var license = null,
+            date = false;
+
+          if (settings.license) {
+            license = decrypt(settings.license);
+            license = JSON.parse(license);
+
+            if (moment().isSameOrBefore(license.expiration)) {
+              date = true;
+            }
+          }
+
+          if (!date) return res.sendStatus(403);
+          return next();
+        })
+        .catch(function(err) {
+          return next(err);
+        });
+    });
+}
+
+/**
+ * Checks if the users meets the requirements
+ */
+function isUsersLimit() {
+
+  return compose()
+    .use(function(req, res, next) {
+      var _settings;
+
+      return Settings
+        .findOrCreate({
+          where: {
+            id: 1
+          }
+        })
+        .spread(function(settings) {
+          _settings = settings;
+
+          return User
+            .count({
+              where: {
+                $or: [{
+                  role: 'admin'
+                }, {
+                  role: 'user'
+                }]
+              }
+            });
+        })
+        .then(function(users) {
+          var license = null,
+            valid = false;
+
+          if (_settings.license) {
+            license = decrypt(_settings.license);
+            license = JSON.parse(license);
+          } else {
+            license = demoLicense;
+          }
+
+          if (license.users > users) valid = true;
+
+          if (!valid) return res.status(403).send({
+            message: 'Maximum users limit have been reached'
+          });
+          return next();
+        })
+        .catch(function(err) {
+          return next(err);
+        });
+    });
+}
+
+/**
+ * Checks if the telephone meets the requirements
+ */
+function isTelephonesLimit() {
+
+  return compose()
+    .use(function(req, res, next) {
+      var _settings;
+
+      return Settings
+        .findOrCreate({
+          where: {
+            id: 1
+          }
+        })
+        .spread(function(settings) {
+          _settings = settings;
+
+          return User
+            .count({
+              where: {
+                role: 'telephone'
+              }
+            });
+        })
+        .then(function(telephones) {
+          var license = null,
+            valid = false;
+
+          if (_settings.license) {
+            license = decrypt(_settings.license);
+            license = JSON.parse(license);
+          } else {
+            license = demoLicense;
+          }
+
+          if (license.telephones > telephones) valid = true;
+
+          if (!valid) return res.status(403).send({
+            message: 'Maximum telephones limit have been reached'
+          });
+          return next();
+        })
+        .catch(function(err) {
+          return next(err);
+        });
+    });
+}
+
+/**
+ * Checks if the telephone meets the requirements
+ */
+function isValidAgent() {
+  return function(user) {
+    var _settings;
+    var _valid = false;
+
+    if (user.role === 'admin' || user.role === 'user' || (user.role === 'agent' && user.online)) {
+      _valid = true;
+    }
+
+    return Settings
+      .findOrCreate({
+        where: {
+          id: 1
+        }
+      })
+      .spread(function(settings) {
+        _settings = settings;
+
+        return User
+          .count({
+            where: {
+              role: 'agent',
+              online: true
+            }
+          });
+      })
+      .then(function(agents) {
+        var license = null;
+
+        if (_settings.license) {
+          license = decrypt(_settings.license);
+          license = JSON.parse(license);
+        } else {
+          license = demoLicense;
+        }
+
+        if (license.agents > agents) _valid = true;
+
+        return _valid;
+      });
+  }
+}
+
+function decrypt(cypher) {
+  var uuid = getUuid();
+  var prefix = uuid.split('-')[4];
+  var suffix = uuid.split('-')[0];
+
+  var decipher = crypto.createDecipher('aes-256-ctr', util.format('%s:%s:%s', prefix, uuid, suffix));
+  var license = decipher.update(cypher, 'base64', 'utf8')
+  license += decipher.final('utf8');
+
+  return license;
+}
+
+exports.getUuid = getUuid;
+exports.isValidDate = isValidDate;
+exports.isUsersLimit = isUsersLimit;
+exports.isTelephonesLimit = isTelephonesLimit;
+exports.hasChat = hasChat;
+exports.hasMail = hasMail;
+exports.hasFax = hasFax;
+exports.isValidAgent = isValidAgent;
+exports.demoLicense = demoLicense;
+exports.decrypt = decrypt;
index 7f8f5f8..58ae668 100644 (file)
@@ -1 +1,23 @@
-var _0x6152=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x68\x74\x74\x70\x3A\x2F\x2F\x6C\x6F\x63\x61\x6C\x68\x6F\x73\x74\x3A\x39\x30\x30\x30","\x78\x63\x61\x6C\x6C\x79\x73\x68\x75\x74\x74\x6C\x65\x2D\x73\x65\x63\x72\x65\x74","\x61\x70\x70\x2D\x69\x64","\x73\x65\x63\x72\x65\x74",""];_0x6152[0];module[_0x6152[1]]={DOMAIN:_0x6152[2],SESSION_SECRET:_0x6152[3],FACEBOOK_ID:_0x6152[4],FACEBOOK_SECRET:_0x6152[5],TWITTER_ID:_0x6152[4],TWITTER_SECRET:_0x6152[5],GOOGLE_ID:_0x6152[4],GOOGLE_SECRET:_0x6152[5],DEBUG:_0x6152[6]}
\ No newline at end of file
+'use strict';
+
+// Use local.env.js for environment variables that grunt will set when the server starts locally.
+// Use for your api keys, secrets, etc. This file should not be tracked by git.
+//
+// You will need to set these on the server you deploy to.
+
+module.exports = {
+  DOMAIN:           'http://localhost:9000',
+  SESSION_SECRET:   'xcallyshuttle-secret',
+
+  FACEBOOK_ID:      'app-id',
+  FACEBOOK_SECRET:  'secret',
+
+  TWITTER_ID:       'app-id',
+  TWITTER_SECRET:   'secret',
+
+  GOOGLE_ID:        'app-id',
+  GOOGLE_SECRET:    'secret',
+
+  // Control debug level for modules using visionmedia/debug
+  DEBUG: ''
+};
index 844c4ea..1542f7e 100644 (file)
@@ -1 +1,120 @@
-var _0x7f85=["\x77\x69\x6E\x73\x74\x6F\x6E","\x70\x61\x74\x68","\x2E\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x65\x6D\x69\x74\x45\x72\x72\x73","\x64\x65\x62\x75\x67","\x74\x72\x61\x6E\x73\x70\x6F\x72\x74\x73","\x64\x65\x62\x75\x67\x54\x6F\x46\x69\x6C\x65","\x6C\x6F\x67\x67\x69\x6E\x67","\x64\x65\x62\x75\x67\x2D\x66\x69\x6C\x65","\x61\x64\x64","\x69\x6E\x66\x6F\x2D\x66\x69\x6C\x65","\x69\x6E\x66\x6F","\x77\x61\x72\x6E\x2D\x66\x69\x6C\x65","\x77\x61\x72\x6E","\x65\x72\x72\x6F\x72\x2D\x66\x69\x6C\x65","\x65\x72\x72\x6F\x72","\x65\x78\x70\x6F\x72\x74\x73","\x73\x74\x72\x65\x61\x6D"];var winston=require(_0x7f85[0]);var path=require(_0x7f85[1]);var config=require(_0x7f85[2]);winston[_0x7f85[3]]=true;var debug= new winston.Logger({transports:[ new winston[_0x7f85[5]].Console({level:_0x7f85[4],handleExceptions:true,json:false,colorize:true})]});if(config[_0x7f85[7]][_0x7f85[6]]){debug[_0x7f85[9]](winston[_0x7f85[5]].File,{name:_0x7f85[8],level:_0x7f85[4],filename:config[_0x7f85[7]][_0x7f85[4]],handleExceptions:true,json:true,maxsize:5242880,maxFiles:5,colorize:false})};var info= new winston.Logger({transports:[ new winston[_0x7f85[5]].File({name:_0x7f85[10],level:_0x7f85[11],filename:config[_0x7f85[7]][_0x7f85[11]],handleExceptions:true,json:true,maxsize:5242880,maxFiles:5,colorize:false}), new winston[_0x7f85[5]].Console({level:_0x7f85[11],handleExceptions:true,json:false,colorize:true})]});var warn= new winston.Logger({transports:[ new winston[_0x7f85[5]].File({name:_0x7f85[12],level:_0x7f85[13],filename:config[_0x7f85[7]][_0x7f85[13]],handleExceptions:true,json:true,maxsize:5242880,maxFiles:5,colorize:false}), new winston[_0x7f85[5]].Console({level:_0x7f85[13],handleExceptions:true,json:false,colorize:true})]});var error= new winston.Logger({transports:[ new winston[_0x7f85[5]].File({name:_0x7f85[14],level:_0x7f85[15],filename:config[_0x7f85[7]][_0x7f85[15]],handleExceptions:true,json:true,maxsize:5242880,maxFiles:5,colorize:false}), new winston[_0x7f85[5]].Console({level:_0x7f85[15],handleExceptions:true,json:false,colorize:true})]});var loggers={debug:function(_0xb6d9x9,_0xb6d9xa){debug[_0x7f85[4]](_0xb6d9x9,_0xb6d9xa)},info:function(_0xb6d9x9,_0xb6d9xa){info[_0x7f85[11]](_0xb6d9x9,_0xb6d9xa)},warn:function(_0xb6d9x9,_0xb6d9xa){warn[_0x7f85[13]](_0xb6d9x9,_0xb6d9xa)},error:function(_0xb6d9x9,_0xb6d9xa){error[_0x7f85[15]](_0xb6d9x9,_0xb6d9xa)},log:function(_0xb6d9xb,_0xb6d9x9,_0xb6d9xa){var _0xb6d9xc=exports[_0xb6d9xb];_0xb6d9xc(_0xb6d9x9,_0xb6d9xa)}};module[_0x7f85[16]]=loggers;module[_0x7f85[16]][_0x7f85[17]]={write:function(_0xb6d9xd,_0xb6d9xe){loggers[_0x7f85[11]](_0xb6d9xd)}}
\ No newline at end of file
+var winston = require('winston');
+var path = require('path');
+var config = require('./environment');
+
+winston.emitErrs = true;
+
+var debug = new winston.Logger({
+  transports: [
+    new winston.transports.Console({
+      level: 'debug',
+      handleExceptions: true,
+      json: false,
+      colorize: true
+    })
+  ]
+});
+
+if (config.logging.debugToFile) {
+  debug.add(
+    winston.transports.File, {
+      name: 'debug-file',
+      level: 'debug',
+      filename: config.logging.debug,
+      handleExceptions: true,
+      json: true,
+      maxsize: 5242880, //5MB
+      maxFiles: 5,
+      colorize: false
+    }
+  );
+}
+
+var info = new winston.Logger({
+  transports: [
+    new winston.transports.File({
+      name: 'info-file',
+      level: 'info',
+      filename: config.logging.info,
+      handleExceptions: true,
+      json: true,
+      maxsize: 5242880, //5MB
+      maxFiles: 5,
+      colorize: false
+    }),
+    new winston.transports.Console({
+      level: 'info',
+      handleExceptions: true,
+      json: false,
+      colorize: true
+    })
+  ]
+});
+
+var warn = new winston.Logger({
+  transports: [
+    new winston.transports.File({
+      name: 'warn-file',
+      level: 'warn',
+      filename: config.logging.warn,
+      handleExceptions: true,
+      json: true,
+      maxsize: 5242880, //5MB
+      maxFiles: 5,
+      colorize: false
+    }),
+    new winston.transports.Console({
+      level: 'warn',
+      handleExceptions: true,
+      json: false,
+      colorize: true
+    })
+  ]
+});
+
+var error = new winston.Logger({
+  transports: [
+    new winston.transports.File({
+      name: 'error-file',
+      level: 'error',
+      filename: config.logging.error,
+      handleExceptions: true,
+      json: true,
+      maxsize: 5242880, //5MB
+      maxFiles: 5,
+      colorize: false
+    }),
+    new winston.transports.Console({
+      level: 'error',
+      handleExceptions: true,
+      json: false,
+      colorize: true
+    })
+  ]
+});
+
+var loggers = {
+  debug: function(msg, callback) {
+    debug.debug(msg, callback);
+  },
+  info: function(msg, callback) {
+    info.info(msg, callback);
+  },
+  warn: function(msg, callback) {
+    warn.warn(msg, callback);
+  },
+  error: function(msg, callback) {
+    error.error(msg, callback);
+  },
+  log: function(level, msg, callback) {
+    var lvl = exports[level];
+    lvl(msg, callback);
+  }
+};
+
+module.exports = loggers;
+module.exports.stream = {
+  write: function(message, encoding) {
+    loggers.info(message);
+  }
+};
index 5091214..dc9a8ad 100644 (file)
@@ -1 +1,235 @@
-var _0x661b=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x6D\x6F\x6D\x65\x6E\x74","\x75\x74\x69\x6C","\x61\x73\x79\x6E\x63","\x2E\x2E\x2F\x2E\x2E\x2F\x75\x74\x69\x6C","\x43\x68\x61\x74\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x43\x68\x61\x74\x56\x69\x73\x69\x74\x6F\x72","\x43\x68\x61\x74\x57\x65\x62\x73\x69\x74\x65","\x43\x68\x61\x74\x51\x75\x65\x75\x65","\x43\x68\x61\x74\x52\x6F\x6F\x6D","\x52\x65\x70\x6F\x72\x74\x43\x68\x61\x74","\x52\x65\x70\x6F\x72\x74\x43\x68\x61\x74\x53\x65\x73\x73\x69\x6F\x6E","\x49\x6E\x74\x65\x72\x76\x61\x6C","\x55\x73\x65\x72","\x2E\x2F\x73\x65\x73\x73\x69\x6F\x6E","\x65\x78\x70\x6F\x72\x74\x73","\x43\x68\x61\x74\x20\x52\x6F\x75\x74\x69\x6E\x67\x20\x49\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x2E","\x6C\x6F\x67","\x6F\x72\x69\x67\x69\x6E","\x77\x65\x62\x63\x68\x61\x74","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x77\x65\x62\x73\x69\x74\x65\x69\x64","\x69\x64","\x77\x65\x62\x73\x69\x74\x65\x6E\x61\x6D\x65","\x6E\x61\x6D\x65","\x77\x65\x62\x73\x69\x74\x65\x61\x64\x64\x72\x65\x73\x73","\x61\x64\x64\x72\x65\x73\x73","\x70\x72\x69\x6F\x72\x69\x74\x79\x20\x41\x53\x43","\x74\x69\x6D\x65\x6F\x75\x74","\x73\x74\x72\x61\x74\x65\x67\x79","\x6F\x6E\x6C\x69\x6E\x65","\x63\x68\x61\x74\x50\x61\x75\x73\x65","\x67\x65\x74\x43\x68\x61\x74\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x70\x75\x73\x68","\x66\x6F\x72\x45\x61\x63\x68","\x65\x78\x74\x65\x72\x6E\x61\x6C","\x76\x69\x73\x69\x74\x6F\x72\x69\x64","\x63\x72\x65\x61\x74\x65","\x72\x6F\x6F\x6D\x69\x64","\x75\x6E\x69\x71\x75\x65\x69\x64","\x25\x73\x2E\x25\x73","\x75\x6E\x69\x78","\x66\x6F\x72\x6D\x61\x74","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x63\x6C\x6F\x6E\x65\x44\x65\x65\x70","\x61\x70\x70\x74\x69\x6D\x65\x6F\x75\x74","\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x61\x70\x70","\x71\x75\x65\x75\x65\x69\x64","\x71\x75\x65\x75\x65\x6E\x61\x6D\x65","\x71\x75\x65\x75\x65\x74\x69\x6D\x65\x6F\x75\x74","\x61\x67\x65\x6E\x74\x73","\x6D\x61\x70","\x71\x75\x65\x75\x65","\x62\x65\x65\x70\x61\x6C\x6C","\x61\x67\x65\x6E\x74","\x6C\x65\x6E\x67\x74\x68","\x45\x6E\x64\x20\x63\x68\x61\x74\x20\x72\x6F\x75\x74\x69\x6E\x67\x2E\x2E","\x74\x68\x65\x6E","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x75\x70\x64\x61\x74\x65","\x77\x61\x74\x65\x72\x66\x61\x6C\x6C","\x61\x62\x61\x6E\x64\x6F\x6E","\x75\x6E\x73\x65\x72\x76\x65\x64","\x66\x75\x6C\x6C\x6E\x61\x6D\x65","\x65\x6D\x61\x69\x6C","\x43\x68\x61\x74\x57\x65\x62\x73\x69\x74\x65\x49\x64","\x65\x72\x72","\x55\x6E\x6B\x6E\x6F\x77\x6E\x20\x43\x68\x61\x74\x52\x6F\x6F\x6D\x2E\x2E","\x55\x6E\x6B\x6E\x6F\x77\x6E\x20\x43\x68\x61\x74\x57\x65\x62\x73\x69\x74\x65\x20\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73\x2E\x2E","\x55\x6E\x6B\x6E\x6F\x77\x6E\x20\x43\x68\x61\x74\x57\x65\x62\x73\x69\x74\x65\x2E\x2E","\x66\x69\x6E\x64\x42\x79\x49\x64"];_0x661b[0];var _=require(_0x661b[1]);var moment=require(_0x661b[2]);var util=require(_0x661b[3]);var async=require(_0x661b[4]);var Util=require(_0x661b[5]);var ChatApplication=require(_0x661b[7])[_0x661b[6]];var ChatVisitor=require(_0x661b[7])[_0x661b[8]];var ChatWebsite=require(_0x661b[7])[_0x661b[9]];var ChatQueue=require(_0x661b[7])[_0x661b[10]];var ChatRoom=require(_0x661b[7])[_0x661b[11]];var ReportChat=require(_0x661b[7])[_0x661b[12]];var ReportChatSession=require(_0x661b[7])[_0x661b[13]];var Interval=require(_0x661b[7])[_0x661b[14]];var User=require(_0x661b[7])[_0x661b[15]];var Session=require(_0x661b[16]);module[_0x661b[17]]=function(){console[_0x661b[19]](_0x661b[18]);ChatVisitor[_0x661b[22]](function(_0x7977x10){if(_0x7977x10[_0x661b[20]]===_0x661b[21]){handleVisitor(_0x7977x10)}})};function handleEntityNotFound(_0x7977x12){return function(_0x7977x13){if(!_0x7977x13){throw {message:_0x7977x12}};return _0x7977x13}}function handleChatWebsite(_0x7977x15){return function(_0x7977x16){_0x7977x15[_0x661b[23]]=_0x7977x16[_0x661b[24]];_0x7977x15[_0x661b[25]]=_0x7977x16[_0x661b[26]];_0x7977x15[_0x661b[27]]=_0x7977x16[_0x661b[28]];return _0x7977x16[_0x661b[34]]({order:_0x661b[29],include:[{model:ChatQueue,attributes:[_0x661b[24],_0x661b[26],_0x661b[30],_0x661b[31]],include:[{model:User,attributes:[_0x661b[24],_0x661b[26],_0x661b[32],_0x661b[33]]}]},{model:User,attributes:[_0x661b[24],_0x661b[26],_0x661b[32],_0x661b[33]]},{model:Interval,include:[{all:true}]}]})}}function handleChatRoom(_0x7977x15,_0x7977x18){return function(_0x7977x19){_0x7977x19[_0x661b[36]](function(_0x7977x1a){_0x7977x18[_0x661b[35]](_0x7977x1a)});_0x7977x18=_0x7977x19;return ChatRoom[_0x661b[39]]({type:_0x661b[37],ChatVisitorId:_0x7977x15[_0x661b[38]],ChatWebsiteId:_0x7977x15[_0x661b[23]]},{include:[{all:true}]})}}function handleApps(_0x7977x15,_0x7977x18){return function(_0x7977x1c){var _0x7977x1d=[];_0x7977x15[_0x661b[40]]=_0x7977x1c[_0x661b[24]];_0x7977x15[_0x661b[41]]=util[_0x661b[44]](_0x661b[42],moment()[_0x661b[43]](),_0x7977x1c[_0x661b[24]]);ReportChatSession[_0x661b[39]](_[_0x661b[47]](_0x7977x15))[_0x661b[46]](function(_0x7977x1e){console[_0x661b[45]](_0x7977x1e)});_0x7977x18[_0x661b[36]](function(_0x7977x1a,_0x7977x1f){var _0x7977x20=_[_0x661b[47]](_0x7977x15);_0x7977x20[_0x661b[48]]=_0x7977x1a[_0x661b[30]];_0x7977x20[_0x661b[49]]=_0x7977x1a[_0x661b[50]];switch(_0x7977x1a[_0x661b[50]]){case _0x661b[56]:_0x7977x20[_0x661b[51]]=_0x7977x1a[_0x661b[10]][_0x661b[24]];_0x7977x20[_0x661b[52]]=_0x7977x1a[_0x661b[10]][_0x661b[26]];_0x7977x20[_0x661b[31]]=_0x7977x1a[_0x661b[10]][_0x661b[31]];_0x7977x20[_0x661b[53]]=_0x7977x1a[_0x661b[10]][_0x661b[30]];_0x7977x20[_0x661b[54]]=_[_0x661b[55]](_0x7977x1a[_0x661b[10]].Users,function(_0x7977x21){return {id:_0x7977x21[_0x661b[24]],name:_0x7977x21[_0x661b[26]]}});break;case _0x661b[58]:_0x7977x20[_0x661b[53]]=_0x7977x1a[_0x661b[30]];_0x7977x20[_0x661b[31]]=_0x661b[57];_0x7977x20[_0x661b[54]]=[{id:_0x7977x1a[_0x661b[15]][_0x661b[24]],name:_0x7977x1a[_0x661b[15]][_0x661b[26]]}];break;default:};if(_0x7977x1d[_0x661b[59]]){_0x7977x1d[_0x661b[35]](function(_0x7977x22,_0x7977x23){if(_0x7977x22){return _0x7977x23(null,_0x7977x22)}else { new Session(_0x7977x20,_0x7977x23)}})}else {_0x7977x1d[_0x661b[35]](function(_0x7977x23){ new Session(_0x7977x20,_0x7977x23)})}});async[_0x661b[64]](_0x7977x1d,function(_0x7977x1e,_0x7977x24,_0x7977x25){if(_0x7977x1e){console[_0x661b[45]](_0x7977x1e)};console[_0x661b[19]](_0x661b[60]);if(!_0x7977x24){return ReportChatSession[_0x661b[63]]({unmanagedAt:moment()[_0x661b[44]](_0x661b[62])},{where:{uniqueid:_0x7977x15[_0x661b[41]]},individualHooks:true})[_0x661b[61]](handleUnmanaged(_0x7977x15))};if(_0x7977x25){return handleAbandon(_0x7977x15)};return})}}function handleAbandon(_0x7977x15){return ChatVisitor[_0x661b[63]]({status:_0x661b[65]},{where:{id:_0x7977x15[_0x661b[38]]}})}function handleUnmanaged(_0x7977x15){return function(_0x7977x28){return ChatVisitor[_0x661b[63]]({status:_0x661b[66]},{where:{id:_0x7977x15[_0x661b[38]]}})}}function handleVisitor(_0x7977x10){var _0x7977x18=[];var _0x7977x15={visitorid:_0x7977x10[_0x661b[24]],visitorname:_0x7977x10[_0x661b[67]],visitoremail:_0x7977x10[_0x661b[68]],websiteid:_0x7977x10[_0x661b[69]],joinAt:moment()[_0x661b[44]](_0x661b[62])};return ChatWebsite[_0x661b[74]](_0x7977x10.ChatWebsiteId)[_0x661b[61]](handleEntityNotFound(_0x661b[73]))[_0x661b[61]](handleChatWebsite(_0x7977x15))[_0x661b[61]](handleEntityNotFound(_0x661b[72]))[_0x661b[61]](handleChatRoom(_0x7977x15,_0x7977x18))[_0x661b[61]](handleEntityNotFound(_0x661b[71]))[_0x661b[61]](handleApps(_0x7977x15,_0x7977x18))[_0x661b[46]](function(_0x7977x1e){console[_0x661b[45]](_0x661b[70],_0x7977x1e)})}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var moment = require('moment');
+var util = require('util');
+var async = require('async');
+
+var Util = require('../../util');
+
+var ChatApplication = require('../../../models').ChatApplication;
+var ChatVisitor = require('../../../models').ChatVisitor;
+var ChatWebsite = require('../../../models').ChatWebsite;
+var ChatQueue = require('../../../models').ChatQueue;
+var ChatRoom = require('../../../models').ChatRoom;
+
+var ReportChat = require('../../../models').ReportChat;
+var ReportChatSession = require('../../../models').ReportChatSession;
+var Interval = require('../../../models').Interval;
+var User = require('../../../models').User;
+
+var Session = require('./session');
+
+module.exports = function() {
+  console.log('Chat Routing Initialization..');
+
+  ChatVisitor.afterCreate(function(visitor) {
+    if (visitor.origin === 'webchat') {
+      handleVisitor(visitor);
+    }
+  });
+}
+
+function handleEntityNotFound(message) {
+  return function(entity) {
+    if (!entity) {
+      throw {
+        message: message
+      };
+    }
+    return entity;
+  };
+}
+
+function handleChatWebsite(_report) {
+  return function(website) {
+    _report.websiteid = website.id;
+    _report.websitename = website.name;
+    _report.websiteaddress = website.address;
+
+    return website
+      .getChatApplications({
+        order: 'priority ASC',
+        include: [{
+          model: ChatQueue,
+          attributes: ['id', 'name', 'timeout', 'strategy'],
+          include: [{
+            model: User,
+            attributes: ['id', 'name', 'online', 'chatPause']
+          }]
+        }, {
+          model: User,
+          attributes: ['id', 'name', 'online', 'chatPause']
+        }, {
+          model: Interval,
+          include: [{
+            all: true
+          }]
+        }]
+      });
+  }
+}
+
+function handleChatRoom(_report, _apps) {
+  return function(apps) {
+    apps.forEach(function(app) {
+      _apps.push(app);
+    });
+
+    _apps = apps;
+    // START CREATE/ASSIGN CHAT ROOM
+    return ChatRoom
+      .create({
+        type: 'external',
+        ChatVisitorId: _report.visitorid,
+        ChatWebsiteId: _report.websiteid
+      }, {
+        include: [{
+          all: true
+        }]
+      });
+  }
+}
+
+function handleApps(_report, _apps) {
+  return function(room) {
+    var waterfall = [];
+
+    _report.roomid = room.id;
+    _report.uniqueid = util.format('%s.%s', moment().unix(), room.id);
+
+    ReportChatSession
+      .create(_.cloneDeep(_report))
+      .catch(function(err) {
+        console.error(err);
+      });
+
+    _apps.forEach(function(app, index) {
+      var data = _.cloneDeep(_report);
+
+      data.apptimeout = app.timeout;
+      data.application = app.app;
+
+      switch (app.app) {
+        case 'queue':
+          data.queueid = app.ChatQueue.id;
+          data.queuename = app.ChatQueue.name;
+          data.strategy = app.ChatQueue.strategy;
+
+          data.queuetimeout = app.ChatQueue.timeout;
+          data.agents = _.map(app.ChatQueue.Users, function(agent) {
+            return {
+              id: agent.id,
+              name: agent.name
+            }
+          });
+
+          break;
+
+        case 'agent':
+          data.queuetimeout = app.timeout;
+          data.strategy = 'beepall';
+
+          data.agents = [{
+            id: app.User.id,
+            name: app.User.name
+          }];
+
+          break;
+
+        default:
+      }
+
+      if (waterfall.length) {
+        waterfall.push(function(exit, callback) {
+          if (exit) {
+            return callback(null, exit);
+          } else {
+            new Session(data, callback);
+          }
+        });
+      } else {
+        // PRIMA CALLBACK NESSUN DATO
+        waterfall.push(function(callback) {
+          new Session(data, callback);
+        });
+      }
+    });
+
+    async.waterfall(waterfall, function(err, managed, abandon) {
+      if (err) {
+        console.error(err);
+      }
+
+      console.log('End chat routing..');
+
+      if (!managed) {
+        return ReportChatSession
+          .update({
+            unmanagedAt: moment().format("YYYY-MM-DD HH:mm:ss")
+          }, {
+            where: {
+              uniqueid: _report.uniqueid
+            },
+            individualHooks: true
+          })
+          .then(handleUnmanaged(_report));
+      }
+
+      if (abandon) {
+        return handleAbandon(_report);
+      }
+
+      return;
+    });
+  }
+}
+
+function handleAbandon(_report) {
+  //Chat session abandon
+  return ChatVisitor
+    .update({
+      status: 'abandon'
+    }, {
+      where: {
+        id: _report.visitorid
+      }
+    });
+}
+
+function handleUnmanaged(_report) {
+  return function(reportChatSession) {
+    //Chat session not managed
+    return ChatVisitor
+      .update({
+        status: 'unserved'
+      }, {
+        where: {
+          id: _report.visitorid
+        }
+      });
+  }
+}
+
+function handleVisitor(visitor) {
+  var _apps = [];
+  var _report = {
+    visitorid: visitor.id,
+    visitorname: visitor.fullname,
+    visitoremail: visitor.email,
+    websiteid: visitor.ChatWebsiteId,
+    joinAt: moment().format("YYYY-MM-DD HH:mm:ss")
+  };
+
+  return ChatWebsite
+    .findById(visitor.ChatWebsiteId)
+    .then(handleEntityNotFound('Unknown ChatWebsite..'))
+    .then(handleChatWebsite(_report))
+    .then(handleEntityNotFound('Unknown ChatWebsite Applications..'))
+    .then(handleChatRoom(_report, _apps))
+    .then(handleEntityNotFound('Unknown ChatRoom..'))
+    .then(handleApps(_report, _apps))
+    .catch(function(err) {
+      console.error('err', err);
+    });
+}
index 630a367..17560eb 100644 (file)
@@ -1 +1,280 @@
-var _0x70af=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x6D\x6F\x6D\x65\x6E\x74","\x55\x73\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x43\x68\x61\x74\x52\x6F\x6F\x6D","\x43\x68\x61\x74\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x52\x65\x70\x6F\x72\x74\x43\x68\x61\x74","\x52\x65\x70\x6F\x72\x74\x43\x68\x61\x74\x53\x65\x73\x73\x69\x6F\x6E","\x4E\x65\x77\x20\x43\x68\x61\x74\x20\x73\x65\x73\x73\x69\x6F\x6E\x2E\x2E\x2E","\x6C\x6F\x67","\x72\x65\x70\x6F\x72\x74","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x63\x68\x61\x74\x43\x61\x70\x61\x63\x69\x74\x79","\x6C\x65\x6E\x67\x74\x68","\x69\x64","\x72\x6F\x6F\x6D\x69\x64","\x73\x74\x61\x74\x75\x73","\x43\x4C\x4F\x53\x45\x44","\x66\x69\x6C\x74\x65\x72","\x74\x69\x6D\x65\x73\x6C\x6F\x74","\x61\x70\x70\x74\x69\x6D\x65\x6F\x75\x74","\x71\x75\x65\x75\x65\x74\x69\x6D\x65\x6F\x75\x74","\x6E\x61\x6D\x65","\x64\x69\x66\x66\x65\x72\x65\x6E\x63\x65\x42\x79","\x73\x68\x69\x66\x74","\x61\x76\x61\x69\x6C\x61\x62\x6C\x65","\x70\x75\x73\x68","\x72\x72\x6D\x65\x6D\x6F\x72\x79","\x62\x65\x65\x70\x61\x6C\x6C","\x73\x74\x72\x61\x74\x65\x67\x79","\x74\x68\x65\x6E","\x61\x67\x65\x6E\x74\x73","\x6D\x61\x70","\x66\x69\x6E\x64\x41\x6C\x6C","\x63\x6F\x6E\x6E\x65\x63\x74\x69\x64","\x63\x68\x61\x6E\x67\x65\x64","\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x61\x67\x65\x6E\x74\x69\x64","\x61\x67\x65\x6E\x74\x6E\x61\x6D\x65","\x71\x75\x65\x75\x65\x69\x64","\x71\x75\x65\x75\x65\x6E\x61\x6D\x65","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x66\x6F\x72\x6D\x61\x74","\x75\x6E\x69\x71\x75\x65\x69\x64","\x75\x70\x64\x61\x74\x65","\x61\x64\x64\x55\x73\x65\x72","\x66\x69\x6E\x64\x42\x79\x49\x64","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x61\x62\x61\x6E\x64\x6F\x6E\x41\x74","\x76\x69\x73\x69\x74\x6F\x72\x69\x64","\x76\x69\x73\x69\x74\x6F\x72\x6E\x61\x6D\x65","\x76\x69\x73\x69\x74\x6F\x72\x65\x6D\x61\x69\x6C","\x77\x65\x62\x73\x69\x74\x65\x69\x64","\x77\x65\x62\x73\x69\x74\x65\x6E\x61\x6D\x65","\x77\x65\x62\x73\x69\x74\x65\x61\x64\x64\x72\x65\x73\x73","\x66\x6F\x72\x45\x61\x63\x68","\x62\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x70af[0];var _=require(_0x70af[1]);var moment=require(_0x70af[2]);var Agent=require(_0x70af[4])[_0x70af[3]];var ChatRoom=require(_0x70af[4])[_0x70af[5]];var ChatApplication=require(_0x70af[4])[_0x70af[6]];var ReportChat=require(_0x70af[4])[_0x70af[7]];var ReportChatSession=require(_0x70af[4])[_0x70af[8]];function Session(_0xf36fx9,_0xf36fxa){console[_0x70af[10]](_0x70af[9]);console[_0x70af[10]](_0x70af[11],_0xf36fx9);var _0xf36fxb=0;var _0xf36fxc,_0xf36fxd;Agent[_0x70af[35]]({where:{id:{$in:_[_0x70af[34]](_0xf36fx9[_0x70af[33]],_0x70af[16])},online:true,mailPause:false},include:[{model:ChatRoom,attributes:[_0x70af[16],_0x70af[18]]}],attributes:[_0x70af[16],_0x70af[24],_0x70af[14]]})[_0x70af[32]](function(_0xf36fxf){var _0xf36fx10=_[_0x70af[20]](_0xf36fxf,function(_0xf36fx11){if(_0xf36fx11[_0x70af[14]]===0){return true}else {return _0xf36fx11[_0x70af[14]]>_[_0x70af[20]](_0xf36fx11.ChatRooms,function(_0xf36fx12){return _0xf36fx12[_0x70af[16]]!==_0xf36fx9[_0x70af[17]]&&_0xf36fx12[_0x70af[18]]!==_0x70af[19]})[_0x70af[15]]}});var _0xf36fx13=[];var _0xf36fx14;var _0xf36fx11;_0xf36fx9[_0x70af[21]]=((_0xf36fx9[_0x70af[22]]-_0xf36fxb)>_0xf36fx9[_0x70af[23]])?_0xf36fx9[_0x70af[23]]:(_0xf36fx9[_0x70af[22]]-_0xf36fxb);switch(_0xf36fx9[_0x70af[31]]){case _0x70af[29]:_0xf36fx14=_[_0x70af[25]](_0xf36fx10,_0xf36fx13,_0x70af[24]);_0xf36fx11=_0xf36fx14[_0x70af[26]]();if(_0xf36fx11){_0xf36fx9[_0x70af[27]]=[{id:_0xf36fx11[_0x70af[16]],name:_0xf36fx11[_0x70af[24]]}];_0xf36fx13[_0x70af[28]]({id:_0xf36fx11[_0x70af[16]],name:_0xf36fx11[_0x70af[24]]});saveReport(_0xf36fx9)}else {_0xf36fx13=[];_0xf36fx11=_0xf36fx10[_0x70af[26]]();if(_0xf36fx11){_0xf36fx13[_0x70af[28]]({id:_0xf36fx11[_0x70af[16]],name:_0xf36fx11[_0x70af[24]]});saveReport(_0xf36fx9)}};break;case _0x70af[30]:_0xf36fx9[_0x70af[27]]=_0xf36fx10;saveReport(_0xf36fx9);break;default:};_0xf36fxd=setTimeout(function(){clearInterval(_0xf36fxc);return _0xf36fxa(null,false)},_0xf36fx9[_0x70af[22]]*1000);_0xf36fxc=setInterval(function(){_0xf36fxb+=_0xf36fx9[_0x70af[23]];return Agent[_0x70af[35]]({where:{id:{$in:_[_0x70af[34]](_0xf36fx9[_0x70af[33]],_0x70af[16])},online:true,mailPause:false},include:[{model:ChatRoom,attributes:[_0x70af[16],_0x70af[18]]}],attributes:[_0x70af[16],_0x70af[24],_0x70af[14]]})[_0x70af[32]](function(_0xf36fxf){_0xf36fx10=_[_0x70af[20]](_0xf36fxf,function(_0xf36fx11){if(_0xf36fx11[_0x70af[14]]===0){return true}else {return _0xf36fx11[_0x70af[14]]>_[_0x70af[20]](_0xf36fx11.ChatRooms,function(_0xf36fx12){return _0xf36fx12[_0x70af[16]]!==_0xf36fx9[_0x70af[17]]&&_0xf36fx12[_0x70af[18]]!==_0x70af[19]})[_0x70af[15]]}});_0xf36fx9[_0x70af[21]]=((_0xf36fx9[_0x70af[22]]-_0xf36fxb)>_0xf36fx9[_0x70af[23]])?_0xf36fx9[_0x70af[23]]:(_0xf36fx9[_0x70af[22]]-_0xf36fxb);switch(_0xf36fx9[_0x70af[31]]){case _0x70af[29]:_0xf36fx14=_[_0x70af[25]](_0xf36fx10,_0xf36fx13,_0x70af[24]);_0xf36fx11=_0xf36fx14[_0x70af[26]]();if(_0xf36fx11){_0xf36fx9[_0x70af[27]]=[{id:_0xf36fx11[_0x70af[16]],name:_0xf36fx11[_0x70af[24]]}];_0xf36fx13[_0x70af[28]]({id:_0xf36fx11[_0x70af[16]],name:_0xf36fx11[_0x70af[24]]});saveReport(_0xf36fx9)}else {_0xf36fx13=[];_0xf36fx11=_0xf36fx10[_0x70af[26]]();if(_0xf36fx11){_0xf36fx9[_0x70af[27]]=[{id:_0xf36fx11[_0x70af[16]],name:_0xf36fx11[_0x70af[24]]}];_0xf36fx13[_0x70af[28]]({id:_0xf36fx11[_0x70af[16]],name:_0xf36fx11[_0x70af[24]]});saveReport(_0xf36fx9)}};break;case _0x70af[30]:_0xf36fx9[_0x70af[27]]=_0xf36fx10;saveReport(_0xf36fx9);break;default:}})[_0x70af[13]](function(_0xf36fxe){console[_0x70af[12]](_0xf36fxe)})},_0xf36fx9[_0x70af[23]]*1000)})[_0x70af[13]](function(_0xf36fxe){console[_0x70af[12]](_0xf36fxe)});ReportChat[_0x70af[49]](function(_0xf36fx15){if(_0xf36fx15[_0x70af[37]](_0x70af[36])){return ChatRoom[_0x70af[48]](_0xf36fx15[_0x70af[17]])[_0x70af[32]](function(ChatRoom){return ChatRoom[_0x70af[47]](_0xf36fx15[_0x70af[39]],{individualHooks:true})})[_0x70af[32]](function(){return ReportChatSession[_0x70af[46]]({application:_0xf36fx15[_0x70af[38]],agentid:_0xf36fx15[_0x70af[39]],agentname:_0xf36fx15[_0x70af[40]],queueid:_0xf36fx15[_0x70af[41]]||null,queuename:_0xf36fx15[_0x70af[42]]||null,leaveAt:moment()[_0x70af[44]](_0x70af[43])},{where:{uniqueid:_0xf36fx15[_0x70af[45]]},individualHooks:true})})[_0x70af[32]](function(){clearInterval(_0xf36fxc);clearTimeout(_0xf36fxd);return _0xf36fxa(null,true)})[_0x70af[13]](function(_0xf36fxe){console[_0x70af[12]](_0xf36fxe)})}});ReportChatSession[_0x70af[49]](function(_0xf36fx15){if(_0xf36fx15[_0x70af[37]](_0x70af[50])){return ChatRoom[_0x70af[48]](_0xf36fx15[_0x70af[17]])[_0x70af[32]](function(ChatRoom){return ChatRoom[_0x70af[46]]({status:_0x70af[19]})})[_0x70af[32]](function(){clearInterval(_0xf36fxc);clearTimeout(_0xf36fxd);return _0xf36fxa(null,true,true)})[_0x70af[13]](function(_0xf36fxe){console[_0x70af[12]](_0xf36fxe)})}});return {}}function saveReport(_0xf36fx9){var _0xf36fx17=[];_0xf36fx9[_0x70af[27]][_0x70af[57]](function(_0xf36fx11,_0xf36fx18){_0xf36fx17[_0x70af[28]]({uniqueid:_0xf36fx9[_0x70af[45]],visitorid:_0xf36fx9[_0x70af[51]],visitorname:_0xf36fx9[_0x70af[52]],visitoremail:_0xf36fx9[_0x70af[53]],timeslot:_0xf36fx9[_0x70af[21]],websiteid:_0xf36fx9[_0x70af[54]],websitename:_0xf36fx9[_0x70af[55]],websiteaddress:_0xf36fx9[_0x70af[56]],application:_0xf36fx9[_0x70af[38]],agentname:_0xf36fx11[_0x70af[24]],agentid:_0xf36fx11[_0x70af[16]],queueid:_0xf36fx9[_0x70af[41]]||null,queuename:_0xf36fx9[_0x70af[42]]||null,roomid:_0xf36fx9[_0x70af[17]]||null,calledAt:moment()[_0x70af[44]](_0x70af[43])})});if(_0xf36fx17[_0x70af[15]]){return ReportChat[_0x70af[58]](_0xf36fx17,{individualHooks:true})[_0x70af[13]](function(_0xf36fxe){console[_0x70af[12]](_0xf36fxe)})}}module[_0x70af[59]]=Session
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var moment = require('moment');
+
+var Agent = require('../../../models').User;
+var ChatRoom = require('../../../models').ChatRoom;
+var ChatApplication = require('../../../models').ChatApplication;
+var ReportChat = require('../../../models').ReportChat;
+var ReportChatSession = require('../../../models').ReportChatSession;
+
+// Define the factory
+function Session(report, callback) {
+  console.log('New Chat session...');
+  console.log('report', report);
+  var elapsed = 0;
+  var interval, timeout;
+
+  Agent
+    .findAll({
+      where: {
+        id: {
+          $in: _.map(report.agents, 'id'),
+        },
+        online: true,
+        mailPause: false
+      },
+      include: [{
+        model: ChatRoom,
+        attributes: ['id', 'status']
+      }],
+      attributes: ['id', 'name', 'chatCapacity']
+    })
+    .then(function(agents) {
+      var set1 = _.filter(agents, function(agent) {
+        if (agent.chatCapacity === 0) {
+          return true;
+        } else {
+          return agent.chatCapacity > _.filter(agent.ChatRooms, function(room) {
+            return room.id !== report.roomid && room.status !== 'CLOSED'
+          }).length;
+        }
+      });
+      var set2 = [];
+
+      var diff;
+      var agent;
+
+      report.timeslot = ((report.apptimeout - elapsed) > report.queuetimeout) ? report.queuetimeout : (report.apptimeout - elapsed);
+
+      switch (report.strategy) {
+        case 'rrmemory':
+          diff = _.differenceBy(set1, set2, 'name');
+          agent = diff.shift();
+
+          if (agent) {
+            report.available = [{
+              id: agent.id,
+              name: agent.name
+            }];
+
+            set2.push({
+              id: agent.id,
+              name: agent.name
+            });
+            saveReport(report);
+
+          } else {
+            set2 = [];
+            agent = set1.shift();
+
+            if (agent) {
+              set2.push({
+                id: agent.id,
+                name: agent.name
+              });
+              saveReport(report);
+            }
+          }
+
+          break;
+        case 'beepall':
+          report.available = set1;
+          saveReport(report);
+
+          break;
+        default:
+      }
+
+      // APPLICATION TIMEOUT
+      timeout = setTimeout(function() {
+        clearInterval(interval);
+        return callback(null, false);
+      }, report.apptimeout * 1000);
+
+      interval = setInterval(function() {
+        elapsed += report.queuetimeout;
+
+        return Agent
+          .findAll({
+            where: {
+              id: {
+                $in: _.map(report.agents, 'id'),
+              },
+              online: true,
+              mailPause: false
+            },
+            include: [{
+              model: ChatRoom,
+              attributes: ['id', 'status']
+            }],
+            attributes: ['id', 'name', 'chatCapacity']
+          })
+          .then(function(agents) {
+            set1 = _.filter(agents, function(agent) {
+              if (agent.chatCapacity === 0) {
+                return true;
+              } else {
+                return agent.chatCapacity > _.filter(agent.ChatRooms, function(room) {
+                  return room.id !== report.roomid && room.status !== 'CLOSED'
+                }).length;
+              }
+            });
+
+            report.timeslot = ((report.apptimeout - elapsed) > report.queuetimeout) ? report.queuetimeout : (report.apptimeout - elapsed);
+
+            switch (report.strategy) {
+              case 'rrmemory':
+                diff = _.differenceBy(set1, set2, 'name');
+                agent = diff.shift();
+
+                if (agent) {
+                  report.available = [{
+                    id: agent.id,
+                    name: agent.name
+                  }];
+
+                  set2.push({
+                    id: agent.id,
+                    name: agent.name
+                  });
+
+                  saveReport(report);
+
+                } else {
+                  set2 = [];
+                  agent = set1.shift();
+
+                  if (agent) {
+                    report.available = [{
+                      id: agent.id,
+                      name: agent.name
+                    }];
+
+                    set2.push({
+                      id: agent.id,
+                      name: agent.name
+                    });
+                    saveReport(report);
+                  }
+                }
+
+                break;
+              case 'beepall':
+                report.available = set1;
+                saveReport(report);
+
+                break;
+              default:
+            }
+          })
+          .catch(function(err) {
+            console.error(err);
+          });
+
+      }, report.queuetimeout * 1000);
+
+    })
+    .catch(function(err) {
+      console.error(err);
+    });
+
+  // INTERROMPO IL ROUTING
+  ReportChat.afterUpdate(function(doc) {
+    if (doc.changed('connectid')) {
+      return ChatRoom
+        .findById(doc.roomid)
+        .then(function(ChatRoom) {
+          return ChatRoom
+            .addUser(doc.agentid, {
+              individualHooks: true
+            });
+        })
+        .then(function() {
+          return ReportChatSession
+            .update({
+              application: doc.application,
+              agentid: doc.agentid,
+              agentname: doc.agentname,
+              queueid: doc.queueid || null,
+              queuename: doc.queuename || null,
+              leaveAt: moment().format("YYYY-MM-DD HH:mm:ss")
+            }, {
+              where: {
+                uniqueid: doc.uniqueid
+              },
+              individualHooks: true
+            });
+        })
+        .then(function() {
+          clearInterval(interval);
+          clearTimeout(timeout);
+          return callback(null, true);
+        })
+        .catch(function(err) {
+          console.error(err);
+        });
+    }
+  });
+
+  ReportChatSession.afterUpdate(function(doc) {
+    if (doc.changed('abandonAt')) {
+      return ChatRoom
+        .findById(doc.roomid)
+        .then(function(ChatRoom) {
+          return ChatRoom
+            .update({
+              status: 'CLOSED'
+            })
+        })
+        .then(function() {
+          clearInterval(interval);
+          clearTimeout(timeout);
+          return callback(null, true, true);
+        })
+        .catch(function(err) {
+          console.error(err);
+        });
+    }
+  });
+
+  return {};
+}
+
+function saveReport(report) {
+  var reports = [];
+
+  report.available.forEach(function(agent, index) {
+    reports.push({
+      uniqueid: report.uniqueid,
+      visitorid: report.visitorid,
+      visitorname: report.visitorname,
+      visitoremail: report.visitoremail,
+      timeslot: report.timeslot,
+      websiteid: report.websiteid,
+      websitename: report.websitename,
+      websiteaddress: report.websiteaddress,
+      application: report.application,
+      agentname: agent.name,
+      agentid: agent.id,
+      queueid: report.queueid || null,
+      queuename: report.queuename || null,
+      roomid: report.roomid || null,
+      calledAt: moment().format("YYYY-MM-DD HH:mm:ss")
+    });
+  });
+
+  if (reports.length) {
+    return ReportChat
+      .bulkCreate(reports, {
+        individualHooks: true
+      })
+      .catch(function(err) {
+        console.error(err);
+      });
+  }
+}
+
+// Export this file as a module
+module.exports = Session;
index ba34076..9268b24 100644 (file)
@@ -1 +1,216 @@
-var _0xa27d=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x6D\x6F\x6D\x65\x6E\x74","\x75\x74\x69\x6C","\x61\x73\x79\x6E\x63","\x2E\x2E\x2F\x2E\x2E\x2F\x75\x74\x69\x6C","\x52\x65\x70\x6F\x72\x74\x4D\x61\x69\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x52\x65\x70\x6F\x72\x74\x4D\x61\x69\x6C\x53\x65\x73\x73\x69\x6F\x6E","\x4D\x61\x69\x6C\x4D\x65\x73\x73\x61\x67\x65","\x4D\x61\x69\x6C\x51\x75\x65\x75\x65","\x49\x6E\x74\x65\x72\x76\x61\x6C","\x55\x73\x65\x72","\x2E\x2F\x73\x65\x73\x73\x69\x6F\x6E","\x65\x78\x70\x6F\x72\x74\x73","\x4D\x61\x69\x6C\x20\x52\x6F\x75\x74\x69\x6E\x67\x20\x49\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x2E","\x6C\x6F\x67","\x73\x74\x61\x74\x75\x73","\x52\x45\x43\x45\x49\x56\x45\x44","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x72\x6F\x6F\x6D\x69\x64","\x69\x64","\x75\x6E\x69\x71\x75\x65\x69\x64","\x25\x73\x2E\x25\x73","\x75\x6E\x69\x78","\x66\x6F\x72\x6D\x61\x74","\x73\x75\x62\x6A\x65\x63\x74","\x61\x67\x65\x6E\x74\x73","\x6E\x61\x6D\x65","\x6D\x61\x70","\x67\x65\x74\x4D\x61\x69\x6C\x41\x63\x63\x6F\x75\x6E\x74","\x61\x63\x63\x6F\x75\x6E\x74\x69\x64","\x61\x63\x63\x6F\x75\x6E\x74\x6E\x61\x6D\x65","\x61\x63\x63\x6F\x75\x6E\x74\x61\x64\x64\x72\x65\x73\x73","\x61\x64\x64\x72\x65\x73\x73","\x66\x69\x64\x65\x6C\x69\x74\x79","\x61\x70\x70\x74\x69\x6D\x65\x6F\x75\x74","\x71\x75\x65\x75\x65\x74\x69\x6D\x65\x6F\x75\x74","\x74\x69\x6D\x65\x6F\x75\x74","\x73\x74\x72\x61\x74\x65\x67\x79","\x62\x65\x65\x70\x61\x6C\x6C","\x70\x72\x69\x6F\x72\x69\x74\x79\x20\x41\x53\x43","\x6F\x6E\x6C\x69\x6E\x65","\x6D\x61\x69\x6C\x50\x61\x75\x73\x65","\x67\x65\x74\x4D\x61\x69\x6C\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x63\x6C\x6F\x6E\x65\x44\x65\x65\x70","\x63\x72\x65\x61\x74\x65","\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x6C\x65\x6E\x67\x74\x68","\x70\x75\x73\x68","\x61\x70\x70","\x71\x75\x65\x75\x65\x69\x64","\x71\x75\x65\x75\x65\x6E\x61\x6D\x65","\x71\x75\x65\x75\x65","\x61\x67\x65\x6E\x74","\x66\x6F\x72\x45\x61\x63\x68","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x75\x70\x64\x61\x74\x65","\x45\x6E\x64\x20\x6D\x61\x69\x6C\x20\x72\x6F\x75\x74\x69\x6E\x67\x2E\x2E","\x77\x61\x74\x65\x72\x66\x61\x6C\x6C","\x65\x72\x72","\x74\x68\x65\x6E","\x55\x6E\x6B\x6E\x6F\x77\x6E\x20\x4D\x61\x69\x6C\x41\x63\x63\x6F\x75\x6E\x74\x2E\x2E","\x55\x6E\x6B\x6E\x6F\x77\x6E\x20\x4D\x61\x69\x6C\x52\x6F\x6F\x6D\x2E\x2E","\x67\x65\x74\x4D\x61\x69\x6C\x52\x6F\x6F\x6D"];_0xa27d[0];var _=require(_0xa27d[1]);var moment=require(_0xa27d[2]);var util=require(_0xa27d[3]);var async=require(_0xa27d[4]);var Util=require(_0xa27d[5]);var ReportMail=require(_0xa27d[7])[_0xa27d[6]];var ReportMailSession=require(_0xa27d[7])[_0xa27d[8]];var MailMessage=require(_0xa27d[7])[_0xa27d[9]];var MailQueue=require(_0xa27d[7])[_0xa27d[10]];var Interval=require(_0xa27d[7])[_0xa27d[11]];var User=require(_0xa27d[7])[_0xa27d[12]];var Session=require(_0xa27d[13]);module[_0xa27d[14]]=function(){console[_0xa27d[16]](_0xa27d[15]);MailMessage[_0xa27d[19]](function(_0x18acxd){if(_0x18acxd[_0xa27d[17]]===_0xa27d[18]){handleMessage(_0x18acxd)}})};function handleEntityNotFound(_0x18acxd){return function(_0x18acxf){if(!_0x18acxf){throw {message:_0x18acxd}};return _0x18acxf}}function handleMailRoom(_0x18acx11,_0x18acx12){return function(_0x18acx13){_0x18acx11[_0xa27d[20]]=_0x18acx13[_0xa27d[21]];_0x18acx11[_0xa27d[22]]=util[_0xa27d[25]](_0xa27d[23],moment()[_0xa27d[24]](),_0x18acx13[_0xa27d[21]]);_0x18acx11[_0xa27d[26]]=_0x18acx13[_0xa27d[26]];_0x18acx12[_0xa27d[27]]=_[_0xa27d[29]](_0x18acx13.Users,function(_0x18acx14){return {id:_0x18acx14[_0xa27d[21]],name:_0x18acx14[_0xa27d[28]]}});return _0x18acx13[_0xa27d[30]]()}}function handleMailAccount(_0x18acx11,_0x18acx12){return function(_0x18acx16){_0x18acx11[_0xa27d[31]]=_0x18acx16[_0xa27d[21]];_0x18acx11[_0xa27d[32]]=_0x18acx16[_0xa27d[28]];_0x18acx11[_0xa27d[33]]=_0x18acx16[_0xa27d[34]];_0x18acx12[_0xa27d[35]]=_0x18acx16[_0xa27d[35]];if(_0x18acx16[_0xa27d[35]]){_0x18acx12[_0xa27d[36]]=_0x18acx12[_0xa27d[37]]=_0x18acx16[_0xa27d[38]];_0x18acx12[_0xa27d[35]]=_0x18acx16[_0xa27d[38]];_0x18acx12[_0xa27d[39]]=_0xa27d[40]};return _0x18acx16[_0xa27d[44]]({order:_0xa27d[41],include:[{model:MailQueue,attributes:[_0xa27d[21],_0xa27d[28],_0xa27d[38],_0xa27d[39]],include:[{model:User,attributes:[_0xa27d[21],_0xa27d[28],_0xa27d[42],_0xa27d[43]]}]},{model:User,attributes:[_0xa27d[21],_0xa27d[28],_0xa27d[42],_0xa27d[43]]},{model:Interval,include:[{all:true}]}]})}}function handleApps(_0x18acx11,_0x18acx12){return function(_0x18acx18){var _0x18acx19=[];ReportMailSession[_0xa27d[48]](_[_0xa27d[47]](_0x18acx11))[_0xa27d[46]](function(_0x18acx1a){console[_0xa27d[45]](_0x18acx1a)});if(_0x18acx12[_0xa27d[35]]){_0x18acx11[_0xa27d[37]]=_0x18acx12[_0xa27d[35]];_0x18acx11[_0xa27d[36]]=_0x18acx12[_0xa27d[35]];_0x18acx11[_0xa27d[27]]=_0x18acx12[_0xa27d[27]];_0x18acx11[_0xa27d[49]]=_0xa27d[35];_0x18acx11[_0xa27d[39]]=_0xa27d[40];var _0x18acx1b=_[_0xa27d[47]](_0x18acx11);if(_0x18acx1b[_0xa27d[27]][_0xa27d[50]]){_0x18acx19[_0xa27d[51]](function(_0x18acx1c){ new Session(_0x18acx1b,_0x18acx1c)})}};_0x18acx18[_0xa27d[57]](function(_0x18acx1d,_0x18acx1e){var _0x18acx1b=_[_0xa27d[47]](_0x18acx11);_0x18acx1b[_0xa27d[36]]=_0x18acx1d[_0xa27d[38]];_0x18acx1b[_0xa27d[49]]=_0x18acx1d[_0xa27d[52]];switch(_0x18acx1d[_0xa27d[52]]){case _0xa27d[55]:_0x18acx1b[_0xa27d[53]]=_0x18acx1d[_0xa27d[10]][_0xa27d[21]];_0x18acx1b[_0xa27d[54]]=_0x18acx1d[_0xa27d[10]][_0xa27d[28]];_0x18acx1b[_0xa27d[39]]=_0x18acx1d[_0xa27d[10]][_0xa27d[39]];_0x18acx1b[_0xa27d[37]]=_0x18acx1d[_0xa27d[10]][_0xa27d[38]];_0x18acx1b[_0xa27d[27]]=_[_0xa27d[29]](_0x18acx1d[_0xa27d[10]].Users,function(_0x18acx1f){return {id:_0x18acx1f[_0xa27d[21]],name:_0x18acx1f[_0xa27d[28]]}});break;case _0xa27d[56]:_0x18acx1b[_0xa27d[37]]=_0x18acx1d[_0xa27d[38]];_0x18acx1b[_0xa27d[39]]=_0xa27d[40];_0x18acx1b[_0xa27d[27]]=[{id:_0x18acx1d[_0xa27d[12]][_0xa27d[21]],name:_0x18acx1d[_0xa27d[12]][_0xa27d[28]]}];break;default:};if(_0x18acx19[_0xa27d[50]]){_0x18acx19[_0xa27d[51]](function(_0x18acx20,_0x18acx1c){if(_0x18acx20){_0x18acx1c(null,_0x18acx20)}else { new Session(_0x18acx1b,_0x18acx1c)}})}else {_0x18acx19[_0xa27d[51]](function(_0x18acx1c){ new Session(_0x18acx1b,_0x18acx1c)})}});async[_0xa27d[61]](_0x18acx19,function(_0x18acx1a,_0x18acx21){if(_0x18acx1a){console[_0xa27d[45]](_0x18acx1a)};if(!_0x18acx21){return ReportMailSession[_0xa27d[59]]({queuecallerleaveAt:moment()[_0xa27d[25]](_0xa27d[58]),queuecallerunmanagedAt:moment()[_0xa27d[25]](_0xa27d[58])},{where:{uniqueid:_0x18acx11[_0xa27d[22]]},individualHooks:true})};console[_0xa27d[16]](_0xa27d[60])})}}function handleMessage(_0x18acxd){var _0x18acx12={agents:[]};var _0x18acx11={messageid:_0x18acxd[_0xa27d[21]],queuecallerjoinAt:moment()[_0xa27d[25]](_0xa27d[58])};return _0x18acxd[_0xa27d[66]]({include:[{model:User,attributes:[_0xa27d[21],_0xa27d[28],_0xa27d[42],_0xa27d[43]]}]})[_0xa27d[63]](handleEntityNotFound(_0xa27d[65]))[_0xa27d[63]](handleMailRoom(_0x18acx11,_0x18acx12))[_0xa27d[63]](handleEntityNotFound(_0xa27d[64]))[_0xa27d[63]](handleMailAccount(_0x18acx11,_0x18acx12))[_0xa27d[63]](handleApps(_0x18acx11,_0x18acx12))[_0xa27d[46]](function(_0x18acx1a){console[_0xa27d[45]](_0xa27d[62],_0x18acx1a)})}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var moment = require('moment');
+var util = require('util');
+var async = require('async');
+
+var Util = require('../../util');
+
+var ReportMail = require('../../../models').ReportMail;
+var ReportMailSession = require('../../../models').ReportMailSession;
+var MailMessage = require('../../../models').MailMessage;
+var MailQueue = require('../../../models').MailQueue;
+var Interval = require('../../../models').Interval;
+var User = require('../../../models').User;
+
+var Session = require('./session');
+
+module.exports = function() {
+  console.log('Mail Routing Initialization..');
+
+  MailMessage.afterCreate(function(message) {
+    if (message.status === 'RECEIVED') {
+      handleMessage(message);
+    }
+  });
+}
+
+function handleEntityNotFound(message) {
+  return function(entity) {
+    if (!entity) {
+      throw {
+        message: message
+      };
+    }
+    return entity;
+  };
+}
+
+function handleMailRoom(_report, _fidelity) {
+  return function(room) {
+    _report.roomid = room.id;
+    _report.uniqueid = util.format('%s.%s', moment().unix(), room.id);
+    _report.subject = room.subject;
+    _fidelity.agents = _.map(room.Users, function(user) {
+      return {
+        id: user.id,
+        name: user.name
+      };
+    });
+
+    return room
+      .getMailAccount();
+  }
+}
+
+function handleMailAccount(_report, _fidelity) {
+  return function(account) {
+    _report.accountid = account.id;
+    _report.accountname = account.name;
+    _report.accountaddress = account.address;
+
+    _fidelity.fidelity = account.fidelity;
+
+    if (account.fidelity) {
+      _fidelity.apptimeout = _fidelity.queuetimeout = account.timeout;
+      _fidelity.fidelity = account.timeout;
+      _fidelity.strategy = 'beepall';
+    }
+
+    return account
+      .getMailApplications({
+        order: 'priority ASC',
+        include: [{
+          model: MailQueue,
+          attributes: ['id', 'name', 'timeout', 'strategy'],
+          include: [{
+            model: User,
+            attributes: ['id', 'name', 'online', 'mailPause']
+          }]
+        }, {
+          model: User,
+          attributes: ['id', 'name', 'online', 'mailPause']
+        }, {
+          model: Interval,
+          include: [{
+            all: true
+          }]
+        }]
+      });
+  }
+}
+
+function handleApps(_report, _fidelity) {
+  return function(apps) {
+    var waterfall = [];
+
+    ReportMailSession
+      .create(_.cloneDeep(_report))
+      .catch(function(err) {
+        console.error(err);
+      });
+
+    if (_fidelity.fidelity) {
+      _report.queuetimeout = _fidelity.fidelity;
+      _report.apptimeout = _fidelity.fidelity;
+      _report.agents = _fidelity.agents;
+      _report.application = 'fidelity';
+      _report.strategy = 'beepall';
+
+      var data = _.cloneDeep(_report);
+      if (data.agents.length) {
+        waterfall.push(function(callback) {
+          new Session(data, callback);
+        });
+      }
+    }
+
+    apps.forEach(function(app, index) {
+
+      var data = _.cloneDeep(_report);
+
+      data.apptimeout = app.timeout;
+      data.application = app.app;
+
+      switch (app.app) {
+        case 'queue':
+          data.queueid = app.MailQueue.id;
+          data.queuename = app.MailQueue.name;
+          data.strategy = app.MailQueue.strategy;
+
+          data.queuetimeout = app.MailQueue.timeout;
+          data.agents = _.map(app.MailQueue.Users, function(agent) {
+            return {
+              id: agent.id,
+              name: agent.name
+            }
+          });
+
+          break;
+        case 'agent':
+          data.queuetimeout = app.timeout;
+          data.strategy = 'beepall';
+
+          data.agents = [{
+            id: app.User.id,
+            name: app.User.name
+          }];
+
+          break;
+        default:
+      }
+
+      if (waterfall.length) {
+        waterfall.push(function(exit, callback) {
+          if (exit) {
+            callback(null, exit);
+          } else {
+            new Session(data, callback);
+          }
+        });
+      } else {
+        // PRIMA CALLBACK NESSUN DATO
+        waterfall.push(function(callback) {
+          new Session(data, callback);
+        });
+      }
+    });
+
+    async.waterfall(waterfall, function(err, managed) {
+      if (err) {
+        console.error(err);
+      }
+      if (!managed) {
+        return ReportMailSession
+          .update({
+            queuecallerleaveAt: moment().format("YYYY-MM-DD HH:mm:ss"),
+            queuecallerunmanagedAt: moment().format("YYYY-MM-DD HH:mm:ss")
+          }, {
+            where: {
+              uniqueid: _report.uniqueid
+            },
+            individualHooks: true
+          });
+      }
+
+      console.log('End mail routing..');
+    });
+  }
+}
+
+function handleMessage(message) {
+  var _fidelity = {
+    agents: []
+  };
+  var _report = {
+    messageid: message.id,
+    queuecallerjoinAt: moment().format("YYYY-MM-DD HH:mm:ss")
+  };
+
+  return message
+    .getMailRoom({
+      include: [{
+        model: User,
+        attributes: ['id', 'name', 'online', 'mailPause']
+      }]
+    })
+    .then(handleEntityNotFound('Unknown MailRoom..'))
+    .then(handleMailRoom(_report, _fidelity))
+    .then(handleEntityNotFound('Unknown MailAccount..'))
+    .then(handleMailAccount(_report, _fidelity))
+    .then(handleApps(_report, _fidelity))
+    .catch(function(err) {
+      console.error('err', err);
+    });
+}
index 0d64147..171d4af 100644 (file)
@@ -1 +1,258 @@
-var _0xb1df=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x6D\x6F\x6D\x65\x6E\x74","\x55\x73\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x4D\x61\x69\x6C\x52\x6F\x6F\x6D","\x4D\x61\x69\x6C\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x52\x65\x70\x6F\x72\x74\x4D\x61\x69\x6C","\x52\x65\x70\x6F\x72\x74\x4D\x61\x69\x6C\x53\x65\x73\x73\x69\x6F\x6E","\x4E\x65\x77\x20\x4D\x61\x69\x6C\x20\x73\x65\x73\x73\x69\x6F\x6E\x2E\x2E\x2E","\x6C\x6F\x67","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x6D\x61\x69\x6C\x43\x61\x70\x61\x63\x69\x74\x79","\x6C\x65\x6E\x67\x74\x68","\x69\x64","\x72\x6F\x6F\x6D\x69\x64","\x73\x74\x61\x74\x75\x73","\x43\x4C\x4F\x53\x45\x44","\x66\x69\x6C\x74\x65\x72","\x74\x69\x6D\x65\x73\x6C\x6F\x74","\x61\x70\x70\x74\x69\x6D\x65\x6F\x75\x74","\x71\x75\x65\x75\x65\x74\x69\x6D\x65\x6F\x75\x74","\x6E\x61\x6D\x65","\x64\x69\x66\x66\x65\x72\x65\x6E\x63\x65\x42\x79","\x73\x68\x69\x66\x74","\x61\x76\x61\x69\x6C\x61\x62\x6C\x65","\x70\x75\x73\x68","\x72\x72\x6D\x65\x6D\x6F\x72\x79","\x62\x65\x65\x70\x61\x6C\x6C","\x73\x74\x72\x61\x74\x65\x67\x79","\x74\x68\x65\x6E","\x61\x67\x65\x6E\x74\x73","\x6D\x61\x70","\x66\x69\x6E\x64\x41\x6C\x6C","\x63\x6F\x6E\x6E\x65\x63\x74\x69\x64","\x63\x68\x61\x6E\x67\x65\x64","\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x6D\x65\x6D\x62\x65\x72\x69\x64","\x6D\x65\x6D\x62\x65\x72\x6E\x61\x6D\x65","\x71\x75\x65\x75\x65","\x71\x75\x65\x75\x65\x6E\x61\x6D\x65","\x66\x69\x64\x65\x6C\x69\x74\x79","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x66\x6F\x72\x6D\x61\x74","\x75\x6E\x69\x71\x75\x65\x69\x64","\x75\x70\x64\x61\x74\x65","\x61\x64\x64\x55\x73\x65\x72","\x66\x69\x6E\x64\x42\x79\x49\x64","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x73\x75\x62\x6A\x65\x63\x74","\x61\x63\x63\x6F\x75\x6E\x74\x69\x64","\x61\x63\x63\x6F\x75\x6E\x74\x6E\x61\x6D\x65","\x61\x63\x63\x6F\x75\x6E\x74\x61\x64\x64\x72\x65\x73\x73","\x6D\x65\x73\x73\x61\x67\x65\x69\x64","\x66\x6F\x72\x45\x61\x63\x68","\x62\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0xb1df[0];var _=require(_0xb1df[1]);var moment=require(_0xb1df[2]);var Agent=require(_0xb1df[4])[_0xb1df[3]];var MailRoom=require(_0xb1df[4])[_0xb1df[5]];var MailApplication=require(_0xb1df[4])[_0xb1df[6]];var ReportMail=require(_0xb1df[4])[_0xb1df[7]];var ReportMailSession=require(_0xb1df[4])[_0xb1df[8]];function Session(_0xfd9fx9,_0xfd9fxa){console[_0xb1df[10]](_0xb1df[9]);var _0xfd9fxb=0;var _0xfd9fxc,_0xfd9fxd;Agent[_0xb1df[34]]({where:{id:{$in:_[_0xb1df[33]](_0xfd9fx9[_0xb1df[32]],_0xb1df[15])},online:true,mailPause:false},include:[{model:MailRoom,attributes:[_0xb1df[15],_0xb1df[17]]}],attributes:[_0xb1df[15],_0xb1df[23],_0xb1df[13]]})[_0xb1df[31]](function(_0xfd9fxf){var _0xfd9fx10=_[_0xb1df[19]](_0xfd9fxf,function(_0xfd9fx11){if(_0xfd9fx11[_0xb1df[13]]===0){return true}else {return _0xfd9fx11[_0xb1df[13]]>_[_0xb1df[19]](_0xfd9fx11.MailRooms,function(_0xfd9fx12){return _0xfd9fx12[_0xb1df[15]]!==_0xfd9fx9[_0xb1df[16]]&&_0xfd9fx12[_0xb1df[17]]!==_0xb1df[18]})[_0xb1df[14]]}});var _0xfd9fx13=[];var _0xfd9fx14;var _0xfd9fx11;_0xfd9fx9[_0xb1df[20]]=((_0xfd9fx9[_0xb1df[21]]-_0xfd9fxb)>_0xfd9fx9[_0xb1df[22]])?_0xfd9fx9[_0xb1df[22]]:(_0xfd9fx9[_0xb1df[21]]-_0xfd9fxb);switch(_0xfd9fx9[_0xb1df[30]]){case _0xb1df[28]:_0xfd9fx14=_[_0xb1df[24]](_0xfd9fx10,_0xfd9fx13,_0xb1df[23]);_0xfd9fx11=_0xfd9fx14[_0xb1df[25]]();if(_0xfd9fx11){_0xfd9fx9[_0xb1df[26]]=[{id:_0xfd9fx11[_0xb1df[15]],name:_0xfd9fx11[_0xb1df[23]]}];_0xfd9fx13[_0xb1df[27]]({id:_0xfd9fx11[_0xb1df[15]],name:_0xfd9fx11[_0xb1df[23]]});saveReport(_0xfd9fx9)}else {_0xfd9fx13=[];_0xfd9fx11=_0xfd9fx10[_0xb1df[25]]();if(_0xfd9fx11){_0xfd9fx13[_0xb1df[27]]({id:_0xfd9fx11[_0xb1df[15]],name:_0xfd9fx11[_0xb1df[23]]});saveReport(_0xfd9fx9)}};break;case _0xb1df[29]:_0xfd9fx9[_0xb1df[26]]=_0xfd9fx10;saveReport(_0xfd9fx9);break;default:};_0xfd9fxd=setTimeout(function(){clearInterval(_0xfd9fxc);return _0xfd9fxa(null,false)},_0xfd9fx9[_0xb1df[21]]*1000);_0xfd9fxc=setInterval(function(){_0xfd9fxb+=_0xfd9fx9[_0xb1df[22]];return Agent[_0xb1df[34]]({where:{id:{$in:_[_0xb1df[33]](_0xfd9fx9[_0xb1df[32]],_0xb1df[15])},online:true,mailPause:false},include:[{model:MailRoom,attributes:[_0xb1df[15],_0xb1df[17]]}],attributes:[_0xb1df[15],_0xb1df[23],_0xb1df[13]]})[_0xb1df[31]](function(_0xfd9fxf){_0xfd9fx10=_[_0xb1df[19]](_0xfd9fxf,function(_0xfd9fx11){if(_0xfd9fx11[_0xb1df[13]]===0){return true}else {return _0xfd9fx11[_0xb1df[13]]>_[_0xb1df[19]](_0xfd9fx11.MailRooms,function(_0xfd9fx12){return _0xfd9fx12[_0xb1df[15]]!==_0xfd9fx9[_0xb1df[16]]&&_0xfd9fx12[_0xb1df[17]]!==_0xb1df[18]})[_0xb1df[14]]}});_0xfd9fx9[_0xb1df[20]]=((_0xfd9fx9[_0xb1df[21]]-_0xfd9fxb)>_0xfd9fx9[_0xb1df[22]])?_0xfd9fx9[_0xb1df[22]]:(_0xfd9fx9[_0xb1df[21]]-_0xfd9fxb);switch(_0xfd9fx9[_0xb1df[30]]){case _0xb1df[28]:_0xfd9fx14=_[_0xb1df[24]](_0xfd9fx10,_0xfd9fx13,_0xb1df[23]);_0xfd9fx11=_0xfd9fx14[_0xb1df[25]]();if(_0xfd9fx11){_0xfd9fx9[_0xb1df[26]]=[{id:_0xfd9fx11[_0xb1df[15]],name:_0xfd9fx11[_0xb1df[23]]}];_0xfd9fx13[_0xb1df[27]]({id:_0xfd9fx11[_0xb1df[15]],name:_0xfd9fx11[_0xb1df[23]]});saveReport(_0xfd9fx9)}else {_0xfd9fx13=[];_0xfd9fx11=_0xfd9fx10[_0xb1df[25]]();if(_0xfd9fx11){_0xfd9fx9[_0xb1df[26]]=[{id:_0xfd9fx11[_0xb1df[15]],name:_0xfd9fx11[_0xb1df[23]]}];_0xfd9fx13[_0xb1df[27]]({id:_0xfd9fx11[_0xb1df[15]],name:_0xfd9fx11[_0xb1df[23]]});saveReport(_0xfd9fx9)}};break;case _0xb1df[29]:_0xfd9fx9[_0xb1df[26]]=_0xfd9fx10;saveReport(_0xfd9fx9);break;default:}})[_0xb1df[12]](function(_0xfd9fxe){console[_0xb1df[11]](_0xfd9fxe)})},_0xfd9fx9[_0xb1df[22]]*1000)})[_0xb1df[12]](function(_0xfd9fxe){console[_0xb1df[11]](_0xfd9fxe)});ReportMail[_0xb1df[49]](function(_0xfd9fx15){if(_0xfd9fx15[_0xb1df[36]](_0xb1df[35])){return MailRoom[_0xb1df[48]](_0xfd9fx15[_0xb1df[16]])[_0xb1df[31]](function(_0xfd9fx16){return _0xfd9fx16[_0xb1df[47]](_0xfd9fx15[_0xb1df[38]],{individualHooks:true})})[_0xb1df[31]](function(){return ReportMailSession[_0xb1df[46]]({application:_0xfd9fx15[_0xb1df[37]],memberid:_0xfd9fx15[_0xb1df[38]],membername:_0xfd9fx15[_0xb1df[39]],queue:_0xfd9fx15[_0xb1df[40]]||null,queuename:_0xfd9fx15[_0xb1df[41]]||null,fidelity:_0xfd9fx15[_0xb1df[37]]===_0xb1df[42]?_0xfd9fx15[_0xb1df[20]]:null,queuecallerleaveAt:moment()[_0xb1df[44]](_0xb1df[43])},{where:{uniqueid:_0xfd9fx15[_0xb1df[45]]},individualHooks:true})})[_0xb1df[31]](function(){clearInterval(_0xfd9fxc);clearTimeout(_0xfd9fxd);return _0xfd9fxa(null,true)})[_0xb1df[12]](function(_0xfd9fxe){console[_0xb1df[11]](_0xfd9fxe)})}});return {}}function saveReport(_0xfd9fx9){var _0xfd9fx18=[];_0xfd9fx9[_0xb1df[26]][_0xb1df[55]](function(_0xfd9fx11,_0xfd9fx19){_0xfd9fx18[_0xb1df[27]]({uniqueid:_0xfd9fx9[_0xb1df[45]],timeslot:_0xfd9fx9[_0xb1df[20]],subject:_0xfd9fx9[_0xb1df[50]],accountid:_0xfd9fx9[_0xb1df[51]],accountname:_0xfd9fx9[_0xb1df[52]],accountaddress:_0xfd9fx9[_0xb1df[53]],application:_0xfd9fx9[_0xb1df[37]],membername:_0xfd9fx11[_0xb1df[23]],memberid:_0xfd9fx11[_0xb1df[15]],queue:_0xfd9fx9[_0xb1df[40]]||null,queuename:_0xfd9fx9[_0xb1df[41]]||null,roomid:_0xfd9fx9[_0xb1df[16]]||null,messageid:_0xfd9fx9[_0xb1df[54]]||null,calledAt:moment()[_0xb1df[44]](_0xb1df[43])})});if(_0xfd9fx18[_0xb1df[14]]){return ReportMail[_0xb1df[56]](_0xfd9fx18,{individualHooks:true})[_0xb1df[12]](function(_0xfd9fxe){console[_0xb1df[11]](_0xfd9fxe)})}}module[_0xb1df[57]]=Session
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var moment = require('moment');
+
+var Agent = require('../../../models').User;
+var MailRoom = require('../../../models').MailRoom;
+var MailApplication = require('../../../models').MailApplication;
+var ReportMail = require('../../../models').ReportMail;
+var ReportMailSession = require('../../../models').ReportMailSession;
+
+// Define the factory
+function Session(report, callback) {
+  console.log('New Mail session...');
+  var elapsed = 0;
+  var interval, timeout;
+
+  Agent
+    .findAll({
+      where: {
+        id: {
+          $in: _.map(report.agents, 'id'),
+        },
+        online: true,
+        mailPause: false
+      },
+      include: [{
+        model: MailRoom,
+        attributes: ['id', 'status']
+      }],
+      attributes: ['id', 'name', 'mailCapacity']
+    })
+    .then(function(agents) {
+      var set1 = _.filter(agents, function(agent) {
+        if (agent.mailCapacity === 0) {
+          return true;
+        } else {
+          return agent.mailCapacity > _.filter(agent.MailRooms, function(room) {
+            return room.id !== report.roomid && room.status !== 'CLOSED'
+          }).length;
+        }
+      });
+      var set2 = [];
+
+      var diff;
+      var agent;
+
+      report.timeslot = ((report.apptimeout - elapsed) > report.queuetimeout) ? report.queuetimeout : (report.apptimeout - elapsed);
+
+      switch (report.strategy) {
+        case 'rrmemory':
+          diff = _.differenceBy(set1, set2, 'name');
+          agent = diff.shift();
+
+          if (agent) {
+            report.available = [{
+              id: agent.id,
+              name: agent.name
+            }];
+
+            set2.push({
+              id: agent.id,
+              name: agent.name
+            });
+            saveReport(report);
+
+          } else {
+            set2 = [];
+            agent = set1.shift();
+
+            if (agent) {
+              set2.push({
+                id: agent.id,
+                name: agent.name
+              });
+              saveReport(report);
+            }
+          }
+
+          break;
+        case 'beepall':
+          report.available = set1;
+          saveReport(report);
+
+          break;
+        default:
+      }
+
+      // APPLICATION TIMEOUT
+      timeout = setTimeout(function() {
+        clearInterval(interval);
+        return callback(null, false);
+      }, report.apptimeout * 1000);
+
+      interval = setInterval(function() {
+        elapsed += report.queuetimeout;
+
+        return Agent
+          .findAll({
+            where: {
+              id: {
+                $in: _.map(report.agents, 'id'),
+              },
+              online: true,
+              mailPause: false
+            },
+            include: [{
+              model: MailRoom,
+              attributes: ['id', 'status']
+            }],
+            attributes: ['id', 'name', 'mailCapacity']
+          })
+          .then(function(agents) {
+            set1 = _.filter(agents, function(agent) {
+              if (agent.mailCapacity === 0) {
+                return true;
+              } else {
+                return agent.mailCapacity > _.filter(agent.MailRooms, function(room) {
+                  return room.id !== report.roomid && room.status !== 'CLOSED'
+                }).length;
+              }
+            });
+
+            report.timeslot = ((report.apptimeout - elapsed) > report.queuetimeout) ? report.queuetimeout : (report.apptimeout - elapsed);
+
+            switch (report.strategy) {
+              case 'rrmemory':
+                diff = _.differenceBy(set1, set2, 'name');
+                agent = diff.shift();
+
+                if (agent) {
+                  report.available = [{
+                    id: agent.id,
+                    name: agent.name
+                  }];
+
+                  set2.push({
+                    id: agent.id,
+                    name: agent.name
+                  });
+
+                  saveReport(report);
+
+                } else {
+                  set2 = [];
+                  agent = set1.shift();
+
+                  if (agent) {
+                    report.available = [{
+                      id: agent.id,
+                      name: agent.name
+                    }];
+
+                    set2.push({
+                      id: agent.id,
+                      name: agent.name
+                    });
+                    saveReport(report);
+                  }
+                }
+
+                break;
+              case 'beepall':
+                report.available = set1;
+                saveReport(report);
+
+                break;
+              default:
+            }
+          })
+          .catch(function(err) {
+            console.error(err);
+          });
+
+      }, report.queuetimeout * 1000);
+
+    })
+    .catch(function(err) {
+      console.error(err);
+    });
+
+  // INTERROMPO IL ROUTING
+  ReportMail.afterUpdate(function(doc) {
+    if (doc.changed('connectid')) {
+      return MailRoom
+        .findById(doc.roomid)
+        .then(function(mailRoom) {
+          return mailRoom
+            .addUser(doc.memberid, {
+              individualHooks: true
+            });
+        })
+        .then(function() {
+          return ReportMailSession
+            .update({
+              application: doc.application,
+              memberid: doc.memberid,
+              membername: doc.membername,
+              queue: doc.queue || null,
+              queuename: doc.queuename || null,
+              fidelity: doc.application === 'fidelity' ? doc.timeslot : null,
+              queuecallerleaveAt: moment().format("YYYY-MM-DD HH:mm:ss")
+            }, {
+              where: {
+                uniqueid: doc.uniqueid
+              },
+              individualHooks: true
+            });
+        })
+        .then(function() {
+          clearInterval(interval);
+          clearTimeout(timeout);
+          return callback(null, true);
+        })
+        .catch(function(err) {
+          console.error(err);
+        });
+    }
+  });
+
+  return {};
+}
+
+function saveReport(report) {
+  var reports = [];
+
+  report.available.forEach(function(agent, index) {
+    reports.push({
+      uniqueid: report.uniqueid,
+      timeslot: report.timeslot,
+      subject: report.subject,
+      accountid: report.accountid,
+      accountname: report.accountname,
+      accountaddress: report.accountaddress,
+      application: report.application,
+      membername: agent.name,
+      memberid: agent.id,
+      queue: report.queue || null,
+      queuename: report.queuename || null,
+      roomid: report.roomid || null,
+      messageid: report.messageid || null,
+      calledAt: moment().format("YYYY-MM-DD HH:mm:ss")
+    });
+  });
+
+  if (reports.length) {
+    return ReportMail
+      .bulkCreate(reports, {
+        individualHooks: true
+      })
+      .catch(function(err) {
+        console.error(err);
+      });
+  }
+}
+
+// Export this file as a module
+module.exports = Session;
index 85a381f..f15b870 100644 (file)
@@ -1 +1,1236 @@
-var _0x9ae8=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x46\x69\x6E\x69\x73\x68\x65\x64\x20\x70\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x75\x73\x65\x72\x73","\x6C\x6F\x67","\x74\x68\x65\x6E","\x6C\x6F\x63\x61\x6C","\x61\x67\x65\x6E\x74","\x47\x69\x75\x73\x65\x70\x70\x65\x20\x43\x61\x72\x65\x72\x69","\x67\x69\x75\x73\x65\x70\x70\x65\x2E\x63\x61\x72\x65\x72\x69\x40\x78\x63\x61\x6C\x6C\x79\x2E\x63\x6F\x6D","\x67\x69\x75\x73\x65\x70\x70\x65\x2E\x63\x61\x72\x65\x72\x69","\x37\x35\x78\x63\x61\x6C\x6C\x79\x37\x35","\x64\x79\x6E\x61\x6D\x69\x63","\x46\x52\x49\x45\x4E\x44","\x75\x64\x70","\x61\x6C\x61\x77\x3B\x75\x6C\x61\x77\x3B\x67\x73\x6D","\x79\x65\x73","\x66\x6F\x72\x63\x65\x5F\x72\x70\x6F\x72\x74\x2C\x63\x6F\x6D\x65\x64\x69\x61","\x61\x6C\x6C","\x66\x72\x6F\x6D\x2D\x73\x69\x70","\x44\x61\x6E\x69\x65\x6C\x65\x20\x43\x69\x6E\x74\x69","\x64\x61\x6E\x69\x65\x6C\x65\x2E\x63\x69\x6E\x74\x69\x40\x78\x63\x61\x6C\x6C\x79\x2E\x63\x6F\x6D","\x64\x61\x6E\x69\x65\x6C\x65\x2E\x63\x69\x6E\x74\x69","\x41\x6E\x64\x72\x65\x61\x20\x42\x69\x61\x6E\x63\x6F","\x61\x6E\x64\x72\x65\x61\x2E\x62\x69\x61\x6E\x63\x6F\x40\x78\x63\x61\x6C\x6C\x79\x2E\x63\x6F\x6D","\x61\x6E\x64\x72\x65\x61\x2E\x62\x69\x61\x6E\x63\x6F","\x4D\x61\x73\x73\x69\x6D\x69\x6C\x69\x61\x6E\x6F\x20\x42\x75\x6E\x67\x61\x72\x6F","\x6D\x61\x73\x73\x69\x6D\x69\x6C\x69\x61\x6E\x6F\x2E\x62\x75\x6E\x67\x61\x72\x6F\x40\x78\x63\x61\x6C\x6C\x79\x2E\x63\x6F\x6D","\x6D\x61\x73\x73\x69\x6D\x69\x6C\x69\x61\x6E\x6F\x2E\x62\x75\x6E\x67\x61\x72\x6F","\x56\x61\x6C\x65\x72\x69\x6F\x20\x43\x69\x6F\x74\x74\x61","\x76\x61\x6C\x65\x72\x69\x6F\x2E\x63\x69\x6F\x74\x74\x61\x40\x78\x63\x61\x6C\x6C\x79\x2E\x63\x6F\x6D","\x76\x61\x6C\x65\x72\x69\x6F\x2E\x63\x69\x6F\x74\x74\x61","\x61\x64\x6D\x69\x6E","\x43\x6C\x61\x72\x6F\x74\x65\x63\x68","\x63\x6C\x61\x72\x6F\x74\x65\x63\x68\x40\x78\x63\x61\x6C\x6C\x79\x2E\x63\x6F\x6D","\x63\x6C\x61\x72\x6F\x74\x65\x63\x68","\x41\x62\x69\x67\x61\x65\x6C","\x61\x62\x69\x67\x61\x65\x6C\x40\x78\x63\x61\x6C\x6C\x79\x2E\x63\x6F\x6D","\x61\x62\x69\x67\x61\x65\x6C","\x54\x6F\x6E\x79\x20\x52\x75\x73\x73\x65\x6C\x6C","\x74\x6F\x6E\x79\x72\x40\x78\x63\x6C\x61\x72\x6F\x74\x65\x63\x68\x2E\x63\x6F\x2E\x7A\x61","\x74\x6F\x6E\x79\x2E\x72\x75\x73\x73\x65\x6C\x6C","\x43\x6F\x6C\x69\x6E\x20\x46\x61\x69\x72","\x63\x6F\x6C\x69\x6E\x66\x40\x78\x63\x6C\x61\x72\x6F\x74\x65\x63\x68\x2E\x63\x6F\x2E\x7A\x61","\x63\x6F\x6C\x69\x6E\x2E\x66\x61\x69\x72","\x44\x69\x65\x67\x6F\x20\x47\x6F\x73\x6D\x61\x72","\x64\x69\x65\x67\x6F\x2E\x67\x6F\x73\x6D\x61\x72\x40\x78\x63\x61\x6C\x6C\x79\x2E\x63\x6F\x6D","\x64\x69\x65\x67\x6F\x2E\x67\x6F\x73\x6D\x61\x72","\x47\x69\x75\x73\x65\x70\x70\x65\x20\x49\x6E\x6E\x61\x6D\x6F\x72\x61\x74\x6F","\x67\x69\x75\x73\x65\x70\x70\x65\x2E\x69\x6E\x6E\x61\x6D\x6F\x72\x61\x74\x6F\x40\x78\x63\x61\x6C\x6C\x79\x2E\x63\x6F\x6D","\x67\x69\x75\x73\x65\x70\x70\x65\x2E\x69\x6E\x6E\x61\x6D\x6F\x72\x61\x74\x6F","\x75\x70\x64","\x41\x6C\x65\x73\x73\x61\x6E\x64\x72\x61\x20\x42\x65\x73\x73\x6F\x6E\x65","\x61\x6C\x65\x73\x73\x61\x6E\x64\x72\x61\x2E\x62\x65\x73\x73\x6F\x6E\x65\x40\x78\x63\x61\x6C\x6C\x79\x2E\x63\x6F\x6D","\x61\x6C\x65\x73\x73\x61\x6E\x64\x72\x61\x2E\x62\x65\x73\x73\x6F\x6E\x65","\x46\x65\x6C\x69\x63\x65\x20\x42\x72\x69\x73\x63\x65\x73\x65","\x66\x65\x6C\x69\x63\x65\x2E\x62\x72\x69\x73\x63\x65\x73\x65\x40\x78\x63\x61\x6C\x6C\x79\x2E\x63\x6F\x6D","\x66\x65\x6C\x69\x63\x65\x2E\x62\x72\x69\x73\x63\x65\x73\x65","\x78\x43\x61\x6C\x6C\x79","\x69\x6E\x66\x6F\x2E\x78\x63\x61\x6C\x6C\x79\x40\x78\x63\x61\x6C\x6C\x79\x2E\x63\x6F\x6D","\x78\x63\x61\x6C\x6C\x79","\x33\x38\x38\x78\x73\x68\x75\x74\x74\x6C\x65\x33\x38\x38","\x4A\x6F\x68\x6E\x20\x44\x6F\x65","\x6A\x6F\x68\x6E\x2E\x64\x6F\x65\x40\x67\x6D\x61\x69\x6C\x2E\x63\x6F\x6D","\x6A\x6F\x68\x6E\x2E\x64\x6F\x65","\x4A\x61\x6E\x65\x20\x4D\x69\x6C\x6C\x65\x72","\x6A\x61\x6E\x65\x2E\x6D\x69\x6C\x6C\x65\x72\x40\x67\x6D\x61\x69\x6C\x2E\x63\x6F\x6D","\x6A\x61\x6E\x65\x2E\x6D\x69\x6C\x6C\x65\x72","\x62\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x55\x73\x65\x72","\x46\x69\x6E\x69\x73\x68\x65\x64\x20\x70\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x74\x72\x75\x6E\x6B\x73","\x63\x69\x74\x61\x6C\x69\x61","\x66\x72\x69\x65\x6E\x64","\x70\x6F\x72\x74\x2C\x69\x6E\x76\x69\x74\x65","\x30\x31\x31\x31\x39\x38\x32\x37\x37\x37\x30","\x54\x21\x4E\x50\x6E\x76\x2D\x71\x6A\x43\x4D\x65\x39\x76","\x66\x72\x6F\x6D\x2D\x76\x6F\x69\x70\x2D\x70\x72\x6F\x76\x69\x64\x65\x72","\x69\x74","\x76\x6F\x69\x70\x2E\x65\x75\x74\x65\x6C\x69\x61\x2E\x69\x74","\x72\x66\x63\x32\x38\x33\x33","\x20\x22\x22\x20\x3C\x3E","\x75\x6C\x61\x77\x3B\x61\x6C\x61\x77\x3B\x67\x73\x6D","\x6E\x6F","\x54\x72\x75\x6E\x6B","\x46\x69\x6E\x69\x73\x68\x65\x64\x20\x70\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x6D\x6F\x64\x75\x6C\x65\x73","\x64\x61\x73\x68\x62\x6F\x61\x72\x64","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x44\x41\x53\x48\x42\x4F\x41\x52\x44","\x75\x73\x65\x72\x73","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x55\x53\x45\x52\x53","\x61\x67\x65\x6E\x74\x73","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x41\x47\x45\x4E\x54\x53","\x74\x65\x61\x6D\x73","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x54\x45\x41\x4D\x53","\x63\x68\x61\x74","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x43\x48\x41\x54","\x76\x6F\x69\x63\x65","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x56\x4F\x49\x43\x45","\x6D\x61\x69\x6C","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x4D\x41\x49\x4C","\x66\x61\x78","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x46\x41\x58","\x61\x75\x64\x69\x6F","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x41\x55\x44\x49\x4F","\x63\x61\x6C\x6C\x79\x73\x71\x75\x61\x72\x65","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x43\x41\x4C\x4C\x59\x53\x51\x55\x41\x52\x45","\x61\x6E\x61\x6C\x79\x74\x69\x63\x73","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x41\x4E\x41\x4C\x59\x54\x49\x43\x53","\x72\x65\x61\x6C\x74\x69\x6D\x65","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x52\x45\x41\x4C\x54\x49\x4D\x45","\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C\x73","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x56\x4F\x49\x43\x45\x4D\x41\x49\x4C\x53","\x73\x65\x74\x74\x69\x6E\x67\x73","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x53\x45\x54\x54\x49\x4E\x47\x53","\x4D\x6F\x64\x75\x6C\x65","\x63\x61\x74\x63\x68","\x46\x69\x6E\x69\x73\x68\x65\x64\x20\x70\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x63\x68\x61\x74\x20\x71\x75\x65\x75\x65\x20\x31","\x69\x64","\x6D\x61\x70","\x61\x64\x64\x55\x73\x65\x72\x73","\x54\x31","\x66\x69\x6E\x64\x4F\x6E\x65","\x54\x65\x61\x6D","\x43\x51\x31","\x43\x51\x31\x20\x44\x65\x73\x63","\x72\x72\x6D\x65\x6D\x6F\x72\x79","\x63\x72\x65\x61\x74\x65","\x43\x68\x61\x74\x51\x75\x65\x75\x65","\x46\x69\x6E\x69\x73\x68\x65\x64\x20\x70\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x6D\x61\x69\x6C\x20\x71\x75\x65\x75\x65\x20\x31","\x74\x65\x61\x6D\x20\x66\x6F\x75\x6E\x64","\x74\x65\x73\x74","\x4D\x51\x31","\x4D\x51\x31\x20\x44\x65\x73\x63","\x4D\x61\x69\x6C\x51\x75\x65\x75\x65","\x46\x69\x6E\x69\x73\x68\x65\x64\x20\x70\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x66\x61\x78\x20\x71\x75\x65\x75\x65\x20\x31","\x46\x51\x31","\x46\x51\x31\x20\x44\x65\x73\x63","\x46\x61\x78\x51\x75\x65\x75\x65","\x66\x69\x6E\x64\x41\x6C\x6C","\x44\x65\x66\x61\x75\x6C\x74\x20\x54\x65\x61\x6D","\x46\x69\x6E\x69\x73\x68\x65\x64\x20\x70\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x6D\x61\x69\x6C\x20\x61\x63\x63\x6F\x75\x6E\x74","\x46\x69\x6E\x69\x73\x68\x65\x64\x20\x70\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x6D\x61\x69\x6C\x20\x73\x65\x72\x76\x65\x72\x20\x69\x6E","\x46\x69\x6E\x69\x73\x68\x65\x64\x20\x70\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x6D\x61\x69\x6C\x20\x73\x65\x72\x76\x65\x72\x20\x6F\x75\x74","\x73\x6D\x74\x70\x2E\x78\x63\x61\x6C\x6C\x79\x2E\x63\x6F\x6D","\x64\x65\x76\x65\x6C\x6F\x70\x6D\x65\x6E\x74\x40\x78\x63\x61\x6C\x6C\x79\x2E\x63\x6F\x6D","\x70\x68\x6F\x6B\x75\x63\x6C\x6F\x6B\x61","\x4D\x61\x69\x6C\x53\x65\x72\x76\x65\x72\x4F\x75\x74","\x69\x6D\x61\x70\x2E\x78\x63\x61\x6C\x6C\x79\x2E\x63\x6F\x6D","\x49\x4E\x42\x4F\x58","\x55\x4E\x53\x45\x45\x4E","\x49\x4D\x41\x50","\x4D\x61\x69\x6C\x53\x65\x72\x76\x65\x72\x49\x6E","\x78\x43\x61\x6C\x6C\x79\x20\x44\x65\x76\x65\x6C\x6F\x70\x6D\x65\x6E\x74","\x4D\x61\x69\x6C\x41\x63\x63\x6F\x75\x6E\x74","\x46\x69\x6E\x69\x73\x68\x65\x64\x20\x70\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x66\x61\x78\x20\x61\x63\x63\x6F\x75\x6E\x74","\x73\x65\x74\x54\x72\x75\x6E\x6B","\x47\x6F\x74\x6F","\x69\x6E\x62\x6F\x75\x6E\x64\x2D\x66\x61\x78\x2C\x73\x2C\x31","\x69\x6E\x62\x6F\x75\x6E\x64\x2D\x66\x61\x78","\x56\x6F\x69\x63\x65\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x46\x69\x6E\x69\x73\x68\x65\x64\x20\x70\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x63\x68\x61\x74\x20\x77\x65\x62\x73\x69\x74\x65\x20\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x20\x31","\x71\x75\x65\x75\x65","\x46\x61\x78\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x46\x69\x6E\x69\x73\x68\x65\x64\x20\x70\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x63\x68\x61\x74\x20\x77\x65\x62\x73\x69\x74\x65\x20\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x20\x32","\x46\x41\x31\x20\x44\x65\x73\x63","\x46\x41\x31","\x78\x43\x41\x4C\x4C\x59","\x39\x36\x30\x30","\x31\x34\x34\x30\x30","\x46\x61\x78\x41\x63\x63\x6F\x75\x6E\x74","\x46\x69\x6E\x69\x73\x68\x65\x64\x20\x70\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x66\x61\x78\x20\x6F\x75\x74\x62\x6F\x75\x6E\x64\x20\x76\x6F\x69\x63\x65\x20\x65\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x6F\x75\x74\x62\x6F\x75\x6E\x64\x2D\x66\x61\x78","\x73","\x4E\x6F\x4F\x70","\x46\x61\x78\x20\x55\x55\x49\x44\x3A\x20\x24\x7B\x46\x41\x58\x55\x55\x49\x44\x7D","\x55\x73\x65\x72\x45\x76\x65\x6E\x74","\x46\x61\x78\x2C\x75\x75\x69\x64\x3A\x20\x24\x7B\x46\x41\x58\x55\x55\x49\x44\x7D","\x53\x65\x74","\x46\x41\x58\x4F\x50\x54\x28\x66\x69\x6C\x65\x6E\x61\x6D\x65\x29\x3A\x24\x7B\x46\x41\x58\x46\x49\x4C\x45\x7D","\x46\x41\x58\x4F\x50\x54\x28\x65\x63\x6D\x29\x3A\x24\x7B\x45\x43\x4D\x7D","\x46\x41\x58\x4F\x50\x54\x28\x68\x65\x61\x64\x65\x72\x69\x6E\x66\x6F\x29\x3A\x24\x7B\x46\x41\x58\x48\x45\x41\x44\x45\x52\x7D","\x46\x41\x58\x4F\x50\x54\x28\x6C\x6F\x63\x61\x6C\x73\x74\x61\x74\x69\x6F\x6E\x69\x64\x29\x3A\x24\x7B\x4C\x4F\x43\x41\x4C\x49\x44\x7D","\x46\x41\x58\x4F\x50\x54\x28\x6D\x61\x78\x72\x61\x74\x65\x29\x3A\x24\x7B\x4D\x41\x58\x52\x41\x54\x45\x7D","\x46\x41\x58\x4F\x50\x54\x28\x6D\x69\x6E\x72\x61\x74\x65\x29\x3A\x24\x7B\x4D\x49\x4E\x52\x41\x54\x45\x7D","\x53\x65\x6E\x64\x46\x41\x58","\x24\x7B\x46\x41\x58\x46\x49\x4C\x45\x7D\x2C\x64","\x45\x52\x52\x4F\x52\x20\x22\x24\x7B\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x7D\x22\x20\x22\x4E\x4F\x5F\x53\x54\x41\x54\x55\x53\x22\x20\x22\x4E\x4F\x5F\x50\x41\x47\x45\x53\x22","\x68","\x46\x41\x58\x4F\x50\x54\x28\x65\x63\x6D\x29\x20\x3A\x20\x24\x7B\x46\x41\x58\x4F\x50\x54\x28\x65\x63\x6D\x29\x7D","\x46\x61\x78\x53\x74\x61\x74\x75\x73\x20\x3A\x20\x24\x7B\x46\x41\x58\x53\x54\x41\x54\x55\x53\x7D","\x46\x61\x78\x53\x74\x61\x74\x75\x73\x53\x74\x72\x69\x6E\x67\x20\x3A\x20\x24\x7B\x46\x41\x58\x53\x54\x41\x54\x55\x53\x53\x54\x52\x49\x4E\x47\x7D","\x46\x61\x78\x45\x72\x72\x6F\x72\x20\x3A\x20\x24\x7B\x46\x41\x58\x45\x52\x52\x4F\x52\x7D","\x52\x65\x6D\x6F\x74\x65\x53\x74\x61\x74\x69\x6F\x6E\x49\x44\x20\x3A\x20\x24\x7B\x52\x45\x4D\x4F\x54\x45\x53\x54\x41\x54\x49\x4F\x4E\x49\x44\x7D","\x46\x61\x78\x50\x61\x67\x65\x73\x20\x3A\x20\x24\x7B\x46\x41\x58\x50\x41\x47\x45\x53\x7D","\x46\x61\x78\x42\x69\x74\x52\x61\x74\x65\x20\x3A\x20\x24\x7B\x46\x41\x58\x42\x49\x54\x52\x41\x54\x45\x7D","\x46\x61\x78\x52\x65\x73\x6F\x6C\x75\x74\x69\x6F\x6E\x20\x3A\x20\x24\x7B\x46\x41\x58\x52\x45\x53\x4F\x4C\x55\x54\x49\x4F\x4E\x7D","\x4F\x4B\x20\x22\x24\x7B\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x7D\x22\x20\x22\x24\x7B\x46\x41\x58\x53\x54\x41\x54\x55\x53\x53\x54\x52\x49\x4E\x47\x7D\x22\x20\x22\x24\x7B\x46\x41\x58\x50\x41\x47\x45\x53\x7D\x22","\x2A\x2A\x2A\x2A\x20\x46\x41\x58\x20\x52\x45\x43\x45\x49\x56\x45\x44\x20\x66\x72\x6F\x6D\x20\x24\x7B\x43\x41\x4C\x4C\x45\x52\x49\x44\x28\x6E\x75\x6D\x29\x7D\x20\x24\x7B\x53\x54\x52\x46\x54\x49\x4D\x45\x28\x24\x7B\x45\x50\x4F\x43\x48\x7D\x2C\x2C\x25\x63\x29\x7D\x20\x2A\x2A\x2A\x2A","\x46\x41\x58\x4F\x50\x54\x28\x65\x63\x6D\x29\x3A\x79\x65\x73","\x46\x49\x4C\x45\x4E\x41\x4D\x45\x3A\x24\x7B\x55\x4E\x49\x51\x55\x45\x49\x44\x7D","\x46\x41\x58\x46\x49\x4C\x45\x3A\x24\x7B\x46\x49\x4C\x45\x4E\x41\x4D\x45\x7D\x2E\x74\x69\x66","\x46\x41\x58\x4F\x50\x54\x28\x68\x65\x61\x64\x65\x72\x69\x6E\x66\x6F\x29\x3A\x52\x65\x63\x65\x69\x76\x65\x64\x20\x62\x79\x20\x58\x65\x6E\x69\x61\x4C\x41\x42\x20\x24\x7B\x53\x54\x52\x46\x54\x49\x4D\x45\x28\x24\x7B\x45\x50\x4F\x43\x48\x7D\x2C\x2C\x25\x59\x2D\x25\x6D\x2D\x25\x64\x20\x25\x48\x3A\x25\x4D\x29\x7D","\x46\x41\x58\x4F\x50\x54\x28\x68\x65\x61\x64\x65\x72\x69\x6E\x66\x6F\x29\x20\x3A\x20\x24\x7B\x46\x41\x58\x4F\x50\x54\x28\x68\x65\x61\x64\x65\x72\x69\x6E\x66\x6F\x29\x7D","\x46\x41\x58\x4F\x50\x54\x28\x6C\x6F\x63\x61\x6C\x73\x74\x61\x74\x69\x6F\x6E\x69\x64\x29\x20\x3A\x20\x24\x7B\x46\x41\x58\x4F\x50\x54\x28\x6C\x6F\x63\x61\x6C\x73\x74\x61\x74\x69\x6F\x6E\x69\x64\x29\x7D","\x46\x41\x58\x4F\x50\x54\x28\x6D\x61\x78\x72\x61\x74\x65\x29\x20\x3A\x20\x24\x7B\x46\x41\x58\x4F\x50\x54\x28\x6D\x61\x78\x72\x61\x74\x65\x29\x7D","\x46\x41\x58\x4F\x50\x54\x28\x6D\x69\x6E\x72\x61\x74\x65\x29\x20\x3A\x20\x24\x7B\x46\x41\x58\x4F\x50\x54\x28\x6D\x69\x6E\x72\x61\x74\x65\x29\x7D","\x2A\x2A\x2A\x2A\x20\x52\x45\x43\x45\x49\x56\x49\x4E\x47\x20\x46\x41\x58\x20\x3A\x20\x24\x7B\x46\x41\x58\x46\x49\x4C\x45\x7D\x20\x2A\x2A\x2A\x2A","\x52\x65\x63\x65\x69\x76\x65\x46\x61\x78","\x2F\x74\x6D\x70\x2F\x24\x7B\x46\x41\x58\x46\x49\x4C\x45\x7D","\x48\x61\x6E\x67\x75\x70","\x46\x69\x6E\x69\x73\x68\x65\x64\x20\x70\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x73\x71\x75\x61\x72\x65\x20\x70\x72\x6F\x6A\x65\x63\x74\x73","\x70\x72\x6F\x6A\x65\x63\x74\x31","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x20\x70\x72\x6F\x6A\x65\x63\x74","\x53\x71\x75\x61\x72\x65\x50\x72\x6F\x6A\x65\x63\x74","\x46\x69\x6E\x69\x73\x68\x65\x64\x20\x70\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x63\x68\x61\x74\x20\x77\x65\x62\x73\x69\x74\x65","\x43\x68\x61\x74\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x78\x43\x61\x6C\x6C\x79\x20\x53\x68\x6F\x70","\x68\x74\x74\x70\x3A\x2F\x2F\x77\x77\x77\x2E\x78\x63\x61\x6C\x6C\x79\x2E\x63\x6F\x6D\x2F\x73\x68\x6F\x70\x2F","\x23\x66\x35\x31\x31\x31\x31","\x68\x74\x74\x70\x3A\x2F\x2F\x6C\x6F\x63\x61\x6C\x68\x6F\x73\x74\x3A\x39\x30\x30\x30","\x73\x71\x75\x61\x72\x65\x64","\x57\x65\x20\x61\x72\x65\x20\x68\x65\x72\x65\x21","\x51\x75\x65\x73\x74\x69\x6F\x6E\x73\x3F\x20\x49\x6E\x73\x65\x72\x74\x20\x79\x6F\x75\x72\x20\x6E\x61\x6D\x65\x20\x61\x6E\x64\x20\x65\x6D\x61\x69\x6C\x20\x61\x64\x64\x72\x65\x73\x73\x20\x74\x6F\x20\x73\x74\x61\x72\x74\x20\x61\x20\x6C\x69\x76\x65\x2D\x63\x68\x61\x74\x20\x77\x69\x74\x68\x20\x6F\x75\x72\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x74\x65\x61\x6D\x2E","\x59\x6F\x75\x72\x20\x6E\x61\x6D\x65","\x59\x6F\x75\x72\x20\x65\x6D\x61\x69\x6C\x20\x61\x64\x64\x72\x65\x73\x73","\x43\x68\x61\x74","\x43\x6F\x6E\x74\x61\x63\x74\x20\x75\x73","\x3C\x73\x74\x72\x6F\x6E\x67\x3E\x57\x65\x27\x72\x65\x20\x6E\x6F\x74\x20\x6F\x6E\x6C\x69\x6E\x65\x2E\x3C\x2F\x73\x74\x72\x6F\x6E\x67\x3E\x3C\x62\x72\x20\x2F\x3E\x49\x74\x20\x64\x6F\x65\x73\x6E\x27\x74\x20\x6D\x65\x61\x6E\x20\x77\x65\x27\x72\x65\x20\x6E\x6F\x74\x20\x74\x68\x65\x72\x65\x20\x74\x6F\x20\x68\x65\x6C\x70\x20\x2D\x20\x6C\x65\x61\x76\x65\x20\x79\x6F\x75\x72\x20\x6D\x65\x73\x73\x61\x67\x65\x20\x62\x65\x6C\x6F\x77\x20\x61\x6E\x64\x20\x77\x65\x27\x6C\x6C\x20\x62\x65\x20\x69\x6E\x20\x74\x6F\x75\x63\x68\x20\x61\x73\x20\x73\x6F\x6F\x6E\x20\x61\x73\x20\x70\x6F\x73\x73\x69\x62\x6C\x65\x2E\x27","\x59\x6F\x75\x72\x20\x6D\x65\x73\x73\x61\x67\x65\x2E\x2E\x2E","\x4C\x65\x61\x76\x65\x20\x6D\x65\x73\x73\x61\x67\x65","\x43\x68\x61\x74\x57\x65\x62\x73\x69\x74\x65","\x46\x69\x6E\x69\x73\x68\x65\x64\x20\x70\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x73","\x76\x61\x72\x69\x61\x62\x6C\x65\x31","\x56\x61\x72\x69\x61\x62\x6C\x65","\x46\x69\x6E\x69\x73\x68\x65\x64\x20\x70\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x63\x6F\x6E\x74\x65\x78\x74\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x73","\x44\x65\x66\x61\x75\x6C\x74\x20\x63\x6F\x6E\x74\x65\x78\x74\x20\x28\x44\x4F\x20\x4E\x4F\x54\x20\x44\x45\x4C\x45\x54\x45\x29","\x66\x72\x6F\x6D\x2D\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C","\x56\x6F\x69\x63\x65\x43\x6F\x6E\x74\x65\x78\x74","\x46\x69\x6E\x69\x73\x68\x65\x64\x20\x70\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x6D\x6F\x68\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x73","\x64\x65\x66\x61\x75\x6C\x74","\x66\x69\x6C\x65\x73","\x76\x61\x72\x2F\x6C\x69\x62\x2F\x61\x73\x74\x65\x72\x69\x73\x6B\x2F\x6D\x6F\x68","\x61\x6C\x70\x68\x61","\x77\x61\x76","\x56\x6F\x69\x63\x65\x4D\x75\x73\x69\x63\x4F\x6E\x48\x6F\x6C\x64","\x2F\x76\x61\x72\x2F\x6F\x70\x74\x2F\x6D\x6F\x74\x69\x6F\x6E\x2F\x73\x65\x72\x76\x65\x72\x2F\x66\x69\x6C\x65\x73\x2F\x73\x6F\x75\x6E\x64\x73\x2F\x63\x6F\x6E\x76\x65\x72\x74\x65\x64","\x53\x65\x74\x74\x69\x6E\x67\x73","\x4D\x6F\x74\x69\x6F\x6E\x20\x44\x61\x73\x68\x62\x6F\x61\x72\x64","\x63\x6F\x6C\x2D\x6D\x64\x2D\x34","\x63\x6C\x6F\x63\x6B","\x43\x6C\x6F\x63\x6B","\x68\x68\x3A\x6D\x6D\x3A\x73\x73\x20\x61","\x64\x64\x64\x64\x2C\x20\x4D\x4D\x4D\x4D\x20\x44\x6F\x20\x59\x59\x59\x59","\x63\x6F\x6C\x2D\x6D\x64\x2D\x38","\x69\x66\x72\x61\x6D\x65","\x49\x66\x72\x61\x6D\x65","\x68\x74\x74\x70\x73\x3A\x2F\x2F\x64\x65\x6D\x6F\x2E\x78\x63\x61\x6C\x6C\x79\x2E\x63\x6F\x6D\x2F\x73\x68\x6F\x70\x2F","\x73\x74\x72\x69\x6E\x67\x69\x66\x79","\x44\x61\x73\x68\x62\x6F\x61\x72\x64","\x46\x69\x6E\x69\x73\x68\x65\x64\x20\x70\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x73","\x5A\x65\x6E\x64\x65\x73\x6B","\x31\x2E\x30\x2E\x30","\x58\x65\x6E\x69\x61\x4C\x41\x42\x20\x73\x2E\x72\x2E\x6C\x2E","\x61\x73\x73\x65\x74\x73\x2F\x69\x6D\x61\x67\x65\x73\x2F\x6D\x65\x64\x69\x61\x2F\x7A\x65\x6E\x64\x65\x73\x6B\x32\x2E\x70\x6E\x67","\x7A\x65\x6E\x64\x65\x73\x6B","\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x20\x66\x6F\x72\x20\x5A\x65\x6E\x64\x65\x73\x6B","\x44\x65\x73\x6B\x2E\x63\x6F\x6D","\x61\x73\x73\x65\x74\x73\x2F\x69\x6D\x61\x67\x65\x73\x2F\x6D\x65\x64\x69\x61\x2F\x64\x65\x73\x6B\x32\x2E\x70\x6E\x67","\x64\x65\x73\x6B","\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x20\x66\x6F\x72\x20\x44\x65\x73\x6B\x2E\x63\x6F\x6D","\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65","\x61\x73\x73\x65\x74\x73\x2F\x69\x6D\x61\x67\x65\x73\x2F\x6D\x65\x64\x69\x61\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x32\x2E\x70\x6E\x67","\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65","\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x20\x66\x6F\x72\x20\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65","\x46\x72\x65\x73\x68\x64\x65\x73\x6B","\x61\x73\x73\x65\x74\x73\x2F\x69\x6D\x61\x67\x65\x73\x2F\x6D\x65\x64\x69\x61\x2F\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x2E\x70\x6E\x67","\x66\x72\x65\x73\x68\x64\x65\x73\x6B","\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x20\x66\x6F\x72\x20\x46\x72\x65\x73\x68\x64\x65\x73\x6B","\x53\x75\x67\x61\x72\x43\x52\x4D","\x61\x73\x73\x65\x74\x73\x2F\x69\x6D\x61\x67\x65\x73\x2F\x6D\x65\x64\x69\x61\x2F\x73\x75\x67\x61\x72\x63\x72\x6D\x32\x2E\x70\x6E\x67","\x73\x75\x67\x61\x72\x63\x72\x6D","\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x20\x66\x6F\x72\x20\x53\x75\x67\x61\x72\x43\x52\x4D","\x49\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x5B\x7B\x22\x69\x64\x22\x3A\x22\x31\x22\x2C\x22\x70\x61\x72\x65\x6E\x74\x22\x3A\x22\x23\x22\x2C\x22\x74\x65\x78\x74\x22\x3A\x22\x4D\x6F\x74\x69\x6F\x6E\x20\x52\x65\x70\x6F\x72\x74\x73\x22\x2C\x22\x69\x63\x6F\x6E\x22\x3A\x22\x69\x63\x6F\x6E\x2D\x72\x6F\x63\x6B\x65\x74\x22\x2C\x22\x73\x74\x61\x74\x65\x22\x3A\x7B\x22\x73\x65\x6C\x65\x63\x74\x65\x64\x22\x3A\x74\x72\x75\x65\x2C\x22\x6F\x70\x65\x6E\x65\x64\x22\x3A\x74\x72\x75\x65\x7D\x7D\x2C\x7B\x22\x69\x64\x22\x3A\x22\x32\x22\x2C\x22\x70\x61\x72\x65\x6E\x74\x22\x3A\x22\x31\x22\x2C\x22\x74\x65\x78\x74\x22\x3A\x22\x42\x61\x73\x69\x63\x20\x4E\x6F\x64\x65\x22\x2C\x22\x73\x74\x61\x74\x65\x22\x3A\x7B\x22\x73\x65\x6C\x65\x63\x74\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x6F\x70\x65\x6E\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x7D\x7D\x5D","\x5B\x7B\x22\x69\x64\x22\x3A\x22\x31\x22\x2C\x22\x74\x65\x78\x74\x22\x3A\x22\x43\x75\x73\x74\x6F\x6D\x20\x52\x65\x70\x6F\x72\x74\x73\x22\x2C\x22\x69\x63\x6F\x6E\x22\x3A\x22\x69\x63\x6F\x6E\x2D\x62\x6F\x6F\x6B\x2D\x6F\x70\x65\x6E\x22\x2C\x22\x6C\x69\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x69\x64\x22\x3A\x22\x31\x22\x7D\x2C\x22\x61\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x68\x72\x65\x66\x22\x3A\x22\x23\x22\x2C\x22\x69\x64\x22\x3A\x22\x31\x5F\x61\x6E\x63\x68\x6F\x72\x22\x7D\x2C\x22\x73\x74\x61\x74\x65\x22\x3A\x7B\x22\x6C\x6F\x61\x64\x65\x64\x22\x3A\x74\x72\x75\x65\x2C\x22\x6F\x70\x65\x6E\x65\x64\x22\x3A\x74\x72\x75\x65\x2C\x22\x73\x65\x6C\x65\x63\x74\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x64\x69\x73\x61\x62\x6C\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x7D\x2C\x22\x64\x61\x74\x61\x22\x3A\x7B\x7D\x2C\x22\x70\x61\x72\x65\x6E\x74\x22\x3A\x22\x23\x22\x7D\x2C\x7B\x22\x69\x64\x22\x3A\x22\x32\x22\x2C\x22\x74\x65\x78\x74\x22\x3A\x22\x42\x61\x73\x69\x63\x20\x4E\x6F\x64\x65\x22\x2C\x22\x69\x63\x6F\x6E\x22\x3A\x74\x72\x75\x65\x2C\x22\x6C\x69\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x69\x64\x22\x3A\x22\x32\x22\x7D\x2C\x22\x61\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x68\x72\x65\x66\x22\x3A\x22\x23\x22\x2C\x22\x69\x64\x22\x3A\x22\x32\x5F\x61\x6E\x63\x68\x6F\x72\x22\x7D\x2C\x22\x73\x74\x61\x74\x65\x22\x3A\x7B\x22\x6C\x6F\x61\x64\x65\x64\x22\x3A\x74\x72\x75\x65\x2C\x22\x6F\x70\x65\x6E\x65\x64\x22\x3A\x74\x72\x75\x65\x2C\x22\x73\x65\x6C\x65\x63\x74\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x64\x69\x73\x61\x62\x6C\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x7D\x2C\x22\x64\x61\x74\x61\x22\x3A\x7B\x7D\x2C\x22\x70\x61\x72\x65\x6E\x74\x22\x3A\x22\x31\x22\x7D\x5D","\x52\x65\x70\x6F\x72\x74\x54\x72\x65\x65","\x4D\x6F\x74\x69\x6F\x6E\x20\x53\x65\x72\x76\x69\x63\x65","\x53\x65\x72\x76\x69\x63\x65"];_0x9ae8[0];var _=require(_0x9ae8[1]);var models=require(_0x9ae8[2]);models[_0x9ae8[69]][_0x9ae8[68]]([{provider:_0x9ae8[6],role:_0x9ae8[7],fullname:_0x9ae8[8],email:_0x9ae8[9],name:_0x9ae8[10],password:_0x9ae8[11],defaultuser:_0x9ae8[10],host:_0x9ae8[12],type:_0x9ae8[13],transport:_0x9ae8[14],allow:_0x9ae8[15],qualify:_0x9ae8[16],nat:_0x9ae8[17],disallow:_0x9ae8[18],context:_0x9ae8[19],internal:1000},{provider:_0x9ae8[6],role:_0x9ae8[7],fullname:_0x9ae8[20],email:_0x9ae8[21],name:_0x9ae8[22],password:_0x9ae8[11],defaultuser:_0x9ae8[22],host:_0x9ae8[12],type:_0x9ae8[13],transport:_0x9ae8[14],allow:_0x9ae8[15],qualify:_0x9ae8[16],nat:_0x9ae8[17],disallow:_0x9ae8[18],context:_0x9ae8[19],internal:1001},{provider:_0x9ae8[6],role:_0x9ae8[7],fullname:_0x9ae8[23],email:_0x9ae8[24],name:_0x9ae8[25],password:_0x9ae8[11],defaultuser:_0x9ae8[25],host:_0x9ae8[12],type:_0x9ae8[13],transport:_0x9ae8[14],allow:_0x9ae8[15],qualify:_0x9ae8[16],nat:_0x9ae8[17],disallow:_0x9ae8[18],context:_0x9ae8[19],internal:1002},{provider:_0x9ae8[6],role:_0x9ae8[7],fullname:_0x9ae8[26],email:_0x9ae8[27],name:_0x9ae8[28],password:_0x9ae8[11],defaultuser:_0x9ae8[28],host:_0x9ae8[12],type:_0x9ae8[13],transport:_0x9ae8[14],allow:_0x9ae8[15],qualify:_0x9ae8[16],nat:_0x9ae8[17],disallow:_0x9ae8[18],context:_0x9ae8[19],internal:1003},{provider:_0x9ae8[6],role:_0x9ae8[7],fullname:_0x9ae8[29],email:_0x9ae8[30],name:_0x9ae8[31],password:_0x9ae8[11],defaultuser:_0x9ae8[31],host:_0x9ae8[12],type:_0x9ae8[13],transport:_0x9ae8[14],allow:_0x9ae8[15],qualify:_0x9ae8[16],nat:_0x9ae8[17],disallow:_0x9ae8[18],context:_0x9ae8[19],internal:1004},{provider:_0x9ae8[6],role:_0x9ae8[32],fullname:_0x9ae8[33],email:_0x9ae8[34],name:_0x9ae8[35],password:_0x9ae8[35],defaultuser:_0x9ae8[35],host:_0x9ae8[12],type:_0x9ae8[13],transport:_0x9ae8[14],allow:_0x9ae8[15],qualify:_0x9ae8[16],nat:_0x9ae8[17],disallow:_0x9ae8[18],context:_0x9ae8[19],internal:1005},{provider:_0x9ae8[6],role:_0x9ae8[7],fullname:_0x9ae8[36],email:_0x9ae8[37],name:_0x9ae8[38],password:_0x9ae8[11],defaultuser:_0x9ae8[38],host:_0x9ae8[12],type:_0x9ae8[13],transport:_0x9ae8[14],allow:_0x9ae8[15],qualify:_0x9ae8[16],nat:_0x9ae8[17],disallow:_0x9ae8[18],context:_0x9ae8[19],internal:1006},{provider:_0x9ae8[6],role:_0x9ae8[7],fullname:_0x9ae8[39],email:_0x9ae8[40],name:_0x9ae8[41],password:_0x9ae8[35],defaultuser:_0x9ae8[41],host:_0x9ae8[12],type:_0x9ae8[13],transport:_0x9ae8[14],allow:_0x9ae8[15],qualify:_0x9ae8[16],nat:_0x9ae8[17],disallow:_0x9ae8[18],context:_0x9ae8[19],internal:1007},{provider:_0x9ae8[6],role:_0x9ae8[7],fullname:_0x9ae8[42],email:_0x9ae8[43],name:_0x9ae8[44],password:_0x9ae8[35],defaultuser:_0x9ae8[44],host:_0x9ae8[12],type:_0x9ae8[13],transport:_0x9ae8[14],allow:_0x9ae8[15],qualify:_0x9ae8[16],nat:_0x9ae8[17],disallow:_0x9ae8[18],context:_0x9ae8[19],internal:1008},{provider:_0x9ae8[6],role:_0x9ae8[7],fullname:_0x9ae8[45],email:_0x9ae8[46],name:_0x9ae8[47],password:_0x9ae8[11],defaultuser:_0x9ae8[47],host:_0x9ae8[12],type:_0x9ae8[13],transport:_0x9ae8[14],allow:_0x9ae8[15],qualify:_0x9ae8[16],nat:_0x9ae8[17],disallow:_0x9ae8[18],context:_0x9ae8[19],internal:1009},{provider:_0x9ae8[6],role:_0x9ae8[7],fullname:_0x9ae8[48],email:_0x9ae8[49],name:_0x9ae8[50],password:_0x9ae8[11],defaultuser:_0x9ae8[50],host:_0x9ae8[12],type:_0x9ae8[13],transport:_0x9ae8[51],allow:_0x9ae8[15],qualify:_0x9ae8[16],nat:_0x9ae8[17],disallow:_0x9ae8[18],context:_0x9ae8[19],internal:1010},{provider:_0x9ae8[6],role:_0x9ae8[7],fullname:_0x9ae8[52],email:_0x9ae8[53],name:_0x9ae8[54],password:_0x9ae8[11],defaultuser:_0x9ae8[54],host:_0x9ae8[12],type:_0x9ae8[13],transport:_0x9ae8[51],allow:_0x9ae8[15],qualify:_0x9ae8[16],nat:_0x9ae8[17],disallow:_0x9ae8[18],context:_0x9ae8[19],internal:1011},{provider:_0x9ae8[6],role:_0x9ae8[7],fullname:_0x9ae8[55],email:_0x9ae8[56],name:_0x9ae8[57],password:_0x9ae8[11],defaultuser:_0x9ae8[57],host:_0x9ae8[12],type:_0x9ae8[13],transport:_0x9ae8[51],allow:_0x9ae8[15],qualify:_0x9ae8[16],nat:_0x9ae8[17],disallow:_0x9ae8[18],context:_0x9ae8[19],internal:1012},{provider:_0x9ae8[6],role:_0x9ae8[32],fullname:_0x9ae8[58],email:_0x9ae8[59],name:_0x9ae8[60],password:_0x9ae8[61],defaultuser:_0x9ae8[60],host:_0x9ae8[12],type:_0x9ae8[13],transport:_0x9ae8[14],allow:_0x9ae8[15],qualify:_0x9ae8[16],nat:_0x9ae8[17],disallow:_0x9ae8[18],context:_0x9ae8[19],internal:1013},{provider:_0x9ae8[6],role:_0x9ae8[7],fullname:_0x9ae8[62],email:_0x9ae8[63],name:_0x9ae8[64],password:_0x9ae8[11],defaultuser:_0x9ae8[64],host:_0x9ae8[12],type:_0x9ae8[13],transport:_0x9ae8[14],allow:_0x9ae8[15],qualify:_0x9ae8[16],nat:_0x9ae8[17],disallow:_0x9ae8[18],context:_0x9ae8[19],internal:1014},{provider:_0x9ae8[6],role:_0x9ae8[7],fullname:_0x9ae8[65],email:_0x9ae8[66],name:_0x9ae8[67],password:_0x9ae8[11],defaultuser:_0x9ae8[67],host:_0x9ae8[12],type:_0x9ae8[13],transport:_0x9ae8[14],allow:_0x9ae8[15],qualify:_0x9ae8[16],nat:_0x9ae8[17],disallow:_0x9ae8[18],context:_0x9ae8[19],internal:1015}],{ignoreDuplicates:true,individualHooks:true})[_0x9ae8[5]](function(){console[_0x9ae8[4]](_0x9ae8[3])});models[_0x9ae8[83]][_0x9ae8[68]]([{name:_0x9ae8[71],type:_0x9ae8[72],insecure:_0x9ae8[73],defaultuser:_0x9ae8[74],secret:_0x9ae8[75],password:_0x9ae8[75],context:_0x9ae8[76],language:_0x9ae8[77],host:_0x9ae8[78],fromdomain:_0x9ae8[78],dtmfmode:_0x9ae8[79],qualify:_0x9ae8[16],nat:_0x9ae8[17],callerid:_0x9ae8[80],limitonpeers:_0x9ae8[16],callcounter:_0x9ae8[16],disallow:_0x9ae8[18],allow:_0x9ae8[81],canreinvite:_0x9ae8[82],directmedia:_0x9ae8[82]}],{ignoreDuplicates:true,individualHooks:true})[_0x9ae8[5]](function(){console[_0x9ae8[4]](_0x9ae8[70])});models[_0x9ae8[113]][_0x9ae8[68]]([{name:_0x9ae8[85],title:_0x9ae8[86]},{name:_0x9ae8[87],title:_0x9ae8[88]},{name:_0x9ae8[89],title:_0x9ae8[90]},{name:_0x9ae8[91],title:_0x9ae8[92]},{name:_0x9ae8[93],title:_0x9ae8[94]},{name:_0x9ae8[95],title:_0x9ae8[96]},{name:_0x9ae8[97],title:_0x9ae8[98]},{name:_0x9ae8[99],title:_0x9ae8[100]},{name:_0x9ae8[101],title:_0x9ae8[102]},{name:_0x9ae8[103],title:_0x9ae8[104]},{name:_0x9ae8[105],title:_0x9ae8[106]},{name:_0x9ae8[107],title:_0x9ae8[108]},{name:_0x9ae8[109],title:_0x9ae8[110]},{name:_0x9ae8[111],title:_0x9ae8[112]}],{ignoreDuplicates:true})[_0x9ae8[5]](function(){console[_0x9ae8[4]](_0x9ae8[84])});models[_0x9ae8[121]][_0x9ae8[125]]({name:_0x9ae8[119],description:_0x9ae8[138],defaultEntry:true})[_0x9ae8[5]](function(_0x48bax4){models[_0x9ae8[69]][_0x9ae8[137]]({where:{role:_0x9ae8[7]}})[_0x9ae8[5]](function(_0x48bax5){_0x48bax4[_0x9ae8[118]](_[_0x9ae8[117]](_0x48bax5,_0x9ae8[116]))[_0x9ae8[5]](function(){models[_0x9ae8[126]][_0x9ae8[125]]({name:_0x9ae8[122],description:_0x9ae8[123],timeout:5,strategy:_0x9ae8[124]})[_0x9ae8[5]](function(_0x48bax6){console[_0x9ae8[4]](_0x9ae8[115]);models[_0x9ae8[121]][_0x9ae8[120]]({where:{name:_0x9ae8[119]},include:[{all:true}]})[_0x9ae8[5]](function(_0x48bax4){_0x48bax6[_0x9ae8[118]](_[_0x9ae8[117]](_0x48bax4.Users,_0x9ae8[116]))[_0x9ae8[114]](function(_0x48bax3){})})[_0x9ae8[114]](function(_0x48bax3){})});models[_0x9ae8[132]][_0x9ae8[125]]({name:_0x9ae8[130],description:_0x9ae8[131],timeout:5,strategy:_0x9ae8[124]})[_0x9ae8[5]](function(_0x48bax7){console[_0x9ae8[4]](_0x9ae8[127]);models[_0x9ae8[121]][_0x9ae8[120]]({where:{name:_0x9ae8[119]},include:[{all:true}]})[_0x9ae8[5]](function(_0x48bax4){if(_0x48bax4){console[_0x9ae8[4]](_0x9ae8[128])}else {console[_0x9ae8[4]](_0x9ae8[129])};_0x48bax7[_0x9ae8[118]](_[_0x9ae8[117]](_0x48bax4.Users,_0x9ae8[116]))[_0x9ae8[114]](function(_0x48bax3){})})[_0x9ae8[114]](function(_0x48bax3){})});models[_0x9ae8[136]][_0x9ae8[125]]({name:_0x9ae8[134],description:_0x9ae8[135],timeout:5,strategy:_0x9ae8[124]})[_0x9ae8[5]](function(_0x48bax8){console[_0x9ae8[4]](_0x9ae8[133]);models[_0x9ae8[121]][_0x9ae8[120]]({where:{name:_0x9ae8[119]},include:[{all:true}]})[_0x9ae8[5]](function(_0x48bax4){_0x48bax8[_0x9ae8[118]](_[_0x9ae8[117]](_0x48bax4.Users,_0x9ae8[116]))[_0x9ae8[114]](function(_0x48bax3){})})[_0x9ae8[114]](function(_0x48bax3){})})})[_0x9ae8[114]](function(_0x48bax3){})})[_0x9ae8[114]](function(_0x48bax3){})})[_0x9ae8[114]](function(_0x48bax3){});models[_0x9ae8[152]][_0x9ae8[125]]({name:_0x9ae8[151],description:_0x9ae8[151],address:_0x9ae8[143]})[_0x9ae8[5]](function(_0x48bax9){console[_0x9ae8[4]](_0x9ae8[139]);models[_0x9ae8[150]][_0x9ae8[125]]({description:_0x9ae8[60],host:_0x9ae8[146],username:_0x9ae8[143],password:_0x9ae8[144],port:143,mailbox:_0x9ae8[147],ssl:false,delete:false,filter:_0x9ae8[148],protocol:_0x9ae8[149],MailAccountId:_0x48bax9[_0x9ae8[116]]})[_0x9ae8[5]](function(){console[_0x9ae8[4]](_0x9ae8[140]);models[_0x9ae8[145]][_0x9ae8[125]]({description:_0x9ae8[60],host:_0x9ae8[142],username:_0x9ae8[143],password:_0x9ae8[144],port:587,ssl:false,MailAccountId:_0x48bax9[_0x9ae8[116]]})[_0x9ae8[5]](function(){console[_0x9ae8[4]](_0x9ae8[141])})[_0x9ae8[114]](function(_0x48bax3){})})[_0x9ae8[114]](function(_0x48bax3){})});models[_0x9ae8[168]][_0x9ae8[125]]({description:_0x9ae8[163],name:_0x9ae8[164],phone:_0x9ae8[74],ecm:true,faxheader:_0x9ae8[165],localid:_0x9ae8[74],maxrate:_0x9ae8[166],minrate:_0x9ae8[167]})[_0x9ae8[5]](function(_0x48baxa){console[_0x9ae8[4]](_0x9ae8[153]);models[_0x9ae8[83]][_0x9ae8[120]]({where:{name:_0x9ae8[71]}})[_0x9ae8[5]](function(_0x48baxb){_0x48baxa[_0x9ae8[154]](_0x48baxb)[_0x9ae8[114]](function(_0x48bax3){});models[_0x9ae8[158]][_0x9ae8[125]]({context:_0x9ae8[76],exten:_0x9ae8[74],priority:1,app:_0x9ae8[155],appdata:_0x9ae8[156],type:_0x9ae8[157]})})[_0x9ae8[114]](function(_0x48bax3){});models[_0x9ae8[136]][_0x9ae8[137]]()[_0x9ae8[5]](function(_0x48baxc){models[_0x9ae8[161]][_0x9ae8[125]]({app:_0x9ae8[160],appdata:_0x48baxc[0][_0x9ae8[116]],priority:1,timeout:30,FaxAccountId:_0x48baxa[_0x9ae8[116]],FaxQueueId:_0x48baxc[0][_0x9ae8[116]]})[_0x9ae8[5]](function(){console[_0x9ae8[4]](_0x9ae8[159])})[_0x9ae8[114]](function(_0x48bax3){});models[_0x9ae8[161]][_0x9ae8[125]]({app:_0x9ae8[160],appdata:_0x48baxc[1][_0x9ae8[116]],priority:2,timeout:30,FaxAccountId:_0x48baxa[_0x9ae8[116]],FaxQueueId:_0x48baxc[1][_0x9ae8[116]]})[_0x9ae8[5]](function(){console[_0x9ae8[4]](_0x9ae8[162])})[_0x9ae8[114]](function(_0x48bax3){})})[_0x9ae8[114]](function(_0x48bax3){})})[_0x9ae8[114]](function(_0x48bax3){});models[_0x9ae8[158]][_0x9ae8[68]]([{context:_0x9ae8[170],exten:_0x9ae8[171],priority:1,app:_0x9ae8[172],appdata:_0x9ae8[173],type:_0x9ae8[170]},{context:_0x9ae8[170],exten:_0x9ae8[171],priority:2,app:_0x9ae8[174],appdata:_0x9ae8[175],type:_0x9ae8[170]},{context:_0x9ae8[170],exten:_0x9ae8[171],priority:3,app:_0x9ae8[176],appdata:_0x9ae8[177],type:_0x9ae8[170]},{context:_0x9ae8[170],exten:_0x9ae8[171],priority:4,app:_0x9ae8[176],appdata:_0x9ae8[178],type:_0x9ae8[170]},{context:_0x9ae8[170],exten:_0x9ae8[171],priority:5,app:_0x9ae8[176],appdata:_0x9ae8[179],type:_0x9ae8[170]},{context:_0x9ae8[170],exten:_0x9ae8[171],priority:6,app:_0x9ae8[176],appdata:_0x9ae8[180],type:_0x9ae8[170]},{context:_0x9ae8[170],exten:_0x9ae8[171],priority:7,app:_0x9ae8[176],appdata:_0x9ae8[181],type:_0x9ae8[170]},{context:_0x9ae8[170],exten:_0x9ae8[171],priority:8,app:_0x9ae8[176],appdata:_0x9ae8[182],type:_0x9ae8[170]},{context:_0x9ae8[170],exten:_0x9ae8[171],priority:9,app:_0x9ae8[183],appdata:_0x9ae8[184],type:_0x9ae8[170]},{context:_0x9ae8[170],exten:_0x9ae8[171],priority:10,app:_0x9ae8[172],appdata:_0x9ae8[185],type:_0x9ae8[170]},{context:_0x9ae8[170],exten:_0x9ae8[186],priority:1,app:_0x9ae8[172],appdata:_0x9ae8[187],type:_0x9ae8[170]},{context:_0x9ae8[170],exten:_0x9ae8[186],priority:2,app:_0x9ae8[172],appdata:_0x9ae8[188],type:_0x9ae8[170]},{context:_0x9ae8[170],exten:_0x9ae8[186],priority:3,app:_0x9ae8[172],appdata:_0x9ae8[189],type:_0x9ae8[170]},{context:_0x9ae8[170],exten:_0x9ae8[186],priority:4,app:_0x9ae8[172],appdata:_0x9ae8[190],type:_0x9ae8[170]},{context:_0x9ae8[170],exten:_0x9ae8[186],priority:5,app:_0x9ae8[172],appdata:_0x9ae8[191],type:_0x9ae8[170]},{context:_0x9ae8[170],exten:_0x9ae8[186],priority:6,app:_0x9ae8[172],appdata:_0x9ae8[192],type:_0x9ae8[170]},{context:_0x9ae8[170],exten:_0x9ae8[186],priority:7,app:_0x9ae8[172],appdata:_0x9ae8[193],type:_0x9ae8[170]},{context:_0x9ae8[170],exten:_0x9ae8[186],priority:8,app:_0x9ae8[172],appdata:_0x9ae8[194],type:_0x9ae8[170]},{context:_0x9ae8[170],exten:_0x9ae8[186],priority:9,app:_0x9ae8[172],appdata:_0x9ae8[195],type:_0x9ae8[170]}],{ignoreDuplicates:true})[_0x9ae8[5]](function(){console[_0x9ae8[4]](_0x9ae8[169])});models[_0x9ae8[158]][_0x9ae8[68]]([{context:_0x9ae8[157],exten:_0x9ae8[171],priority:1,app:_0x9ae8[172],appdata:_0x9ae8[196],type:_0x9ae8[157]},{context:_0x9ae8[157],exten:_0x9ae8[171],priority:2,app:_0x9ae8[176],appdata:_0x9ae8[197],type:_0x9ae8[157]},{context:_0x9ae8[157],exten:_0x9ae8[171],priority:3,app:_0x9ae8[176],appdata:_0x9ae8[198],type:_0x9ae8[157]},{context:_0x9ae8[157],exten:_0x9ae8[171],priority:4,app:_0x9ae8[176],appdata:_0x9ae8[199],type:_0x9ae8[157]},{context:_0x9ae8[157],exten:_0x9ae8[171],priority:5,app:_0x9ae8[176],appdata:_0x9ae8[200],type:_0x9ae8[157]},{context:_0x9ae8[157],exten:_0x9ae8[171],priority:6,app:_0x9ae8[176],appdata:_0x9ae8[180],type:_0x9ae8[157]},{context:_0x9ae8[157],exten:_0x9ae8[171],priority:7,app:_0x9ae8[176],appdata:_0x9ae8[181],type:_0x9ae8[157]},{context:_0x9ae8[157],exten:_0x9ae8[171],priority:8,app:_0x9ae8[176],appdata:_0x9ae8[182],type:_0x9ae8[157]},{context:_0x9ae8[157],exten:_0x9ae8[171],priority:9,app:_0x9ae8[172],appdata:_0x9ae8[187],type:_0x9ae8[157]},{context:_0x9ae8[157],exten:_0x9ae8[171],priority:10,app:_0x9ae8[172],appdata:_0x9ae8[201],type:_0x9ae8[157]},{context:_0x9ae8[157],exten:_0x9ae8[171],priority:11,app:_0x9ae8[172],appdata:_0x9ae8[202],type:_0x9ae8[157]},{context:_0x9ae8[157],exten:_0x9ae8[171],priority:12,app:_0x9ae8[172],appdata:_0x9ae8[203],type:_0x9ae8[157]},{context:_0x9ae8[157],exten:_0x9ae8[171],priority:13,app:_0x9ae8[172],appdata:_0x9ae8[204],type:_0x9ae8[157]},{context:_0x9ae8[157],exten:_0x9ae8[171],priority:14,app:_0x9ae8[172],appdata:_0x9ae8[205],type:_0x9ae8[157]},{context:_0x9ae8[157],exten:_0x9ae8[171],priority:15,app:_0x9ae8[206],appdata:_0x9ae8[207],type:_0x9ae8[157]},{context:_0x9ae8[157],exten:_0x9ae8[171],priority:16,app:_0x9ae8[208],type:_0x9ae8[157]},{context:_0x9ae8[157],exten:_0x9ae8[186],priority:1,app:_0x9ae8[172],appdata:_0x9ae8[187],type:_0x9ae8[157]}],{ignoreDuplicates:true})[_0x9ae8[5]](function(){console[_0x9ae8[4]](_0x9ae8[169])});models[_0x9ae8[212]][_0x9ae8[68]]([{name:_0x9ae8[210],description:_0x9ae8[211]}],{ignoreDuplicates:true})[_0x9ae8[5]](function(){console[_0x9ae8[4]](_0x9ae8[209])});models[_0x9ae8[229]][_0x9ae8[125]]({name:_0x9ae8[215],description:_0x9ae8[215],address:_0x9ae8[216],color:_0x9ae8[217],color_focus:_0x9ae8[217],color_button:_0x9ae8[217],remote:_0x9ae8[218],animation:true,header_shape:_0x9ae8[219],header_online:_0x9ae8[220],online_message:_0x9ae8[221],username_placeholder:_0x9ae8[222],email_placeholder:_0x9ae8[223],start_chat_button:_0x9ae8[224],header_offline:_0x9ae8[225],offline_message:_0x9ae8[226],enquiry_message_placeholder:_0x9ae8[227],enquiry_button:_0x9ae8[228],download_transcript:true})[_0x9ae8[5]](function(_0x48baxd){console[_0x9ae8[4]](_0x9ae8[213]);models[_0x9ae8[126]][_0x9ae8[137]]()[_0x9ae8[5]](function(_0x48baxe){models[_0x9ae8[214]][_0x9ae8[125]]({app:_0x9ae8[160],appdata:_0x48baxe[0][_0x9ae8[116]],priority:1,timeout:30,ChatWebsiteId:_0x48baxd[_0x9ae8[116]],ChatQueueId:_0x48baxe[0][_0x9ae8[116]]})[_0x9ae8[5]](function(){console[_0x9ae8[4]](_0x9ae8[159])})[_0x9ae8[114]](function(_0x48bax3){});models[_0x9ae8[214]][_0x9ae8[125]]({app:_0x9ae8[160],appdata:_0x48baxe[1][_0x9ae8[116]],priority:2,timeout:30,ChatWebsiteId:_0x48baxd[_0x9ae8[116]],ChatQueueId:_0x48baxe[1][_0x9ae8[116]]})[_0x9ae8[5]](function(){console[_0x9ae8[4]](_0x9ae8[162])})[_0x9ae8[114]](function(_0x48bax3){})})[_0x9ae8[114]](function(_0x48bax3){})})[_0x9ae8[114]](function(_0x48bax3){});models[_0x9ae8[232]][_0x9ae8[68]]([{name:_0x9ae8[231],description:_0x9ae8[211]}],{ignoreDuplicates:true})[_0x9ae8[5]](function(){console[_0x9ae8[4]](_0x9ae8[230])});models[_0x9ae8[236]][_0x9ae8[68]]([{name:_0x9ae8[19],description:_0x9ae8[234],defaultEntry:true},{name:_0x9ae8[76],description:_0x9ae8[234],defaultEntry:true},{name:_0x9ae8[157],description:_0x9ae8[234],defaultEntry:true},{name:_0x9ae8[170],description:_0x9ae8[234],defaultEntry:true},{name:_0x9ae8[235],description:_0x9ae8[234],defaultEntry:true}],{ignoreDuplicates:true,individualHooks:true})[_0x9ae8[5]](function(){console[_0x9ae8[4]](_0x9ae8[233])});models[_0x9ae8[243]][_0x9ae8[68]]([{name:_0x9ae8[238],mode:_0x9ae8[239],directory:_0x9ae8[240],sort:_0x9ae8[241],format:_0x9ae8[242],defaultEntry:true}],{ignoreDuplicates:true,individualHooks:true})[_0x9ae8[5]](function(){console[_0x9ae8[4]](_0x9ae8[237])});models[_0x9ae8[245]][_0x9ae8[68]]([{id:1,min_internal:1000,soundPath:_0x9ae8[244]}],{ignoreDuplicates:true,individualHooks:true})[_0x9ae8[5]](function(){console[_0x9ae8[4]](_0x9ae8[237])});models[_0x9ae8[257]][_0x9ae8[68]]([{id:1,name:_0x9ae8[246],model:JSON[_0x9ae8[256]]({title:_0x9ae8[246],rows:[{columns:[{styleClass:_0x9ae8[247],widgets:[{type:_0x9ae8[248],title:_0x9ae8[249],config:{timePattern:_0x9ae8[250],datePattern:_0x9ae8[251]}}]},{styleClass:_0x9ae8[252],widgets:[{type:_0x9ae8[253],title:_0x9ae8[254],config:{url:_0x9ae8[255]}}]}]}]}),defaultEntry:true,editable:false}],{ignoreDuplicates:true,individualHooks:true})[_0x9ae8[5]](function(){console[_0x9ae8[4]](_0x9ae8[237])});models[_0x9ae8[281]][_0x9ae8[68]]([{name:_0x9ae8[259],version:_0x9ae8[260],active:false,author:_0x9ae8[261],logo:_0x9ae8[262],state:_0x9ae8[263],description:_0x9ae8[264]},{name:_0x9ae8[265],version:_0x9ae8[260],active:false,author:_0x9ae8[261],logo:_0x9ae8[266],state:_0x9ae8[267],description:_0x9ae8[268]},{name:_0x9ae8[269],version:_0x9ae8[260],active:false,author:_0x9ae8[261],logo:_0x9ae8[270],state:_0x9ae8[271],description:_0x9ae8[272]},{name:_0x9ae8[273],version:_0x9ae8[260],active:false,author:_0x9ae8[261],logo:_0x9ae8[274],state:_0x9ae8[275],description:_0x9ae8[276]},{name:_0x9ae8[277],version:_0x9ae8[260],active:false,author:_0x9ae8[261],logo:_0x9ae8[278],state:_0x9ae8[279],description:_0x9ae8[280]}],{ignoreDuplicates:true,individualHooks:true})[_0x9ae8[5]](function(){console[_0x9ae8[4]](_0x9ae8[258])});models[_0x9ae8[284]][_0x9ae8[68]]([{id:1,tree:_0x9ae8[282]},{id:2,tree:_0x9ae8[283]}],{ignoreDuplicates:true,individualHooks:true})[_0x9ae8[5]](function(){console[_0x9ae8[4]](_0x9ae8[258])});models[_0x9ae8[286]][_0x9ae8[68]]([{id:1,name:_0x9ae8[285],defaultEntry:true}],{ignoreDuplicates:true,individualHooks:true})[_0x9ae8[5]](function(){console[_0x9ae8[4]](_0x9ae8[258])})
\ No newline at end of file
+/**
+ * Populate DB with sample data on server start
+ * to disable, edit config/environment/index.js, and set `seedDB: false`
+ */
+
+'use strict';
+
+var _ = require('lodash');
+var models = require('../models');
+
+models.User
+  .bulkCreate([{
+    provider: 'local',
+    role: 'agent',
+    fullname: 'Giuseppe Careri',
+    email: 'giuseppe.careri@xcally.com',
+    name: 'giuseppe.careri',
+    password: '75xcally75',
+    defaultuser: 'giuseppe.careri',
+    host: 'dynamic',
+    type: 'FRIEND',
+    transport: 'udp',
+    allow: 'alaw;ulaw;gsm',
+    qualify: 'yes',
+    nat: 'force_rport,comedia',
+    disallow: 'all',
+    context: 'from-sip',
+    internal: 1000
+  }, {
+    provider: 'local',
+    role: 'agent',
+    fullname: 'Daniele Cinti',
+    email: 'daniele.cinti@xcally.com',
+    name: 'daniele.cinti',
+    password: '75xcally75',
+    defaultuser: 'daniele.cinti',
+    host: 'dynamic',
+    type: 'FRIEND',
+    transport: 'udp',
+    allow: 'alaw;ulaw;gsm',
+    qualify: 'yes',
+    nat: 'force_rport,comedia',
+    disallow: 'all',
+    context: 'from-sip',
+    internal: 1001
+  }, {
+    provider: 'local',
+    role: 'agent',
+    fullname: 'Andrea Bianco',
+    email: 'andrea.bianco@xcally.com',
+    name: 'andrea.bianco',
+    password: '75xcally75',
+    defaultuser: 'andrea.bianco',
+    host: 'dynamic',
+    type: 'FRIEND',
+    transport: 'udp',
+    allow: 'alaw;ulaw;gsm',
+    qualify: 'yes',
+    nat: 'force_rport,comedia',
+    disallow: 'all',
+    context: 'from-sip',
+    internal: 1002
+  }, {
+    provider: 'local',
+    role: 'agent',
+    fullname: 'Massimiliano Bungaro',
+    email: 'massimiliano.bungaro@xcally.com',
+    name: 'massimiliano.bungaro',
+    password: '75xcally75',
+    defaultuser: 'massimiliano.bungaro',
+    host: 'dynamic',
+    type: 'FRIEND',
+    transport: 'udp',
+    allow: 'alaw;ulaw;gsm',
+    qualify: 'yes',
+    nat: 'force_rport,comedia',
+    disallow: 'all',
+    context: 'from-sip',
+    internal: 1003
+  }, {
+    provider: 'local',
+    role: 'agent',
+    fullname: 'Valerio Ciotta',
+    email: 'valerio.ciotta@xcally.com',
+    name: 'valerio.ciotta',
+    password: '75xcally75',
+    defaultuser: 'valerio.ciotta',
+    host: 'dynamic',
+    type: 'FRIEND',
+    transport: 'udp',
+    allow: 'alaw;ulaw;gsm',
+    qualify: 'yes',
+    nat: 'force_rport,comedia',
+    disallow: 'all',
+    context: 'from-sip',
+    internal: 1004
+  }, {
+    provider: 'local',
+    role: 'admin',
+    fullname: 'Clarotech',
+    email: 'clarotech@xcally.com',
+    name: 'clarotech',
+    password: 'clarotech',
+    defaultuser: 'clarotech',
+    host: 'dynamic',
+    type: 'FRIEND',
+    transport: 'udp',
+    allow: 'alaw;ulaw;gsm',
+    qualify: 'yes',
+    nat: 'force_rport,comedia',
+    disallow: 'all',
+    context: 'from-sip',
+    internal: 1005
+  }, {
+    provider: 'local',
+    role: 'agent',
+    fullname: 'Abigael',
+    email: 'abigael@xcally.com',
+    name: 'abigael',
+    password: '75xcally75',
+    defaultuser: 'abigael',
+    host: 'dynamic',
+    type: 'FRIEND',
+    transport: 'udp',
+    allow: 'alaw;ulaw;gsm',
+    qualify: 'yes',
+    nat: 'force_rport,comedia',
+    disallow: 'all',
+    context: 'from-sip',
+    internal: 1006
+  }, {
+    provider: 'local',
+    role: 'agent',
+    fullname: 'Tony Russell',
+    email: 'tonyr@xclarotech.co.za',
+    name: 'tony.russell',
+    password: 'clarotech',
+    defaultuser: 'tony.russell',
+    host: 'dynamic',
+    type: 'FRIEND',
+    transport: 'udp',
+    allow: 'alaw;ulaw;gsm',
+    qualify: 'yes',
+    nat: 'force_rport,comedia',
+    disallow: 'all',
+    context: 'from-sip',
+    internal: 1007
+  }, {
+    provider: 'local',
+    role: 'agent',
+    fullname: 'Colin Fair',
+    email: 'colinf@xclarotech.co.za',
+    name: 'colin.fair',
+    password: 'clarotech',
+    defaultuser: 'colin.fair',
+    host: 'dynamic',
+    type: 'FRIEND',
+    transport: 'udp',
+    allow: 'alaw;ulaw;gsm',
+    qualify: 'yes',
+    nat: 'force_rport,comedia',
+    disallow: 'all',
+    context: 'from-sip',
+    internal: 1008
+  }, {
+    provider: 'local',
+    role: 'agent',
+    fullname: 'Diego Gosmar',
+    email: 'diego.gosmar@xcally.com',
+    name: 'diego.gosmar',
+    password: '75xcally75',
+    defaultuser: 'diego.gosmar',
+    host: 'dynamic',
+    type: 'FRIEND',
+    transport: 'udp',
+    allow: 'alaw;ulaw;gsm',
+    qualify: 'yes',
+    nat: 'force_rport,comedia',
+    disallow: 'all',
+    context: 'from-sip',
+    internal: 1009
+  }, {
+    provider: 'local',
+    role: 'agent',
+    fullname: 'Giuseppe Innamorato',
+    email: 'giuseppe.innamorato@xcally.com',
+    name: 'giuseppe.innamorato',
+    password: '75xcally75',
+    defaultuser: 'giuseppe.innamorato',
+    host: 'dynamic',
+    type: 'FRIEND',
+    transport: 'upd',
+    allow: 'alaw;ulaw;gsm',
+    qualify: 'yes',
+    nat: 'force_rport,comedia',
+    disallow: 'all',
+    context: 'from-sip',
+    internal: 1010
+  }, {
+    provider: 'local',
+    role: 'agent',
+    fullname: 'Alessandra Bessone',
+    email: 'alessandra.bessone@xcally.com',
+    name: 'alessandra.bessone',
+    password: '75xcally75',
+    defaultuser: 'alessandra.bessone',
+    host: 'dynamic',
+    type: 'FRIEND',
+    transport: 'upd',
+    allow: 'alaw;ulaw;gsm',
+    qualify: 'yes',
+    nat: 'force_rport,comedia',
+    disallow: 'all',
+    context: 'from-sip',
+    internal: 1011
+  }, {
+    provider: 'local',
+    role: 'agent',
+    fullname: 'Felice Briscese',
+    email: 'felice.briscese@xcally.com',
+    name: 'felice.briscese',
+    password: '75xcally75',
+    defaultuser: 'felice.briscese',
+    host: 'dynamic',
+    type: 'FRIEND',
+    transport: 'upd',
+    allow: 'alaw;ulaw;gsm',
+    qualify: 'yes',
+    nat: 'force_rport,comedia',
+    disallow: 'all',
+    context: 'from-sip',
+    internal: 1012
+  }, {
+    provider: 'local',
+    role: 'admin',
+    fullname: 'xCally',
+    email: 'info.xcally@xcally.com',
+    name: 'xcally',
+    password: '388xshuttle388',
+    defaultuser: 'xcally',
+    host: 'dynamic',
+    type: 'FRIEND',
+    transport: 'udp',
+    allow: 'alaw;ulaw;gsm',
+    qualify: 'yes',
+    nat: 'force_rport,comedia',
+    disallow: 'all',
+    context: 'from-sip',
+    internal: 1013
+  }, {
+    provider: 'local',
+    role: 'agent',
+    fullname: 'John Doe',
+    email: 'john.doe@gmail.com',
+    name: 'john.doe',
+    password: '75xcally75',
+    defaultuser: 'john.doe',
+    host: 'dynamic',
+    type: 'FRIEND',
+    transport: 'udp',
+    allow: 'alaw;ulaw;gsm',
+    qualify: 'yes',
+    nat: 'force_rport,comedia',
+    disallow: 'all',
+    context: 'from-sip',
+    internal: 1014
+  }, {
+    provider: 'local',
+    role: 'agent',
+    fullname: 'Jane Miller',
+    email: 'jane.miller@gmail.com',
+    name: 'jane.miller',
+    password: '75xcally75',
+    defaultuser: 'jane.miller',
+    host: 'dynamic',
+    type: 'FRIEND',
+    transport: 'udp',
+    allow: 'alaw;ulaw;gsm',
+    qualify: 'yes',
+    nat: 'force_rport,comedia',
+    disallow: 'all',
+    context: 'from-sip',
+    internal: 1015
+  }], {
+    ignoreDuplicates: true,
+    individualHooks: true
+  }).then(function() {
+    console.log('Finished populating users');
+  });
+
+models.Trunk
+  .bulkCreate([{
+    name: 'citalia',
+    type: 'friend',
+    insecure: 'port,invite',
+    defaultuser: '01119827770',
+    secret: 'T!NPnv-qjCMe9v',
+    password: 'T!NPnv-qjCMe9v',
+    context: 'from-voip-provider',
+    language: 'it',
+    host: 'voip.eutelia.it',
+    fromdomain: 'voip.eutelia.it',
+    dtmfmode: 'rfc2833',
+    qualify: 'yes',
+    nat: 'force_rport,comedia',
+    callerid: ' "" <>',
+    limitonpeers: 'yes',
+    callcounter: 'yes',
+    disallow: 'all',
+    allow: 'ulaw;alaw;gsm',
+    canreinvite: 'no',
+    directmedia: 'no'
+  }], {
+    ignoreDuplicates: true,
+    individualHooks: true
+  }).then(function() {
+    console.log('Finished populating trunks');
+  });
+
+
+// Init modules table
+models.Module
+  .bulkCreate([{
+    name: "dashboard",
+    title: "APPLICATION_DASHBOARD"
+  }, {
+    name: "users",
+    title: "APPLICATION_USERS"
+  }, {
+    name: "agents",
+    title: "APPLICATION_AGENTS"
+  }, {
+    name: "teams",
+    title: "APPLICATION_TEAMS"
+  }, {
+    name: "chat",
+    title: "APPLICATION_CHAT"
+  }, {
+    name: "voice",
+    title: "APPLICATION_VOICE"
+  }, {
+    name: "mail",
+    title: "APPLICATION_MAIL"
+  }, {
+    name: "fax",
+    title: "APPLICATION_FAX"
+  }, {
+    name: "audio",
+    title: "APPLICATION_AUDIO"
+  }, {
+    name: "callysquare",
+    title: "APPLICATION_CALLYSQUARE"
+  }, {
+    name: "analytics",
+    title: "APPLICATION_ANALYTICS"
+  }, {
+    name: "realtime",
+    title: "APPLICATION_REALTIME"
+  }, {
+    name: "voicemails",
+    title: "APPLICATION_VOICEMAILS"
+  }, {
+    name: "settings",
+    title: "APPLICATION_SETTINGS"
+  }], {
+    ignoreDuplicates: true
+  }).then(function() {
+    console.log('Finished populating modules');
+  });
+
+models.Team
+  .create({
+    name: "T1",
+    description: "Default Team",
+    defaultEntry: true
+  })
+  .then(function(team) {
+
+    models.User
+      .findAll({
+        where: {
+          role: 'agent'
+        }
+      })
+      .then(function(users) {
+        team
+          .addUsers(_.map(users, 'id'))
+          .then(function() {
+            models.ChatQueue
+              .create({
+                name: "CQ1",
+                description: "CQ1 Desc",
+                timeout: 5,
+                strategy: "rrmemory"
+              })
+              .then(function(chatQueue) {
+                console.log('Finished populating chat queue 1');
+
+                models.Team
+                  .findOne({
+                    where: {
+                      name: 'T1'
+                    },
+                    include: [{
+                      all: true
+                    }]
+                  })
+                  .then(function(team) {
+                    chatQueue
+                      .addUsers(_.map(team.Users, 'id'))
+                      .catch(function(err) {
+                        // console.error(err);
+                      });
+                  })
+                  .catch(function(err) {
+                    // console.error(err);
+                  });
+              });
+
+            models.MailQueue
+              .create({
+                name: "MQ1",
+                description: "MQ1 Desc",
+                timeout: 5,
+                strategy: "rrmemory"
+              })
+              .then(function(mailQueue) {
+                console.log('Finished populating mail queue 1');
+
+                models.Team
+                  .findOne({
+                    where: {
+                      name: 'T1'
+                    },
+                    include: [{
+                      all: true
+                    }]
+                  })
+                  .then(function(team) {
+                    if (team) {
+                      console.log('team found');
+                    } else {
+                      console.log('test');
+                    }
+                    mailQueue
+                      .addUsers(_.map(team.Users, 'id'))
+                      .catch(function(err) {
+                        // console.error(err);
+                      });
+                  })
+                  .catch(function(err) {
+                    // console.error(err);
+                  });
+              });
+
+            models.FaxQueue
+              .create({
+                name: "FQ1",
+                description: "FQ1 Desc",
+                timeout: 5,
+                strategy: "rrmemory"
+              })
+              .then(function(faxQueue) {
+                console.log('Finished populating fax queue 1');
+
+                models.Team
+                  .findOne({
+                    where: {
+                      name: 'T1'
+                    },
+                    include: [{
+                      all: true
+                    }]
+                  })
+                  .then(function(team) {
+                    faxQueue
+                      .addUsers(_.map(team.Users, 'id'))
+                      .catch(function(err) {
+                        // console.error(err);
+                      });
+                  })
+                  .catch(function(err) {
+                    // console.error(err);
+                  });
+              });
+          })
+          .catch(function(err) {
+            // console.error(err);
+          });
+      })
+      .catch(function(err) {
+        // console.error(err);
+      });
+  })
+  .catch(function(err) {
+    // console.error(err);
+  });
+
+models.MailAccount
+  .create({
+    name: "xCally Development",
+    description: "xCally Development",
+    address: "development@xcally.com"
+  })
+  .then(function(mailAccount) {
+    console.log('Finished populating mail account');
+    models.MailServerIn
+      .create({
+        description: 'xcally',
+        host: 'imap.xcally.com',
+        username: 'development@xcally.com',
+        password: 'phokucloka',
+        port: 143,
+        mailbox: 'INBOX',
+        ssl: false,
+        delete: false,
+        filter: 'UNSEEN',
+        protocol: 'IMAP',
+        MailAccountId: mailAccount.id
+      })
+      .then(function() {
+        console.log('Finished populating mail server in');
+        models.MailServerOut
+          .create({
+            description: 'xcally',
+            host: 'smtp.xcally.com',
+            username: 'development@xcally.com',
+            password: 'phokucloka',
+            port: 587,
+            ssl: false,
+            MailAccountId: mailAccount.id
+          })
+          .then(function() {
+            console.log('Finished populating mail server out');
+          })
+          .catch(function(err) {
+            // console.error(err);
+          });
+      })
+      .catch(function(err) {
+        // console.error(err);
+      });
+  });
+
+models.FaxAccount
+  .create({
+    description: 'FA1 Desc',
+    name: 'FA1',
+    phone: '01119827770',
+    ecm: true,
+    faxheader: 'xCALLY',
+    localid: '01119827770',
+    maxrate: '9600',
+    minrate: '14400',
+  })
+  .then(function(faxAccount) {
+    console.log('Finished populating fax account');
+
+    models.Trunk
+      .findOne({
+        where: {
+          name: 'citalia'
+        }
+      })
+      .then(function(trunk) {
+        faxAccount
+          .setTrunk(trunk)
+          .catch(function(err) {
+            // console.error(err);
+          });
+
+
+        models.VoiceExtension
+          .create({
+            context: 'from-voip-provider',
+            exten: '01119827770',
+            priority: 1,
+            app: 'Goto',
+            appdata: 'inbound-fax,s,1',
+            type: 'inbound-fax'
+          })
+
+      })
+      .catch(function(err) {
+        // console.error(err);
+      });
+
+    models.FaxQueue
+      .findAll()
+      .then(function(faxQueues) {
+        models.FaxApplication
+          .create({
+            app: 'queue',
+            appdata: faxQueues[0].id,
+            priority: 1,
+            timeout: 30,
+            FaxAccountId: faxAccount.id,
+            FaxQueueId: faxQueues[0].id
+          })
+          .then(function() {
+            console.log('Finished populating chat website application 1');
+          })
+          .catch(function(err) {
+            // console.error(err);
+          });
+
+        models.FaxApplication
+          .create({
+            app: 'queue',
+            appdata: faxQueues[1].id,
+            priority: 2,
+            timeout: 30,
+            FaxAccountId: faxAccount.id,
+            FaxQueueId: faxQueues[1].id
+          })
+          .then(function() {
+            console.log('Finished populating chat website application 2');
+          })
+          .catch(function(err) {
+            // console.error(err);
+          });
+      })
+      .catch(function(err) {
+        // console.error(err);
+      });
+  })
+  .catch(function(err) {
+    // console.error(err);
+  });
+// models.FaxAccount
+//   .create({
+//     description: 'FA1 Desc',
+//     name: 'FA1',
+//     phone: '01119827770',
+//     ecm: true,
+//     faxheader: 'xCALLY',
+//     localid: '01119827770',
+//     maxrate: '9600',
+//     minrate: '14400',
+//   })
+//   .then(function (faxAccount) {
+//     console.log('Finished populating fax account');
+//
+//     models.Trunk
+//       .findOne({
+//         where: {
+//           name: 'citalia'
+//         }
+//       })
+//       .then(function (trunk) {
+//         faxAccount
+//           .setTrunk(trunk)
+//           .catch(function (err) {
+//             // console.error(err);
+//           });
+//
+//
+//         models.VoiceExtension
+//           .create({
+//             context: 'from-voip-provider',
+//             exten: '01119827770',
+//             priority: 1,
+//             app: 'Goto',
+//             appdata: 'inbound-fax,s,1',
+//             type: 'inbound-fax',
+//             TrunkId: trunk.name
+//           })
+//
+//       })
+//       .catch(function (err) {
+//         // console.error(err);
+//       });
+//
+//     models.FaxQueue
+//       .findAll()
+//       .then(function (faxQueues) {
+//         models.FaxApplication
+//           .create({
+//             app: 'queue',
+//             appdata: faxQueues[0].id,
+//             priority: 1,
+//             timeout: 30,
+//             FaxAccountId: faxAccount.id,
+//             FaxQueueId: faxQueues[0].id
+//           })
+//           .then(function () {
+//             console.log('Finished populating chat website application 1');
+//           })
+//           .catch(function (err) {
+//             // console.error(err);
+//           });
+//
+//         models.FaxApplication
+//           .create({
+//             app: 'queue',
+//             appdata: faxQueues[1].id,
+//             priority: 2,
+//             timeout: 30,
+//             FaxAccountId: faxAccount.id,
+//             FaxQueueId: faxQueues[1].id
+//           })
+//           .then(function () {
+//             console.log('Finished populating chat website application 2');
+//           })
+//           .catch(function (err) {
+//             // console.error(err);
+//           });
+//       })
+//       .catch(function (err) {
+//         // console.error(err);
+//       });
+//   })
+//   .catch(function (err) {
+//     // console.error(err);
+//   });
+
+models.VoiceExtension
+  .bulkCreate([{
+    context: 'outbound-fax',
+    exten: 's',
+    priority: 1,
+    app: 'NoOp',
+    appdata: 'Fax UUID: ${FAXUUID}',
+    type: 'outbound-fax'
+  }, {
+    context: 'outbound-fax',
+    exten: 's',
+    priority: 2,
+    app: 'UserEvent',
+    appdata: 'Fax,uuid: ${FAXUUID}',
+    type: 'outbound-fax'
+  }, {
+    context: 'outbound-fax',
+    exten: 's',
+    priority: 3,
+    app: 'Set',
+    appdata: 'FAXOPT(filename):${FAXFILE}',
+    type: 'outbound-fax'
+  }, {
+    context: 'outbound-fax',
+    exten: 's',
+    priority: 4,
+    app: 'Set',
+    appdata: 'FAXOPT(ecm):${ECM}',
+    type: 'outbound-fax'
+  }, {
+    context: 'outbound-fax',
+    exten: 's',
+    priority: 5,
+    app: 'Set',
+    appdata: 'FAXOPT(headerinfo):${FAXHEADER}',
+    type: 'outbound-fax'
+  }, {
+    context: 'outbound-fax',
+    exten: 's',
+    priority: 6,
+    app: 'Set',
+    appdata: 'FAXOPT(localstationid):${LOCALID}',
+    type: 'outbound-fax'
+  }, {
+    context: 'outbound-fax',
+    exten: 's',
+    priority: 7,
+    app: 'Set',
+    appdata: 'FAXOPT(maxrate):${MAXRATE}',
+    type: 'outbound-fax'
+  }, {
+    context: 'outbound-fax',
+    exten: 's',
+    priority: 8,
+    app: 'Set',
+    appdata: 'FAXOPT(minrate):${MINRATE}',
+    type: 'outbound-fax'
+  }, {
+    context: 'outbound-fax',
+    exten: 's',
+    priority: 9,
+    app: 'SendFAX',
+    appdata: '${FAXFILE},d',
+    type: 'outbound-fax'
+  }, {
+    context: 'outbound-fax',
+    exten: 's',
+    priority: 10,
+    app: 'NoOp',
+    appdata: 'ERROR "${TIMESTAMP}" "NO_STATUS" "NO_PAGES"',
+    type: 'outbound-fax'
+  }, {
+    context: 'outbound-fax',
+    exten: 'h',
+    priority: 1,
+    app: 'NoOp',
+    appdata: 'FAXOPT(ecm) : ${FAXOPT(ecm)}',
+    type: 'outbound-fax'
+  }, {
+    context: 'outbound-fax',
+    exten: 'h',
+    priority: 2,
+    app: 'NoOp',
+    appdata: 'FaxStatus : ${FAXSTATUS}',
+    type: 'outbound-fax'
+  }, {
+    context: 'outbound-fax',
+    exten: 'h',
+    priority: 3,
+    app: 'NoOp',
+    appdata: 'FaxStatusString : ${FAXSTATUSSTRING}',
+    type: 'outbound-fax'
+  }, {
+    context: 'outbound-fax',
+    exten: 'h',
+    priority: 4,
+    app: 'NoOp',
+    appdata: 'FaxError : ${FAXERROR}',
+    type: 'outbound-fax'
+  }, {
+    context: 'outbound-fax',
+    exten: 'h',
+    priority: 5,
+    app: 'NoOp',
+    appdata: 'RemoteStationID : ${REMOTESTATIONID}',
+    type: 'outbound-fax'
+  }, {
+    context: 'outbound-fax',
+    exten: 'h',
+    priority: 6,
+    app: 'NoOp',
+    appdata: 'FaxPages : ${FAXPAGES}',
+    type: 'outbound-fax'
+  }, {
+    context: 'outbound-fax',
+    exten: 'h',
+    priority: 7,
+    app: 'NoOp',
+    appdata: 'FaxBitRate : ${FAXBITRATE}',
+    type: 'outbound-fax'
+  }, {
+    context: 'outbound-fax',
+    exten: 'h',
+    priority: 8,
+    app: 'NoOp',
+    appdata: 'FaxResolution : ${FAXRESOLUTION}',
+    type: 'outbound-fax'
+  }, {
+    context: 'outbound-fax',
+    exten: 'h',
+    priority: 9,
+    app: 'NoOp',
+    appdata: 'OK "${TIMESTAMP}" "${FAXSTATUSSTRING}" "${FAXPAGES}"',
+    type: 'outbound-fax'
+  }], {
+    ignoreDuplicates: true
+  })
+  .then(function() {
+    console.log('Finished populating fax outbound voice extension');
+  });
+
+models.VoiceExtension
+  .bulkCreate([{
+    context: 'inbound-fax',
+    exten: 's',
+    priority: 1,
+    app: 'NoOp',
+    appdata: '**** FAX RECEIVED from ${CALLERID(num)} ${STRFTIME(${EPOCH},,%c)} ****',
+    type: 'inbound-fax'
+  }, {
+    context: 'inbound-fax',
+    exten: 's',
+    priority: 2,
+    app: 'Set',
+    appdata: 'FAXOPT(ecm):yes',
+    type: 'inbound-fax'
+  }, {
+    context: 'inbound-fax',
+    exten: 's',
+    priority: 3,
+    app: 'Set',
+    appdata: 'FILENAME:${UNIQUEID}',
+    type: 'inbound-fax'
+  }, {
+    context: 'inbound-fax',
+    exten: 's',
+    priority: 4,
+    app: 'Set',
+    appdata: 'FAXFILE:${FILENAME}.tif',
+    type: 'inbound-fax'
+  }, {
+    context: 'inbound-fax',
+    exten: 's',
+    priority: 5,
+    app: 'Set',
+    appdata: 'FAXOPT(headerinfo):Received by XeniaLAB ${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M)}',
+    type: 'inbound-fax'
+  }, {
+    context: 'inbound-fax',
+    exten: 's',
+    priority: 6,
+    app: 'Set',
+    appdata: 'FAXOPT(localstationid):${LOCALID}',
+    type: 'inbound-fax'
+  }, {
+    context: 'inbound-fax',
+    exten: 's',
+    priority: 7,
+    app: 'Set',
+    appdata: 'FAXOPT(maxrate):${MAXRATE}',
+    type: 'inbound-fax'
+  }, {
+    context: 'inbound-fax',
+    exten: 's',
+    priority: 8,
+    app: 'Set',
+    appdata: 'FAXOPT(minrate):${MINRATE}',
+    type: 'inbound-fax'
+  }, {
+    context: 'inbound-fax',
+    exten: 's',
+    priority: 9,
+    app: 'NoOp',
+    appdata: 'FAXOPT(ecm) : ${FAXOPT(ecm)}',
+    type: 'inbound-fax'
+  }, {
+    context: 'inbound-fax',
+    exten: 's',
+    priority: 10,
+    app: 'NoOp',
+    appdata: 'FAXOPT(headerinfo) : ${FAXOPT(headerinfo)}',
+    type: 'inbound-fax'
+  }, {
+    context: 'inbound-fax',
+    exten: 's',
+    priority: 11,
+    app: 'NoOp',
+    appdata: 'FAXOPT(localstationid) : ${FAXOPT(localstationid)}',
+    type: 'inbound-fax'
+  }, {
+    context: 'inbound-fax',
+    exten: 's',
+    priority: 12,
+    app: 'NoOp',
+    appdata: 'FAXOPT(maxrate) : ${FAXOPT(maxrate)}',
+    type: 'inbound-fax'
+  }, {
+    context: 'inbound-fax',
+    exten: 's',
+    priority: 13,
+    app: 'NoOp',
+    appdata: 'FAXOPT(minrate) : ${FAXOPT(minrate)}',
+    type: 'inbound-fax'
+  }, {
+    context: 'inbound-fax',
+    exten: 's',
+    priority: 14,
+    app: 'NoOp',
+    appdata: '**** RECEIVING FAX : ${FAXFILE} ****',
+    type: 'inbound-fax'
+  }, {
+    context: 'inbound-fax',
+    exten: 's',
+    priority: 15,
+    app: 'ReceiveFax',
+    appdata: '/tmp/${FAXFILE}',
+    type: 'inbound-fax'
+  }, {
+    context: 'inbound-fax',
+    exten: 's',
+    priority: 16,
+    app: 'Hangup',
+    type: 'inbound-fax'
+  }, {
+    context: 'inbound-fax',
+    exten: 'h',
+    priority: 1,
+    app: 'NoOp',
+    appdata: 'FAXOPT(ecm) : ${FAXOPT(ecm)}',
+    type: 'inbound-fax'
+  }], {
+    ignoreDuplicates: true
+  })
+  .then(function() {
+    console.log('Finished populating fax outbound voice extension');
+  });
+
+models.SquareProject
+  .bulkCreate([{
+    name: "project1",
+    description: "description project"
+  }], {
+    ignoreDuplicates: true
+  }).then(function() {
+    console.log('Finished populating square projects');
+  });
+
+models.ChatWebsite
+  .create({
+    name: 'xCally Shop',
+    description: 'xCally Shop',
+    address: 'http://www.xcally.com/shop/',
+    color: '#f51111',
+    color_focus: '#f51111',
+    color_button: '#f51111',
+    remote: 'http://localhost:9000',
+    animation: true,
+    header_shape: 'squared',
+    header_online: 'We are here!',
+    online_message: 'Questions? Insert your name and email address to start a live-chat with our support team.',
+    username_placeholder: 'Your name',
+    email_placeholder: 'Your email address',
+    start_chat_button: 'Chat',
+    header_offline: 'Contact us',
+    offline_message: "<strong>We're not online.</strong><br />It doesn't mean we're not there to help - leave your message below and we'll be in touch as soon as possible.'",
+    enquiry_message_placeholder: 'Your message...',
+    enquiry_button: 'Leave message',
+    download_transcript: true
+  })
+  .then(function(chatWebsite) {
+    console.log('Finished populating chat website');
+    models.ChatQueue
+      .findAll()
+      .then(function(chatQueues) {
+        models.ChatApplication
+          .create({
+            app: 'queue',
+            appdata: chatQueues[0].id,
+            priority: 1,
+            timeout: 30,
+            ChatWebsiteId: chatWebsite.id,
+            ChatQueueId: chatQueues[0].id
+          })
+          .then(function() {
+            console.log('Finished populating chat website application 1');
+          })
+          .catch(function(err) {
+            // console.error(err);
+          });
+
+        models.ChatApplication
+          .create({
+            app: 'queue',
+            appdata: chatQueues[1].id,
+            priority: 2,
+            timeout: 30,
+            ChatWebsiteId: chatWebsite.id,
+            ChatQueueId: chatQueues[1].id
+          })
+          .then(function() {
+            console.log('Finished populating chat website application 2');
+          })
+          .catch(function(err) {
+            // console.error(err);
+          });
+      })
+      .catch(function(err) {
+        // console.error(err);
+      });
+  })
+  .catch(function(err) {
+    // console.error(err);
+  });
+
+models.Variable
+  .bulkCreate([{
+    name: "variable1",
+    description: "description project"
+  }], {
+    ignoreDuplicates: true
+  }).then(function() {
+    console.log('Finished populating variables');
+  });
+
+models.VoiceContext
+  .bulkCreate([{
+    name: "from-sip",
+    description: "Default context (DO NOT DELETE)",
+    defaultEntry: true
+  }, {
+    name: "from-voip-provider",
+    description: "Default context (DO NOT DELETE)",
+    defaultEntry: true
+  }, {
+    name: "inbound-fax",
+    description: "Default context (DO NOT DELETE)",
+    defaultEntry: true
+  }, {
+    name: "outbound-fax",
+    description: "Default context (DO NOT DELETE)",
+    defaultEntry: true
+  }, {
+    name: "from-voicemail",
+    description: "Default context (DO NOT DELETE)",
+    defaultEntry: true
+  }], {
+    ignoreDuplicates: true,
+    individualHooks: true
+  }).then(function() {
+    console.log('Finished populating context variables');
+  });
+
+models.VoiceMusicOnHold
+  .bulkCreate([{
+    name: "default",
+    mode: "files",
+    directory: 'var/lib/asterisk/moh',
+    sort: 'alpha',
+    format: 'wav',
+    defaultEntry: true
+  }], {
+    ignoreDuplicates: true,
+    individualHooks: true
+  }).then(function() {
+    console.log('Finished populating moh variables');
+  });
+
+models.Settings
+  .bulkCreate([{
+    id: 1,
+    min_internal: 1000,
+    soundPath: '/var/opt/motion/server/files/sounds/converted'
+  }], {
+    ignoreDuplicates: true,
+    individualHooks: true
+  }).then(function() {
+    console.log('Finished populating moh variables');
+  });
+
+models.Dashboard
+  .bulkCreate([{
+    id: 1,
+    name: 'Motion Dashboard',
+    model: JSON.stringify({
+      title: 'Motion Dashboard',
+      rows: [{
+        columns: [{
+          styleClass: 'col-md-4',
+          widgets: [{
+            type: 'clock',
+            title: 'Clock',
+            config: {
+              timePattern: 'hh:mm:ss a',
+              datePattern: 'dddd, MMMM Do YYYY'
+            }
+          }]
+        }, {
+          styleClass: 'col-md-8',
+          widgets: [{
+            type: 'iframe',
+            title: 'Iframe',
+            config: {
+              url: 'https://demo.xcally.com/shop/'
+            }
+          }]
+        }]
+      }]
+    }),
+    defaultEntry: true,
+    editable: false
+  }], {
+    ignoreDuplicates: true,
+    individualHooks: true
+  }).then(function() {
+    console.log('Finished populating moh variables');
+  });
+
+models.Integration
+  .bulkCreate([{
+    name: 'Zendesk',
+    version: '1.0.0',
+    active: false,
+    author: 'XeniaLAB s.r.l.',
+    logo: 'assets/images/media/zendesk2.png',
+    state: 'zendesk',
+    description: 'Description for Zendesk'
+  }, {
+    name: 'Desk.com',
+    version: '1.0.0',
+    active: false,
+    author: 'XeniaLAB s.r.l.',
+    logo: 'assets/images/media/desk2.png',
+    state: 'desk',
+    description: 'Description for Desk.com'
+  }, {
+    name: 'Salesforce',
+    version: '1.0.0',
+    active: false,
+    author: 'XeniaLAB s.r.l.',
+    logo: 'assets/images/media/salesforce2.png',
+    state: 'salesforce',
+    description: 'Description for Salesforce'
+  }, {
+    name: 'Freshdesk',
+    version: '1.0.0',
+    active: false,
+    author: 'XeniaLAB s.r.l.',
+    logo: 'assets/images/media/freshdesk.png',
+    state: 'freshdesk',
+    description: 'Description for Freshdesk'
+  }, {
+    name: 'SugarCRM',
+    version: '1.0.0',
+    active: false,
+    author: 'XeniaLAB s.r.l.',
+    logo: 'assets/images/media/sugarcrm2.png',
+    state: 'sugarcrm',
+    description: 'Description for SugarCRM'
+  }], {
+    ignoreDuplicates: true,
+    individualHooks: true
+  }).then(function() {
+    console.log('Finished populating integrations');
+  });
+
+models.ReportTree
+  .bulkCreate([{
+    id: 1,
+    tree: '[{"id":"1","parent":"#","text":"Motion Reports","icon":"icon-rocket","state":{"selected":true,"opened":true}},{"id":"2","parent":"1","text":"Basic Node","state":{"selected":false,"opened":false}}]',
+  }, {
+    id: 2,
+    tree: '[{"id":"1","text":"Custom Reports","icon":"icon-book-open","li_attr":{"id":"1"},"a_attr":{"href":"#","id":"1_anchor"},"state":{"loaded":true,"opened":true,"selected":false,"disabled":false},"data":{},"parent":"#"},{"id":"2","text":"Basic Node","icon":true,"li_attr":{"id":"2"},"a_attr":{"href":"#","id":"2_anchor"},"state":{"loaded":true,"opened":true,"selected":false,"disabled":false},"data":{},"parent":"1"}]'
+  }], {
+    ignoreDuplicates: true,
+    individualHooks: true
+  }).then(function() {
+    console.log('Finished populating integrations');
+  });
+
+models.Service
+  .bulkCreate([{
+    id: 1,
+    name: 'Motion Service',
+    defaultEntry: true
+  }], {
+    ignoreDuplicates: true,
+    individualHooks: true
+  }).then(function() {
+    console.log('Finished populating integrations');
+  });
index 81ff4a6..4b844ca 100644 (file)
@@ -1 +1,550 @@
-var _0xce3f=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x55\x73\x65\x72\x73","\x74\x68\x65\x6E","\x46\x69\x6E\x69\x73\x68\x65\x64\x20\x70\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x75\x73\x65\x72\x73","\x6C\x6F\x67","\x61\x67\x65\x6E\x74","\x66\x69\x6C\x74\x65\x72","\x44\x65\x66\x61\x75\x6C\x74\x20\x54\x65\x61\x6D","\x63\x72\x65\x61\x74\x65","\x54\x65\x61\x6D","\x6C\x6F\x63\x61\x6C","\x61\x64\x6D\x69\x6E","\x41\x64\x6D\x69\x6E\x69\x73\x74\x72\x61\x74\x6F\x72","\x61\x64\x6D\x69\x6E\x40\x61\x64\x6D\x69\x6E\x2E\x63\x6F\x6D","\x70\x61\x73\x73\x77\x6F\x72\x64","\x78\x63\x61\x6C\x6C\x79","\x64\x79\x6E\x61\x6D\x69\x63","\x46\x52\x49\x45\x4E\x44","\x75\x64\x70","\x61\x6C\x61\x77\x3B\x75\x6C\x61\x77\x3B\x67\x73\x6D","\x79\x65\x73","\x66\x6F\x72\x63\x65\x5F\x72\x70\x6F\x72\x74\x2C\x63\x6F\x6D\x65\x64\x69\x61","\x61\x6C\x6C","\x66\x72\x6F\x6D\x2D\x73\x69\x70","\x4A\x6F\x68\x6E\x20\x44\x6F\x65","\x6A\x6F\x68\x6E\x2E\x64\x6F\x65\x40\x67\x6D\x61\x69\x6C\x2E\x63\x6F\x6D","\x6A\x6F\x68\x6E\x2E\x64\x6F\x65","\x73\x68\x75\x74\x74\x6C\x65\x35\x35","\x4A\x61\x6E\x65\x20\x4D\x69\x6C\x6C\x65\x72","\x6A\x61\x6E\x65\x2E\x6D\x69\x6C\x6C\x65\x72\x40\x67\x6D\x61\x69\x6C\x2E\x63\x6F\x6D","\x6A\x61\x6E\x65\x2E\x6D\x69\x6C\x6C\x65\x72","\x62\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x55\x73\x65\x72","\x46\x69\x6E\x69\x73\x68\x65\x64\x20\x70\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x6D\x6F\x64\x75\x6C\x65\x73","\x64\x61\x73\x68\x62\x6F\x61\x72\x64","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x44\x41\x53\x48\x42\x4F\x41\x52\x44","\x75\x73\x65\x72\x73","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x55\x53\x45\x52\x53","\x61\x67\x65\x6E\x74\x73","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x41\x47\x45\x4E\x54\x53","\x74\x65\x61\x6D\x73","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x54\x45\x41\x4D\x53","\x63\x68\x61\x74","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x43\x48\x41\x54","\x76\x6F\x69\x63\x65","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x56\x4F\x49\x43\x45","\x6D\x61\x69\x6C","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x4D\x41\x49\x4C","\x66\x61\x78","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x46\x41\x58","\x61\x75\x64\x69\x6F","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x41\x55\x44\x49\x4F","\x63\x61\x6C\x6C\x79\x73\x71\x75\x61\x72\x65","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x43\x41\x4C\x4C\x59\x53\x51\x55\x41\x52\x45","\x61\x6E\x61\x6C\x79\x74\x69\x63\x73","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x41\x4E\x41\x4C\x59\x54\x49\x43\x53","\x72\x65\x61\x6C\x74\x69\x6D\x65","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x52\x45\x41\x4C\x54\x49\x4D\x45","\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C\x73","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x56\x4F\x49\x43\x45\x4D\x41\x49\x4C\x53","\x73\x65\x74\x74\x69\x6E\x67\x73","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x53\x45\x54\x54\x49\x4E\x47\x53","\x4D\x6F\x64\x75\x6C\x65","\x46\x69\x6E\x69\x73\x68\x65\x64\x20\x70\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x66\x61\x78\x20\x6F\x75\x74\x62\x6F\x75\x6E\x64\x20\x76\x6F\x69\x63\x65\x20\x65\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x6F\x75\x74\x62\x6F\x75\x6E\x64\x2D\x66\x61\x78","\x73","\x4E\x6F\x4F\x70","\x46\x61\x78\x20\x55\x55\x49\x44\x3A\x20\x24\x7B\x46\x41\x58\x55\x55\x49\x44\x7D","\x55\x73\x65\x72\x45\x76\x65\x6E\x74","\x46\x61\x78\x2C\x75\x75\x69\x64\x3A\x20\x24\x7B\x46\x41\x58\x55\x55\x49\x44\x7D","\x53\x65\x74","\x46\x41\x58\x4F\x50\x54\x28\x66\x69\x6C\x65\x6E\x61\x6D\x65\x29\x3A\x24\x7B\x46\x41\x58\x46\x49\x4C\x45\x7D","\x46\x41\x58\x4F\x50\x54\x28\x65\x63\x6D\x29\x3A\x24\x7B\x45\x43\x4D\x7D","\x46\x41\x58\x4F\x50\x54\x28\x68\x65\x61\x64\x65\x72\x69\x6E\x66\x6F\x29\x3A\x24\x7B\x46\x41\x58\x48\x45\x41\x44\x45\x52\x7D","\x46\x41\x58\x4F\x50\x54\x28\x6C\x6F\x63\x61\x6C\x73\x74\x61\x74\x69\x6F\x6E\x69\x64\x29\x3A\x24\x7B\x4C\x4F\x43\x41\x4C\x49\x44\x7D","\x46\x41\x58\x4F\x50\x54\x28\x6D\x61\x78\x72\x61\x74\x65\x29\x3A\x24\x7B\x4D\x41\x58\x52\x41\x54\x45\x7D","\x46\x41\x58\x4F\x50\x54\x28\x6D\x69\x6E\x72\x61\x74\x65\x29\x3A\x24\x7B\x4D\x49\x4E\x52\x41\x54\x45\x7D","\x53\x65\x6E\x64\x46\x41\x58","\x24\x7B\x46\x41\x58\x46\x49\x4C\x45\x7D\x2C\x64","\x45\x52\x52\x4F\x52\x20\x22\x24\x7B\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x7D\x22\x20\x22\x4E\x4F\x5F\x53\x54\x41\x54\x55\x53\x22\x20\x22\x4E\x4F\x5F\x50\x41\x47\x45\x53\x22","\x68","\x46\x41\x58\x4F\x50\x54\x28\x65\x63\x6D\x29\x20\x3A\x20\x24\x7B\x46\x41\x58\x4F\x50\x54\x28\x65\x63\x6D\x29\x7D","\x46\x61\x78\x53\x74\x61\x74\x75\x73\x20\x3A\x20\x24\x7B\x46\x41\x58\x53\x54\x41\x54\x55\x53\x7D","\x46\x61\x78\x53\x74\x61\x74\x75\x73\x53\x74\x72\x69\x6E\x67\x20\x3A\x20\x24\x7B\x46\x41\x58\x53\x54\x41\x54\x55\x53\x53\x54\x52\x49\x4E\x47\x7D","\x46\x61\x78\x45\x72\x72\x6F\x72\x20\x3A\x20\x24\x7B\x46\x41\x58\x45\x52\x52\x4F\x52\x7D","\x52\x65\x6D\x6F\x74\x65\x53\x74\x61\x74\x69\x6F\x6E\x49\x44\x20\x3A\x20\x24\x7B\x52\x45\x4D\x4F\x54\x45\x53\x54\x41\x54\x49\x4F\x4E\x49\x44\x7D","\x46\x61\x78\x50\x61\x67\x65\x73\x20\x3A\x20\x24\x7B\x46\x41\x58\x50\x41\x47\x45\x53\x7D","\x46\x61\x78\x42\x69\x74\x52\x61\x74\x65\x20\x3A\x20\x24\x7B\x46\x41\x58\x42\x49\x54\x52\x41\x54\x45\x7D","\x46\x61\x78\x52\x65\x73\x6F\x6C\x75\x74\x69\x6F\x6E\x20\x3A\x20\x24\x7B\x46\x41\x58\x52\x45\x53\x4F\x4C\x55\x54\x49\x4F\x4E\x7D","\x4F\x4B\x20\x22\x24\x7B\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x7D\x22\x20\x22\x24\x7B\x46\x41\x58\x53\x54\x41\x54\x55\x53\x53\x54\x52\x49\x4E\x47\x7D\x22\x20\x22\x24\x7B\x46\x41\x58\x50\x41\x47\x45\x53\x7D\x22","\x56\x6F\x69\x63\x65\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x69\x6E\x62\x6F\x75\x6E\x64\x2D\x66\x61\x78","\x2A\x2A\x2A\x2A\x20\x46\x41\x58\x20\x52\x45\x43\x45\x49\x56\x45\x44\x20\x66\x72\x6F\x6D\x20\x24\x7B\x43\x41\x4C\x4C\x45\x52\x49\x44\x28\x6E\x75\x6D\x29\x7D\x20\x24\x7B\x53\x54\x52\x46\x54\x49\x4D\x45\x28\x24\x7B\x45\x50\x4F\x43\x48\x7D\x2C\x2C\x25\x63\x29\x7D\x20\x2A\x2A\x2A\x2A","\x46\x41\x58\x4F\x50\x54\x28\x65\x63\x6D\x29\x3A\x79\x65\x73","\x46\x49\x4C\x45\x4E\x41\x4D\x45\x3A\x24\x7B\x55\x4E\x49\x51\x55\x45\x49\x44\x7D","\x46\x41\x58\x46\x49\x4C\x45\x3A\x24\x7B\x46\x49\x4C\x45\x4E\x41\x4D\x45\x7D\x2E\x74\x69\x66","\x46\x41\x58\x4F\x50\x54\x28\x68\x65\x61\x64\x65\x72\x69\x6E\x66\x6F\x29\x3A\x52\x65\x63\x65\x69\x76\x65\x64\x20\x62\x79\x20\x58\x65\x6E\x69\x61\x4C\x41\x42\x20\x24\x7B\x53\x54\x52\x46\x54\x49\x4D\x45\x28\x24\x7B\x45\x50\x4F\x43\x48\x7D\x2C\x2C\x25\x59\x2D\x25\x6D\x2D\x25\x64\x20\x25\x48\x3A\x25\x4D\x29\x7D","\x46\x41\x58\x4F\x50\x54\x28\x68\x65\x61\x64\x65\x72\x69\x6E\x66\x6F\x29\x20\x3A\x20\x24\x7B\x46\x41\x58\x4F\x50\x54\x28\x68\x65\x61\x64\x65\x72\x69\x6E\x66\x6F\x29\x7D","\x46\x41\x58\x4F\x50\x54\x28\x6C\x6F\x63\x61\x6C\x73\x74\x61\x74\x69\x6F\x6E\x69\x64\x29\x20\x3A\x20\x24\x7B\x46\x41\x58\x4F\x50\x54\x28\x6C\x6F\x63\x61\x6C\x73\x74\x61\x74\x69\x6F\x6E\x69\x64\x29\x7D","\x46\x41\x58\x4F\x50\x54\x28\x6D\x61\x78\x72\x61\x74\x65\x29\x20\x3A\x20\x24\x7B\x46\x41\x58\x4F\x50\x54\x28\x6D\x61\x78\x72\x61\x74\x65\x29\x7D","\x46\x41\x58\x4F\x50\x54\x28\x6D\x69\x6E\x72\x61\x74\x65\x29\x20\x3A\x20\x24\x7B\x46\x41\x58\x4F\x50\x54\x28\x6D\x69\x6E\x72\x61\x74\x65\x29\x7D","\x2A\x2A\x2A\x2A\x20\x52\x45\x43\x45\x49\x56\x49\x4E\x47\x20\x46\x41\x58\x20\x3A\x20\x24\x7B\x46\x41\x58\x46\x49\x4C\x45\x7D\x20\x2A\x2A\x2A\x2A","\x52\x65\x63\x65\x69\x76\x65\x46\x61\x78","\x2F\x74\x6D\x70\x2F\x24\x7B\x46\x41\x58\x46\x49\x4C\x45\x7D","\x48\x61\x6E\x67\x75\x70","\x46\x69\x6E\x69\x73\x68\x65\x64\x20\x70\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x73\x71\x75\x61\x72\x65\x20\x70\x72\x6F\x6A\x65\x63\x74\x73","\x70\x72\x6F\x6A\x65\x63\x74\x31","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x20\x70\x72\x6F\x6A\x65\x63\x74","\x53\x71\x75\x61\x72\x65\x50\x72\x6F\x6A\x65\x63\x74","\x46\x69\x6E\x69\x73\x68\x65\x64\x20\x70\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x73","\x76\x61\x72\x69\x61\x62\x6C\x65\x31","\x56\x61\x72\x69\x61\x62\x6C\x65","\x46\x69\x6E\x69\x73\x68\x65\x64\x20\x70\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x63\x6F\x6E\x74\x65\x78\x74\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x73","\x44\x65\x66\x61\x75\x6C\x74\x20\x63\x6F\x6E\x74\x65\x78\x74\x20\x28\x44\x4F\x20\x4E\x4F\x54\x20\x44\x45\x4C\x45\x54\x45\x29","\x66\x72\x6F\x6D\x2D\x76\x6F\x69\x70\x2D\x70\x72\x6F\x76\x69\x64\x65\x72","\x66\x72\x6F\x6D\x2D\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C","\x56\x6F\x69\x63\x65\x43\x6F\x6E\x74\x65\x78\x74","\x46\x69\x6E\x69\x73\x68\x65\x64\x20\x70\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x6D\x6F\x68\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x73","\x64\x65\x66\x61\x75\x6C\x74","\x66\x69\x6C\x65\x73","\x76\x61\x72\x2F\x6C\x69\x62\x2F\x61\x73\x74\x65\x72\x69\x73\x6B\x2F\x6D\x6F\x68","\x61\x6C\x70\x68\x61","\x77\x61\x76","\x56\x6F\x69\x63\x65\x4D\x75\x73\x69\x63\x4F\x6E\x48\x6F\x6C\x64","\x46\x69\x6E\x69\x73\x68\x65\x64\x20\x70\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x73\x65\x74\x74\x69\x6E\x67\x73","\x2F\x76\x61\x72\x2F\x6F\x70\x74\x2F\x6D\x6F\x74\x69\x6F\x6E\x2F\x73\x65\x72\x76\x65\x72\x2F\x66\x69\x6C\x65\x73\x2F\x73\x6F\x75\x6E\x64\x73\x2F\x63\x6F\x6E\x76\x65\x72\x74\x65\x64","\x53\x65\x74\x74\x69\x6E\x67\x73","\x4D\x6F\x74\x69\x6F\x6E\x20\x44\x61\x73\x68\x62\x6F\x61\x72\x64","\x63\x6F\x6C\x2D\x6D\x64\x2D\x34","\x63\x6C\x6F\x63\x6B","\x43\x6C\x6F\x63\x6B","\x68\x68\x3A\x6D\x6D\x3A\x73\x73\x20\x61","\x64\x64\x64\x64\x2C\x20\x4D\x4D\x4D\x4D\x20\x44\x6F\x20\x59\x59\x59\x59","\x63\x6F\x6C\x2D\x6D\x64\x2D\x38","\x69\x66\x72\x61\x6D\x65","\x49\x66\x72\x61\x6D\x65","\x68\x74\x74\x70\x73\x3A\x2F\x2F\x64\x65\x6D\x6F\x2E\x78\x63\x61\x6C\x6C\x79\x2E\x63\x6F\x6D\x2F\x73\x68\x6F\x70\x2F","\x73\x74\x72\x69\x6E\x67\x69\x66\x79","\x44\x61\x73\x68\x62\x6F\x61\x72\x64","\x46\x69\x6E\x69\x73\x68\x65\x64\x20\x70\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x73","\x5A\x65\x6E\x64\x65\x73\x6B","\x31\x2E\x30\x2E\x30","\x58\x65\x6E\x69\x61\x4C\x41\x42\x20\x73\x2E\x72\x2E\x6C\x2E","\x61\x73\x73\x65\x74\x73\x2F\x69\x6D\x61\x67\x65\x73\x2F\x6D\x65\x64\x69\x61\x2F\x7A\x65\x6E\x64\x65\x73\x6B\x32\x2E\x70\x6E\x67","\x7A\x65\x6E\x64\x65\x73\x6B","\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x20\x66\x6F\x72\x20\x5A\x65\x6E\x64\x65\x73\x6B","\x49\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x5B\x7B\x22\x69\x64\x22\x3A\x22\x31\x22\x2C\x22\x70\x61\x72\x65\x6E\x74\x22\x3A\x22\x23\x22\x2C\x22\x74\x65\x78\x74\x22\x3A\x22\x4D\x6F\x74\x69\x6F\x6E\x20\x52\x65\x70\x6F\x72\x74\x73\x22\x2C\x22\x69\x63\x6F\x6E\x22\x3A\x22\x69\x63\x6F\x6E\x2D\x72\x6F\x63\x6B\x65\x74\x22\x2C\x22\x73\x74\x61\x74\x65\x22\x3A\x7B\x22\x73\x65\x6C\x65\x63\x74\x65\x64\x22\x3A\x74\x72\x75\x65\x2C\x22\x6F\x70\x65\x6E\x65\x64\x22\x3A\x74\x72\x75\x65\x7D\x7D\x2C\x7B\x22\x69\x64\x22\x3A\x22\x32\x22\x2C\x22\x70\x61\x72\x65\x6E\x74\x22\x3A\x22\x31\x22\x2C\x22\x74\x65\x78\x74\x22\x3A\x22\x42\x61\x73\x69\x63\x20\x4E\x6F\x64\x65\x22\x2C\x22\x73\x74\x61\x74\x65\x22\x3A\x7B\x22\x73\x65\x6C\x65\x63\x74\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x6F\x70\x65\x6E\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x7D\x7D\x5D","\x5B\x7B\x22\x69\x64\x22\x3A\x22\x31\x22\x2C\x22\x74\x65\x78\x74\x22\x3A\x22\x43\x75\x73\x74\x6F\x6D\x20\x52\x65\x70\x6F\x72\x74\x73\x22\x2C\x22\x69\x63\x6F\x6E\x22\x3A\x22\x69\x63\x6F\x6E\x2D\x62\x6F\x6F\x6B\x2D\x6F\x70\x65\x6E\x22\x2C\x22\x6C\x69\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x69\x64\x22\x3A\x22\x31\x22\x7D\x2C\x22\x61\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x68\x72\x65\x66\x22\x3A\x22\x23\x22\x2C\x22\x69\x64\x22\x3A\x22\x31\x5F\x61\x6E\x63\x68\x6F\x72\x22\x7D\x2C\x22\x73\x74\x61\x74\x65\x22\x3A\x7B\x22\x6C\x6F\x61\x64\x65\x64\x22\x3A\x74\x72\x75\x65\x2C\x22\x6F\x70\x65\x6E\x65\x64\x22\x3A\x74\x72\x75\x65\x2C\x22\x73\x65\x6C\x65\x63\x74\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x64\x69\x73\x61\x62\x6C\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x7D\x2C\x22\x64\x61\x74\x61\x22\x3A\x7B\x7D\x2C\x22\x70\x61\x72\x65\x6E\x74\x22\x3A\x22\x23\x22\x7D\x2C\x7B\x22\x69\x64\x22\x3A\x22\x32\x22\x2C\x22\x74\x65\x78\x74\x22\x3A\x22\x42\x61\x73\x69\x63\x20\x4E\x6F\x64\x65\x22\x2C\x22\x69\x63\x6F\x6E\x22\x3A\x74\x72\x75\x65\x2C\x22\x6C\x69\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x69\x64\x22\x3A\x22\x32\x22\x7D\x2C\x22\x61\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x68\x72\x65\x66\x22\x3A\x22\x23\x22\x2C\x22\x69\x64\x22\x3A\x22\x32\x5F\x61\x6E\x63\x68\x6F\x72\x22\x7D\x2C\x22\x73\x74\x61\x74\x65\x22\x3A\x7B\x22\x6C\x6F\x61\x64\x65\x64\x22\x3A\x74\x72\x75\x65\x2C\x22\x6F\x70\x65\x6E\x65\x64\x22\x3A\x74\x72\x75\x65\x2C\x22\x73\x65\x6C\x65\x63\x74\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x64\x69\x73\x61\x62\x6C\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x7D\x2C\x22\x64\x61\x74\x61\x22\x3A\x7B\x7D\x2C\x22\x70\x61\x72\x65\x6E\x74\x22\x3A\x22\x31\x22\x7D\x5D","\x52\x65\x70\x6F\x72\x74\x54\x72\x65\x65","\x4D\x6F\x74\x69\x6F\x6E\x20\x53\x65\x72\x76\x69\x63\x65","\x53\x65\x72\x76\x69\x63\x65"];_0xce3f[0];var _=require(_0xce3f[1]);var models=require(_0xce3f[2]);var _users;var _team;models[_0xce3f[34]][_0xce3f[33]]([{provider:_0xce3f[12],role:_0xce3f[13],fullname:_0xce3f[14],email:_0xce3f[15],name:_0xce3f[13],password:_0xce3f[16],defaultuser:_0xce3f[17],host:_0xce3f[18],type:_0xce3f[19],transport:_0xce3f[20],allow:_0xce3f[21],qualify:_0xce3f[22],nat:_0xce3f[23],disallow:_0xce3f[24],context:_0xce3f[25],internal:1000},{provider:_0xce3f[12],role:_0xce3f[7],fullname:_0xce3f[26],email:_0xce3f[27],name:_0xce3f[28],password:_0xce3f[29],defaultuser:_0xce3f[28],host:_0xce3f[18],type:_0xce3f[19],transport:_0xce3f[20],allow:_0xce3f[21],qualify:_0xce3f[22],nat:_0xce3f[23],disallow:_0xce3f[24],context:_0xce3f[25],internal:1001},{provider:_0xce3f[12],role:_0xce3f[7],fullname:_0xce3f[30],email:_0xce3f[31],name:_0xce3f[32],password:_0xce3f[29],defaultuser:_0xce3f[32],host:_0xce3f[18],type:_0xce3f[19],transport:_0xce3f[20],allow:_0xce3f[21],qualify:_0xce3f[22],nat:_0xce3f[23],disallow:_0xce3f[24],context:_0xce3f[25],internal:1002}],{ignoreDuplicates:true,individualHooks:true})[_0xce3f[4]](function(_0xc9ccx6){console[_0xce3f[6]](_0xce3f[5]);_users=_[_0xce3f[8]](_0xc9ccx6,{role:_0xce3f[7]});return models[_0xce3f[11]][_0xce3f[10]]({name:_0xce3f[9],description:_0xce3f[9],defaultEntry:true})})[_0xce3f[4]](function(_0xc9ccx5){_team=_0xc9ccx5;return _team[_0xce3f[3]](_users)});models[_0xce3f[64]][_0xce3f[33]]([{name:_0xce3f[36],title:_0xce3f[37]},{name:_0xce3f[38],title:_0xce3f[39]},{name:_0xce3f[40],title:_0xce3f[41]},{name:_0xce3f[42],title:_0xce3f[43]},{name:_0xce3f[44],title:_0xce3f[45]},{name:_0xce3f[46],title:_0xce3f[47]},{name:_0xce3f[48],title:_0xce3f[49]},{name:_0xce3f[50],title:_0xce3f[51]},{name:_0xce3f[52],title:_0xce3f[53]},{name:_0xce3f[54],title:_0xce3f[55]},{name:_0xce3f[56],title:_0xce3f[57]},{name:_0xce3f[58],title:_0xce3f[59]},{name:_0xce3f[60],title:_0xce3f[61]},{name:_0xce3f[62],title:_0xce3f[63]}],{ignoreDuplicates:true})[_0xce3f[4]](function(){console[_0xce3f[6]](_0xce3f[35])});models[_0xce3f[92]][_0xce3f[33]]([{context:_0xce3f[66],exten:_0xce3f[67],priority:1,app:_0xce3f[68],appdata:_0xce3f[69],type:_0xce3f[66]},{context:_0xce3f[66],exten:_0xce3f[67],priority:2,app:_0xce3f[70],appdata:_0xce3f[71],type:_0xce3f[66]},{context:_0xce3f[66],exten:_0xce3f[67],priority:3,app:_0xce3f[72],appdata:_0xce3f[73],type:_0xce3f[66]},{context:_0xce3f[66],exten:_0xce3f[67],priority:4,app:_0xce3f[72],appdata:_0xce3f[74],type:_0xce3f[66]},{context:_0xce3f[66],exten:_0xce3f[67],priority:5,app:_0xce3f[72],appdata:_0xce3f[75],type:_0xce3f[66]},{context:_0xce3f[66],exten:_0xce3f[67],priority:6,app:_0xce3f[72],appdata:_0xce3f[76],type:_0xce3f[66]},{context:_0xce3f[66],exten:_0xce3f[67],priority:7,app:_0xce3f[72],appdata:_0xce3f[77],type:_0xce3f[66]},{context:_0xce3f[66],exten:_0xce3f[67],priority:8,app:_0xce3f[72],appdata:_0xce3f[78],type:_0xce3f[66]},{context:_0xce3f[66],exten:_0xce3f[67],priority:9,app:_0xce3f[79],appdata:_0xce3f[80],type:_0xce3f[66]},{context:_0xce3f[66],exten:_0xce3f[67],priority:10,app:_0xce3f[68],appdata:_0xce3f[81],type:_0xce3f[66]},{context:_0xce3f[66],exten:_0xce3f[82],priority:1,app:_0xce3f[68],appdata:_0xce3f[83],type:_0xce3f[66]},{context:_0xce3f[66],exten:_0xce3f[82],priority:2,app:_0xce3f[68],appdata:_0xce3f[84],type:_0xce3f[66]},{context:_0xce3f[66],exten:_0xce3f[82],priority:3,app:_0xce3f[68],appdata:_0xce3f[85],type:_0xce3f[66]},{context:_0xce3f[66],exten:_0xce3f[82],priority:4,app:_0xce3f[68],appdata:_0xce3f[86],type:_0xce3f[66]},{context:_0xce3f[66],exten:_0xce3f[82],priority:5,app:_0xce3f[68],appdata:_0xce3f[87],type:_0xce3f[66]},{context:_0xce3f[66],exten:_0xce3f[82],priority:6,app:_0xce3f[68],appdata:_0xce3f[88],type:_0xce3f[66]},{context:_0xce3f[66],exten:_0xce3f[82],priority:7,app:_0xce3f[68],appdata:_0xce3f[89],type:_0xce3f[66]},{context:_0xce3f[66],exten:_0xce3f[82],priority:8,app:_0xce3f[68],appdata:_0xce3f[90],type:_0xce3f[66]},{context:_0xce3f[66],exten:_0xce3f[82],priority:9,app:_0xce3f[68],appdata:_0xce3f[91],type:_0xce3f[66]}],{ignoreDuplicates:true})[_0xce3f[4]](function(){console[_0xce3f[6]](_0xce3f[65])});models[_0xce3f[92]][_0xce3f[33]]([{context:_0xce3f[93],exten:_0xce3f[67],priority:1,app:_0xce3f[68],appdata:_0xce3f[94],type:_0xce3f[93]},{context:_0xce3f[93],exten:_0xce3f[67],priority:2,app:_0xce3f[72],appdata:_0xce3f[95],type:_0xce3f[93]},{context:_0xce3f[93],exten:_0xce3f[67],priority:3,app:_0xce3f[72],appdata:_0xce3f[96],type:_0xce3f[93]},{context:_0xce3f[93],exten:_0xce3f[67],priority:4,app:_0xce3f[72],appdata:_0xce3f[97],type:_0xce3f[93]},{context:_0xce3f[93],exten:_0xce3f[67],priority:5,app:_0xce3f[72],appdata:_0xce3f[98],type:_0xce3f[93]},{context:_0xce3f[93],exten:_0xce3f[67],priority:6,app:_0xce3f[72],appdata:_0xce3f[76],type:_0xce3f[93]},{context:_0xce3f[93],exten:_0xce3f[67],priority:7,app:_0xce3f[72],appdata:_0xce3f[77],type:_0xce3f[93]},{context:_0xce3f[93],exten:_0xce3f[67],priority:8,app:_0xce3f[72],appdata:_0xce3f[78],type:_0xce3f[93]},{context:_0xce3f[93],exten:_0xce3f[67],priority:9,app:_0xce3f[68],appdata:_0xce3f[83],type:_0xce3f[93]},{context:_0xce3f[93],exten:_0xce3f[67],priority:10,app:_0xce3f[68],appdata:_0xce3f[99],type:_0xce3f[93]},{context:_0xce3f[93],exten:_0xce3f[67],priority:11,app:_0xce3f[68],appdata:_0xce3f[100],type:_0xce3f[93]},{context:_0xce3f[93],exten:_0xce3f[67],priority:12,app:_0xce3f[68],appdata:_0xce3f[101],type:_0xce3f[93]},{context:_0xce3f[93],exten:_0xce3f[67],priority:13,app:_0xce3f[68],appdata:_0xce3f[102],type:_0xce3f[93]},{context:_0xce3f[93],exten:_0xce3f[67],priority:14,app:_0xce3f[68],appdata:_0xce3f[103],type:_0xce3f[93]},{context:_0xce3f[93],exten:_0xce3f[67],priority:15,app:_0xce3f[104],appdata:_0xce3f[105],type:_0xce3f[93]},{context:_0xce3f[93],exten:_0xce3f[67],priority:16,app:_0xce3f[106],type:_0xce3f[93]},{context:_0xce3f[93],exten:_0xce3f[82],priority:1,app:_0xce3f[68],appdata:_0xce3f[83],type:_0xce3f[93]}],{ignoreDuplicates:true})[_0xce3f[4]](function(){console[_0xce3f[6]](_0xce3f[65])});models[_0xce3f[110]][_0xce3f[33]]([{name:_0xce3f[108],description:_0xce3f[109]}],{ignoreDuplicates:true})[_0xce3f[4]](function(){console[_0xce3f[6]](_0xce3f[107])});models[_0xce3f[113]][_0xce3f[33]]([{name:_0xce3f[112],description:_0xce3f[109]}],{ignoreDuplicates:true})[_0xce3f[4]](function(){console[_0xce3f[6]](_0xce3f[111])});models[_0xce3f[118]][_0xce3f[33]]([{name:_0xce3f[25],description:_0xce3f[115],defaultEntry:true},{name:_0xce3f[116],description:_0xce3f[115],defaultEntry:true},{name:_0xce3f[93],description:_0xce3f[115],defaultEntry:true},{name:_0xce3f[66],description:_0xce3f[115],defaultEntry:true},{name:_0xce3f[117],description:_0xce3f[115],defaultEntry:true}],{ignoreDuplicates:true,individualHooks:true})[_0xce3f[4]](function(){console[_0xce3f[6]](_0xce3f[114])});models[_0xce3f[125]][_0xce3f[33]]([{name:_0xce3f[120],mode:_0xce3f[121],directory:_0xce3f[122],sort:_0xce3f[123],format:_0xce3f[124],defaultEntry:true}],{ignoreDuplicates:true,individualHooks:true})[_0xce3f[4]](function(){console[_0xce3f[6]](_0xce3f[119])});models[_0xce3f[128]][_0xce3f[10]]({min_internal:1003,soundPath:_0xce3f[127]})[_0xce3f[4]](function(){console[_0xce3f[6]](_0xce3f[126])});models[_0xce3f[140]][_0xce3f[33]]([{id:1,name:_0xce3f[129],model:JSON[_0xce3f[139]]({title:_0xce3f[129],rows:[{columns:[{styleClass:_0xce3f[130],widgets:[{type:_0xce3f[131],title:_0xce3f[132],config:{timePattern:_0xce3f[133],datePattern:_0xce3f[134]}}]},{styleClass:_0xce3f[135],widgets:[{type:_0xce3f[136],title:_0xce3f[137],config:{url:_0xce3f[138]}}]}]}]}),defaultEntry:true,editable:false}],{ignoreDuplicates:true,individualHooks:true})[_0xce3f[4]](function(){console[_0xce3f[6]](_0xce3f[119])});models[_0xce3f[148]][_0xce3f[33]]([{name:_0xce3f[142],version:_0xce3f[143],active:false,author:_0xce3f[144],logo:_0xce3f[145],state:_0xce3f[146],description:_0xce3f[147]}],{ignoreDuplicates:true,individualHooks:true})[_0xce3f[4]](function(){console[_0xce3f[6]](_0xce3f[141])});models[_0xce3f[151]][_0xce3f[33]]([{id:1,tree:_0xce3f[149]},{id:2,tree:_0xce3f[150]}],{ignoreDuplicates:true,individualHooks:true})[_0xce3f[4]](function(){console[_0xce3f[6]](_0xce3f[141])});models[_0xce3f[153]][_0xce3f[33]]([{id:1,name:_0xce3f[152],defaultEntry:true}],{ignoreDuplicates:true,individualHooks:true})[_0xce3f[4]](function(){console[_0xce3f[6]](_0xce3f[141])})
\ No newline at end of file
+/**
+ * Populate DB with sample data on server start
+ * to disable, edit config/environment/index.js, and set `seedDB: false`
+ */
+
+'use strict';
+
+var _ = require('lodash');
+var models = require('../models');
+var _users;
+var _team;
+
+models.User
+  .bulkCreate([{
+    provider: 'local',
+    role: 'admin',
+    fullname: 'Administrator',
+    email: 'admin@admin.com',
+    name: 'admin',
+    password: 'password',
+    defaultuser: 'xcally',
+    host: 'dynamic',
+    type: 'FRIEND',
+    transport: 'udp',
+    allow: 'alaw;ulaw;gsm',
+    qualify: 'yes',
+    nat: 'force_rport,comedia',
+    disallow: 'all',
+    context: 'from-sip',
+    internal: 1000
+  }, {
+    provider: 'local',
+    role: 'agent',
+    fullname: 'John Doe',
+    email: 'john.doe@gmail.com',
+    name: 'john.doe',
+    password: 'shuttle55',
+    defaultuser: 'john.doe',
+    host: 'dynamic',
+    type: 'FRIEND',
+    transport: 'udp',
+    allow: 'alaw;ulaw;gsm',
+    qualify: 'yes',
+    nat: 'force_rport,comedia',
+    disallow: 'all',
+    context: 'from-sip',
+    internal: 1001
+  }, {
+    provider: 'local',
+    role: 'agent',
+    fullname: 'Jane Miller',
+    email: 'jane.miller@gmail.com',
+    name: 'jane.miller',
+    password: 'shuttle55',
+    defaultuser: 'jane.miller',
+    host: 'dynamic',
+    type: 'FRIEND',
+    transport: 'udp',
+    allow: 'alaw;ulaw;gsm',
+    qualify: 'yes',
+    nat: 'force_rport,comedia',
+    disallow: 'all',
+    context: 'from-sip',
+    internal: 1002
+  }], {
+    ignoreDuplicates: true,
+    individualHooks: true
+  }).then(function(users) {
+    console.log('Finished populating users');
+    _users = _.filter(users, {
+      role: 'agent'
+    });
+    return models.Team
+      .create({
+        name: "Default Team",
+        description: "Default Team",
+        defaultEntry: true
+      });
+  }).then(function(team) {
+    _team = team;
+    return _team.setUsers(_users);
+  });
+
+// Init modules table
+models.Module
+  .bulkCreate([{
+    name: "dashboard",
+    title: "APPLICATION_DASHBOARD"
+  }, {
+    name: "users",
+    title: "APPLICATION_USERS"
+  }, {
+    name: "agents",
+    title: "APPLICATION_AGENTS"
+  }, {
+    name: "teams",
+    title: "APPLICATION_TEAMS"
+  }, {
+    name: "chat",
+    title: "APPLICATION_CHAT"
+  }, {
+    name: "voice",
+    title: "APPLICATION_VOICE"
+  }, {
+    name: "mail",
+    title: "APPLICATION_MAIL"
+  }, {
+    name: "fax",
+    title: "APPLICATION_FAX"
+  }, {
+    name: "audio",
+    title: "APPLICATION_AUDIO"
+  }, {
+    name: "callysquare",
+    title: "APPLICATION_CALLYSQUARE"
+  }, {
+    name: "analytics",
+    title: "APPLICATION_ANALYTICS"
+  }, {
+    name: "realtime",
+    title: "APPLICATION_REALTIME"
+  }, {
+    name: "voicemails",
+    title: "APPLICATION_VOICEMAILS"
+  }, {
+    name: "settings",
+    title: "APPLICATION_SETTINGS"
+  }], {
+    ignoreDuplicates: true
+  }).then(function() {
+    console.log('Finished populating modules');
+  });
+
+models.VoiceExtension
+  .bulkCreate([{
+    context: 'outbound-fax',
+    exten: 's',
+    priority: 1,
+    app: 'NoOp',
+    appdata: 'Fax UUID: ${FAXUUID}',
+    type: 'outbound-fax'
+  }, {
+    context: 'outbound-fax',
+    exten: 's',
+    priority: 2,
+    app: 'UserEvent',
+    appdata: 'Fax,uuid: ${FAXUUID}',
+    type: 'outbound-fax'
+  }, {
+    context: 'outbound-fax',
+    exten: 's',
+    priority: 3,
+    app: 'Set',
+    appdata: 'FAXOPT(filename):${FAXFILE}',
+    type: 'outbound-fax'
+  }, {
+    context: 'outbound-fax',
+    exten: 's',
+    priority: 4,
+    app: 'Set',
+    appdata: 'FAXOPT(ecm):${ECM}',
+    type: 'outbound-fax'
+  }, {
+    context: 'outbound-fax',
+    exten: 's',
+    priority: 5,
+    app: 'Set',
+    appdata: 'FAXOPT(headerinfo):${FAXHEADER}',
+    type: 'outbound-fax'
+  }, {
+    context: 'outbound-fax',
+    exten: 's',
+    priority: 6,
+    app: 'Set',
+    appdata: 'FAXOPT(localstationid):${LOCALID}',
+    type: 'outbound-fax'
+  }, {
+    context: 'outbound-fax',
+    exten: 's',
+    priority: 7,
+    app: 'Set',
+    appdata: 'FAXOPT(maxrate):${MAXRATE}',
+    type: 'outbound-fax'
+  }, {
+    context: 'outbound-fax',
+    exten: 's',
+    priority: 8,
+    app: 'Set',
+    appdata: 'FAXOPT(minrate):${MINRATE}',
+    type: 'outbound-fax'
+  }, {
+    context: 'outbound-fax',
+    exten: 's',
+    priority: 9,
+    app: 'SendFAX',
+    appdata: '${FAXFILE},d',
+    type: 'outbound-fax'
+  }, {
+    context: 'outbound-fax',
+    exten: 's',
+    priority: 10,
+    app: 'NoOp',
+    appdata: 'ERROR "${TIMESTAMP}" "NO_STATUS" "NO_PAGES"',
+    type: 'outbound-fax'
+  }, {
+    context: 'outbound-fax',
+    exten: 'h',
+    priority: 1,
+    app: 'NoOp',
+    appdata: 'FAXOPT(ecm) : ${FAXOPT(ecm)}',
+    type: 'outbound-fax'
+  }, {
+    context: 'outbound-fax',
+    exten: 'h',
+    priority: 2,
+    app: 'NoOp',
+    appdata: 'FaxStatus : ${FAXSTATUS}',
+    type: 'outbound-fax'
+  }, {
+    context: 'outbound-fax',
+    exten: 'h',
+    priority: 3,
+    app: 'NoOp',
+    appdata: 'FaxStatusString : ${FAXSTATUSSTRING}',
+    type: 'outbound-fax'
+  }, {
+    context: 'outbound-fax',
+    exten: 'h',
+    priority: 4,
+    app: 'NoOp',
+    appdata: 'FaxError : ${FAXERROR}',
+    type: 'outbound-fax'
+  }, {
+    context: 'outbound-fax',
+    exten: 'h',
+    priority: 5,
+    app: 'NoOp',
+    appdata: 'RemoteStationID : ${REMOTESTATIONID}',
+    type: 'outbound-fax'
+  }, {
+    context: 'outbound-fax',
+    exten: 'h',
+    priority: 6,
+    app: 'NoOp',
+    appdata: 'FaxPages : ${FAXPAGES}',
+    type: 'outbound-fax'
+  }, {
+    context: 'outbound-fax',
+    exten: 'h',
+    priority: 7,
+    app: 'NoOp',
+    appdata: 'FaxBitRate : ${FAXBITRATE}',
+    type: 'outbound-fax'
+  }, {
+    context: 'outbound-fax',
+    exten: 'h',
+    priority: 8,
+    app: 'NoOp',
+    appdata: 'FaxResolution : ${FAXRESOLUTION}',
+    type: 'outbound-fax'
+  }, {
+    context: 'outbound-fax',
+    exten: 'h',
+    priority: 9,
+    app: 'NoOp',
+    appdata: 'OK "${TIMESTAMP}" "${FAXSTATUSSTRING}" "${FAXPAGES}"',
+    type: 'outbound-fax'
+  }], {
+    ignoreDuplicates: true
+  })
+  .then(function() {
+    console.log('Finished populating fax outbound voice extension');
+  });
+
+models.VoiceExtension
+  .bulkCreate([{
+    context: 'inbound-fax',
+    exten: 's',
+    priority: 1,
+    app: 'NoOp',
+    appdata: '**** FAX RECEIVED from ${CALLERID(num)} ${STRFTIME(${EPOCH},,%c)} ****',
+    type: 'inbound-fax'
+  }, {
+    context: 'inbound-fax',
+    exten: 's',
+    priority: 2,
+    app: 'Set',
+    appdata: 'FAXOPT(ecm):yes',
+    type: 'inbound-fax'
+  }, {
+    context: 'inbound-fax',
+    exten: 's',
+    priority: 3,
+    app: 'Set',
+    appdata: 'FILENAME:${UNIQUEID}',
+    type: 'inbound-fax'
+  }, {
+    context: 'inbound-fax',
+    exten: 's',
+    priority: 4,
+    app: 'Set',
+    appdata: 'FAXFILE:${FILENAME}.tif',
+    type: 'inbound-fax'
+  }, {
+    context: 'inbound-fax',
+    exten: 's',
+    priority: 5,
+    app: 'Set',
+    appdata: 'FAXOPT(headerinfo):Received by XeniaLAB ${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M)}',
+    type: 'inbound-fax'
+  }, {
+    context: 'inbound-fax',
+    exten: 's',
+    priority: 6,
+    app: 'Set',
+    appdata: 'FAXOPT(localstationid):${LOCALID}',
+    type: 'inbound-fax'
+  }, {
+    context: 'inbound-fax',
+    exten: 's',
+    priority: 7,
+    app: 'Set',
+    appdata: 'FAXOPT(maxrate):${MAXRATE}',
+    type: 'inbound-fax'
+  }, {
+    context: 'inbound-fax',
+    exten: 's',
+    priority: 8,
+    app: 'Set',
+    appdata: 'FAXOPT(minrate):${MINRATE}',
+    type: 'inbound-fax'
+  }, {
+    context: 'inbound-fax',
+    exten: 's',
+    priority: 9,
+    app: 'NoOp',
+    appdata: 'FAXOPT(ecm) : ${FAXOPT(ecm)}',
+    type: 'inbound-fax'
+  }, {
+    context: 'inbound-fax',
+    exten: 's',
+    priority: 10,
+    app: 'NoOp',
+    appdata: 'FAXOPT(headerinfo) : ${FAXOPT(headerinfo)}',
+    type: 'inbound-fax'
+  }, {
+    context: 'inbound-fax',
+    exten: 's',
+    priority: 11,
+    app: 'NoOp',
+    appdata: 'FAXOPT(localstationid) : ${FAXOPT(localstationid)}',
+    type: 'inbound-fax'
+  }, {
+    context: 'inbound-fax',
+    exten: 's',
+    priority: 12,
+    app: 'NoOp',
+    appdata: 'FAXOPT(maxrate) : ${FAXOPT(maxrate)}',
+    type: 'inbound-fax'
+  }, {
+    context: 'inbound-fax',
+    exten: 's',
+    priority: 13,
+    app: 'NoOp',
+    appdata: 'FAXOPT(minrate) : ${FAXOPT(minrate)}',
+    type: 'inbound-fax'
+  }, {
+    context: 'inbound-fax',
+    exten: 's',
+    priority: 14,
+    app: 'NoOp',
+    appdata: '**** RECEIVING FAX : ${FAXFILE} ****',
+    type: 'inbound-fax'
+  }, {
+    context: 'inbound-fax',
+    exten: 's',
+    priority: 15,
+    app: 'ReceiveFax',
+    appdata: '/tmp/${FAXFILE}',
+    type: 'inbound-fax'
+  }, {
+    context: 'inbound-fax',
+    exten: 's',
+    priority: 16,
+    app: 'Hangup',
+    type: 'inbound-fax'
+  }, {
+    context: 'inbound-fax',
+    exten: 'h',
+    priority: 1,
+    app: 'NoOp',
+    appdata: 'FAXOPT(ecm) : ${FAXOPT(ecm)}',
+    type: 'inbound-fax'
+  }], {
+    ignoreDuplicates: true
+  })
+  .then(function() {
+    console.log('Finished populating fax outbound voice extension');
+  });
+
+models.SquareProject
+  .bulkCreate([{
+    name: "project1",
+    description: "description project"
+  }], {
+    ignoreDuplicates: true
+  }).then(function() {
+    console.log('Finished populating square projects');
+  });
+
+models.Variable
+  .bulkCreate([{
+    name: "variable1",
+    description: "description project"
+  }], {
+    ignoreDuplicates: true
+  }).then(function() {
+    console.log('Finished populating variables');
+  });
+
+models.VoiceContext
+  .bulkCreate([{
+    name: "from-sip",
+    description: "Default context (DO NOT DELETE)",
+    defaultEntry: true
+  }, {
+    name: "from-voip-provider",
+    description: "Default context (DO NOT DELETE)",
+    defaultEntry: true
+  }, {
+    name: "inbound-fax",
+    description: "Default context (DO NOT DELETE)",
+    defaultEntry: true
+  }, {
+    name: "outbound-fax",
+    description: "Default context (DO NOT DELETE)",
+    defaultEntry: true
+  }, {
+    name: "from-voicemail",
+    description: "Default context (DO NOT DELETE)",
+    defaultEntry: true
+  }], {
+    ignoreDuplicates: true,
+    individualHooks: true
+  }).then(function() {
+    console.log('Finished populating context variables');
+  });
+
+models.VoiceMusicOnHold
+  .bulkCreate([{
+    name: "default",
+    mode: "files",
+    directory: 'var/lib/asterisk/moh',
+    sort: 'alpha',
+    format: 'wav',
+    defaultEntry: true
+  }], {
+    ignoreDuplicates: true,
+    individualHooks: true
+  }).then(function() {
+    console.log('Finished populating moh variables');
+  });
+
+models.Settings
+  .create({
+    min_internal: 1003,
+    soundPath: '/var/opt/motion/server/files/sounds/converted'
+  }).then(function() {
+    console.log('Finished populating settings');
+  });
+
+models.Dashboard
+  .bulkCreate([{
+    id: 1,
+    name: 'Motion Dashboard',
+    model: JSON.stringify({
+      title: 'Motion Dashboard',
+      rows: [{
+        columns: [{
+          styleClass: 'col-md-4',
+          widgets: [{
+            type: 'clock',
+            title: 'Clock',
+            config: {
+              timePattern: 'hh:mm:ss a',
+              datePattern: 'dddd, MMMM Do YYYY'
+            }
+          }]
+        }, {
+          styleClass: 'col-md-8',
+          widgets: [{
+            type: 'iframe',
+            title: 'Iframe',
+            config: {
+              url: 'https://demo.xcally.com/shop/'
+            }
+          }]
+        }]
+      }]
+    }),
+    defaultEntry: true,
+    editable: false
+  }], {
+    ignoreDuplicates: true,
+    individualHooks: true
+  }).then(function() {
+    console.log('Finished populating moh variables');
+  });
+
+models.Integration
+  .bulkCreate([{
+    name: 'Zendesk',
+    version: '1.0.0',
+    active: false,
+    author: 'XeniaLAB s.r.l.',
+    logo: 'assets/images/media/zendesk2.png',
+    state: 'zendesk',
+    description: 'Description for Zendesk'
+  }], {
+    ignoreDuplicates: true,
+    individualHooks: true
+  }).then(function() {
+    console.log('Finished populating integrations');
+  });
+
+models.ReportTree
+  .bulkCreate([{
+    id: 1,
+    tree: '[{"id":"1","parent":"#","text":"Motion Reports","icon":"icon-rocket","state":{"selected":true,"opened":true}},{"id":"2","parent":"1","text":"Basic Node","state":{"selected":false,"opened":false}}]',
+  }, {
+    id: 2,
+    tree: '[{"id":"1","text":"Custom Reports","icon":"icon-book-open","li_attr":{"id":"1"},"a_attr":{"href":"#","id":"1_anchor"},"state":{"loaded":true,"opened":true,"selected":false,"disabled":false},"data":{},"parent":"#"},{"id":"2","text":"Basic Node","icon":true,"li_attr":{"id":"2"},"a_attr":{"href":"#","id":"2_anchor"},"state":{"loaded":true,"opened":true,"selected":false,"disabled":false},"data":{},"parent":"1"}]'
+  }], {
+    ignoreDuplicates: true,
+    individualHooks: true
+  }).then(function() {
+    console.log('Finished populating integrations');
+  });
+
+models.Service
+  .bulkCreate([{
+    id: 1,
+    name: 'Motion Service',
+    defaultEntry: true
+  }], {
+    ignoreDuplicates: true,
+    individualHooks: true
+  }).then(function() {
+    console.log('Finished populating integrations');
+  });
index a284400..25f595d 100644 (file)
@@ -1 +1,21 @@
-var _0xf985=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x4D\x61\x69\x6C\x53\x65\x72\x76\x65\x72\x4F\x75\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x2E\x2F\x73\x6D\x74\x70","\x65\x78\x70\x6F\x72\x74\x73","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x66\x6F\x72\x45\x61\x63\x68","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6C\x6C"];_0xf985[0];var MailServerOut=require(_0xf985[2])[_0xf985[1]];var Smtp=require(_0xf985[3]);module[_0xf985[4]]=function(){MailServerOut[_0xf985[5]](function(_0x8798x3){ new Smtp(_0x8798x3)});return MailServerOut[_0xf985[10]]()[_0xf985[9]](function(_0x8798x5){_0x8798x5[_0xf985[8]](function(_0x8798x6){ new Smtp(_0x8798x6)})})[_0xf985[7]](function(_0x8798x4){console[_0xf985[6]](_0x8798x4)})}
\ No newline at end of file
+'use strict';
+
+var MailServerOut = require('../../models').MailServerOut;
+var Smtp = require('./smtp');
+
+module.exports = function () {
+  MailServerOut.afterCreate(function (doc) {
+    new Smtp(doc);
+  });
+
+  return MailServerOut
+    .findAll()
+    .then(function (data) {
+      data.forEach(function (elm) {
+        new Smtp(elm);
+      });
+    })
+    .catch(function (err) {
+      console.error(err);
+    });
+}
index 32ff8c0..365afdd 100644 (file)
@@ -1 +1,240 @@
-var _0x6464=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x62\x6C\x75\x65\x62\x69\x72\x64","\x6E\x6F\x64\x65\x6D\x61\x69\x6C\x65\x72","\x68\x74\x6D\x6C\x2D\x74\x6F\x2D\x74\x65\x78\x74","\x6E\x6F\x64\x65\x6D\x61\x69\x6C\x65\x72\x2D\x73\x6D\x74\x70\x2D\x74\x72\x61\x6E\x73\x70\x6F\x72\x74","\x55\x73\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x43\x6F\x6E\x74\x61\x63\x74","\x4D\x61\x69\x6C\x52\x6F\x6F\x6D","\x4D\x61\x69\x6C\x4D\x65\x73\x73\x61\x67\x65","\x43\x6F\x6E\x74\x61\x63\x74\x45\x6D\x61\x69\x6C","\x4D\x61\x69\x6C\x53\x65\x72\x76\x65\x72\x4F\x75\x74","\x4D\x41\x49\x4C\x20\x2D\x20\x41\x63\x63\x6F\x75\x6E\x74\x20","\x75\x73\x65\x72\x6E\x61\x6D\x65","\x20\x53\x4D\x54\x50\x20\x43\x52\x45\x41\x54\x45","\x6C\x6F\x67","\x68\x6F\x73\x74","\x70\x6F\x72\x74","\x73\x73\x6C","\x70\x61\x73\x73\x77\x6F\x72\x64","\x63\x72\x65\x61\x74\x65\x54\x72\x61\x6E\x73\x70\x6F\x72\x74","\x73\x74\x61\x74\x65","\x63\x68\x61\x6E\x67\x65\x64","\x75\x73\x65\x72","\x61\x75\x74\x68","\x6F\x70\x74\x69\x6F\x6E\x73","\x74\x72\x61\x6E\x73\x70\x6F\x72\x74\x65\x72","\x20\x53\x4D\x54\x50\x20\x55\x50\x44\x41\x54\x45","\x5B\x4D\x41\x49\x4C\x20\x2D\x20\x41\x63\x63\x6F\x75\x6E\x74\x20","\x20\x53\x4D\x54\x50\x20\x44\x45\x53\x54\x52\x4F\x59","\x73\x74\x61\x74\x75\x73","\x53\x45\x4E\x44\x49\x4E\x47","\x66\x72\x6F\x6D","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x69\x6E\x52\x65\x70\x6C\x79\x54\x6F","\x65\x72\x72","\x65\x72\x72\x6F\x72","\x6D\x65\x73\x73\x61\x67\x65","\x72\x65\x73\x70\x6F\x6E\x73\x65","\x49\x6E\x74\x65\x72\x6E\x61\x6C\x20\x53\x65\x72\x76\x65\x72\x20\x45\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x6D\x65\x73\x73\x61\x67\x65\x49\x64","\x53\x45\x4E\x54","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E","\x75\x70\x64\x61\x74\x65","\x74\x68\x65\x6E","\x74\x6F","\x63\x63","\x73\x75\x62\x6A\x65\x63\x74","\x68\x74\x6D\x6C","\x66\x72\x6F\x6D\x53\x74\x72\x69\x6E\x67","\x4D\x61\x69\x6C\x41\x74\x74\x61\x63\x68\x6D\x65\x6E\x74\x73","\x61\x74\x74\x61\x63\x68\x6D\x65\x6E\x74\x73","\x70\x61\x74\x68","\x6E\x61\x6D\x65","\x6D\x61\x70","\x73\x65\x6E\x64\x4D\x61\x69\x6C","\x61\x64\x64\x55\x73\x65\x72","\x61\x64\x64\x4D\x61\x69\x6C\x4D\x65\x73\x73\x61\x67\x65","\x67\x65\x74\x4D\x61\x69\x6C\x52\x6F\x6F\x6D","\x66\x69\x6E\x64\x4F\x6E\x65","\x69\x6E\x66\x6F","\x73\x70\x72\x65\x61\x64","\x4D\x61\x69\x6C\x52\x6F\x6F\x6D\x49\x64","\x3B","\x6A\x6F\x69\x6E","\x4F\x50\x45\x4E","\x4D\x61\x69\x6C\x41\x63\x63\x6F\x75\x6E\x74\x49\x64","\x66\x69\x6E\x64\x4F\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x6464[0];var _=require(_0x6464[1]);var Promise=require(_0x6464[2]);var nodemailer=require(_0x6464[3]);var htmlToText=require(_0x6464[4]);var smtpTransport=require(_0x6464[5]);var Agent=require(_0x6464[7])[_0x6464[6]];var Contact=require(_0x6464[7])[_0x6464[8]];var MailRoom=require(_0x6464[7])[_0x6464[9]];var MailMessage=require(_0x6464[7])[_0x6464[10]];var ContactEmail=require(_0x6464[7])[_0x6464[11]];var MailServerOut=require(_0x6464[7])[_0x6464[12]];function Smtp(_0x6ea0xd){var _0x6ea0xe;var _0x6ea0xf;function _0x6ea0x10(_0x6ea0xd){console[_0x6464[16]](_0x6464[13]+_0x6ea0xd[_0x6464[14]]+_0x6464[15]);_0x6ea0xf=_0x6ea0xd;_0x6ea0xe=nodemailer[_0x6464[21]](smtpTransport({host:_0x6ea0xd[_0x6464[17]],port:_0x6ea0xd[_0x6464[18]],secure:_0x6ea0xd[_0x6464[19]],debug:true,auth:{user:_0x6ea0xd[_0x6464[14]],pass:_0x6ea0xd[_0x6464[20]]}}))}function _0x6ea0x11(_0x6ea0xd){if(!_0x6ea0xd[_0x6464[23]](_0x6464[22])&&_0x6ea0xe[_0x6464[27]][_0x6464[26]][_0x6464[25]][_0x6464[24]]===_0x6ea0xd[_0x6464[14]]){console[_0x6464[16]](_0x6464[13]+_0x6ea0xd[_0x6464[14]]+_0x6464[28]);_0x6ea0xe=null;_0x6ea0xe=nodemailer[_0x6464[21]](smtpTransport({host:_0x6ea0xd[_0x6464[17]],port:_0x6ea0xd[_0x6464[18]],secure:_0x6ea0xd[_0x6464[19]],debug:true,auth:{user:_0x6ea0xd[_0x6464[14]],pass:_0x6ea0xd[_0x6464[20]]}}))}}function _0x6ea0x12(_0x6ea0xd){if(_0x6ea0xe[_0x6464[27]][_0x6464[26]][_0x6464[25]][_0x6464[24]]===_0x6ea0xd[_0x6464[14]]){console[_0x6464[16]](_0x6464[29]+_0x6ea0xd[_0x6464[14]]+_0x6464[30]);_0x6ea0xe=null}}function _0x6ea0x13(_0x6ea0x14,_0x6ea0x15){if(_0x6ea0x14[_0x6464[31]]===_0x6464[32]&&_0x6ea0xe[_0x6464[27]][_0x6464[26]][_0x6464[25]][_0x6464[24]]===_0x6ea0x14[_0x6464[34]][_0x6464[33]]){var _0x6ea0x16;var _0x6ea0x17=_0x6ea0x14;var _0x6ea0x18,_0x6ea0x19,_0x6ea0x1a,_0x6ea0x1b;if(_0x6ea0x17[_0x6464[35]]){return MailMessage[_0x6464[61]]({where:{messageId:_0x6ea0x17[_0x6464[35]]}})[_0x6464[46]](function(_0x6ea0x22){return _0x6ea0x22[_0x6464[60]]()})[_0x6464[46]](function(_0x6ea0x21){_0x6ea0x16=_0x6ea0x21;return _0x6ea0x16[_0x6464[59]](_0x6ea0x17,{transaction:_0x6ea0x15?_0x6ea0x15[_0x6464[44]]:null})})[_0x6464[46]](function(){return _0x6ea0x16[_0x6464[58]](_0x6ea0x17.UserId,{transaction:_0x6ea0x15?_0x6ea0x15[_0x6464[44]]:null})})[_0x6464[46]](function(_0x6ea0x20){_0x6ea0x1b=_[_0x6464[56]](_0x6ea0x20,function(_0x6ea0x1f){return _0x6ea0x1f[0]});return})[_0x6464[46]](function(){var _0x6ea0x1e={status:_0x6ea0x17[_0x6464[31]],from:_0x6ea0x17[_0x6464[33]],to:_0x6ea0x17[_0x6464[47]],cc:_0x6ea0x17[_0x6464[48]],subject:_0x6ea0x17[_0x6464[49]],html:_0x6ea0x17[_0x6464[50]],text:htmlToText[_0x6464[51]](_0x6ea0x17[_0x6464[50]],{wordwrap:false}),headers:{"\x58\x2D\x4C\x61\x7A\x69\x6E\x65\x73\x73\x2D\x6C\x65\x76\x65\x6C":1000}};if(_0x6ea0x17[_0x6464[52]]){_0x6ea0x1e[_0x6464[53]]=_[_0x6464[56]](_0x6ea0x17.MailAttachments,function(_0x6ea0x1f){return {path:_0x6ea0x1f[_0x6464[54]],filename:_0x6ea0x1f[_0x6464[55]]}})};return _0x6ea0xe[_0x6464[57]](_0x6ea0x1e)})[_0x6464[46]](function(_0x6ea0x1d){return _0x6ea0x17[_0x6464[45]]({messageId:_0x6ea0x1d[_0x6464[42]],status:_0x6464[43]},{transaction:_0x6ea0x15?_0x6ea0x15[_0x6464[44]]:null})})[_0x6464[41]](function(_0x6ea0x1c){console[_0x6464[37]](_0x6464[36],_0x6ea0x1c);throw {message:_0x6ea0x1c[_0x6464[38]]||_0x6ea0x1c[_0x6464[39]]||_0x6464[40]}})}else {console[_0x6464[16]](1);return MailRoom[_0x6464[69]]({where:{id:_0x6ea0x17[_0x6464[64]]},defaults:{subject:_0x6ea0x17[_0x6464[49]],from:_0x6ea0x17[_0x6464[33]][_0x6464[66]](_0x6464[65]),status:_0x6464[67],MailAccountId:_0x6ea0xf[_0x6464[68]]},transaction:_0x6ea0x15?_0x6ea0x15[_0x6464[44]]:null})[_0x6464[63]](function(_0x6ea0x21){console[_0x6464[16]](2);_0x6ea0x16=_0x6ea0x21;return _0x6ea0x16[_0x6464[59]](_0x6ea0x17,{transaction:_0x6ea0x15?_0x6ea0x15[_0x6464[44]]:null})})[_0x6464[46]](function(){console[_0x6464[16]](3);return _0x6ea0x16[_0x6464[58]](_0x6ea0x17.UserId,{transaction:_0x6ea0x15?_0x6ea0x15[_0x6464[44]]:null})})[_0x6464[46]](function(){console[_0x6464[16]](4);var _0x6ea0x1e={status:_0x6ea0x17[_0x6464[31]],from:_0x6ea0x17[_0x6464[33]],to:_0x6ea0x17[_0x6464[47]],cc:_0x6ea0x17[_0x6464[48]],subject:_0x6ea0x17[_0x6464[49]],html:_0x6ea0x17[_0x6464[50]],text:htmlToText[_0x6464[51]](_0x6ea0x17[_0x6464[50]],{wordwrap:false}),headers:{"\x58\x2D\x4C\x61\x7A\x69\x6E\x65\x73\x73\x2D\x6C\x65\x76\x65\x6C":1000}};if(_0x6ea0x17[_0x6464[52]]){_0x6ea0x1e[_0x6464[53]]=_[_0x6464[56]](_0x6ea0x17.MailAttachments,function(_0x6ea0x1f){return {path:_0x6ea0x1f[_0x6464[54]],filename:_0x6ea0x1f[_0x6464[55]]}})};return _0x6ea0xe[_0x6464[57]](_0x6ea0x1e)})[_0x6464[46]](function(_0x6ea0x1d){console[_0x6464[16]](_0x6464[62],_0x6ea0x1d);return _0x6ea0x17[_0x6464[45]]({messageId:_0x6ea0x1d[_0x6464[42]],status:_0x6464[43]},{transaction:_0x6ea0x15?_0x6ea0x15[_0x6464[44]]:null})})[_0x6464[41]](function(_0x6ea0x1c){console[_0x6464[37]](_0x6464[36],_0x6ea0x1c);throw {message:_0x6ea0x1c[_0x6464[38]]||_0x6ea0x1c[_0x6464[39]]||_0x6464[40]}})}}}_0x6ea0x10(_0x6ea0xd);MailServerOut[_0x6464[70]](function(_0x6ea0xd){return _0x6ea0x11(_0x6ea0xd)});MailServerOut[_0x6464[71]](function(_0x6ea0xd){return _0x6ea0x12(_0x6ea0xd)});MailMessage[_0x6464[72]](function(_0x6ea0xd,_0x6ea0x15){return _0x6ea0x13(_0x6ea0xd,_0x6ea0x15)});return {}}module[_0x6464[73]]=Smtp
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var Promise = require('bluebird');
+var nodemailer = require('nodemailer');
+var htmlToText = require('html-to-text');
+var smtpTransport = require('nodemailer-smtp-transport');
+
+var Agent = require('../../models').User;
+var Contact = require('../../models').Contact;
+var MailRoom = require('../../models').MailRoom;
+var MailMessage = require('../../models').MailMessage;
+var ContactEmail = require('../../models').ContactEmail;
+var MailServerOut = require('../../models').MailServerOut;
+
+function Smtp(doc) {
+
+  var _smtp;
+  var _doc;
+
+  function onSave(doc) {
+    console.log("MAIL - Account " + doc.username + " SMTP CREATE");
+    _doc = doc;
+    _smtp = nodemailer.createTransport(smtpTransport({
+      host: doc.host,
+      port: doc.port,
+      secure: doc.ssl,
+      debug: true,
+      auth: {
+        user: doc.username,
+        pass: doc.password
+      }
+    }));
+  }
+
+  function onUpdate(doc) {
+    if (!doc.changed('state') && _smtp.transporter.options.auth.user === doc.username) {
+      console.log("MAIL - Account " + doc.username + " SMTP UPDATE");
+      _smtp = null;
+      _smtp = nodemailer.createTransport(smtpTransport({
+        host: doc.host,
+        port: doc.port,
+        secure: doc.ssl,
+        debug: true,
+        auth: {
+          user: doc.username,
+          pass: doc.password
+        }
+      }));
+    }
+  }
+
+  function onRemove(doc) {
+    if (_smtp.transporter.options.auth.user === doc.username) {
+      console.log("[MAIL - Account " + doc.username + " SMTP DESTROY");
+      _smtp = null;
+    }
+  }
+
+  function onSend(mailMessage, options) {
+    if (mailMessage.status === 'SENDING' && _smtp.transporter.options.auth.user === mailMessage.dataValues.from) {
+      var _mRoom;
+      var _mMessage = mailMessage;
+      var _mFrom, _mTo, _mCc, _mBcc;
+
+      if (_mMessage.inReplyTo) {
+        return MailMessage
+          .findOne({
+            where: {
+              messageId: _mMessage.inReplyTo
+            }
+          })
+          .then(function(mailMessageParent) {
+            return mailMessageParent
+              .getMailRoom();
+          })
+          .then(function(mailRoom) {
+            _mRoom = mailRoom;
+            return _mRoom
+              .addMailMessage(_mMessage, {
+                transaction: options ? options.transaction : null
+              });
+          })
+          .then(function() {
+            return _mRoom
+              .addUser(_mMessage.UserId, {
+                transaction: options ? options.transaction : null
+              });
+          })
+          .then(function(mBcc) {
+            _mBcc = _.map(mBcc, function(elm) {
+              return elm[0];
+            });
+
+            return;
+          })
+          .then(function() {
+            var mail = {
+              status: _mMessage.status,
+              from: _mMessage.from,
+              to: _mMessage.to,
+              cc: _mMessage.cc,
+              subject: _mMessage.subject,
+              html: _mMessage.html,
+              text: htmlToText.fromString(_mMessage.html, {
+                wordwrap: false
+              }),
+              headers: {
+                'X-Laziness-level': 1000
+              }
+            };
+
+            if (_mMessage.MailAttachments) {
+              mail.attachments = _.map(_mMessage.MailAttachments, function(elm) {
+                return {
+                  path: elm.path,
+                  filename: elm.name
+                }
+              });
+            }
+
+            return _smtp.sendMail(mail);
+          })
+          .then(function(info) {
+            return _mMessage
+              .update({
+                messageId: info.messageId,
+                status: 'SENT'
+              }, {
+                transaction: options ? options.transaction : null
+              });
+          })
+          .catch(function(err) {
+            console.error('err', err);
+            throw {
+              message: err.message || err.response || 'Internal Server Error'
+            };
+          });
+      } else {
+        console.log(1);
+
+        return MailRoom
+          .findOrCreate({
+            where: {
+              id: _mMessage.MailRoomId
+            },
+            defaults: {
+              subject: _mMessage.subject,
+              from: _mMessage.from.join(';'),
+              status: 'OPEN',
+              MailAccountId: _doc.MailAccountId
+            },
+            transaction: options ? options.transaction : null
+          })
+          .spread(function(mailRoom) {
+            console.log(2);
+
+            _mRoom = mailRoom;
+            return _mRoom
+              .addMailMessage(_mMessage, {
+                transaction: options ? options.transaction : null
+              });
+          })
+          .then(function() {
+            console.log(3);
+
+            return _mRoom
+              .addUser(_mMessage.UserId, {
+                transaction: options ? options.transaction : null
+              });
+          })
+          .then(function() {
+            console.log(4);
+
+            var mail = {
+              status: _mMessage.status,
+              from: _mMessage.from,
+              to: _mMessage.to,
+              cc: _mMessage.cc,
+              subject: _mMessage.subject,
+              html: _mMessage.html,
+              text: htmlToText.fromString(_mMessage.html, {
+                wordwrap: false
+              }),
+              headers: {
+                'X-Laziness-level': 1000
+              }
+            };
+
+            if (_mMessage.MailAttachments) {
+              mail.attachments = _.map(_mMessage.MailAttachments, function(elm) {
+                return {
+                  path: elm.path,
+                  filename: elm.name
+                }
+              });
+            }
+
+            return _smtp
+              .sendMail(mail);
+          })
+          .then(function(info) {
+
+            console.log('info', info);
+            return _mMessage
+              .update({
+                messageId: info.messageId,
+                status: 'SENT'
+              }, {
+                transaction: options ? options.transaction : null
+              });
+          })
+          .catch(function(err) {
+            console.error('err', err);
+            throw {
+              message: err.message || err.response || 'Internal Server Error'
+            };
+          });
+      }
+    }
+  }
+
+  onSave(doc);
+
+  // HANDLE ACCOUNT UPDATE/DELETE
+  MailServerOut.afterUpdate(function(doc) {
+    return onUpdate(doc);
+  });
+  MailServerOut.afterDestroy(function(doc) {
+    return onRemove(doc);
+  });
+  // HANDLE SEND MAIL
+  MailMessage.afterCreate(function(doc, options) {
+    return onSend(doc, options);
+  });
+
+  return {};
+}
+
+module.exports = Smtp;
index 1312ad6..bffebfa 100644 (file)
@@ -1 +1,201 @@
-var _0xad33=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6D\x6F\x6D\x65\x6E\x74","\x2E\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x55\x73\x65\x72","\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x75\x73\x65\x72\x49\x64","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x73\x6F\x63\x6B\x65\x74\x3A\x20\x75\x73\x65\x72\x20\x6F\x66\x66\x6C\x69\x6E\x65","\x6E\x61\x6D\x65","\x6C\x6F\x67","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x73\x6F\x63\x6B\x65\x74\x3A\x20\x61\x6E\x79\x6F\x6E\x65\x20\x75\x73\x65\x72\x73\x20\x66\x6F\x75\x6E\x64","\x66\x69\x6E\x64\x42\x79\x49\x64","\x73\x6F\x63\x6B\x65\x74\x3A\x20\x75\x73\x65\x72\x20\x6F\x6E\x6C\x69\x6E\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x2E\x2E\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x5F\x70\x72\x6F\x61\x63\x74\x69\x76\x65\x5F\x61\x63\x74\x69\x6F\x6E\x2F\x63\x68\x61\x74\x5F\x70\x72\x6F\x61\x63\x74\x69\x76\x65\x5F\x61\x63\x74\x69\x6F\x6E\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x63\x61\x6E\x6E\x65\x64\x5F\x61\x6E\x73\x77\x65\x72\x2F\x63\x61\x6E\x6E\x65\x64\x5F\x61\x6E\x73\x77\x65\x72\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x5F\x77\x65\x62\x73\x69\x74\x65\x73\x5F\x66\x69\x65\x6C\x64\x2F\x63\x68\x61\x74\x5F\x77\x65\x62\x73\x69\x74\x65\x73\x5F\x66\x69\x65\x6C\x64\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x5F\x72\x65\x63\x6F\x72\x64\x69\x6E\x67\x2F\x76\x6F\x69\x63\x65\x5F\x72\x65\x63\x6F\x72\x64\x69\x6E\x67\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x6A\x73\x63\x72\x69\x70\x74\x79\x5F\x70\x72\x6F\x6A\x65\x63\x74\x2F\x6A\x73\x63\x72\x69\x70\x74\x79\x5F\x70\x72\x6F\x6A\x65\x63\x74\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x61\x67\x65\x6E\x74\x2F\x61\x67\x65\x6E\x74\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x61\x6D\x69\x2F\x61\x6D\x69\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x61\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x2F\x61\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x5F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2F\x63\x68\x61\x74\x5F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x5F\x65\x6E\x71\x75\x69\x72\x79\x2F\x65\x6E\x71\x75\x69\x72\x79\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x5F\x6D\x65\x73\x73\x61\x67\x65\x2F\x63\x68\x61\x74\x5F\x6D\x65\x73\x73\x61\x67\x65\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x5F\x71\x75\x65\x75\x65\x2F\x63\x68\x61\x74\x5F\x71\x75\x65\x75\x65\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x5F\x72\x6F\x6F\x6D\x2F\x63\x68\x61\x74\x5F\x72\x6F\x6F\x6D\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x5F\x76\x69\x73\x69\x74\x6F\x72\x2F\x63\x68\x61\x74\x5F\x76\x69\x73\x69\x74\x6F\x72\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x5F\x77\x65\x62\x73\x69\x74\x65\x2F\x63\x68\x61\x74\x5F\x77\x65\x62\x73\x69\x74\x65\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x63\x6F\x6D\x70\x61\x6E\x79\x2F\x63\x6F\x6D\x70\x61\x6E\x79\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x63\x6F\x6E\x74\x61\x63\x74\x5F\x6D\x61\x6E\x61\x67\x65\x72\x2F\x63\x6F\x6E\x74\x61\x63\x74\x5F\x6D\x61\x6E\x61\x67\x65\x72\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x2F\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x64\x65\x73\x6B\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2F\x64\x65\x73\x6B\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x64\x65\x73\x6B\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2F\x64\x65\x73\x6B\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x64\x65\x73\x6B\x5F\x66\x69\x65\x6C\x64\x2F\x64\x65\x73\x6B\x5F\x66\x69\x65\x6C\x64\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x66\x61\x78\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2F\x66\x61\x78\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x66\x61\x78\x5F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2F\x66\x61\x78\x5F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x66\x61\x78\x5F\x6D\x65\x73\x73\x61\x67\x65\x2F\x66\x61\x78\x5F\x6D\x65\x73\x73\x61\x67\x65\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x66\x61\x78\x5F\x71\x75\x65\x75\x65\x2F\x66\x61\x78\x5F\x71\x75\x65\x75\x65\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x66\x61\x78\x5F\x72\x6F\x6F\x6D\x2F\x66\x61\x78\x5F\x72\x6F\x6F\x6D\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2F\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2F\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x5F\x66\x69\x65\x6C\x64\x2F\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x5F\x66\x69\x65\x6C\x64\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x2F\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x69\x6E\x74\x65\x72\x76\x61\x6C\x2F\x69\x6E\x74\x65\x72\x76\x61\x6C\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2F\x6D\x61\x69\x6C\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x5F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2F\x6D\x61\x69\x6C\x5F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x5F\x61\x74\x74\x61\x63\x68\x6D\x65\x6E\x74\x2F\x6D\x61\x69\x6C\x5F\x61\x74\x74\x61\x63\x68\x6D\x65\x6E\x74\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x5F\x6D\x65\x73\x73\x61\x67\x65\x2F\x6D\x61\x69\x6C\x5F\x6D\x65\x73\x73\x61\x67\x65\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x5F\x71\x75\x65\x75\x65\x2F\x6D\x61\x69\x6C\x5F\x71\x75\x65\x75\x65\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x5F\x72\x6F\x6F\x6D\x2F\x6D\x61\x69\x6C\x5F\x72\x6F\x6F\x6D\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E\x2F\x6D\x61\x69\x6C\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x5F\x74\x65\x6D\x70\x6C\x61\x74\x65\x2F\x6D\x61\x69\x6C\x5F\x74\x65\x6D\x70\x6C\x61\x74\x65\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x6D\x6F\x64\x75\x6C\x65\x2F\x6D\x6F\x64\x75\x6C\x65\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x6D\x6F\x74\x69\x6F\x6E\x62\x61\x72\x2F\x6D\x6F\x74\x69\x6F\x6E\x62\x61\x72\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x64\x65\x66\x61\x75\x6C\x74\x5F\x72\x65\x70\x6F\x72\x74\x2F\x64\x65\x66\x61\x75\x6C\x74\x5F\x72\x65\x70\x6F\x72\x74\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x63\x75\x73\x74\x6F\x6D\x5F\x72\x65\x70\x6F\x72\x74\x2F\x63\x75\x73\x74\x6F\x6D\x5F\x72\x65\x70\x6F\x72\x74\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x5F\x74\x72\x65\x65\x2F\x72\x65\x70\x6F\x72\x74\x5F\x74\x72\x65\x65\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x5F\x61\x67\x65\x6E\x74\x2F\x72\x65\x70\x6F\x72\x74\x5F\x61\x67\x65\x6E\x74\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x5F\x63\x68\x61\x74\x2F\x72\x65\x70\x6F\x72\x74\x5F\x63\x68\x61\x74\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x5F\x63\x68\x61\x74\x5F\x73\x65\x73\x73\x69\x6F\x6E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x63\x68\x61\x74\x5F\x73\x65\x73\x73\x69\x6F\x6E\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x5F\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x5F\x6D\x61\x69\x6C\x2F\x72\x65\x70\x6F\x72\x74\x5F\x6D\x61\x69\x6C\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x5F\x6D\x61\x69\x6C\x5F\x73\x65\x73\x73\x69\x6F\x6E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x6D\x61\x69\x6C\x5F\x73\x65\x73\x73\x69\x6F\x6E\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x5F\x71\x75\x65\x75\x65\x2F\x72\x65\x70\x6F\x72\x74\x5F\x71\x75\x65\x75\x65\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5F\x66\x69\x65\x6C\x64\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5F\x66\x69\x65\x6C\x64\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x73\x65\x74\x74\x69\x6E\x67\x2F\x73\x65\x74\x74\x69\x6E\x67\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x73\x71\x75\x61\x72\x65\x5F\x6F\x64\x62\x63\x2F\x73\x71\x75\x61\x72\x65\x5F\x6F\x64\x62\x63\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x73\x71\x75\x61\x72\x65\x5F\x70\x72\x6F\x6A\x65\x63\x74\x2F\x73\x71\x75\x61\x72\x65\x5F\x70\x72\x6F\x6A\x65\x63\x74\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x73\x75\x67\x61\x72\x63\x72\x6D\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2F\x73\x75\x67\x61\x72\x63\x72\x6D\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x73\x75\x67\x61\x72\x63\x72\x6D\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2F\x73\x75\x67\x61\x72\x63\x72\x6D\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x73\x75\x67\x61\x72\x63\x72\x6D\x5F\x66\x69\x65\x6C\x64\x2F\x73\x75\x67\x61\x72\x63\x72\x6D\x5F\x66\x69\x65\x6C\x64\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x74\x61\x67\x2F\x74\x61\x67\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x74\x65\x61\x6D\x2F\x74\x65\x61\x6D\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x74\x72\x69\x67\x67\x65\x72\x2F\x74\x72\x69\x67\x67\x65\x72\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x74\x72\x75\x6E\x6B\x2F\x74\x72\x75\x6E\x6B\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x75\x73\x65\x72\x2F\x75\x73\x65\x72\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x73\x6F\x75\x6E\x64\x2F\x73\x6F\x75\x6E\x64\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x63\x68\x61\x74\x5F\x71\x75\x65\x75\x65\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x63\x68\x61\x74\x5F\x71\x75\x65\x75\x65\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x63\x68\x61\x74\x5F\x72\x6F\x6F\x6D\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x63\x68\x61\x74\x5F\x72\x6F\x6F\x6D\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x66\x61\x78\x5F\x71\x75\x65\x75\x65\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x66\x61\x78\x5F\x71\x75\x65\x75\x65\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x6D\x61\x69\x6C\x5F\x71\x75\x65\x75\x65\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x6D\x61\x69\x6C\x5F\x71\x75\x65\x75\x65\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x74\x65\x61\x6D\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x74\x65\x61\x6D\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x76\x6F\x69\x63\x65\x5F\x71\x75\x65\x75\x65\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x76\x6F\x69\x63\x65\x5F\x71\x75\x65\x75\x65\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x73\x65\x72\x76\x69\x63\x65\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x73\x65\x72\x76\x69\x63\x65\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x76\x61\x72\x69\x61\x62\x6C\x65\x2F\x76\x61\x72\x69\x61\x62\x6C\x65\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x63\x68\x61\x6E\x73\x70\x79\x2F\x63\x68\x61\x6E\x73\x70\x79\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x6D\x65\x74\x72\x69\x63\x2F\x6D\x65\x74\x72\x69\x63\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x65\x78\x74\x72\x61\x63\x74\x65\x64\x5F\x72\x65\x70\x6F\x72\x74\x2F\x65\x78\x74\x72\x61\x63\x74\x65\x64\x5F\x72\x65\x70\x6F\x72\x74\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x5F\x63\x6F\x6E\x74\x65\x78\x74\x2F\x76\x6F\x69\x63\x65\x5F\x63\x6F\x6E\x74\x65\x78\x74\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x5F\x65\x78\x74\x65\x6E\x73\x69\x6F\x6E\x2F\x76\x6F\x69\x63\x65\x5F\x65\x78\x74\x65\x6E\x73\x69\x6F\x6E\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x5F\x6D\x75\x73\x69\x63\x6F\x6E\x68\x6F\x6C\x64\x2F\x76\x6F\x69\x63\x65\x5F\x6D\x75\x73\x69\x63\x6F\x6E\x68\x6F\x6C\x64\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x5F\x71\x75\x65\x75\x65\x2F\x76\x6F\x69\x63\x65\x5F\x71\x75\x65\x75\x65\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x73\x65\x72\x76\x69\x63\x65\x2F\x73\x65\x72\x76\x69\x63\x65\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x5F\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C\x2F\x76\x6F\x69\x63\x65\x5F\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x5F\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C\x5F\x6D\x65\x73\x73\x61\x67\x65\x73\x2F\x76\x6F\x69\x63\x65\x5F\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C\x5F\x6D\x65\x73\x73\x61\x67\x65\x73\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x78\x63\x68\x61\x74\x74\x79\x2F\x78\x63\x68\x61\x74\x74\x79\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x7A\x65\x6E\x64\x65\x73\x6B\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2F\x7A\x65\x6E\x64\x65\x73\x6B\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x7A\x65\x6E\x64\x65\x73\x6B\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2F\x7A\x65\x6E\x64\x65\x73\x6B\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x7A\x65\x6E\x64\x65\x73\x6B\x5F\x66\x69\x65\x6C\x64\x2F\x7A\x65\x6E\x64\x65\x73\x6B\x5F\x66\x69\x65\x6C\x64\x2E\x73\x6F\x63\x6B\x65\x74","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x66\x6F\x72\x6D\x61\x74","\x69\x6E\x66\x6F","\x5B\x25\x73\x5D\x20\x25\x73","\x61\x64\x64\x72\x65\x73\x73","\x73\x74\x72\x69\x6E\x67\x69\x66\x79","\x6F\x6E","\x65\x78\x70\x6F\x72\x74\x73","\x73\x65\x63\x72\x65\x74","\x73\x65\x73\x73\x69\x6F\x6E","\x61\x75\x74\x68\x6F\x72\x69\x7A\x65","\x73\x6F\x63\x6B\x65\x74\x69\x6F\x2D\x6A\x77\x74","\x75\x73\x65","\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E","\x68\x61\x6E\x64\x73\x68\x61\x6B\x65","\x3A","\x70\x6F\x72\x74","\x44\x4F\x4D\x41\x49\x4E","\x65\x6E\x76","\x63\x6F\x6E\x6E\x65\x63\x74\x65\x64\x41\x74","\x71\x75\x65\x72\x79","\x72\x6F\x6C\x65","\x73\x6F\x75\x72\x63\x65","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x5B\x25\x73\x5D\x20\x53\x4F\x43\x4B\x45\x54\x20\x44\x49\x53\x43\x4F\x4E\x4E\x45\x43\x54\x45\x44","\x5B\x25\x73\x5D\x20\x53\x4F\x43\x4B\x45\x54\x20\x43\x4F\x4E\x4E\x45\x43\x54\x45\x44"];_0xad33[0];var moment=require(_0xad33[1]);var config=require(_0xad33[2]);var User=require(_0xad33[4])[_0xad33[3]];function onDisconnect(_0x19c1x5){if(_0x19c1x5[_0xad33[5]]){return User[_0xad33[14]](_0x19c1x5[_0xad33[5]])[_0xad33[11]](function(_0x19c1x7){if(_0x19c1x7){return _0x19c1x7[_0xad33[12]]({online:false})}else {throw  new Error(_0xad33[13])}})[_0xad33[11]](function(_0x19c1x7){console[_0xad33[10]](_0xad33[8],_0x19c1x7[_0xad33[9]])})[_0xad33[7]](function(_0x19c1x6){console[_0xad33[6]](_0x19c1x6)})}else {console[_0xad33[10]](_0xad33[13])}}function onConnect(_0x19c1x5){if(_0x19c1x5[_0xad33[5]]){return User[_0xad33[14]](_0x19c1x5[_0xad33[5]])[_0xad33[11]](function(_0x19c1x7){if(_0x19c1x7){return _0x19c1x7[_0xad33[12]]({online:true,lastLoginAt:moment()[_0xad33[107]](_0xad33[106])})}else {throw  new Error(_0xad33[13])}})[_0xad33[11]](function(_0x19c1x7){console[_0xad33[10]](_0xad33[15],_0x19c1x7[_0xad33[9]]);require(_0xad33[17])[_0xad33[16]](_0x19c1x5);require(_0xad33[18])[_0xad33[16]](_0x19c1x5);require(_0xad33[19])[_0xad33[16]](_0x19c1x5);require(_0xad33[20])[_0xad33[16]](_0x19c1x5);require(_0xad33[21])[_0xad33[16]](_0x19c1x5);require(_0xad33[22])[_0xad33[16]](_0x19c1x5);require(_0xad33[23])[_0xad33[16]](_0x19c1x5);require(_0xad33[24])[_0xad33[16]](_0x19c1x5);require(_0xad33[25])[_0xad33[16]](_0x19c1x5);require(_0xad33[26])[_0xad33[16]](_0x19c1x5);require(_0xad33[27])[_0xad33[16]](_0x19c1x5);require(_0xad33[28])[_0xad33[16]](_0x19c1x5);require(_0xad33[29])[_0xad33[16]](_0x19c1x5);require(_0xad33[30])[_0xad33[16]](_0x19c1x5);require(_0xad33[31])[_0xad33[16]](_0x19c1x5);require(_0xad33[32])[_0xad33[16]](_0x19c1x5);require(_0xad33[33])[_0xad33[16]](_0x19c1x5);require(_0xad33[34])[_0xad33[16]](_0x19c1x5);require(_0xad33[35])[_0xad33[16]](_0x19c1x5);require(_0xad33[36])[_0xad33[16]](_0x19c1x5);require(_0xad33[37])[_0xad33[16]](_0x19c1x5);require(_0xad33[38])[_0xad33[16]](_0x19c1x5);require(_0xad33[39])[_0xad33[16]](_0x19c1x5);require(_0xad33[40])[_0xad33[16]](_0x19c1x5);require(_0xad33[41])[_0xad33[16]](_0x19c1x5);require(_0xad33[42])[_0xad33[16]](_0x19c1x5);require(_0xad33[43])[_0xad33[16]](_0x19c1x5);require(_0xad33[44])[_0xad33[16]](_0x19c1x5);require(_0xad33[45])[_0xad33[16]](_0x19c1x5);require(_0xad33[46])[_0xad33[16]](_0x19c1x5);require(_0xad33[47])[_0xad33[16]](_0x19c1x5);require(_0xad33[48])[_0xad33[16]](_0x19c1x5);require(_0xad33[49])[_0xad33[16]](_0x19c1x5);require(_0xad33[50])[_0xad33[16]](_0x19c1x5);require(_0xad33[51])[_0xad33[16]](_0x19c1x5);require(_0xad33[52])[_0xad33[16]](_0x19c1x5);require(_0xad33[53])[_0xad33[16]](_0x19c1x5);require(_0xad33[54])[_0xad33[16]](_0x19c1x5);require(_0xad33[55])[_0xad33[16]](_0x19c1x5);require(_0xad33[56])[_0xad33[16]](_0x19c1x5);require(_0xad33[57])[_0xad33[16]](_0x19c1x5);require(_0xad33[58])[_0xad33[16]](_0x19c1x5);require(_0xad33[59])[_0xad33[16]](_0x19c1x5);require(_0xad33[60])[_0xad33[16]](_0x19c1x5);require(_0xad33[61])[_0xad33[16]](_0x19c1x5);require(_0xad33[62])[_0xad33[16]](_0x19c1x5);require(_0xad33[63])[_0xad33[16]](_0x19c1x5);require(_0xad33[64])[_0xad33[16]](_0x19c1x5);require(_0xad33[65])[_0xad33[16]](_0x19c1x5);require(_0xad33[66])[_0xad33[16]](_0x19c1x5);require(_0xad33[67])[_0xad33[16]](_0x19c1x5);require(_0xad33[68])[_0xad33[16]](_0x19c1x5);require(_0xad33[69])[_0xad33[16]](_0x19c1x5);require(_0xad33[70])[_0xad33[16]](_0x19c1x5);require(_0xad33[71])[_0xad33[16]](_0x19c1x5);require(_0xad33[72])[_0xad33[16]](_0x19c1x5);require(_0xad33[73])[_0xad33[16]](_0x19c1x5);require(_0xad33[74])[_0xad33[16]](_0x19c1x5);require(_0xad33[75])[_0xad33[16]](_0x19c1x5);require(_0xad33[76])[_0xad33[16]](_0x19c1x5);require(_0xad33[77])[_0xad33[16]](_0x19c1x5);require(_0xad33[78])[_0xad33[16]](_0x19c1x5);require(_0xad33[79])[_0xad33[16]](_0x19c1x5);require(_0xad33[80])[_0xad33[16]](_0x19c1x5);require(_0xad33[81])[_0xad33[16]](_0x19c1x5);require(_0xad33[82])[_0xad33[16]](_0x19c1x5);require(_0xad33[83])[_0xad33[16]](_0x19c1x5);require(_0xad33[84])[_0xad33[16]](_0x19c1x5);require(_0xad33[85])[_0xad33[16]](_0x19c1x5);require(_0xad33[86])[_0xad33[16]](_0x19c1x5);require(_0xad33[87])[_0xad33[16]](_0x19c1x5);require(_0xad33[88])[_0xad33[16]](_0x19c1x5);require(_0xad33[89])[_0xad33[16]](_0x19c1x5);require(_0xad33[90])[_0xad33[16]](_0x19c1x5);require(_0xad33[91])[_0xad33[16]](_0x19c1x5);require(_0xad33[92])[_0xad33[16]](_0x19c1x5);require(_0xad33[93])[_0xad33[16]](_0x19c1x5);require(_0xad33[94])[_0xad33[16]](_0x19c1x5);require(_0xad33[95])[_0xad33[16]](_0x19c1x5);require(_0xad33[96])[_0xad33[16]](_0x19c1x5);require(_0xad33[97])[_0xad33[16]](_0x19c1x5);require(_0xad33[98])[_0xad33[16]](_0x19c1x5);require(_0xad33[99])[_0xad33[16]](_0x19c1x5);require(_0xad33[100])[_0xad33[16]](_0x19c1x5);require(_0xad33[101])[_0xad33[16]](_0x19c1x5);require(_0xad33[102])[_0xad33[16]](_0x19c1x5);require(_0xad33[103])[_0xad33[16]](_0x19c1x5);require(_0xad33[104])[_0xad33[16]](_0x19c1x5);require(_0xad33[105])[_0xad33[16]](_0x19c1x5)})[_0xad33[7]](function(_0x19c1x6){console[_0xad33[6]](_0x19c1x6)})}else {console[_0xad33[10]](_0xad33[13])};_0x19c1x5[_0xad33[112]](_0xad33[108],function(_0x19c1x9){console[_0xad33[108]](_0xad33[109],_0x19c1x5[_0xad33[110]],JSON[_0xad33[111]](_0x19c1x9,null,2))})}module[_0xad33[113]]=function(_0x19c1xa){_0x19c1xa[_0xad33[118]](require(_0xad33[117])[_0xad33[116]]({secret:config[_0xad33[115]][_0xad33[114]],handshake:true}));_0x19c1xa[_0xad33[112]](_0xad33[119],function(_0x19c1x5){_0x19c1x5[_0xad33[110]]=_0x19c1x5[_0xad33[120]][_0xad33[110]]!==null?_0x19c1x5[_0xad33[120]][_0xad33[110]][_0xad33[110]]+_0xad33[121]+_0x19c1x5[_0xad33[120]][_0xad33[110]][_0xad33[122]]:process[_0xad33[124]][_0xad33[123]];_0x19c1x5[_0xad33[125]]= new Date();_0x19c1x5[_0xad33[5]]=_0x19c1x5[_0xad33[120]][_0xad33[126]][_0xad33[5]];_0x19c1x5[_0xad33[127]]=_0x19c1x5[_0xad33[120]][_0xad33[126]][_0xad33[127]];_0x19c1x5[_0xad33[9]]=_0x19c1x5[_0xad33[120]][_0xad33[126]][_0xad33[9]];_0x19c1x5[_0xad33[128]]=_0x19c1x5[_0xad33[120]][_0xad33[126]][_0xad33[128]];_0x19c1x5[_0xad33[112]](_0xad33[129],function(){onDisconnect(_0x19c1x5);console[_0xad33[108]](_0xad33[130],_0x19c1x5[_0xad33[120]][_0xad33[110]])});onConnect(_0x19c1x5);console[_0xad33[108]](_0xad33[131],_0x19c1x5[_0xad33[120]][_0xad33[110]])})}
\ No newline at end of file
+/**
+ * Socket.io configuration
+ */
+
+'use strict';
+
+var moment = require('moment');
+var config = require('./environment');
+var User = require('../models').User;
+
+function onDisconnect(socket) {
+  if (socket.userId) {
+    return User
+      .findById(socket.userId)
+      .then(function(user) {
+        if (user) {
+          return user
+            .updateAttributes({
+              online: false
+            });
+        } else {
+          throw new Error('socket: anyone users found');
+        }
+      })
+      .then(function(user) {
+        console.log('socket: user offline', user.name);
+      })
+      .catch(function(err) {
+        console.error(err);
+      });
+  } else {
+    console.log('socket: anyone users found');
+  }
+}
+
+function onConnect(socket) {
+  if (socket.userId) {
+    return User
+      .findById(socket.userId)
+      .then(function(user) {
+        if (user) {
+          return user
+            .updateAttributes({
+              online: true,
+              lastLoginAt: moment().format("YYYY-MM-DD HH:mm:ss")
+            })
+        } else {
+          throw new Error('socket: anyone users found');
+        }
+      })
+      .then(function(user) {
+        console.log('socket: user online', user.name);
+
+        // Insert sockets below
+        require('../api/chat_proactive_action/chat_proactive_action.socket').register(socket);
+        // require('../api/report_jscripty_input/report_jscripty_input.socket').register(socket);
+        // require('../api/report_jscripty_question/report_jscripty_question.socket').register(socket);
+        // require('../api/report_jscripty_session/report_jscripty_session.socket').register(socket);
+        require('../api/canned_answer/canned_answer.socket').register(socket);
+        require('../api/chat_websites_field/chat_websites_field.socket').register(socket);
+        require('../api/voice_recording/voice_recording.socket').register(socket);
+        require('../api/license/license.socket').register(socket);
+        require('../api/jscripty_project/jscripty_project.socket').register(socket);
+
+        //Ordered alphabetically
+        require('../api/agent/agent.socket').register(socket);
+        require('../api/ami/ami.socket').register(socket);
+        require('../api/automation/automation.socket').register(socket);
+        require('../api/chat_application/chat_application.socket').register(socket);
+        require('../api/chat_enquiry/enquiry.socket').register(socket);
+        require('../api/chat_message/chat_message.socket').register(socket);
+        require('../api/chat_queue/chat_queue.socket').register(socket);
+        require('../api/chat_room/chat_room.socket').register(socket);
+        require('../api/chat_visitor/chat_visitor.socket').register(socket);
+        require('../api/chat_website/chat_website.socket').register(socket);
+        require('../api/company/company.socket').register(socket);
+        require('../api/contact_manager/contact_manager.socket').register(socket);
+        require('../api/dashboard/dashboard.socket').register(socket);
+        require('../api/desk_account/desk_account.socket').register(socket);
+        require('../api/desk_configuration/desk_configuration.socket').register(socket);
+        require('../api/desk_field/desk_field.socket').register(socket);
+        require('../api/fax_account/fax_account.socket').register(socket);
+        require('../api/fax_application/fax_application.socket').register(socket);
+        require('../api/fax_message/fax_message.socket').register(socket);
+        require('../api/fax_queue/fax_queue.socket').register(socket);
+        require('../api/fax_room/fax_room.socket').register(socket);
+        require('../api/freshdesk_account/freshdesk_account.socket').register(socket);
+        require('../api/freshdesk_configuration/freshdesk_configuration.socket').register(socket);
+        require('../api/freshdesk_field/freshdesk_field.socket').register(socket);
+        require('../api/integration/integration.socket').register(socket);
+        require('../api/interval/interval.socket').register(socket);
+        require('../api/mail_account/mail_account.socket').register(socket);
+        require('../api/mail_application/mail_application.socket').register(socket);
+        require('../api/mail_attachment/mail_attachment.socket').register(socket);
+        require('../api/mail_message/mail_message.socket').register(socket);
+        require('../api/mail_queue/mail_queue.socket').register(socket);
+        require('../api/mail_room/mail_room.socket').register(socket);
+        require('../api/mail_server_in/mail_server_in.socket').register(socket);
+        require('../api/mail_template/mail_template.socket').register(socket);
+        require('../api/module/module.socket').register(socket);
+        require('../api/motionbar/motionbar.socket').register(socket);
+        require('../api/default_report/default_report.socket').register(socket);
+        require('../api/custom_report/custom_report.socket').register(socket);
+        require('../api/report_tree/report_tree.socket').register(socket);
+        require('../api/report_agent/report_agent.socket').register(socket);
+        require('../api/report_chat/report_chat.socket').register(socket);
+        require('../api/report_chat_session/report_chat_session.socket').register(socket);
+        require('../api/report_integration/report_integration.socket').register(socket);
+        require('../api/report_mail/report_mail.socket').register(socket);
+        require('../api/report_mail_session/report_mail_session.socket').register(socket);
+        require('../api/report_queue/report_queue.socket').register(socket);
+        require('../api/salesforce_account/salesforce_account.socket').register(socket);
+        require('../api/salesforce_configuration/salesforce_configuration.socket').register(socket);
+        require('../api/salesforce_field/salesforce_field.socket').register(socket);
+        require('../api/setting/setting.socket').register(socket);
+        require('../api/square_odbc/square_odbc.socket').register(socket);
+        require('../api/square_project/square_project.socket').register(socket);
+        require('../api/sugarcrm_account/sugarcrm_account.socket').register(socket);
+        require('../api/sugarcrm_configuration/sugarcrm_configuration.socket').register(socket);
+        require('../api/sugarcrm_field/sugarcrm_field.socket').register(socket);
+        require('../api/tag/tag.socket').register(socket);
+        require('../api/team/team.socket').register(socket);
+        require('../api/trigger/trigger.socket').register(socket);
+        require('../api/trunk/trunk.socket').register(socket);
+        require('../api/user/user.socket').register(socket);
+        require('../api/sound/sound.socket').register(socket);
+        require('../api/user_has_chat_queue/user_has_chat_queue.socket').register(socket);
+        require('../api/user_has_chat_room/user_has_chat_room.socket').register(socket);
+        require('../api/user_has_fax_queue/user_has_fax_queue.socket').register(socket);
+        require('../api/user_has_mail_queue/user_has_mail_queue.socket').register(socket);
+        require('../api/user_has_team/user_has_team.socket').register(socket);
+        require('../api/user_has_voice_queue/user_has_voice_queue.socket').register(socket);
+        require('../api/user_has_service/user_has_service.socket').register(socket);
+        require('../api/variable/variable.socket').register(socket);
+        require('../api/chanspy/chanspy.socket').register(socket);
+        require('../api/metric/metric.socket').register(socket);
+        require('../api/extracted_report/extracted_report.socket').register(socket);
+        require('../api/voice_context/voice_context.socket').register(socket);
+        require('../api/voice_extension/voice_extension.socket').register(socket);
+        require('../api/voice_musiconhold/voice_musiconhold.socket').register(socket);
+        require('../api/voice_queue/voice_queue.socket').register(socket);
+        require('../api/service/service.socket').register(socket);
+        require('../api/voice_voicemail/voice_voicemail.socket').register(socket);
+        require('../api/voice_voicemail_messages/voice_voicemail_messages.socket').register(socket);
+        require('../api/xchatty/xchatty.socket').register(socket);
+        require('../api/zendesk_account/zendesk_account.socket').register(socket);
+        require('../api/zendesk_configuration/zendesk_configuration.socket').register(socket);
+        require('../api/zendesk_field/zendesk_field.socket').register(socket);
+
+      })
+      .catch(function(err) {
+        console.error(err);
+      });
+  } else {
+    console.log('socket: anyone users found');
+  }
+
+  socket.on('info', function(data) {
+    console.info('[%s] %s', socket.address, JSON.stringify(data, null, 2));
+  });
+
+}
+
+module.exports = function(socketio) {
+  // socket.io (v1.x.x) is powered by debug.
+  // In order to see all the debug output, set DEBUG (in server/config/local.env.js) to including the desired scope.
+  //
+  // ex: DEBUG: "http*,socket.io:socket"
+
+  // We can authenticate socket.io users and access their token through socket.handshake.decoded_token
+  //
+  // 1. You will need to send the token in `client/components/socket/socket.service.js`
+  //
+  // 2. Require authentication here:
+  socketio.use(require('socketio-jwt').authorize({
+    secret: config.session.secret,
+    handshake: true
+  }));
+
+  socketio.on('connection', function(socket) {
+    socket.address = socket.handshake.address !== null ? socket.handshake
+      .address.address + ':' + socket.handshake.address.port : process.env
+      .DOMAIN;
+
+    socket.connectedAt = new Date();
+    socket.userId = socket.handshake.query.userId;
+    socket.role = socket.handshake.query.role;
+    socket.name = socket.handshake.query.name;
+    socket.source = socket.handshake.query.source;
+
+    // Call onDisconnect.
+    socket.on('disconnect', function() {
+      onDisconnect(socket);
+      console.info('[%s] SOCKET DISCONNECTED', socket.handshake.address);
+    });
+
+    // Call onConnect.
+    onConnect(socket);
+    console.info('[%s] SOCKET CONNECTED', socket.handshake.address);
+  });
+};
index e1584c2..468c7e4 100644 (file)
@@ -1 +1,114 @@
-var _0xd587=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x66\x73","\x75\x74\x69\x6C","\x70\x61\x74\x68","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x43\x68\x61\x6E\x53\x70\x79","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x55\x73\x65\x72","\x56\x6F\x69\x63\x65\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x6C\x65\x74\x65","\x6C\x6F\x67","\x63\x61\x74\x63\x68","\x69\x64","\x64\x65\x73\x74\x72\x6F\x79","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E","\x61\x6C\x6C","\x61\x75\x74\x68","\x66\x72\x6F\x6D\x2D\x73\x69\x70","\x25\x73\x25\x73","\x70\x72\x65\x66\x69\x78","\x6E\x61\x6D\x65","\x66\x6F\x72\x6D\x61\x74","\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65","\x70\x61\x73\x73\x77\x6F\x72\x64","\x73\x79\x73\x74\x65\x6D","\x70\x75\x73\x68","\x53\x49\x50\x2F\x25\x73\x2C\x25\x73","\x6F\x70\x74\x69\x6F\x6E\x73","\x69\x6E\x74\x65\x72\x6E\x61\x6C","\x62\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x66\x6F\x72\x45\x61\x63\x68","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6C\x6C","\x61\x67\x65\x6E\x74","\x73\x63\x6F\x70\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0xd587[0];var fs=require(_0xd587[1]);var util=require(_0xd587[2]);var path=require(_0xd587[3]);var config=require(_0xd587[4]);var ChanSpyModel=require(_0xd587[6])[_0xd587[5]];var User=require(_0xd587[6])[_0xd587[7]];var VoiceExtension=require(_0xd587[6])[_0xd587[8]];var sequelize=require(_0xd587[6])[_0xd587[9]];function ChanSpy(){ChanSpyModel[_0xd587[10]](function(_0x4f99xa){createSpyExtensions(_0x4f99xa)});ChanSpyModel[_0xd587[11]](function(_0x4f99xa){deleteSpyExtensions(_0x4f99xa);createSpyExtensions(_0x4f99xa)});ChanSpyModel[_0xd587[12]](function(_0x4f99xa){deleteSpyExtensions(_0x4f99xa)})}function deleteSpyExtensions(_0x4f99xa){return sequelize[_0xd587[17]](function(_0x4f99xd){return VoiceExtension[_0xd587[16]]({where:{ChanSpyId:_0x4f99xa[_0xd587[15]]},transaction:_0x4f99xd})})[_0xd587[14]](function(_0x4f99xc){console[_0xd587[13]](_0x4f99xc)})}function createSpyExtensions(_0x4f99xa){return sequelize[_0xd587[17]](function(_0x4f99xd){return User[_0xd587[37]](_0xd587[36])[_0xd587[35]]({where:{chanspy:true}})[_0xd587[34]](function(_0x4f99xf){var _0x4f99x10=[];_0x4f99xf[_0xd587[33]](function(_0x4f99x11){var _0x4f99x12=[];var _0x4f99x13=1;if(_0x4f99xa[_0xd587[19]]){_0x4f99x12[_0xd587[28]]({context:_0xd587[20],exten:util[_0xd587[24]](_0xd587[21],_0x4f99xa[_0xd587[22]],_0x4f99x11[_0xd587[23]]),priority:_0x4f99x13,app:_0xd587[25],appdata:_0x4f99xa[_0xd587[26]],UserId:_0x4f99x11[_0xd587[15]],ChanSpyId:_0x4f99xa[_0xd587[15]],type:_0xd587[27]});_0x4f99x13++};_0x4f99x12[_0xd587[28]]({context:_0xd587[20],exten:util[_0xd587[24]](_0xd587[21],_0x4f99xa[_0xd587[22]],_0x4f99x11[_0xd587[23]]),priority:_0x4f99x13,app:_0xd587[5],appdata:util[_0xd587[24]](_0xd587[29],_0x4f99x11[_0xd587[23]],_0x4f99xa[_0xd587[30]]),UserId:_0x4f99x11[_0xd587[15]],ChanSpyId:_0x4f99xa[_0xd587[15]],type:_0xd587[27]});_0x4f99x13=1;if(_0x4f99xa[_0xd587[19]]){_0x4f99x12[_0xd587[28]]({context:_0xd587[20],exten:util[_0xd587[24]](_0xd587[21],_0x4f99xa[_0xd587[22]],_0x4f99x11[_0xd587[31]]),priority:_0x4f99x13,app:_0xd587[25],appdata:_0x4f99xa[_0xd587[26]],UserId:_0x4f99x11[_0xd587[15]],ChanSpyId:_0x4f99xa[_0xd587[15]],type:_0xd587[27]});_0x4f99x13++};_0x4f99x12[_0xd587[28]]({context:_0xd587[20],exten:util[_0xd587[24]](_0xd587[21],_0x4f99xa[_0xd587[22]],_0x4f99x11[_0xd587[31]]),priority:_0x4f99x13,app:_0xd587[5],appdata:util[_0xd587[24]](_0xd587[29],_0x4f99x11[_0xd587[23]],_0x4f99xa[_0xd587[30]]),UserId:_0x4f99x11[_0xd587[15]],ChanSpyId:_0x4f99xa[_0xd587[15]],type:_0xd587[27]});_0x4f99x10[_0xd587[28]](VoiceExtension[_0xd587[32]](_0x4f99x12,{transaction:_0x4f99xd}))});return _0x4f99x10})[_0xd587[18]]()})[_0xd587[14]](function(_0x4f99xc){console[_0xd587[13]](_0x4f99xc)})}module[_0xd587[38]]=ChanSpy
\ No newline at end of file
+'use strict';
+
+var fs = require('fs');
+var util = require('util');
+var path = require('path');
+var config = require('../../config/environment');
+var ChanSpyModel = require('../../models').ChanSpy;
+var User = require('../../models').User;
+var VoiceExtension = require('../../models').VoiceExtension;
+var sequelize = require('../../models').sequelize;
+
+function ChanSpy() {
+  ChanSpyModel.afterCreate(function(doc) {
+    createSpyExtensions(doc);
+  })
+  ChanSpyModel.afterUpdate(function(doc) {
+    deleteSpyExtensions(doc);
+    createSpyExtensions(doc);
+  })
+  ChanSpyModel.afterDelete(function(doc) {
+    deleteSpyExtensions(doc);
+  })
+}
+
+function deleteSpyExtensions(doc) {
+  return sequelize.transaction(function(t) {
+      return VoiceExtension
+        .destroy({
+          where: {
+            ChanSpyId: doc.id
+          },
+          transaction: t
+        });
+    })
+    .catch(function(err) {
+      console.log(err);
+    });
+}
+
+function createSpyExtensions(doc) {
+  return sequelize.transaction(function(t) {
+      return User
+        .scope('agent')
+        .findAll({
+          where: {
+            chanspy: true
+          }
+        })
+        .then(function(agents) {
+          var bulkSpies = [];
+          agents.forEach(function(elem) {
+            var spies = [];
+            var priority = 1;
+            if (doc.auth) {
+              spies.push({
+                context: 'from-sip',
+                exten: util.format('%s%s', doc.prefix, elem.name),
+                priority: priority,
+                app: 'Authenticate',
+                appdata: doc.password,
+                UserId: elem.id,
+                ChanSpyId: doc.id,
+                type: 'system'
+              });
+              priority++;
+            }
+            spies.push({
+              context: 'from-sip',
+              exten: util.format('%s%s', doc.prefix, elem.name),
+              priority: priority,
+              app: 'ChanSpy',
+              appdata: util.format('SIP/%s,%s', elem.name, doc.options),
+              UserId: elem.id,
+              ChanSpyId: doc.id,
+              type: 'system'
+            });
+            priority = 1;
+            if (doc.auth) {
+              spies.push({
+                context: 'from-sip',
+                exten: util.format('%s%s', doc.prefix, elem.internal),
+                priority: priority,
+                app: 'Authenticate',
+                appdata: doc.password,
+                UserId: elem.id,
+                ChanSpyId: doc.id,
+                type: 'system'
+              });
+              priority++;
+            }
+            spies.push({
+              context: 'from-sip',
+              exten: util.format('%s%s', doc.prefix, elem.internal),
+              priority: priority,
+              app: 'ChanSpy',
+              appdata: util.format('SIP/%s,%s', elem.name, doc.options),
+              UserId: elem.id,
+              ChanSpyId: doc.id,
+              type: 'system'
+            });
+            bulkSpies.push(VoiceExtension.bulkCreate(spies, {
+              transaction: t
+            }));
+          });
+          return bulkSpies;
+        })
+        .all();
+    })
+    .catch(function(err) {
+      console.log(err);
+    });
+}
+
+module.exports = ChanSpy;
index da98f30..a36f4e6 100644 (file)
@@ -1 +1,27 @@
-var _0xee40=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x43\x68\x61\x74\x52\x6F\x6F\x6D","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x43\x68\x61\x74\x56\x69\x73\x69\x74\x6F\x72","\x73\x74\x61\x74\x75\x73","\x63\x68\x61\x6E\x67\x65\x64","\x43\x4C\x4F\x53\x45\x44","\x43\x68\x61\x74\x56\x69\x73\x69\x74\x6F\x72\x49\x64","\x73\x65\x72\x76\x65\x64","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x42\x79\x49\x64","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0xee40[0];var _=require(_0xee40[1]);var ChatRoomModel=require(_0xee40[3])[_0xee40[2]];var ChatVisitorModel=require(_0xee40[3])[_0xee40[4]];function ChatRoom(){ChatRoomModel[_0xee40[14]](function(_0xb5b7x5){if(_0xb5b7x5[_0xee40[6]](_0xee40[5])&&_0xb5b7x5[_0xee40[5]]===_0xee40[7]){if(_0xb5b7x5[_0xee40[8]]){return ChatVisitorModel[_0xee40[13]](_0xb5b7x5.ChatVisitorId)[_0xee40[12]](function(_0xb5b7x6){if(_0xb5b7x6){var _0xb5b7x7=_[_0xee40[10]](_0xb5b7x6,{status:_0xee40[9]});return _0xb5b7x7[_0xee40[11]]()}})}}})}module[_0xee40[15]]=ChatRoom
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+
+var ChatRoomModel = require('../../models').ChatRoom;
+var ChatVisitorModel = require('../../models').ChatVisitor;
+
+function ChatRoom() {
+  ChatRoomModel.afterUpdate(function(doc) {
+    if (doc.changed('status') && doc.status === 'CLOSED') {
+      if (doc.ChatVisitorId) {
+        return ChatVisitorModel
+          .findById(doc.ChatVisitorId)
+          .then(function(chatVisitor) {
+            if (chatVisitor) {
+              var updated = _.merge(chatVisitor, {
+                status: 'served'
+              });
+              return updated.save();
+            }
+          });
+      }
+    }
+  })
+}
+
+module.exports = ChatRoom;
index 9cbc5ab..8e605bb 100644 (file)
@@ -1 +1,14 @@
-var _0xcb2c=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x69\x6E\x74\x65\x72\x76\x61\x6C","\x2E\x2F\x75\x73\x65\x72","\x2E\x2F\x63\x68\x61\x6E\x73\x70\x79","\x2E\x2F\x63\x68\x61\x74\x52\x6F\x6F\x6D","\x65\x78\x70\x6F\x72\x74\x73"];_0xcb2c[0];var Interval=require(_0xcb2c[1]);var User=require(_0xcb2c[2]);var ChanSpy=require(_0xcb2c[3]);var ChatRoom=require(_0xcb2c[4]);module[_0xcb2c[5]]=function(){ new Interval(); new User(); new ChanSpy(); new ChatRoom()}
\ No newline at end of file
+'use strict';
+
+var Interval = require('./interval');
+var User = require('./user');
+var ChanSpy = require('./chanspy');
+var ChatRoom = require('./chatRoom');
+
+module.exports = function() {
+  // Tools Mangament
+  new Interval();
+  new User();
+  new ChanSpy();
+  new ChatRoom();
+}
index 882640c..223b7bf 100644 (file)
@@ -1 +1,74 @@
-var _0xcd8b=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x49\x6E\x74\x65\x72\x76\x61\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x56\x6F\x69\x63\x65\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x75\x74\x69\x6C\x73\x2F\x76\x6F\x69\x63\x65\x5F\x65\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x49\x6E\x74\x65\x72\x76\x61\x6C\x20\x49\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x2E","\x6C\x6F\x67","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x49\x6E\x74\x65\x72\x76\x61\x6C\x49\x64","\x62\x65\x66\x6F\x72\x65\x44\x65\x73\x74\x72\x6F\x79","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x69\x64","\x63\x61\x74\x63\x68","\x50\x52\x49\x4D\x41\x52\x59","\x66\x69\x65\x6C\x64\x73","\x6D\x65\x73\x73\x61\x67\x65","\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E\x2F\x63\x6F\x6E\x74\x65\x78\x74\x20\x63\x6F\x6D\x62\x69\x6E\x61\x74\x69\x6F\x6E\x20\x61\x6C\x72\x65\x61\x64\x79\x20\x65\x78\x69\x73\x74","\x74\x72\x61\x6E\x73\x6C\x61\x74\x65\x64\x4D\x65\x73\x73\x61\x67\x65","\x4D\x45\x53\x53\x41\x47\x45\x5F\x45\x58\x49\x53\x54\x5F\x52\x4F\x55\x54\x45","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x72\x6F\x75\x74\x65\x55\x70\x64\x61\x74\x65","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E","\x66\x6F\x72\x45\x61\x63\x68","\x74\x68\x65\x6E","\x61\x70\x70","\x69\x6E\x74\x65\x72\x76\x61\x6C","\x63\x61\x6C\x6C\x65\x72\x49\x44","\x61\x70\x70\x64\x61\x74\x61","\x74\x79\x70\x65","\x66\x69\x6E\x64\x41\x6C\x6C","\x65\x78\x70\x6F\x72\x74\x73"];_0xcd8b[0];var _=require(_0xcd8b[1]);var util=require(_0xcd8b[2]);var IntervalModel=require(_0xcd8b[4])[_0xcd8b[3]];var VoiceExtension=require(_0xcd8b[4])[_0xcd8b[5]];var veUtil=require(_0xcd8b[6]);var sequelize=require(_0xcd8b[4])[_0xcd8b[7]];var Applications=veUtil[_0xcd8b[8]];function Interval(){console[_0xcd8b[10]](_0xcd8b[9]);IntervalModel[_0xcd8b[11]](function(_0x4831x9){updatevoiceExtension(_0x4831x9)});IntervalModel[_0xcd8b[13]](function(_0x4831x9){if(_0x4831x9[_0xcd8b[12]]!==null){updatevoiceExtension(_0x4831x9)}});IntervalModel[_0xcd8b[14]](function(_0x4831x9){if(_0x4831x9[_0xcd8b[12]]!==null){updatevoiceExtension(_0x4831x9)}})}function updatevoiceExtension(_0x4831x9){var _0x4831xb=_0x4831x9[_0xcd8b[12]]===null?_0x4831x9[_0xcd8b[15]]:_0x4831x9[_0xcd8b[12]];return VoiceExtension[_0xcd8b[33]]({where:{VoiceExtensionId:null},include:[{model:VoiceExtension,as:_0xcd8b[8],where:{IntervalId:_0x4831xb},attributes:[_0xcd8b[28],_0xcd8b[29],_0xcd8b[12],_0xcd8b[30],_0xcd8b[31],_0xcd8b[32]]}]})[_0xcd8b[27]](function(_0x4831xd){_0x4831xd[_0xcd8b[26]](function(_0x4831xe){return sequelize[_0xcd8b[25]](function(_0x4831xf){return veUtil[_0xcd8b[24]]({body:_0x4831xe[_0xcd8b[23]],params:{id:_0x4831xe[_0xcd8b[15]]}},_0x4831xf)})[_0xcd8b[16]](sequelize.UniqueConstraintError,function(_0x4831xc){if(_0x4831xc[_0xcd8b[18]][_0xcd8b[17]]){_0x4831xc[_0xcd8b[19]]=_0xcd8b[20];_0x4831xc[_0xcd8b[21]]=_0xcd8b[22]};console[_0xcd8b[10]](_0x4831xc)})[_0xcd8b[16]](function(_0x4831xc){console[_0xcd8b[10]](_0x4831xc)})})})[_0xcd8b[16]](function(_0x4831xc){console[_0xcd8b[10]](_0x4831xc)})}module[_0xcd8b[34]]=Interval
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var util = require('util');
+var IntervalModel = require('../../models').Interval;
+var VoiceExtension = require('../../models').VoiceExtension;
+var veUtil = require('../../utils/voice_extension');
+var sequelize = require('../../models').sequelize;
+var Applications = veUtil.Applications;
+
+function Interval() {
+  console.log('Interval Initialization..');
+  IntervalModel.afterUpdate(function(interval) {
+    updatevoiceExtension(interval);
+  })
+
+  IntervalModel.beforeDestroy(function(interval) {
+    if (interval.IntervalId !== null) {
+      updatevoiceExtension(interval);
+    }
+  })
+
+  IntervalModel.afterCreate(function(interval) {
+    if (interval.IntervalId !== null) {
+      updatevoiceExtension(interval);
+    }
+  })
+}
+
+function updatevoiceExtension(interval) {
+  var IntervalId = interval.IntervalId === null ? interval.id : interval.IntervalId;
+  return VoiceExtension
+    .findAll({
+      where: {
+        VoiceExtensionId: null
+      },
+      include: [{
+        model: VoiceExtension,
+        as: 'Applications',
+        where: {
+          IntervalId: IntervalId
+        },
+        attributes: ['app', 'interval', 'IntervalId', 'callerID', 'appdata', 'type']
+      }]
+    })
+    .then(function(voiceExtensions) {
+      voiceExtensions.forEach(function(elem) {
+        return sequelize.transaction(function(t) {
+            return veUtil.routeUpdate({
+              body: elem.dataValues,
+              params: {
+                id: elem.id
+              }
+            }, t);
+          })
+          .catch(sequelize.UniqueConstraintError, function(err) {
+            if (err.fields.PRIMARY) {
+              err.message = 'Extension/context combination already exist';
+              err.translatedMessage = 'MESSAGE_EXIST_ROUTE'
+            }
+            console.log(err);
+          })
+          .catch(function(err) {
+            console.log(err);
+          });
+      });
+    })
+    .catch(function(err) {
+      console.log(err);
+    });
+}
+
+
+module.exports = Interval;
index c45e647..a55d7c8 100644 (file)
@@ -1 +1,193 @@
-var _0xd284=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x66\x73","\x75\x74\x69\x6C","\x70\x61\x74\x68","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x55\x73\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x56\x6F\x69\x63\x65\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x43\x68\x61\x6E\x53\x70\x79","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x63\x68\x61\x6E\x73\x70\x79","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x63\x68\x61\x6E\x67\x65\x64","\x6E\x61\x6D\x65","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x6C\x6F\x67","\x63\x61\x74\x63\x68","\x61\x6C\x6C","\x61\x75\x74\x68","\x66\x72\x6F\x6D\x2D\x73\x69\x70","\x25\x73\x25\x73","\x70\x72\x65\x66\x69\x78","\x66\x6F\x72\x6D\x61\x74","\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65","\x70\x61\x73\x73\x77\x6F\x72\x64","\x69\x64","\x73\x79\x73\x74\x65\x6D","\x70\x75\x73\x68","\x53\x49\x50\x2F\x25\x73\x2C\x25\x73","\x6F\x70\x74\x69\x6F\x6E\x73","\x69\x6E\x74\x65\x72\x6E\x61\x6C","\x62\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x66\x6F\x72\x45\x61\x63\x68","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6C\x6C","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E","\x64\x65\x73\x74\x72\x6F\x79","\x66\x75\x6C\x6C\x6E\x61\x6D\x65","\x63\x61\x6C\x6C\x65\x72\x69\x64","\x22\x25\x73\x22\x20\x3C\x25\x73\x3E","\x73\x61\x76\x65","\x65\x78\x74\x65\x6E","\x5F\x70\x72\x65\x76\x69\x6F\x75\x73\x44\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x61\x70\x70\x64\x61\x74\x61","\x53\x49\x50\x2F","\x67\x65\x74\x55\x73\x65\x72\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E\x73","\x53\x65\x74","\x43\x44\x52\x28\x74\x79\x70\x65\x29\x3D\x69\x6E\x74\x65\x72\x6E\x61\x6C","\x44\x69\x61\x6C","\x65\x78\x70\x6F\x72\x74\x73"];_0xd284[0];var fs=require(_0xd284[1]);var util=require(_0xd284[2]);var path=require(_0xd284[3]);var config=require(_0xd284[4]);var UserModel=require(_0xd284[6])[_0xd284[5]];var VoiceExtension=require(_0xd284[6])[_0xd284[7]];var ChanSpy=require(_0xd284[6])[_0xd284[8]];var sequelize=require(_0xd284[6])[_0xd284[9]];function User(){UserModel[_0xd284[11]](function(_0xb564xa){createCallerID(_0xb564xa);createExtension(_0xb564xa);if(_0xb564xa[_0xd284[10]]){createChanspy(_0xb564xa)}});UserModel[_0xd284[14]](function(_0xb564xa){updateExtension(_0xb564xa);createCallerID(_0xb564xa);if((_0xb564xa[_0xd284[10]]&&_0xb564xa[_0xd284[12]](_0xd284[10]))){createChanspy(_0xb564xa)}else {if(_0xb564xa[_0xd284[10]]&&!_0xb564xa[_0xd284[12]](_0xd284[10])&&_0xb564xa[_0xd284[12]](_0xd284[13])){deleteChanSpy(_0xb564xa);createChanspy(_0xb564xa)}else {if(!_0xb564xa[_0xd284[10]]&&_0xb564xa[_0xd284[12]](_0xd284[10])){deleteChanSpy(_0xb564xa)}}}})}function createChanspy(_0xb564xa){return sequelize[_0xd284[35]](function(_0xb564xd){return ChanSpy[_0xd284[34]]()[_0xd284[33]](function(_0xb564xe){var _0xb564xf=[];_0xb564xe[_0xd284[32]](function(_0xb564x10){var _0xb564x11=[];var _0xb564x12=1;if(_0xb564x10[_0xd284[18]]){_0xb564x11[_0xd284[27]]({context:_0xd284[19],exten:util[_0xd284[22]](_0xd284[20],_0xb564x10[_0xd284[21]],_0xb564xa[_0xd284[13]]),priority:_0xb564x12,app:_0xd284[23],appdata:_0xb564x10[_0xd284[24]],UserId:_0xb564xa[_0xd284[25]],ChanSpyId:_0xb564x10[_0xd284[25]],type:_0xd284[26]});_0xb564x12++};_0xb564x11[_0xd284[27]]({context:_0xd284[19],exten:util[_0xd284[22]](_0xd284[20],_0xb564x10[_0xd284[21]],_0xb564xa[_0xd284[13]]),priority:_0xb564x12,app:_0xd284[8],appdata:util[_0xd284[22]](_0xd284[28],_0xb564xa[_0xd284[13]],_0xb564x10[_0xd284[29]]),UserId:_0xb564xa[_0xd284[25]],ChanSpyId:_0xb564x10[_0xd284[25]],type:_0xd284[26]});_0xb564x12=1;if(_0xb564x10[_0xd284[18]]){_0xb564x11[_0xd284[27]]({context:_0xd284[19],exten:util[_0xd284[22]](_0xd284[20],_0xb564x10[_0xd284[21]],_0xb564xa[_0xd284[30]]),priority:_0xb564x12,app:_0xd284[23],appdata:_0xb564x10[_0xd284[24]],UserId:_0xb564xa[_0xd284[25]],ChanSpyId:_0xb564x10[_0xd284[25]],type:_0xd284[26]});_0xb564x12++};_0xb564x11[_0xd284[27]]({context:_0xd284[19],exten:util[_0xd284[22]](_0xd284[20],_0xb564x10[_0xd284[21]],_0xb564xa[_0xd284[30]]),priority:_0xb564x12,app:_0xd284[8],appdata:util[_0xd284[22]](_0xd284[28],_0xb564xa[_0xd284[13]],_0xb564x10[_0xd284[29]]),UserId:_0xb564xa[_0xd284[25]],ChanSpyId:_0xb564x10[_0xd284[25]],type:_0xd284[26]});_0xb564xf[_0xd284[27]](VoiceExtension[_0xd284[31]](_0xb564x11,{transaction:_0xb564xd}))});return _0xb564xf})[_0xd284[17]]()})[_0xd284[16]](function(_0xb564xc){console[_0xd284[15]](_0xb564xc)})}function deleteChanSpy(_0xb564xa){return sequelize[_0xd284[35]](function(_0xb564xd){return VoiceExtension[_0xd284[36]]({where:{UserId:_0xb564xa[_0xd284[25]],ChanSpyId:{$ne:null}},transaction:_0xb564xd})})[_0xd284[16]](function(_0xb564xc){console[_0xd284[15]](_0xb564xc)})}function createCallerID(_0xb564xa){if(_0xb564xa[_0xd284[37]]&&_0xb564xa[_0xd284[30]]){_0xb564xa[_0xd284[38]]=util[_0xd284[22]](_0xd284[39],_0xb564xa[_0xd284[37]],_0xb564xa[_0xd284[30]]);_0xb564xa[_0xd284[40]]()};return}function updateExtension(_0xb564xa){if(_0xb564xa[_0xd284[12]](_0xd284[13])){_0xb564xa[_0xd284[45]]()[_0xd284[33]](function(_0xb564x16){_0xb564x16[_0xd284[32]](function(_0xb564x10){_0xb564x10[_0xd284[41]]=(_0xb564x10[_0xd284[41]]===_0xb564xa[_0xd284[42]][_0xd284[30]])?_0xb564xa[_0xd284[30]]:_0xb564xa[_0xd284[13]];_0xb564x10[_0xd284[43]]=_0xd284[44]+_0xb564xa[_0xd284[13]];_0xb564x10[_0xd284[40]]()})})[_0xd284[16]](function(_0xb564xc){console[_0xd284[15]](_0xb564xc)})}}function createExtension(_0xb564xa){if(_0xb564xa[_0xd284[30]]){var _0xb564x18=[{context:_0xd284[19],exten:_0xb564xa[_0xd284[30]],priority:1,app:_0xd284[46],appdata:_0xd284[47],UserId:_0xb564xa[_0xd284[25]],type:_0xd284[26]},{context:_0xd284[19],exten:_0xb564xa[_0xd284[30]],priority:2,app:_0xd284[48],appdata:_0xd284[44]+_0xb564xa[_0xd284[13]],UserId:_0xb564xa[_0xd284[25]],type:_0xd284[26]},{context:_0xd284[19],exten:_0xb564xa[_0xd284[30]],priority:1,app:_0xd284[46],appdata:_0xd284[47],UserId:_0xb564xa[_0xd284[25]],type:_0xd284[26]},{context:_0xd284[19],exten:_0xb564xa[_0xd284[13]],priority:2,app:_0xd284[48],appdata:_0xd284[44]+_0xb564xa[_0xd284[13]],UserId:_0xb564xa[_0xd284[25]],type:_0xd284[26]}];return VoiceExtension[_0xd284[31]](_0xb564x18)[_0xd284[16]](function(_0xb564xc){console[_0xd284[15]](_0xb564xc)})}}module[_0xd284[49]]=User
\ No newline at end of file
+'use strict';
+
+var fs = require('fs');
+var util = require('util');
+var path = require('path');
+var config = require('../../config/environment');
+var UserModel = require('../../models').User;
+var VoiceExtension = require('../../models').VoiceExtension;
+var ChanSpy = require('../../models').ChanSpy;
+var sequelize = require('../../models').sequelize;
+
+function User() {
+  UserModel.afterCreate(function(doc) {
+    createCallerID(doc);
+    createExtension(doc);
+    if (doc.chanspy) {
+      createChanspy(doc);
+    }
+  })
+  UserModel.afterUpdate(function(doc) {
+    updateExtension(doc);
+    createCallerID(doc);
+    if ((doc.chanspy && doc.changed('chanspy'))) {
+      createChanspy(doc);
+    } else if (doc.chanspy && !doc.changed('chanspy') && doc.changed('name')) {
+      deleteChanSpy(doc);
+      createChanspy(doc);
+    } else if (!doc.chanspy && doc.changed('chanspy')) {
+      deleteChanSpy(doc);
+    }
+  })
+}
+
+function createChanspy(doc) {
+  return sequelize.transaction(function(t) {
+      return ChanSpy
+        .findAll()
+        .then(function(chanspy) {
+          var bulkSpies = [];
+          chanspy.forEach(function(elem) {
+            var spies = [];
+            var priority = 1;
+            if (elem.auth) {
+              spies.push({
+                context: 'from-sip',
+                exten: util.format('%s%s', elem.prefix, doc.name),
+                priority: priority,
+                app: 'Authenticate',
+                appdata: elem.password,
+                UserId: doc.id,
+                ChanSpyId: elem.id,
+                type: 'system'
+              });
+              priority++;
+            }
+            spies.push({
+              context: 'from-sip',
+              exten: util.format('%s%s', elem.prefix, doc.name),
+              priority: priority,
+              app: 'ChanSpy',
+              appdata: util.format('SIP/%s,%s', doc.name, elem.options),
+              UserId: doc.id,
+              ChanSpyId: elem.id,
+              type: 'system'
+            });
+            priority = 1;
+            if (elem.auth) {
+              spies.push({
+                context: 'from-sip',
+                exten: util.format('%s%s', elem.prefix, doc.internal),
+                priority: priority,
+                app: 'Authenticate',
+                appdata: elem.password,
+                UserId: doc.id,
+                ChanSpyId: elem.id,
+                type: 'system'
+              });
+              priority++;
+            }
+            spies.push({
+              context: 'from-sip',
+              exten: util.format('%s%s', elem.prefix, doc.internal),
+              priority: priority,
+              app: 'ChanSpy',
+              appdata: util.format('SIP/%s,%s', doc.name, elem.options),
+              UserId: doc.id,
+              ChanSpyId: elem.id,
+              type: 'system'
+            });
+            bulkSpies.push(VoiceExtension.bulkCreate(spies, {
+              transaction: t
+            }));
+          });
+          return bulkSpies;
+        })
+        .all();
+    })
+    .catch(function(err) {
+      console.log(err);
+    });
+}
+
+function deleteChanSpy(doc) {
+  return sequelize.transaction(function(t) {
+      return VoiceExtension
+        .destroy({
+          where: {
+            UserId: doc.id,
+            ChanSpyId: {
+              $ne: null
+            }
+          },
+          transaction: t
+        });
+    })
+    .catch(function(err) {
+      console.log(err);
+    });
+}
+
+function createCallerID(doc) {
+  // devo aspettare che ci siano entrambi i campi
+  if (doc.fullname && doc.internal) {
+    doc.callerid = util.format('"%s" <%s>', doc.fullname, doc.internal);
+    doc.save();
+  }
+
+  return;
+}
+
+function updateExtension(doc) {
+  if (doc.changed('name')) {
+    doc
+      .getUserExtensions()
+      .then(function(userExtensions) {
+        userExtensions.forEach(function(elem) {
+          elem.exten = (elem.exten === doc._previousDataValues.internal) ? doc.internal : doc.name;
+          elem.appdata = 'SIP/' + doc.name;
+          elem.save();
+        })
+      })
+      .catch(function(err) {
+        console.log(err);
+      });
+  }
+}
+
+
+function createExtension(doc) {
+  if (doc.internal) {
+    var userDials = [{
+      context: 'from-sip',
+      exten: doc.internal,
+      priority: 1,
+      app: 'Set',
+      appdata: 'CDR(type)=internal',
+      UserId: doc.id,
+      type: 'system'
+    }, {
+      context: 'from-sip',
+      exten: doc.internal,
+      priority: 2,
+      app: 'Dial',
+      appdata: 'SIP/' + doc.name,
+      UserId: doc.id,
+      type: 'system'
+    }, {
+      context: 'from-sip',
+      exten: doc.internal,
+      priority: 1,
+      app: 'Set',
+      appdata: 'CDR(type)=internal',
+      UserId: doc.id,
+      type: 'system'
+    }, {
+      context: 'from-sip',
+      exten: doc.name,
+      priority: 2,
+      app: 'Dial',
+      appdata: 'SIP/' + doc.name,
+      UserId: doc.id,
+      type: 'system'
+    }];
+
+    return VoiceExtension
+      .bulkCreate(userDials)
+      .catch(function(err) {
+        console.log(err);
+      });
+  }
+}
+
+module.exports = User;
index 35d27da..72fc1e9 100644 (file)
@@ -1 +1,76 @@
-var _0xe38a=["\x6C\x6F\x64\x61\x73\x68","\x6D\x75\x73\x74\x61\x63\x68\x65","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x43\x68\x61\x74\x45\x6E\x71\x75\x69\x72\x79","\x43\x68\x61\x74\x57\x65\x62\x73\x69\x74\x65","\x4D\x61\x69\x6C\x4D\x65\x73\x73\x61\x67\x65","\x4D\x61\x69\x6C\x53\x65\x72\x76\x65\x72\x4F\x75\x74","\x54\x72\x69\x67\x67\x65\x72\x20\x43\x68\x61\x74\x20\x49\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x2E\x2E","\x6C\x6F\x67","\x75\x73\x65\x72\x6E\x61\x6D\x65","\x65\x6E\x71\x75\x69\x72\x79\x5F\x66\x6F\x72\x77\x61\x72\x64\x69\x6E\x67\x5F\x61\x64\x64\x72\x65\x73\x73","\x73\x75\x62\x6A\x65\x63\x74","\x68\x74\x6D\x6C","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E","\x63\x72\x65\x61\x74\x65","\x74\x68\x65\x6E","\x72\x65\x6E\x64\x65\x72","\x66\x69\x6E\x64\x4F\x6E\x65","\x63\x68\x61\x74\x57\x65\x62\x73\x69\x74\x65","\x6E\x61\x6D\x65","\x65\x6E\x71\x75\x69\x72\x79\x5F\x66\x6F\x72\x77\x61\x72\x64\x69\x6E\x67","\x67\x65\x74\x4F\x66\x66\x6C\x69\x6E\x65\x54\x65\x6D\x70\x6C\x61\x74\x65","\x66\x69\x6E\x64\x42\x79\x49\x64","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];var _=require(_0xe38a[0]);var Mustache=require(_0xe38a[1]);var sequelize=require(_0xe38a[3])[_0xe38a[2]];var ChatEnquiry=require(_0xe38a[3])[_0xe38a[4]];var ChatWebsite=require(_0xe38a[3])[_0xe38a[5]];var MailMessage=require(_0xe38a[3])[_0xe38a[6]];var MailServerOut=require(_0xe38a[3])[_0xe38a[7]];function Chat(){console[_0xe38a[9]](_0xe38a[8]);ChatEnquiry[_0xe38a[24]](function(_0xe5eax9,_0xe5eaxa){var _0xe5eaxb=_0xe5eax9;var _0xe5eaxc;var _0xe5eaxd;var _0xe5eaxe;return ChatWebsite[_0xe38a[23]](_0xe5eax9.ChatWebsiteId)[_0xe38a[16]](function(_0xe5eax11){_0xe5eaxc=_0xe5eax11;_0xe5eaxb[_0xe38a[19]]=_0xe5eaxc[_0xe38a[20]];if(_0xe5eaxc[_0xe38a[21]]&&_0xe5eaxc[_0xe38a[11]]){return _0xe5eaxc[_0xe38a[22]]()}else {return null}})[_0xe38a[16]](function(_0xe5eax10){_0xe5eaxe=_0xe5eax10;if(_0xe5eaxe){_0xe5eaxe[_0xe38a[13]]=Mustache[_0xe38a[17]](_0xe5eaxe[_0xe38a[13]],_0xe5eaxb);_0xe5eaxe[_0xe38a[12]]=Mustache[_0xe38a[17]](_0xe5eaxe[_0xe38a[12]],_0xe5eaxb);return MailServerOut[_0xe38a[18]]({where:{service:true}})}else {return null}})[_0xe38a[16]](function(_0xe5eaxf){_0xe5eaxd=_0xe5eaxf;if(_0xe5eaxd){return MailMessage[_0xe38a[15]]({from:[_0xe5eaxd[_0xe38a[10]]],to:[_0xe5eaxc[_0xe38a[11]]],subject:_0xe5eaxe[_0xe38a[12]],html:_0xe5eaxe[_0xe38a[13]]},{transaction:_0xe5eaxa?_0xe5eaxa[_0xe38a[14]]:null})}})})}module[_0xe38a[25]]=Chat
\ No newline at end of file
+var _ = require('lodash');
+var Mustache = require('mustache');
+
+var sequelize = require('../../models').sequelize;
+var ChatEnquiry = require('../../models').ChatEnquiry;
+var ChatWebsite = require('../../models').ChatWebsite;
+var MailMessage = require('../../models').MailMessage;
+var MailServerOut = require('../../models').MailServerOut;
+
+function Chat() {
+  console.log('Trigger Chat Initialization...');
+
+  ChatEnquiry.afterCreate(function(chatEnquiry, options) {
+    var _chatEnquiry = chatEnquiry;
+    var _chatWebsite;
+    var _mailServerOut;
+    var _offlineTemplate;
+
+    return ChatWebsite
+      .findById(chatEnquiry.ChatWebsiteId)
+      .then(function(chatWebsite) {
+        _chatWebsite = chatWebsite;
+        _chatEnquiry.chatWebsite = _chatWebsite.name;
+
+        if (_chatWebsite.enquiry_forwarding && _chatWebsite.enquiry_forwarding_address) {
+          return _chatWebsite
+            .getOfflineTemplate();
+        } else {
+          // throw new Error({
+          //   message: 'chatWebsite can\'t send offline messages via mail'
+          // });
+          return null;
+        }
+      })
+      .then(function(offlineTemplate) {
+        _offlineTemplate = offlineTemplate;
+        if (_offlineTemplate) {
+          _offlineTemplate.html = Mustache.render(_offlineTemplate.html, _chatEnquiry);
+          _offlineTemplate.subject = Mustache.render(_offlineTemplate.subject, _chatEnquiry);
+
+          return MailServerOut
+            .findOne({
+              where: {
+                service: true
+              }
+            });
+
+        } else {
+          // throw new Error({
+          //   message: 'offlineTemplate not found. ChatWebsite: ' + _chatWebsite.name
+          // });
+          return null;
+        }
+
+
+      })
+      .then(function(mailServerOut) {
+        _mailServerOut = mailServerOut;
+
+        if (_mailServerOut) {
+          // throw new Error('Motion Service SMTP not configured!');
+          return MailMessage
+            .create({
+              from: [_mailServerOut.username],
+              to: [_chatWebsite.enquiry_forwarding_address],
+              subject: _offlineTemplate.subject,
+              html: _offlineTemplate.html
+            }, {
+              transaction: options ? options.transaction : null
+            });
+        }
+      });
+  });
+}
+
+module.exports = Chat;
index 5b914e0..ae02e6e 100644 (file)
@@ -1 +1,25 @@
-var _0x3b82=["\x6C\x6F\x64\x61\x73\x68","\x54\x72\x69\x67\x67\x65\x72\x20\x43\x6D\x20\x49\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x2E\x2E","\x6C\x6F\x67","\x6D\x61\x6E\x61\x67\x65\x43\x6F\x6E\x74\x61\x63\x74","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x43\x6F\x6E\x74\x61\x63\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x43\x6F\x6E\x74\x61\x63\x74\x50\x68\x6F\x6E\x65","\x43\x6F\x6E\x74\x61\x63\x74\x45\x6D\x61\x69\x6C","\x52\x65\x70\x6F\x72\x74\x49\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x69\x64","\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x63\x6F\x6E\x74\x61\x63\x74\x6D\x61\x6E\x61\x67\x65\x72","\x65\x76\x65\x6E\x74\x43\x68\x61\x6E\x6E\x65\x6C","\x63\x61\x74\x63\x68","\x63\x72\x65\x61\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];var _=require(_0x3b82[0]);function Cm(){console[_0x3b82[2]](_0x3b82[1])}Cm[_0x3b82[4]][_0x3b82[3]]=function(_0x6e6ax3,_0x6e6ax4){manageContact(_0x6e6ax3,_0x6e6ax4)};function manageContact(_0x6e6ax3,_0x6e6ax4){var _0x6e6ax6=require(_0x3b82[6])[_0x3b82[5]];var _0x6e6ax7=require(_0x3b82[6])[_0x3b82[7]];var _0x6e6ax8=require(_0x3b82[6])[_0x3b82[8]];var _0x6e6ax9=require(_0x3b82[6])[_0x3b82[9]];delete _0x6e6ax3[_0x3b82[10]];_0x6e6ax3[_0x3b82[11]]=_0x3b82[12];_0x6e6ax3[_0x3b82[13]]=_0x6e6ax4;_0x6e6ax9[_0x3b82[15]](_0x6e6ax3)[_0x3b82[14]](function(_0x6e6axa){console[_0x3b82[2]](_0x6e6axa)})}module[_0x3b82[16]]=Cm
\ No newline at end of file
+var _ = require('lodash');
+
+function Cm() {
+  console.log('Trigger Cm Initialization...');
+}
+
+Cm.prototype.manageContact = function(doc, channel) {
+  manageContact(doc, channel);
+}
+
+function manageContact(doc, channel) {
+  var Contact = require('../../models').Contact;
+  var ContactPhone = require('../../models').ContactPhone;
+  var ContactEmail = require('../../models').ContactEmail;
+  var ReportIntegration = require('../../models').ReportIntegration;
+  delete doc.id
+  doc.integration = 'contactmanager';
+  doc.eventChannel = channel;
+  ReportIntegration.create(doc)
+    .catch(function(err) {
+      console.log(err);
+    });
+}
+
+module.exports = Cm;
index ad62857..947b5f0 100644 (file)
@@ -1 +1,103 @@
-var _0x2526=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x2E\x2F\x75\x74\x69\x6C","\x2E\x2F\x76\x6F\x69\x63\x65","\x2E\x2F\x6D\x61\x69\x6C","\x2E\x2F\x63\x68\x61\x74","\x2E\x2F\x63\x6D","\x2E\x2E\x2F\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x73","\x54\x72\x69\x67\x67\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x52\x65\x70\x6F\x72\x74\x41\x67\x65\x6E\x74","\x4D\x61\x69\x6C\x4D\x65\x73\x73\x61\x67\x65","\x65\x78\x70\x6F\x72\x74\x73","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x54\x72\x69\x67\x67\x65\x72\x73\x20\x61\x72\x65\x20","\x6C\x65\x6E\x67\x74\x68","\x6C\x6F\x67","\x76\x6F\x69\x63\x65","\x66\x69\x6C\x74\x65\x72","\x67\x65\x74\x41\x63\x74\x69\x6F\x6E\x73\x42\x79\x54\x72\x69\x67\x67\x65\x72\x73","\x41\x66\x74\x65\x72\x20\x61\x67\x65\x6E\x74\x20\x63\x72\x65\x61\x74\x65\x2C\x20\x41\x63\x74\x69\x6F\x6E\x73\x20\x61\x72\x65\x20","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x41\x66\x74\x65\x72\x20\x61\x67\x65\x6E\x74\x20\x75\x70\x64\x61\x74\x65\x2C\x20\x41\x63\x74\x69\x6F\x6E\x73\x20\x61\x72\x65\x20","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x73\x74\x61\x74\x75\x73","\x52\x45\x43\x45\x49\x56\x45\x44","\x6D\x61\x69\x6C","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6C\x6C","\x61\x6C\x6C","\x73\x63\x6F\x70\x65","\x45\x78\x65\x63\x75\x74\x69\x6E\x67\x20\x61\x63\x74\x69\x6F\x6E\x20\x22","\x61\x63\x74\x69\x6F\x6E","\x22","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x6D\x61\x6E\x61\x67\x65\x43\x6F\x6E\x74\x61\x63\x74","\x63\x6F\x6E\x74\x61\x63\x74\x4D\x61\x6E\x61\x67\x65\x72","\x73\x65\x6E\x64\x54\x65\x6D\x70\x6C\x61\x74\x65","\x74\x65\x6D\x70\x6C\x61\x74\x65","\x6D\x61\x6E\x61\x67\x65\x45\x76\x65\x6E\x74","\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x66\x6F\x72\x45\x61\x63\x68","\x41\x66\x74\x65\x72\x20\x63\x72\x65\x61\x74\x65\x2C\x20\x54\x72\x69\x67\x67\x65\x72\x73\x20\x61\x72\x65\x20","\x41\x66\x74\x65\x72\x20\x75\x70\x64\x61\x74\x65\x2C\x20\x54\x72\x69\x67\x67\x65\x72\x73\x20\x61\x72\x65\x20","\x69\x64","\x72\x65\x6D\x6F\x76\x65","\x41\x66\x74\x65\x72\x20\x64\x65\x73\x74\x72\x6F\x79\x2C\x20\x54\x72\x69\x67\x67\x65\x72\x73\x20\x61\x72\x65\x20","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x66\x69\x6E\x64","\x69\x6E\x64\x65\x78\x4F\x66","\x6D\x65\x72\x67\x65","\x75\x6E\x73\x68\x69\x66\x74"];_0x2526[0];var _=require(_0x2526[1]);var Util=require(_0x2526[2]);var Voice=require(_0x2526[3]);var Mail=require(_0x2526[4]);var Chat=require(_0x2526[5]);var Cm=require(_0x2526[6]);var Integration=require(_0x2526[7]);var Trigger=require(_0x2526[9])[_0x2526[8]];var ReportAgent=require(_0x2526[9])[_0x2526[10]];var MailMessage=require(_0x2526[9])[_0x2526[11]];module[_0x2526[12]]=function(_0xc5a2xb){var _0xc5a2xc= new Util();var _0xc5a2xd= new Voice();var _0xc5a2xe= new Chat();var _0xc5a2xf= new Mail();var _0xc5a2x10= new Cm();var _0xc5a2x11= new Integration(_0xc5a2xb);Trigger[_0x2526[31]](_0x2526[30])[_0x2526[29]]()[_0x2526[28]](function(_0xc5a2x13){synchTriggers(_0xc5a2x13);console[_0x2526[17]](_0x2526[15],_0xc5a2x13[_0x2526[16]]);ReportAgent[_0x2526[22]](function(_0xc5a2x14){var _0xc5a2x15=_0xc5a2xc[_0x2526[20]](_0xc5a2x14,_[_0x2526[19]](_0xc5a2x13,{channel:_0x2526[18]}));console[_0x2526[17]](_0x2526[21],_0xc5a2x15[_0x2526[16]]);execActions(_0xc5a2x15,_0xc5a2x14,_0x2526[18],_0xc5a2xc,_0xc5a2xd,_0xc5a2xf,_0xc5a2x10,_0xc5a2x11)});ReportAgent[_0x2526[24]](function(_0xc5a2x14){var _0xc5a2x15=_0xc5a2xc[_0x2526[20]](_0xc5a2x14,_[_0x2526[19]](_0xc5a2x13,{channel:_0x2526[18]}));console[_0x2526[17]](_0x2526[23],_0xc5a2x15[_0x2526[16]]);execActions(_0xc5a2x15,_0xc5a2x14,_0x2526[18],_0xc5a2xc,_0xc5a2xd,_0xc5a2xf,_0xc5a2x10,_0xc5a2x11)});MailMessage[_0x2526[22]](function(_0xc5a2x14){if(_0xc5a2x14[_0x2526[25]]===_0x2526[26]){var _0xc5a2x15=_0xc5a2xc[_0x2526[20]](_0xc5a2x14,_[_0x2526[19]](_0xc5a2x13,{channel:_0x2526[27]}));execActions(_0xc5a2x15,_0xc5a2x14,_0x2526[27],_0xc5a2xc,_0xc5a2xd,_0xc5a2xf,_0xc5a2x10,_0xc5a2x11)}})})[_0x2526[14]](function(_0xc5a2x12){console[_0x2526[13]](_0xc5a2x12)})};function execActions(_0xc5a2x15,_0xc5a2x14,_0xc5a2x17,_0xc5a2xc,_0xc5a2xd,_0xc5a2xf,_0xc5a2x10,_0xc5a2x11){_0xc5a2x15[_0x2526[42]](function(_0xc5a2x18){console[_0x2526[17]](_0x2526[32]+_0xc5a2x18[_0x2526[33]]+_0x2526[34]);switch(_0xc5a2x18[_0x2526[33]]){case _0x2526[37]:_0xc5a2x10[_0x2526[36]](_0xc5a2x14[_0x2526[35]],_0xc5a2x17);break;case _0x2526[39]:_0xc5a2xf[_0x2526[38]](_0xc5a2x18);break;case _0x2526[41]:_0xc5a2x11[_0x2526[40]](_0xc5a2x18,_0xc5a2x14,_0xc5a2x17);break;default:}})}function synchTriggers(_0xc5a2x13){Trigger[_0x2526[22]](function(_0xc5a2x14){updateCollection(_0xc5a2x13,_0xc5a2x14);console[_0x2526[17]](_0x2526[43],_0xc5a2x13[_0x2526[16]])});Trigger[_0x2526[24]](function(_0xc5a2x14){updateCollection(_0xc5a2x13,_0xc5a2x14);console[_0x2526[17]](_0x2526[44],_0xc5a2x13[_0x2526[16]])});Trigger[_0x2526[48]](function(_0xc5a2x14){_[_0x2526[46]](_0xc5a2x13,{id:_0xc5a2x14[_0x2526[45]]});console[_0x2526[17]](_0x2526[47],_0xc5a2x13[_0x2526[16]])})}function updateCollection(_0xc5a2x1b,_0xc5a2x14){var _0xc5a2x1c=_[_0x2526[49]](_0xc5a2x1b,{id:_0xc5a2x14[_0x2526[45]]});var _0xc5a2x1d=_0xc5a2x1b[_0x2526[50]](_0xc5a2x1c);if(_0xc5a2x1c){_[_0x2526[51]](_0xc5a2x1b[_0xc5a2x1d],_0xc5a2x14)}else {_0xc5a2x1b[_0x2526[52]](_0xc5a2x14)}}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var Util = require('./util');
+var Voice = require('./voice');
+var Mail = require('./mail');
+var Chat = require('./chat');
+var Cm = require('./cm');
+var Integration = require('../integrations');
+var Trigger = require('../../models').Trigger;
+var ReportAgent = require('../../models').ReportAgent;
+var MailMessage = require('../../models').MailMessage;
+
+module.exports = function(ami) {
+
+  var util = new Util();
+  var voice = new Voice();
+  var chat = new Chat();
+  var mail = new Mail();
+  var cm = new Cm();
+  var integration = new Integration(ami);
+
+  Trigger
+    .scope('all')
+    .findAll()
+    .then(function(triggers) {
+      synchTriggers(triggers);
+      console.log('Triggers are ', triggers.length);
+      ReportAgent.afterCreate(function(doc) {
+        var actions = util.getActionsByTriggers(doc, _.filter(triggers, {
+          channel: 'voice'
+        }));
+        console.log('After agent create, Actions are ', actions.length);
+        execActions(actions, doc, 'voice', util, voice, mail, cm, integration);
+      })
+      ReportAgent.afterUpdate(function(doc) {
+        var actions = util.getActionsByTriggers(doc, _.filter(triggers, {
+          channel: 'voice'
+        }));
+        console.log('After agent update, Actions are ', actions.length);
+        execActions(actions, doc, 'voice', util, voice, mail, cm, integration);
+      })
+      MailMessage.afterCreate(function(doc) {
+        if (doc.status === 'RECEIVED') {
+          var actions = util.getActionsByTriggers(doc, _.filter(triggers, {
+            channel: 'mail'
+          }));
+          execActions(actions, doc, 'mail', util, voice, mail, cm, integration);
+        }
+      })
+    })
+    .catch(function(err) {
+      console.error(err);
+    });
+}
+
+
+function execActions(actions, doc, channel, util, voice, mail, cm, integration) {
+  actions.forEach(function(action) {
+    console.log('Executing action "' + action.action + '"');
+    switch (action.action) {
+      case 'contactManager':
+        cm.manageContact(doc.dataValues, channel);
+        break;
+      case 'template':
+        mail.sendTemplate(action);
+        break;
+      case 'integration':
+        integration.manageEvent(action, doc, channel);
+        break;
+      default:
+    }
+  });
+}
+
+function synchTriggers(triggers) {
+  Trigger.afterCreate(function(doc) {
+    updateCollection(triggers, doc);
+    console.log('After create, Triggers are ', triggers.length);
+  });
+  Trigger.afterUpdate(function(doc) {
+    updateCollection(triggers, doc);
+    console.log('After update, Triggers are ', triggers.length);
+  });
+  Trigger.afterDestroy(function(doc) {
+    _.remove(triggers, {
+      id: doc.id
+    });
+    console.log('After destroy, Triggers are ', triggers.length);
+  });
+}
+
+function updateCollection(collection, doc) {
+  var oldItem = _.find(collection, {
+    id: doc.id
+  });
+  var index = collection.indexOf(oldItem);
+  if (oldItem) {
+    _.merge(collection[index], doc);
+  } else {
+    collection.unshift(doc);
+  }
+}
index 518003b..21afef4 100644 (file)
@@ -1 +1,49 @@
-var _0x5182=["\x6C\x6F\x64\x61\x73\x68","\x54\x72\x69\x67\x67\x65\x72\x20\x4D\x61\x69\x6C\x20\x49\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x2E\x2E","\x6C\x6F\x67","\x73\x65\x6E\x64\x54\x65\x6D\x70\x6C\x61\x74\x65","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x4D\x61\x69\x6C\x54\x65\x6D\x70\x6C\x61\x74\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x4D\x61\x69\x6C\x4D\x65\x73\x73\x61\x67\x65","\x4D\x61\x69\x6C\x53\x65\x72\x76\x65\x72\x4F\x75\x74","\x63\x61\x74\x63\x68","\x53\x45\x4E\x44\x49\x4E\x47","\x73\x75\x62\x6A\x65\x63\x74","\x75\x73\x65\x72\x6E\x61\x6D\x65","\x3B","\x73\x70\x6C\x69\x74","\x64\x61\x74\x61\x33","\x64\x61\x74\x61\x34","\x68\x74\x6D\x6C","\x74\x65\x78\x74","\x63\x72\x65\x61\x74\x65","\x74\x68\x65\x6E","\x64\x61\x74\x61\x31","\x66\x69\x6E\x64\x42\x79\x49\x64","\x66\x69\x6E\x64\x4F\x6E\x65","\x65\x78\x70\x6F\x72\x74\x73"];var _=require(_0x5182[0]);function Mail(){console[_0x5182[2]](_0x5182[1])}Mail[_0x5182[4]][_0x5182[3]]=function(_0x8d39x3){sendTemplate(_0x8d39x3)};function sendTemplate(_0x8d39x5){var _0x8d39x6=require(_0x5182[6])[_0x5182[5]];var _0x8d39x7=require(_0x5182[6])[_0x5182[7]];var _0x8d39x8=require(_0x5182[6])[_0x5182[8]];var _0x8d39x9;return _0x8d39x8[_0x5182[23]]({where:{service:true}})[_0x5182[20]](function(_0x8d39xc){_0x8d39x9=_0x8d39xc;return _0x8d39x6[_0x5182[22]](Number(_0x8d39x5[_0x5182[21]]),{include:[{all:true}]})})[_0x5182[20]](function(_0x8d39xa){return _0x8d39x7[_0x5182[19]]({status:_0x5182[10],subject:_0x8d39xa[_0x5182[11]],from:[_0x8d39x9[_0x5182[12]]],to:_0x8d39x5[_0x5182[15]][_0x5182[14]](_0x5182[13]),cc:_0x8d39x5[_0x5182[16]]?_0x8d39x5[_0x5182[16]][_0x5182[14]](_0x5182[13]):[],html:_0x8d39xa[_0x5182[17]]||null,text:_0x8d39xa[_0x5182[18]]||null})[_0x5182[9]](function(_0x8d39xb){console[_0x5182[2]](_0x8d39xb)})})}module[_0x5182[24]]=Mail
\ No newline at end of file
+var _ = require('lodash');
+
+function Mail() {
+  console.log('Trigger Mail Initialization...');
+}
+
+Mail.prototype.sendTemplate = function(templateId) {
+  sendTemplate(templateId);
+}
+
+function sendTemplate(action) {
+  var MailTemplate = require('../../models').MailTemplate;
+  var MailMessage = require('../../models').MailMessage;
+  var MailServerOut = require('../../models').MailServerOut;
+  var _smtp;
+  return MailServerOut
+    .findOne({
+      where: {
+        service: true
+      }
+    })
+    .then(function(smtp) {
+      _smtp = smtp;
+      return MailTemplate
+        .findById(Number(action.data1), {
+          include: [{
+            all: true
+          }]
+        });
+    })
+    .then(function(mailTemplate) {
+      // console.log('found template');
+      return MailMessage
+        .create({
+          status: 'SENDING',
+          subject: mailTemplate.subject,
+          from: [_smtp.username],
+          to: action.data3.split(';'),
+          cc: action.data4 ? action.data4.split(';') : [],
+          html: mailTemplate.html || null,
+          text: mailTemplate.text || null
+        })
+        .catch(function(err) {
+          console.log(err);
+        });
+    });
+}
+
+module.exports = Mail;
index d3fea13..1ad1569 100644 (file)
@@ -1 +1,80 @@
-var _0xe0d8=["\x6C\x6F\x64\x61\x73\x68","\x54\x72\x69\x67\x67\x65\x72\x20\x55\x74\x69\x6C\x73\x20\x49\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x2E\x2E","\x6C\x6F\x67","\x67\x65\x74\x41\x63\x74\x69\x6F\x6E\x73\x42\x79\x54\x72\x69\x67\x67\x65\x72\x73","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x66\x72\x6F\x6D","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x3B","\x73\x70\x6C\x69\x74","\x63\x63","\x74\x6F","\x73\x74\x61\x74\x75\x73","\x70\x75\x73\x68","\x66\x6F\x72\x45\x61\x63\x68","\x41\x6C\x6C","\x41\x6E\x79","\x6C\x65\x6E\x67\x74\x68","\x72\x65\x64\x75\x63\x65","\x63\x6F\x6E\x63\x61\x74","\x6A\x6F\x69\x6E","\x66\x69\x65\x6C\x64","\x76\x61\x6C\x75\x65","\x65\x71\x75\x61\x6C\x73","\x6E\x6F\x74\x5F\x65\x71\x75\x61\x6C\x73","\x67\x72\x65\x61\x74\x65\x72\x5F\x6F\x72\x5F\x65\x71\x75\x61\x6C","\x6C\x65\x73\x73\x5F\x6F\x72\x5F\x65\x71\x75\x61\x6C","\x67\x72\x65\x61\x74\x65\x72","\x6C\x65\x73\x73","\x6F\x70\x65\x72\x61\x74\x6F\x72","\x65\x78\x70\x6F\x72\x74\x73"];var _=require(_0xe0d8[0]);function Util(){console[_0xe0d8[2]](_0xe0d8[1])}Util[_0xe0d8[4]][_0xe0d8[3]]=function(_0x35b3x3,_0x35b3x4){var _0x35b3x5=[];_0x35b3x3[_0xe0d8[6]][_0xe0d8[5]]=_0x35b3x3[_0xe0d8[6]][_0xe0d8[5]]?_0x35b3x3[_0xe0d8[6]][_0xe0d8[5]][_0xe0d8[8]](_0xe0d8[7]):[];_0x35b3x3[_0xe0d8[6]][_0xe0d8[9]]=_0x35b3x3[_0xe0d8[6]][_0xe0d8[9]]?_0x35b3x3[_0xe0d8[6]][_0xe0d8[9]][_0xe0d8[8]](_0xe0d8[7]):[];_0x35b3x3[_0xe0d8[6]][_0xe0d8[10]]=_0x35b3x3[_0xe0d8[6]][_0xe0d8[10]]?_0x35b3x3[_0xe0d8[6]][_0xe0d8[10]][_0xe0d8[8]](_0xe0d8[7]):[];_0x35b3x4[_0xe0d8[13]](function(_0x35b3x6){if(_0x35b3x6[_0xe0d8[11]]){var _0x35b3x7=[];var _0x35b3x8=[];_0x35b3x6[_0xe0d8[14]][_0xe0d8[13]](function(_0x35b3x9){_0x35b3x7[_0xe0d8[12]](checkCondition(_0x35b3x9[_0xe0d8[6]],_0x35b3x3[_0xe0d8[6]]))});_0x35b3x6[_0xe0d8[15]][_0xe0d8[13]](function(_0x35b3x9){_0x35b3x8[_0xe0d8[12]](checkCondition(_0x35b3x9[_0xe0d8[6]],_0x35b3x3[_0xe0d8[6]]))});var _0x35b3xa=[],_0x35b3xb=[];_0x35b3xa[_0xe0d8[12]](_[_0xe0d8[17]](_0x35b3x7[_0xe0d8[16]]?_0x35b3x7:[true],function(_0x35b3xc,_0x35b3xd){return _0x35b3xc&&_0x35b3xd}));_0x35b3xb[_0xe0d8[12]](_[_0xe0d8[17]](_0x35b3x8[_0xe0d8[16]]?_0x35b3x8:[true],function(_0x35b3xc,_0x35b3xd){return _0x35b3xc||_0x35b3xd}));var _0x35b3xe=_0x35b3xa[_0xe0d8[18]](_0x35b3xb);var _0x35b3xf=_[_0xe0d8[17]](_0x35b3xe[_0xe0d8[16]]?_0x35b3xe:[true],function(_0x35b3xc,_0x35b3xd){return _0x35b3xc&&_0x35b3xd});if(_0x35b3xf){_0x35b3x5=_0x35b3x5[_0xe0d8[18]](_0x35b3x6.Actions)}}});_0x35b3x3[_0xe0d8[6]][_0xe0d8[5]]=_0x35b3x3[_0xe0d8[6]][_0xe0d8[5]][_0xe0d8[19]](_0xe0d8[7]);_0x35b3x3[_0xe0d8[6]][_0xe0d8[9]]=_0x35b3x3[_0xe0d8[6]][_0xe0d8[9]][_0xe0d8[19]](_0xe0d8[7]);_0x35b3x3[_0xe0d8[6]][_0xe0d8[10]]=_0x35b3x3[_0xe0d8[6]][_0xe0d8[10]][_0xe0d8[19]](_0xe0d8[7]);return _0x35b3x5};function checkCondition(_0x35b3x9,_0x35b3x3){var _0x35b3x11;switch(_0x35b3x9[_0xe0d8[28]]){case _0xe0d8[22]:_0x35b3x11=(_0x35b3x3[_0x35b3x9[_0xe0d8[20]]]===_0x35b3x9[_0xe0d8[21]]);break;case _0xe0d8[23]:_0x35b3x11=(_0x35b3x3[_0x35b3x9[_0xe0d8[20]]]!==_0x35b3x9[_0xe0d8[21]]);break;case _0xe0d8[24]:_0x35b3x11=(_0x35b3x3[_0x35b3x9[_0xe0d8[20]]]>=Number(_0x35b3x9[_0xe0d8[21]]));break;case _0xe0d8[25]:_0x35b3x11=(_0x35b3x3[_0x35b3x9[_0xe0d8[20]]]<=Number(_0x35b3x9[_0xe0d8[21]]));break;case _0xe0d8[26]:_0x35b3x11=(_0x35b3x3[_0x35b3x9[_0xe0d8[20]]]>Number(_0x35b3x9[_0xe0d8[21]]));break;case _0xe0d8[27]:_0x35b3x11=(_0x35b3x3[_0x35b3x9[_0xe0d8[20]]]<Number(_0x35b3x9[_0xe0d8[21]]));break;default:};return _0x35b3x11}module[_0xe0d8[29]]=Util
\ No newline at end of file
+var _ = require('lodash');
+
+function Util() {
+  console.log('Trigger Utils Initialization...');
+}
+
+Util.prototype.getActionsByTriggers = function(doc, triggers) {
+  var actions = [];
+  doc.dataValues.from = doc.dataValues.from ? doc.dataValues.from.split(';') : [];
+  doc.dataValues.cc = doc.dataValues.cc ? doc.dataValues.cc.split(';') : [];
+  doc.dataValues.to = doc.dataValues.to ? doc.dataValues.to.split(';') : [];
+  triggers.forEach(function(trigger) {
+    if (trigger.status) {
+      var All = [];
+      var Any = [];
+      trigger.All.forEach(function(condition) {
+        All.push(checkCondition(condition.dataValues, doc.dataValues));
+      });
+      trigger.Any.forEach(function(condition) {
+        Any.push(checkCondition(condition.dataValues, doc.dataValues));
+      });
+
+      var allResult = [],
+        anyResult = [];
+      allResult.push(_.reduce(All.length ? All : [true], function(total, n) {
+        return total && n;
+      }));
+      anyResult.push(_.reduce(Any.length ? Any : [true], function(total, n) {
+        return total || n;
+      }));
+      var lastResults = allResult.concat(anyResult);
+      var finalResult = _.reduce(lastResults.length ? lastResults : [true], function(total, n) {
+          return total && n;
+        })
+        // console.log('final result is', finalResult);
+
+      if (finalResult) {
+        //push rules into array to return
+        actions = actions.concat(trigger.Actions);
+      }
+    }
+  });
+  doc.dataValues.from = doc.dataValues.from.join(';');
+  doc.dataValues.cc = doc.dataValues.cc.join(';');
+  doc.dataValues.to = doc.dataValues.to.join(';');
+  //return actions array
+  return actions;
+}
+
+function checkCondition(condition, doc) {
+  // console.log('CONDITION', condition);
+  // console.log('DOC FIELD', doc[condition.field]);
+  // console.log('trigger value ', trigger[rule.field.value]);
+  // console.log('rule data ', rule.data);
+  var result;
+  switch (condition.operator) {
+    case 'equals':
+      result = (doc[condition.field] === condition.value);
+      break;
+    case 'not_equals':
+      result = (doc[condition.field] !== condition.value);
+      break;
+    case 'greater_or_equal':
+      result = (doc[condition.field] >= Number(condition.value));
+      break;
+    case 'less_or_equal':
+      result = (doc[condition.field] <= Number(condition.value));
+      break;
+    case 'greater':
+      result = (doc[condition.field] > Number(condition.value));
+      break;
+    case 'less':
+      result = (doc[condition.field] < Number(condition.value));
+      break;
+    default:
+  }
+  return result;
+}
+
+module.exports = Util;
index 1238936..2465c50 100644 (file)
@@ -1 +1,7 @@
-var _0x249e=["\x6C\x6F\x64\x61\x73\x68","\x54\x72\x69\x67\x67\x65\x72\x20\x56\x6F\x69\x63\x65\x20\x49\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x2E\x2E","\x6C\x6F\x67","\x65\x78\x70\x6F\x72\x74\x73"];var _=require(_0x249e[0]);function Voice(){console[_0x249e[2]](_0x249e[1])}module[_0x249e[3]]=Voice
\ No newline at end of file
+var _ = require('lodash');
+
+function Voice() {
+  console.log('Trigger Voice Initialization...');
+}
+
+module.exports = Voice;
index 21dcdcf..e265f76 100644 (file)
@@ -1 +1,24 @@
-var _0xa031=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x75\x74\x69\x6C","\x65\x78\x70\x6F\x72\x74\x73","\x70\x61\x74\x68","\x70\x75\x73\x68","\x66\x6F\x72\x45\x61\x63\x68","\x65\x72\x72\x6F\x72\x73","\x20\x6D\x75\x73\x74\x20\x62\x65\x20\x75\x6E\x69\x71\x75\x65","\x6D\x65\x73\x73\x61\x67\x65","\x6A\x6F\x69\x6E","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x49\x6D\x70\x6F\x73\x73\x69\x62\x6C\x65\x20\x74\x6F\x20\x72\x65\x6D\x6F\x76\x65\x20\x25\x73\x20\x25\x73\x20\x62\x65\x63\x61\x75\x73\x65\x20\x6F\x66\x20\x61\x6E\x20\x65\x78\x69\x73\x74\x69\x6E\x67\x20\x61\x73\x73\x6F\x63\x69\x61\x74\x69\x6F\x6E","\x66\x6F\x72\x6D\x61\x74"];_0xa031[0];var util=require(_0xa031[1]);module[_0xa031[2]]={handleUniqueConstraintError:function(_0x734bx2,_0x734bx3){var _0x734bx4=[];_0x734bx3[_0xa031[6]][_0xa031[5]](function(_0x734bx5){switch(_0x734bx5[_0xa031[3]]){default:_0x734bx4[_0xa031[4]](_0x734bx5[_0xa031[3]])}});_0x734bx4[_0xa031[4]](_0xa031[7]);_0x734bx3[_0xa031[8]]=_0x734bx4[_0xa031[9]]();return _0x734bx2[_0xa031[11]](500)[_0xa031[10]](_0x734bx3)},handleForeignKeyConstraintError:function(_0x734bx2,_0x734bx6,_0x734bx7,_0x734bx3){_0x734bx3[_0xa031[8]]=util[_0xa031[13]](_0xa031[12],_0x734bx6,_0x734bx7);return _0x734bx2[_0xa031[11]](500)[_0xa031[10]](_0x734bx3)}}
\ No newline at end of file
+'use strict';
+
+var util = require('util');
+
+module.exports = {
+  handleUniqueConstraintError: function(res, err) {
+    var paths = [];
+
+    err.errors.forEach(function(error) {
+      switch (error.path) {
+        default: paths.push(error.path);
+      }
+    });
+
+    paths.push(' must be unique');
+    err.message = paths.join();
+
+    return res.status(500).send(err);
+  },
+  handleForeignKeyConstraintError: function(res, app, name, err) {
+    err.message = util.format('Impossible to remove %s %s because of an existing association', app, name);
+    return res.status(500).send(err);
+  }
+};
index 53542fc..fe69138 100644 (file)
@@ -1 +1,151 @@
-var _0x663e=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x6D\x6F\x6D\x65\x6E\x74","\x73\x75\x6E","\x6D\x6F\x6E","\x74\x75\x65","\x77\x65\x64","\x74\x68\x75","\x66\x72\x69","\x73\x61\x74","\x6A\x61\x6E","\x66\x65\x62","\x6D\x61\x72","\x61\x70\x72","\x6D\x61\x79","\x6A\x75\x6E","\x6A\x75\x6C","\x61\x75\x67","\x73\x65\x70","\x6F\x63\x74","\x6E\x6F\x76","\x64\x65\x63","\x2C","\x73\x70\x6C\x69\x74","\x2A","\x48\x48\x3A\x6D\x6D","\x66\x6F\x72\x6D\x61\x74","\x2D","\x54\x52\x41\x4E\x47\x45\x20\x4B\x4F","\x6C\x6F\x67","\x64\x61\x79","\x69\x6E\x64\x65\x78\x4F\x66","\x73\x68\x69\x66\x74","\x70\x75\x73\x68","\x73\x6C\x69\x63\x65","\x69\x6E\x63\x6C\x75\x64\x65\x73","\x44\x57\x52\x41\x4E\x47\x45\x20\x4B\x4F","\x64\x61\x74\x65","\x44\x4D\x52\x41\x4E\x47\x45\x20\x4B\x4F","\x6D\x6F\x6E\x74\x68","\x4D\x52\x41\x4E\x47\x45\x20\x4B\x4F","\x49\x4E\x54\x45\x52\x56\x41\x4C\x20\x4F\x4B","\x69\x73\x4F\x62\x6A\x65\x63\x74","\x6C\x65\x6E\x67\x74\x68","\x53\x75\x62\x49\x6E\x74\x65\x72\x76\x61\x6C\x73","\x69\x6E\x74\x65\x72\x76\x61\x6C","\x6F\x66\x66\x73\x65\x74","\x6C\x69\x6D\x69\x74","\x6F\x72\x64\x65\x72","\x74\x79\x70\x65","\x77\x68\x65\x72\x65","\x70\x61\x72\x65\x6E\x74","\x25","\x66\x6F\x72\x45\x61\x63\x68","\x73\x75\x62\x73\x74\x72","\x2F","\x65\x78\x70\x6F\x72\x74\x73","\x2E\x2F\x65\x72\x72\x6F\x72"];_0x663e[0];var _=require(_0x663e[1]);var moment=require(_0x663e[2]);var checkInterval=function(_0x9001x4){var _0x9001x5=[_0x663e[3],_0x663e[4],_0x663e[5],_0x663e[6],_0x663e[7],_0x663e[8],_0x663e[9]];var _0x9001x6=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31];var _0x9001x7=[_0x663e[10],_0x663e[11],_0x663e[12],_0x663e[13],_0x663e[14],_0x663e[15],_0x663e[16],_0x663e[17],_0x663e[18],_0x663e[19],_0x663e[20],_0x663e[21]];var _0x9001x8,_0x9001x9;var _0x9001xa=_0x9001x4[_0x663e[23]](_0x663e[22])[0];var _0x9001xb=_0x9001x4[_0x663e[23]](_0x663e[22])[1];var _0x9001xc=_0x9001x4[_0x663e[23]](_0x663e[22])[2];var _0x9001xd=_0x9001x4[_0x663e[23]](_0x663e[22])[3];if(_0x9001xa!==_0x663e[24]){var _0x9001xe=moment()[_0x663e[26]](_0x663e[25]);var _0x9001xf=_0x9001xa[_0x663e[23]](_0x663e[27])[0];var _0x9001x10=_0x9001xa[_0x663e[23]](_0x663e[27])[1];if((_0x9001xe<_0x9001xf)||(_0x9001xe>_0x9001x10)){console[_0x663e[29]](_0x663e[28]);return false}};if(_0x9001xb!==_0x663e[24]){var _0x9001x11=_0x9001x5[moment()[_0x663e[30]]()];var _0x9001x12=_[_0x663e[31]](_0x9001x5,_0x9001xb[_0x663e[23]](_0x663e[27])[0]);var _0x9001x13=_[_0x663e[31]](_0x9001x5,_0x9001xb[_0x663e[23]](_0x663e[27])[1]);for(_0x9001x8=0;_0x9001x8<_0x9001x12;_0x9001x8++){_0x9001x9=_0x9001x5[_0x663e[32]]();_0x9001x5[_0x663e[33]](_0x9001x9)};_0x9001x12=_[_0x663e[31]](_0x9001x5,_0x9001xb[_0x663e[23]](_0x663e[27])[0]);_0x9001x13=_[_0x663e[31]](_0x9001x5,_0x9001xb[_0x663e[23]](_0x663e[27])[1])+1;_0x9001x5=_0x9001x5[_0x663e[34]](_0x9001x12,_0x9001x13);if(!_[_0x663e[35]](_0x9001x5,_0x9001x11)){console[_0x663e[29]](_0x663e[36]);return false}};if(_0x9001xc!==_0x663e[24]){var _0x9001x14=moment()[_0x663e[37]]();var _0x9001x15=_[_0x663e[31]](_0x9001x6,parseInt(_0x9001xc[_0x663e[23]](_0x663e[27])[0],10));var _0x9001x16=_[_0x663e[31]](_0x9001x6,parseInt(_0x9001xc[_0x663e[23]](_0x663e[27])[1]));for(_0x9001x8=0;_0x9001x8<_0x9001x15;_0x9001x8++){_0x9001x9=_0x9001x6[_0x663e[32]]();_0x9001x6[_0x663e[33]](_0x9001x9)};_0x9001x15=_[_0x663e[31]](_0x9001x6,parseInt(_0x9001xc[_0x663e[23]](_0x663e[27])[0],10));_0x9001x16=_[_0x663e[31]](_0x9001x6,parseInt(_0x9001xc[_0x663e[23]](_0x663e[27])[1]),10)+1;_0x9001x6=_0x9001x6[_0x663e[34]](_0x9001x15,_0x9001x16);if(!_[_0x663e[35]](_0x9001x6,_0x9001x14)){console[_0x663e[29]](_0x663e[38]);return false}};if(_0x9001xd!==_0x663e[24]){var _0x9001x17=_0x9001x7[moment()[_0x663e[39]]()];var _0x9001x18=_[_0x663e[31]](_0x9001x7,_0x9001xd[_0x663e[23]](_0x663e[27])[0]);var _0x9001x19=_[_0x663e[31]](_0x9001x7,_0x9001xd[_0x663e[23]](_0x663e[27])[1]);for(_0x9001x8=0;_0x9001x8<_0x9001x18;_0x9001x8++){_0x9001x9=_0x9001x7[_0x663e[32]]();_0x9001x7[_0x663e[33]](_0x9001x9)};_0x9001x18=_[_0x663e[31]](_0x9001x7,_0x9001xd[_0x663e[23]](_0x663e[27])[0]);_0x9001x19=_[_0x663e[31]](_0x9001x7,_0x9001xd[_0x663e[23]](_0x663e[27])[1])+1;_0x9001x7=_0x9001x7[_0x663e[34]](_0x9001x18,_0x9001x19);if(!_[_0x663e[35]](_0x9001x7,_0x9001x17)){console[_0x663e[29]](_0x663e[40]);return false}};console[_0x663e[29]](_0x663e[41]);return true};var isValidInterval=function(_0x9001x4){if(_[_0x663e[42]](_0x9001x4)){for(var _0x9001x8=0;_0x9001x8<_0x9001x4[_0x663e[44]][_0x663e[43]];_0x9001x8++){if(!checkInterval(_0x9001x4[_0x663e[44]][_0x9001x8][_0x663e[45]])){return false}};return true}else {return checkInterval(_0x9001x4)}};var getQuery=function(_0x9001x1c){var _0x9001x1d={where:{}};if(_0x9001x1c){_[_0x663e[53]](_0x9001x1c,function(_0x9001x1e,_0x9001x1f){switch(_0x9001x1f){case _0x663e[46]:;case _0x663e[47]:_0x9001x1d[_0x9001x1f]=Number(_0x9001x1e);break;case _0x663e[48]:_0x9001x1d[_0x9001x1f]=_0x9001x1e;break;case _0x663e[49]:;case _0x663e[51]:_0x9001x1d[_0x663e[50]][_0x9001x1f]=_0x9001x1e;break;default:_0x9001x1d[_0x663e[50]][_0x9001x1f]={$like:_0x663e[52]+_0x9001x1e+_0x663e[52]}}})};return _0x9001x1d};var stripTrailingSlash=function(_0x9001x21){if(_0x9001x21[_0x663e[54]](-1)===_0x663e[55]){return _0x9001x21[_0x663e[54]](0,_0x9001x21[_0x663e[43]]-1)};return _0x9001x21};module[_0x663e[56]]={getQuery:getQuery,stripTrailingSlash:stripTrailingSlash,isValidInterval:isValidInterval,errorManager:require(_0x663e[57])}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var moment = require('moment');
+
+var checkInterval = function(interval) {
+
+  var daysOfWeek = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'];
+  var daysOfMonth = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31];
+  var months = ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec'];
+  var i, shift;
+
+  var tRange = interval.split(',')[0];
+  var dwRange = interval.split(',')[1];
+  var dmRange = interval.split(',')[2];
+  var mRange = interval.split(',')[3];
+  // TIME RANGE CHECKING
+  if (tRange !== '*') {
+    var time = moment().format("HH:mm");
+    var tFrom = tRange.split('-')[0];
+    var tTo = tRange.split('-')[1];
+
+    if ((time < tFrom) || (time > tTo)) {
+      console.log('TRANGE KO');
+      return false;
+    }
+  }
+  // DAYS OF WEEK RANGE CHECKING
+  if (dwRange !== '*') {
+    var cWeekDay = daysOfWeek[moment().day()];
+    var dwFrom = _.indexOf(daysOfWeek, dwRange.split('-')[0]);
+    var dwTo = _.indexOf(daysOfWeek, dwRange.split('-')[1]);
+
+    for (i = 0; i < dwFrom; i++) {
+      shift = daysOfWeek.shift();
+      daysOfWeek.push(shift);
+    }
+
+    dwFrom = _.indexOf(daysOfWeek, dwRange.split('-')[0]);
+    dwTo = _.indexOf(daysOfWeek, dwRange.split('-')[1]) + 1;
+
+    daysOfWeek = daysOfWeek.slice(dwFrom, dwTo);
+
+    if (!_.includes(daysOfWeek, cWeekDay)) {
+      console.log('DWRANGE KO');
+      return false;
+    }
+  }
+  // DAYS OF MONTH RANGE CHECKING
+  if (dmRange !== '*') {
+    var cMonthDay = moment().date();
+    var dmFrom = _.indexOf(daysOfMonth, parseInt(dmRange.split('-')[0], 10));
+    var dmTo = _.indexOf(daysOfMonth, parseInt(dmRange.split('-')[1]));
+
+    for (i = 0; i < dmFrom; i++) {
+      shift = daysOfMonth.shift();
+      daysOfMonth.push(shift);
+    }
+
+    dmFrom = _.indexOf(daysOfMonth, parseInt(dmRange.split('-')[0], 10));
+    dmTo = _.indexOf(daysOfMonth, parseInt(dmRange.split('-')[1]), 10) + 1;
+
+    daysOfMonth = daysOfMonth.slice(dmFrom, dmTo);
+
+    if (!_.includes(daysOfMonth, cMonthDay)) {
+      console.log('DMRANGE KO');
+      return false;
+    }
+  }
+  // MONTHS RANGE CHECKING
+  if (mRange !== '*') {
+    var cMonth = months[moment().month()];
+    var mFrom = _.indexOf(months, mRange.split('-')[0]);
+    var mTo = _.indexOf(months, mRange.split('-')[1]);
+
+    for (i = 0; i < mFrom; i++) {
+      shift = months.shift();
+      months.push(shift);
+    }
+
+    mFrom = _.indexOf(months, mRange.split('-')[0]);
+    mTo = _.indexOf(months, mRange.split('-')[1]) + 1;
+
+    months = months.slice(mFrom, mTo);
+
+    if (!_.includes(months, cMonth)) {
+      console.log('MRANGE KO');
+      return false;
+    }
+  }
+
+  console.log('INTERVAL OK');
+
+  return true;
+}
+
+var isValidInterval = function(interval) {
+  if (_.isObject(interval)) {
+    for (var i = 0; i < interval.SubIntervals.length; i++) {
+      if (!checkInterval(interval.SubIntervals[i].interval)) {
+        return false;
+      }
+    }
+    return true;
+  } else {
+    return checkInterval(interval);
+  }
+}
+
+var getQuery = function(query) {
+  var _query = {
+    where: {}
+  };
+  if (query) {
+    _.forEach(query, function(value, key) {
+      switch (key) {
+        case 'offset':
+        case 'limit':
+          _query[key] = Number(value);
+          break;
+        case 'order':
+          _query[key] = value;
+          break;
+        case 'type':
+        case 'parent':
+          _query.where[key] = value;
+          break;
+        default:
+          _query.where[key] = {
+            $like: '%' + value + '%'
+          };
+      }
+    });
+  }
+
+  return _query;
+}
+
+var stripTrailingSlash = function(str) {
+  if (str.substr(-1) === '/') {
+    return str.substr(0, str.length - 1);
+  }
+  return str;
+}
+
+module.exports = {
+  getQuery: getQuery,
+  stripTrailingSlash: stripTrailingSlash,
+  isValidInterval: isValidInterval,
+  errorManager: require('./error')
+};
index eef35c4..4410805 100644 (file)
@@ -1 +1,33 @@
-var _0x5575=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x75\x73\x65\x72\x73","\x74\x65\x73\x74\x41\x74\x74\x72","\x53\x54\x52\x49\x4E\x47","\x61\x64\x64\x43\x6F\x6C\x75\x6D\x6E","\x72\x65\x6D\x6F\x76\x65\x43\x6F\x6C\x75\x6D\x6E"];_0x5575[0];module[_0x5575[1]]={up:function(_0xe993x1,_0xe993x2){return _0xe993x1[_0x5575[5]](_0x5575[2],_0x5575[3],{type:_0xe993x2[_0x5575[4]]})},down:function(_0xe993x1,_0xe993x2){return _0xe993x1[_0x5575[6]](_0x5575[2],_0x5575[3])}}
\ No newline at end of file
+'use strict';
+
+module.exports = {
+  up: function(queryInterface, Sequelize) {
+    /*
+      Add altering commands here.
+      Return a promise to correctly handle asynchronicity.
+
+      Example:
+      return queryInterface.createTable('users', { id: Sequelize.INTEGER });
+    */
+    return queryInterface
+      .addColumn(
+        'users',
+        'testAttr', {
+          type: Sequelize.STRING
+        }
+      );
+  },
+
+  down: function(queryInterface, Sequelize) {
+    /*
+      Add reverting commands here.
+      Return a promise to correctly handle asynchronicity.
+
+      Example:
+      return queryInterface.dropTable('users');
+    */
+
+    return queryInterface
+      .removeColumn('users', 'testAttr');
+  }
+};
index 04e4886..3e22553 100644 (file)
@@ -1 +1,32 @@
-var _0xb0c1=["\x65\x78\x70\x6F\x72\x74\x73","\x41\x63\x74\x69\x6F\x6E","\x53\x54\x52\x49\x4E\x47","\x61\x63\x74\x69\x6F\x6E\x73","\x64\x65\x66\x69\x6E\x65"];module[_0xb0c1[0]]=function(_0x2310x1,_0x2310x2){var _0x2310x3=_0x2310x1[_0xb0c1[4]](_0xb0c1[1],{name:{type:_0x2310x2[_0xb0c1[2]]},data1:{type:_0x2310x2[_0xb0c1[2]]},data2:{type:_0x2310x2[_0xb0c1[2]]},data3:{type:_0x2310x2[_0xb0c1[2]]},data4:{type:_0x2310x2[_0xb0c1[2]]},data5:{type:_0x2310x2[_0xb0c1[2]]}},{tableName:_0xb0c1[3],associate:function(_0x2310x4){}});return _0x2310x3}
\ No newline at end of file
+/**
+ * Action Model
+ */
+
+module.exports = function (sequelize, DataTypes) {
+
+       var Action = sequelize.define('Action', {
+               name: {
+                       type: DataTypes.STRING
+               },
+               data1: {
+                       type: DataTypes.STRING
+               },
+               data2: {
+                       type: DataTypes.STRING
+               },
+               data3: {
+                       type: DataTypes.STRING
+               },
+               data4: {
+                       type: DataTypes.STRING
+               },
+               data5: {
+                       type: DataTypes.STRING
+               }
+       }, {
+               tableName: 'actions',
+               associate: function (models) {}
+       });
+
+       return Action;
+};
index 2b405bc..8cc071d 100644 (file)
@@ -1 +1,19 @@
-var _0x56cb=["\x63\x72\x79\x70\x74\x6F","\x65\x78\x70\x6F\x72\x74\x73","\x41\x73\x74\x65\x72\x69\x73\x6B\x4D\x61\x6E\x61\x67\x65\x72","\x53\x54\x52\x49\x4E\x47","\x49\x4E\x54\x45\x47\x45\x52","\x61\x73\x74\x65\x72\x69\x73\x6B\x5F\x6D\x61\x6E\x61\x67\x65\x72","\x64\x65\x66\x69\x6E\x65"];var crypto=require(_0x56cb[0]);module[_0x56cb[1]]=function(_0x3a22x2,_0x3a22x3){var _0x3a22x4=_0x3a22x2[_0x56cb[6]](_0x56cb[2],{address:_0x3a22x3[_0x56cb[3]],port:_0x3a22x3[_0x56cb[4]],username:_0x3a22x3[_0x56cb[3]],password:_0x3a22x3[_0x56cb[3]]},{tableName:_0x56cb[5]});return _0x3a22x4}
\ No newline at end of file
+/**
+ * Asterisk Manager Model
+ */
+
+var crypto = require('crypto');
+
+module.exports = function(sequelize, DataTypes) {
+
+  var AsteriskManager = sequelize.define('AsteriskManager', {
+    address: DataTypes.STRING,
+    port: DataTypes.INTEGER,
+    username: DataTypes.STRING,
+    password: DataTypes.STRING
+  }, {
+    tableName: 'asterisk_manager'
+  });
+
+  return AsteriskManager;
+};
index 024b12c..539add1 100644 (file)
@@ -1 +1,24 @@
-var _0x4e93=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x41\x6D\x69","\x53\x54\x52\x49\x4E\x47","\x54\x45\x58\x54","\x61\x73\x74\x65\x72\x69\x73\x6B\x5F\x6D\x61\x6E\x61\x67\x65\x72\x5F\x69\x6E\x74\x65\x72\x66\x61\x63\x65","\x62\x65\x6C\x6F\x6E\x67\x73\x54\x6F","\x64\x65\x66\x69\x6E\x65"];_0x4e93[0];module[_0x4e93[1]]=function(_0x646fx1,_0x646fx2){var _0x646fx3=_0x646fx1[_0x4e93[7]](_0x4e93[2],{actionid:_0x646fx2[_0x4e93[3]],action:_0x646fx2[_0x4e93[3]],response:_0x646fx2[_0x4e93[3]],message:_0x646fx2[_0x4e93[3]],data:_0x646fx2[_0x4e93[4]]},{tableName:_0x4e93[5],associate:function(_0x646fx4){_0x646fx3[_0x4e93[6]](_0x646fx4.User)}});return _0x646fx3}
\ No newline at end of file
+'use strict';
+
+/**
+ * Asterisk Manager Interface Model
+ */
+
+module.exports = function(sequelize, DataTypes) {
+
+  var Ami = sequelize.define('Ami', {
+    actionid: DataTypes.STRING,
+    action: DataTypes.STRING,
+    response: DataTypes.STRING,
+    message: DataTypes.STRING,
+    data: DataTypes.TEXT
+  }, {
+    tableName: 'asterisk_manager_interface',
+    associate: function(models) {
+      // USER RELATIONS
+      Ami.belongsTo(models.User);
+    }
+  });
+
+  return Ami;
+};
index bf14a25..0719b90 100644 (file)
@@ -1 +1,15 @@
-var _0x413e=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x41\x75\x74\x6F\x64\x69\x61\x6C\x65\x72\x43\x6F\x6E\x74\x61\x63\x74","\x53\x54\x52\x49\x4E\x47","\x61\x75\x74\x6F\x64\x69\x61\x6C\x65\x72\x5F\x63\x6F\x6E\x74\x61\x63\x74\x73","\x64\x65\x66\x69\x6E\x65"];_0x413e[0];module[_0x413e[1]]=function(_0xe496x1,_0xe496x2){var _0xe496x3=_0xe496x1[_0x413e[5]](_0x413e[2],{status:{type:_0xe496x2[_0x413e[3]]}},{tableName:_0x413e[4]});return _0xe496x3}
\ No newline at end of file
+'use strict';
+
+module.exports = function(sequelize, DataTypes) {
+
+  var AutodialerContact = sequelize.define('AutodialerContact', {
+    status: {
+      type: DataTypes.STRING
+    }
+  }, {
+    tableName: 'autodialer_contacts'
+  });
+
+  return AutodialerContact;
+
+};
index f914548..7ddc225 100644 (file)
@@ -1 +1,53 @@
-var _0xe21c=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x41\x75\x74\x6F\x64\x69\x61\x6C\x65\x72\x50\x72\x6F\x63\x65\x73\x73","\x53\x54\x52\x49\x4E\x47","\x49\x4E\x54\x45\x47\x45\x52","\x42\x4F\x4F\x4C\x45\x41\x4E","\x61\x75\x74\x6F\x64\x69\x61\x6C\x65\x72\x5F\x70\x72\x6F\x63\x65\x73\x73\x65\x73","\x41\x75\x74\x6F\x64\x69\x61\x6C\x65\x72\x43\x6F\x6E\x74\x61\x63\x74","\x62\x65\x6C\x6F\x6E\x67\x73\x54\x6F\x4D\x61\x6E\x79","\x64\x65\x66\x69\x6E\x65"];_0xe21c[0];module[_0xe21c[1]]=function(_0x3a7cx1,_0x3a7cx2){var _0x3a7cx3=_0x3a7cx1[_0xe21c[9]](_0xe21c[2],{name:{type:_0x3a7cx2[_0xe21c[3]],unique:true},description:{type:_0x3a7cx2[_0xe21c[3]]},context:{type:_0x3a7cx2[_0xe21c[3]]},extension:{type:_0x3a7cx2[_0xe21c[3]]},priority:{type:_0x3a7cx2[_0xe21c[4]]},callerid:{type:_0x3a7cx2[_0xe21c[3]]},waittime:{type:_0x3a7cx2[_0xe21c[4]]},maxretry:{type:_0x3a7cx2[_0xe21c[4]]},retrytime:{type:_0x3a7cx2[_0xe21c[4]]},prefix:{type:_0x3a7cx2[_0xe21c[3]]},maxcall:{type:_0x3a7cx2[_0xe21c[4]]},enable:{type:_0x3a7cx2[_0xe21c[5]],defaultValue:true}},{tableName:_0xe21c[6],associate:function(_0x3a7cx4){_0x3a7cx3[_0xe21c[8]](_0x3a7cx4.Contact,{through:_0x3a7cx4[_0xe21c[7]]})}});return _0x3a7cx3}
\ No newline at end of file
+'use strict';
+
+module.exports = function(sequelize, DataTypes) {
+
+  var AutodialerProcess = sequelize.define('AutodialerProcess', {
+    name: {
+      type: DataTypes.STRING,
+      unique: true
+    },
+    description: {
+      type: DataTypes.STRING,
+    },
+    context: {
+        type: DataTypes.STRING,
+    },
+    extension: {
+        type: DataTypes.STRING,
+    },
+    priority: {
+        type: DataTypes.INTEGER,
+    },
+    callerid: {
+        type: DataTypes.STRING,
+    },
+    waittime: {
+        type: DataTypes.INTEGER,
+    },
+    maxretry: {
+        type: DataTypes.INTEGER,
+    },
+    retrytime: {
+        type: DataTypes.INTEGER,
+    },
+    prefix: {
+        type: DataTypes.STRING,
+    },
+    maxcall: {
+        type: DataTypes.INTEGER,
+    },
+    enable: {
+    type: DataTypes.BOOLEAN,
+    defaultValue: true
+    }
+  }, {
+    tableName: 'autodialer_processes',
+    associate: function(models) {
+        AutodialerProcess.belongsToMany(models.Contact, { through: models.AutodialerContact })
+    }
+  });
+
+  return AutodialerProcess;
+
+};
index 24f6b12..7ee4308 100644 (file)
@@ -1 +1,64 @@
-var _0x83cb=["\x65\x78\x70\x6F\x72\x74\x73","\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E","\x53\x54\x52\x49\x4E\x47","\x42\x4F\x4F\x4C\x45\x41\x4E","\x49\x4E\x54\x45\x47\x45\x52","\x61\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x73","\x41\x6C\x6C","\x4F\x6E\x65\x41\x6C\x6C","\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x41\x6C\x6C\x49\x64","\x63\x61\x73\x63\x61\x64\x65","\x68\x61\x73\x4D\x61\x6E\x79","\x41\x6E\x79","\x4F\x6E\x65\x41\x6E\x79","\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x41\x6E\x79\x49\x64","\x41\x63\x74\x69\x6F\x6E\x73","\x61\x6C\x6C","\x54\x6F\x6F\x6C\x73\x43\x6F\x6E\x64\x69\x74\x69\x6F\x6E","\x66\x69\x65\x6C\x64","\x6F\x70\x65\x72\x61\x74\x6F\x72","\x76\x61\x6C\x75\x65","\x54\x6F\x6F\x6C\x73\x41\x63\x74\x69\x6F\x6E","\x61\x63\x74\x69\x6F\x6E","\x64\x61\x74\x61\x31","\x64\x61\x74\x61\x32","\x64\x61\x74\x61\x33","\x64\x61\x74\x61\x34","\x64\x61\x74\x61\x35","\x61\x64\x64\x53\x63\x6F\x70\x65","\x64\x65\x66\x69\x6E\x65"];module[_0x83cb[0]]=function(_0x7a33x1,_0x7a33x2){var _0x7a33x3=_0x7a33x1[_0x83cb[28]](_0x83cb[1],{name:_0x7a33x2[_0x83cb[2]],channel:_0x7a33x2[_0x83cb[2]],description:_0x7a33x2[_0x83cb[2]],status:{type:_0x7a33x2[_0x83cb[3]],defaultValue:false},timeout:{type:_0x7a33x2[_0x83cb[4]],defaultValue:10}},{tableName:_0x83cb[5],associate:function(_0x7a33x4){_0x7a33x3[_0x83cb[10]](_0x7a33x4.ToolsCondition,{as:{plural:_0x83cb[6],singular:_0x83cb[7]},foreignKey:_0x83cb[8],onDelete:_0x83cb[9],hooks:true});_0x7a33x3[_0x83cb[10]](_0x7a33x4.ToolsCondition,{as:{plural:_0x83cb[11],singular:_0x83cb[12]},foreignKey:_0x83cb[13],onDelete:_0x83cb[9],hooks:true});_0x7a33x3[_0x83cb[10]](_0x7a33x4.ToolsAction,{as:_0x83cb[14],onDelete:_0x83cb[9],hooks:true});_0x7a33x3[_0x83cb[27]](_0x83cb[15],{include:[{model:_0x7a33x4[_0x83cb[16]],as:_0x83cb[6],attributes:[_0x83cb[17],_0x83cb[18],_0x83cb[19]]},{model:_0x7a33x4[_0x83cb[16]],as:_0x83cb[11],attributes:[_0x83cb[17],_0x83cb[18],_0x83cb[19]]},{model:_0x7a33x4[_0x83cb[20]],as:_0x83cb[14],attributes:[_0x83cb[21],_0x83cb[22],_0x83cb[23],_0x83cb[24],_0x83cb[25],_0x83cb[26]]}]})}});return _0x7a33x3}
\ No newline at end of file
+/**
+ * Automation Model
+ */
+
+module.exports = function(sequelize, DataTypes) {
+
+  var Automation = sequelize.define('Automation', {
+    name: DataTypes.STRING,
+    channel: DataTypes.STRING,
+    description: DataTypes.STRING,
+    status: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: false
+    },
+    timeout: {
+      type: DataTypes.INTEGER,
+      defaultValue: 10
+    }
+  }, {
+    tableName: 'automations',
+    associate: function(models) {
+      Automation.hasMany(models.ToolsCondition, {
+        as: {
+          plural: 'All',
+          singular: 'OneAll'
+        },
+        foreignKey: 'AutomationAllId',
+        onDelete: 'cascade',
+        hooks: true
+      });
+      Automation.hasMany(models.ToolsCondition, {
+        as: {
+          plural: 'Any',
+          singular: 'OneAny'
+        },
+        foreignKey: 'AutomationAnyId',
+        onDelete: 'cascade',
+        hooks: true
+      });
+      Automation.hasMany(models.ToolsAction, {
+        as: 'Actions',
+        onDelete: 'cascade',
+        hooks: true
+      });
+      Automation.addScope('all', {
+        include: [{
+          model: models.ToolsCondition,
+          as: 'All',
+          attributes: ['field', 'operator', 'value']
+        }, {
+          model: models.ToolsCondition,
+          as: 'Any',
+          attributes: ['field', 'operator', 'value']
+        }, {
+          model: models.ToolsAction,
+          as: 'Actions',
+          attributes: ['action', 'data1', 'data2', 'data3', 'data4', 'data5']
+        }]
+      });
+    }
+  });
+
+  return Automation;
+};
index 7c7ba1e..e4dd86f 100644 (file)
@@ -1 +1,11 @@
-var _0xda8b=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x43\x61\x6E\x6E\x65\x64\x41\x6E\x73\x77\x65\x72","\x53\x54\x52\x49\x4E\x47","\x54\x45\x58\x54","\x63\x61\x6E\x6E\x65\x64\x5F\x61\x6E\x73\x77\x65\x72\x73","\x64\x65\x66\x69\x6E\x65"];_0xda8b[0];module[_0xda8b[1]]=function(_0x789dx1,_0x789dx2){return _0x789dx1[_0xda8b[6]](_0xda8b[2],{key:_0x789dx2[_0xda8b[3]],value:_0x789dx2[_0xda8b[4]],description:_0x789dx2[_0xda8b[3]]},{tableName:_0xda8b[5]})}
\ No newline at end of file
+'use strict';
+
+module.exports = function(sequelize, DataTypes) {
+  return sequelize.define('CannedAnswer', {
+    key: DataTypes.STRING,
+    value: DataTypes.TEXT,
+    description: DataTypes.STRING
+  }, {
+    tableName: 'canned_answers'
+  });
+};
index dc21aaa..e1c6d79 100644 (file)
@@ -1 +1,46 @@
-var _0x5f01=["\x65\x78\x70\x6F\x72\x74\x73","\x43\x68\x61\x6E\x6E\x65\x6C","\x53\x54\x52\x49\x4E\x47","\x6E\x61\x6D\x65\x20\x61\x6C\x72\x65\x61\x64\x79\x20\x75\x73\x65\x64","\x64\x6F\x6E\x65","\x66\x69\x6E\x64","\x63\x68\x61\x6E\x6E\x65\x6C\x73","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x63\x68\x61\x6E\x6E\x65\x6C\x73","\x62\x65\x6C\x6F\x6E\x67\x73\x54\x6F\x4D\x61\x6E\x79","\x64\x65\x66\x69\x6E\x65"];module[_0x5f01[0]]=function(_0x6607x1,_0x6607x2){var _0x6607x3=_0x6607x1[_0x5f01[9]](_0x5f01[1],{name:{type:_0x6607x2[_0x5f01[2]],validate:{isUnique:function(_0x6607x4,_0x6607x5){_0x6607x3[_0x5f01[5]]({where:{name:_0x6607x4}})[_0x5f01[4]](function(_0x6607x6,_0x6607x7){if(_0x6607x6){_0x6607x5(_0x6607x6)};if(_0x6607x7){_0x6607x5({message:_0x5f01[3]})};_0x6607x5()})}}},title:_0x6607x2[_0x5f01[2]],link:_0x6607x2[_0x5f01[2]],icon:_0x6607x2[_0x5f01[2]],position:_0x6607x2[_0x5f01[2]]},{tableName:_0x5f01[6],associate:function(_0x6607x8){_0x6607x3[_0x5f01[8]](_0x6607x8.User,{through:_0x5f01[7]})}});return _0x6607x3}
\ No newline at end of file
+/**
+ * Channel Model
+ */
+
+module.exports = function(sequelize, DataTypes) {
+
+  var Channel = sequelize.define('Channel', {
+    name: {
+      type: DataTypes.STRING,
+      validate: {
+        isUnique: function(name, next) {
+          Channel
+            .find({
+              where: {
+                name: name
+              }
+            })
+            .done(function(error, channel) {
+              if (error)
+                next(error);
+
+              if (channel)
+                next({
+                  message: 'name already used'
+                });
+
+              next();
+            });
+        }
+      }
+    },
+    title: DataTypes.STRING,
+    link: DataTypes.STRING,
+    icon: DataTypes.STRING,
+    position: DataTypes.STRING
+  }, {
+    tableName: 'channels',
+    associate: function(models) {
+      Channel.belongsToMany(models.User, {
+        through: 'user_has_channels'
+      });
+    }
+  });
+
+  return Channel;
+};
index e5f1084..39b47de 100644 (file)
@@ -1 +1,35 @@
-var _0xb1eb=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x43\x68\x61\x6E\x53\x70\x79","\x53\x54\x52\x49\x4E\x47","\x42\x4F\x4F\x4C\x45\x41\x4E","\x63\x68\x61\x6E\x73\x70\x79","\x53\x70\x69\x65\x64\x41\x67\x65\x6E\x74\x73","\x63\x61\x73\x63\x61\x64\x65","\x68\x61\x73\x4D\x61\x6E\x79","\x64\x65\x66\x69\x6E\x65"];_0xb1eb[0];module[_0xb1eb[1]]=function(_0x222fx1,_0x222fx2){var _0x222fx3=_0x222fx1[_0xb1eb[9]](_0xb1eb[2],{name:_0x222fx2[_0xb1eb[3]],prefix:{type:_0x222fx2[_0xb1eb[3]],unique:true,allowNull:false,validate:{notEmpty:true}},options:_0x222fx2[_0xb1eb[3]],auth:{type:_0x222fx2[_0xb1eb[4]],defaultValue:false},password:_0x222fx2[_0xb1eb[3]],description:_0x222fx2[_0xb1eb[3]]},{tableName:_0xb1eb[5],associate:function(_0x222fx4){_0x222fx3[_0xb1eb[8]](_0x222fx4.VoiceExtension,{as:_0xb1eb[6],onDelete:_0xb1eb[7],hooks:true})}});return _0x222fx3}
\ No newline at end of file
+'use strict';
+
+module.exports = function(sequelize, DataTypes) {
+
+  var ChanSpy = sequelize.define('ChanSpy', {
+    name: DataTypes.STRING,
+    prefix: {
+      type: DataTypes.STRING,
+      unique: true,
+      allowNull: false,
+      validate: {
+        notEmpty: true,
+      },
+    },
+    options: DataTypes.STRING,
+    auth: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: false
+    },
+    password: DataTypes.STRING,
+    description: DataTypes.STRING
+  }, {
+    tableName: 'chanspy',
+    associate: function(models) {
+      ChanSpy.hasMany(models.VoiceExtension, {
+        as: 'SpiedAgents',
+        onDelete: 'cascade',
+        hooks: true
+      });
+    }
+  });
+
+  return ChanSpy;
+
+};
index ccfa29e..e0789ff 100644 (file)
@@ -1 +1,30 @@
-var _0x15ac=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x43\x68\x61\x74\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x71\x75\x65\x75\x65","\x61\x67\x65\x6E\x74","\x49\x4E\x54\x45\x47\x45\x52","\x53\x54\x52\x49\x4E\x47","\x63\x68\x61\x74\x5F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x62\x65\x6C\x6F\x6E\x67\x73\x54\x6F","\x64\x65\x66\x69\x6E\x65"];_0x15ac[0];module[_0x15ac[1]]=function(_0x1f72x1,_0x1f72x2){var _0x1f72x3=_0x1f72x1[_0x15ac[9]](_0x15ac[2],{app:{type:_0x1f72x2.ENUM(_0x15ac[3],_0x15ac[4])},priority:{type:_0x1f72x2[_0x15ac[5]]},timeout:{type:_0x1f72x2[_0x15ac[5]]},interval:{type:_0x1f72x2[_0x15ac[6]]}},{tableName:_0x15ac[7],associate:function(_0x1f72x4){_0x1f72x3[_0x15ac[8]](_0x1f72x4.ChatWebsite);_0x1f72x3[_0x15ac[8]](_0x1f72x4.Interval);_0x1f72x3[_0x15ac[8]](_0x1f72x4.ChatQueue);_0x1f72x3[_0x15ac[8]](_0x1f72x4.User)}});return _0x1f72x3}
\ No newline at end of file
+'use strict';
+
+module.exports = function(sequelize, DataTypes) {
+
+  var ChatApplication = sequelize.define('ChatApplication', {
+    app: {
+      type: DataTypes.ENUM('queue', 'agent')
+    },
+    priority: {
+      type: DataTypes.INTEGER
+    },
+    timeout: {
+      type: DataTypes.INTEGER
+    },
+    interval: {
+      type: DataTypes.STRING
+    }
+  }, {
+    tableName: 'chat_applications',
+    associate: function(models) {
+      // hasMany relations
+      ChatApplication.belongsTo(models.ChatWebsite);
+      ChatApplication.belongsTo(models.Interval);
+      ChatApplication.belongsTo(models.ChatQueue);
+      ChatApplication.belongsTo(models.User);
+    }
+  });
+
+  return ChatApplication;
+};
index 2fb56b5..74dcc2c 100644 (file)
@@ -1 +1,22 @@
-var _0x6117=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x43\x68\x61\x74\x45\x6E\x71\x75\x69\x72\x79","\x53\x54\x52\x49\x4E\x47","\x54\x45\x58\x54","\x42\x4F\x4F\x4C\x45\x41\x4E","\x63\x68\x61\x74\x5F\x65\x6E\x71\x75\x69\x72\x69\x65\x73","\x62\x65\x6C\x6F\x6E\x67\x73\x54\x6F","\x64\x65\x66\x69\x6E\x65"];_0x6117[0];module[_0x6117[1]]=function(_0x2c6cx1,_0x2c6cx2){var _0x2c6cx3=_0x2c6cx1[_0x6117[8]](_0x6117[2],{username:_0x2c6cx2[_0x6117[3]],email:_0x2c6cx2[_0x6117[3]],text:_0x2c6cx2[_0x6117[4]],read:{type:_0x2c6cx2[_0x6117[5]],defaultValue:false}},{tableName:_0x6117[6],associate:function(_0x2c6cx4){_0x2c6cx3[_0x6117[7]](_0x2c6cx4.ChatWebsite);_0x2c6cx3[_0x6117[7]](_0x2c6cx4.ChatVisitor)}});return _0x2c6cx3}
\ No newline at end of file
+'use strict';
+
+module.exports = function(sequelize, DataTypes) {
+
+  var ChatEnquiry = sequelize.define('ChatEnquiry', {
+    username: DataTypes.STRING,
+    email: DataTypes.STRING,
+    text: DataTypes.TEXT,
+    read: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: false
+    }
+  }, {
+    tableName: 'chat_enquiries',
+    associate: function(models) {
+      ChatEnquiry.belongsTo(models.ChatWebsite);
+      ChatEnquiry.belongsTo(models.ChatVisitor);
+    }
+  });
+
+  return ChatEnquiry;
+};
index ddec5bd..4b6dff4 100644 (file)
@@ -1 +1,25 @@
-var _0x2417=["\x63\x72\x79\x70\x74\x6F","\x65\x78\x70\x6F\x72\x74\x73","\x43\x68\x61\x74\x4D\x65\x73\x73\x61\x67\x65","\x54\x45\x58\x54","\x63\x68\x61\x74\x5F\x6D\x65\x73\x73\x61\x67\x65\x73","\x62\x65\x6C\x6F\x6E\x67\x73\x54\x6F","\x64\x65\x66\x69\x6E\x65"];var crypto=require(_0x2417[0]);module[_0x2417[1]]=function(_0x3eb0x2,_0x3eb0x3){var _0x3eb0x4=_0x3eb0x2[_0x2417[6]](_0x2417[2],{body:{type:_0x3eb0x3[_0x2417[3]],notNull:true,notEmpty:true}},{tableName:_0x2417[4],associate:function(_0x3eb0x5){_0x3eb0x4[_0x2417[5]](_0x3eb0x5.ChatRoom);_0x3eb0x4[_0x2417[5]](_0x3eb0x5.ChatVisitor);_0x3eb0x4[_0x2417[5]](_0x3eb0x5.User)}});return _0x3eb0x4}
\ No newline at end of file
+/**
+ * Chat Website Model
+ */
+
+var crypto = require('crypto');
+
+module.exports = function (sequelize, DataTypes) {
+
+       var ChatMessage = sequelize.define('ChatMessage', {
+               body: {
+                       type: DataTypes.TEXT,
+                       notNull: true,
+                       notEmpty: true,
+               }
+       }, {
+               tableName: 'chat_messages',
+               associate: function (models) {
+                       ChatMessage.belongsTo(models.ChatRoom);
+                       ChatMessage.belongsTo(models.ChatVisitor);
+                       ChatMessage.belongsTo(models.User);
+               }
+       });
+
+       return ChatMessage;
+};
index 6951291..9ec80af 100644 (file)
@@ -1 +1,18 @@
-var _0x4f2a=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x43\x68\x61\x74\x50\x72\x6F\x61\x63\x74\x69\x76\x65\x41\x63\x74\x69\x6F\x6E","\x53\x54\x52\x49\x4E\x47","\x6D\x6F\x75\x73\x65\x4F\x76\x65\x72","\x74\x69\x6D\x65\x6F\x75\x74","\x49\x4E\x54\x45\x47\x45\x52","\x63\x68\x61\x74\x5F\x70\x72\x6F\x61\x63\x74\x69\x76\x65\x5F\x61\x63\x74\x69\x6F\x6E\x73","\x62\x65\x6C\x6F\x6E\x67\x73\x54\x6F","\x64\x65\x66\x69\x6E\x65"];_0x4f2a[0];module[_0x4f2a[1]]=function(_0x3dc2x1,_0x3dc2x2){return _0x3dc2x1[_0x4f2a[9]](_0x4f2a[2],{name:_0x3dc2x2[_0x4f2a[3]],type:{type:_0x3dc2x2.ENUM(_0x4f2a[4],_0x4f2a[5]),defaultValue:_0x4f2a[4]},selector:_0x3dc2x2[_0x4f2a[3]],timeout:_0x3dc2x2[_0x4f2a[6]]},{tableName:_0x4f2a[7],associate:function(_0x3dc2x3){_0x3dc2x3[_0x4f2a[2]][_0x4f2a[8]](_0x3dc2x3.ChatWebsite)}})}
\ No newline at end of file
+'use strict';
+
+module.exports = function(sequelize, DataTypes) {
+  return sequelize.define('ChatProactiveAction', {
+    name: DataTypes.STRING,
+    type: {
+      type: DataTypes.ENUM('mouseOver', 'timeout'),
+      defaultValue: 'mouseOver'
+    },
+    selector: DataTypes.STRING,
+    timeout: DataTypes.INTEGER
+  }, {
+    tableName: 'chat_proactive_actions',
+    associate: function(models) {
+      models.ChatProactiveAction.belongsTo(models.ChatWebsite);
+    }
+  });
+};
index 9f83013..cac04e9 100644 (file)
@@ -1 +1,42 @@
-var _0xc1e6=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x43\x68\x61\x74\x51\x75\x65\x75\x65","\x53\x54\x52\x49\x4E\x47","\x49\x4E\x54\x45\x47\x45\x52","\x72\x72\x6D\x65\x6D\x6F\x72\x79","\x62\x65\x65\x70\x61\x6C\x6C","\x63\x68\x61\x74\x5F\x71\x75\x65\x75\x65\x73","\x55\x73\x65\x72\x48\x61\x73\x43\x68\x61\x74\x51\x75\x65\x75\x65","\x62\x65\x6C\x6F\x6E\x67\x73\x54\x6F\x4D\x61\x6E\x79","\x64\x65\x66\x61\x75\x6C\x74","\x55\x73\x65\x72","\x69\x64","\x6E\x61\x6D\x65","\x66\x75\x6C\x6C\x6E\x61\x6D\x65","\x65\x6D\x61\x69\x6C","\x6F\x6E\x6C\x69\x6E\x65","\x6C\x61\x73\x74\x4C\x6F\x67\x69\x6E\x41\x74","\x63\x68\x61\x74\x50\x61\x75\x73\x65","\x70\x61\x75\x73\x65\x54\x79\x70\x65","\x61\x64\x64\x53\x63\x6F\x70\x65","\x64\x65\x66\x69\x6E\x65"];_0xc1e6[0];module[_0xc1e6[1]]=function(_0x777bx1,_0x777bx2){var _0x777bx3=_0x777bx1[_0xc1e6[21]](_0xc1e6[2],{name:{type:_0x777bx2[_0xc1e6[3]],unique:true,allowNull:false,validate:{notEmpty:true}},description:{type:_0x777bx2[_0xc1e6[3]]},timeout:{type:_0x777bx2[_0xc1e6[4]]},strategy:{type:_0x777bx2.ENUM(_0xc1e6[5],_0xc1e6[6])}},{tableName:_0xc1e6[7],associate:function(_0x777bx4){_0x777bx3[_0xc1e6[9]](_0x777bx4.User,{through:_0x777bx4[_0xc1e6[8]]});_0x777bx3[_0xc1e6[20]](_0xc1e6[10],{include:[{model:_0x777bx4[_0xc1e6[11]],attributes:[_0xc1e6[12],_0xc1e6[13],_0xc1e6[14],_0xc1e6[15],_0xc1e6[16],_0xc1e6[17],_0xc1e6[18],_0xc1e6[19]]}]})}});return _0x777bx3}
\ No newline at end of file
+'use strict';
+
+module.exports = function(sequelize, DataTypes) {
+
+  var ChatQueue = sequelize.define('ChatQueue', {
+    name: {
+      type: DataTypes.STRING,
+      unique: true,
+      allowNull: false,
+      validate: {
+        notEmpty: true,
+      }
+    },
+    description: {
+      type: DataTypes.STRING,
+    },
+    timeout: {
+      type: DataTypes.INTEGER,
+    },
+    strategy: {
+      type: DataTypes.ENUM('rrmemory', 'beepall')
+    }
+  }, {
+    tableName: 'chat_queues',
+    associate: function(models) {
+      // hasMany relations
+      ChatQueue.belongsToMany(models.User, {
+        through: models.UserHasChatQueue
+      });
+
+      //SCOPES
+      ChatQueue.addScope('default', {
+        include: [{
+          model: models.User,
+          attributes: ['id', 'name', 'fullname', 'email', 'online', 'lastLoginAt', 'chatPause', 'pauseType']
+        }]
+      });
+    }
+  });
+
+  return ChatQueue;
+};
index ad5820d..6487c71 100644 (file)
@@ -1 +1,38 @@
-var _0x4fe9=["\x63\x72\x79\x70\x74\x6F","\x65\x78\x70\x6F\x72\x74\x73","\x43\x68\x61\x74\x52\x6F\x6F\x6D","\x69\x6E\x74\x65\x72\x6E\x61\x6C","\x65\x78\x74\x65\x72\x6E\x61\x6C","\x53\x54\x52\x49\x4E\x47","\x74\x6F\x6B\x65\x6E","\x4F\x50\x45\x4E","\x43\x4C\x4F\x53\x45\x44","\x67\x6F\x6F\x64","\x62\x61\x64","\x54\x45\x58\x54","\x49\x4E\x54\x45\x47\x45\x52","\x63\x68\x61\x74\x5F\x72\x6F\x6F\x6D\x73","\x68\x61\x73\x4D\x61\x6E\x79","\x62\x65\x6C\x6F\x6E\x67\x73\x54\x6F","\x55\x73\x65\x72\x48\x61\x73\x43\x68\x61\x74\x52\x6F\x6F\x6D","\x62\x65\x6C\x6F\x6E\x67\x73\x54\x6F\x4D\x61\x6E\x79","\x64\x65\x66\x69\x6E\x65"];var crypto=require(_0x4fe9[0]);module[_0x4fe9[1]]=function(_0xebbex2,_0xebbex3){var _0xebbex4=_0xebbex2[_0x4fe9[18]](_0x4fe9[2],{type:_0xebbex3.ENUM(_0x4fe9[3],_0x4fe9[4]),token:{type:_0xebbex3[_0x4fe9[5]],unique:_0x4fe9[6]},status:{type:_0xebbex3.ENUM(_0x4fe9[7],_0x4fe9[8]),defaultValue:_0x4fe9[7]},rating:_0xebbex3.ENUM(_0x4fe9[9],_0x4fe9[10]),ratingMessage:_0xebbex3[_0x4fe9[11]],ChatVisitorId:{type:_0xebbex3[_0x4fe9[12]],unique:_0x4fe9[6]}},{tableName:_0x4fe9[13],associate:function(_0xebbex5){_0xebbex4[_0x4fe9[14]](_0xebbex5.ChatMessage);_0xebbex4[_0x4fe9[15]](_0xebbex5.ChatVisitor);_0xebbex4[_0x4fe9[15]](_0xebbex5.ChatWebsite);_0xebbex4[_0x4fe9[17]](_0xebbex5.User,{through:_0xebbex5[_0x4fe9[16]]})}});return _0xebbex4}
\ No newline at end of file
+/**
+ * Chat Website Model
+ */
+
+var crypto = require('crypto');
+
+module.exports = function(sequelize, DataTypes) {
+
+       var ChatRoom = sequelize.define('ChatRoom', {
+               type: DataTypes.ENUM('internal', 'external'),
+               token: {
+                       type: DataTypes.STRING,
+                       unique: 'token'
+               },
+               status: {
+                       type: DataTypes.ENUM('OPEN', 'CLOSED'),
+                       defaultValue: 'OPEN'
+               },
+               rating: DataTypes.ENUM('good', 'bad'),
+               ratingMessage: DataTypes.TEXT,
+               ChatVisitorId: {
+                       type: DataTypes.INTEGER,
+                       unique: 'token'
+               }
+       }, {
+               tableName: 'chat_rooms',
+               associate: function(models) {
+                       ChatRoom.hasMany(models.ChatMessage);
+                       ChatRoom.belongsTo(models.ChatVisitor);
+                       ChatRoom.belongsTo(models.ChatWebsite);
+                       ChatRoom.belongsToMany(models.User, {
+                               through: models.UserHasChatRoom
+                       });
+               }
+       });
+
+       return ChatRoom;
+};
index e0250a5..9874a13 100644 (file)
@@ -1 +1,55 @@
-var _0xe616=["\x63\x72\x79\x70\x74\x6F","\x65\x78\x70\x6F\x72\x74\x73","\x43\x68\x61\x74\x56\x69\x73\x69\x74\x6F\x72","\x53\x54\x52\x49\x4E\x47","\x77\x65\x62\x63\x68\x61\x74","\x65\x6E\x71\x75\x69\x72\x79","\x70\x65\x6E\x64\x69\x6E\x67","\x61\x63\x63\x65\x70\x74\x65\x64","\x75\x6E\x73\x65\x72\x76\x65\x64","\x73\x65\x72\x76\x65\x64","\x62\x6C\x61\x63\x6B\x6C\x69\x73\x74","\x61\x62\x61\x6E\x64\x6F\x6E","\x63\x68\x61\x74\x5F\x76\x69\x73\x69\x74\x6F\x72\x73","\x68\x61\x73\x4F\x6E\x65","\x68\x61\x73\x4D\x61\x6E\x79","\x62\x65\x6C\x6F\x6E\x67\x73\x54\x6F","\x64\x65\x66\x69\x6E\x65"];var crypto=require(_0xe616[0]);module[_0xe616[1]]=function(_0x32bax2,_0x32bax3){var _0x32bax4=_0x32bax2[_0xe616[16]](_0xe616[2],{fullname:_0x32bax3[_0xe616[3]],email:_0x32bax3[_0xe616[3]],remote_address:{type:_0x32bax3[_0xe616[3]]},user_agent:_0x32bax3[_0xe616[3]],visitor_language:_0x32bax3[_0xe616[3]],referer:_0x32bax3[_0xe616[3]],browser:_0x32bax3[_0xe616[3]],engine:_0x32bax3[_0xe616[3]],os:_0x32bax3[_0xe616[3]],device:_0x32bax3[_0xe616[3]],country:_0x32bax3[_0xe616[3]],region:_0x32bax3[_0xe616[3]],city:_0x32bax3[_0xe616[3]],latitude:_0x32bax3[_0xe616[3]],longitude:_0x32bax3[_0xe616[3]],origin:_0x32bax3.ENUM(_0xe616[4],_0xe616[5]),status:{type:_0x32bax3.ENUM(_0xe616[6],_0xe616[7],_0xe616[8],_0xe616[9],_0xe616[10],_0xe616[11]),defaultValue:_0xe616[6]},data1:_0x32bax3[_0xe616[3]],data2:_0x32bax3[_0xe616[3]],data3:_0x32bax3[_0xe616[3]],offlineData1:_0x32bax3[_0xe616[3]],offlineData2:_0x32bax3[_0xe616[3]],offlineData3:_0x32bax3[_0xe616[3]],labelData1:_0x32bax3[_0xe616[3]],labelData2:_0x32bax3[_0xe616[3]],labelData3:_0x32bax3[_0xe616[3]],labelOfflineData1:_0x32bax3[_0xe616[3]],labelOfflineData2:_0x32bax3[_0xe616[3]],labelOfflineData3:_0x32bax3[_0xe616[3]]},{tableName:_0xe616[12],associate:function(_0x32bax5){_0x32bax4[_0xe616[13]](_0x32bax5.ChatEnquiry);_0x32bax4[_0xe616[14]](_0x32bax5.ChatMessage);_0x32bax4[_0xe616[14]](_0x32bax5.ChatRoom);_0x32bax4[_0xe616[15]](_0x32bax5.ChatWebsite)}});return _0x32bax4}
\ No newline at end of file
+/**
+ * Chat Website Model
+ */
+
+var crypto = require('crypto');
+
+module.exports = function(sequelize, DataTypes) {
+
+       var ChatVisitor = sequelize.define('ChatVisitor', {
+               fullname: DataTypes.STRING,
+               email: DataTypes.STRING,
+               remote_address: {
+                       type: DataTypes.STRING
+               },
+               user_agent: DataTypes.STRING,
+               visitor_language: DataTypes.STRING,
+               referer: DataTypes.STRING,
+               browser: DataTypes.STRING,
+               engine: DataTypes.STRING,
+               os: DataTypes.STRING,
+               device: DataTypes.STRING,
+               country: DataTypes.STRING,
+               region: DataTypes.STRING,
+               city: DataTypes.STRING,
+               latitude: DataTypes.STRING,
+               longitude: DataTypes.STRING,
+               origin: DataTypes.ENUM('webchat', 'enquiry'),
+               status: {
+                       type: DataTypes.ENUM('pending', 'accepted', 'unserved', 'served', 'blacklist', 'abandon'),
+                       defaultValue: 'pending'
+               },
+               data1: DataTypes.STRING,
+               data2: DataTypes.STRING,
+               data3: DataTypes.STRING,
+               offlineData1: DataTypes.STRING,
+               offlineData2: DataTypes.STRING,
+               offlineData3: DataTypes.STRING,
+               labelData1: DataTypes.STRING,
+               labelData2: DataTypes.STRING,
+               labelData3: DataTypes.STRING,
+               labelOfflineData1: DataTypes.STRING,
+               labelOfflineData2: DataTypes.STRING,
+               labelOfflineData3: DataTypes.STRING
+       }, {
+               tableName: 'chat_visitors',
+               associate: function(models) {
+                       ChatVisitor.hasOne(models.ChatEnquiry);
+                       ChatVisitor.hasMany(models.ChatMessage);
+                       ChatVisitor.hasMany(models.ChatRoom);
+                       ChatVisitor.belongsTo(models.ChatWebsite);
+               }
+       });
+
+       return ChatVisitor;
+};
index 65535c1..27d5757 100644 (file)
@@ -1 +1,126 @@
-var _0xff9b=["\x63\x72\x79\x70\x74\x6F","\x65\x78\x70\x6F\x72\x74\x73","\x43\x68\x61\x74\x57\x65\x62\x73\x69\x74\x65","\x53\x54\x52\x49\x4E\x47","\x23\x30\x30\x30\x30\x38\x30","\x42\x4F\x4F\x4C\x45\x41\x4E","\x72\x6F\x75\x6E\x64\x65\x64","\x73\x71\x75\x61\x72\x65\x64","\x57\x65\x20\x61\x72\x65\x20\x68\x65\x72\x65\x21","\x3C\x73\x74\x72\x6F\x6E\x67\x3E\x51\x75\x65\x73\x74\x69\x6F\x6E\x73\x3F\x3C\x2F\x73\x74\x72\x6F\x6E\x67\x3E\x3C\x62\x72\x20\x2F\x3E\x49\x6E\x73\x65\x72\x74\x20\x79\x6F\x75\x72\x20\x6E\x61\x6D\x65\x20\x61\x6E\x64\x20\x65\x6D\x61\x69\x6C\x20\x61\x64\x64\x72\x65\x73\x73\x20\x74\x6F\x20\x73\x74\x61\x72\x74\x20\x61\x20\x6C\x69\x76\x65\x2D\x63\x68\x61\x74\x20\x77\x69\x74\x68\x20\x6F\x75\x72\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x74\x65\x61\x6D\x2E","\x59\x6F\x75\x72\x20\x6E\x61\x6D\x65","\x59\x6F\x75\x72\x20\x65\x2D\x6D\x61\x69\x6C\x20\x61\x64\x64\x72\x65\x73\x73","\x43\x68\x61\x74","\x43\x6F\x6E\x74\x61\x63\x74\x20\x75\x73","\x3C\x73\x74\x72\x6F\x6E\x67\x3E\x57\x65\x27\x72\x65\x20\x6E\x6F\x74\x20\x6F\x6E\x6C\x69\x6E\x65\x2E\x3C\x2F\x73\x74\x72\x6F\x6E\x67\x3E\x3C\x62\x72\x20\x2F\x3E\x49\x74\x20\x64\x6F\x65\x73\x6E\x27\x74\x20\x6D\x65\x61\x6E\x20\x77\x65\x27\x72\x65\x20\x6E\x6F\x74\x20\x74\x68\x65\x72\x65\x20\x74\x6F\x20\x68\x65\x6C\x70\x20\x2D\x20\x6C\x65\x61\x76\x65\x20\x79\x6F\x75\x72\x20\x6D\x65\x73\x73\x61\x67\x65\x20\x62\x65\x6C\x6F\x77\x20\x61\x6E\x64\x20\x77\x65\x27\x6C\x6C\x20\x62\x65\x20\x69\x6E\x20\x74\x6F\x75\x63\x68\x20\x61\x73\x20\x73\x6F\x6F\x6E\x20\x61\x73\x20\x70\x6F\x73\x73\x69\x62\x6C\x65\x2E","\x59\x6F\x75\x72\x20\x6D\x65\x73\x73\x61\x67\x65\x2E\x2E\x2E","\x4C\x65\x61\x76\x65\x20\x6D\x65\x73\x73\x61\x67\x65","\x57\x6F\x75\x6C\x64\x20\x79\x6F\x75\x20\x6C\x69\x6B\x65\x20\x72\x61\x74\x65\x20\x74\x68\x69\x73\x20\x63\x68\x61\x74\x3F","\x53\x65\x6E\x64","\x53\x6B\x69\x70","\x63\x68\x61\x74\x5F\x77\x65\x62\x73\x69\x74\x65\x73","\x4F\x66\x66\x6C\x69\x6E\x65\x54\x65\x6D\x70\x6C\x61\x74\x65","\x62\x65\x6C\x6F\x6E\x67\x73\x54\x6F","\x68\x61\x73\x4D\x61\x6E\x79","\x4F\x6E\x6C\x69\x6E\x65","\x4F\x6E\x6C\x69\x6E\x65\x49\x64","\x4F\x66\x66\x6C\x69\x6E\x65","\x4F\x66\x66\x6C\x69\x6E\x65\x49\x64","\x64\x65\x66\x69\x6E\x65"];var crypto=require(_0xff9b[0]);module[_0xff9b[1]]=function(_0x867fx2,_0x867fx3){var _0x867fx4=_0x867fx2[_0xff9b[28]](_0xff9b[2],{name:_0x867fx3[_0xff9b[3]],address:{type:_0x867fx3[_0xff9b[3]],unique:true},description:_0x867fx3[_0xff9b[3]],color:{type:_0x867fx3[_0xff9b[3]],defaultValue:_0xff9b[4]},color_focus:{type:_0x867fx3[_0xff9b[3]],defaultValue:_0xff9b[4]},color_button:{type:_0x867fx3[_0xff9b[3]],defaultValue:_0xff9b[4]},remote:_0x867fx3[_0xff9b[3]],animation:{type:_0x867fx3[_0xff9b[5]],defaultValue:true},header_shape:{type:_0x867fx3.ENUM(_0xff9b[6],_0xff9b[7]),defaultValue:_0xff9b[6]},header_online:{type:_0x867fx3[_0xff9b[3]],defaultValue:_0xff9b[8]},online_message:{type:_0x867fx3[_0xff9b[3]],defaultValue:_0xff9b[9]},username_placeholder:{type:_0x867fx3[_0xff9b[3]],defaultValue:_0xff9b[10]},email_placeholder:{type:_0x867fx3[_0xff9b[3]],defaultValue:_0xff9b[11]},start_chat_button:{type:_0x867fx3[_0xff9b[3]],defaultValue:_0xff9b[12]},header_offline:{type:_0x867fx3[_0xff9b[3]],defaultValue:_0xff9b[13]},offline_message:{type:_0x867fx3[_0xff9b[3]],defaultValue:_0xff9b[14]},enquiry_message_placeholder:{type:_0x867fx3[_0xff9b[3]],defaultValue:_0xff9b[15]},enquiry_button:{type:_0x867fx3[_0xff9b[3]],defaultValue:_0xff9b[16]},download_transcript:{type:_0x867fx3[_0xff9b[5]],defaultValue:true},enquiry_forwarding:{type:_0x867fx3[_0xff9b[5]],defaultValue:false},enquiry_forwarding_address:{type:_0x867fx3[_0xff9b[3]]},enquiry_enable:{type:_0x867fx3[_0xff9b[5]],defaultValue:true},rating_enable:{type:_0x867fx3[_0xff9b[5]],defaultValue:true},rating_message:{type:_0x867fx3[_0xff9b[3]],defaultValue:_0xff9b[17]},rating_send:{type:_0x867fx3[_0xff9b[3]],defaultValue:_0xff9b[18]},rating_skip:{type:_0x867fx3[_0xff9b[3]],defaultValue:_0xff9b[19]}},{tableName:_0xff9b[20],associate:function(_0x867fx5){_0x867fx4[_0xff9b[22]](_0x867fx5.MailTemplate,{as:_0xff9b[21]});_0x867fx4[_0xff9b[23]](_0x867fx5.ChatRoom);_0x867fx4[_0xff9b[23]](_0x867fx5.ChatApplication);_0x867fx4[_0xff9b[23]](_0x867fx5.ChatWebsitesField,{as:_0xff9b[24],foreignKey:_0xff9b[25]});_0x867fx4[_0xff9b[23]](_0x867fx5.ChatWebsitesField,{as:_0xff9b[26],foreignKey:_0xff9b[27]});_0x867fx4[_0xff9b[23]](_0x867fx5.ChatProactiveAction)}});return _0x867fx4}
\ No newline at end of file
+/**
+ * Chat Website Model
+ */
+
+var crypto = require('crypto');
+
+module.exports = function(sequelize, DataTypes) {
+
+       var ChatWebsite = sequelize.define('ChatWebsite', {
+               name: DataTypes.STRING,
+               address: {
+                       type: DataTypes.STRING,
+                       unique: true
+               },
+               description: DataTypes.STRING,
+               color: {
+                       type: DataTypes.STRING,
+                       defaultValue: '#000080'
+               },
+               color_focus: {
+                       type: DataTypes.STRING,
+                       defaultValue: '#000080'
+               },
+               color_button: {
+                       type: DataTypes.STRING,
+                       defaultValue: '#000080'
+               },
+               remote: DataTypes.STRING,
+               animation: {
+                       type: DataTypes.BOOLEAN,
+                       defaultValue: true
+               },
+               header_shape: {
+                       type: DataTypes.ENUM('rounded', 'squared'),
+                       defaultValue: 'rounded'
+               },
+               header_online: {
+                       type: DataTypes.STRING,
+                       defaultValue: 'We are here!'
+               },
+               online_message: {
+                       type: DataTypes.STRING,
+                       defaultValue: '<strong>Questions?<\/strong><br \/>Insert your name and email address to start a live-chat with our support team.'
+               },
+               username_placeholder: {
+                       type: DataTypes.STRING,
+                       defaultValue: 'Your name'
+               },
+               email_placeholder: {
+                       type: DataTypes.STRING,
+                       defaultValue: 'Your e-mail address'
+               },
+               start_chat_button: {
+                       type: DataTypes.STRING,
+                       defaultValue: 'Chat'
+               },
+               header_offline: {
+                       type: DataTypes.STRING,
+                       defaultValue: 'Contact us'
+               },
+               offline_message: {
+                       type: DataTypes.STRING,
+                       defaultValue: '<strong>We\'re not online.<\/strong><br \/>It doesn\'t mean we\'re not there to help - leave your message below and we\'ll be in touch as soon as possible.'
+               },
+               enquiry_message_placeholder: {
+                       type: DataTypes.STRING,
+                       defaultValue: 'Your message...'
+               },
+               enquiry_button: {
+                       type: DataTypes.STRING,
+                       defaultValue: 'Leave message'
+               },
+               download_transcript: {
+                       type: DataTypes.BOOLEAN,
+                       defaultValue: true
+               },
+               enquiry_forwarding: {
+                       type: DataTypes.BOOLEAN,
+                       defaultValue: false
+               },
+               enquiry_forwarding_address: {
+                       type: DataTypes.STRING
+               },
+               enquiry_enable: {
+                       type: DataTypes.BOOLEAN,
+                       defaultValue: true
+               },
+               rating_enable: {
+                       type: DataTypes.BOOLEAN,
+                       defaultValue: true
+               },
+               rating_message: {
+                       type: DataTypes.STRING,
+                       defaultValue: 'Would you like rate this chat?'
+               },
+               rating_send: {
+                       type: DataTypes.STRING,
+                       defaultValue: 'Send'
+               },
+               rating_skip: {
+                       type: DataTypes.STRING,
+                       defaultValue: 'Skip'
+               },
+       }, {
+               tableName: 'chat_websites',
+               associate: function(models) {
+                       // hasMany relations
+                       ChatWebsite.belongsTo(models.MailTemplate, {
+                               as: 'OfflineTemplate'
+                       });
+                       ChatWebsite.hasMany(models.ChatRoom);
+                       ChatWebsite.hasMany(models.ChatApplication);
+                       ChatWebsite.hasMany(models.ChatWebsitesField, {
+                               as: 'Online',
+                               foreignKey: 'OnlineId'
+                       });
+                       ChatWebsite.hasMany(models.ChatWebsitesField, {
+                               as: 'Offline',
+                               foreignKey: 'OfflineId'
+                       });
+                       ChatWebsite.hasMany(models.ChatProactiveAction);
+               }
+       });
+
+       return ChatWebsite;
+};
index b57be48..77383f9 100644 (file)
@@ -1 +1,44 @@
-var _0xeeb8=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x43\x68\x61\x74\x57\x65\x62\x73\x69\x74\x65\x73\x46\x69\x65\x6C\x64","\x53\x54\x52\x49\x4E\x47","\x49\x4E\x54\x45\x47\x45\x52","\x2C","\x73\x70\x6C\x69\x74","\x6F\x70\x74\x69\x6F\x6E\x73","\x67\x65\x74\x44\x61\x74\x61\x56\x61\x6C\x75\x65","\x6A\x6F\x69\x6E","\x73\x65\x74\x44\x61\x74\x61\x56\x61\x6C\x75\x65","\x42\x4F\x4F\x4C\x45\x41\x4E","\x63\x68\x61\x74\x5F\x77\x65\x62\x73\x69\x74\x65\x73\x5F\x66\x69\x65\x6C\x64\x73","\x6F\x6E\x6C\x69\x6E\x65","\x61\x64\x64\x53\x63\x6F\x70\x65","\x6F\x66\x66\x6C\x69\x6E\x65","\x64\x65\x66\x69\x6E\x65"];_0xeeb8[0];module[_0xeeb8[1]]=function(_0x188fx1,_0x188fx2){return _0x188fx1[_0xeeb8[16]](_0xeeb8[2],{component:_0x188fx2[_0xeeb8[3]],description:_0x188fx2[_0xeeb8[3]],index:_0x188fx2[_0xeeb8[4]],label:_0x188fx2[_0xeeb8[3]],options:{type:_0x188fx2[_0xeeb8[3]],get:function(){return this[_0xeeb8[8]](_0xeeb8[7])[_0xeeb8[6]](_0xeeb8[5])},set:function(_0x188fx3){this[_0xeeb8[10]](_0xeeb8[7],_0x188fx3[_0xeeb8[9]](_0xeeb8[5]))}},placeholder:_0x188fx2[_0xeeb8[3]],required:_0x188fx2[_0xeeb8[11]],validation:_0x188fx2[_0xeeb8[3]],editable:{type:_0x188fx2[_0xeeb8[11]],defaultValue:true}},{tableName:_0xeeb8[12],associate:function(_0x188fx4){_0x188fx4[_0xeeb8[2]][_0xeeb8[14]](_0xeeb8[13],function(_0x188fx5){return {where:{OnlineId:_0x188fx5}}});_0x188fx4[_0xeeb8[2]][_0xeeb8[14]](_0xeeb8[15],function(_0x188fx5){return {where:{OfflineId:_0x188fx5}}})}})}
\ No newline at end of file
+'use strict';
+
+module.exports = function(sequelize, DataTypes) {
+  return sequelize.define('ChatWebsitesField', {
+    component: DataTypes.STRING,
+    description: DataTypes.STRING,
+    index: DataTypes.INTEGER,
+    label: DataTypes.STRING,
+    options: {
+      type: DataTypes.STRING,
+      get: function() {
+        return this.getDataValue('options').split(',');
+      },
+      set: function(val) {
+        this.setDataValue('options', val.join(','));
+      }
+    },
+    placeholder: DataTypes.STRING,
+    required: DataTypes.BOOLEAN,
+    validation: DataTypes.STRING,
+    editable: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: true
+    }
+  }, {
+    tableName: 'chat_websites_fields',
+    associate: function(models) {
+      models.ChatWebsitesField.addScope('online', function(WebsiteId) {
+        return {
+          where: {
+            OnlineId: WebsiteId
+          }
+        }
+      });
+      models.ChatWebsitesField.addScope('offline', function(WebsiteId) {
+        return {
+          where: {
+            OfflineId: WebsiteId
+          }
+        }
+      });
+    }
+  });
+};
index b47af13..12768bd 100644 (file)
@@ -1 +1,30 @@
-var _0xd191=["\x65\x78\x70\x6F\x72\x74\x73","\x43\x6F\x6D\x70\x61\x6E\x79","\x53\x54\x52\x49\x4E\x47","\x63\x6F\x6D\x70\x61\x6E\x69\x65\x73","\x43\x6F\x6E\x74\x61\x63\x74\x73","\x68\x61\x73\x4D\x61\x6E\x79","\x64\x65\x66\x69\x6E\x65"];module[_0xd191[0]]=function(_0x7a46x1,_0x7a46x2){var _0x7a46x3=_0x7a46x1[_0xd191[6]](_0xd191[1],{name:{type:_0x7a46x2[_0xd191[2]],unique:true},street:_0x7a46x2[_0xd191[2]],postalCode:_0x7a46x2[_0xd191[2]],city:_0x7a46x2[_0xd191[2]],country:_0x7a46x2[_0xd191[2]],sStreet:_0x7a46x2[_0xd191[2]],sPostalCode:_0x7a46x2[_0xd191[2]],sCity:_0x7a46x2[_0xd191[2]],sCountry:_0x7a46x2[_0xd191[2]]},{tableName:_0xd191[3],associate:function(_0x7a46x4){_0x7a46x3[_0xd191[5]](_0x7a46x4.Contact,{as:_0xd191[4]})}});return _0x7a46x3}
\ No newline at end of file
+/**
+ * tag Model
+ */
+
+module.exports = function(sequelize, DataTypes) {
+
+  var Company = sequelize.define('Company', {
+    name: {
+      type: DataTypes.STRING,
+      unique: true
+    },
+    street: DataTypes.STRING,
+    postalCode: DataTypes.STRING,
+    city: DataTypes.STRING,
+    country: DataTypes.STRING,
+    sStreet: DataTypes.STRING,
+    sPostalCode: DataTypes.STRING,
+    sCity: DataTypes.STRING,
+    sCountry: DataTypes.STRING,
+  }, {
+    tableName: 'companies',
+    associate: function(models) {
+      Company.hasMany(models.Contact, {
+        as: 'Contacts'
+      });
+    }
+  });
+
+  return Company;
+};
index e446295..9fd0abd 100644 (file)
@@ -1 +1,47 @@
-var _0xf869=["\x65\x78\x70\x6F\x72\x74\x73","\x43\x6F\x6E\x74\x61\x63\x74","\x53\x54\x52\x49\x4E\x47","\x63\x6F\x6E\x74\x61\x63\x74\x73","\x63\x6F\x6E\x74\x61\x63\x74\x5F\x68\x61\x73\x5F\x70\x68\x6F\x6E\x65\x73","\x50\x68\x6F\x6E\x65\x73","\x62\x65\x6C\x6F\x6E\x67\x73\x54\x6F\x4D\x61\x6E\x79","\x63\x6F\x6E\x74\x61\x63\x74\x5F\x68\x61\x73\x5F\x65\x6D\x61\x69\x6C\x73","\x45\x6D\x61\x69\x6C\x73","\x43\x6F\x6E\x74\x61\x63\x74\x48\x61\x73\x43\x75\x73\x74\x6F\x6D\x46\x69\x65\x6C\x64","\x43\x75\x73\x74\x6F\x6D\x46\x69\x65\x6C\x64\x73","\x62\x65\x6C\x6F\x6E\x67\x73\x54\x6F","\x73\x65\x72\x76\x69\x63\x65","\x53\x65\x72\x76\x69\x63\x65","\x61\x64\x64\x53\x63\x6F\x70\x65","\x64\x65\x66\x69\x6E\x65"];module[_0xf869[0]]=function(_0x2a25x1,_0x2a25x2){var _0x2a25x3=_0x2a25x1[_0xf869[15]](_0xf869[1],{fullname:{type:_0x2a25x2[_0xf869[2]],validate:{notEmpty:true}},tags:_0x2a25x2[_0xf869[2]],street:_0x2a25x2[_0xf869[2]],postalCode:_0x2a25x2[_0xf869[2]],city:_0x2a25x2[_0xf869[2]],country:_0x2a25x2[_0xf869[2]],dateOfBirth:_0x2a25x2[_0xf869[2]],description:_0x2a25x2[_0xf869[2]]},{tableName:_0xf869[3],associate:function(_0x2a25x4){_0x2a25x3[_0xf869[6]](_0x2a25x4.ContactPhone,{through:_0xf869[4],as:_0xf869[5]});_0x2a25x3[_0xf869[6]](_0x2a25x4.ContactEmail,{through:_0xf869[7],as:_0xf869[8]});_0x2a25x3[_0xf869[6]](_0x2a25x4.CustomField,{through:_0x2a25x4[_0xf869[9]],as:_0xf869[10]});_0x2a25x3[_0xf869[11]](_0x2a25x4.Company);_0x2a25x3[_0xf869[11]](_0x2a25x4.User);_0x2a25x3[_0xf869[11]](_0x2a25x4.Service);_0x2a25x3[_0xf869[14]](_0xf869[12],{include:[_0x2a25x4[_0xf869[13]]]})}});return _0x2a25x3}
\ No newline at end of file
+/**
+ * Contact Model
+ */
+
+module.exports = function(sequelize, DataTypes) {
+
+  var Contact = sequelize.define('Contact', {
+    fullname: {
+      type: DataTypes.STRING,
+      validate: {
+        notEmpty: true
+      }
+    },
+    tags: DataTypes.STRING,
+    // ServiceId: DataTypes.INTEGER,/Da creare con l' associazione
+    street: DataTypes.STRING,
+    postalCode: DataTypes.STRING,
+    city: DataTypes.STRING,
+    country: DataTypes.STRING,
+    dateOfBirth: DataTypes.STRING,
+    description: DataTypes.STRING,
+  }, {
+    tableName: 'contacts',
+    associate: function(models) {
+      Contact.belongsToMany(models.ContactPhone, {
+        through: 'contact_has_phones',
+        as: 'Phones'
+      });
+      Contact.belongsToMany(models.ContactEmail, {
+        through: 'contact_has_emails',
+        as: 'Emails'
+      });
+      Contact.belongsToMany(models.CustomField, {
+        through: models.ContactHasCustomField,
+        as: 'CustomFields'
+      });
+      Contact.belongsTo(models.Company);
+      Contact.belongsTo(models.User);
+      Contact.belongsTo(models.Service);
+      Contact.addScope('service', {
+        include: [models.Service]
+      });
+    }
+  });
+
+  return Contact;
+};
index bccd893..597fbde 100644 (file)
@@ -1 +1,22 @@
-var _0xce6d=["\x65\x78\x70\x6F\x72\x74\x73","\x43\x6F\x6E\x74\x61\x63\x74\x45\x6D\x61\x69\x6C","\x53\x54\x52\x49\x4E\x47","\x63\x6F\x6E\x74\x61\x63\x74\x5F\x65\x6D\x61\x69\x6C\x73","\x63\x6F\x6E\x74\x61\x63\x74\x5F\x68\x61\x73\x5F\x65\x6D\x61\x69\x6C\x73","\x62\x65\x6C\x6F\x6E\x67\x73\x54\x6F\x4D\x61\x6E\x79","\x64\x65\x66\x69\x6E\x65"];module[_0xce6d[0]]=function(_0xadd1x1,_0xadd1x2){var _0xadd1x3=_0xadd1x1[_0xce6d[6]](_0xce6d[1],{email:{type:_0xadd1x2[_0xce6d[2]],primaryKey:true}},{tableName:_0xce6d[3],associate:function(_0xadd1x4){_0xadd1x3[_0xce6d[5]](_0xadd1x4.Contact,{through:_0xce6d[4]})}});return _0xadd1x3}
\ No newline at end of file
+/**
+ * Contact Model
+ */
+
+module.exports = function(sequelize, DataTypes) {
+
+  var ContactEmail = sequelize.define('ContactEmail', {
+    email: {
+      type: DataTypes.STRING,
+      primaryKey: true
+    }
+  }, {
+    tableName: 'contact_emails',
+    associate: function(models) {
+      ContactEmail.belongsToMany(models.Contact, {
+        through: 'contact_has_emails'
+      });
+    }
+  });
+
+  return ContactEmail;
+};
index 0ec9b29..650b530 100644 (file)
@@ -1 +1,16 @@
-var _0xbaaf=["\x63\x72\x79\x70\x74\x6F","\x65\x78\x70\x6F\x72\x74\x73","\x43\x6F\x6E\x74\x61\x63\x74\x48\x61\x73\x43\x75\x73\x74\x6F\x6D\x46\x69\x65\x6C\x64","\x53\x54\x52\x49\x4E\x47","\x63\x6F\x6E\x74\x61\x63\x74\x5F\x68\x61\x73\x5F\x63\x75\x73\x74\x6F\x6D\x5F\x66\x69\x65\x6C\x64\x73","\x64\x65\x66\x69\x6E\x65"];var crypto=require(_0xbaaf[0]);module[_0xbaaf[1]]=function(_0xd415x2,_0xd415x3){var _0xd415x4=_0xd415x2[_0xbaaf[5]](_0xbaaf[2],{value:_0xd415x3[_0xbaaf[3]]},{tableName:_0xbaaf[4]});return _0xd415x4}
\ No newline at end of file
+/**
+ * contact has customfield Model
+ */
+
+var crypto = require('crypto');
+
+module.exports = function(sequelize, DataTypes) {
+
+       var ContactHasCustomField = sequelize.define('ContactHasCustomField', {
+               value: DataTypes.STRING
+       }, {
+               tableName: 'contact_has_custom_fields'
+       });
+
+       return ContactHasCustomField;
+};
index a26acef..08d704f 100644 (file)
@@ -1 +1,32 @@
-var _0x525e=["\x65\x78\x70\x6F\x72\x74\x73","\x43\x6F\x6E\x74\x61\x63\x74\x50\x68\x6F\x6E\x65","\x53\x54\x52\x49\x4E\x47","\x63\x6F\x6E\x74\x61\x63\x74\x5F\x70\x68\x6F\x6E\x65\x73","\x63\x6F\x6E\x74\x61\x63\x74\x5F\x68\x61\x73\x5F\x70\x68\x6F\x6E\x65\x73","\x62\x65\x6C\x6F\x6E\x67\x73\x54\x6F\x4D\x61\x6E\x79","\x49\x6E\x62\x6F\x75\x6E\x64\x73","\x73\x6F\x75\x72\x63\x65","\x68\x61\x73\x4D\x61\x6E\x79","\x4F\x75\x74\x62\x6F\x75\x6E\x64\x73","\x64\x65\x73\x74\x69\x6E\x61\x74\x69\x6F\x6E","\x64\x65\x66\x69\x6E\x65"];module[_0x525e[0]]=function(_0x99bax1,_0x99bax2){var _0x99bax3=_0x99bax1[_0x525e[11]](_0x525e[1],{phone:{type:_0x99bax2[_0x525e[2]],primaryKey:true}},{tableName:_0x525e[3],associate:function(_0x99bax4){_0x99bax3[_0x525e[5]](_0x99bax4.Contact,{through:_0x525e[4]});_0x99bax3[_0x525e[8]](_0x99bax4.ReportCall,{as:_0x525e[6],foreignKey:_0x525e[7],constraints:false});_0x99bax3[_0x525e[8]](_0x99bax4.ReportCall,{as:_0x525e[9],foreignKey:_0x525e[10],constraints:false})}});return _0x99bax3}
\ No newline at end of file
+/**
+ * Contact Model
+ */
+
+module.exports = function (sequelize, DataTypes) {
+
+  var ContactPhone = sequelize.define('ContactPhone', {
+    phone: {
+      type: DataTypes.STRING,
+      primaryKey: true
+    }
+  }, {
+    tableName: 'contact_phones',
+    associate: function (models) {
+      ContactPhone.belongsToMany(models.Contact, {
+        through: 'contact_has_phones'
+      });
+      ContactPhone.hasMany(models.ReportCall, {
+        as: 'Inbounds',
+        foreignKey: 'source',
+        constraints: false
+      });
+      ContactPhone.hasMany(models.ReportCall, {
+        as: 'Outbounds',
+        foreignKey: 'destination',
+        constraints: false
+      });
+    }
+  });
+
+  return ContactPhone;
+};
index e78d9d2..54f5ec6 100644 (file)
@@ -1 +1,28 @@
-var _0x236b=["\x65\x78\x70\x6F\x72\x74\x73","\x43\x75\x73\x74\x6F\x6D\x46\x69\x65\x6C\x64","\x53\x54\x52\x49\x4E\x47","\x42\x4F\x4F\x4C\x45\x41\x4E","\x63\x75\x73\x74\x6F\x6D\x5F\x66\x69\x65\x6C\x64\x73","\x43\x6F\x6E\x74\x61\x63\x74\x48\x61\x73\x43\x75\x73\x74\x6F\x6D\x46\x69\x65\x6C\x64","\x62\x65\x6C\x6F\x6E\x67\x73\x54\x6F\x4D\x61\x6E\x79","\x64\x65\x66\x69\x6E\x65"];module[_0x236b[0]]=function(_0x253ax1,_0x253ax2){var _0x253ax3=_0x253ax1[_0x236b[7]](_0x236b[1],{name:{type:_0x253ax2[_0x236b[2]],unique:true},type:_0x253ax2[_0x236b[2]],active:{type:_0x253ax2[_0x236b[3]],defaultValue:true},values:_0x253ax2[_0x236b[2]]},{tableName:_0x236b[4],associate:function(_0x253ax4){_0x253ax3[_0x236b[6]](_0x253ax4.Contact,{through:_0x253ax4[_0x236b[5]]})}});return _0x253ax3}
\ No newline at end of file
+/**
+ * customfield Model
+ */
+
+module.exports = function(sequelize, DataTypes) {
+
+  var CustomField = sequelize.define('CustomField', {
+    name: {
+      type: DataTypes.STRING,
+      unique: true
+    },
+    type: DataTypes.STRING,
+    active: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: true
+    },
+    values: DataTypes.STRING
+  }, {
+    tableName: 'custom_fields',
+    associate: function(models) {
+      CustomField.belongsToMany(models.Contact, {
+        through: models.ContactHasCustomField
+      });
+    }
+  });
+
+  return CustomField;
+};
index 28c8a51..fe9d484 100644 (file)
@@ -1 +1,32 @@
-var _0x1afe=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74","\x53\x54\x52\x49\x4E\x47","\x54\x45\x58\x54","\x63\x75\x73\x74\x6F\x6D\x5F\x72\x65\x70\x6F\x72\x74\x73","\x46\x69\x65\x6C\x64\x73","\x63\x61\x73\x63\x61\x64\x65","\x68\x61\x73\x4D\x61\x6E\x79","\x66\x69\x65\x6C\x64\x73","\x52\x65\x70\x6F\x72\x74\x46\x69\x65\x6C\x64","\x66\x69\x65\x6C\x64","\x61\x6C\x69\x61\x73","\x66\x75\x6E\x63\x74\x69\x6F\x6E","\x67\x72\x6F\x75\x70\x42\x79","\x6F\x72\x64\x65\x72\x42\x79","\x4D\x65\x74\x72\x69\x63\x49\x64","\x61\x64\x64\x53\x63\x6F\x70\x65","\x64\x65\x66\x69\x6E\x65"];_0x1afe[0];module[_0x1afe[1]]=function(_0xdf19x1,_0xdf19x2){var _0xdf19x3=_0xdf19x1[_0x1afe[18]](_0x1afe[2],{name:_0xdf19x2[_0x1afe[3]],description:_0xdf19x2[_0x1afe[3]],parent:_0xdf19x2[_0x1afe[3]],table:_0xdf19x2[_0x1afe[3]],conditions:_0xdf19x2[_0x1afe[4]]},{paranoid:true,tableName:_0x1afe[5],associate:function(_0xdf19x4){_0xdf19x3[_0x1afe[8]](_0xdf19x4.ReportField,{as:_0x1afe[6],onDelete:_0x1afe[7],hooks:true});_0xdf19x3[_0x1afe[17]](_0x1afe[9],{include:[{model:_0xdf19x4[_0x1afe[10]],as:_0x1afe[6],required:false,attributes:[_0x1afe[11],_0x1afe[12],_0x1afe[13],_0x1afe[14],_0x1afe[15],_0x1afe[16]]}]})}});return _0xdf19x3}
\ No newline at end of file
+'use strict';
+
+module.exports = function(sequelize, DataTypes) {
+
+  var CustomReport = sequelize.define('CustomReport', {
+    name: DataTypes.STRING,
+    description: DataTypes.STRING,
+    parent: DataTypes.STRING,
+    table: DataTypes.STRING,
+    conditions: DataTypes.TEXT
+  }, {
+    paranoid: true,
+    tableName: 'custom_reports',
+    associate: function(models) {
+      CustomReport.hasMany(models.ReportField, {
+        as: 'Fields',
+        onDelete: 'cascade',
+        hooks: true
+      });
+      CustomReport.addScope('fields', {
+        include: [{
+          model: models.ReportField,
+          as: 'Fields',
+          required: false,
+          attributes: ['field', 'alias', 'function', 'groupBy', 'orderBy', 'MetricId']
+        }]
+      });
+    }
+  });
+
+  return CustomReport;
+};
index bd3926a..b47660b 100644 (file)
@@ -1 +1,61 @@
-var _0x2ff6=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x44\x61\x73\x68\x62\x6F\x61\x72\x64","\x53\x54\x52\x49\x4E\x47","\x54\x45\x58\x54","\x42\x4F\x4F\x4C\x45\x41\x4E","\x34\x2D\x38","\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x73","\x64\x65\x66\x69\x6E\x65"];_0x2ff6[0];module[_0x2ff6[1]]=function(_0x81b0x1,_0x81b0x2){var _0x81b0x3=_0x81b0x1[_0x2ff6[8]](_0x2ff6[2],{name:{type:_0x81b0x2[_0x2ff6[3]]},description:{type:_0x81b0x2[_0x2ff6[3]]},model:{type:_0x81b0x2[_0x2ff6[4]]},collapsible:{type:_0x81b0x2[_0x2ff6[5]],defaultValue:true},editable:{type:_0x81b0x2[_0x2ff6[5]],defaultValue:true},maximizable:{type:_0x81b0x2[_0x2ff6[5]],defaultValue:true},structure:{type:_0x81b0x2.STRING(32),defaultValue:_0x2ff6[6]},enableconfirmdelete:{type:_0x81b0x2[_0x2ff6[5]],defaultValue:true},defaultEntry:{type:_0x81b0x2[_0x2ff6[5]],defaultValue:0},admin:{type:_0x81b0x2[_0x2ff6[5]],defaultValue:true},user:{type:_0x81b0x2[_0x2ff6[5]],defaultValue:true},agent:{type:_0x81b0x2[_0x2ff6[5]],defaultValue:true},visible:{type:_0x81b0x2[_0x2ff6[5]],defaultValue:true}},{tableName:_0x2ff6[7]});return _0x81b0x3}
\ No newline at end of file
+'use strict';
+
+module.exports = function(sequelize, DataTypes) {
+
+  var Dashboard = sequelize.define('Dashboard', {
+    name: {
+      type: DataTypes.STRING,
+    },
+    description: {
+      type: DataTypes.STRING,
+    },
+    model: {
+      type: DataTypes.TEXT,
+    },
+    collapsible: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: true
+    },
+    editable: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: true
+    },
+    maximizable: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: true
+    },
+    structure: {
+      type: DataTypes.STRING(32),
+      defaultValue: '4-8'
+    },
+    enableconfirmdelete: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: true
+    },
+    defaultEntry: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: 0
+    },
+    admin: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: true
+    },
+    user: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: true
+    },
+    agent: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: true
+    },
+    visible: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: true
+    }
+  }, {
+    tableName: 'dashboards'
+  });
+
+  return Dashboard;
+
+};
index 9feb61d..16cdd08 100644 (file)
@@ -1 +1,23 @@
-var _0x5ecd=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74","\x53\x54\x52\x49\x4E\x47","\x54\x45\x58\x54","\x64\x65\x66\x61\x75\x6C\x74\x5F\x72\x65\x70\x6F\x72\x74\x73","\x46\x69\x65\x6C\x64\x73","\x63\x61\x73\x63\x61\x64\x65","\x68\x61\x73\x4D\x61\x6E\x79","\x64\x65\x66\x69\x6E\x65"];_0x5ecd[0];module[_0x5ecd[1]]=function(_0x3fafx1,_0x3fafx2){var _0x3fafx3=_0x3fafx1[_0x5ecd[9]](_0x5ecd[2],{name:_0x3fafx2[_0x5ecd[3]],description:_0x3fafx2[_0x5ecd[3]],parent:_0x3fafx2[_0x5ecd[3]],table:_0x3fafx2[_0x5ecd[3]],conditions:_0x3fafx2[_0x5ecd[4]]},{tableName:_0x5ecd[5],associate:function(_0x3fafx4){_0x3fafx3[_0x5ecd[8]](_0x3fafx4.ReportField,{as:_0x5ecd[6],onDelete:_0x5ecd[7],hooks:true})}});return _0x3fafx3}
\ No newline at end of file
+'use strict';
+
+module.exports = function(sequelize, DataTypes) {
+
+  var DefaultReport = sequelize.define('DefaultReport', {
+    name: DataTypes.STRING,
+    description: DataTypes.STRING,
+    parent: DataTypes.STRING,
+    table: DataTypes.STRING,
+    conditions: DataTypes.TEXT
+  }, {
+    tableName: 'default_reports',
+    associate: function(models) {
+      DefaultReport.hasMany(models.ReportField, {
+        as: 'Fields',
+        onDelete: 'cascade',
+        hooks: true
+      });
+    }
+  });
+
+  return DefaultReport;
+};
index 731022d..12615eb 100644 (file)
@@ -1 +1,45 @@
-var _0xc66a=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x44\x65\x73\x6B\x41\x63\x63\x6F\x75\x6E\x74","\x53\x54\x52\x49\x4E\x47","\x62\x61\x73\x69\x63","\x6F\x61\x75\x74\x68","\x64\x65\x73\x6B\x5F\x61\x63\x63\x6F\x75\x6E\x74\x73","\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73","\x41\x63\x63\x6F\x75\x6E\x74\x49\x64","\x68\x61\x73\x4D\x61\x6E\x79","\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73","\x44\x65\x73\x6B\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x69\x64","\x6E\x61\x6D\x65","\x61\x64\x64\x53\x63\x6F\x70\x65","\x64\x65\x66\x69\x6E\x65"];_0xc66a[0];module[_0xc66a[1]]=function(_0x2d1bx1,_0x2d1bx2){var _0x2d1bx3=_0x2d1bx1[_0xc66a[15]](_0xc66a[2],{name:_0x2d1bx2[_0xc66a[3]],description:_0x2d1bx2[_0xc66a[3]],username:{type:_0x2d1bx2[_0xc66a[3]],unique:true},remoteUri:{type:_0x2d1bx2[_0xc66a[3]],unique:true},authType:{type:_0x2d1bx2.ENUM(_0xc66a[4],_0xc66a[5]),defaultValue:_0xc66a[4]},password:_0x2d1bx2[_0xc66a[3]],consumerKey:_0x2d1bx2[_0xc66a[3]],consumerSecret:_0x2d1bx2[_0xc66a[3]],token:_0x2d1bx2[_0xc66a[3]],tokenSecret:_0x2d1bx2[_0xc66a[3]]},{tableName:_0xc66a[6],associate:function(_0x2d1bx4){_0x2d1bx3[_0xc66a[9]](_0x2d1bx4.DeskConfiguration,{as:_0xc66a[7],foreignKey:_0xc66a[8]});_0x2d1bx3[_0xc66a[14]](_0xc66a[10],{include:[{model:_0x2d1bx4[_0xc66a[11]],as:_0xc66a[7],required:false,attributes:[_0xc66a[12],_0xc66a[13]]}]})}});return _0x2d1bx3}
\ No newline at end of file
+'use strict';
+
+module.exports = function(sequelize, DataTypes) {
+
+  var DeskAccount = sequelize.define('DeskAccount', {
+    name: DataTypes.STRING,
+    description: DataTypes.STRING,
+    username: {
+      type: DataTypes.STRING,
+      unique: true
+    },
+    remoteUri: {
+      type: DataTypes.STRING,
+      unique: true
+    },
+    authType: {
+      type: DataTypes.ENUM('basic', 'oauth'),
+      defaultValue: 'basic'
+    },
+    password: DataTypes.STRING,
+    consumerKey: DataTypes.STRING,
+    consumerSecret: DataTypes.STRING,
+    token: DataTypes.STRING,
+    tokenSecret: DataTypes.STRING
+  }, {
+    tableName: 'desk_accounts',
+    associate: function(models) {
+      DeskAccount.hasMany(models.DeskConfiguration, {
+        as: 'Configurations',
+        foreignKey: 'AccountId'
+      });
+      DeskAccount.addScope('configurations', {
+        include: [{
+          model: models.DeskConfiguration,
+          as: 'Configurations',
+          required: false,
+          attributes: ['id', 'name']
+        }]
+      });
+    }
+  });
+
+  return DeskAccount;
+
+};
index b96f432..fb92e7e 100644 (file)
@@ -1 +1,27 @@
-var _0x31e2=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x44\x65\x73\x6B\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x53\x54\x52\x49\x4E\x47","\x64\x65\x73\x6B\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73","\x41\x63\x63\x6F\x75\x6E\x74\x49\x64","\x62\x65\x6C\x6F\x6E\x67\x73\x54\x6F","\x53\x75\x62\x6A\x65\x63\x74","\x53\x75\x62\x6A\x65\x63\x74\x49\x64","\x68\x61\x73\x4D\x61\x6E\x79","\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x49\x64","\x46\x69\x65\x6C\x64","\x46\x69\x65\x6C\x64\x49\x64","\x64\x65\x66\x69\x6E\x65"];_0x31e2[0];module[_0x31e2[1]]=function(_0x40c7x1,_0x40c7x2){return _0x40c7x1[_0x31e2[14]](_0x31e2[2],{name:_0x40c7x2[_0x31e2[3]],description:_0x40c7x2[_0x31e2[3]]},{tableName:_0x31e2[4],associate:function(_0x40c7x3){_0x40c7x3[_0x31e2[2]][_0x31e2[6]](_0x40c7x3.DeskAccount,{foreignKey:_0x31e2[5]});_0x40c7x3[_0x31e2[2]][_0x31e2[9]](_0x40c7x3.DeskField,{as:_0x31e2[7],foreignKey:_0x31e2[8]});_0x40c7x3[_0x31e2[2]][_0x31e2[9]](_0x40c7x3.DeskField,{as:_0x31e2[10],foreignKey:_0x31e2[11]});_0x40c7x3[_0x31e2[2]][_0x31e2[9]](_0x40c7x3.DeskField,{as:_0x31e2[12],foreignKey:_0x31e2[13]})}})}
\ No newline at end of file
+'use strict';
+
+module.exports = function(sequelize, DataTypes) {
+  return sequelize.define('DeskConfiguration', {
+    name: DataTypes.STRING,
+    description: DataTypes.STRING
+  }, {
+    tableName: 'desk_configurations',
+    associate: function(models) {
+      models.DeskConfiguration.belongsTo(models.DeskAccount, {
+        foreignKey: 'AccountId'
+      });
+      models.DeskConfiguration.hasMany(models.DeskField, {
+        as: 'Subject',
+        foreignKey: 'SubjectId'
+      });
+      models.DeskConfiguration.hasMany(models.DeskField, {
+        as: 'Description',
+        foreignKey: 'DescriptionId'
+      });
+      models.DeskConfiguration.hasMany(models.DeskField, {
+        as: 'Field',
+        foreignKey: 'FieldId'
+      });
+    }
+  });
+};
index 842124a..befea49 100644 (file)
@@ -1 +1,26 @@
-var _0xa288=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x44\x65\x73\x6B\x46\x69\x65\x6C\x64","\x73\x74\x72\x69\x6E\x67","\x76\x61\x72\x69\x61\x62\x6C\x65","\x6B\x65\x79\x5F\x76\x61\x6C\x75\x65","\x53\x54\x52\x49\x4E\x47","\x42\x4F\x4F\x4C\x45\x41\x4E","\x64\x65\x73\x6B\x5F\x66\x69\x65\x6C\x64\x73","\x62\x65\x6C\x6F\x6E\x67\x73\x54\x6F","\x64\x65\x66\x69\x6E\x65"];_0xa288[0];module[_0xa288[1]]=function(_0xc6b6x1,_0xc6b6x2){return _0xc6b6x1[_0xa288[10]](_0xa288[2],{type:{type:_0xc6b6x2.ENUM(_0xa288[3],_0xa288[4],_0xa288[5]),defaultValue:_0xa288[3]},content:_0xc6b6x2[_0xa288[6]],key:_0xc6b6x2[_0xa288[6]],keyType:{type:_0xc6b6x2.ENUM(_0xa288[3],_0xa288[4])},keyContent:_0xc6b6x2[_0xa288[6]],idField:_0xc6b6x2[_0xa288[6]],customField:{type:_0xc6b6x2[_0xa288[7]],defaultValue:true}},{tableName:_0xa288[8],associate:function(_0xc6b6x3){_0xc6b6x3[_0xa288[2]][_0xa288[9]](_0xc6b6x3.Variable)}})}
\ No newline at end of file
+'use strict';
+
+module.exports = function(sequelize, DataTypes) {
+  return sequelize.define('DeskField', {
+    type: {
+      type: DataTypes.ENUM('string', 'variable', 'key_value'),
+      defaultValue: 'string'
+    },
+    content: DataTypes.STRING,
+    key: DataTypes.STRING,
+    keyType: {
+      type: DataTypes.ENUM('string', 'variable')
+    },
+    keyContent: DataTypes.STRING,
+    idField: DataTypes.STRING,
+    customField: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: true
+    }
+  }, {
+    tableName: 'desk_fields',
+    associate: function(models) {
+      models.DeskField.belongsTo(models.Variable);
+    }
+  });
+};
index 9214260..fba2c1c 100644 (file)
@@ -1 +1,45 @@
-var _0xa9b3=["\x65\x78\x70\x6F\x72\x74\x73","\x45\x76\x65\x6E\x74","\x49\x4E\x43\x4F\x4D\x49\x4E\x47","\x4F\x55\x54\x47\x4F\x49\x4E\x47","\x41\x54\x54\x45\x4D\x50\x54","\x41\x53\x53\x49\x47\x4E\x45\x44","\x55\x4E\x41\x53\x53\x49\x47\x4E\x45\x44","\x4D\x41\x49\x4C","\x43\x48\x41\x54","\x46\x41\x58","\x56\x4F\x49\x43\x45","\x49\x4E\x54\x45\x47\x45\x52","\x65\x76\x65\x6E\x74\x73","\x62\x65\x6C\x6F\x6E\x67\x73\x54\x6F","\x64\x65\x66\x69\x6E\x65"];module[_0xa9b3[0]]=function(_0x7153x1,_0x7153x2){var _0x7153x3=_0x7153x1[_0xa9b3[14]](_0xa9b3[1],{name:{type:_0x7153x2.ENUM(_0xa9b3[2],_0xa9b3[3],_0xa9b3[4],_0xa9b3[5],_0xa9b3[6])},channel:{type:_0x7153x2.ENUM(_0xa9b3[7],_0xa9b3[8],_0xa9b3[9],_0xa9b3[10])},timeout:{type:_0x7153x2[_0xa9b3[11]]},holdtime:{type:_0x7153x2[_0xa9b3[11]]}},{tableName:_0xa9b3[12],associate:function(_0x7153x4){_0x7153x3[_0xa9b3[13]](_0x7153x4.User);_0x7153x3[_0xa9b3[13]](_0x7153x4.MailRoom);_0x7153x3[_0xa9b3[13]](_0x7153x4.MailMessage);_0x7153x3[_0xa9b3[13]](_0x7153x4.MailQueue);_0x7153x3[_0xa9b3[13]](_0x7153x4.MailAccount);_0x7153x3[_0xa9b3[13]](_0x7153x4.MailApplication);_0x7153x3[_0xa9b3[13]](_0x7153x4.FaxRoom);_0x7153x3[_0xa9b3[13]](_0x7153x4.FaxQueue);_0x7153x3[_0xa9b3[13]](_0x7153x4.FaxAccount);_0x7153x3[_0xa9b3[13]](_0x7153x4.FaxApplication);_0x7153x3[_0xa9b3[13]](_0x7153x4.ChatRoom);_0x7153x3[_0xa9b3[13]](_0x7153x4.ChatQueue);_0x7153x3[_0xa9b3[13]](_0x7153x4.ChatWebsite);_0x7153x3[_0xa9b3[13]](_0x7153x4.ChatApplication)}});return _0x7153x3}
\ No newline at end of file
+/**
+ * Event Model
+ */
+
+module.exports = function(sequelize, DataTypes) {
+
+       var Event = sequelize.define('Event', {
+               name: {
+                       type: DataTypes.ENUM('INCOMING', 'OUTGOING', 'ATTEMPT', 'ASSIGNED', 'UNASSIGNED')
+               },
+               channel: {
+                       type: DataTypes.ENUM('MAIL', 'CHAT', 'FAX', 'VOICE'),
+               },
+               timeout: {
+                       type: DataTypes.INTEGER
+               },
+               holdtime: {
+                       type: DataTypes.INTEGER
+               }
+       }, {
+               tableName: 'events',
+               associate: function(models) {
+                       // USER RELATIONS
+                       Event.belongsTo(models.User);
+                       // MAIL RELATIONS
+                       Event.belongsTo(models.MailRoom);
+                       Event.belongsTo(models.MailMessage);
+                       Event.belongsTo(models.MailQueue);
+                       Event.belongsTo(models.MailAccount);
+                       Event.belongsTo(models.MailApplication);
+                       // FAX RELATIONS
+                       Event.belongsTo(models.FaxRoom);
+                       Event.belongsTo(models.FaxQueue);
+                       Event.belongsTo(models.FaxAccount);
+                       Event.belongsTo(models.FaxApplication);
+                       // CHAT RELATIONS
+                       Event.belongsTo(models.ChatRoom);
+                       Event.belongsTo(models.ChatQueue);
+                       Event.belongsTo(models.ChatWebsite);
+                       Event.belongsTo(models.ChatApplication);
+               }
+       });
+
+       return Event;
+};
index 62a221e..984f130 100644 (file)
@@ -1 +1,27 @@
-var _0x8d6e=["\x65\x78\x70\x6F\x72\x74\x73","\x45\x78\x74\x72\x61\x63\x74\x65\x64\x52\x65\x70\x6F\x72\x74","\x53\x54\x52\x49\x4E\x47","\x44\x41\x54\x45","\x4C\x6F\x61\x64\x69\x6E\x67","\x65\x78\x74\x72\x61\x63\x74\x65\x64\x5F\x72\x65\x70\x6F\x72\x74\x73","\x64\x65\x66\x69\x6E\x65"];module[_0x8d6e[0]]=function(_0x3936x1,_0x3936x2){var _0x3936x3=_0x3936x1[_0x8d6e[6]](_0x8d6e[1],{name:_0x3936x2[_0x8d6e[2]],output:_0x3936x2[_0x8d6e[2]],savename:_0x3936x2[_0x8d6e[2]],startDate:_0x3936x2[_0x8d6e[3]],endDate:_0x3936x2[_0x8d6e[3]],status:{type:_0x3936x2[_0x8d6e[2]],defaultValue:_0x8d6e[4]}},{tableName:_0x8d6e[5]});return _0x3936x3}
\ No newline at end of file
+/**
+ * tag Model
+ */
+
+module.exports = function(sequelize, DataTypes) {
+
+  var ExtractedReport = sequelize.define('ExtractedReport', {
+    name: DataTypes.STRING,
+    output: DataTypes.STRING, //csv,pdf,..
+    savename: DataTypes.STRING,
+    startDate: DataTypes.DATE,
+    endDate: DataTypes.DATE,
+    status: {
+      type: DataTypes.STRING,
+      defaultValue: 'Loading'
+    }
+  }, {
+    tableName: 'extracted_reports',
+    // associate: function(models) {
+    //   Tag.belongsToMany(models.Contact, {
+    //     through: 'contact_tags'
+    //   });
+    // }
+  });
+
+  return ExtractedReport;
+};
index f8466ab..71a9227 100644 (file)
@@ -1 +1,40 @@
-var _0x1176=["\x63\x72\x79\x70\x74\x6F","\x65\x78\x70\x6F\x72\x74\x73","\x46\x61\x78\x41\x63\x63\x6F\x75\x6E\x74","\x53\x54\x52\x49\x4E\x47","\x42\x4F\x4F\x4C\x45\x41\x4E","\x39\x36\x30\x30","\x31\x34\x34\x30\x30","\x33\x33\x36\x30\x30","\x66\x61\x78\x5F\x61\x63\x63\x6F\x75\x6E\x74\x73","\x68\x61\x73\x4D\x61\x6E\x79","\x64\x65\x66\x69\x6E\x65"];var crypto=require(_0x1176[0]);module[_0x1176[1]]=function(_0x77edx2,_0x77edx3){var _0x77edx4=_0x77edx2[_0x1176[10]](_0x1176[2],{description:_0x77edx3[_0x1176[3]],name:_0x77edx3[_0x1176[3]],phone:{type:_0x77edx3[_0x1176[3]],unique:true},ecm:{type:_0x77edx3[_0x1176[4]],defaultValue:false},faxheader:_0x77edx3[_0x1176[3]],localid:_0x77edx3[_0x1176[3]],maxrate:{type:_0x77edx3.ENUM(_0x1176[5],_0x1176[6],_0x1176[7]),defaultValue:_0x1176[7]},minrate:{type:_0x77edx3.ENUM(_0x1176[5],_0x1176[6],_0x1176[7]),defaultValue:_0x1176[5]}},{tableName:_0x1176[8],associate:function(_0x77edx5){_0x77edx4[_0x1176[9]](_0x77edx5.FaxRoom);_0x77edx4[_0x1176[9]](_0x77edx5.FaxApplication)}});return _0x77edx4}
\ No newline at end of file
+/**
+ * Chat Website Model
+ */
+
+var crypto = require('crypto');
+
+module.exports = function(sequelize, DataTypes) {
+
+       var FaxAccount = sequelize.define('FaxAccount', {
+               description: DataTypes.STRING,
+               name: DataTypes.STRING,
+               phone: {
+                       type: DataTypes.STRING,
+                       unique: true
+               },
+               ecm: {
+                       type: DataTypes.BOOLEAN,
+                       defaultValue: false
+               },
+               faxheader: DataTypes.STRING,
+               localid: DataTypes.STRING,
+               maxrate: {
+                       type: DataTypes.ENUM('9600', '14400', '33600'),
+                       defaultValue: '33600'
+               },
+               minrate: {
+                       type: DataTypes.ENUM('9600', '14400', '33600'),
+                       defaultValue: '9600'
+               }
+       }, {
+               tableName: 'fax_accounts',
+               associate: function(models) {
+                       // FaxAccount.belongsTo(models.Trunk);
+                       FaxAccount.hasMany(models.FaxRoom);
+                       FaxAccount.hasMany(models.FaxApplication);
+               }
+       });
+
+       return FaxAccount;
+};
index c0ebdf1..b4c6d10 100644 (file)
@@ -1 +1,33 @@
-var _0x1b91=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x46\x61\x78\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x71\x75\x65\x75\x65","\x61\x67\x65\x6E\x74","\x49\x4E\x54\x45\x47\x45\x52","\x53\x54\x52\x49\x4E\x47","\x2A\x7C\x2A\x7C\x2A\x7C\x2A","\x66\x61\x78\x5F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x62\x65\x6C\x6F\x6E\x67\x73\x54\x6F","\x64\x65\x66\x69\x6E\x65"];_0x1b91[0];module[_0x1b91[1]]=function(_0x5f07x1,_0x5f07x2){var _0x5f07x3=_0x5f07x1[_0x1b91[10]](_0x1b91[2],{app:{type:_0x5f07x2.ENUM(_0x1b91[3],_0x1b91[4])},appdata:{type:_0x5f07x2[_0x1b91[5]]},priority:{type:_0x5f07x2[_0x1b91[5]]},timeout:{type:_0x5f07x2[_0x1b91[5]]},interval:{type:_0x5f07x2[_0x1b91[6]],defaultValue:_0x1b91[7]}},{tableName:_0x1b91[8],associate:function(_0x5f07x4){_0x5f07x3[_0x1b91[9]](_0x5f07x4.FaxAccount);_0x5f07x3[_0x1b91[9]](_0x5f07x4.FaxQueue);_0x5f07x3[_0x1b91[9]](_0x5f07x4.User)}});return _0x5f07x3}
\ No newline at end of file
+'use strict';
+
+module.exports = function(sequelize, DataTypes) {
+
+  var FaxApplication = sequelize.define('FaxApplication', {
+    app: {
+      type: DataTypes.ENUM('queue', 'agent')
+    },
+    appdata: {
+      type: DataTypes.INTEGER
+    },
+    priority: {
+      type: DataTypes.INTEGER
+    },
+    timeout: {
+      type: DataTypes.INTEGER
+    },
+    interval: {
+      type: DataTypes.STRING,
+      defaultValue: '*|*|*|*'
+    }
+  }, {
+    tableName: 'fax_applications',
+    associate: function(models) {
+      // hasMany relations
+      FaxApplication.belongsTo(models.FaxAccount);
+      FaxApplication.belongsTo(models.FaxQueue);
+      FaxApplication.belongsTo(models.User);
+    }
+  });
+
+  return FaxApplication;
+};
index 86490b3..78700ac 100644 (file)
@@ -1 +1,63 @@
-var _0x23c5=["\x63\x72\x79\x70\x74\x6F","\x65\x78\x70\x6F\x72\x74\x73","\x46\x61\x78\x4D\x65\x73\x73\x61\x67\x65","\x53\x54\x52\x49\x4E\x47","\x49\x4E\x54\x45\x47\x45\x52","\x52\x45\x43\x45\x49\x56\x45\x44","\x4E\x4F\x54\x20\x53\x45\x4E\x54","\x53\x45\x4E\x44\x49\x4E\x47","\x53\x45\x4E\x54","\x46\x41\x49\x4C\x45\x44","\x42\x4F\x4F\x4C\x45\x41\x4E","\x54\x45\x58\x54","\x66\x61\x78\x5F\x6D\x65\x73\x73\x61\x67\x65\x73","\x62\x65\x6C\x6F\x6E\x67\x73\x54\x6F","\x46\x72\x6F\x6D","\x54\x6F","\x64\x65\x66\x69\x6E\x65"];var crypto=require(_0x23c5[0]);module[_0x23c5[1]]=function(_0x9294x2,_0x9294x3){var _0x9294x4=_0x9294x2[_0x23c5[16]](_0x23c5[2],{actionid:_0x9294x3[_0x23c5[3]],channel:_0x9294x3[_0x23c5[3]],channelstate:_0x9294x3[_0x23c5[4]],channelstatedesc:_0x9294x3[_0x23c5[3]],calleridnum:_0x9294x3[_0x23c5[3]],calleridname:_0x9294x3[_0x23c5[3]],connectedlinenum:_0x9294x3[_0x23c5[3]],connectedlinename:_0x9294x3[_0x23c5[3]],status:{type:_0x9294x3.ENUM(_0x23c5[5],_0x23c5[6],_0x23c5[7],_0x23c5[8],_0x23c5[9]),allowNull:true},read:{type:_0x9294x3[_0x23c5[10]],defaultValue:false},favorite:{type:_0x9294x3[_0x23c5[10]],defaultValue:false},language:_0x9294x3[_0x23c5[3]],accountcode:_0x9294x3[_0x23c5[3]],context:_0x9294x3[_0x23c5[3]],exten:_0x9294x3[_0x23c5[3]],priority:_0x9294x3[_0x23c5[4]],uniqueid:_0x9294x3[_0x23c5[3]],localstationid:_0x9294x3[_0x23c5[3]],remotestationid:_0x9294x3[_0x23c5[3]],pagestransferred:_0x9294x3[_0x23c5[4]],resolution:_0x9294x3[_0x23c5[3]],transferrate:_0x9294x3[_0x23c5[3]],filename:_0x9294x3[_0x23c5[3]],filenamePDF:_0x9294x3[_0x23c5[3]],operation:_0x9294x3[_0x23c5[3]],uuid:_0x9294x3[_0x23c5[3]],laststatus:_0x9294x3[_0x23c5[3]],error:_0x9294x3[_0x23c5[3]],body:_0x9294x3[_0x23c5[11]]},{tableName:_0x23c5[12],associate:function(_0x9294x5){_0x9294x4[_0x23c5[13]](_0x9294x5.FaxRoom);_0x9294x4[_0x23c5[13]](_0x9294x5.Contact,{as:_0x23c5[14]});_0x9294x4[_0x23c5[13]](_0x9294x5.Contact,{as:_0x23c5[15]})}});return _0x9294x4}
\ No newline at end of file
+/**
+ * Chat Website Model
+ */
+
+var crypto = require('crypto');
+
+module.exports = function(sequelize, DataTypes) {
+
+       var FaxMessage = sequelize.define('FaxMessage', {
+               actionid: DataTypes.STRING,
+               channel: DataTypes.STRING,
+               channelstate: DataTypes.INTEGER,
+               channelstatedesc: DataTypes.STRING,
+               calleridnum: DataTypes.STRING,
+               calleridname: DataTypes.STRING,
+               connectedlinenum: DataTypes.STRING,
+               connectedlinename: DataTypes.STRING,
+               status: {
+                       type: DataTypes.ENUM('RECEIVED', 'NOT SENT', 'SENDING', 'SENT',
+                               'FAILED'),
+                       allowNull: true
+               },
+               read: {
+                       type: DataTypes.BOOLEAN,
+                       defaultValue: false
+               },
+               favorite: {
+                       type: DataTypes.BOOLEAN,
+                       defaultValue: false
+               },
+               language: DataTypes.STRING,
+               accountcode: DataTypes.STRING,
+               context: DataTypes.STRING,
+               exten: DataTypes.STRING,
+               priority: DataTypes.INTEGER,
+               uniqueid: DataTypes.STRING,
+               localstationid: DataTypes.STRING,
+               remotestationid: DataTypes.STRING,
+               pagestransferred: DataTypes.INTEGER,
+               resolution: DataTypes.STRING,
+               transferrate: DataTypes.STRING,
+               filename: DataTypes.STRING,
+               filenamePDF: DataTypes.STRING,
+               operation: DataTypes.STRING,
+               uuid: DataTypes.STRING,
+               laststatus: DataTypes.STRING,
+               error: DataTypes.STRING,
+               body: DataTypes.TEXT
+       }, {
+               tableName: 'fax_messages',
+               associate: function(models) {
+                       FaxMessage.belongsTo(models.FaxRoom);
+                       FaxMessage.belongsTo(models.Contact, {
+                               as: 'From'
+                       });
+                       FaxMessage.belongsTo(models.Contact, {
+                               as: 'To'
+                       });
+               }
+       });
+
+       return FaxMessage;
+};
index f958c8f..035bad7 100644 (file)
@@ -1 +1,36 @@
-var _0xf081=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x46\x61\x78\x51\x75\x65\x75\x65","\x53\x54\x52\x49\x4E\x47","\x49\x4E\x54\x45\x47\x45\x52","\x72\x72\x6D\x65\x6D\x6F\x72\x79","\x62\x65\x65\x70\x61\x6C\x6C","\x66\x61\x78\x5F\x71\x75\x65\x75\x65\x73","\x55\x73\x65\x72\x48\x61\x73\x46\x61\x78\x51\x75\x65\x75\x65","\x62\x65\x6C\x6F\x6E\x67\x73\x54\x6F\x4D\x61\x6E\x79","\x64\x65\x66\x69\x6E\x65"];_0xf081[0];module[_0xf081[1]]=function(_0xb1f3x1,_0xb1f3x2){var _0xb1f3x3=_0xb1f3x1[_0xf081[10]](_0xf081[2],{name:{type:_0xb1f3x2[_0xf081[3]],unique:true,allowNull:false,validate:{notEmpty:true}},description:{type:_0xb1f3x2[_0xf081[3]]},timeout:{type:_0xb1f3x2[_0xf081[4]]},strategy:{type:_0xb1f3x2.ENUM(_0xf081[5],_0xf081[6])}},{tableName:_0xf081[7],associate:function(_0xb1f3x4){_0xb1f3x3[_0xf081[9]](_0xb1f3x4.User,{hooks:true,through:_0xb1f3x4[_0xf081[8]]})}});return _0xb1f3x3}
\ No newline at end of file
+'use strict';
+
+module.exports = function(sequelize, DataTypes) {
+
+  var FaxQueue = sequelize.define('FaxQueue', {
+    name: {
+      type: DataTypes.STRING,
+      unique: true,
+      allowNull: false,
+      validate: {
+        notEmpty: true,
+      }
+    },
+    description: {
+      type: DataTypes.STRING,
+    },
+    timeout: {
+      type: DataTypes.INTEGER,
+    },
+    strategy: {
+      type: DataTypes.ENUM('rrmemory', 'beepall')
+    }
+  }, {
+    tableName: 'fax_queues',
+    associate: function(models) {
+      // hasMany relations
+      FaxQueue.belongsToMany(models.User, {
+        hooks: true,
+        through: models.UserHasFaxQueue
+      });
+    }
+  });
+
+  return FaxQueue;
+
+};
index 5d8701e..112966e 100644 (file)
@@ -1 +1,25 @@
-var _0xbb2e=["\x63\x72\x79\x70\x74\x6F","\x65\x78\x70\x6F\x72\x74\x73","\x46\x61\x78\x52\x6F\x6F\x6D","\x53\x54\x52\x49\x4E\x47","\x4E\x45\x57","\x4F\x50\x45\x4E","\x50\x45\x4E\x44\x49\x4E\x47","\x53\x4F\x4C\x56\x45\x44","\x43\x4C\x4F\x53\x45\x44","\x66\x61\x78\x5F\x72\x6F\x6F\x6D\x73","\x68\x61\x73\x4D\x61\x6E\x79","\x62\x65\x6C\x6F\x6E\x67\x73\x54\x6F","\x64\x65\x66\x69\x6E\x65"];var crypto=require(_0xbb2e[0]);module[_0xbb2e[1]]=function(_0x4089x2,_0x4089x3){var _0x4089x4=_0x4089x2[_0xbb2e[12]](_0xbb2e[2],{roomId:_0x4089x3[_0xbb2e[3]],from:_0x4089x3[_0xbb2e[3]],status:_0x4089x3.ENUM(_0xbb2e[4],_0xbb2e[5],_0xbb2e[6],_0xbb2e[7],_0xbb2e[8])},{tableName:_0xbb2e[9],associate:function(_0x4089x5){_0x4089x4[_0xbb2e[10]](_0x4089x5.FaxMessage);_0x4089x4[_0xbb2e[11]](_0x4089x5.FaxAccount);_0x4089x4[_0xbb2e[11]](_0x4089x5.User)}});return _0x4089x4}
\ No newline at end of file
+/**
+ * Fax Room Model
+ */
+
+var crypto = require('crypto');
+
+module.exports = function(sequelize, DataTypes) {
+
+  var FaxRoom = sequelize.define('FaxRoom', {
+    roomId: DataTypes.STRING,
+    // subject: DataTypes.STRING,
+    from: DataTypes.STRING,
+    status: DataTypes.ENUM('NEW', 'OPEN', 'PENDING', 'SOLVED', 'CLOSED')
+  }, {
+    tableName: 'fax_rooms',
+    associate: function(models) {
+      // hasMany relations
+      FaxRoom.hasMany(models.FaxMessage);
+      FaxRoom.belongsTo(models.FaxAccount);
+      FaxRoom.belongsTo(models.User);
+    }
+  });
+
+  return FaxRoom;
+};
index dec30e3..f9f9f2b 100644 (file)
@@ -1 +1,33 @@
-var _0xde5b=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x46\x72\x65\x73\x68\x64\x65\x73\x6B\x41\x63\x63\x6F\x75\x6E\x74","\x53\x54\x52\x49\x4E\x47","\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x5F\x61\x63\x63\x6F\x75\x6E\x74\x73","\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73","\x41\x63\x63\x6F\x75\x6E\x74\x49\x64","\x68\x61\x73\x4D\x61\x6E\x79","\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73","\x46\x72\x65\x73\x68\x64\x65\x73\x6B\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x69\x64","\x6E\x61\x6D\x65","\x61\x64\x64\x53\x63\x6F\x70\x65","\x64\x65\x66\x69\x6E\x65"];_0xde5b[0];module[_0xde5b[1]]=function(_0x1cecx1,_0x1cecx2){return _0x1cecx1[_0xde5b[13]](_0xde5b[2],{name:_0x1cecx2[_0xde5b[3]],description:_0x1cecx2[_0xde5b[3]],username:{type:_0x1cecx2[_0xde5b[3]],unique:true},remoteUri:{type:_0x1cecx2[_0xde5b[3]],unique:true},apiKey:_0x1cecx2[_0xde5b[3]]},{tableName:_0xde5b[4],associate:function(_0x1cecx3){_0x1cecx3[_0xde5b[2]][_0xde5b[7]](_0x1cecx3.FreshdeskConfiguration,{as:_0xde5b[5],foreignKey:_0xde5b[6]});_0x1cecx3[_0xde5b[2]][_0xde5b[12]](_0xde5b[8],{include:[{model:_0x1cecx3[_0xde5b[9]],as:_0xde5b[5],required:false,attributes:[_0xde5b[10],_0xde5b[11]]}]})}})}
\ No newline at end of file
+'use strict';
+
+module.exports = function(sequelize, DataTypes) {
+  return sequelize.define('FreshdeskAccount', {
+    name: DataTypes.STRING,
+    description: DataTypes.STRING,
+    username: {
+      type: DataTypes.STRING,
+      unique: true
+    },
+    remoteUri: {
+      type: DataTypes.STRING,
+      unique: true
+    },
+    apiKey: DataTypes.STRING
+  }, {
+    tableName: 'freshdesk_accounts',
+    associate: function(models) {
+      models.FreshdeskAccount.hasMany(models.FreshdeskConfiguration, {
+        as: 'Configurations',
+        foreignKey: 'AccountId'
+      });
+      models.FreshdeskAccount.addScope('configurations', {
+        include: [{
+          model: models.FreshdeskConfiguration,
+          as: 'Configurations',
+          required: false,
+          attributes: ['id', 'name']
+        }]
+      });
+    }
+  });
+};
index b4afc2d..4a1299a 100644 (file)
@@ -1 +1,27 @@
-var _0x8863=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x46\x72\x65\x73\x68\x64\x65\x73\x6B\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x53\x54\x52\x49\x4E\x47","\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73","\x41\x63\x63\x6F\x75\x6E\x74\x49\x64","\x62\x65\x6C\x6F\x6E\x67\x73\x54\x6F","\x53\x75\x62\x6A\x65\x63\x74","\x53\x75\x62\x6A\x65\x63\x74\x49\x64","\x68\x61\x73\x4D\x61\x6E\x79","\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x49\x64","\x46\x69\x65\x6C\x64","\x46\x69\x65\x6C\x64\x49\x64","\x64\x65\x66\x69\x6E\x65"];_0x8863[0];module[_0x8863[1]]=function(_0xd4c7x1,_0xd4c7x2){return _0xd4c7x1[_0x8863[14]](_0x8863[2],{name:_0xd4c7x2[_0x8863[3]],description:_0xd4c7x2[_0x8863[3]]},{tableName:_0x8863[4],associate:function(_0xd4c7x3){_0xd4c7x3[_0x8863[2]][_0x8863[6]](_0xd4c7x3.FreshdeskAccount,{foreignKey:_0x8863[5]});_0xd4c7x3[_0x8863[2]][_0x8863[9]](_0xd4c7x3.FreshdeskField,{as:_0x8863[7],foreignKey:_0x8863[8]});_0xd4c7x3[_0x8863[2]][_0x8863[9]](_0xd4c7x3.FreshdeskField,{as:_0x8863[10],foreignKey:_0x8863[11]});_0xd4c7x3[_0x8863[2]][_0x8863[9]](_0xd4c7x3.FreshdeskField,{as:_0x8863[12],foreignKey:_0x8863[13]})}})}
\ No newline at end of file
+'use strict';
+
+module.exports = function(sequelize, DataTypes) {
+  return sequelize.define('FreshdeskConfiguration', {
+    name: DataTypes.STRING,
+    description: DataTypes.STRING
+  }, {
+    tableName: 'freshdesk_configurations',
+    associate: function(models) {
+      models.FreshdeskConfiguration.belongsTo(models.FreshdeskAccount, {
+        foreignKey: 'AccountId'
+      });
+      models.FreshdeskConfiguration.hasMany(models.FreshdeskField, {
+        as: 'Subject',
+        foreignKey: 'SubjectId'
+      });
+      models.FreshdeskConfiguration.hasMany(models.FreshdeskField, {
+        as: 'Description',
+        foreignKey: 'DescriptionId'
+      });
+      models.FreshdeskConfiguration.hasMany(models.FreshdeskField, {
+        as: 'Field',
+        foreignKey: 'FieldId'
+      });
+    }
+  });
+};
index 0109513..a1c54c9 100644 (file)
@@ -1 +1,26 @@
-var _0x6a2c=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x46\x72\x65\x73\x68\x64\x65\x73\x6B\x46\x69\x65\x6C\x64","\x73\x74\x72\x69\x6E\x67","\x76\x61\x72\x69\x61\x62\x6C\x65","\x6B\x65\x79\x5F\x76\x61\x6C\x75\x65","\x53\x54\x52\x49\x4E\x47","\x42\x4F\x4F\x4C\x45\x41\x4E","\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x5F\x66\x69\x65\x6C\x64\x73","\x62\x65\x6C\x6F\x6E\x67\x73\x54\x6F","\x64\x65\x66\x69\x6E\x65"];_0x6a2c[0];module[_0x6a2c[1]]=function(_0xb925x1,_0xb925x2){return _0xb925x1[_0x6a2c[10]](_0x6a2c[2],{type:{type:_0xb925x2.ENUM(_0x6a2c[3],_0x6a2c[4],_0x6a2c[5]),defaultValue:_0x6a2c[3]},content:_0xb925x2[_0x6a2c[6]],key:_0xb925x2[_0x6a2c[6]],keyType:{type:_0xb925x2.ENUM(_0x6a2c[3],_0x6a2c[4])},keyContent:_0xb925x2[_0x6a2c[6]],idField:_0xb925x2[_0x6a2c[6]],customField:{type:_0xb925x2[_0x6a2c[7]],defaultValue:true}},{tableName:_0x6a2c[8],associate:function(_0xb925x3){_0xb925x3[_0x6a2c[2]][_0x6a2c[9]](_0xb925x3.Variable)}})}
\ No newline at end of file
+'use strict';
+
+module.exports = function(sequelize, DataTypes) {
+  return sequelize.define('FreshdeskField', {
+    type: {
+      type: DataTypes.ENUM('string', 'variable', 'key_value'),
+      defaultValue: 'string'
+    },
+    content: DataTypes.STRING,
+    key: DataTypes.STRING,
+    keyType: {
+      type: DataTypes.ENUM('string', 'variable')
+    },
+    keyContent: DataTypes.STRING,
+    idField: DataTypes.STRING,
+    customField: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: true
+    }
+  }, {
+    tableName: 'freshdesk_fields',
+    associate: function(models) {
+      models.FreshdeskField.belongsTo(models.Variable);
+    }
+  });
+};
index c4f0151..5c42540 100644 (file)
@@ -1 +1,74 @@
-var _0x26ea=["\x6D\x6F\x6D\x65\x6E\x74","\x65\x78\x70\x6F\x72\x74\x73","\x52\x65\x70\x6F\x72\x74\x41\x67\x65\x6E\x74\x48\x69\x73\x74\x6F\x72\x79","\x53\x54\x52\x49\x4E\x47","\x44\x41\x54\x45","\x4D\x4D\x2D\x44\x44\x2D\x59\x59\x59\x59\x20\x48\x48\x3A\x6D\x6D","\x66\x6F\x72\x6D\x61\x74","\x61\x67\x65\x6E\x74\x63\x6F\x6E\x6E\x65\x63\x74\x41\x74","\x67\x65\x74\x44\x61\x74\x61\x56\x61\x6C\x75\x65","\x49\x4E\x54\x45\x47\x45\x52","\x42\x4F\x4F\x4C\x45\x41\x4E","\x72\x65\x70\x6F\x72\x74\x5F\x61\x67\x65\x6E\x74\x5F\x68\x69\x73\x74\x6F\x72\x79","\x64\x65\x66\x69\x6E\x65","\x69\x64","\x72\x65\x6D\x6F\x76\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65"];var moment=require(_0x26ea[0]);module[_0x26ea[1]]=function(_0x5e16x2,_0x5e16x3){var _0x5e16x4=_0x5e16x2[_0x26ea[12]](_0x26ea[2],{uniqueid:_0x5e16x3[_0x26ea[3]],calleridnum:_0x5e16x3[_0x26ea[3]],calleridname:_0x5e16x3[_0x26ea[3]],queue:_0x5e16x3[_0x26ea[3]],interface:_0x5e16x3[_0x26ea[3]],membername:_0x5e16x3[_0x26ea[3]],agentcalledAt:_0x5e16x3[_0x26ea[4]],agentconnectAt:{type:_0x5e16x3[_0x26ea[4]],get:function(){return moment(this[_0x26ea[8]](_0x26ea[7]))[_0x26ea[6]](_0x26ea[5])}},holdtime:_0x5e16x3[_0x26ea[9]],agentcomplete:{type:_0x5e16x3[_0x26ea[10]],defaultValue:false},agentcompleteAt:_0x5e16x3[_0x26ea[4]],talktime:_0x5e16x3[_0x26ea[9]],agentacw:{type:_0x5e16x3[_0x26ea[10]],defaultValue:false},acwtime:_0x5e16x3[_0x26ea[9]],reason:_0x5e16x3[_0x26ea[3]],agentringnoanswer:{type:_0x5e16x3[_0x26ea[10]],defaultValue:false},agentringnoanswerAt:_0x5e16x3[_0x26ea[4]],agentdump:{type:_0x5e16x3[_0x26ea[10]],defaultValue:false},agentdumpAt:_0x5e16x3[_0x26ea[4]],lastevent:_0x5e16x3[_0x26ea[3]],channel:_0x5e16x3[_0x26ea[3]],channelstate:_0x5e16x3[_0x26ea[9]],channelstatedesc:_0x5e16x3[_0x26ea[3]],connectedlinenum:_0x5e16x3[_0x26ea[3]],connectedlinename:_0x5e16x3[_0x26ea[3]],language:_0x5e16x3[_0x26ea[3]],accountcode:_0x5e16x3[_0x26ea[3]],context:_0x5e16x3[_0x26ea[3]],exten:_0x5e16x3[_0x26ea[3]],priority:_0x5e16x3[_0x26ea[3]],destchannel:_0x5e16x3[_0x26ea[3]],destchannelstate:_0x5e16x3[_0x26ea[9]],destchannelstatedesc:_0x5e16x3[_0x26ea[3]],destcalleridnum:_0x5e16x3[_0x26ea[3]],destcalleridname:_0x5e16x3[_0x26ea[3]],destconnectedlinenum:_0x5e16x3[_0x26ea[3]],destconnectedlinename:_0x5e16x3[_0x26ea[3]],destlanguage:_0x5e16x3[_0x26ea[3]],destaccountcode:_0x5e16x3[_0x26ea[3]],destcontext:_0x5e16x3[_0x26ea[3]],destexten:_0x5e16x3[_0x26ea[3]],destpriority:_0x5e16x3[_0x26ea[3]],destuniqueid:_0x5e16x3[_0x26ea[3]]},{tableName:_0x26ea[11]});_0x5e16x4[_0x26ea[14]](_0x26ea[13]);return _0x5e16x4}
\ No newline at end of file
+/**
+ * Agent Log Model
+ */
+var moment = require('moment');
+
+module.exports = function(sequelize, DataTypes) {
+  var ReportAgentHistory = sequelize.define('ReportAgentHistory', {
+    uniqueid: DataTypes.STRING,
+    calleridnum: DataTypes.STRING,
+    calleridname: DataTypes.STRING,
+    queue: DataTypes.STRING,
+    interface: DataTypes.STRING,
+    membername: DataTypes.STRING,
+    agentcalledAt: DataTypes.DATE,
+    agentconnectAt: {
+      type: DataTypes.DATE,
+      get: function() {
+        return moment(this.getDataValue('agentconnectAt')).format("MM-DD-YYYY HH:mm");
+      },
+    },
+    holdtime: DataTypes.INTEGER,
+    agentcomplete: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: false,
+    },
+    agentcompleteAt: DataTypes.DATE,
+    talktime: DataTypes.INTEGER,
+    agentacw: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: false,
+    },
+    acwtime: DataTypes.INTEGER,
+    reason: DataTypes.STRING,
+    agentringnoanswer: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: false,
+    },
+    agentringnoanswerAt: DataTypes.DATE,
+    agentdump: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: false,
+    },
+    agentdumpAt: DataTypes.DATE,
+    lastevent: DataTypes.STRING,
+    channel: DataTypes.STRING,
+    channelstate: DataTypes.INTEGER,
+    channelstatedesc: DataTypes.STRING,
+    connectedlinenum: DataTypes.STRING,
+    connectedlinename: DataTypes.STRING,
+    language: DataTypes.STRING,
+    accountcode: DataTypes.STRING,
+    context: DataTypes.STRING,
+    exten: DataTypes.STRING,
+    priority: DataTypes.STRING,
+    destchannel: DataTypes.STRING,
+    destchannelstate: DataTypes.INTEGER,
+    destchannelstatedesc: DataTypes.STRING,
+    destcalleridnum: DataTypes.STRING,
+    destcalleridname: DataTypes.STRING,
+    destconnectedlinenum: DataTypes.STRING,
+    destconnectedlinename: DataTypes.STRING,
+    destlanguage: DataTypes.STRING,
+    destaccountcode: DataTypes.STRING,
+    destcontext: DataTypes.STRING,
+    destexten: DataTypes.STRING,
+    destpriority: DataTypes.STRING,
+    destuniqueid: DataTypes.STRING
+  }, {
+    tableName: 'report_agent_history'
+  });
+
+  ReportAgentHistory.removeAttribute('id');
+  return ReportAgentHistory;
+};
index a25de95..0bda734 100644 (file)
@@ -1 +1,60 @@
-var _0x7dad=["\x65\x78\x70\x6F\x72\x74\x73","\x52\x65\x70\x6F\x72\x74\x43\x61\x6C\x6C\x48\x69\x73\x74\x6F\x72\x79","\x53\x54\x52\x49\x4E\x47","\x45\x4E\x55\x4D","\x69\x6E\x62\x6F\x75\x6E\x64","\x69\x6E\x74\x65\x72\x6E\x61\x6C","\x6F\x75\x74\x62\x6F\x75\x6E\x64","\x44\x41\x54\x45","","\x61\x6E\x73\x77\x65\x72\x74\x69\x6D\x65","\x73\x65\x74\x44\x61\x74\x61\x56\x61\x6C\x75\x65","\x49\x4E\x54\x45\x47\x45\x52","\x72\x65\x70\x6F\x72\x74\x5F\x63\x61\x6C\x6C\x5F\x68\x69\x73\x74\x6F\x72\x79","\x48\x69\x73\x74\x6F\x72\x79\x51\x75\x65\x75\x65\x43\x61\x6C\x6C\x73","\x75\x6E\x69\x71\x75\x65\x69\x64","\x68\x61\x73\x4D\x61\x6E\x79","\x48\x69\x73\x74\x6F\x72\x79\x52\x65\x70\x6F\x72\x74\x41\x67\x65\x6E\x74\x73","\x64\x65\x66\x69\x6E\x65"];module[_0x7dad[0]]=function(_0xa954x1,_0xa954x2){var _0xa954x3=_0xa954x1[_0x7dad[17]](_0x7dad[1],{uniqueid:{type:_0xa954x2[_0x7dad[2]],unique:true},type:{type:_0xa954x2[_0x7dad[3]],values:[_0x7dad[4],_0x7dad[5],_0x7dad[6]]},tag:_0xa954x2[_0x7dad[2]],accountcode:_0xa954x2[_0x7dad[2]],source:_0xa954x2[_0x7dad[2]],destination:_0xa954x2[_0x7dad[2]],destinationcontext:_0xa954x2[_0x7dad[2]],callerid:_0xa954x2[_0x7dad[2]],channel:_0xa954x2[_0x7dad[2]],destinationchannel:_0xa954x2[_0x7dad[2]],lastapplication:_0xa954x2[_0x7dad[2]],lastdata:_0xa954x2[_0x7dad[2]],starttime:_0xa954x2[_0x7dad[7]],answertime:{type:_0xa954x2[_0x7dad[7]],set:function(_0xa954x4){if(_0xa954x4!==_0x7dad[8]){this[_0x7dad[10]](_0x7dad[9],_0xa954x4)}else {this[_0x7dad[10]](_0x7dad[9],null)}}},endtime:_0xa954x2[_0x7dad[7]],duration:_0xa954x2[_0x7dad[11]],billableseconds:_0xa954x2[_0x7dad[11]],disposition:_0xa954x2[_0x7dad[2]],amaflags:_0xa954x2[_0x7dad[2]],userfield:_0xa954x2[_0x7dad[2]]},{tableName:_0x7dad[12],associate:function(_0xa954x5){_0xa954x3[_0x7dad[15]](_0xa954x5.ReportQueueHistory,{as:_0x7dad[13],foreignKey:_0x7dad[14],constraints:false});_0xa954x3[_0x7dad[15]](_0xa954x5.ReportAgentHistory,{as:_0x7dad[16],foreignKey:_0x7dad[14],constraints:false})}});return _0xa954x3}
\ No newline at end of file
+/**
+ * CDR Model
+ */
+
+module.exports = function(sequelize, DataTypes) {
+
+  var ReportCallHistory = sequelize.define('ReportCallHistory', {
+    uniqueid: {
+      type: DataTypes.STRING,
+      unique: true
+    },
+    type: {
+      type: DataTypes.ENUM,
+      values: ['inbound', 'internal', 'outbound']
+    },
+    tag: DataTypes.STRING,
+    accountcode: DataTypes.STRING,
+    source: DataTypes.STRING,
+    destination: DataTypes.STRING,
+    destinationcontext: DataTypes.STRING,
+    callerid: DataTypes.STRING,
+    channel: DataTypes.STRING,
+    destinationchannel: DataTypes.STRING,
+    lastapplication: DataTypes.STRING,
+    lastdata: DataTypes.STRING,
+    starttime: DataTypes.DATE,
+    answertime: {
+      type: DataTypes.DATE,
+      set: function(answertime) {
+        if (answertime !== '') {
+          this.setDataValue('answertime', answertime);
+        } else {
+          this.setDataValue('answertime', null);
+        }
+      }
+    },
+    endtime: DataTypes.DATE,
+    duration: DataTypes.INTEGER,
+    billableseconds: DataTypes.INTEGER,
+    disposition: DataTypes.STRING,
+    amaflags: DataTypes.STRING,
+    userfield: DataTypes.STRING
+  }, {
+    tableName: 'report_call_history',
+    associate: function(models) {
+      ReportCallHistory.hasMany(models.ReportQueueHistory, {
+        as: 'HistoryQueueCalls',
+        foreignKey: 'uniqueid',
+        constraints: false
+      });
+      ReportCallHistory.hasMany(models.ReportAgentHistory, {
+        as: 'HistoryReportAgents',
+        foreignKey: 'uniqueid',
+        constraints: false
+      });
+    }
+  });
+
+  return ReportCallHistory;
+};
index 62db635..d481e00 100644 (file)
@@ -1 +1,86 @@
-var _0x7ab9=["\x65\x78\x70\x6F\x72\x74\x73","\x52\x65\x70\x6F\x72\x74\x49\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x48\x69\x73\x74\x6F\x72\x79","\x53\x54\x52\x49\x4E\x47","\x49\x4E\x54\x45\x47\x45\x52","\x44\x41\x54\x45","\x42\x4F\x4F\x4C\x45\x41\x4E","\x54\x45\x58\x54","\x53\x45\x4E\x54","\x53\x45\x4E\x44\x49\x4E\x47","\x52\x45\x43\x45\x49\x56\x45\x44","\x46\x41\x49\x4C\x45\x44","\x72\x65\x70\x6F\x72\x74\x5F\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x5F\x68\x69\x73\x74\x6F\x72\x79","\x64\x65\x66\x69\x6E\x65","\x69\x64","\x72\x65\x6D\x6F\x76\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65"];module[_0x7ab9[0]]=function(_0x8b37x1,_0x8b37x2){var _0x8b37x3=_0x8b37x1[_0x7ab9[12]](_0x7ab9[1],{integration:_0x8b37x2[_0x7ab9[2]],eventChannel:_0x8b37x2[_0x7ab9[2]],exitStatus:_0x8b37x2[_0x7ab9[2]],ticketId:_0x8b37x2[_0x7ab9[2]],integrationId:_0x8b37x2[_0x7ab9[3]],uniqueid:_0x8b37x2[_0x7ab9[2]],calleridnum:_0x8b37x2[_0x7ab9[2]],calleridname:_0x8b37x2[_0x7ab9[2]],queue:_0x8b37x2[_0x7ab9[2]],interface:_0x8b37x2[_0x7ab9[2]],membername:_0x8b37x2[_0x7ab9[2]],agentcalledAt:_0x8b37x2[_0x7ab9[4]],agentconnectAt:_0x8b37x2[_0x7ab9[4]],holdtime:_0x8b37x2[_0x7ab9[3]],agentcomplete:{type:_0x8b37x2[_0x7ab9[5]],defaultValue:false},agentcompleteAt:_0x8b37x2[_0x7ab9[4]],talktime:_0x8b37x2[_0x7ab9[3]],agentacw:{type:_0x8b37x2[_0x7ab9[5]],defaultValue:false},acwtime:_0x8b37x2[_0x7ab9[3]],reason:_0x8b37x2[_0x7ab9[2]],agentringnoanswer:{type:_0x8b37x2[_0x7ab9[5]],defaultValue:false},agentringnoanswerAt:_0x8b37x2[_0x7ab9[4]],agentdump:{type:_0x8b37x2[_0x7ab9[5]],defaultValue:false},agentdumpAt:_0x8b37x2[_0x7ab9[4]],lastevent:_0x8b37x2[_0x7ab9[2]],channel:_0x8b37x2[_0x7ab9[2]],channelstate:_0x8b37x2[_0x7ab9[3]],channelstatedesc:_0x8b37x2[_0x7ab9[2]],connectedlinenum:_0x8b37x2[_0x7ab9[2]],connectedlinename:_0x8b37x2[_0x7ab9[2]],language:_0x8b37x2[_0x7ab9[2]],accountcode:_0x8b37x2[_0x7ab9[2]],context:_0x8b37x2[_0x7ab9[2]],exten:_0x8b37x2[_0x7ab9[2]],priority:_0x8b37x2[_0x7ab9[2]],destchannel:_0x8b37x2[_0x7ab9[2]],destchannelstate:_0x8b37x2[_0x7ab9[3]],destchannelstatedesc:_0x8b37x2[_0x7ab9[2]],destcalleridnum:_0x8b37x2[_0x7ab9[2]],destcalleridname:_0x8b37x2[_0x7ab9[2]],destconnectedlinenum:_0x8b37x2[_0x7ab9[2]],destconnectedlinename:_0x8b37x2[_0x7ab9[2]],destlanguage:_0x8b37x2[_0x7ab9[2]],destaccountcode:_0x8b37x2[_0x7ab9[2]],destcontext:_0x8b37x2[_0x7ab9[2]],destexten:_0x8b37x2[_0x7ab9[2]],destpriority:_0x8b37x2[_0x7ab9[2]],destuniqueid:_0x8b37x2[_0x7ab9[2]],messageId:_0x8b37x2[_0x7ab9[2]],inReplyTo:_0x8b37x2[_0x7ab9[2]],subject:_0x8b37x2[_0x7ab9[2]],from:_0x8b37x2[_0x7ab9[2]],to:_0x8b37x2[_0x7ab9[2]],cc:_0x8b37x2[_0x7ab9[2]],attachment:_0x8b37x2[_0x7ab9[6]],html:_0x8b37x2[_0x7ab9[6]],text:_0x8b37x2[_0x7ab9[6]],status:{type:_0x8b37x2.ENUM(_0x7ab9[7],_0x7ab9[8],_0x7ab9[9],_0x7ab9[10])}},{tableName:_0x7ab9[11]});_0x8b37x3[_0x7ab9[14]](_0x7ab9[13]);return _0x8b37x3}
\ No newline at end of file
+/**
+ * report_integrations Model
+ */
+
+module.exports = function(sequelize, DataTypes) {
+
+  var ReportIntegrationHistory = sequelize.define('ReportIntegrationHistory', {
+    integration: DataTypes.STRING,
+    eventChannel: DataTypes.STRING,
+    exitStatus: DataTypes.STRING,
+    ticketId: DataTypes.STRING,
+    integrationId: DataTypes.INTEGER,
+    uniqueid: DataTypes.STRING,
+    calleridnum: DataTypes.STRING,
+    calleridname: DataTypes.STRING,
+    queue: DataTypes.STRING,
+    interface: DataTypes.STRING,
+    membername: DataTypes.STRING,
+    agentcalledAt: DataTypes.DATE,
+    agentconnectAt: DataTypes.DATE,
+    holdtime: DataTypes.INTEGER,
+    agentcomplete: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: false,
+    },
+    agentcompleteAt: DataTypes.DATE,
+    talktime: DataTypes.INTEGER,
+    agentacw: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: false,
+    },
+    acwtime: DataTypes.INTEGER,
+    reason: DataTypes.STRING,
+    agentringnoanswer: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: false,
+    },
+    agentringnoanswerAt: DataTypes.DATE,
+    agentdump: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: false,
+    },
+    agentdumpAt: DataTypes.DATE,
+    lastevent: DataTypes.STRING,
+    channel: DataTypes.STRING,
+    channelstate: DataTypes.INTEGER,
+    channelstatedesc: DataTypes.STRING,
+    connectedlinenum: DataTypes.STRING,
+    connectedlinename: DataTypes.STRING,
+    language: DataTypes.STRING,
+    accountcode: DataTypes.STRING,
+    context: DataTypes.STRING,
+    exten: DataTypes.STRING,
+    priority: DataTypes.STRING,
+    destchannel: DataTypes.STRING,
+    destchannelstate: DataTypes.INTEGER,
+    destchannelstatedesc: DataTypes.STRING,
+    destcalleridnum: DataTypes.STRING,
+    destcalleridname: DataTypes.STRING,
+    destconnectedlinenum: DataTypes.STRING,
+    destconnectedlinename: DataTypes.STRING,
+    destlanguage: DataTypes.STRING,
+    destaccountcode: DataTypes.STRING,
+    destcontext: DataTypes.STRING,
+    destexten: DataTypes.STRING,
+    destpriority: DataTypes.STRING,
+    destuniqueid: DataTypes.STRING,
+    messageId: DataTypes.STRING,
+    inReplyTo: DataTypes.STRING,
+    subject: DataTypes.STRING,
+    from: DataTypes.STRING,
+    to: DataTypes.STRING,
+    cc: DataTypes.STRING,
+    attachment: DataTypes.TEXT,
+    html: DataTypes.TEXT,
+    text: DataTypes.TEXT,
+    status: {
+      type: DataTypes.ENUM('SENT', 'SENDING', 'RECEIVED', 'FAILED')
+    }
+  }, {
+    tableName: 'report_integration_history'
+  });
+
+  ReportIntegrationHistory.removeAttribute('id');
+  return ReportIntegrationHistory;
+};
index 6ae5093..e25f7ae 100644 (file)
@@ -1 +1,38 @@
-var _0x60e8=["\x6D\x6F\x6D\x65\x6E\x74","\x65\x78\x70\x6F\x72\x74\x73","\x52\x65\x70\x6F\x72\x74\x4D\x61\x69\x6C\x53\x65\x73\x73\x69\x6F\x6E\x48\x69\x73\x74\x6F\x72\x79","\x53\x54\x52\x49\x4E\x47","\x49\x4E\x54\x45\x47\x45\x52","\x44\x41\x54\x45","\x72\x65\x70\x6F\x72\x74\x5F\x6D\x61\x69\x6C\x5F\x73\x65\x73\x73\x69\x6F\x6E\x5F\x68\x69\x73\x74\x6F\x72\x79","\x64\x65\x66\x69\x6E\x65"];var moment=require(_0x60e8[0]);module[_0x60e8[1]]=function(_0x29f5x2,_0x29f5x3){var _0x29f5x4=_0x29f5x2[_0x60e8[7]](_0x60e8[2],{uniqueid:{type:_0x29f5x3[_0x60e8[3]],unique:true},subject:_0x29f5x3[_0x60e8[3]],accountid:_0x29f5x3[_0x60e8[3]],accountname:_0x29f5x3[_0x60e8[3]],accountaddress:_0x29f5x3[_0x60e8[3]],application:_0x29f5x3[_0x60e8[3]],memberid:_0x29f5x3[_0x60e8[3]],membername:_0x29f5x3[_0x60e8[3]],queue:_0x29f5x3[_0x60e8[4]],queuename:_0x29f5x3[_0x60e8[3]],roomid:_0x29f5x3[_0x60e8[4]],fidelity:{type:_0x29f5x3[_0x60e8[4]],defaultValue:0},holdtime:_0x29f5x3[_0x60e8[4]],queuecallerjoinAt:_0x29f5x3[_0x60e8[5]],queuecallerleaveAt:_0x29f5x3[_0x60e8[5]],queuecallerunmanagedAt:_0x29f5x3[_0x60e8[5]],queuecallerabandonedAt:_0x29f5x3[_0x60e8[5]]},{tableName:_0x60e8[6]});return _0x29f5x4}
\ No newline at end of file
+/**
+ * Agent Log Model
+ */
+
+var moment = require('moment');
+
+module.exports = function(sequelize, DataTypes) {
+
+  var ReportMailSession = sequelize.define('ReportMailSessionHistory', {
+    uniqueid: {
+      type: DataTypes.STRING,
+      unique: true
+    },
+    subject: DataTypes.STRING,
+    accountid: DataTypes.STRING,
+    accountname: DataTypes.STRING,
+    accountaddress: DataTypes.STRING,
+    application: DataTypes.STRING,
+    memberid: DataTypes.STRING,
+    membername: DataTypes.STRING,
+    queue: DataTypes.INTEGER,
+    queuename: DataTypes.STRING,
+    roomid: DataTypes.INTEGER,
+    fidelity: {
+      type: DataTypes.INTEGER,
+      defaultValue: 0
+    },
+    holdtime: DataTypes.INTEGER,
+    queuecallerjoinAt: DataTypes.DATE,
+    queuecallerleaveAt: DataTypes.DATE,
+    queuecallerunmanagedAt: DataTypes.DATE,
+    queuecallerabandonedAt: DataTypes.DATE
+  }, {
+    tableName: 'report_mail_session_history'
+  });
+
+  return ReportMailSession;
+};
index 8e0e5c9..b19ec9b 100644 (file)
@@ -1 +1,32 @@
-var _0xc76e=["\x65\x78\x70\x6F\x72\x74\x73","\x52\x65\x70\x6F\x72\x74\x4D\x65\x6D\x62\x65\x72\x48\x69\x73\x74\x6F\x72\x79","\x53\x54\x52\x49\x4E\x47","\x44\x45\x46\x41\x55\x4C\x54\x20\x50\x41\x55\x53\x45","\x49\x4E\x54\x45\x47\x45\x52","\x44\x41\x54\x45","\x72\x65\x70\x6F\x72\x74\x5F\x6D\x65\x6D\x62\x65\x72\x5F\x68\x69\x73\x74\x6F\x72\x79","\x64\x65\x66\x69\x6E\x65","\x69\x64","\x72\x65\x6D\x6F\x76\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65"];module[_0xc76e[0]]=function(_0x52c1x1,_0x52c1x2){var _0x52c1x3=_0x52c1x1[_0xc76e[7]](_0xc76e[1],{channel:_0x52c1x2[_0xc76e[2]],membername:_0x52c1x2[_0xc76e[2]],interface:_0x52c1x2[_0xc76e[2]],type:{type:_0x52c1x2[_0xc76e[2]],defaultValue:_0xc76e[3]},duration:_0x52c1x2[_0xc76e[4]],enterAt:_0x52c1x2[_0xc76e[5]],exitAt:_0x52c1x2[_0xc76e[5]],data1:_0x52c1x2[_0xc76e[2]],data2:_0x52c1x2[_0xc76e[2]],data3:_0x52c1x2[_0xc76e[2]],data4:_0x52c1x2[_0xc76e[2]],data5:_0x52c1x2[_0xc76e[2]]},{tableName:_0xc76e[6]});_0x52c1x3[_0xc76e[9]](_0xc76e[8]);return _0x52c1x3}
\ No newline at end of file
+/**
+ * DIAL Model
+ */
+
+module.exports = function(sequelize, DataTypes) {
+
+  var ReportMemberHistory = sequelize.define('ReportMemberHistory', {
+    channel: DataTypes.STRING,
+    membername: DataTypes.STRING,
+    interface: DataTypes.STRING,
+    type: {
+      type: DataTypes.STRING,
+      defaultValue: 'DEFAULT PAUSE'
+    },
+    duration: DataTypes.INTEGER,
+    enterAt: DataTypes.DATE,
+    exitAt: DataTypes.DATE,
+    data1: DataTypes.STRING,
+    data2: DataTypes.STRING,
+    data3: DataTypes.STRING,
+    data4: DataTypes.STRING,
+    data5: DataTypes.STRING
+  }, {
+    tableName: 'report_member_history',
+    // indexes: [{
+    //   fields: ['membername', 'enterdate', 'exitdate']
+    // }]
+  });
+
+  ReportMemberHistory.removeAttribute('id');
+  return ReportMemberHistory;
+};
index 9bbd158..8b1c216 100644 (file)
@@ -1 +1,49 @@
-var _0xa3c3=["\x65\x78\x70\x6F\x72\x74\x73","\x52\x65\x70\x6F\x72\x74\x51\x75\x65\x75\x65\x48\x69\x73\x74\x6F\x72\x79","\x53\x54\x52\x49\x4E\x47","\x44\x41\x54\x45","\x49\x4E\x54\x45\x47\x45\x52","\x42\x4F\x4F\x4C\x45\x41\x4E","\x72\x65\x70\x6F\x72\x74\x5F\x71\x75\x65\x75\x65\x5F\x68\x69\x73\x74\x6F\x72\x79","\x64\x65\x66\x69\x6E\x65","\x69\x64","\x72\x65\x6D\x6F\x76\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65"];module[_0xa3c3[0]]=function(_0xf622x1,_0xf622x2){var _0xf622x3=_0xf622x1[_0xa3c3[7]](_0xa3c3[1],{uniqueid:_0xf622x2[_0xa3c3[2]],calleridnum:_0xf622x2[_0xa3c3[2]],calleridname:_0xf622x2[_0xa3c3[2]],queue:_0xf622x2[_0xa3c3[2]],queuecallerjoinAt:_0xf622x2[_0xa3c3[3]],queuecallerleaveAt:_0xf622x2[_0xa3c3[3]],position:_0xf622x2[_0xa3c3[4]],count:_0xf622x2[_0xa3c3[4]],queuecallerabandon:{type:_0xf622x2[_0xa3c3[5]],defaultValue:false},queuecallerabandonAt:_0xf622x2[_0xa3c3[3]],queuecallercomplete:{type:_0xf622x2[_0xa3c3[5]],defaultValue:false},queuecallercompleteAt:_0xf622x2[_0xa3c3[3]],queuecallerexit:{type:_0xf622x2[_0xa3c3[5]],defaultValue:false},queuecallerexitAt:_0xf622x2[_0xa3c3[3]],queuecallerexitreason:_0xf622x2[_0xa3c3[2]],originalposition:_0xf622x2[_0xa3c3[4]],channel:_0xf622x2[_0xa3c3[2]],channelstate:_0xf622x2[_0xa3c3[4]],channelstatedesc:_0xf622x2[_0xa3c3[2]],connectedlinenum:_0xf622x2[_0xa3c3[2]],connectedlinename:_0xf622x2[_0xa3c3[2]],language:_0xf622x2[_0xa3c3[2]],accountcode:_0xf622x2[_0xa3c3[2]],context:_0xf622x2[_0xa3c3[2]],exten:_0xf622x2[_0xa3c3[2]],priority:_0xf622x2[_0xa3c3[2]]},{tableName:_0xa3c3[6]});_0xf622x3[_0xa3c3[9]](_0xa3c3[8]);return _0xf622x3}
\ No newline at end of file
+/**
+ * QueueLog Model
+ */
+
+module.exports = function(sequelize, DataTypes) {
+
+  var ReportQueueHistory = sequelize.define('ReportQueueHistory', {
+    uniqueid: DataTypes.STRING,
+    calleridnum: DataTypes.STRING,
+    calleridname: DataTypes.STRING,
+    queue: DataTypes.STRING,
+    queuecallerjoinAt: DataTypes.DATE,
+    queuecallerleaveAt: DataTypes.DATE,
+    position: DataTypes.INTEGER,
+    count: DataTypes.INTEGER,
+    queuecallerabandon: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: false
+    },
+    queuecallerabandonAt: DataTypes.DATE,
+    queuecallercomplete: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: false
+    },
+    queuecallercompleteAt: DataTypes.DATE,
+    queuecallerexit: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: false
+    },
+    queuecallerexitAt: DataTypes.DATE,
+    queuecallerexitreason: DataTypes.STRING,
+    originalposition: DataTypes.INTEGER,
+    channel: DataTypes.STRING,
+    channelstate: DataTypes.INTEGER,
+    channelstatedesc: DataTypes.STRING,
+    connectedlinenum: DataTypes.STRING,
+    connectedlinename: DataTypes.STRING,
+    language: DataTypes.STRING,
+    accountcode: DataTypes.STRING,
+    context: DataTypes.STRING,
+    exten: DataTypes.STRING,
+    priority: DataTypes.STRING,
+  }, {
+    tableName: 'report_queue_history'
+  });
+
+  ReportQueueHistory.removeAttribute('id');
+  return ReportQueueHistory;
+};
index bc3899f..00e56f7 100644 (file)
@@ -1 +1,86 @@
-var _0xc876=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x66\x73","\x70\x61\x74\x68","\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x6D\x6F\x6D\x65\x6E\x74","\x63\x6F\x6E\x66\x69\x67","\x50\x72\x6F\x6D\x69\x73\x65","\x64\x61\x74\x61\x62\x61\x73\x65","\x64\x62","\x75\x73\x65\x72\x6E\x61\x6D\x65","\x70\x61\x73\x73\x77\x6F\x72\x64","\x68\x6F\x73\x74","\x6D\x79\x73\x71\x6C","\x5A","\x66\x6F\x72\x6D\x61\x74","\x6A\x6F\x69\x6E","\x69\x6D\x70\x6F\x72\x74","\x6E\x61\x6D\x65","\x66\x6F\x72\x45\x61\x63\x68","\x69\x73\x46\x69\x6C\x65","\x6C\x73\x74\x61\x74\x53\x79\x6E\x63","\x2E","\x69\x6E\x64\x65\x78\x4F\x66","\x2E\x73\x70\x65\x63\x2E","\x69\x6E\x64\x65\x78\x2E\x6A\x73","\x66\x69\x6C\x74\x65\x72","\x72\x65\x61\x64\x64\x69\x72\x53\x79\x6E\x63","\x61\x73\x73\x6F\x63\x69\x61\x74\x65","\x68\x61\x73\x4F\x77\x6E\x50\x72\x6F\x70\x65\x72\x74\x79","\x6F\x70\x74\x69\x6F\x6E\x73","\x6B\x65\x79\x73","\x68\x69\x73\x74\x6F\x72\x79","\x64\x62\x5F\x68\x69\x73\x74\x6F\x72\x79","\x48\x69\x73\x74\x6F\x72\x79\x49\x6E\x62\x6F\x75\x6E\x64\x73","\x73\x6F\x75\x72\x63\x65","\x68\x61\x73\x4D\x61\x6E\x79","\x43\x6F\x6E\x74\x61\x63\x74\x50\x68\x6F\x6E\x65","\x48\x69\x73\x74\x6F\x72\x79\x4F\x75\x74\x62\x6F\x75\x6E\x64\x73","\x64\x65\x73\x74\x69\x6E\x61\x74\x69\x6F\x6E","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65\x5F\x68\x69\x73\x74\x6F\x72\x79","\x53\x65\x71\x75\x65\x6C\x69\x7A\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0xc876[0];var fs=require(_0xc876[1]);var path=require(_0xc876[2]);var config=require(_0xc876[3]);var Sequelize=require(_0xc876[4]);var moment=require(_0xc876[5]);Sequelize[_0xc876[7]][_0xc876[6]]({warnings:{wForgottenReturn:false}});var sequelize= new Sequelize(config[_0xc876[9]][_0xc876[8]],config[_0xc876[9]][_0xc876[10]],config[_0xc876[9]][_0xc876[11]],{host:config[_0xc876[9]][_0xc876[12]],dialect:_0xc876[13],timezone:moment()[_0xc876[15]](_0xc876[14]),logging:false});var db={};fs[_0xc876[27]](__dirname)[_0xc876[26]](function(_0x1c12x8){return (fs[_0xc876[21]](path[_0xc876[16]](__dirname,_0x1c12x8))[_0xc876[20]]())&&(_0x1c12x8[_0xc876[23]](_0xc876[22])!==0)&&(_0x1c12x8[_0xc876[23]](_0xc876[24])=== -1)&&(_0x1c12x8!==_0xc876[25])})[_0xc876[19]](function(_0x1c12x8){var _0x1c12x9=sequelize[_0xc876[17]](path[_0xc876[16]](__dirname,_0x1c12x8));db[_0x1c12x9[_0xc876[18]]]=_0x1c12x9});Object[_0xc876[31]](db)[_0xc876[19]](function(_0x1c12xa){if(db[_0x1c12xa][_0xc876[30]][_0xc876[29]](_0xc876[28])){db[_0x1c12xa][_0xc876[30]][_0xc876[28]](db)}});db[_0xc876[32]]={};var sequelize_history= new Sequelize(config[_0xc876[33]][_0xc876[8]],config[_0xc876[33]][_0xc876[10]],config[_0xc876[33]][_0xc876[11]],{host:config[_0xc876[33]][_0xc876[12]],dialect:_0xc876[13],timezone:moment()[_0xc876[15]](_0xc876[14]),logging:false});fs[_0xc876[27]](path[_0xc876[16]](__dirname,_0xc876[32]))[_0xc876[26]](function(_0x1c12x8){return (fs[_0xc876[21]](path[_0xc876[16]](__dirname,_0xc876[32],_0x1c12x8))[_0xc876[20]]())&&(_0x1c12x8[_0xc876[23]](_0xc876[22])!==0)&&(_0x1c12x8[_0xc876[23]](_0xc876[24])=== -1)&&(_0x1c12x8!==_0xc876[25])})[_0xc876[19]](function(_0x1c12x8){var _0x1c12x9=sequelize_history[_0xc876[17]](path[_0xc876[16]](__dirname,_0xc876[32],_0x1c12x8));db[_0xc876[32]][_0x1c12x9[_0xc876[18]]]=_0x1c12x9});Object[_0xc876[31]](db[_0xc876[32]])[_0xc876[19]](function(_0x1c12xa){if(db[_0xc876[32]][_0x1c12xa][_0xc876[30]][_0xc876[29]](_0xc876[28])){db[_0xc876[32]][_0x1c12xa][_0xc876[30]][_0xc876[28]](db[_0xc876[32]])}});db[_0xc876[37]][_0xc876[36]](db[_0xc876[32]].ReportCallHistory,{as:_0xc876[34],foreignKey:_0xc876[35],constraints:false});db[_0xc876[37]][_0xc876[36]](db[_0xc876[32]].ReportCallHistory,{as:_0xc876[38],foreignKey:_0xc876[39],constraints:false});db[_0xc876[4]]=sequelize;db[_0xc876[40]]=sequelize_history;db[_0xc876[41]]=Sequelize;module[_0xc876[42]]=db
\ No newline at end of file
+"use strict";
+
+var fs = require("fs");
+var path = require("path");
+var config = require('../config/environment');
+var Sequelize = require("sequelize");
+var moment = require('moment');
+
+//Used to disable all warnings for Promise!
+Sequelize.Promise.config({
+  // Enables all warnings except forgotten return statements.
+  warnings: {
+    wForgottenReturn: false
+  }
+});
+
+var sequelize = new Sequelize(config.db.database, config.db.username, config.db.password, {
+  host: config.db.host,
+  dialect: 'mysql',
+  timezone: moment().format("Z"),
+  logging: false
+});
+
+var db = {};
+
+fs
+  .readdirSync(__dirname)
+  .filter(function(file) {
+    return (fs.lstatSync(path.join(__dirname, file)).isFile()) &&
+      (file.indexOf(".") !== 0) && (file.indexOf('.spec.') === -1) && (file !== "index.js");
+  })
+  .forEach(function(file) {
+    var model = sequelize["import"](path.join(__dirname, file));
+    db[model.name] = model;
+  });
+
+// Invoke associations on each of the models
+Object.keys(db).forEach(function(modelName) {
+  if (db[modelName].options.hasOwnProperty('associate')) {
+    db[modelName].options.associate(db);
+  }
+});
+
+db.history = {};
+
+var sequelize_history = new Sequelize(config.db_history.database, config.db_history.username, config.db_history.password, {
+  host: config.db_history.host,
+  dialect: 'mysql',
+  timezone: moment().format("Z"),
+  logging: false
+});
+
+fs
+  .readdirSync(path.join(__dirname, 'history'))
+  .filter(function(file) {
+    return (fs.lstatSync(path.join(__dirname, 'history', file)).isFile()) &&
+      (file.indexOf(".") !== 0) && (file.indexOf('.spec.') === -1) && (file !== "index.js");
+  })
+  .forEach(function(file) {
+    var model = sequelize_history["import"](path.join(__dirname, 'history', file));
+    db.history[model.name] = model;
+  });
+
+// Invoke associations on each of the models
+Object.keys(db.history).forEach(function(modelName) {
+  if (db.history[modelName].options.hasOwnProperty('associate')) {
+    db.history[modelName].options.associate(db.history);
+  }
+});
+
+db.ContactPhone.hasMany(db.history.ReportCallHistory, {
+  as: 'HistoryInbounds',
+  foreignKey: 'source',
+  constraints: false
+});
+db.ContactPhone.hasMany(db.history.ReportCallHistory, {
+  as: 'HistoryOutbounds',
+  foreignKey: 'destination',
+  constraints: false
+});
+
+db.sequelize = sequelize;
+db.sequelize_history = sequelize_history;
+db.Sequelize = Sequelize;
+
+module.exports = db;
index 6135aad..1cbee6f 100644 (file)
@@ -1 +1,65 @@
-var _0xc206=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x49\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x53\x54\x52\x49\x4E\x47","\x75\x6E\x69\x71\x75\x65\x5F\x6E\x61\x6D\x65\x5F\x61\x6E\x64\x5F\x76\x65\x72\x73\x69\x6F\x6E","\x61\x70\x70\x2E\x6A\x73","\x49\x4E\x54\x45\x47\x45\x52","\x42\x4F\x4F\x4C\x45\x41\x4E","\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x73","\x64\x65\x66\x69\x6E\x65"];_0xc206[0];module[_0xc206[1]]=function(_0xdfaex1,_0xdfaex2){var _0xdfaex3=_0xdfaex1[_0xc206[9]](_0xc206[2],{name:{type:_0xdfaex2[_0xc206[3]],allowNull:false,unique:_0xc206[4],validate:{notEmpty:true}},version:{type:_0xdfaex2[_0xc206[3]],allowNull:false,unique:_0xc206[4],validate:{notEmpty:true}},main:{type:_0xdfaex2[_0xc206[3]],defaultValue:_0xc206[5]},filename:{type:_0xdfaex2[_0xc206[3]]},path:{type:_0xdfaex2[_0xc206[3]]},type:{type:_0xdfaex2[_0xc206[3]]},size:{type:_0xdfaex2[_0xc206[6]]},active:{type:_0xdfaex2[_0xc206[7]],defaultValue:false},author:_0xdfaex2[_0xc206[3]],logo:_0xdfaex2[_0xc206[3]],state:{type:_0xdfaex2[_0xc206[3]],unique:true},description:_0xdfaex2[_0xc206[3]]},{tableName:_0xc206[8]});return _0xdfaex3}
\ No newline at end of file
+'use strict';
+
+module.exports = function(sequelize, DataTypes) {
+
+  var Integration = sequelize.define('Integration', {
+    name: {
+      type: DataTypes.STRING,
+      allowNull: false,
+      unique: 'unique_name_and_version',
+      validate: {
+        notEmpty: true
+      }
+    },
+    version: {
+      type: DataTypes.STRING,
+      allowNull: false,
+      unique: 'unique_name_and_version',
+      validate: {
+        notEmpty: true
+      }
+    },
+    main: {
+      type: DataTypes.STRING,
+      defaultValue: 'app.js'
+    },
+    filename: {
+      type: DataTypes.STRING,
+      // allowNull: false,
+      // validate: {
+      //   notEmpty: true
+      // }
+    },
+    path: {
+      type: DataTypes.STRING,
+      // allowNull: false,
+      // validate: {
+      //   notEmpty: true
+      // }
+    },
+    type: {
+      type: DataTypes.STRING,
+      // allowNull: false
+    },
+    size: {
+      type: DataTypes.INTEGER,
+      // allowNull: false
+    },
+    active: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: false
+    },
+    author: DataTypes.STRING,
+    logo: DataTypes.STRING,
+    state: {
+      type: DataTypes.STRING,
+      unique: true
+    },
+    description: DataTypes.STRING
+  }, {
+    tableName: 'integrations'
+  });
+
+  return Integration;
+
+};
index 99d72dd..19e66f4 100644 (file)
@@ -1 +1,53 @@
-var _0x4d2b=["\x65\x78\x70\x6F\x72\x74\x73","\x49\x6E\x74\x65\x72\x76\x61\x6C","\x53\x54\x52\x49\x4E\x47","\x69\x6E\x74\x65\x72\x76\x61\x6C\x73","\x53\x75\x62\x49\x6E\x74\x65\x72\x76\x61\x6C\x73","\x63\x61\x73\x63\x61\x64\x65","\x68\x61\x73\x4D\x61\x6E\x79","\x56\x6F\x69\x63\x65\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E\x73","\x49\x6E\x74\x65\x72\x76\x61\x6C\x49\x64","\x72\x65\x73\x74\x72\x69\x63\x74","\x4D\x61\x69\x6C\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x43\x68\x61\x74\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x73\x75\x62\x69\x6E\x74\x65\x72\x76\x61\x6C\x73","\x6E\x61\x6D\x65","\x69\x6E\x74\x65\x72\x76\x61\x6C","\x61\x64\x64\x53\x63\x6F\x70\x65","\x64\x65\x66\x69\x6E\x65"];module[_0x4d2b[0]]=function(_0x4229x1,_0x4229x2){var _0x4229x3=_0x4229x1[_0x4d2b[16]](_0x4d2b[1],{name:{type:_0x4229x2[_0x4d2b[2]]},description:_0x4229x2[_0x4d2b[2]],interval:{type:_0x4229x2[_0x4d2b[2]],allowNull:true}},{tableName:_0x4d2b[3],associate:function(_0x4229x4){_0x4229x3[_0x4d2b[6]](_0x4229x4.Interval,{as:_0x4d2b[4],onDelete:_0x4d2b[5],hooks:true,required:false});_0x4229x3[_0x4d2b[6]](_0x4229x4.VoiceExtension,{as:_0x4d2b[7],foreignKey:_0x4d2b[8],onDelete:_0x4d2b[9]});_0x4229x3[_0x4d2b[6]](_0x4229x4.MailApplication,{as:_0x4d2b[10]});_0x4229x3[_0x4d2b[6]](_0x4229x4.MailApplication,{as:_0x4d2b[11]});_0x4229x3[_0x4d2b[15]](_0x4d2b[12],{include:[{model:_0x4229x4[_0x4d2b[1]],as:_0x4d2b[4],required:false,attributes:[_0x4d2b[13],_0x4d2b[14]]}]});_0x4229x3[_0x4d2b[15]](_0x4d2b[3],{where:{IntervalId:null}})}});return _0x4229x3}
\ No newline at end of file
+/* jshint indent: 2 */
+
+module.exports = function(sequelize, DataTypes) {
+  var Interval = sequelize.define('Interval', {
+    name: {
+      type: DataTypes.STRING
+    },
+    description: DataTypes.STRING,
+    interval: {
+      type: DataTypes.STRING,
+      allowNull: true
+    }
+  }, {
+    tableName: 'intervals',
+    associate: function(models) {
+      Interval.hasMany(models.Interval, {
+        as: 'SubIntervals',
+        onDelete: 'cascade',
+        hooks: true,
+        required: false
+      });
+      Interval.hasMany(models.VoiceExtension, {
+        as: 'VoiceExtensions',
+        foreignKey: 'IntervalId',
+        onDelete: 'restrict'
+      });
+      Interval.hasMany(models.MailApplication, {
+        as: 'MailApplications'
+      });
+      Interval.hasMany(models.MailApplication, {
+        as: 'ChatApplications'
+      });
+      // SCOPES MANAGEMENT
+      Interval.addScope('subintervals', {
+        include: [{
+          model: models.Interval,
+          as: 'SubIntervals',
+          required: false,
+          attributes: ['name', 'interval']
+        }]
+      });
+
+      Interval.addScope('intervals', {
+        where: {
+          IntervalId: null
+        }
+      });
+    }
+  });
+
+
+  return Interval;
+};
index 95a906c..c31f2e2 100644 (file)
@@ -1 +1,30 @@
-var _0xe963=["\x65\x78\x70\x6F\x72\x74\x73","\x4A\x73\x63\x72\x69\x70\x74\x79\x50\x72\x6F\x6A\x65\x63\x74","\x53\x54\x52\x49\x4E\x47","\x54\x45\x58\x54","\x6A\x73\x63\x72\x69\x70\x74\x79\x5F\x70\x72\x6F\x6A\x65\x63\x74\x73","\x70\x72\x6F\x6A\x65\x63\x74\x49\x64","\x68\x61\x73\x4D\x61\x6E\x79","\x64\x65\x66\x69\x6E\x65"];module[_0xe963[0]]=function(_0xd7e8x1,_0xd7e8x2){var _0xd7e8x3=_0xd7e8x1[_0xe963[7]](_0xe963[1],{name:{type:_0xd7e8x2[_0xe963[2]],unique:true},description:_0xd7e8x2[_0xe963[2]],draft:_0xd7e8x2[_0xe963[3]],production:_0xd7e8x2[_0xe963[3]]},{tableName:_0xe963[4],associate:function(_0xd7e8x4){_0xd7e8x3[_0xe963[6]](_0xd7e8x4.ReportJscriptySession,{foreignKey:_0xe963[5]});_0xd7e8x3[_0xe963[6]](_0xd7e8x4.ReportJscriptyQuestion,{foreignKey:_0xe963[5]})}});return _0xd7e8x3}
\ No newline at end of file
+/**
+ * Fax Room Model
+ */
+
+module.exports = function(sequelize, DataTypes) {
+
+  var JscriptyProject = sequelize.define('JscriptyProject', {
+    name: {
+      type: DataTypes.STRING,
+      unique: true
+    },
+    description: DataTypes.STRING,
+    draft: DataTypes.TEXT,
+    production: DataTypes.TEXT
+  }, {
+    tableName: 'jscripty_projects',
+    associate: function(models) {
+      JscriptyProject.hasMany(models.ReportJscriptySession, {
+        // as: 'sessions',
+        foreignKey: 'projectId'
+      });
+      JscriptyProject.hasMany(models.ReportJscriptyQuestion, {
+        // as: 'questions',
+        foreignKey: 'projectId'
+      });
+    }
+  });
+
+  return JscriptyProject;
+};
index 1f3071b..84f4aa6 100644 (file)
@@ -1 +1,66 @@
-var _0xf356=["\x65\x78\x70\x6F\x72\x74\x73","\x4D\x61\x69\x6C\x41\x63\x63\x6F\x75\x6E\x74","\x53\x54\x52\x49\x4E\x47","\x42\x4F\x4F\x4C\x45\x41\x4E","\x49\x4E\x54\x45\x47\x45\x52","\x6D\x61\x69\x6C\x5F\x61\x63\x63\x6F\x75\x6E\x74\x73","\x68\x61\x73\x4D\x61\x6E\x79","\x63\x61\x73\x63\x61\x64\x65","\x68\x61\x73\x4F\x6E\x65","\x64\x65\x66\x61\x75\x6C\x74","\x4D\x61\x69\x6C\x53\x65\x72\x76\x65\x72\x49\x6E","\x69\x64","\x68\x6F\x73\x74","\x70\x6F\x72\x74","\x75\x73\x65\x72\x6E\x61\x6D\x65","\x70\x61\x73\x73\x77\x6F\x72\x64","\x73\x73\x6C","\x64\x65\x6C\x65\x74\x65","\x66\x69\x6C\x74\x65\x72","\x73\x74\x61\x74\x65","\x6D\x61\x69\x6C\x62\x6F\x78","\x4D\x61\x69\x6C\x53\x65\x72\x76\x65\x72\x4F\x75\x74","\x73\x65\x72\x76\x69\x63\x65","\x4D\x61\x69\x6C\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x55\x73\x65\x72","\x6E\x61\x6D\x65","\x65\x6D\x61\x69\x6C","\x69\x6E\x74\x65\x72\x6E\x61\x6C","\x66\x75\x6C\x6C\x6E\x61\x6D\x65","\x4D\x61\x69\x6C\x51\x75\x65\x75\x65","\x61\x64\x64\x53\x63\x6F\x70\x65","\x64\x65\x66\x69\x6E\x65"];module[_0xf356[0]]=function(_0x7973x1,_0x7973x2){var _0x7973x3=_0x7973x1[_0xf356[31]](_0xf356[1],{description:_0x7973x2[_0xf356[2]],name:{type:_0x7973x2[_0xf356[2]]},address:{type:_0x7973x2[_0xf356[2]],unique:true},fidelity:{type:_0x7973x2[_0xf356[3]],defaultValue:false},timeout:{type:_0x7973x2[_0xf356[4]],defaultValue:0}},{tableName:_0xf356[5],associate:function(_0x7973x4){_0x7973x3[_0xf356[6]](_0x7973x4.MailRoom);_0x7973x3[_0xf356[6]](_0x7973x4.MailApplication);_0x7973x3[_0xf356[8]](_0x7973x4.MailServerIn,{onDelete:_0xf356[7],hooks:true});_0x7973x3[_0xf356[8]](_0x7973x4.MailServerOut,{onDelete:_0xf356[7],hooks:true});_0x7973x3[_0xf356[30]](_0xf356[9],{include:[{model:_0x7973x4[_0xf356[10]],attributes:[_0xf356[11],_0xf356[12],_0xf356[13],_0xf356[14],_0xf356[15],_0xf356[16],_0xf356[17],_0xf356[18],_0xf356[19],_0xf356[20]]},{model:_0x7973x4[_0xf356[21]],attributes:[_0xf356[11],_0xf356[12],_0xf356[13],_0xf356[14],_0xf356[15],_0xf356[16],_0xf356[22],_0xf356[19]]},{model:_0x7973x4[_0xf356[23]],include:[{model:_0x7973x4[_0xf356[24]],attributes:[_0xf356[11],_0xf356[25],_0xf356[26],_0xf356[27],_0xf356[28]]},{model:_0x7973x4[_0xf356[29]]}]}]})}});return _0x7973x3}
\ No newline at end of file
+/**
+ * Chat Website Model
+ */
+
+module.exports = function(sequelize, DataTypes) {
+
+       var MailAccount = sequelize.define('MailAccount', {
+               description: DataTypes.STRING,
+               name: {
+                       type: DataTypes.STRING
+               },
+               address: {
+                       type: DataTypes.STRING,
+                       unique: true
+               },
+               fidelity: {
+                       type: DataTypes.BOOLEAN,
+                       defaultValue: false
+               },
+               timeout: {
+                       type: DataTypes.INTEGER,
+                       defaultValue: 0
+               }
+       }, {
+               tableName: 'mail_accounts',
+               associate: function(models) {
+                       // RELATIONS
+                       MailAccount.hasMany(models.MailRoom);
+                       MailAccount.hasMany(models.MailApplication);
+                       MailAccount.hasOne(models.MailServerIn, {
+                               onDelete: 'cascade',
+                               hooks: true
+                       });
+                       MailAccount.hasOne(models.MailServerOut, {
+                               onDelete: 'cascade',
+                               hooks: true
+                       });
+
+                       // SCOPES
+                       MailAccount.addScope('default', {
+                               include: [{
+                                       model: models.MailServerIn,
+                                       attributes: ['id', 'host', 'port', 'username', 'password', 'ssl', 'delete', 'filter', 'state', 'mailbox']
+                               }, {
+                                       model: models.MailServerOut,
+                                       attributes: ['id', 'host', 'port', 'username', 'password', 'ssl', 'service', 'state']
+                               }, {
+                                       model: models.MailApplication,
+                                       include: [{
+                                               model: models.User,
+                                               attributes: ['id',
+                                                       'name',
+                                                       'email',
+                                                       'internal',
+                                                       'fullname'
+                                               ]
+                                       }, {
+                                               model: models.MailQueue
+                                       }]
+                               }]
+                       });
+               }
+       });
+
+       return MailAccount;
+};
index b3fabb7..f4a7a03 100644 (file)
@@ -1 +1,36 @@
-var _0x6516=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x4D\x61\x69\x6C\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x71\x75\x65\x75\x65","\x61\x67\x65\x6E\x74","\x49\x4E\x54\x45\x47\x45\x52","\x53\x54\x52\x49\x4E\x47","\x6D\x61\x69\x6C\x5F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x72\x65\x73\x74\x72\x69\x63\x74","\x62\x65\x6C\x6F\x6E\x67\x73\x54\x6F","\x64\x65\x66\x69\x6E\x65"];_0x6516[0];module[_0x6516[1]]=function(_0xb106x1,_0xb106x2){var _0xb106x3=_0xb106x1[_0x6516[10]](_0x6516[2],{app:{type:_0xb106x2.ENUM(_0x6516[3],_0x6516[4])},priority:{type:_0xb106x2[_0x6516[5]]},timeout:{type:_0xb106x2[_0x6516[5]]},interval:{type:_0xb106x2[_0x6516[6]]}},{tableName:_0x6516[7],associate:function(_0xb106x4){_0xb106x3[_0x6516[9]](_0xb106x4.User,{onDelete:_0x6516[8]});_0xb106x3[_0x6516[9]](_0xb106x4.Interval);_0xb106x3[_0x6516[9]](_0xb106x4.MailQueue,{onDelete:_0x6516[8]});_0xb106x3[_0x6516[9]](_0xb106x4.MailAccount,{onDelete:_0x6516[8]})}});return _0xb106x3}
\ No newline at end of file
+'use strict';
+
+module.exports = function(sequelize, DataTypes) {
+
+  var MailApplication = sequelize.define('MailApplication', {
+    app: {
+      type: DataTypes.ENUM('queue', 'agent')
+    },
+    priority: {
+      type: DataTypes.INTEGER
+    },
+    timeout: {
+      type: DataTypes.INTEGER
+    },
+    interval: {
+      type: DataTypes.STRING
+    }
+  }, {
+    tableName: 'mail_applications',
+    associate: function(models) {
+      // hasMany relations
+      MailApplication.belongsTo(models.User, {
+        onDelete: 'restrict'
+      });
+      MailApplication.belongsTo(models.Interval);
+      MailApplication.belongsTo(models.MailQueue, {
+        onDelete: 'restrict'
+      });
+      MailApplication.belongsTo(models.MailAccount, {
+        onDelete: 'restrict'
+      });
+    }
+  });
+
+  return MailApplication;
+};
index 37d66d6..9b2efb5 100644 (file)
@@ -1 +1,21 @@
-var _0xdf40=["\x63\x72\x79\x70\x74\x6F","\x65\x78\x70\x6F\x72\x74\x73","\x4D\x61\x69\x6C\x41\x74\x74\x61\x63\x68\x6D\x65\x6E\x74","\x53\x54\x52\x49\x4E\x47","\x49\x4E\x54\x45\x47\x45\x52","\x6D\x61\x69\x6C\x5F\x61\x74\x74\x61\x63\x68\x6D\x65\x6E\x74\x73","\x64\x65\x66\x69\x6E\x65"];var crypto=require(_0xdf40[0]);module[_0xdf40[1]]=function(_0x733cx2,_0x733cx3){var _0x733cx4=_0x733cx2[_0xdf40[6]](_0xdf40[2],{domain:_0x733cx3[_0xdf40[3]],size:_0x733cx3[_0xdf40[4]],path:_0x733cx3[_0xdf40[3]],name:_0x733cx3[_0xdf40[3]],basename:_0x733cx3[_0xdf40[3]],type:_0x733cx3[_0xdf40[3]]},{tableName:_0xdf40[5]});return _0x733cx4}
\ No newline at end of file
+/**
+ * Chat Website Model
+ */
+
+var crypto = require('crypto');
+
+module.exports = function (sequelize, DataTypes) {
+
+       var MailAttachment = sequelize.define('MailAttachment', {
+               domain: DataTypes.STRING,
+               size: DataTypes.INTEGER,
+               path: DataTypes.STRING,
+               name: DataTypes.STRING,
+               basename: DataTypes.STRING,
+               type: DataTypes.STRING
+       }, {
+               tableName: 'mail_attachments'
+       });
+
+       return MailAttachment;
+};
index 3994d1a..218cb9c 100644 (file)
@@ -1 +1,23 @@
-var _0x2b4c=["\x63\x72\x79\x70\x74\x6F","\x65\x78\x70\x6F\x72\x74\x73","\x4D\x61\x69\x6C\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E","\x53\x54\x52\x49\x4E\x47","\x54\x45\x58\x54","\x42\x4F\x4F\x4C\x45\x41\x4E","\x6D\x61\x69\x6C\x5F\x61\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x73","\x64\x65\x66\x69\x6E\x65"];var crypto=require(_0x2b4c[0]);module[_0x2b4c[1]]=function(_0xcaabx2,_0xcaabx3){var _0xcaabx4=_0xcaabx2[_0x2b4c[7]](_0x2b4c[2],{name:_0xcaabx3[_0x2b4c[3]],description:_0xcaabx3[_0x2b4c[3]],conditions:_0xcaabx3[_0x2b4c[4]],actions:_0xcaabx3[_0x2b4c[4]],status:{type:_0xcaabx3[_0x2b4c[5]],defaultValue:false}},{tableName:_0x2b4c[6]});return _0xcaabx4}
\ No newline at end of file
+/**
+ * User Model
+ */
+
+var crypto = require('crypto');
+
+module.exports = function(sequelize, DataTypes) {
+
+  var MailAutomation = sequelize.define('MailAutomation', {
+    name: DataTypes.STRING,
+    description: DataTypes.STRING,
+    conditions: DataTypes.TEXT,
+    actions: DataTypes.TEXT,
+    status: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: false
+    }
+  }, {
+    tableName: 'mail_automations'
+  });
+
+  return MailAutomation;
+};
index ee50842..50675a7 100644 (file)
@@ -1 +1,88 @@
-var _0x5d00=["\x63\x72\x79\x70\x74\x6F","\x65\x78\x70\x6F\x72\x74\x73","\x4D\x61\x69\x6C\x4D\x65\x73\x73\x61\x67\x65","\x53\x54\x52\x49\x4E\x47","\x66\x72\x6F\x6D","\x67\x65\x74\x44\x61\x74\x61\x56\x61\x6C\x75\x65","\x3B","\x73\x70\x6C\x69\x74","\x6A\x6F\x69\x6E","\x73\x65\x74\x44\x61\x74\x61\x56\x61\x6C\x75\x65","\x74\x6F","\x63\x63","\x62\x63\x63","\x54\x45\x58\x54","\x42\x4C\x4F\x42","\x74\x65\x78\x74","\x68\x74\x6D\x6C","\x53\x45\x4E\x54","\x53\x45\x4E\x44\x49\x4E\x47","\x52\x45\x43\x45\x49\x56\x45\x44","\x46\x41\x49\x4C\x45\x44","\x4E\x4F\x54\x45","\x6D\x61\x69\x6C\x5F\x6D\x65\x73\x73\x61\x67\x65\x73","\x68\x61\x73\x4D\x61\x6E\x79","\x62\x65\x6C\x6F\x6E\x67\x73\x54\x6F","\x63\x61\x73\x63\x61\x64\x65","\x64\x65\x66\x69\x6E\x65"];var crypto=require(_0x5d00[0]);module[_0x5d00[1]]=function(_0xd0cax2,_0xd0cax3){var _0xd0cax4=_0xd0cax2[_0x5d00[26]](_0x5d00[2],{messageId:_0xd0cax3[_0x5d00[3]],inReplyTo:_0xd0cax3[_0x5d00[3]],subject:_0xd0cax3[_0x5d00[3]],from:{type:_0xd0cax3[_0x5d00[3]],get:function(){return this[_0x5d00[5]](_0x5d00[4])?this[_0x5d00[5]](_0x5d00[4])[_0x5d00[7]](_0x5d00[6]):[]},set:function(_0xd0cax5){this[_0x5d00[9]](_0x5d00[4],_0xd0cax5[_0x5d00[8]](_0x5d00[6]))}},to:{type:_0xd0cax3[_0x5d00[3]],get:function(){return this[_0x5d00[5]](_0x5d00[10])?this[_0x5d00[5]](_0x5d00[10])[_0x5d00[7]](_0x5d00[6]):[]},set:function(_0xd0cax5){this[_0x5d00[9]](_0x5d00[10],_0xd0cax5[_0x5d00[8]](_0x5d00[6]))}},cc:{type:_0xd0cax3[_0x5d00[3]],get:function(){return this[_0x5d00[5]](_0x5d00[11])?this[_0x5d00[5]](_0x5d00[11])[_0x5d00[7]](_0x5d00[6]):[]},set:function(_0xd0cax5){this[_0x5d00[9]](_0x5d00[11],_0xd0cax5[_0x5d00[8]](_0x5d00[6]))}},bcc:{type:_0xd0cax3[_0x5d00[3]],get:function(){return this[_0x5d00[5]](_0x5d00[12])?this[_0x5d00[5]](_0x5d00[12])[_0x5d00[7]](_0x5d00[6]):[]},set:function(_0xd0cax5){this[_0x5d00[9]](_0x5d00[12],_0xd0cax5[_0x5d00[8]](_0x5d00[6]))}},attachment:_0xd0cax3[_0x5d00[13]],text:{type:_0xd0cax3[_0x5d00[14]],get:function(){if(this[_0x5d00[5]](_0x5d00[15])){return this[_0x5d00[5]](_0x5d00[15]).toString()}}},html:{type:_0xd0cax3[_0x5d00[14]],get:function(){if(this[_0x5d00[5]](_0x5d00[16])){return this[_0x5d00[5]](_0x5d00[16]).toString()}}},reason:_0xd0cax3[_0x5d00[13]],status:{type:_0xd0cax3.ENUM(_0x5d00[17],_0x5d00[18],_0x5d00[19],_0x5d00[20],_0x5d00[21]),defaultValue:_0x5d00[18]}},{tableName:_0x5d00[22],paranoid:true,associate:function(_0xd0cax6){_0xd0cax4[_0x5d00[23]](_0xd0cax6.MailAttachment);_0xd0cax4[_0x5d00[24]](_0xd0cax6.User);_0xd0cax4[_0x5d00[24]](_0xd0cax6.MailRoom,{onDelete:_0x5d00[25]});_0xd0cax4[_0x5d00[24]](_0xd0cax6.ContactEmail,{foreignKey:_0x5d00[4],constraints:false})}});return _0xd0cax4}
\ No newline at end of file
+/**
+ * Chat Website Model
+ */
+
+var crypto = require('crypto');
+
+module.exports = function(sequelize, DataTypes) {
+
+       var MailMessage = sequelize.define('MailMessage', {
+               messageId: DataTypes.STRING,
+               inReplyTo: DataTypes.STRING,
+               subject: DataTypes.STRING,
+               from: {
+                       type: DataTypes.STRING,
+                       get: function() {
+                               return this.getDataValue('from') ? this.getDataValue('from').split(';') : [];
+                       },
+                       set: function(val) {
+                               this.setDataValue('from', val.join(';'));
+                       }
+               },
+               to: {
+                       type: DataTypes.STRING,
+                       get: function() {
+                               return this.getDataValue('to') ? this.getDataValue('to').split(';') : [];
+                       },
+                       set: function(val) {
+                               this.setDataValue('to', val.join(';'));
+                       }
+               },
+               cc: {
+                       type: DataTypes.STRING,
+                       get: function() {
+                               return this.getDataValue('cc') ? this.getDataValue('cc').split(';') : [];
+                       },
+                       set: function(val) {
+                               this.setDataValue('cc', val.join(';'));
+                       }
+               },
+               bcc: {
+                       type: DataTypes.STRING,
+                       get: function() {
+                               return this.getDataValue('bcc') ? this.getDataValue('bcc').split(';') : [];
+                       },
+                       set: function(val) {
+                               this.setDataValue('bcc', val.join(';'));
+                       }
+               },
+               attachment: DataTypes.TEXT,
+               text: {
+                       type: DataTypes.BLOB,
+                       get: function() {
+                               if (this.getDataValue('text')) {
+                                       return this.getDataValue('text').toString();
+                               }
+                       }
+               },
+               html: {
+                       type: DataTypes.BLOB,
+                       get: function() {
+                               if (this.getDataValue('html')) {
+                                       return this.getDataValue('html').toString();
+                               }
+                       }
+               },
+               reason: DataTypes.TEXT,
+               status: {
+                       type: DataTypes.ENUM('SENT', 'SENDING', 'RECEIVED', 'FAILED', 'NOTE'),
+                       defaultValue: 'SENDING'
+               }
+       }, {
+               tableName: 'mail_messages',
+               paranoid: true,
+               associate: function(models) {
+                       MailMessage.hasMany(models.MailAttachment);
+                       MailMessage.belongsTo(models.User);
+                       MailMessage.belongsTo(models.MailRoom, {
+                               onDelete: 'cascade'
+                       });
+                       MailMessage.belongsTo(models.ContactEmail, {
+                               foreignKey: 'from',
+                               constraints: false
+                       });
+               }
+       });
+
+       return MailMessage;
+};
index 8bfb38f..421dc37 100644 (file)
@@ -1 +1,37 @@
-var _0x4147=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x4D\x61\x69\x6C\x51\x75\x65\x75\x65","\x53\x54\x52\x49\x4E\x47","\x49\x4E\x54\x45\x47\x45\x52","\x72\x72\x6D\x65\x6D\x6F\x72\x79","\x62\x65\x65\x70\x61\x6C\x6C","\x6D\x61\x69\x6C\x5F\x71\x75\x65\x75\x65\x73","\x55\x73\x65\x72\x48\x61\x73\x4D\x61\x69\x6C\x51\x75\x65\x75\x65","\x62\x65\x6C\x6F\x6E\x67\x73\x54\x6F\x4D\x61\x6E\x79","\x64\x65\x66\x61\x75\x6C\x74","\x55\x73\x65\x72","\x69\x64","\x6E\x61\x6D\x65","\x66\x75\x6C\x6C\x6E\x61\x6D\x65","\x65\x6D\x61\x69\x6C","\x6F\x6E\x6C\x69\x6E\x65","\x6C\x61\x73\x74\x4C\x6F\x67\x69\x6E\x41\x74","\x6D\x61\x69\x6C\x50\x61\x75\x73\x65","\x70\x61\x75\x73\x65\x54\x79\x70\x65","\x61\x64\x64\x53\x63\x6F\x70\x65","\x64\x65\x66\x69\x6E\x65"];_0x4147[0];module[_0x4147[1]]=function(_0x4c86x1,_0x4c86x2){var _0x4c86x3=_0x4c86x1[_0x4147[21]](_0x4147[2],{name:{type:_0x4c86x2[_0x4147[3]],unique:true},description:{type:_0x4c86x2[_0x4147[3]]},timeout:{type:_0x4c86x2[_0x4147[4]]},strategy:{type:_0x4c86x2.ENUM(_0x4147[5],_0x4147[6])}},{tableName:_0x4147[7],associate:function(_0x4c86x4){_0x4c86x3[_0x4147[9]](_0x4c86x4.User,{through:_0x4c86x4[_0x4147[8]]});_0x4c86x3[_0x4147[20]](_0x4147[10],{include:[{model:_0x4c86x4[_0x4147[11]],attributes:[_0x4147[12],_0x4147[13],_0x4147[14],_0x4147[15],_0x4147[16],_0x4147[17],_0x4147[18],_0x4147[19]]}]})}});return _0x4c86x3}
\ No newline at end of file
+'use strict';
+
+module.exports = function(sequelize, DataTypes) {
+
+  var MailQueue = sequelize.define('MailQueue', {
+    name: {
+      type: DataTypes.STRING,
+      unique: true
+    },
+    description: {
+      type: DataTypes.STRING,
+    },
+    timeout: {
+      type: DataTypes.INTEGER,
+    },
+    strategy: {
+      type: DataTypes.ENUM('rrmemory', 'beepall')
+    }
+  }, {
+    tableName: 'mail_queues',
+    associate: function(models) {
+      // RELATIONS
+      MailQueue.belongsToMany(models.User, {
+        through: models.UserHasMailQueue
+      });
+      //SCOPES
+      MailQueue.addScope('default', {
+        include: [{
+          model: models.User,
+          attributes: ['id', 'name', 'fullname', 'email', 'online', 'lastLoginAt', 'mailPause', 'pauseType']
+        }]
+      });
+    }
+  });
+
+  return MailQueue;
+};
index 1e13234..13d7977 100644 (file)
@@ -1 +1,63 @@
-var _0xea10=["\x65\x78\x70\x6F\x72\x74\x73","\x4D\x61\x69\x6C\x52\x6F\x6F\x6D","\x53\x54\x52\x49\x4E\x47","\x42\x4F\x4F\x4C\x45\x41\x4E","\x4E\x45\x57","\x4F\x50\x45\x4E","\x43\x4C\x4F\x53\x45\x44","\x6D\x61\x69\x6C\x5F\x72\x6F\x6F\x6D\x73","\x68\x61\x73\x4D\x61\x6E\x79","\x62\x65\x6C\x6F\x6E\x67\x73\x54\x6F","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x6D\x61\x69\x6C\x5F\x72\x6F\x6F\x6D\x73","\x62\x65\x6C\x6F\x6E\x67\x73\x54\x6F\x4D\x61\x6E\x79","\x64\x65\x66\x61\x75\x6C\x74","\x63\x72\x65\x61\x74\x65\x64\x41\x74","\x44\x45\x53\x43","\x4D\x61\x69\x6C\x41\x63\x63\x6F\x75\x6E\x74","\x4D\x61\x69\x6C\x4D\x65\x73\x73\x61\x67\x65","\x4D\x61\x69\x6C\x41\x74\x74\x61\x63\x68\x6D\x65\x6E\x74","\x55\x73\x65\x72","\x69\x64","\x6E\x61\x6D\x65","\x66\x75\x6C\x6C\x6E\x61\x6D\x65","\x65\x6D\x61\x69\x6C","\x61\x64\x64\x53\x63\x6F\x70\x65","\x61\x67\x65\x6E\x74","\x64\x65\x66\x69\x6E\x65"];module[_0xea10[0]]=function(_0xeca7x1,_0xeca7x2){var _0xeca7x3=_0xeca7x1[_0xea10[25]](_0xea10[1],{subject:_0xeca7x2[_0xea10[2]],from:_0xeca7x2[_0xea10[2]],attachment:{type:_0xeca7x2[_0xea10[3]],defaultValue:false},status:{type:_0xeca7x2.ENUM(_0xea10[4],_0xea10[5],_0xea10[6]),defaultValue:_0xea10[4]}},{tableName:_0xea10[7],paranoid:true,associate:function(_0xeca7x4){_0xeca7x3[_0xea10[8]](_0xeca7x4.MailMessage);_0xeca7x3[_0xea10[9]](_0xeca7x4.MailAccount);_0xeca7x3[_0xea10[11]](_0xeca7x4.User,{through:_0xea10[10]});_0xeca7x3[_0xea10[23]](_0xea10[12],{order:[[_0xea10[13],_0xea10[14]]],include:[{model:_0xeca7x4[_0xea10[15]]},{model:_0xeca7x4[_0xea10[16]],include:[{model:_0xeca7x4[_0xea10[17]]},{model:_0xeca7x4[_0xea10[18]],attributes:[_0xea10[19],_0xea10[20],_0xea10[21],_0xea10[22]]}]},{model:_0xeca7x4[_0xea10[18]],attributes:[_0xea10[19],_0xea10[20],_0xea10[21],_0xea10[22]]}]});_0xeca7x3[_0xea10[23]](_0xea10[24],function(_0xeca7x5){return {include:[{model:_0xeca7x4[_0xea10[18]],where:{id:_0xeca7x5}}]}})}});return _0xeca7x3}
\ No newline at end of file
+/**
+ * Chat Website Model
+ */
+
+
+module.exports = function(sequelize, DataTypes) {
+       var MailRoom = sequelize.define('MailRoom', {
+               subject: DataTypes.STRING,
+               from: DataTypes.STRING,
+               attachment: {
+                       type: DataTypes.BOOLEAN,
+                       defaultValue: false
+               },
+               status: {
+                       type: DataTypes.ENUM('NEW', 'OPEN', 'CLOSED'),
+                       defaultValue: 'NEW'
+               }
+       }, {
+               tableName: 'mail_rooms',
+               paranoid: true,
+               associate: function(models) {
+                       // BINDING
+                       MailRoom.hasMany(models.MailMessage);
+                       MailRoom.belongsTo(models.MailAccount);
+                       MailRoom.belongsToMany(models.User, {
+                               through: 'user_has_mail_rooms'
+                       });
+                       // SCOPES
+                       MailRoom.addScope('default', {
+                               order: [
+                                       ['createdAt', 'DESC']
+                               ],
+                               include: [{
+                                       model: models.MailAccount
+                               }, {
+                                       model: models.MailMessage,
+                                       include: [{
+                                               model: models.MailAttachment
+                                       }, {
+                                               model: models.User,
+                                               attributes: ['id', 'name', 'fullname', 'email']
+                                       }]
+                               }, {
+                                       model: models.User,
+                                       attributes: ['id', 'name', 'fullname', 'email']
+                               }]
+                       });
+
+                       MailRoom.addScope('agent', function(id) {
+                               return {
+                                       include: [{
+                                               model: models.User,
+                                               where: {
+                                                       id: id
+                                               }
+                                       }]
+                               }
+                       });
+               }
+       });
+
+       return MailRoom;
+};
index c8b73ba..20b29e9 100644 (file)
@@ -1 +1,14 @@
-var _0x75fe=["\x65\x78\x70\x6F\x72\x74\x73","\x4D\x61\x69\x6C\x52\x6F\x6F\x6D\x53\x74\x61\x74\x75\x73","\x52\x45\x43\x45\x49\x56\x45\x44","\x41\x53\x53\x49\x47\x4E\x45\x44","\x52\x45\x50\x4C\x49\x45\x44","\x41\x52\x43\x48\x49\x56\x45\x44","\x6D\x61\x69\x6C\x5F\x72\x6F\x6F\x6D\x5F\x73\x74\x61\x74\x65\x73","\x64\x65\x66\x69\x6E\x65"];module[_0x75fe[0]]=function(_0xacb2x1,_0xacb2x2){var _0xacb2x3=_0xacb2x1[_0x75fe[7]](_0x75fe[1],{status:_0xacb2x2.ENUM(_0x75fe[2],_0x75fe[3],_0x75fe[4],_0x75fe[5])},{tableName:_0x75fe[6]});return _0xacb2x3}
\ No newline at end of file
+/**
+ * Chat Website Model
+ */
+
+module.exports = function(sequelize, DataTypes) {
+
+       var MailRoomStatus = sequelize.define('MailRoomStatus', {
+               status: DataTypes.ENUM('RECEIVED', 'ASSIGNED', 'REPLIED', 'ARCHIVED')
+       }, {
+               tableName: 'mail_room_states'
+       });
+
+       return MailRoomStatus;
+};
index 80e74c6..bb7f978 100644 (file)
@@ -1 +1,44 @@
-var _0x13d6=["\x63\x72\x79\x70\x74\x6F","\x65\x78\x70\x6F\x72\x74\x73","\x4D\x61\x69\x6C\x53\x65\x72\x76\x65\x72\x49\x6E","\x53\x54\x52\x49\x4E\x47","\x49\x4E\x54\x45\x47\x45\x52","\x42\x4F\x4F\x4C\x45\x41\x4E","\x55\x4E\x53\x45\x45\x4E","\x49\x4D\x41\x50","\x50\x4F\x50\x33","\x43\x4F\x4E\x4E\x45\x43\x54\x45\x44","\x44\x49\x53\x43\x4F\x4E\x4E\x45\x43\x54\x45\x44","\x45\x52\x52\x4F\x52","\x55\x4E\x4B\x4E\x4F\x57\x4E","\x6D\x61\x69\x6C\x5F\x73\x65\x72\x76\x65\x72\x73\x5F\x69\x6E","\x64\x65\x66\x69\x6E\x65"];var crypto=require(_0x13d6[0]);module[_0x13d6[1]]=function(_0xda3cx2,_0xda3cx3){var _0xda3cx4=_0xda3cx2[_0x13d6[14]](_0x13d6[2],{description:_0xda3cx3[_0x13d6[3]],host:_0xda3cx3[_0x13d6[3]],username:{type:_0xda3cx3[_0x13d6[3]],unique:true},password:_0xda3cx3[_0x13d6[3]],port:_0xda3cx3[_0x13d6[4]],mailbox:_0xda3cx3[_0x13d6[3]],ssl:{type:_0xda3cx3[_0x13d6[5]],defaultValue:false},delete:{type:_0xda3cx3[_0x13d6[5]],defaultValue:false},filter:{type:_0xda3cx3.ENUM(_0x13d6[6]),defaultValue:_0x13d6[6]},protocol:{type:_0xda3cx3.ENUM(_0x13d6[7],_0x13d6[8]),defaultValue:_0x13d6[7]},state:{type:_0xda3cx3.ENUM(_0x13d6[9],_0x13d6[10],_0x13d6[11],_0x13d6[12]),defaultValue:_0x13d6[12]}},{tableName:_0x13d6[13]});return _0xda3cx4}
\ No newline at end of file
+/**
+ * Chat Website Model
+ */
+
+var crypto = require('crypto');
+
+module.exports = function(sequelize, DataTypes) {
+
+       var MailServerIn = sequelize.define('MailServerIn', {
+               description: DataTypes.STRING,
+               host: DataTypes.STRING,
+               username: {
+                       type: DataTypes.STRING,
+                       unique: true
+               },
+               password: DataTypes.STRING,
+               port: DataTypes.INTEGER,
+               mailbox: DataTypes.STRING,
+               ssl: {
+                       type: DataTypes.BOOLEAN,
+                       defaultValue: false
+               },
+               delete: {
+                       type: DataTypes.BOOLEAN,
+                       defaultValue: false
+               },
+               filter: {
+                       type: DataTypes.ENUM('UNSEEN'),
+                       defaultValue: 'UNSEEN'
+               },
+               protocol: {
+                       type: DataTypes.ENUM('IMAP', 'POP3'),
+                       defaultValue: 'IMAP'
+               },
+               state: {
+                       type: DataTypes.ENUM('CONNECTED', 'DISCONNECTED', 'ERROR', 'UNKNOWN'),
+                       defaultValue: 'UNKNOWN'
+               }
+       }, {
+               tableName: 'mail_servers_in'
+       });
+
+       return MailServerIn;
+};
index b74b0f8..5394b23 100644 (file)
@@ -1 +1,32 @@
-var _0x1309=["\x65\x78\x70\x6F\x72\x74\x73","\x4D\x61\x69\x6C\x53\x65\x72\x76\x65\x72\x4F\x75\x74","\x53\x54\x52\x49\x4E\x47","\x49\x4E\x54\x45\x47\x45\x52","\x42\x4F\x4F\x4C\x45\x41\x4E","\x43\x4F\x4E\x4E\x45\x43\x54\x45\x44","\x44\x49\x53\x43\x4F\x4E\x4E\x45\x43\x54\x45\x44","\x45\x52\x52\x4F\x52","\x55\x4E\x4B\x4E\x4F\x57\x4E","\x6D\x61\x69\x6C\x5F\x73\x65\x72\x76\x65\x72\x73\x5F\x6F\x75\x74","\x64\x65\x66\x69\x6E\x65"];module[_0x1309[0]]=function(_0xa025x1,_0xa025x2){var _0xa025x3=_0xa025x1[_0x1309[10]](_0x1309[1],{description:_0xa025x2[_0x1309[2]],host:_0xa025x2[_0x1309[2]],username:{type:_0xa025x2[_0x1309[2]],unique:true},password:_0xa025x2[_0x1309[2]],port:_0xa025x2[_0x1309[3]],ssl:{type:_0xa025x2[_0x1309[4]],defaultValue:false},service:{type:_0xa025x2[_0x1309[4]],defaultValue:false},state:{type:_0xa025x2.ENUM(_0x1309[5],_0x1309[6],_0x1309[7],_0x1309[8]),defaultValue:_0x1309[8]}},{tableName:_0x1309[9]});return _0xa025x3}
\ No newline at end of file
+/**
+ *
+ */
+module.exports = function(sequelize, DataTypes) {
+
+       var MailServerOut = sequelize.define('MailServerOut', {
+               description: DataTypes.STRING,
+               host: DataTypes.STRING,
+               username: {
+                       type: DataTypes.STRING,
+                       unique: true
+               },
+               password: DataTypes.STRING,
+               port: DataTypes.INTEGER,
+               ssl: {
+                       type: DataTypes.BOOLEAN,
+                       defaultValue: false
+               },
+               service: {
+                       type: DataTypes.BOOLEAN,
+                       defaultValue: false
+               },
+               state: {
+                       type: DataTypes.ENUM('CONNECTED', 'DISCONNECTED', 'ERROR', 'UNKNOWN'),
+                       defaultValue: 'UNKNOWN'
+               },
+       }, {
+               tableName: 'mail_servers_out'
+       });
+
+       return MailServerOut;
+};
index 61d7f8e..4856564 100644 (file)
@@ -1 +1,21 @@
-var _0x690b=["\x63\x72\x79\x70\x74\x6F","\x65\x78\x70\x6F\x72\x74\x73","\x4D\x61\x69\x6C\x54\x65\x6D\x70\x6C\x61\x74\x65","\x53\x54\x52\x49\x4E\x47","\x54\x45\x58\x54","\x6D\x61\x69\x6C\x5F\x74\x65\x6D\x70\x6C\x61\x74\x65\x73","\x64\x65\x66\x69\x6E\x65"];var crypto=require(_0x690b[0]);module[_0x690b[1]]=function(_0x1f93x2,_0x1f93x3){var _0x1f93x4=_0x1f93x2[_0x690b[6]](_0x690b[2],{name:_0x1f93x3[_0x690b[3]],description:_0x1f93x3[_0x690b[3]],subject:_0x1f93x3[_0x690b[3]],attachment:_0x1f93x3[_0x690b[4]],html:_0x1f93x3[_0x690b[4]],text:_0x1f93x3[_0x690b[4]]},{tableName:_0x690b[5]});return _0x1f93x4}
\ No newline at end of file
+/**
+ * Chat Website Model
+ */
+
+var crypto = require('crypto');
+
+module.exports = function(sequelize, DataTypes) {
+
+       var MailTemplate = sequelize.define('MailTemplate', {
+               name: DataTypes.STRING,
+               description: DataTypes.STRING,
+               subject: DataTypes.STRING,
+               attachment: DataTypes.TEXT,
+               html: DataTypes.TEXT,
+               text: DataTypes.TEXT
+       }, {
+               tableName: 'mail_templates'
+       });
+
+       return MailTemplate;
+};
index f8ccd72..73be985 100644 (file)
@@ -1 +1,23 @@
-var _0xd5a2=["\x63\x72\x79\x70\x74\x6F","\x65\x78\x70\x6F\x72\x74\x73","\x4D\x61\x69\x6C\x54\x72\x69\x67\x67\x65\x72","\x53\x54\x52\x49\x4E\x47","\x54\x45\x58\x54","\x42\x4F\x4F\x4C\x45\x41\x4E","\x6D\x61\x69\x6C\x5F\x74\x72\x69\x67\x67\x65\x72\x73","\x64\x65\x66\x69\x6E\x65"];var crypto=require(_0xd5a2[0]);module[_0xd5a2[1]]=function(_0x4520x2,_0x4520x3){var _0x4520x4=_0x4520x2[_0xd5a2[7]](_0xd5a2[2],{name:_0x4520x3[_0xd5a2[3]],description:_0x4520x3[_0xd5a2[3]],conditions:_0x4520x3[_0xd5a2[4]],actions:_0x4520x3[_0xd5a2[4]],status:{type:_0x4520x3[_0xd5a2[5]],defaultValue:false}},{tableName:_0xd5a2[6]});return _0x4520x4}
\ No newline at end of file
+/**
+ * User Model
+ */
+
+var crypto = require('crypto');
+
+module.exports = function(sequelize, DataTypes) {
+
+  var MailTrigger = sequelize.define('MailTrigger', {
+    name: DataTypes.STRING,
+    description: DataTypes.STRING,
+    conditions: DataTypes.TEXT,
+    actions: DataTypes.TEXT,
+    status: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: false
+    }
+  }, {
+    tableName: 'mail_triggers'
+  });
+
+  return MailTrigger;
+};
index 8d3f36f..dfd57d2 100644 (file)
@@ -1 +1,37 @@
-var _0x797b=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x4D\x65\x74\x72\x69\x63","\x53\x54\x52\x49\x4E\x47","\x54\x45\x58\x54","\x6D\x65\x74\x72\x69\x63\x73","\x52\x65\x70\x6F\x72\x74\x46\x69\x65\x6C\x64\x73","\x68\x61\x73\x4D\x61\x6E\x79","\x61\x74\x74\x72","\x6E\x61\x6D\x65","\x74\x61\x62\x6C\x65","\x6D\x65\x74\x72\x69\x63","\x61\x64\x64\x53\x63\x6F\x70\x65","\x64\x65\x66\x69\x6E\x65"];_0x797b[0];module[_0x797b[1]]=function(_0x834cx1,_0x834cx2){var _0x834cx3=_0x834cx1[_0x797b[13]](_0x797b[2],{name:{type:_0x834cx2[_0x797b[3]],unique:true,validate:{notEmpty:true}},table:_0x834cx2[_0x797b[3]],metric:_0x834cx2[_0x797b[4]],description:_0x834cx2[_0x797b[3]]},{tableName:_0x797b[5],associate:function(_0x834cx4){_0x834cx3[_0x797b[7]](_0x834cx4.ReportField,{as:_0x797b[6]});_0x834cx3[_0x797b[12]](_0x797b[8],{attributes:[_0x797b[9],_0x797b[10],_0x797b[11]]})}});return _0x834cx3}
\ No newline at end of file
+'use strict';
+
+module.exports = function(sequelize, DataTypes) {
+
+  var Metric = sequelize.define('Metric', {
+    name: {
+      type: DataTypes.STRING,
+      unique: true,
+      validate: {
+        notEmpty: true
+      },
+    },
+    table: DataTypes.STRING,
+    metric: DataTypes.TEXT,
+    description: DataTypes.STRING
+  }, {
+    tableName: 'metrics',
+    associate: function(models) {
+      Metric.hasMany(models.ReportField, {
+        as: 'ReportFields'
+      });
+      Metric.addScope('attr', {
+        attributes: ['name', 'table', 'metric']
+      });
+      // Metric.addScope('fields', {
+      //   include: [{
+      //     model: models.ReportField,
+      //     as: 'ReportFields',
+      //     required: false
+      //   }]
+      // });
+    }
+  });
+
+  return Metric;
+
+};
index ea86145..c2bef6c 100644 (file)
@@ -1 +1,27 @@
-var _0x7f1a=["\x65\x78\x70\x6F\x72\x74\x73","\x4D\x6F\x64\x75\x6C\x65","\x53\x54\x52\x49\x4E\x47","\x6D\x6F\x64\x75\x6C\x65\x73","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x6D\x6F\x64\x75\x6C\x65\x73","\x62\x65\x6C\x6F\x6E\x67\x73\x54\x6F\x4D\x61\x6E\x79","\x64\x65\x66\x69\x6E\x65"];module[_0x7f1a[0]]=function(_0x75ffx1,_0x75ffx2){var _0x75ffx3=_0x75ffx1[_0x7f1a[6]](_0x7f1a[1],{name:{type:_0x75ffx2[_0x7f1a[2]],unique:true,allowNull:false,validate:{notEmpty:true}},title:_0x75ffx2[_0x7f1a[2]]},{tableName:_0x7f1a[3],associate:function(_0x75ffx4){_0x75ffx3[_0x7f1a[5]](_0x75ffx4.User,{through:_0x7f1a[4]})}});return _0x75ffx3}
\ No newline at end of file
+/**
+ * Module Model
+ */
+
+module.exports = function(sequelize, DataTypes) {
+
+  var Module = sequelize.define('Module', {
+    name: {
+      type: DataTypes.STRING,
+      unique: true,
+      allowNull: false,
+      validate: {
+        notEmpty: true
+      }
+    },
+    title: DataTypes.STRING
+  }, {
+    tableName: 'modules',
+    associate: function(models) {
+      Module.belongsToMany(models.User, {
+        through: 'user_has_modules'
+      });
+    }
+  });
+
+  return Module;
+};
index efbcafc..ad6cba8 100644 (file)
@@ -1 +1,32 @@
-var _0x70b6=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x4D\x6F\x74\x69\x6F\x6E\x62\x61\x72","\x45\x4E\x55\x4D","\x68\x61\x6E\x67\x75\x70","\x69\x6E\x63\x6F\x6D\x69\x6E\x67","\x61\x63\x74\x69\x76\x65","\x53\x54\x52\x49\x4E\x47","\x6D\x6F\x74\x69\x6F\x6E\x62\x61\x72","\x41\x64\x6D\x69\x6E","\x62\x65\x6C\x6F\x6E\x67\x73\x54\x6F","\x55\x73\x65\x72","\x64\x65\x66\x69\x6E\x65"];_0x70b6[0];module[_0x70b6[1]]=function(_0xfe1ax1,_0xfe1ax2){var _0xfe1ax3=_0xfe1ax1[_0x70b6[12]](_0x70b6[2],{action:{type:_0xfe1ax2[_0x70b6[3]],values:[_0x70b6[4]],allowNull:false},state:{type:_0xfe1ax2[_0x70b6[3]],values:[_0x70b6[5],_0x70b6[6]]},phone:{type:_0xfe1ax2[_0x70b6[7]]}},{tableName:_0x70b6[8],associate:function(_0xfe1ax4){_0xfe1ax3[_0x70b6[10]](_0xfe1ax4.User,{as:_0x70b6[9]});_0xfe1ax3[_0x70b6[10]](_0xfe1ax4.User,{as:_0x70b6[11]})}});return _0xfe1ax3}
\ No newline at end of file
+'use strict';
+
+module.exports = function(sequelize, DataTypes) {
+
+  var Motionbar = sequelize.define('Motionbar', {
+    action: {
+      type: DataTypes.ENUM,
+      values: ['hangup'],
+      allowNull: false
+    },
+    state: {
+      type: DataTypes.ENUM,
+      values: ['incoming', 'active'],
+    },
+    phone: {
+      type: DataTypes.STRING
+    }
+  }, {
+    tableName: 'motionbar',
+    associate: function(models) {
+      Motionbar.belongsTo(models.User, {
+        as: 'Admin'
+      });
+      Motionbar.belongsTo(models.User, {
+        as: 'User'
+      });
+    }
+  });
+
+  return Motionbar;
+
+};
index c4db19e..ee1ef95 100644 (file)
@@ -1 +1,25 @@
-var _0xc4d1=["\x65\x78\x70\x6F\x72\x74\x73","\x50\x61\x75\x73\x65","\x53\x54\x52\x49\x4E\x47","\x70\x61\x75\x73\x65\x73","\x64\x65\x66\x69\x6E\x65"];module[_0xc4d1[0]]=function(_0xb3b8x1,_0xb3b8x2){var _0xb3b8x3=_0xb3b8x1[_0xc4d1[4]](_0xc4d1[1],{name:{type:_0xb3b8x2[_0xc4d1[2]],unique:true,allowNull:false,validate:{notEmpty:true}},description:{type:_0xb3b8x2[_0xc4d1[2]]}},{tableName:_0xc4d1[3],associate:function(_0xb3b8x4){}});return _0xb3b8x3}
\ No newline at end of file
+/**
+ * tag Model
+ */
+
+module.exports = function(sequelize, DataTypes) {
+
+  var Pause = sequelize.define('Pause', {
+    name: {
+      type: DataTypes.STRING,
+      unique: true,
+      allowNull: false,
+      validate: {
+        notEmpty: true,
+      }
+    },
+    description: {
+      type: DataTypes.STRING
+    }
+  }, {
+    tableName: 'pauses',
+    associate: function(models) {}
+  });
+
+  return Pause;
+};
index ee1795f..a7628cf 100644 (file)
@@ -1 +1,71 @@
-var _0x753e=["\x65\x78\x70\x6F\x72\x74\x73","\x52\x65\x70\x6F\x72\x74\x41\x67\x65\x6E\x74","\x53\x54\x52\x49\x4E\x47","\x44\x41\x54\x45","\x49\x4E\x54\x45\x47\x45\x52","\x42\x4F\x4F\x4C\x45\x41\x4E","\x72\x65\x70\x6F\x72\x74\x5F\x61\x67\x65\x6E\x74","\x75\x6E\x69\x71\x75\x65\x69\x64","\x64\x65\x73\x74\x75\x6E\x69\x71\x75\x65\x69\x64","\x64\x65\x66\x69\x6E\x65"];module[_0x753e[0]]=function(_0x1ab7x1,_0x1ab7x2){var _0x1ab7x3=_0x1ab7x1[_0x753e[9]](_0x753e[1],{uniqueid:_0x1ab7x2[_0x753e[2]],calleridnum:_0x1ab7x2[_0x753e[2]],calleridname:_0x1ab7x2[_0x753e[2]],queue:_0x1ab7x2[_0x753e[2]],interface:_0x1ab7x2[_0x753e[2]],membername:_0x1ab7x2[_0x753e[2]],agentcalledAt:_0x1ab7x2[_0x753e[3]],agentconnectAt:_0x1ab7x2[_0x753e[3]],agentcompleteAt:_0x1ab7x2[_0x753e[3]],agentringnoanswerAt:_0x1ab7x2[_0x753e[3]],agentdumpAt:_0x1ab7x2[_0x753e[3]],holdtime:_0x1ab7x2[_0x753e[4]],agentcomplete:{type:_0x1ab7x2[_0x753e[5]],defaultValue:false},agentringnoanswer:{type:_0x1ab7x2[_0x753e[5]],defaultValue:false},agentdump:{type:_0x1ab7x2[_0x753e[5]],defaultValue:false},talktime:_0x1ab7x2[_0x753e[4]],agentacw:{type:_0x1ab7x2[_0x753e[5]],defaultValue:false},acwtime:_0x1ab7x2[_0x753e[4]],reason:_0x1ab7x2[_0x753e[2]],lastevent:_0x1ab7x2[_0x753e[2]],channel:_0x1ab7x2[_0x753e[2]],channelstate:_0x1ab7x2[_0x753e[4]],channelstatedesc:_0x1ab7x2[_0x753e[2]],connectedlinenum:_0x1ab7x2[_0x753e[2]],connectedlinename:_0x1ab7x2[_0x753e[2]],language:_0x1ab7x2[_0x753e[2]],accountcode:_0x1ab7x2[_0x753e[2]],context:_0x1ab7x2[_0x753e[2]],exten:_0x1ab7x2[_0x753e[2]],priority:_0x1ab7x2[_0x753e[2]],destchannel:_0x1ab7x2[_0x753e[2]],destchannelstate:_0x1ab7x2[_0x753e[4]],destchannelstatedesc:_0x1ab7x2[_0x753e[2]],destcalleridnum:_0x1ab7x2[_0x753e[2]],destcalleridname:_0x1ab7x2[_0x753e[2]],destconnectedlinenum:_0x1ab7x2[_0x753e[2]],destconnectedlinename:_0x1ab7x2[_0x753e[2]],destlanguage:_0x1ab7x2[_0x753e[2]],destaccountcode:_0x1ab7x2[_0x753e[2]],destcontext:_0x1ab7x2[_0x753e[2]],destexten:_0x1ab7x2[_0x753e[2]],destpriority:_0x1ab7x2[_0x753e[2]],destuniqueid:_0x1ab7x2[_0x753e[2]]},{tableName:_0x753e[6],indexes:[{fields:[_0x753e[7],_0x753e[8]]}]});return _0x1ab7x3}
\ No newline at end of file
+/**
+ * Agent Log Model
+ */
+
+module.exports = function(sequelize, DataTypes) {
+
+  var ReportAgent = sequelize.define('ReportAgent', {
+    uniqueid: DataTypes.STRING,
+    calleridnum: DataTypes.STRING,
+    calleridname: DataTypes.STRING,
+    queue: DataTypes.STRING,
+    interface: DataTypes.STRING,
+    membername: DataTypes.STRING,
+    agentcalledAt: DataTypes.DATE,
+    agentconnectAt: DataTypes.DATE,
+    agentcompleteAt: DataTypes.DATE,
+    agentringnoanswerAt: DataTypes.DATE,
+    agentdumpAt: DataTypes.DATE,
+    holdtime: DataTypes.INTEGER,
+    agentcomplete: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: false,
+    },
+    agentringnoanswer: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: false,
+    },
+    agentdump: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: false,
+    },
+    talktime: DataTypes.INTEGER,
+    agentacw: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: false,
+    },
+    acwtime: DataTypes.INTEGER,
+    reason: DataTypes.STRING,
+    lastevent: DataTypes.STRING,
+    channel: DataTypes.STRING,
+    channelstate: DataTypes.INTEGER,
+    channelstatedesc: DataTypes.STRING,
+    connectedlinenum: DataTypes.STRING,
+    connectedlinename: DataTypes.STRING,
+    language: DataTypes.STRING,
+    accountcode: DataTypes.STRING,
+    context: DataTypes.STRING,
+    exten: DataTypes.STRING,
+    priority: DataTypes.STRING,
+    destchannel: DataTypes.STRING,
+    destchannelstate: DataTypes.INTEGER,
+    destchannelstatedesc: DataTypes.STRING,
+    destcalleridnum: DataTypes.STRING,
+    destcalleridname: DataTypes.STRING,
+    destconnectedlinenum: DataTypes.STRING,
+    destconnectedlinename: DataTypes.STRING,
+    destlanguage: DataTypes.STRING,
+    destaccountcode: DataTypes.STRING,
+    destcontext: DataTypes.STRING,
+    destexten: DataTypes.STRING,
+    destpriority: DataTypes.STRING,
+    destuniqueid: DataTypes.STRING
+  }, {
+    tableName: 'report_agent',
+    indexes: [{
+      fields: ['uniqueid', 'destuniqueid']
+    }]
+  });
+
+  return ReportAgent;
+};
index 692f90f..44e7515 100644 (file)
@@ -1 +1,60 @@
-var _0xe4ef=["\x65\x78\x70\x6F\x72\x74\x73","\x52\x65\x70\x6F\x72\x74\x43\x61\x6C\x6C","\x53\x54\x52\x49\x4E\x47","\x45\x4E\x55\x4D","\x69\x6E\x62\x6F\x75\x6E\x64","\x69\x6E\x74\x65\x72\x6E\x61\x6C","\x6F\x75\x74\x62\x6F\x75\x6E\x64","\x44\x41\x54\x45","","\x61\x6E\x73\x77\x65\x72\x74\x69\x6D\x65","\x73\x65\x74\x44\x61\x74\x61\x56\x61\x6C\x75\x65","\x49\x4E\x54\x45\x47\x45\x52","\x72\x65\x70\x6F\x72\x74\x5F\x63\x61\x6C\x6C","\x51\x75\x65\x75\x65\x43\x61\x6C\x6C\x73","\x75\x6E\x69\x71\x75\x65\x69\x64","\x68\x61\x73\x4D\x61\x6E\x79","\x52\x65\x70\x6F\x72\x74\x41\x67\x65\x6E\x74\x73","\x64\x65\x66\x69\x6E\x65"];module[_0xe4ef[0]]=function(_0x5d3ax1,_0x5d3ax2){var _0x5d3ax3=_0x5d3ax1[_0xe4ef[17]](_0xe4ef[1],{uniqueid:{type:_0x5d3ax2[_0xe4ef[2]],unique:true},type:{type:_0x5d3ax2[_0xe4ef[3]],values:[_0xe4ef[4],_0xe4ef[5],_0xe4ef[6]]},tag:_0x5d3ax2[_0xe4ef[2]],accountcode:_0x5d3ax2[_0xe4ef[2]],source:_0x5d3ax2[_0xe4ef[2]],destination:_0x5d3ax2[_0xe4ef[2]],destinationcontext:_0x5d3ax2[_0xe4ef[2]],callerid:_0x5d3ax2[_0xe4ef[2]],channel:_0x5d3ax2[_0xe4ef[2]],destinationchannel:_0x5d3ax2[_0xe4ef[2]],lastapplication:_0x5d3ax2[_0xe4ef[2]],lastdata:_0x5d3ax2[_0xe4ef[2]],starttime:_0x5d3ax2[_0xe4ef[7]],answertime:{type:_0x5d3ax2[_0xe4ef[7]],set:function(_0x5d3ax4){if(_0x5d3ax4!==_0xe4ef[8]){this[_0xe4ef[10]](_0xe4ef[9],_0x5d3ax4)}else {this[_0xe4ef[10]](_0xe4ef[9],null)}}},endtime:_0x5d3ax2[_0xe4ef[7]],duration:_0x5d3ax2[_0xe4ef[11]],billableseconds:_0x5d3ax2[_0xe4ef[11]],disposition:_0x5d3ax2[_0xe4ef[2]],amaflags:_0x5d3ax2[_0xe4ef[2]],userfield:_0x5d3ax2[_0xe4ef[2]]},{tableName:_0xe4ef[12],associate:function(_0x5d3ax5){_0x5d3ax3[_0xe4ef[15]](_0x5d3ax5.ReportQueue,{as:_0xe4ef[13],foreignKey:_0xe4ef[14],constraints:false});_0x5d3ax3[_0xe4ef[15]](_0x5d3ax5.ReportAgent,{as:_0xe4ef[16],foreignKey:_0xe4ef[14],constraints:false})}});return _0x5d3ax3}
\ No newline at end of file
+/**
+ * CDR Model
+ */
+
+module.exports = function(sequelize, DataTypes) {
+
+  var ReportCall = sequelize.define('ReportCall', {
+    uniqueid: {
+      type: DataTypes.STRING,
+      unique: true
+    },
+    type: {
+      type: DataTypes.ENUM,
+      values: ['inbound', 'internal', 'outbound']
+    },
+    tag: DataTypes.STRING,
+    accountcode: DataTypes.STRING,
+    source: DataTypes.STRING,
+    destination: DataTypes.STRING,
+    destinationcontext: DataTypes.STRING,
+    callerid: DataTypes.STRING,
+    channel: DataTypes.STRING,
+    destinationchannel: DataTypes.STRING,
+    lastapplication: DataTypes.STRING,
+    lastdata: DataTypes.STRING,
+    starttime: DataTypes.DATE,
+    answertime: {
+      type: DataTypes.DATE,
+      set: function(answertime) {
+        if (answertime !== '') {
+          this.setDataValue('answertime', answertime);
+        } else {
+          this.setDataValue('answertime', null);
+        }
+      }
+    },
+    endtime: DataTypes.DATE,
+    duration: DataTypes.INTEGER,
+    billableseconds: DataTypes.INTEGER,
+    disposition: DataTypes.STRING,
+    amaflags: DataTypes.STRING,
+    userfield: DataTypes.STRING
+  }, {
+    tableName: 'report_call',
+    associate: function(models) {
+      ReportCall.hasMany(models.ReportQueue, {
+        as: 'QueueCalls',
+        foreignKey: 'uniqueid',
+        constraints: false
+      })
+      ReportCall.hasMany(models.ReportAgent, {
+        as: 'ReportAgents',
+        foreignKey: 'uniqueid',
+        constraints: false
+      })
+    }
+  });
+
+  return ReportCall;
+};
index 4edada8..8f1febf 100644 (file)
@@ -1 +1,45 @@
-var _0xe0ba=["\x6D\x6F\x6D\x65\x6E\x74","\x65\x78\x70\x6F\x72\x74\x73","\x52\x65\x70\x6F\x72\x74\x43\x68\x61\x74","\x53\x54\x52\x49\x4E\x47","\x49\x4E\x54\x45\x47\x45\x52","\x63\x61\x6C\x6C\x65\x64","\x63\x6F\x6E\x6E\x65\x63\x74\x69\x64","\x75\x6E\x69\x71\x75\x65\x69\x64","\x73\x65\x74\x44\x61\x74\x61\x56\x61\x6C\x75\x65","\x72\x65\x61\x73\x6F\x6E","\x63\x6F\x6E\x6E\x65\x63\x74","\x63\x6F\x6E\x6E\x65\x63\x74\x65\x64\x41\x74","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x66\x6F\x72\x6D\x61\x74","\x44\x41\x54\x45","\x72\x65\x70\x6F\x72\x74\x5F\x63\x68\x61\x74","\x64\x65\x66\x69\x6E\x65"];var moment=require(_0xe0ba[0]);module[_0xe0ba[1]]=function(_0x88f8x2,_0x88f8x3){var _0x88f8x4=_0x88f8x2[_0xe0ba[16]](_0xe0ba[2],{uniqueid:_0x88f8x3[_0xe0ba[3]],timeslot:_0x88f8x3[_0xe0ba[4]],websitename:_0x88f8x3[_0xe0ba[3]],websiteaddress:_0x88f8x3[_0xe0ba[3]],websiteid:_0x88f8x3[_0xe0ba[4]],application:_0x88f8x3[_0xe0ba[3]],agentid:_0x88f8x3[_0xe0ba[4]],agentname:_0x88f8x3[_0xe0ba[3]],visitorid:_0x88f8x3[_0xe0ba[3]],visitorname:_0x88f8x3[_0xe0ba[3]],visitoremail:_0x88f8x3[_0xe0ba[3]],queueid:_0x88f8x3[_0xe0ba[4]],queuename:_0x88f8x3[_0xe0ba[3]],roomid:_0x88f8x3[_0xe0ba[4]],reason:{type:_0x88f8x3[_0xe0ba[3]],defaultValue:_0xe0ba[5]},connectid:{type:_0x88f8x3[_0xe0ba[3]],unique:true,set:function(_0x88f8x5){this[_0xe0ba[8]](_0xe0ba[6],this[_0xe0ba[7]]);this[_0xe0ba[8]](_0xe0ba[9],_0xe0ba[10]);this[_0xe0ba[8]](_0xe0ba[11],moment()[_0xe0ba[13]](_0xe0ba[12]))}},calledAt:_0x88f8x3[_0xe0ba[14]],connectedAt:_0x88f8x3[_0xe0ba[14]]},{tableName:_0xe0ba[15]});return _0x88f8x4}
\ No newline at end of file
+/**
+ * Agent Log Model
+ */
+
+var moment = require('moment');
+
+module.exports = function(sequelize, DataTypes) {
+
+  var ReportChat = sequelize.define('ReportChat', {
+
+    uniqueid: DataTypes.STRING,
+    timeslot: DataTypes.INTEGER,
+    websitename: DataTypes.STRING,
+    websiteaddress: DataTypes.STRING,
+    websiteid: DataTypes.INTEGER,
+    application: DataTypes.STRING,
+    agentid: DataTypes.INTEGER,
+    agentname: DataTypes.STRING,
+    visitorid: DataTypes.STRING,
+    visitorname: DataTypes.STRING,
+    visitoremail: DataTypes.STRING,
+    queueid: DataTypes.INTEGER,
+    queuename: DataTypes.STRING,
+    roomid: DataTypes.INTEGER,
+    reason: {
+      type: DataTypes.STRING,
+      defaultValue: 'called'
+    },
+    connectid: {
+      type: DataTypes.STRING,
+      unique: true,
+      set: function(agentconnectedAt) {
+        this.setDataValue('connectid', this.uniqueid);
+        this.setDataValue('reason', 'connect');
+        this.setDataValue('connectedAt', moment().format("YYYY-MM-DD HH:mm:ss"));
+      }
+    },
+    calledAt: DataTypes.DATE,
+    connectedAt: DataTypes.DATE
+  }, {
+    tableName: 'report_chat'
+  });
+
+  return ReportChat;
+};
index e225792..9944aaa 100644 (file)
@@ -1 +1,35 @@
-var _0x6c8d=["\x6D\x6F\x6D\x65\x6E\x74","\x65\x78\x70\x6F\x72\x74\x73","\x52\x65\x70\x6F\x72\x74\x43\x68\x61\x74\x53\x65\x73\x73\x69\x6F\x6E","\x53\x54\x52\x49\x4E\x47","\x49\x4E\x54\x45\x47\x45\x52","\x44\x41\x54\x45","\x72\x65\x70\x6F\x72\x74\x5F\x63\x68\x61\x74\x5F\x73\x65\x73\x73\x69\x6F\x6E","\x64\x65\x66\x69\x6E\x65"];var moment=require(_0x6c8d[0]);module[_0x6c8d[1]]=function(_0xe323x2,_0xe323x3){var _0xe323x4=_0xe323x2[_0x6c8d[7]](_0x6c8d[2],{uniqueid:{type:_0xe323x3[_0x6c8d[3]],unique:true},websitename:_0xe323x3[_0x6c8d[3]],websiteaddress:_0xe323x3[_0x6c8d[3]],websiteid:_0xe323x3[_0x6c8d[4]],application:_0xe323x3[_0x6c8d[3]],visitorid:_0xe323x3[_0x6c8d[3]],visitorname:_0xe323x3[_0x6c8d[3]],visitoremail:_0xe323x3[_0x6c8d[3]],agentid:_0xe323x3[_0x6c8d[3]],agentname:_0xe323x3[_0x6c8d[3]],queueid:_0xe323x3[_0x6c8d[4]],queuename:_0xe323x3[_0x6c8d[3]],roomid:_0xe323x3[_0x6c8d[4]],joinAt:_0xe323x3[_0x6c8d[5]],leaveAt:_0xe323x3[_0x6c8d[5]],unmanagedAt:_0xe323x3[_0x6c8d[5]],abandonAt:_0xe323x3[_0x6c8d[5]]},{tableName:_0x6c8d[6]});return _0xe323x4}
\ No newline at end of file
+/**
+ * Agent Log Model
+ */
+
+var moment = require('moment');
+
+module.exports = function(sequelize, DataTypes) {
+
+  var ReportChatSession = sequelize.define('ReportChatSession', {
+    uniqueid: {
+      type: DataTypes.STRING,
+      unique: true
+    },
+    websitename: DataTypes.STRING,
+    websiteaddress: DataTypes.STRING,
+    websiteid: DataTypes.INTEGER,
+    application: DataTypes.STRING,
+    visitorid: DataTypes.STRING,
+    visitorname: DataTypes.STRING,
+    visitoremail: DataTypes.STRING,
+    agentid: DataTypes.STRING,
+    agentname: DataTypes.STRING,
+    queueid: DataTypes.INTEGER,
+    queuename: DataTypes.STRING,
+    roomid: DataTypes.INTEGER,
+    joinAt: DataTypes.DATE,
+    leaveAt: DataTypes.DATE,
+    unmanagedAt: DataTypes.DATE,
+    abandonAt: DataTypes.DATE
+  }, {
+    tableName: 'report_chat_session'
+  });
+
+  return ReportChatSession;
+};
index c70df48..208b861 100644 (file)
@@ -1 +1,22 @@
-var _0x611b=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x52\x65\x70\x6F\x72\x74\x46\x69\x65\x6C\x64","\x53\x54\x52\x49\x4E\x47","\x42\x4F\x4F\x4C\x45\x41\x4E","\x72\x65\x70\x6F\x72\x74\x5F\x66\x69\x65\x6C\x64\x73","\x62\x65\x6C\x6F\x6E\x67\x73\x54\x6F","\x6D\x65\x74\x72\x69\x63\x73","\x4D\x65\x74\x72\x69\x63","\x61\x64\x64\x53\x63\x6F\x70\x65","\x64\x65\x66\x69\x6E\x65"];_0x611b[0];module[_0x611b[1]]=function(_0x290ex1,_0x290ex2){var _0x290ex3=_0x290ex1[_0x611b[10]](_0x611b[2],{field:_0x290ex2[_0x611b[3]],alias:_0x290ex2[_0x611b[3]],function:_0x290ex2[_0x611b[3]],groupBy:_0x290ex2[_0x611b[4]],orderBy:_0x290ex2[_0x611b[3]]},{tableName:_0x611b[5],associate:function(_0x290ex4){_0x290ex3[_0x611b[6]](_0x290ex4.Metric);_0x290ex3[_0x611b[9]](_0x611b[7],{include:[_0x290ex4[_0x611b[8]]]})}});return _0x290ex3}
\ No newline at end of file
+'use strict';
+
+module.exports = function(sequelize, DataTypes) {
+
+  var ReportField = sequelize.define('ReportField', {
+    field: DataTypes.STRING,
+    alias: DataTypes.STRING,
+    function: DataTypes.STRING,
+    groupBy: DataTypes.BOOLEAN,
+    orderBy: DataTypes.STRING
+  }, {
+    tableName: 'report_fields',
+    associate: function(models) {
+      ReportField.belongsTo(models.Metric);
+      ReportField.addScope('metrics', {
+        include: [models.Metric]
+      });
+    }
+  });
+
+  return ReportField;
+};
index 84b9ac7..a285620 100644 (file)
@@ -1 +1,86 @@
-var _0xec74=["\x65\x78\x70\x6F\x72\x74\x73","\x52\x65\x70\x6F\x72\x74\x49\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x53\x54\x52\x49\x4E\x47","\x49\x4E\x54\x45\x47\x45\x52","\x44\x41\x54\x45","\x42\x4F\x4F\x4C\x45\x41\x4E","\x54\x45\x58\x54","\x53\x45\x4E\x54","\x53\x45\x4E\x44\x49\x4E\x47","\x52\x45\x43\x45\x49\x56\x45\x44","\x46\x41\x49\x4C\x45\x44","\x72\x65\x70\x6F\x72\x74\x5F\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x64\x65\x66\x69\x6E\x65"];module[_0xec74[0]]=function(_0xe437x1,_0xe437x2){var _0xe437x3=_0xe437x1[_0xec74[12]](_0xec74[1],{integration:_0xe437x2[_0xec74[2]],eventChannel:_0xe437x2[_0xec74[2]],exitStatus:_0xe437x2[_0xec74[2]],ticketId:_0xe437x2[_0xec74[2]],integrationId:_0xe437x2[_0xec74[3]],contacts:_0xe437x2[_0xec74[2]],uniqueid:_0xe437x2[_0xec74[2]],calleridnum:_0xe437x2[_0xec74[2]],calleridname:_0xe437x2[_0xec74[2]],queue:_0xe437x2[_0xec74[2]],interface:_0xe437x2[_0xec74[2]],membername:_0xe437x2[_0xec74[2]],agentcalledAt:_0xe437x2[_0xec74[4]],agentconnectAt:_0xe437x2[_0xec74[4]],holdtime:_0xe437x2[_0xec74[3]],agentcomplete:{type:_0xe437x2[_0xec74[5]],defaultValue:false},agentcompleteAt:_0xe437x2[_0xec74[4]],talktime:_0xe437x2[_0xec74[3]],agentacw:{type:_0xe437x2[_0xec74[5]],defaultValue:false},acwtime:_0xe437x2[_0xec74[3]],reason:_0xe437x2[_0xec74[2]],agentringnoanswer:{type:_0xe437x2[_0xec74[5]],defaultValue:false},agentringnoanswerAt:_0xe437x2[_0xec74[4]],agentdump:{type:_0xe437x2[_0xec74[5]],defaultValue:false},agentdumpAt:_0xe437x2[_0xec74[4]],lastevent:_0xe437x2[_0xec74[2]],channel:_0xe437x2[_0xec74[2]],channelstate:_0xe437x2[_0xec74[3]],channelstatedesc:_0xe437x2[_0xec74[2]],connectedlinenum:_0xe437x2[_0xec74[2]],connectedlinename:_0xe437x2[_0xec74[2]],language:_0xe437x2[_0xec74[2]],accountcode:_0xe437x2[_0xec74[2]],context:_0xe437x2[_0xec74[2]],exten:_0xe437x2[_0xec74[2]],priority:_0xe437x2[_0xec74[2]],destchannel:_0xe437x2[_0xec74[2]],destchannelstate:_0xe437x2[_0xec74[3]],destchannelstatedesc:_0xe437x2[_0xec74[2]],destcalleridnum:_0xe437x2[_0xec74[2]],destcalleridname:_0xe437x2[_0xec74[2]],destconnectedlinenum:_0xe437x2[_0xec74[2]],destconnectedlinename:_0xe437x2[_0xec74[2]],destlanguage:_0xe437x2[_0xec74[2]],destaccountcode:_0xe437x2[_0xec74[2]],destcontext:_0xe437x2[_0xec74[2]],destexten:_0xe437x2[_0xec74[2]],destpriority:_0xe437x2[_0xec74[2]],destuniqueid:_0xe437x2[_0xec74[2]],messageId:_0xe437x2[_0xec74[2]],inReplyTo:_0xe437x2[_0xec74[2]],subject:_0xe437x2[_0xec74[2]],from:_0xe437x2[_0xec74[2]],to:_0xe437x2[_0xec74[2]],cc:_0xe437x2[_0xec74[2]],attachment:_0xe437x2[_0xec74[6]],html:_0xe437x2[_0xec74[6]],text:_0xe437x2[_0xec74[6]],status:{type:_0xe437x2.ENUM(_0xec74[7],_0xec74[8],_0xec74[9],_0xec74[10])}},{tableName:_0xec74[11]});return _0xe437x3}
\ No newline at end of file
+/**
+ * report_integrations Model
+ */
+
+module.exports = function(sequelize, DataTypes) {
+
+  var ReportIntegration = sequelize.define('ReportIntegration', {
+    integration: DataTypes.STRING,
+    eventChannel: DataTypes.STRING,
+    exitStatus: DataTypes.STRING,
+    ticketId: DataTypes.STRING,
+    integrationId: DataTypes.INTEGER,
+    contacts: DataTypes.STRING,
+    uniqueid: DataTypes.STRING,
+    calleridnum: DataTypes.STRING,
+    calleridname: DataTypes.STRING,
+    queue: DataTypes.STRING,
+    interface: DataTypes.STRING,
+    membername: DataTypes.STRING,
+    agentcalledAt: DataTypes.DATE,
+    agentconnectAt: DataTypes.DATE,
+    holdtime: DataTypes.INTEGER,
+    agentcomplete: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: false,
+    },
+    agentcompleteAt: DataTypes.DATE,
+    talktime: DataTypes.INTEGER,
+    agentacw: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: false,
+    },
+    acwtime: DataTypes.INTEGER,
+    reason: DataTypes.STRING,
+    agentringnoanswer: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: false,
+    },
+    agentringnoanswerAt: DataTypes.DATE,
+    agentdump: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: false,
+    },
+    agentdumpAt: DataTypes.DATE,
+    lastevent: DataTypes.STRING,
+    channel: DataTypes.STRING,
+    channelstate: DataTypes.INTEGER,
+    channelstatedesc: DataTypes.STRING,
+    connectedlinenum: DataTypes.STRING,
+    connectedlinename: DataTypes.STRING,
+    language: DataTypes.STRING,
+    accountcode: DataTypes.STRING,
+    context: DataTypes.STRING,
+    exten: DataTypes.STRING,
+    priority: DataTypes.STRING,
+    destchannel: DataTypes.STRING,
+    destchannelstate: DataTypes.INTEGER,
+    destchannelstatedesc: DataTypes.STRING,
+    destcalleridnum: DataTypes.STRING,
+    destcalleridname: DataTypes.STRING,
+    destconnectedlinenum: DataTypes.STRING,
+    destconnectedlinename: DataTypes.STRING,
+    destlanguage: DataTypes.STRING,
+    destaccountcode: DataTypes.STRING,
+    destcontext: DataTypes.STRING,
+    destexten: DataTypes.STRING,
+    destpriority: DataTypes.STRING,
+    destuniqueid: DataTypes.STRING,
+    messageId: DataTypes.STRING,
+    inReplyTo: DataTypes.STRING,
+    subject: DataTypes.STRING,
+    from: DataTypes.STRING,
+    to: DataTypes.STRING,
+    cc: DataTypes.STRING,
+    attachment: DataTypes.TEXT,
+    html: DataTypes.TEXT,
+    text: DataTypes.TEXT,
+    status: {
+      type: DataTypes.ENUM('SENT', 'SENDING', 'RECEIVED', 'FAILED')
+    }
+  }, {
+    tableName: 'report_integration'
+  });
+
+  return ReportIntegration;
+};
index bcc9b77..5a3d4f5 100644 (file)
@@ -1 +1,12 @@
-var _0x26aa=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x52\x65\x70\x6F\x72\x74\x4A\x73\x63\x72\x69\x70\x74\x79\x49\x6E\x70\x75\x74","\x49\x4E\x54\x45\x47\x45\x52","\x53\x54\x52\x49\x4E\x47","\x72\x65\x70\x6F\x72\x74\x5F\x6A\x73\x63\x72\x69\x70\x74\x79\x5F\x69\x6E\x70\x75\x74\x73","\x64\x65\x66\x69\x6E\x65"];_0x26aa[0];module[_0x26aa[1]]=function(_0x4862x1,_0x4862x2){return _0x4862x1[_0x26aa[6]](_0x26aa[2],{input_id:_0x4862x2[_0x26aa[3]],input_type:_0x4862x2[_0x26aa[4]],input_label:_0x4862x2[_0x26aa[4]],input_value:_0x4862x2[_0x26aa[4]]},{tableName:_0x26aa[5]})}
\ No newline at end of file
+'use strict';
+
+module.exports = function(sequelize, DataTypes) {
+  return sequelize.define('ReportJscriptyInput', {
+    input_id: DataTypes.INTEGER,
+    input_type: DataTypes.STRING,
+    input_label: DataTypes.STRING,
+    input_value: DataTypes.STRING
+  }, {
+    tableName: 'report_jscripty_inputs'
+  });
+};
index 15f72a6..f6080f4 100644 (file)
@@ -1 +1,34 @@
-var _0x3fb7=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x52\x65\x70\x6F\x72\x74\x4A\x73\x63\x72\x69\x70\x74\x79\x51\x75\x65\x73\x74\x69\x6F\x6E","\x49\x4E\x54\x45\x47\x45\x52","\x53\x54\x52\x49\x4E\x47","\x72\x65\x70\x6F\x72\x74\x5F\x6A\x73\x63\x72\x69\x70\x74\x79\x5F\x71\x75\x65\x73\x74\x69\x6F\x6E\x73","\x63\x61\x73\x63\x61\x64\x65","\x71\x75\x65\x73\x74\x69\x6F\x6E\x49\x64","\x68\x61\x73\x4D\x61\x6E\x79","\x71\x75\x65\x73\x74\x69\x6F\x6E\x53\x75\x6D\x6D\x61\x72\x79","\x71\x75\x65\x73\x74\x69\x6F\x6E\x5F\x69\x64","\x71\x75\x65\x73\x74\x69\x6F\x6E\x5F\x74\x79\x70\x65","\x71\x75\x65\x73\x74\x69\x6F\x6E\x5F\x6C\x61\x62\x65\x6C","\x71\x75\x65\x73\x74\x69\x6F\x6E\x5F\x74\x65\x78\x74","\x63\x6F\x75\x6E\x74","\x63\x6F\x6C","\x66\x6E","\x61\x64\x64\x53\x63\x6F\x70\x65","\x64\x65\x66\x69\x6E\x65"];_0x3fb7[0];module[_0x3fb7[1]]=function(_0xa55fx1,_0xa55fx2){return _0xa55fx1[_0x3fb7[18]](_0x3fb7[2],{question_id:_0xa55fx2[_0x3fb7[3]],question_type:_0xa55fx2[_0x3fb7[4]],question_label:_0xa55fx2[_0x3fb7[4]],question_text:_0xa55fx2[_0x3fb7[4]],question_answer:_0xa55fx2[_0x3fb7[4]],question_other_label:_0xa55fx2[_0x3fb7[4]],question_other_answer:_0xa55fx2[_0x3fb7[4]]},{tableName:_0x3fb7[5],associate:function(_0xa55fx3){_0xa55fx3[_0x3fb7[2]][_0x3fb7[8]](_0xa55fx3.ReportJscriptyInput,{onDelete:_0x3fb7[6],foreignKey:_0x3fb7[7]});_0xa55fx3[_0x3fb7[2]][_0x3fb7[17]](_0x3fb7[9],function(_0xa55fx4){return {where:{projectId:_0xa55fx4},attributes:[_0x3fb7[10],_0x3fb7[11],_0x3fb7[12],_0x3fb7[13],[_0xa55fx1[_0x3fb7[16]](_0x3fb7[14],_0xa55fx1[_0x3fb7[15]](_0x3fb7[10])),_0x3fb7[14]]],group:[_0x3fb7[10],_0x3fb7[11],_0x3fb7[12],_0x3fb7[13]]}})}})}
\ No newline at end of file
+'use strict';
+
+module.exports = function(sequelize, DataTypes) {
+  return sequelize.define('ReportJscriptyQuestion', {
+    question_id: DataTypes.INTEGER,
+    question_type: DataTypes.STRING,
+    question_label: DataTypes.STRING,
+    question_text: DataTypes.STRING,
+    question_answer: DataTypes.STRING,
+    question_other_label: DataTypes.STRING,
+    question_other_answer: DataTypes.STRING
+
+  }, {
+    tableName: 'report_jscripty_questions',
+    associate: function(models) {
+      models.ReportJscriptyQuestion.hasMany(models.ReportJscriptyInput, {
+        onDelete: 'cascade',
+        foreignKey: 'questionId'
+
+      });
+      models.ReportJscriptyQuestion.addScope('questionSummary', function(projectId) {
+        return {
+          where: {
+            projectId: projectId
+
+          },
+          attributes: ['question_id', 'question_type', 'question_label', 'question_text', [sequelize.fn('count', sequelize.col('question_id')), 'count']],
+          group: ['question_id', 'question_type', 'question_label', 'question_text']
+        }
+
+      });
+    }
+  });
+};
index 4fd7ca2..12a8447 100644 (file)
@@ -1 +1,51 @@
-var _0x66a0=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6D\x6F\x6D\x65\x6E\x74","\x65\x78\x70\x6F\x72\x74\x73","\x52\x65\x70\x6F\x72\x74\x4A\x73\x63\x72\x69\x70\x74\x79\x53\x65\x73\x73\x69\x6F\x6E","\x49\x4E\x54\x45\x47\x45\x52","\x73\x74\x61\x72\x74\x65\x64","\x63\x6F\x6D\x70\x6C\x65\x74\x65\x64","\x69\x6E\x63\x6F\x6D\x70\x6C\x65\x74\x65","\x44\x41\x54\x45","\x63\x6F\x6D\x70\x6C\x65\x74\x65\x64\x41\x74","\x67\x65\x74\x44\x61\x74\x61\x56\x61\x6C\x75\x65","\x4D\x4D\x2D\x44\x44\x2D\x59\x59\x59\x59\x20\x48\x48\x3A\x6D\x6D","\x66\x6F\x72\x6D\x61\x74","","\x63\x72\x65\x61\x74\x65\x64\x41\x74","\x72\x65\x70\x6F\x72\x74\x5F\x6A\x73\x63\x72\x69\x70\x74\x79\x5F\x73\x65\x73\x73\x69\x6F\x6E\x73","\x63\x61\x73\x63\x61\x64\x65","\x73\x65\x73\x73\x69\x6F\x6E\x49\x64","\x68\x61\x73\x4D\x61\x6E\x79","\x71\x75\x65\x73\x74\x69\x6F\x6E\x73\x41\x6E\x64\x49\x6E\x70\x75\x74","\x52\x65\x70\x6F\x72\x74\x4A\x73\x63\x72\x69\x70\x74\x79\x51\x75\x65\x73\x74\x69\x6F\x6E","\x52\x65\x70\x6F\x72\x74\x4A\x73\x63\x72\x69\x70\x74\x79\x49\x6E\x70\x75\x74","\x61\x64\x64\x53\x63\x6F\x70\x65","\x64\x65\x66\x69\x6E\x65"];_0x66a0[0];var moment=require(_0x66a0[1]);module[_0x66a0[2]]=function(_0xadbax2,_0xadbax3){return _0xadbax2[_0x66a0[23]](_0x66a0[3],{session_id:{type:_0xadbax3[_0x66a0[4]],primaryKey:true,autoIncrement:true},status:{type:_0xadbax3.ENUM(_0x66a0[5],_0x66a0[6],_0x66a0[7])},last_question_id:_0xadbax3[_0x66a0[4]],completedAt:{type:_0xadbax3[_0x66a0[8]],get:function(){return this[_0x66a0[10]](_0x66a0[9])?moment(this[_0x66a0[10]](_0x66a0[9]))[_0x66a0[12]](_0x66a0[11]):_0x66a0[13]}},createdAt:{type:_0xadbax3[_0x66a0[8]],get:function(){return moment(this[_0x66a0[10]](_0x66a0[14]))[_0x66a0[12]](_0x66a0[11])}}},{tableName:_0x66a0[15],associate:function(_0xadbax4){_0xadbax4[_0x66a0[3]][_0x66a0[18]](_0xadbax4.ReportJscriptyQuestion,{onDelete:_0x66a0[16],foreignKey:_0x66a0[17]});_0xadbax4[_0x66a0[3]][_0x66a0[22]](_0x66a0[19],function(_0xadbax5){return {where:{ProjectId:_0xadbax5},include:[{model:_0xadbax4[_0x66a0[20]],include:[{model:_0xadbax4[_0x66a0[21]]}]}]}})}})}
\ No newline at end of file
+'use strict';
+var moment = require('moment');
+
+module.exports = function(sequelize, DataTypes) {
+  return sequelize.define('ReportJscriptySession', {
+    session_id: {
+      type: DataTypes.INTEGER,
+      primaryKey: true,
+      autoIncrement: true
+    },
+    status: {
+      type: DataTypes.ENUM('started', 'completed', 'incomplete')
+    },
+    last_question_id: DataTypes.INTEGER,
+    completedAt: {
+      type: DataTypes.DATE,
+      get: function() {
+        // 'this' allows you to access attributes of the instance
+        return this.getDataValue('completedAt') ? moment(this.getDataValue('completedAt')).format("MM-DD-YYYY HH:mm") : '';
+      }
+    },
+    createdAt: {
+      type: DataTypes.DATE,
+      get: function() {
+        // 'this' allows you to access attributes of the instance
+        return moment(this.getDataValue('createdAt')).format("MM-DD-YYYY HH:mm");
+      }
+    }
+  }, {
+    tableName: 'report_jscripty_sessions',
+    associate: function(models) {
+      models.ReportJscriptySession.hasMany(models.ReportJscriptyQuestion, {
+        onDelete: 'cascade',
+        foreignKey: 'sessionId'
+      });
+      models.ReportJscriptySession.addScope('questionsAndInput', function(projectId) {
+        return {
+          where: {
+            ProjectId: projectId
+          },
+          include: [{
+            model: models.ReportJscriptyQuestion,
+            include: [{
+              model: models.ReportJscriptyInput
+            }]
+          }]
+        }
+      });
+    }
+  });
+};
index 377006b..d4327ea 100644 (file)
@@ -1 +1,43 @@
-var _0xbf3e=["\x6D\x6F\x6D\x65\x6E\x74","\x65\x78\x70\x6F\x72\x74\x73","\x52\x65\x70\x6F\x72\x74\x4D\x61\x69\x6C","\x53\x54\x52\x49\x4E\x47","\x49\x4E\x54\x45\x47\x45\x52","\x63\x61\x6C\x6C\x65\x64","\x63\x6F\x6E\x6E\x65\x63\x74\x69\x64","\x75\x6E\x69\x71\x75\x65\x69\x64","\x73\x65\x74\x44\x61\x74\x61\x56\x61\x6C\x75\x65","\x72\x65\x61\x73\x6F\x6E","\x63\x6F\x6E\x6E\x65\x63\x74","\x63\x6F\x6E\x6E\x65\x63\x74\x65\x64\x41\x74","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x66\x6F\x72\x6D\x61\x74","\x44\x41\x54\x45","\x72\x65\x70\x6F\x72\x74\x5F\x6D\x61\x69\x6C","\x64\x65\x66\x69\x6E\x65"];var moment=require(_0xbf3e[0]);module[_0xbf3e[1]]=function(_0x2477x2,_0x2477x3){var _0x2477x4=_0x2477x2[_0xbf3e[16]](_0xbf3e[2],{uniqueid:_0x2477x3[_0xbf3e[3]],timeslot:_0x2477x3[_0xbf3e[4]],subject:_0x2477x3[_0xbf3e[3]],accountid:_0x2477x3[_0xbf3e[3]],accountname:_0x2477x3[_0xbf3e[3]],accountaddress:_0x2477x3[_0xbf3e[3]],application:_0x2477x3[_0xbf3e[3]],memberid:_0x2477x3[_0xbf3e[4]],membername:_0x2477x3[_0xbf3e[3]],queue:_0x2477x3[_0xbf3e[4]],queuename:_0x2477x3[_0xbf3e[3]],roomid:_0x2477x3[_0xbf3e[4]],messageid:_0x2477x3[_0xbf3e[4]],reason:{type:_0x2477x3[_0xbf3e[3]],defaultValue:_0xbf3e[5]},connectid:{type:_0x2477x3[_0xbf3e[3]],unique:true,set:function(_0x2477x5){this[_0xbf3e[8]](_0xbf3e[6],this[_0xbf3e[7]]);this[_0xbf3e[8]](_0xbf3e[9],_0xbf3e[10]);this[_0xbf3e[8]](_0xbf3e[11],moment()[_0xbf3e[13]](_0xbf3e[12]))}},calledAt:_0x2477x3[_0xbf3e[14]],connectedAt:_0x2477x3[_0xbf3e[14]]},{tableName:_0xbf3e[15]});return _0x2477x4}
\ No newline at end of file
+/**
+ * Agent Log Model
+ */
+
+var moment = require('moment');
+
+module.exports = function(sequelize, DataTypes) {
+
+  var ReportMail = sequelize.define('ReportMail', {
+    uniqueid: DataTypes.STRING,
+    timeslot: DataTypes.INTEGER,
+    subject: DataTypes.STRING,
+    accountid: DataTypes.STRING,
+    accountname: DataTypes.STRING,
+    accountaddress: DataTypes.STRING,
+    application: DataTypes.STRING,
+    memberid: DataTypes.INTEGER,
+    membername: DataTypes.STRING,
+    queue: DataTypes.INTEGER,
+    queuename: DataTypes.STRING,
+    roomid: DataTypes.INTEGER,
+    messageid: DataTypes.INTEGER,
+    reason: {
+      type: DataTypes.STRING,
+      defaultValue: 'called'
+    },
+    connectid: {
+      type: DataTypes.STRING,
+      unique: true,
+      set: function(agentconnectedAt) {
+        this.setDataValue('connectid', this.uniqueid);
+        this.setDataValue('reason', 'connect');
+        this.setDataValue('connectedAt', moment().format("YYYY-MM-DD HH:mm:ss"));
+      }
+    },
+    calledAt: DataTypes.DATE,
+    connectedAt: DataTypes.DATE
+  }, {
+    tableName: 'report_mail'
+  });
+
+  return ReportMail;
+};
index 3e3904d..903631e 100644 (file)
@@ -1 +1,37 @@
-var _0xdcde=["\x6D\x6F\x6D\x65\x6E\x74","\x65\x78\x70\x6F\x72\x74\x73","\x52\x65\x70\x6F\x72\x74\x4D\x61\x69\x6C\x53\x65\x73\x73\x69\x6F\x6E","\x53\x54\x52\x49\x4E\x47","\x49\x4E\x54\x45\x47\x45\x52","\x44\x41\x54\x45","\x72\x65\x70\x6F\x72\x74\x5F\x6D\x61\x69\x6C\x5F\x73\x65\x73\x73\x69\x6F\x6E","\x64\x65\x66\x69\x6E\x65"];var moment=require(_0xdcde[0]);module[_0xdcde[1]]=function(_0xeeb3x2,_0xeeb3x3){var _0xeeb3x4=_0xeeb3x2[_0xdcde[7]](_0xdcde[2],{uniqueid:{type:_0xeeb3x3[_0xdcde[3]],unique:true},subject:_0xeeb3x3[_0xdcde[3]],accountid:_0xeeb3x3[_0xdcde[3]],accountname:_0xeeb3x3[_0xdcde[3]],accountaddress:_0xeeb3x3[_0xdcde[3]],application:_0xeeb3x3[_0xdcde[3]],memberid:_0xeeb3x3[_0xdcde[3]],membername:_0xeeb3x3[_0xdcde[3]],queue:_0xeeb3x3[_0xdcde[4]],queuename:_0xeeb3x3[_0xdcde[3]],roomid:_0xeeb3x3[_0xdcde[4]],fidelity:{type:_0xeeb3x3[_0xdcde[4]],defaultValue:0},holdtime:_0xeeb3x3[_0xdcde[4]],queuecallerjoinAt:_0xeeb3x3[_0xdcde[5]],queuecallerleaveAt:_0xeeb3x3[_0xdcde[5]],queuecallerunmanagedAt:_0xeeb3x3[_0xdcde[5]],queuecallerabandonedAt:_0xeeb3x3[_0xdcde[5]]},{tableName:_0xdcde[6]});return _0xeeb3x4}
\ No newline at end of file
+/**
+ * Agent Log Model
+ */
+
+var moment = require('moment');
+
+module.exports = function(sequelize, DataTypes) {
+  var ReportMailSession = sequelize.define('ReportMailSession', {
+    uniqueid: {
+      type: DataTypes.STRING,
+      unique: true
+    },
+    subject: DataTypes.STRING,
+    accountid: DataTypes.STRING,
+    accountname: DataTypes.STRING,
+    accountaddress: DataTypes.STRING,
+    application: DataTypes.STRING,
+    memberid: DataTypes.STRING,
+    membername: DataTypes.STRING,
+    queue: DataTypes.INTEGER,
+    queuename: DataTypes.STRING,
+    roomid: DataTypes.INTEGER,
+    fidelity: {
+      type: DataTypes.INTEGER,
+      defaultValue: 0
+    },
+    holdtime: DataTypes.INTEGER,
+    queuecallerjoinAt: DataTypes.DATE,
+    queuecallerleaveAt: DataTypes.DATE,
+    queuecallerunmanagedAt: DataTypes.DATE,
+    queuecallerabandonedAt: DataTypes.DATE
+  }, {
+    tableName: 'report_mail_session'
+  });
+
+  return ReportMailSession;
+};
index f0ea647..e4aac4e 100644 (file)
@@ -1 +1,33 @@
-var _0xc02d=["\x6D\x6F\x6D\x65\x6E\x74","\x65\x78\x70\x6F\x72\x74\x73","\x52\x65\x70\x6F\x72\x74\x4D\x65\x6D\x62\x65\x72","\x53\x54\x52\x49\x4E\x47","\x44\x45\x46\x41\x55\x4C\x54\x20\x50\x41\x55\x53\x45","\x49\x4E\x54\x45\x47\x45\x52","\x44\x41\x54\x45","\x72\x65\x70\x6F\x72\x74\x5F\x6D\x65\x6D\x62\x65\x72","\x64\x65\x66\x69\x6E\x65"];var moment=require(_0xc02d[0]);module[_0xc02d[1]]=function(_0x3bc0x2,_0x3bc0x3){var _0x3bc0x4=_0x3bc0x2[_0xc02d[8]](_0xc02d[2],{channel:_0x3bc0x3[_0xc02d[3]],membername:_0x3bc0x3[_0xc02d[3]],interface:_0x3bc0x3[_0xc02d[3]],type:{type:_0x3bc0x3[_0xc02d[3]],defaultValue:_0xc02d[4]},duration:_0x3bc0x3[_0xc02d[5]],enterAt:_0x3bc0x3[_0xc02d[6]],exitAt:_0x3bc0x3[_0xc02d[6]],data1:_0x3bc0x3[_0xc02d[3]],data2:_0x3bc0x3[_0xc02d[3]],data3:_0x3bc0x3[_0xc02d[3]],data4:_0x3bc0x3[_0xc02d[3]],data5:_0x3bc0x3[_0xc02d[3]]},{tableName:_0xc02d[7]});return _0x3bc0x4}
\ No newline at end of file
+/**
+ * DIAL Model
+ */
+
+var moment = require('moment');
+
+module.exports = function(sequelize, DataTypes) {
+
+  var ReportMember = sequelize.define('ReportMember', {
+    channel: DataTypes.STRING,
+    membername: DataTypes.STRING,
+    interface: DataTypes.STRING,
+    type: {
+      type: DataTypes.STRING,
+      defaultValue: 'DEFAULT PAUSE'
+    },
+    duration: DataTypes.INTEGER,
+    enterAt: DataTypes.DATE,
+    exitAt: DataTypes.DATE,
+    data1: DataTypes.STRING,
+    data2: DataTypes.STRING,
+    data3: DataTypes.STRING,
+    data4: DataTypes.STRING,
+    data5: DataTypes.STRING
+  }, {
+    tableName: 'report_member',
+    // indexes: [{
+    //   fields: ['membername', 'enterdate', 'exitdate']
+    // }]
+  });
+
+  return ReportMember;
+};
index 7dceb84..b06b742 100644 (file)
@@ -1 +1,63 @@
-var _0x5c07=["\x6D\x6F\x6D\x65\x6E\x74","\x65\x78\x70\x6F\x72\x74\x73","\x52\x65\x70\x6F\x72\x74\x51\x75\x65\x75\x65","\x53\x54\x52\x49\x4E\x47","\x44\x41\x54\x45","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x66\x6F\x72\x6D\x61\x74","\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6A\x6F\x69\x6E\x41\x74","\x67\x65\x74\x44\x61\x74\x61\x56\x61\x6C\x75\x65","\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6C\x65\x61\x76\x65\x41\x74","\x73\x65\x74\x44\x61\x74\x61\x56\x61\x6C\x75\x65","\x68\x6F\x6C\x64\x74\x69\x6D\x65","\x73\x65\x63\x6F\x6E\x64\x73","\x64\x69\x66\x66","\x49\x4E\x54\x45\x47\x45\x52","\x42\x4F\x4F\x4C\x45\x41\x4E","\x72\x65\x70\x6F\x72\x74\x5F\x71\x75\x65\x75\x65","\x75\x6E\x69\x71\x75\x65\x69\x64","\x64\x65\x66\x69\x6E\x65"];var moment=require(_0x5c07[0]);module[_0x5c07[1]]=function(_0xc2fdx2,_0xc2fdx3){var _0xc2fdx4=_0xc2fdx2[_0x5c07[18]](_0x5c07[2],{uniqueid:_0xc2fdx3[_0x5c07[3]],calleridnum:_0xc2fdx3[_0x5c07[3]],calleridname:_0xc2fdx3[_0x5c07[3]],queue:_0xc2fdx3[_0x5c07[3]],queuecallerjoinAt:_0xc2fdx3[_0x5c07[4]],queuecallerleaveAt:{type:_0xc2fdx3[_0x5c07[4]],set:function(_0xc2fdx5){var _0xc2fdx6=moment(_0xc2fdx5);var _0xc2fdx7=moment(this[_0x5c07[8]](_0x5c07[7]))[_0x5c07[6]](_0x5c07[5]);this[_0x5c07[10]](_0x5c07[9],_0xc2fdx5);this[_0x5c07[10]](_0x5c07[11],_0xc2fdx6[_0x5c07[13]](_0xc2fdx7,_0x5c07[12]))}},position:_0xc2fdx3[_0x5c07[14]],count:_0xc2fdx3[_0x5c07[14]],queuecallerabandon:{type:_0xc2fdx3[_0x5c07[15]],defaultValue:false},queuecallerabandonAt:_0xc2fdx3[_0x5c07[4]],queuecallercomplete:{type:_0xc2fdx3[_0x5c07[15]],defaultValue:false},queuecallercompleteAt:_0xc2fdx3[_0x5c07[4]],queuecallerexit:{type:_0xc2fdx3[_0x5c07[15]],defaultValue:false},queuecallerexitAt:_0xc2fdx3[_0x5c07[4]],queuecallerexitreason:_0xc2fdx3[_0x5c07[3]],originalposition:_0xc2fdx3[_0x5c07[14]],channel:_0xc2fdx3[_0x5c07[3]],channelstate:_0xc2fdx3[_0x5c07[14]],channelstatedesc:_0xc2fdx3[_0x5c07[3]],connectedlinenum:_0xc2fdx3[_0x5c07[3]],connectedlinename:_0xc2fdx3[_0x5c07[3]],language:_0xc2fdx3[_0x5c07[3]],accountcode:_0xc2fdx3[_0x5c07[3]],context:_0xc2fdx3[_0x5c07[3]],exten:_0xc2fdx3[_0x5c07[3]],priority:_0xc2fdx3[_0x5c07[3]],holdtime:_0xc2fdx3[_0x5c07[14]]},{tableName:_0x5c07[16],indexes:[{fields:[_0x5c07[17]]}]});return _0xc2fdx4}
\ No newline at end of file
+/**
+ * QueueLog Model
+ */
+
+var moment = require('moment');
+
+module.exports = function(sequelize, DataTypes) {
+
+  var ReportQueue = sequelize.define('ReportQueue', {
+    uniqueid: DataTypes.STRING,
+    calleridnum: DataTypes.STRING,
+    calleridname: DataTypes.STRING,
+    queue: DataTypes.STRING,
+    queuecallerjoinAt: DataTypes.DATE,
+    queuecallerleaveAt: {
+      type: DataTypes.DATE,
+      set: function(queuecallerleaveAt) {
+        var a = moment(queuecallerleaveAt);
+        var b = moment(this.getDataValue('queuecallerjoinAt')).format("YYYY-MM-DD HH:mm:ss");
+
+        this.setDataValue('queuecallerleaveAt', queuecallerleaveAt);
+        this.setDataValue('holdtime', a.diff(b, 'seconds'));
+      }
+    },
+    position: DataTypes.INTEGER,
+    count: DataTypes.INTEGER,
+    queuecallerabandon: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: false
+    },
+    queuecallerabandonAt: DataTypes.DATE,
+    queuecallercomplete: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: false
+    },
+    queuecallercompleteAt: DataTypes.DATE,
+    queuecallerexit: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: false
+    },
+    queuecallerexitAt: DataTypes.DATE,
+    queuecallerexitreason: DataTypes.STRING,
+    originalposition: DataTypes.INTEGER,
+    channel: DataTypes.STRING,
+    channelstate: DataTypes.INTEGER,
+    channelstatedesc: DataTypes.STRING,
+    connectedlinenum: DataTypes.STRING,
+    connectedlinename: DataTypes.STRING,
+    language: DataTypes.STRING,
+    accountcode: DataTypes.STRING,
+    context: DataTypes.STRING,
+    exten: DataTypes.STRING,
+    priority: DataTypes.STRING,
+    holdtime: DataTypes.INTEGER
+  }, {
+    tableName: 'report_queue',
+    indexes: [{
+      fields: ['uniqueid']
+    }]
+  });
+
+  return ReportQueue;
+};
index c32ad84..62a8e0c 100644 (file)
@@ -1 +1,89 @@
-var _0x120c=["\x65\x78\x70\x6F\x72\x74\x73","\x52\x65\x70\x6F\x72\x74\x53\x71\x75\x61\x72\x65","\x53\x54\x52\x49\x4E\x47","\x44\x41\x54\x45","\x72\x65\x70\x6F\x72\x74\x5F\x73\x71\x75\x61\x72\x65","\x64\x65\x66\x69\x6E\x65"];module[_0x120c[0]]=function(_0xe5f4x1,_0xe5f4x2){var _0xe5f4x3=_0xe5f4x1[_0x120c[5]](_0x120c[1],{network:{type:_0xe5f4x2[_0x120c[2]]},network_script:{type:_0xe5f4x2[_0x120c[2]]},request:{type:_0xe5f4x2[_0x120c[2]]},channel:{type:_0xe5f4x2[_0x120c[2]]},language:{type:_0xe5f4x2[_0x120c[2]]},type:{type:_0xe5f4x2[_0x120c[2]]},uniqueid:{type:_0xe5f4x2[_0x120c[2]]},version:{type:_0xe5f4x2[_0x120c[2]]},callerid:{type:_0xe5f4x2[_0x120c[2]]},calleridname:{type:_0xe5f4x2[_0x120c[2]]},callingpres:{type:_0xe5f4x2[_0x120c[2]]},callingani2:{type:_0xe5f4x2[_0x120c[2]]},callington:{type:_0xe5f4x2[_0x120c[2]]},callingtns:{type:_0xe5f4x2[_0x120c[2]]},dnid:{type:_0xe5f4x2[_0x120c[2]]},rdnis:{type:_0xe5f4x2[_0x120c[2]]},context:{type:_0xe5f4x2[_0x120c[2]]},extension:{type:_0xe5f4x2[_0x120c[2]]},priority:{type:_0xe5f4x2[_0x120c[2]]},enhanced:{type:_0xe5f4x2[_0x120c[2]]},accountcode:{type:_0xe5f4x2[_0x120c[2]]},threadid:{type:_0xe5f4x2[_0x120c[2]]},project_name:{type:_0xe5f4x2[_0x120c[2]]},joinAt:{type:_0xe5f4x2[_0x120c[3]]},leaveAt:{type:_0xe5f4x2[_0x120c[3]],unique:true}},{tableName:_0x120c[4]});return _0xe5f4x3}
\ No newline at end of file
+/**
+ * Context Model
+ */
+
+module.exports = function(sequelize, DataTypes) {
+
+  var ReportSquare = sequelize.define('ReportSquare', {
+    network: {
+      type: DataTypes.STRING,
+    },
+    network_script: {
+      type: DataTypes.STRING,
+    },
+    request: {
+      type: DataTypes.STRING,
+    },
+    channel: {
+      type: DataTypes.STRING,
+    },
+    language: {
+      type: DataTypes.STRING,
+    },
+    type: {
+      type: DataTypes.STRING,
+    },
+    uniqueid: {
+      type: DataTypes.STRING,
+    },
+    version: {
+      type: DataTypes.STRING,
+    },
+    callerid: {
+      type: DataTypes.STRING,
+    },
+    calleridname: {
+      type: DataTypes.STRING,
+    },
+    callingpres: {
+      type: DataTypes.STRING,
+    },
+    callingani2: {
+      type: DataTypes.STRING,
+    },
+    callington: {
+      type: DataTypes.STRING,
+    },
+    callingtns: {
+      type: DataTypes.STRING,
+    },
+    dnid: {
+      type: DataTypes.STRING,
+    },
+    rdnis: {
+      type: DataTypes.STRING,
+    },
+    context: {
+      type: DataTypes.STRING,
+    },
+    extension: {
+      type: DataTypes.STRING,
+    },
+    priority: {
+      type: DataTypes.STRING,
+    },
+    enhanced: {
+      type: DataTypes.STRING,
+    },
+    accountcode: {
+      type: DataTypes.STRING,
+    },
+    threadid: {
+      type: DataTypes.STRING,
+    },
+    project_name: {
+      type: DataTypes.STRING,
+    },
+    joinAt: {
+      type: DataTypes.DATE,
+    },
+    leaveAt: {
+      type: DataTypes.DATE,
+      unique: true
+    }
+  }, {
+    tableName: 'report_square'
+  });
+
+  return ReportSquare;
+};
index 1303944..b9a2f4c 100644 (file)
@@ -1 +1,25 @@
-var _0xc2a3=["\x65\x78\x70\x6F\x72\x74\x73","\x52\x65\x70\x6F\x72\x74\x53\x71\x75\x61\x72\x65\x44\x65\x74\x61\x69\x6C","\x53\x54\x52\x49\x4E\x47","\x72\x65\x70\x6F\x72\x74\x5F\x73\x71\x75\x61\x72\x65\x5F\x64\x65\x74\x61\x69\x6C\x73","\x64\x65\x66\x69\x6E\x65"];module[_0xc2a3[0]]=function(_0xfcf3x1,_0xfcf3x2){var _0xfcf3x3=_0xfcf3x1[_0xc2a3[4]](_0xc2a3[1],{uniqueid:{type:_0xfcf3x2[_0xc2a3[2]]},node:{type:_0xfcf3x2[_0xc2a3[2]]},application:{type:_0xfcf3x2[_0xc2a3[2]]},data:{type:_0xfcf3x2[_0xc2a3[2]]}},{tableName:_0xc2a3[3]});return _0xfcf3x3}
\ No newline at end of file
+/**
+ * Context Model
+ */
+
+module.exports = function(sequelize, DataTypes) {
+
+  var ReportSquareDetail = sequelize.define('ReportSquareDetail', {
+    uniqueid: {
+      type: DataTypes.STRING,
+    },
+    node: {
+      type: DataTypes.STRING,
+    },
+    application: {
+      type: DataTypes.STRING,
+    },
+    data: {
+      type: DataTypes.STRING,
+    }
+  }, {
+    tableName: 'report_square_details'
+  });
+
+  return ReportSquareDetail;
+};
index 3c3554b..f507511 100644 (file)
@@ -1 +1,25 @@
-var _0x957a=["\x65\x78\x70\x6F\x72\x74\x73","\x52\x65\x70\x6F\x72\x74\x54\x72\x61\x6E\x73\x66\x65\x72","\x62\x6C\x69\x6E\x64","\x61\x74\x74\x65\x6E\x64\x65\x64","\x53\x54\x52\x49\x4E\x47","\x72\x65\x70\x6F\x72\x74\x5F\x74\x72\x61\x6E\x73\x66\x65\x72","\x64\x65\x66\x69\x6E\x65"];module[_0x957a[0]]=function(_0xaea2x1,_0xaea2x2){var _0xaea2x3=_0xaea2x1[_0x957a[6]](_0x957a[1],{type:_0xaea2x2.ENUM(_0x957a[2],_0x957a[3]),transferercalleridnum:_0xaea2x2[_0x957a[4]],transferercalleridname:_0xaea2x2[_0x957a[4]],transfererconnectedlinenum:_0xaea2x2[_0x957a[4]],transfererconnectedlinename:_0xaea2x2[_0x957a[4]],transferercontext:_0xaea2x2[_0x957a[4]],transfererexten:_0xaea2x2[_0x957a[4]],transfereecontext:_0xaea2x2[_0x957a[4]],transfereeexten:_0xaea2x2[_0x957a[4]],transfereruniqueid:_0xaea2x2[_0x957a[4]],transfererlinkedid:_0xaea2x2[_0x957a[4]],extension:_0xaea2x2[_0x957a[4]]},{tableName:_0x957a[5]});return _0xaea2x3}
\ No newline at end of file
+/**
+ * Agent Log Model
+ */
+
+module.exports = function(sequelize, DataTypes) {
+
+  var ReportTransfer = sequelize.define('ReportTransfer', {
+    type: DataTypes.ENUM('blind', 'attended'),
+    transferercalleridnum: DataTypes.STRING,
+    transferercalleridname: DataTypes.STRING,
+    transfererconnectedlinenum: DataTypes.STRING,
+    transfererconnectedlinename: DataTypes.STRING,
+    transferercontext: DataTypes.STRING,
+    transfererexten: DataTypes.STRING,
+    transfereecontext: DataTypes.STRING,
+    transfereeexten: DataTypes.STRING,
+    transfereruniqueid: DataTypes.STRING,
+    transfererlinkedid: DataTypes.STRING,
+    extension: DataTypes.STRING,
+  }, {
+    tableName: 'report_transfer'
+  });
+
+  return ReportTransfer;
+};
index d5cb009..2c14bfe 100644 (file)
@@ -1 +1,12 @@
-var _0x2327=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x52\x65\x70\x6F\x72\x74\x54\x72\x65\x65","\x54\x45\x58\x54","\x72\x65\x70\x6F\x72\x74\x5F\x74\x72\x65\x65\x73","\x64\x65\x66\x69\x6E\x65"];_0x2327[0];module[_0x2327[1]]=function(_0x2b60x1,_0x2b60x2){var _0x2b60x3=_0x2b60x1[_0x2327[5]](_0x2327[2],{tree:_0x2b60x2[_0x2327[3]]},{tableName:_0x2327[4]});return _0x2b60x3}
\ No newline at end of file
+'use strict';
+
+module.exports = function(sequelize, DataTypes) {
+
+  var ReportTree = sequelize.define('ReportTree', {
+    tree: DataTypes.TEXT
+  }, {
+    tableName: 'report_trees'
+  });
+
+  return ReportTree;
+};
index 0c712ee..0ea5fa6 100644 (file)
@@ -1 +1,33 @@
-var _0x5f39=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x41\x63\x63\x6F\x75\x6E\x74","\x53\x54\x52\x49\x4E\x47","\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5F\x61\x63\x63\x6F\x75\x6E\x74\x73","\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73","\x41\x63\x63\x6F\x75\x6E\x74\x49\x64","\x68\x61\x73\x4D\x61\x6E\x79","\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73","\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x69\x64","\x6E\x61\x6D\x65","\x61\x64\x64\x53\x63\x6F\x70\x65","\x64\x65\x66\x69\x6E\x65"];_0x5f39[0];module[_0x5f39[1]]=function(_0xf81cx1,_0xf81cx2){return _0xf81cx1[_0x5f39[13]](_0x5f39[2],{name:_0xf81cx2[_0x5f39[3]],description:_0xf81cx2[_0x5f39[3]],username:{type:_0xf81cx2[_0x5f39[3]],unique:true},remoteUri:_0xf81cx2[_0x5f39[3]],password:_0xf81cx2[_0x5f39[3]],clientId:_0xf81cx2[_0x5f39[3]],clientSecret:_0xf81cx2[_0x5f39[3]],securityToken:_0xf81cx2[_0x5f39[3]]},{tableName:_0x5f39[4],associate:function(_0xf81cx3){_0xf81cx3[_0x5f39[2]][_0x5f39[7]](_0xf81cx3.SalesforceConfiguration,{as:_0x5f39[5],foreignKey:_0x5f39[6]});_0xf81cx3[_0x5f39[2]][_0x5f39[12]](_0x5f39[8],{include:[{model:_0xf81cx3[_0x5f39[9]],as:_0x5f39[5],required:false,attributes:[_0x5f39[10],_0x5f39[11]]}]})}})}
\ No newline at end of file
+'use strict';
+
+module.exports = function(sequelize, DataTypes) {
+  return sequelize.define('SalesforceAccount', {
+    name: DataTypes.STRING,
+    description: DataTypes.STRING,
+    username: {
+      type: DataTypes.STRING,
+      unique: true
+    },
+    remoteUri: DataTypes.STRING,
+    password: DataTypes.STRING,
+    clientId: DataTypes.STRING,
+    clientSecret: DataTypes.STRING,
+    securityToken: DataTypes.STRING
+  }, {
+    tableName: 'salesforce_accounts',
+    associate: function(models) {
+      models.SalesforceAccount.hasMany(models.SalesforceConfiguration, {
+        as: 'Configurations',
+        foreignKey: 'AccountId'
+      });
+      models.SalesforceAccount.addScope('configurations', {
+        include: [{
+          model: models.SalesforceConfiguration,
+          as: 'Configurations',
+          required: false,
+          attributes: ['id', 'name']
+        }]
+      });
+    }
+  });
+};
index 6eb95ac..6850116 100644 (file)
@@ -1 +1,27 @@
-var _0xdc32=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x53\x54\x52\x49\x4E\x47","\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73","\x41\x63\x63\x6F\x75\x6E\x74\x49\x64","\x62\x65\x6C\x6F\x6E\x67\x73\x54\x6F","\x53\x75\x62\x6A\x65\x63\x74","\x53\x75\x62\x6A\x65\x63\x74\x49\x64","\x68\x61\x73\x4D\x61\x6E\x79","\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x49\x64","\x46\x69\x65\x6C\x64","\x46\x69\x65\x6C\x64\x49\x64","\x64\x65\x66\x69\x6E\x65"];_0xdc32[0];module[_0xdc32[1]]=function(_0x7027x1,_0x7027x2){return _0x7027x1[_0xdc32[14]](_0xdc32[2],{name:_0x7027x2[_0xdc32[3]],description:_0x7027x2[_0xdc32[3]]},{tableName:_0xdc32[4],associate:function(_0x7027x3){_0x7027x3[_0xdc32[2]][_0xdc32[6]](_0x7027x3.SalesforceAccount,{foreignKey:_0xdc32[5]});_0x7027x3[_0xdc32[2]][_0xdc32[9]](_0x7027x3.SalesforceField,{as:_0xdc32[7],foreignKey:_0xdc32[8]});_0x7027x3[_0xdc32[2]][_0xdc32[9]](_0x7027x3.SalesforceField,{as:_0xdc32[10],foreignKey:_0xdc32[11]});_0x7027x3[_0xdc32[2]][_0xdc32[9]](_0x7027x3.SalesforceField,{as:_0xdc32[12],foreignKey:_0xdc32[13]})}})}
\ No newline at end of file
+'use strict';
+
+module.exports = function(sequelize, DataTypes) {
+  return sequelize.define('SalesforceConfiguration', {
+    name: DataTypes.STRING,
+    description: DataTypes.STRING
+  }, {
+    tableName: 'salesforce_configurations',
+    associate: function(models) {
+      models.SalesforceConfiguration.belongsTo(models.SalesforceAccount, {
+        foreignKey: 'AccountId'
+      });
+      models.SalesforceConfiguration.hasMany(models.SalesforceField, {
+        as: 'Subject',
+        foreignKey: 'SubjectId'
+      });
+      models.SalesforceConfiguration.hasMany(models.SalesforceField, {
+        as: 'Description',
+        foreignKey: 'DescriptionId'
+      });
+      models.SalesforceConfiguration.hasMany(models.SalesforceField, {
+        as: 'Field',
+        foreignKey: 'FieldId'
+      });
+    }
+  });
+};
index 812f36f..f3a3501 100644 (file)
@@ -1 +1,22 @@
-var _0x608e=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x46\x69\x65\x6C\x64","\x73\x74\x72\x69\x6E\x67","\x76\x61\x72\x69\x61\x62\x6C\x65","\x6B\x65\x79\x5F\x76\x61\x6C\x75\x65","\x53\x54\x52\x49\x4E\x47","\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5F\x66\x69\x65\x6C\x64\x73","\x62\x65\x6C\x6F\x6E\x67\x73\x54\x6F","\x64\x65\x66\x69\x6E\x65"];_0x608e[0];module[_0x608e[1]]=function(_0xaf5bx1,_0xaf5bx2){return _0xaf5bx1[_0x608e[9]](_0x608e[2],{type:{type:_0xaf5bx2.ENUM(_0x608e[3],_0x608e[4],_0x608e[5]),defaultValue:_0x608e[3]},content:_0xaf5bx2[_0x608e[6]],key:_0xaf5bx2[_0x608e[6]],keyType:{type:_0xaf5bx2.ENUM(_0x608e[3],_0x608e[4])},keyContent:_0xaf5bx2[_0x608e[6]],idField:_0xaf5bx2[_0x608e[6]]},{tableName:_0x608e[7],associate:function(_0xaf5bx3){_0xaf5bx3[_0x608e[2]][_0x608e[8]](_0xaf5bx3.Variable)}})}
\ No newline at end of file
+'use strict';
+
+module.exports = function(sequelize, DataTypes) {
+  return sequelize.define('SalesforceField', {
+    type: {
+      type: DataTypes.ENUM('string', 'variable', 'key_value'),
+      defaultValue: 'string'
+    },
+    content: DataTypes.STRING,
+    key: DataTypes.STRING,
+    keyType: {
+      type: DataTypes.ENUM('string', 'variable')
+    },
+    keyContent: DataTypes.STRING,
+    idField: DataTypes.STRING
+  }, {
+    tableName: 'salesforce_fields',
+    associate: function(models) {
+      models.SalesforceField.belongsTo(models.Variable);
+    }
+  });
+};
index 8e61f66..a8efea2 100644 (file)
@@ -1 +1,42 @@
-var _0x9444=["\x65\x78\x70\x6F\x72\x74\x73","\x53\x65\x72\x76\x69\x63\x65","\x53\x54\x52\x49\x4E\x47","\x42\x4F\x4F\x4C\x45\x41\x4E","\x73\x65\x72\x76\x69\x63\x65\x73","\x55\x73\x65\x72\x48\x61\x73\x53\x65\x72\x76\x69\x63\x65","\x73\x65\x72\x76\x69\x63\x65","\x62\x65\x6C\x6F\x6E\x67\x73\x54\x6F\x4D\x61\x6E\x79","\x43\x75\x73\x74\x6F\x6D\x46\x69\x65\x6C\x64\x73","\x68\x61\x73\x4D\x61\x6E\x79","\x43\x6F\x6E\x74\x61\x63\x74\x73","\x63\x61\x73\x63\x61\x64\x65","\x63\x75\x73\x74\x6F\x6D\x46\x69\x65\x6C\x64\x73","\x43\x75\x73\x74\x6F\x6D\x46\x69\x65\x6C\x64","\x61\x64\x64\x53\x63\x6F\x70\x65","\x64\x65\x66\x69\x6E\x65"];module[_0x9444[0]]=function(_0xa5d9x1,_0xa5d9x2){var _0xa5d9x3=_0xa5d9x1[_0x9444[15]](_0x9444[1],{name:{type:_0xa5d9x2[_0x9444[2]],unique:true},description:{type:_0xa5d9x2[_0x9444[2]],allowNull:true},defaultEntry:{type:_0xa5d9x2[_0x9444[3]],defaultValue:false}},{tableName:_0x9444[4],associate:function(_0xa5d9x4){_0xa5d9x3[_0x9444[7]](_0xa5d9x4.User,{through:_0xa5d9x4[_0x9444[5]],foreignKey:_0x9444[6]});_0xa5d9x3[_0x9444[9]](_0xa5d9x4.CustomField,{as:_0x9444[8],required:false});_0xa5d9x3[_0x9444[9]](_0xa5d9x4.Contact,{as:_0x9444[10],onDelete:_0x9444[11]});_0xa5d9x3[_0x9444[14]](_0x9444[12],{include:[{model:_0xa5d9x4[_0x9444[13]],as:_0x9444[8]}]})}});return _0xa5d9x3}
\ No newline at end of file
+/* jshint indent: 2 */
+
+module.exports = function(sequelize, DataTypes) {
+  var Service = sequelize.define('Service', {
+    name: {
+      type: DataTypes.STRING,
+      unique: true
+    },
+    description: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    defaultEntry: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: false
+    }
+  }, {
+    tableName: 'services',
+    associate: function(models) {
+      Service.belongsToMany(models.User, {
+        through: models.UserHasService,
+        foreignKey: 'service'
+      });
+      Service.hasMany(models.CustomField, {
+        as: 'CustomFields',
+        required: false
+      });
+      Service.hasMany(models.Contact, {
+        as: 'Contacts',
+        onDelete: 'cascade'
+      });
+      Service.addScope('customFields', {
+        include: [{
+          model: models.CustomField,
+          as: 'CustomFields'
+        }]
+      });
+    }
+  });
+
+  return Service;
+};
index c61ab93..a7b7931 100644 (file)
@@ -1 +1,32 @@
-var _0x5924=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x53\x65\x74\x74\x69\x6E\x67\x73","\x54\x45\x58\x54","\x53\x54\x52\x49\x4E\x47","\x73\x65\x74\x74\x69\x6E\x67\x73","\x64\x65\x66\x69\x6E\x65"];_0x5924[0];module[_0x5924[1]]=function(_0x52f1x1,_0x52f1x2){var _0x52f1x3=_0x52f1x1[_0x5924[6]](_0x5924[2],{license:_0x52f1x2[_0x5924[3]],min_internal:{type:_0x52f1x2.INTEGER(11),unique:true,defaultValue:1000},min_mailbox:{type:_0x52f1x2.INTEGER(11),unique:true,defaultValue:1000},agi_port:{type:_0x52f1x2.INTEGER(11),defaultValue:4573},automation_timeout:{type:_0x52f1x2.INTEGER(11),defaultValue:3600},soundPath:_0x52f1x2[_0x5924[4]]},{tableName:_0x5924[5]});return _0x52f1x3}
\ No newline at end of file
+'use strict';
+
+module.exports = function(sequelize, DataTypes) {
+
+  var Settings = sequelize.define('Settings', {
+    license: DataTypes.TEXT,
+    min_internal: {
+      type: DataTypes.INTEGER(11),
+      unique: true,
+      defaultValue: 1000
+    },
+    min_mailbox: {
+      type: DataTypes.INTEGER(11),
+      unique: true,
+      defaultValue: 1000
+    },
+    agi_port: {
+      type: DataTypes.INTEGER(11),
+      defaultValue: 4573
+    },
+    automation_timeout: {
+      type: DataTypes.INTEGER(11),
+      defaultValue: 3600
+    },
+    soundPath: DataTypes.STRING
+  }, {
+    tableName: 'settings'
+  });
+
+  return Settings;
+
+};
index 49d3b0b..3b5ab98 100644 (file)
@@ -1 +1,36 @@
-var _0x863d=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x53\x6F\x75\x6E\x64","\x53\x54\x52\x49\x4E\x47","","\x54\x68\x65\x20\x6E\x61\x6D\x65\x20\x63\x61\x6E\x6E\x6F\x74\x20\x62\x65\x20\x65\x6D\x70\x74\x79\x21","\x46\x4C\x4F\x41\x54","\x42\x49\x47\x49\x4E\x54","\x49\x4E\x54\x45\x47\x45\x52","\x73\x6F\x75\x6E\x64\x73","\x64\x65\x66\x69\x6E\x65"];_0x863d[0];module[_0x863d[1]]=function(_0xfc53x1,_0xfc53x2){var _0xfc53x3=_0xfc53x1[_0x863d[10]](_0x863d[2],{name:_0xfc53x2[_0x863d[3]],save_name:_0xfc53x2[_0x863d[3]],display_name:{type:_0xfc53x2[_0x863d[3]],allowNull:false,defaultValue:_0x863d[4],validate:{notEmpty:{msg:_0x863d[5]}}},description:_0xfc53x2[_0x863d[3]],original_format:_0xfc53x2[_0x863d[3]],original_duration:_0xfc53x2[_0x863d[6]],original_sampleCount:_0xfc53x2[_0x863d[7]],original_channelCount:_0xfc53x2[_0x863d[8]],original_bitRate:_0xfc53x2[_0x863d[7]],original_sampleRate:_0xfc53x2[_0x863d[8]],converted_format:_0xfc53x2[_0x863d[3]],converted_duration:_0xfc53x2[_0x863d[6]],converted_sampleCount:_0xfc53x2[_0x863d[7]],converted_channelCount:_0xfc53x2[_0x863d[8]],converted_bitRate:_0xfc53x2[_0x863d[7]],converted_sampleRate:_0xfc53x2[_0x863d[8]]},{tableName:_0x863d[9]});return _0xfc53x3}
\ No newline at end of file
+'use strict';
+
+module.exports = function(sequelize, DataTypes) {
+
+       var Sound = sequelize.define('Sound', {
+               name: DataTypes.STRING,
+               save_name: DataTypes.STRING,
+               display_name: {
+                       type: DataTypes.STRING,
+                       allowNull: false,
+                       defaultValue: '',
+                       validate: {
+                               notEmpty: {
+                                       msg: "The name cannot be empty!"
+                               } // don't allow empty strings
+                       }
+               },
+               description: DataTypes.STRING,
+               original_format: DataTypes.STRING,
+               original_duration: DataTypes.FLOAT,
+               original_sampleCount: DataTypes.BIGINT,
+               original_channelCount: DataTypes.INTEGER,
+               original_bitRate: DataTypes.BIGINT,
+               original_sampleRate: DataTypes.INTEGER,
+               converted_format: DataTypes.STRING,
+               converted_duration: DataTypes.FLOAT,
+               converted_sampleCount: DataTypes.BIGINT,
+               converted_channelCount: DataTypes.INTEGER,
+               converted_bitRate: DataTypes.BIGINT,
+               converted_sampleRate: DataTypes.INTEGER
+       }, {
+               tableName: 'sounds'
+       });
+
+       return Sound;
+};
index be6e2d5..a8a9bf8 100644 (file)
@@ -1 +1,24 @@
-var _0x76d0=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x53\x71\x75\x61\x72\x65\x4F\x64\x62\x63","\x53\x54\x52\x49\x4E\x47","\x73\x71\x75\x61\x72\x65\x5F\x6F\x64\x62\x63","\x64\x65\x66\x69\x6E\x65"];_0x76d0[0];module[_0x76d0[1]]=function(_0x1ddfx1,_0x1ddfx2){var _0x1ddfx3=_0x1ddfx1[_0x76d0[5]](_0x76d0[2],{name:{type:_0x1ddfx2[_0x76d0[3]],unique:true,allowNull:false,validate:{notEmpty:true}},dsn:{type:_0x1ddfx2[_0x76d0[3]]},description:_0x1ddfx2[_0x76d0[3]]},{tableName:_0x76d0[4]});return _0x1ddfx3}
\ No newline at end of file
+'use strict';
+
+module.exports = function(sequelize, DataTypes) {
+
+  var SquareOdbc = sequelize.define('SquareOdbc', {
+    name: {
+      type: DataTypes.STRING,
+      unique: true,
+      allowNull: false,
+      validate: {
+        notEmpty: true
+      },
+    },
+    dsn: {
+      type: DataTypes.STRING,
+    },
+    description: DataTypes.STRING
+  }, {
+    tableName: 'square_odbc'
+  });
+
+  return SquareOdbc;
+
+};
index b1d70ea..e9f9ccd 100644 (file)
@@ -1 +1,29 @@
-var _0xc855=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x53\x71\x75\x61\x72\x65\x50\x72\x6F\x6A\x65\x63\x74","\x53\x54\x52\x49\x4E\x47","\x54\x45\x58\x54","\x6C\x6F\x6E\x67","\x73\x71\x75\x61\x72\x65\x5F\x70\x72\x6F\x6A\x65\x63\x74\x73","\x64\x65\x66\x69\x6E\x65"];_0xc855[0];module[_0xc855[1]]=function(_0xcd1ax1,_0xcd1ax2){var _0xcd1ax3=_0xcd1ax1[_0xc855[7]](_0xc855[2],{name:{type:_0xcd1ax2[_0xc855[3]],unique:true,allowNull:false,validate:{notEmpty:true}},description:_0xcd1ax2[_0xc855[3]],preproduction:{type:_0xcd1ax2[_0xc855[4]],length:_0xc855[5]},production:{type:_0xcd1ax2[_0xc855[4]],length:_0xc855[5]}},{tableName:_0xc855[6]});return _0xcd1ax3}
\ No newline at end of file
+'use strict';
+
+module.exports = function(sequelize, DataTypes) {
+
+  var SquareProject = sequelize.define('SquareProject', {
+    name: {
+      type: DataTypes.STRING,
+      unique: true,
+      allowNull: false,
+      validate: {
+        notEmpty: true
+      }
+    },
+    description: DataTypes.STRING,
+    preproduction: {
+      type: DataTypes.TEXT,
+      length: 'long'
+    },
+    production: {
+      type: DataTypes.TEXT,
+      length: 'long'
+    }
+  }, {
+    tableName: 'square_projects',
+  });
+
+  return SquareProject;
+
+};
index c0985c7..1130f64 100644 (file)
@@ -1 +1,29 @@
-var _0x5ad4=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x53\x75\x67\x61\x72\x63\x72\x6D\x41\x63\x63\x6F\x75\x6E\x74","\x53\x54\x52\x49\x4E\x47","\x73\x75\x67\x61\x72\x63\x72\x6D\x5F\x61\x63\x63\x6F\x75\x6E\x74\x73","\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73","\x41\x63\x63\x6F\x75\x6E\x74\x49\x64","\x68\x61\x73\x4D\x61\x6E\x79","\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73","\x53\x75\x67\x61\x72\x63\x72\x6D\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x69\x64","\x6E\x61\x6D\x65","\x61\x64\x64\x53\x63\x6F\x70\x65","\x64\x65\x66\x69\x6E\x65"];_0x5ad4[0];module[_0x5ad4[1]]=function(_0x1956x1,_0x1956x2){return _0x1956x1[_0x5ad4[13]](_0x5ad4[2],{name:_0x1956x2[_0x5ad4[3]],description:_0x1956x2[_0x5ad4[3]],username:{type:_0x1956x2[_0x5ad4[3]]},remoteUri:_0x1956x2[_0x5ad4[3]],password:_0x1956x2[_0x5ad4[3]]},{tableName:_0x5ad4[4],associate:function(_0x1956x3){_0x1956x3[_0x5ad4[2]][_0x5ad4[7]](_0x1956x3.SugarcrmConfiguration,{as:_0x5ad4[5],foreignKey:_0x5ad4[6]});_0x1956x3[_0x5ad4[2]][_0x5ad4[12]](_0x5ad4[8],{include:[{model:_0x1956x3[_0x5ad4[9]],as:_0x5ad4[5],required:false,attributes:[_0x5ad4[10],_0x5ad4[11]]}]})}})}
\ No newline at end of file
+'use strict';
+
+module.exports = function(sequelize, DataTypes) {
+  return sequelize.define('SugarcrmAccount', {
+    name: DataTypes.STRING,
+    description: DataTypes.STRING,
+    username: {
+      type: DataTypes.STRING
+    },
+    remoteUri: DataTypes.STRING,
+    password: DataTypes.STRING
+  }, {
+    tableName: 'sugarcrm_accounts',
+    associate: function(models) {
+      models.SugarcrmAccount.hasMany(models.SugarcrmConfiguration, {
+        as: 'Configurations',
+        foreignKey: 'AccountId'
+      });
+      models.SugarcrmAccount.addScope('configurations', {
+        include: [{
+          model: models.SugarcrmConfiguration,
+          as: 'Configurations',
+          required: false,
+          attributes: ['id', 'name']
+        }]
+      });
+    }
+  });
+};
index ba007e2..cae512a 100644 (file)
@@ -1 +1,27 @@
-var _0x5a8f=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x53\x75\x67\x61\x72\x63\x72\x6D\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x53\x54\x52\x49\x4E\x47","\x73\x75\x67\x61\x72\x63\x72\x6D\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73","\x41\x63\x63\x6F\x75\x6E\x74\x49\x64","\x62\x65\x6C\x6F\x6E\x67\x73\x54\x6F","\x53\x75\x62\x6A\x65\x63\x74","\x53\x75\x62\x6A\x65\x63\x74\x49\x64","\x68\x61\x73\x4D\x61\x6E\x79","\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x49\x64","\x46\x69\x65\x6C\x64","\x46\x69\x65\x6C\x64\x49\x64","\x64\x65\x66\x69\x6E\x65"];_0x5a8f[0];module[_0x5a8f[1]]=function(_0x2d66x1,_0x2d66x2){return _0x2d66x1[_0x5a8f[14]](_0x5a8f[2],{name:_0x2d66x2[_0x5a8f[3]],description:_0x2d66x2[_0x5a8f[3]]},{tableName:_0x5a8f[4],associate:function(_0x2d66x3){_0x2d66x3[_0x5a8f[2]][_0x5a8f[6]](_0x2d66x3.SugarcrmAccount,{foreignKey:_0x5a8f[5]});_0x2d66x3[_0x5a8f[2]][_0x5a8f[9]](_0x2d66x3.SugarcrmField,{as:_0x5a8f[7],foreignKey:_0x5a8f[8]});_0x2d66x3[_0x5a8f[2]][_0x5a8f[9]](_0x2d66x3.SugarcrmField,{as:_0x5a8f[10],foreignKey:_0x5a8f[11]});_0x2d66x3[_0x5a8f[2]][_0x5a8f[9]](_0x2d66x3.SugarcrmField,{as:_0x5a8f[12],foreignKey:_0x5a8f[13]})}})}
\ No newline at end of file
+'use strict';
+
+module.exports = function(sequelize, DataTypes) {
+  return sequelize.define('SugarcrmConfiguration', {
+    name: DataTypes.STRING,
+    description: DataTypes.STRING
+  }, {
+    tableName: 'sugarcrm_configurations',
+    associate: function(models) {
+      models.SugarcrmConfiguration.belongsTo(models.SugarcrmAccount, {
+        foreignKey: 'AccountId'
+      });
+      models.SugarcrmConfiguration.hasMany(models.SugarcrmField, {
+        as: 'Subject',
+        foreignKey: 'SubjectId'
+      });
+      models.SugarcrmConfiguration.hasMany(models.SugarcrmField, {
+        as: 'Description',
+        foreignKey: 'DescriptionId'
+      });
+      models.SugarcrmConfiguration.hasMany(models.SugarcrmField, {
+        as: 'Field',
+        foreignKey: 'FieldId'
+      });
+    }
+  });
+};
index 76e8cf4..7998058 100644 (file)
@@ -1 +1,22 @@
-var _0x417b=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x53\x75\x67\x61\x72\x63\x72\x6D\x46\x69\x65\x6C\x64","\x73\x74\x72\x69\x6E\x67","\x76\x61\x72\x69\x61\x62\x6C\x65","\x6B\x65\x79\x5F\x76\x61\x6C\x75\x65","\x53\x54\x52\x49\x4E\x47","\x73\x75\x67\x61\x72\x63\x72\x6D\x5F\x66\x69\x65\x6C\x64\x73","\x62\x65\x6C\x6F\x6E\x67\x73\x54\x6F","\x64\x65\x66\x69\x6E\x65"];_0x417b[0];module[_0x417b[1]]=function(_0x511cx1,_0x511cx2){return _0x511cx1[_0x417b[9]](_0x417b[2],{type:{type:_0x511cx2.ENUM(_0x417b[3],_0x417b[4],_0x417b[5]),defaultValue:_0x417b[3]},content:_0x511cx2[_0x417b[6]],key:_0x511cx2[_0x417b[6]],keyType:{type:_0x511cx2.ENUM(_0x417b[3],_0x417b[4])},keyContent:_0x511cx2[_0x417b[6]],idField:_0x511cx2[_0x417b[6]]},{tableName:_0x417b[7],associate:function(_0x511cx3){_0x511cx3[_0x417b[2]][_0x417b[8]](_0x511cx3.Variable)}})}
\ No newline at end of file
+'use strict';
+
+module.exports = function(sequelize, DataTypes) {
+  return sequelize.define('SugarcrmField', {
+    type: {
+      type: DataTypes.ENUM('string', 'variable', 'key_value'),
+      defaultValue: 'string'
+    },
+    content: DataTypes.STRING,
+    key: DataTypes.STRING,
+    keyType: {
+      type: DataTypes.ENUM('string', 'variable')
+    },
+    keyContent: DataTypes.STRING,
+    idField: DataTypes.STRING
+  }, {
+    tableName: 'sugarcrm_fields',
+    associate: function(models) {
+      models.SugarcrmField.belongsTo(models.Variable);
+    }
+  });
+};
index 0411a94..ff7b5ca 100644 (file)
@@ -1 +1,35 @@
-var _0x3bb2=["\x65\x78\x70\x6F\x72\x74\x73","\x54\x61\x67","\x53\x54\x52\x49\x4E\x47","\x74\x61\x67\x73","\x7A\x65\x6E\x64\x65\x73\x6B\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x5F\x68\x61\x73\x5F\x74\x61\x67\x73","\x62\x65\x6C\x6F\x6E\x67\x73\x54\x6F\x4D\x61\x6E\x79","\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x61\x64\x64\x53\x63\x6F\x70\x65","\x64\x65\x66\x69\x6E\x65"];module[_0x3bb2[0]]=function(_0x9615x1,_0x9615x2){var _0x9615x3=_0x9615x1[_0x3bb2[8]](_0x3bb2[1],{name:{type:_0x9615x2[_0x3bb2[2]],unique:true,allowNull:false,validate:{notEmpty:true}},description:_0x9615x2[_0x3bb2[2]]},{tableName:_0x3bb2[3],associate:function(_0x9615x4){_0x9615x3[_0x3bb2[5]](_0x9615x4.ZendeskConfiguration,{through:_0x3bb2[4]});_0x9615x3[_0x3bb2[7]](_0x3bb2[6],{include:[{all:true}]})}});return _0x9615x3}
\ No newline at end of file
+/**
+ * tag Model
+ */
+
+module.exports = function(sequelize, DataTypes) {
+
+  var Tag = sequelize.define('Tag', {
+    name: {
+      type: DataTypes.STRING,
+      unique: true,
+      allowNull: false,
+      validate: {
+        notEmpty: true,
+      }
+    },
+    description: DataTypes.STRING
+  }, {
+    tableName: 'tags',
+    associate: function(models) {
+      Tag.belongsToMany(models.ZendeskConfiguration, {
+        through: 'zendesk_configuration_has_tags'
+      });
+      Tag.addScope('configuration', {
+        include: [{
+          all: true
+        }]
+      });
+      // Tag.belongsToMany(models.Contact, {
+      //   through: 'contact_tags'
+      // });
+    }
+  });
+
+  return Tag;
+};
index db65271..e2d6f73 100644 (file)
@@ -1 +1,42 @@
-var _0xc2ca=["\x63\x72\x79\x70\x74\x6F","\x65\x78\x70\x6F\x72\x74\x73","\x54\x65\x61\x6D","\x53\x54\x52\x49\x4E\x47","\x42\x4F\x4F\x4C\x45\x41\x4E","\x74\x65\x61\x6D\x73","\x55\x73\x65\x72\x48\x61\x73\x54\x65\x61\x6D","\x62\x65\x6C\x6F\x6E\x67\x73\x54\x6F\x4D\x61\x6E\x79","\x64\x65\x66\x61\x75\x6C\x74","\x55\x73\x65\x72","\x61\x67\x65\x6E\x74","\x69\x64","\x6E\x61\x6D\x65","\x66\x75\x6C\x6C\x6E\x61\x6D\x65","\x65\x6D\x61\x69\x6C","\x69\x6E\x74\x65\x72\x6E\x61\x6C","\x61\x64\x64\x53\x63\x6F\x70\x65","\x64\x65\x66\x69\x6E\x65"];var crypto=require(_0xc2ca[0]);module[_0xc2ca[1]]=function(_0xa317x2,_0xa317x3){var _0xa317x4=_0xa317x2[_0xc2ca[17]](_0xc2ca[2],{name:{type:_0xa317x3[_0xc2ca[3]],allowNull:false,unique:true},description:{type:_0xa317x3[_0xc2ca[3]]},defaultEntry:{type:_0xa317x3[_0xc2ca[4]],defaultValue:0}},{tableName:_0xc2ca[5],associate:function(_0xa317x5){_0xa317x4[_0xc2ca[7]](_0xa317x5.User,{through:_0xa317x5[_0xc2ca[6]]});_0xa317x4[_0xc2ca[16]](_0xc2ca[8],{include:[{model:_0xa317x5[_0xc2ca[9]],where:{role:_0xc2ca[10]},required:false,attributes:[_0xc2ca[11],_0xc2ca[12],_0xc2ca[13],_0xc2ca[14],_0xc2ca[15]]}]})}});return _0xa317x4}
\ No newline at end of file
+/**
+ * User Model
+ */
+
+var crypto = require('crypto');
+
+module.exports = function(sequelize, DataTypes) {
+
+  var Team = sequelize.define('Team', {
+    name: {
+      type: DataTypes.STRING,
+      allowNull: false,
+      unique: true
+    },
+    description: {
+      type: DataTypes.STRING
+    },
+    defaultEntry: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: 0
+    }
+  }, {
+    tableName: 'teams',
+    associate: function(models) {
+      Team.belongsToMany(models.User, {
+        through: models.UserHasTeam
+      });
+      Team.addScope('default', {
+        include: [{
+          model: models.User,
+          where: {
+            role: 'agent'
+          },
+          required: false,
+          attributes: ['id', 'name', 'fullname', 'email', 'internal']
+        }]
+      });
+    }
+  });
+
+  return Team;
+};
index 17f875c..105d888 100644 (file)
@@ -1 +1,507 @@
-var _0xc887=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x63\x72\x79\x70\x74\x6F","\x6D\x64\x35","\x6C\x6F\x64\x61\x73\x68","\x65\x78\x70\x6F\x72\x74\x73","\x54\x65\x6C\x65\x70\x68\x6F\x6E\x65","\x53\x54\x52\x49\x4E\x47","\x6E\x61\x6D\x65","\x73\x65\x74\x44\x61\x74\x61\x56\x61\x6C\x75\x65","\x64\x65\x66\x61\x75\x6C\x74\x75\x73\x65\x72","\x73\x61\x6C\x74","\x6D\x61\x6B\x65\x53\x61\x6C\x74","\x70\x61\x73\x73\x77\x6F\x72\x64","\x65\x6E\x63\x72\x79\x70\x74\x50\x61\x73\x73\x77\x6F\x72\x64","\x6D\x64\x35\x73\x65\x63\x72\x65\x74","\x3A\x61\x73\x74\x65\x72\x69\x73\x6B\x3A","\x6D\x64\x35\x50\x61\x73\x73\x77\x6F\x72\x64","\x69\x6E\x74\x65\x72\x6E\x61\x6C","\x61\x63\x63\x6F\x75\x6E\x74\x63\x6F\x64\x65","\x64\x79\x6E\x61\x6D\x69\x63","\x66\x72\x69\x65\x6E\x64","\x75\x73\x65\x72","\x70\x65\x65\x72","\x66\x72\x6F\x6D\x2D\x73\x69\x70","\x75\x64\x70","\x72\x66\x63\x32\x38\x33\x33","\x69\x6E\x66\x6F","\x73\x68\x6F\x72\x74\x69\x6E\x66\x6F","\x69\x6E\x62\x61\x6E\x64","\x61\x75\x74\x6F","\x79\x65\x73","\x6E\x6F","\x6E\x6F\x6E\x61\x74","\x75\x70\x64\x61\x74\x65","\x66\x6F\x72\x63\x65\x5F\x72\x70\x6F\x72\x74\x2C\x63\x6F\x6D\x65\x64\x69\x61","\x65\x6E","\x61\x6C\x6C","\x61\x6C\x61\x77\x3B\x75\x6C\x61\x77\x3B\x67\x73\x6D","\x70\x6F\x72\x74\x2C\x69\x6E\x76\x69\x74\x65","\x6E\x65\x76\x65\x72","\x22\x22\x20\x3C\x3E","\x61\x63\x63\x65\x70\x74","\x72\x65\x66\x75\x73\x65","\x6F\x72\x69\x67\x69\x6E\x61\x74\x65","\x75\x61\x63","\x75\x61\x73","\x41\x4C\x4C\x4F\x57\x45\x44\x5F\x4E\x4F\x54\x5F\x53\x43\x52\x45\x45\x4E\x45\x44","\x41\x4C\x4C\x4F\x57\x45\x44\x5F\x50\x41\x53\x53\x45\x44\x5F\x53\x43\x52\x45\x45\x4E","\x41\x4C\x4C\x4F\x57\x45\x44\x5F\x46\x41\x49\x4C\x45\x44\x5F\x53\x43\x52\x45\x45\x4E","\x41\x4C\x4C\x4F\x57\x45\x44","\x50\x52\x4F\x48\x49\x42\x5F\x4E\x4F\x54\x5F\x53\x43\x52\x45\x45\x4E\x45\x44","\x50\x52\x4F\x48\x49\x42\x5F\x50\x41\x53\x53\x45\x44\x5F\x53\x43\x52\x45\x45\x4E","\x50\x52\x4F\x48\x49\x42\x5F\x46\x41\x49\x4C\x45\x44\x5F\x53\x43\x52\x45\x45\x4E","\x50\x52\x4F\x48\x49\x42","\x75\x73\x65\x72\x73","\x74\x65\x6C\x65\x70\x68\x6F\x6E\x65","\x62\x61\x73\x65\x36\x34","\x72\x61\x6E\x64\x6F\x6D\x42\x79\x74\x65\x73","","\x70\x62\x6B\x64\x66\x32\x53\x79\x6E\x63","\x64\x65\x66\x69\x6E\x65"];_0xc887[0];var crypto=require(_0xc887[1]);var md5=require(_0xc887[2]);var _=require(_0xc887[3]);module[_0xc887[4]]=function(_0xf458x4,_0xf458x5){var _0xf458x6=_0xf458x4[_0xc887[60]](_0xc887[5],{name:{type:_0xf458x5[_0xc887[6]],unique:true,validate:{notEmpty:true,is:/^[A-Za-z0-9\.\_]+$/i},set:function(_0xf458x7){this[_0xc887[8]](_0xc887[7],_0xf458x7);this[_0xc887[8]](_0xc887[9],_0xf458x7)}},password:{type:_0xf458x5[_0xc887[6]],allowNull:false,validate:{notEmpty:true},set:function(_0xf458x8){this[_0xc887[10]]=this[_0xc887[11]]();this[_0xc887[8]](_0xc887[12],this[_0xc887[13]](_0xf458x8));this[_0xc887[8]](_0xc887[14],this[_0xc887[16]](this[_0xc887[7]]+_0xc887[15]+_0xf458x8))}},internal:{type:_0xf458x5.INTEGER(11),unique:true,set:function(_0xf458x9){this[_0xc887[8]](_0xc887[17],_0xf458x9);this[_0xc887[8]](_0xc887[18],_0xf458x9)}},ipaddr:{type:_0xf458x5[_0xc887[6]],allowNull:true},port:{type:_0xf458x5.INTEGER(5),allowNull:true},regseconds:{type:_0xf458x5.INTEGER(11),allowNull:true},defaultuser:{type:_0xf458x5[_0xc887[6]],allowNull:true},fullcontact:{type:_0xf458x5[_0xc887[6]],allowNull:true},regserver:{type:_0xf458x5[_0xc887[6]],allowNull:true},useragent:{type:_0xf458x5[_0xc887[6]],allowNull:true},lastms:{type:_0xf458x5.INTEGER(11),allowNull:true},host:{type:_0xf458x5[_0xc887[6]],allowNull:true,defaultValue:_0xc887[19]},type:{type:_0xf458x5.ENUM(_0xc887[20],_0xc887[21],_0xc887[22]),allowNull:true,defaultValue:_0xc887[20]},context:{type:_0xf458x5[_0xc887[6]],allowNull:true,defaultValue:_0xc887[23]},permit:{type:_0xf458x5[_0xc887[6]],allowNull:true},deny:{type:_0xf458x5[_0xc887[6]],allowNull:true},secret:{type:_0xf458x5[_0xc887[6]],allowNull:true},md5secret:{type:_0xf458x5[_0xc887[6]],allowNull:true},remotesecret:{type:_0xf458x5[_0xc887[6]],allowNull:true},transport:{type:_0xf458x5[_0xc887[6]],allowNull:true,defaultValue:_0xc887[24]},dtmfmode:{type:_0xf458x5.ENUM(_0xc887[25],_0xc887[26],_0xc887[27],_0xc887[28],_0xc887[29]),allowNull:true,defaultValue:_0xc887[25]},directmedia:{type:_0xf458x5.ENUM(_0xc887[30],_0xc887[31],_0xc887[32],_0xc887[33]),allowNull:true,defaultValue:_0xc887[31]},nat:{type:_0xf458x5[_0xc887[6]],allowNull:true,defaultValue:_0xc887[34]},callgroup:{type:_0xf458x5[_0xc887[6]],allowNull:true},pickupgroup:{type:_0xf458x5[_0xc887[6]],allowNull:true},language:{type:_0xf458x5[_0xc887[6]],allowNull:true,defaultValue:_0xc887[35]},disallow:{type:_0xf458x5[_0xc887[6]],allowNull:true,defaultValue:_0xc887[36]},allow:{type:_0xf458x5[_0xc887[6]],allowNull:true,defaultValue:_0xc887[37]},insecure:{type:_0xf458x5[_0xc887[6]],allowNull:true,defaultValue:_0xc887[38]},trustrpid:{type:_0xf458x5.ENUM(_0xc887[30],_0xc887[31]),allowNull:true,defaultValue:_0xc887[31]},progressinband:{type:_0xf458x5.ENUM(_0xc887[30],_0xc887[31],_0xc887[39]),allowNull:true},promiscredir:{type:_0xf458x5.ENUM(_0xc887[30],_0xc887[31]),allowNull:true},useclientcode:{type:_0xf458x5.ENUM(_0xc887[30],_0xc887[31]),allowNull:true},accountcode:{type:_0xf458x5.INTEGER(11),allowNull:true},setvar:{type:_0xf458x5[_0xc887[6]],allowNull:true},callerid:{type:_0xf458x5[_0xc887[6]],allowNull:true,defaultValue:_0xc887[40]},amaflags:{type:_0xf458x5[_0xc887[6]],allowNull:true},callcounter:{type:_0xf458x5.ENUM(_0xc887[30],_0xc887[31]),allowNull:true,defaultValue:_0xc887[30]},busylevel:{type:_0xf458x5.INTEGER(11),allowNull:true},allowoverlap:{type:_0xf458x5.ENUM(_0xc887[30],_0xc887[31]),allowNull:true},allowsubscribe:{type:_0xf458x5.ENUM(_0xc887[30],_0xc887[31]),allowNull:true},videosupport:{type:_0xf458x5.ENUM(_0xc887[30],_0xc887[31]),allowNull:true},maxcallbitrate:{type:_0xf458x5.INTEGER(11),allowNull:true},rfc2833compensate:{type:_0xf458x5.ENUM(_0xc887[30],_0xc887[31]),allowNull:true},mailbox:{type:_0xf458x5[_0xc887[6]],allowNull:true},"\x73\x65\x73\x73\x69\x6F\x6E\x2D\x74\x69\x6D\x65\x72\x73":{type:_0xf458x5.ENUM(_0xc887[41],_0xc887[42],_0xc887[43]),allowNull:true},"\x73\x65\x73\x73\x69\x6F\x6E\x2D\x65\x78\x70\x69\x72\x65\x73":{type:_0xf458x5.INTEGER(11),allowNull:true},"\x73\x65\x73\x73\x69\x6F\x6E\x2D\x6D\x69\x6E\x73\x65":{type:_0xf458x5.INTEGER(11),allowNull:true},"\x73\x65\x73\x73\x69\x6F\x6E\x2D\x72\x65\x66\x72\x65\x73\x68\x65\x72":{type:_0xf458x5.ENUM(_0xc887[44],_0xc887[45]),allowNull:true},t38pt_usertpsource:{type:_0xf458x5[_0xc887[6]],allowNull:true},regexten:{type:_0xf458x5[_0xc887[6]],allowNull:true},fromdomain:{type:_0xf458x5[_0xc887[6]],allowNull:true},fromuser:{type:_0xf458x5[_0xc887[6]],allowNull:true},qualify:{type:_0xf458x5.ENUM(_0xc887[30],_0xc887[31]),allowNull:true,defaultValue:_0xc887[30]},defaultip:{type:_0xf458x5[_0xc887[6]],allowNull:true},rtptimeout:{type:_0xf458x5.INTEGER(11),allowNull:true},rtpholdtimeout:{type:_0xf458x5.INTEGER(11),allowNull:true},sendrpid:{type:_0xf458x5.ENUM(_0xc887[30],_0xc887[31]),allowNull:true,defaultValue:_0xc887[31]},outboundproxy:{type:_0xf458x5[_0xc887[6]],allowNull:true},callbackextension:{type:_0xf458x5[_0xc887[6]],allowNull:true},timert1:{type:_0xf458x5.INTEGER(11),allowNull:true},timerb:{type:_0xf458x5.INTEGER(11),allowNull:true},qualifyfreq:{type:_0xf458x5.INTEGER(11),allowNull:true},constantssrc:{type:_0xf458x5.ENUM(_0xc887[30],_0xc887[31]),allowNull:true},contactpermit:{type:_0xf458x5[_0xc887[6]],allowNull:true},contactdeny:{type:_0xf458x5[_0xc887[6]],allowNull:true},usereqphone:{type:_0xf458x5.ENUM(_0xc887[30],_0xc887[31]),allowNull:true,defaultValue:_0xc887[31]},textsupport:{type:_0xf458x5.ENUM(_0xc887[30],_0xc887[31]),allowNull:true},faxdetect:{type:_0xf458x5.ENUM(_0xc887[30],_0xc887[31]),allowNull:true},buggymwi:{type:_0xf458x5.ENUM(_0xc887[30],_0xc887[31]),allowNull:true},auth:{type:_0xf458x5[_0xc887[6]],allowNull:true},fullname:{type:_0xf458x5[_0xc887[6]],allowNull:true},trunkname:{type:_0xf458x5[_0xc887[6]],allowNull:true},cid_number:{type:_0xf458x5[_0xc887[6]],allowNull:true},callingpres:{type:_0xf458x5.ENUM(_0xc887[46],_0xc887[47],_0xc887[48],_0xc887[49],_0xc887[50],_0xc887[51],_0xc887[52],_0xc887[53]),allowNull:true},mohinterpret:{type:_0xf458x5[_0xc887[6]],allowNull:true},mohsuggest:{type:_0xf458x5[_0xc887[6]],allowNull:true},parkinglot:{type:_0xf458x5[_0xc887[6]],allowNull:true},hasvoicemail:{type:_0xf458x5.ENUM(_0xc887[30],_0xc887[31]),allowNull:true},subscribemwi:{type:_0xf458x5.ENUM(_0xc887[30],_0xc887[31]),allowNull:true},vmexten:{type:_0xf458x5[_0xc887[6]],allowNull:true},description:{type:_0xf458x5[_0xc887[6]],allowNull:true},autoframing:{type:_0xf458x5.ENUM(_0xc887[30],_0xc887[31]),allowNull:true},limitonpeers:{type:_0xf458x5.ENUM(_0xc887[30],_0xc887[31]),allowNull:true,defaultValue:_0xc887[30]},rtpkeepalive:{type:_0xf458x5.INTEGER(11),allowNull:true},"\x63\x61\x6C\x6C\x2D\x6C\x69\x6D\x69\x74":{type:_0xf458x5.INTEGER(11),allowNull:true,defaultValue:null},g726nonstandard:{type:_0xf458x5.ENUM(_0xc887[30],_0xc887[31]),allowNull:true},ignoresdpversion:{type:_0xf458x5.ENUM(_0xc887[30],_0xc887[31]),allowNull:true},allowtransfer:{type:_0xf458x5.ENUM(_0xc887[30],_0xc887[31]),allowNull:true},dynamic:{type:_0xf458x5.ENUM(_0xc887[30],_0xc887[31]),allowNull:true},encryption:{type:_0xf458x5.ENUM(_0xc887[30],_0xc887[31]),allowNull:true,defaultValue:_0xc887[31]},registry:{type:_0xf458x5[_0xc887[6]],allowNull:true}},{tableName:_0xc887[54],defaultScope:{where:{role:_0xc887[55]}},instanceMethods:{authenticate:function(_0xf458xa){return this[_0xc887[13]](_0xf458xa)===this[_0xc887[12]]},makeSalt:function(){return crypto[_0xc887[57]](16).toString(_0xc887[56])},encryptPassword:function(_0xf458x8){if(!_0xf458x8||!this[_0xc887[10]]){return _0xc887[58]};var _0xf458xb= new Buffer(this[_0xc887[10]],_0xc887[56]);return crypto[_0xc887[59]](_0xf458x8,_0xf458xb,10000,64).toString(_0xc887[56])},md5Password:function(_0xf458x8){if(!_0xf458x8){return _0xc887[58]};return md5(_0xf458x8)}},associate:function(_0xf458xc){}});return _0xf458x6}
\ No newline at end of file
+'use strict';
+
+var crypto = require('crypto');
+var md5 = require('md5');
+var _ = require('lodash');
+
+module.exports = function(sequelize, DataTypes) {
+  var Telephone = sequelize.define('Telephone', {
+    name: {
+      type: DataTypes.STRING,
+      unique: true,
+      validate: {
+        notEmpty: true,
+        is: /^[A-Za-z0-9\.\_]+$/i
+      },
+      set: function(name) {
+        this.setDataValue('name', name);
+        this.setDataValue('defaultuser', name);
+      }
+    },
+    password: {
+      type: DataTypes.STRING,
+      allowNull: false,
+      validate: {
+        notEmpty: true
+      },
+      set: function(password) {
+        this.salt = this.makeSalt();
+        this.setDataValue('password', this.encryptPassword(password));
+        this.setDataValue('md5secret', this.md5Password(this.name + ':asterisk:' + password));
+      }
+    },
+    internal: {
+      type: DataTypes.INTEGER(11),
+      unique: true,
+      set: function(internal) {
+        this.setDataValue('internal', internal);
+        this.setDataValue('accountcode', internal);
+      }
+    },
+    ipaddr: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    port: {
+      type: DataTypes.INTEGER(5),
+      allowNull: true,
+    },
+    regseconds: {
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+    },
+    defaultuser: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    fullcontact: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    regserver: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    useragent: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    lastms: {
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+    },
+    host: {
+      type: DataTypes.STRING,
+      allowNull: true,
+      defaultValue: 'dynamic'
+    },
+    type: {
+      type: DataTypes.ENUM('friend', 'user', 'peer'),
+      allowNull: true,
+      defaultValue: 'friend'
+    },
+    context: {
+      type: DataTypes.STRING,
+      allowNull: true,
+      defaultValue: 'from-sip'
+    },
+    permit: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    deny: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    secret: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    md5secret: {
+      type: DataTypes.STRING,
+      allowNull: true
+    },
+    remotesecret: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    transport: {
+      type: DataTypes.STRING,
+      allowNull: true,
+      defaultValue: 'udp'
+    },
+    dtmfmode: {
+      type: DataTypes.ENUM('rfc2833', 'info', 'shortinfo', 'inband',
+        'auto'),
+      allowNull: true,
+      defaultValue: 'rfc2833'
+    },
+    directmedia: {
+      type: DataTypes.ENUM('yes', 'no', 'nonat', 'update'),
+      allowNull: true,
+      defaultValue: 'no'
+    },
+    nat: {
+      type: DataTypes.STRING,
+      allowNull: true,
+      defaultValue: 'force_rport,comedia'
+    },
+    callgroup: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    pickupgroup: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    language: {
+      type: DataTypes.STRING,
+      allowNull: true,
+      defaultValue: 'en'
+    },
+    disallow: {
+      type: DataTypes.STRING,
+      allowNull: true,
+      defaultValue: 'all'
+    },
+    allow: {
+      type: DataTypes.STRING,
+      allowNull: true,
+      defaultValue: 'alaw;ulaw;gsm'
+    },
+    insecure: {
+      type: DataTypes.STRING,
+      allowNull: true,
+      defaultValue: 'port,invite'
+    },
+    trustrpid: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+      defaultValue: 'no'
+    },
+    progressinband: {
+      type: DataTypes.ENUM('yes', 'no', 'never'),
+      allowNull: true,
+    },
+    promiscredir: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+    },
+    useclientcode: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+    },
+    accountcode: {
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+    },
+    setvar: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    callerid: {
+      type: DataTypes.STRING,
+      allowNull: true,
+      defaultValue: '"" <>'
+    },
+    amaflags: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    callcounter: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+      defaultValue: 'yes'
+    },
+    busylevel: {
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+    },
+    allowoverlap: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+    },
+    allowsubscribe: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+    },
+    videosupport: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+    },
+    maxcallbitrate: {
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+    },
+    rfc2833compensate: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+    },
+    mailbox: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    "session-timers": {
+      type: DataTypes.ENUM('accept', 'refuse', 'originate'),
+      allowNull: true,
+    },
+    "session-expires": {
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+    },
+    "session-minse": {
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+    },
+    "session-refresher": {
+      type: DataTypes.ENUM('uac', 'uas'),
+      allowNull: true,
+    },
+    t38pt_usertpsource: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    regexten: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    fromdomain: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    fromuser: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    qualify: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+      defaultValue: 'yes'
+    },
+    defaultip: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    rtptimeout: {
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+    },
+    rtpholdtimeout: {
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+    },
+    sendrpid: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+      defaultValue: 'no'
+    },
+    outboundproxy: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    callbackextension: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    timert1: {
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+    },
+    timerb: {
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+    },
+    qualifyfreq: {
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+    },
+    constantssrc: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+    },
+    contactpermit: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    contactdeny: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    usereqphone: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+      defaultValue: 'no'
+    },
+    textsupport: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+    },
+    faxdetect: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+    },
+    buggymwi: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+    },
+    auth: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    fullname: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    trunkname: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    cid_number: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    callingpres: {
+      type: DataTypes.ENUM('ALLOWED_NOT_SCREENED',
+        'ALLOWED_PASSED_SCREEN', 'ALLOWED_FAILED_SCREEN', 'ALLOWED',
+        'PROHIB_NOT_SCREENED', 'PROHIB_PASSED_SCREEN',
+        'PROHIB_FAILED_SCREEN', 'PROHIB'),
+      allowNull: true,
+    },
+    mohinterpret: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    mohsuggest: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    parkinglot: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    hasvoicemail: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+    },
+    subscribemwi: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+    },
+    vmexten: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    description: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    autoframing: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+    },
+    limitonpeers: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+      defaultValue: 'yes'
+    },
+    rtpkeepalive: {
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+    },
+    "call-limit": {
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+      defaultValue: null
+    },
+    g726nonstandard: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+    },
+    ignoresdpversion: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+    },
+    allowtransfer: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+    },
+    dynamic: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+    },
+    encryption: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+      defaultValue: 'no'
+    },
+    registry: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    }
+  }, {
+    tableName: 'users',
+    defaultScope: {
+      where: {
+        role: 'telephone'
+      }
+    },
+    instanceMethods: {
+      /**
+       * Authenticate - check if the passwords are the same
+       *
+       * @param {String} plainText
+       *        {function} callBack
+       * @api public
+       */
+      authenticate: function(plainText) {
+        return this.encryptPassword(plainText) === this.password;
+      },
+      /**
+       * Make salt
+       *
+       * @return {String}
+       * @api public
+       */
+      makeSalt: function() {
+        return crypto.randomBytes(16).toString('base64');
+      },
+      /**
+       * Encrypt password
+       *
+       * @param {String} password
+       * @return {String}
+       * @api public
+       */
+      encryptPassword: function(password) {
+        if (!password || !this.salt) return '';
+        var salt = new Buffer(this.salt, 'base64');
+        return crypto.pbkdf2Sync(password, salt, 10000, 64).toString(
+          'base64');
+      },
+      /**
+       * md5 password
+       *
+       * @param {String} password
+       * @return {String}
+       * @api public
+       */
+      md5Password: function(password) {
+        if (!password) return '';
+        return md5(password);
+      }
+    },
+    associate: function(models) {
+      // BELOGNS TO MANY
+      // Telephone.hasMany(models.ChatMessage);
+      // Telephone.hasMany(models.Contact);
+      // Telephone.belongsToMany(models.Module, {
+      //   through: 'user_has_modules'
+      // });
+      // Telephone.belongsToMany(models.Channel, {
+      //   through: 'user_has_channels'
+      // });
+      // Telephone.belongsToMany(models.Team, {
+      //   through: models.UserHasTeam
+      // });
+      // Telephone.belongsToMany(models.ChatRoom, {
+      //   through: models.UserHasChatRoom
+      // });
+      // Telephone.belongsToMany(models.MailQueue, {
+      //   through: models.UserHasMailQueue
+      // });
+      // Telephone.belongsToMany(models.ChatQueue, {
+      //   through: models.UserHasChatQueue
+      // });
+      // Telephone.belongsToMany(models.VoiceQueue, {
+      //   through: models.UserHasVoiceQueue
+      // });
+      // Telephone.hasMany(models.VoiceExtension, {
+      //   foreignKey: 'UserId',
+      //   as: 'UserExtensions',
+      //   onDelete: 'cascade'
+      // });
+    }
+  });
+
+  return Telephone;
+}
index cc635cf..9097c07 100644 (file)
@@ -1 +1,32 @@
-var _0x9b85=["\x65\x78\x70\x6F\x72\x74\x73","\x54\x6F\x6F\x6C\x73\x41\x63\x74\x69\x6F\x6E","\x53\x54\x52\x49\x4E\x47","\x74\x6F\x6F\x6C\x73\x5F\x61\x63\x74\x69\x6F\x6E\x73","\x64\x65\x66\x69\x6E\x65"];module[_0x9b85[0]]=function(_0xb917x1,_0xb917x2){var _0xb917x3=_0xb917x1[_0x9b85[4]](_0x9b85[1],{action:{type:_0xb917x2[_0x9b85[2]]},data1:{type:_0xb917x2[_0x9b85[2]]},data2:{type:_0xb917x2[_0x9b85[2]]},data3:{type:_0xb917x2[_0x9b85[2]]},data4:{type:_0xb917x2[_0x9b85[2]]},data5:{type:_0xb917x2[_0x9b85[2]]}},{tableName:_0x9b85[3],associate:function(_0xb917x4){}});return _0xb917x3}
\ No newline at end of file
+/**
+ * Tools Actions Model
+ */
+
+module.exports = function(sequelize, DataTypes) {
+
+  var ToolsAction = sequelize.define('ToolsAction', {
+    action: {
+      type: DataTypes.STRING
+    },
+    data1: {
+      type: DataTypes.STRING
+    },
+    data2: {
+      type: DataTypes.STRING
+    },
+    data3: {
+      type: DataTypes.STRING
+    },
+    data4: {
+      type: DataTypes.STRING
+    },
+    data5: {
+      type: DataTypes.STRING
+    }
+  }, {
+    tableName: 'tools_actions',
+    associate: function(models) {}
+  });
+
+  return ToolsAction;
+};
index 67bb878..cb0b603 100644 (file)
@@ -1 +1,18 @@
-var _0x264e=["\x63\x72\x79\x70\x74\x6F","\x65\x78\x70\x6F\x72\x74\x73","\x54\x6F\x6F\x6C\x73\x43\x6F\x6E\x64\x69\x74\x69\x6F\x6E","\x53\x54\x52\x49\x4E\x47","\x74\x6F\x6F\x6C\x73\x5F\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73","\x64\x65\x66\x69\x6E\x65"];var crypto=require(_0x264e[0]);module[_0x264e[1]]=function(_0x37d6x2,_0x37d6x3){var _0x37d6x4=_0x37d6x2[_0x264e[5]](_0x264e[2],{field:_0x37d6x3[_0x264e[3]],operator:_0x37d6x3[_0x264e[3]],value:_0x37d6x3[_0x264e[3]]},{tableName:_0x264e[4]});return _0x37d6x4}
\ No newline at end of file
+/**
+ * Tools Conditions Model
+ */
+
+var crypto = require('crypto');
+
+module.exports = function(sequelize, DataTypes) {
+
+  var ToolsCondition = sequelize.define('ToolsCondition', {
+    field: DataTypes.STRING,
+    operator: DataTypes.STRING,
+    value: DataTypes.STRING
+  }, {
+    tableName: 'tools_conditions'
+  });
+
+  return ToolsCondition;
+};
index d065bfc..2953319 100644 (file)
@@ -1 +1,60 @@
-var _0xbc7c=["\x65\x78\x70\x6F\x72\x74\x73","\x54\x72\x69\x67\x67\x65\x72","\x53\x54\x52\x49\x4E\x47","\x42\x4F\x4F\x4C\x45\x41\x4E","\x74\x72\x69\x67\x67\x65\x72\x73","\x41\x6C\x6C","\x4F\x6E\x65\x41\x6C\x6C","\x54\x72\x69\x67\x67\x65\x72\x41\x6C\x6C\x49\x64","\x63\x61\x73\x63\x61\x64\x65","\x68\x61\x73\x4D\x61\x6E\x79","\x41\x6E\x79","\x4F\x6E\x65\x41\x6E\x79","\x54\x72\x69\x67\x67\x65\x72\x41\x6E\x79\x49\x64","\x41\x63\x74\x69\x6F\x6E\x73","\x61\x6C\x6C","\x54\x6F\x6F\x6C\x73\x43\x6F\x6E\x64\x69\x74\x69\x6F\x6E","\x66\x69\x65\x6C\x64","\x6F\x70\x65\x72\x61\x74\x6F\x72","\x76\x61\x6C\x75\x65","\x54\x6F\x6F\x6C\x73\x41\x63\x74\x69\x6F\x6E","\x61\x63\x74\x69\x6F\x6E","\x64\x61\x74\x61\x31","\x64\x61\x74\x61\x32","\x64\x61\x74\x61\x33","\x64\x61\x74\x61\x34","\x64\x61\x74\x61\x35","\x61\x64\x64\x53\x63\x6F\x70\x65","\x64\x65\x66\x69\x6E\x65"];module[_0xbc7c[0]]=function(_0x3746x1,_0x3746x2){var _0x3746x3=_0x3746x1[_0xbc7c[27]](_0xbc7c[1],{name:_0x3746x2[_0xbc7c[2]],channel:_0x3746x2[_0xbc7c[2]],description:_0x3746x2[_0xbc7c[2]],status:{type:_0x3746x2[_0xbc7c[3]],defaultValue:false}},{tableName:_0xbc7c[4],associate:function(_0x3746x4){_0x3746x3[_0xbc7c[9]](_0x3746x4.ToolsCondition,{as:{plural:_0xbc7c[5],singular:_0xbc7c[6]},foreignKey:_0xbc7c[7],onDelete:_0xbc7c[8],hooks:true});_0x3746x3[_0xbc7c[9]](_0x3746x4.ToolsCondition,{as:{plural:_0xbc7c[10],singular:_0xbc7c[11]},foreignKey:_0xbc7c[12],onDelete:_0xbc7c[8],hooks:true});_0x3746x3[_0xbc7c[9]](_0x3746x4.ToolsAction,{as:_0xbc7c[13],onDelete:_0xbc7c[8],hooks:true});_0x3746x3[_0xbc7c[26]](_0xbc7c[14],{include:[{model:_0x3746x4[_0xbc7c[15]],as:_0xbc7c[5],attributes:[_0xbc7c[16],_0xbc7c[17],_0xbc7c[18]]},{model:_0x3746x4[_0xbc7c[15]],as:_0xbc7c[10],attributes:[_0xbc7c[16],_0xbc7c[17],_0xbc7c[18]]},{model:_0x3746x4[_0xbc7c[19]],as:_0xbc7c[13],attributes:[_0xbc7c[20],_0xbc7c[21],_0xbc7c[22],_0xbc7c[23],_0xbc7c[24],_0xbc7c[25]]}]})}});return _0x3746x3}
\ No newline at end of file
+/**
+ * Trigger Model
+ */
+
+module.exports = function(sequelize, DataTypes) {
+
+  var Trigger = sequelize.define('Trigger', {
+    name: DataTypes.STRING,
+    channel: DataTypes.STRING,
+    description: DataTypes.STRING,
+    status: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: false
+    }
+  }, {
+    tableName: 'triggers',
+    associate: function(models) {
+      Trigger.hasMany(models.ToolsCondition, {
+        as: {
+          plural: 'All',
+          singular: 'OneAll'
+        },
+        foreignKey: 'TriggerAllId',
+        onDelete: 'cascade',
+        hooks: true
+      });
+      Trigger.hasMany(models.ToolsCondition, {
+        as: {
+          plural: 'Any',
+          singular: 'OneAny'
+        },
+        foreignKey: 'TriggerAnyId',
+        onDelete: 'cascade',
+        hooks: true
+      });
+      Trigger.hasMany(models.ToolsAction, {
+        as: 'Actions',
+        onDelete: 'cascade',
+        hooks: true
+      });
+      Trigger.addScope('all', {
+        include: [{
+          model: models.ToolsCondition,
+          as: 'All',
+          attributes: ['field', 'operator', 'value']
+        }, {
+          model: models.ToolsCondition,
+          as: 'Any',
+          attributes: ['field', 'operator', 'value']
+        }, {
+          model: models.ToolsAction,
+          as: 'Actions',
+          attributes: ['action', 'data1', 'data2', 'data3', 'data4', 'data5']
+        }]
+      });
+    }
+  });
+
+  return Trigger;
+};
index 6a48f2c..e9ff649 100644 (file)
@@ -1 +1,458 @@
-var _0x5ca0=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x63\x72\x79\x70\x74\x6F","\x6D\x64\x35","\x6C\x6F\x64\x61\x73\x68","\x65\x78\x70\x6F\x72\x74\x73","\x54\x72\x75\x6E\x6B","\x53\x54\x52\x49\x4E\x47","\x66\x72\x69\x65\x6E\x64","\x75\x73\x65\x72","\x70\x65\x65\x72","\x66\x72\x6F\x6D\x2D\x73\x69\x70","\x41\x4C\x4C\x4F\x57\x45\x44\x5F\x4E\x4F\x54\x5F\x53\x43\x52\x45\x45\x4E\x45\x44","\x41\x4C\x4C\x4F\x57\x45\x44\x5F\x50\x41\x53\x53\x45\x44\x5F\x53\x43\x52\x45\x45\x4E","\x41\x4C\x4C\x4F\x57\x45\x44\x5F\x46\x41\x49\x4C\x45\x44\x5F\x53\x43\x52\x45\x45\x4E","\x41\x4C\x4C\x4F\x57\x45\x44","\x50\x52\x4F\x48\x49\x42\x5F\x4E\x4F\x54\x5F\x53\x43\x52\x45\x45\x4E\x45\x44","\x50\x52\x4F\x48\x49\x42\x5F\x50\x41\x53\x53\x45\x44\x5F\x53\x43\x52\x45\x45\x4E","\x50\x52\x4F\x48\x49\x42\x5F\x46\x41\x49\x4C\x45\x44\x5F\x53\x43\x52\x45\x45\x4E","\x50\x52\x4F\x48\x49\x42","\x75\x64\x70","\x72\x66\x63\x32\x38\x33\x33","\x69\x6E\x66\x6F","\x73\x68\x6F\x72\x74\x69\x6E\x66\x6F","\x69\x6E\x62\x61\x6E\x64","\x61\x75\x74\x6F","\x79\x65\x73","\x6E\x6F","\x6E\x6F\x6E\x61\x74","\x75\x70\x64\x61\x74\x65","\x6F\x75\x74\x67\x6F\x69\x6E\x67","\x66\x6F\x72\x63\x65\x5F\x72\x70\x6F\x72\x74\x2C\x63\x6F\x6D\x65\x64\x69\x61","\x65\x6E","\x61\x6C\x6C","\x61\x6C\x61\x77\x3B\x75\x6C\x61\x77\x3B\x67\x73\x6D","\x70\x6F\x72\x74\x2C\x69\x6E\x76\x69\x74\x65","\x6E\x65\x76\x65\x72","\x22\x22\x20\x3C\x3E","\x61\x6C\x77\x61\x79\x73","\x61\x63\x63\x65\x70\x74","\x72\x65\x66\x75\x73\x65","\x6F\x72\x69\x67\x69\x6E\x61\x74\x65","\x75\x61\x63","\x75\x61\x73","\x64\x79\x6E\x61\x6D\x69\x63","\x66\x69\x6E\x67\x65\x72\x70\x72\x69\x6E\x74","\x63\x65\x72\x74\x69\x66\x69\x63\x61\x74\x65","\x61\x63\x74\x69\x76\x65","\x70\x61\x73\x73\x69\x76\x65","\x61\x63\x74\x70\x61\x73\x73","\x75\x70\x64\x61\x74\x65\x2C\x6E\x6F\x6E\x61\x74","\x74\x72\x75\x6E\x6B\x73","\x64\x65\x66\x69\x6E\x65"];_0x5ca0[0];var crypto=require(_0x5ca0[1]);var md5=require(_0x5ca0[2]);var _=require(_0x5ca0[3]);module[_0x5ca0[4]]=function(_0x63fdx4,_0x63fdx5){var _0x63fdx6=_0x63fdx4[_0x5ca0[51]](_0x5ca0[5],{name:{type:_0x63fdx5[_0x5ca0[6]],primaryKey:true},type:{type:_0x63fdx5.ENUM(_0x5ca0[7],_0x5ca0[8],_0x5ca0[9]),allowNull:true,defaultValue:_0x5ca0[7]},context:{type:_0x63fdx5[_0x5ca0[6]],allowNull:true,defaultValue:_0x5ca0[10]},callingpres:{type:_0x63fdx5.ENUM(_0x5ca0[11],_0x5ca0[12],_0x5ca0[13],_0x5ca0[14],_0x5ca0[15],_0x5ca0[16],_0x5ca0[17],_0x5ca0[18]),allowNull:true},permit:{type:_0x63fdx5[_0x5ca0[6]],allowNull:true},deny:{type:_0x63fdx5[_0x5ca0[6]],allowNull:true},secret:{type:_0x63fdx5[_0x5ca0[6]],allowNull:true},md5secret:{type:_0x63fdx5[_0x5ca0[6]],allowNull:true},remotesecret:{type:_0x63fdx5[_0x5ca0[6]],allowNull:true},transport:{type:_0x63fdx5[_0x5ca0[6]],allowNull:true,defaultValue:_0x5ca0[19]},dtmfmode:{type:_0x63fdx5.ENUM(_0x5ca0[20],_0x5ca0[21],_0x5ca0[22],_0x5ca0[23],_0x5ca0[24]),allowNull:true,defaultValue:_0x5ca0[20]},directmedia:{type:_0x63fdx5.ENUM(_0x5ca0[25],_0x5ca0[26],_0x5ca0[27],_0x5ca0[28],_0x5ca0[29]),allowNull:true,defaultValue:_0x5ca0[26]},directrtpsetup:{type:_0x63fdx5.ENUM(_0x5ca0[25],_0x5ca0[26]),allowNull:true,defaultValue:_0x5ca0[26]},directmediapermit:{type:_0x63fdx5[_0x5ca0[6]],allowNull:true},directmediadeny:{type:_0x63fdx5[_0x5ca0[6]],allowNull:true},nat:{type:_0x63fdx5[_0x5ca0[6]],allowNull:true,defaultValue:_0x5ca0[30]},callgroup:{type:_0x63fdx5[_0x5ca0[6]],allowNull:true},namedcallgroup:{type:_0x63fdx5[_0x5ca0[6]],allowNull:true},pickupgroup:{type:_0x63fdx5[_0x5ca0[6]],allowNull:true},namedpickupgroup:{type:_0x63fdx5[_0x5ca0[6]],allowNull:true},language:{type:_0x63fdx5[_0x5ca0[6]],allowNull:true,defaultValue:_0x5ca0[31]},tonezone:{type:_0x63fdx5[_0x5ca0[6]],allowNull:true},disallow:{type:_0x63fdx5[_0x5ca0[6]],allowNull:true,defaultValue:_0x5ca0[32]},allow:{type:_0x63fdx5[_0x5ca0[6]],allowNull:false,defaultValue:_0x5ca0[33]},autoframing:{type:_0x63fdx5.ENUM(_0x5ca0[25],_0x5ca0[26]),allowNull:true},insecure:{type:_0x63fdx5[_0x5ca0[6]],allowNull:true,defaultValue:_0x5ca0[34]},trustrpid:{type:_0x63fdx5.ENUM(_0x5ca0[25],_0x5ca0[26]),allowNull:true,defaultValue:_0x5ca0[26]},trust_id_outbound:{type:_0x63fdx5.ENUM(_0x5ca0[25],_0x5ca0[26]),allowNull:true,defaultValue:_0x5ca0[26]},progressinband:{type:_0x63fdx5.ENUM(_0x5ca0[25],_0x5ca0[26],_0x5ca0[35]),allowNull:true},promiscredir:{type:_0x63fdx5.ENUM(_0x5ca0[25],_0x5ca0[26]),allowNull:true},useclientcode:{type:_0x63fdx5.ENUM(_0x5ca0[25],_0x5ca0[26]),allowNull:true},accountcode:{type:_0x63fdx5.INTEGER(11),allowNull:true},setvar:{type:_0x63fdx5[_0x5ca0[6]],allowNull:true},callerid:{type:_0x63fdx5[_0x5ca0[6]],allowNull:true,defaultValue:_0x5ca0[36]},amaflags:{type:_0x63fdx5[_0x5ca0[6]],allowNull:true},callcounter:{type:_0x63fdx5.ENUM(_0x5ca0[25],_0x5ca0[26]),allowNull:true,defaultValue:_0x5ca0[25]},busylevel:{type:_0x63fdx5.INTEGER(11),allowNull:true},allowoverlap:{type:_0x63fdx5.ENUM(_0x5ca0[25],_0x5ca0[26]),allowNull:true},allowsubscribe:{type:_0x63fdx5.ENUM(_0x5ca0[25],_0x5ca0[26]),allowNull:true},allowtransfer:{type:_0x63fdx5.ENUM(_0x5ca0[25],_0x5ca0[26]),allowNull:true},ignoresdpversion:{type:_0x63fdx5.ENUM(_0x5ca0[25],_0x5ca0[26]),allowNull:true},subscribecontext:{type:_0x63fdx5[_0x5ca0[6]],allowNull:true},template:{type:_0x63fdx5[_0x5ca0[6]],allowNull:true},videosupport:{type:_0x63fdx5.ENUM(_0x5ca0[25],_0x5ca0[26],_0x5ca0[37]),allowNull:true,defaultValue:_0x5ca0[26]},maxcallbitrate:{type:_0x63fdx5.INTEGER(11),allowNull:true},rfc2833compensate:{type:_0x63fdx5.ENUM(_0x5ca0[25],_0x5ca0[26]),allowNull:true},mailbox:{type:_0x63fdx5[_0x5ca0[6]],allowNull:true},session_timers:{type:_0x63fdx5.ENUM(_0x5ca0[38],_0x5ca0[39],_0x5ca0[40]),allowNull:true},session_expires:{type:_0x63fdx5.INTEGER(11),allowNull:true},session_minse:{type:_0x63fdx5.INTEGER(11),allowNull:true},session_refresher:{type:_0x63fdx5.ENUM(_0x5ca0[41],_0x5ca0[42]),allowNull:true,defaultValue:_0x5ca0[42]},t38pt_usertpsource:{type:_0x63fdx5[_0x5ca0[6]],allowNull:true},regexten:{type:_0x63fdx5[_0x5ca0[6]],allowNull:true},fromdomain:{type:_0x63fdx5[_0x5ca0[6]],allowNull:true},fromuser:{type:_0x63fdx5[_0x5ca0[6]],allowNull:true},host:{type:_0x63fdx5[_0x5ca0[6]],allowNull:true,defaultValue:_0x5ca0[43]},port:{type:_0x63fdx5.INTEGER(5),allowNull:true},qualify:{type:_0x63fdx5.ENUM(_0x5ca0[25],_0x5ca0[26]),allowNull:true,defaultValue:_0x5ca0[25]},keepalive:{type:_0x63fdx5.INTEGER(11),allowNull:true},defaultip:{type:_0x63fdx5[_0x5ca0[6]],allowNull:true},defaultuser:{type:_0x63fdx5[_0x5ca0[6]],allowNull:true},rtptimeout:{type:_0x63fdx5.INTEGER(11),allowNull:true},rtpholdtimeout:{type:_0x63fdx5.INTEGER(11),allowNull:true},rtpkeepalive:{type:_0x63fdx5.INTEGER(11),allowNull:true},sendrpid:{type:_0x63fdx5.ENUM(_0x5ca0[25],_0x5ca0[26]),allowNull:true,defaultValue:_0x5ca0[26]},outboundproxy:{type:_0x63fdx5[_0x5ca0[6]],allowNull:true},callbackextension:{type:_0x63fdx5[_0x5ca0[6]],allowNull:true},timert1:{type:_0x63fdx5.INTEGER(11),allowNull:true},timerb:{type:_0x63fdx5.INTEGER(11),allowNull:true},qualifyfreq:{type:_0x63fdx5.INTEGER(11),allowNull:true},contactpermit:{type:_0x63fdx5[_0x5ca0[6]],allowNull:true},contactdeny:{type:_0x63fdx5[_0x5ca0[6]],allowNull:true},contactacl:{type:_0x63fdx5[_0x5ca0[6]],allowNull:true},unsolicited_mailbox:{type:_0x63fdx5[_0x5ca0[6]],allowNull:true},use_q850_reason:{type:_0x63fdx5[_0x5ca0[6]],allowNull:true},maxforwards:{type:_0x63fdx5.INTEGER(11),allowNull:true},encryption:{type:_0x63fdx5.ENUM(_0x5ca0[25],_0x5ca0[26]),allowNull:true,defaultValue:_0x5ca0[26]},avpf:{type:_0x63fdx5.ENUM(_0x5ca0[25],_0x5ca0[26]),allowNull:true},force_avp:{type:_0x63fdx5.ENUM(_0x5ca0[25],_0x5ca0[26]),allowNull:true},icesupport:{type:_0x63fdx5.ENUM(_0x5ca0[25],_0x5ca0[26]),allowNull:true},dtlsenable:{type:_0x63fdx5.ENUM(_0x5ca0[25],_0x5ca0[26]),allowNull:true},dtlsverify:{type:_0x63fdx5.ENUM(_0x5ca0[25],_0x5ca0[26],_0x5ca0[44],_0x5ca0[45]),allowNull:true},dtlsrekey:{type:_0x63fdx5.INTEGER(11),allowNull:true},dtlscertfile:{type:_0x63fdx5[_0x5ca0[6]],allowNull:true},dtlsprivatekey:{type:_0x63fdx5[_0x5ca0[6]],allowNull:true},dtlscipher:{type:_0x63fdx5[_0x5ca0[6]],allowNull:true},dtlscafile:{type:_0x63fdx5[_0x5ca0[6]],allowNull:true},dtlscapath:{type:_0x63fdx5[_0x5ca0[6]],allowNull:true},dtlssetup:{type:_0x63fdx5.ENUM(_0x5ca0[46],_0x5ca0[47],_0x5ca0[48]),allowNull:true},dtlsfingerprint:{type:_0x63fdx5[_0x5ca0[6]],allowNull:true},usereqphone:{type:_0x63fdx5.ENUM(_0x5ca0[25],_0x5ca0[26]),allowNull:true,defaultValue:_0x5ca0[26]},recordonfeature:{type:_0x63fdx5[_0x5ca0[6]],allowNull:true},recordofffeature:{type:_0x63fdx5[_0x5ca0[6]],allowNull:true},call_limit:{type:_0x63fdx5.INTEGER(11),allowNull:true,defaultValue:null},registertrying:{type:_0x63fdx5.ENUM(_0x5ca0[25],_0x5ca0[26]),allowNull:true},subscribemwi:{type:_0x63fdx5.ENUM(_0x5ca0[25],_0x5ca0[26]),allowNull:true},vmexten:{type:_0x63fdx5[_0x5ca0[6]],allowNull:true},mohinterpret:{type:_0x63fdx5[_0x5ca0[6]],allowNull:true},mohsuggest:{type:_0x63fdx5[_0x5ca0[6]],allowNull:true},parkinglot:{type:_0x63fdx5[_0x5ca0[6]],allowNull:true},description:{type:_0x63fdx5[_0x5ca0[6]],allowNull:true},canreinvite:{type:_0x63fdx5.ENUM(_0x5ca0[25],_0x5ca0[26],_0x5ca0[27],_0x5ca0[28],_0x5ca0[49]),allowNull:true,defaultValue:_0x5ca0[26]},registry:{type:_0x63fdx5[_0x5ca0[6]],allowNull:true},otherFields:{type:_0x63fdx5[_0x5ca0[6]],allowNull:true}},{tableName:_0x5ca0[50]});return _0x63fdx6}
\ No newline at end of file
+'use strict';
+
+var crypto = require('crypto');
+var md5 = require('md5');
+var _ = require('lodash');
+
+module.exports = function(sequelize, DataTypes) {
+  var Trunk = sequelize.define('Trunk', {
+    name: {
+      type: DataTypes.STRING,
+      primaryKey: true
+    },
+    type: {
+      type: DataTypes.ENUM('friend', 'user', 'peer'),
+      allowNull: true,
+      defaultValue: 'friend'
+    },
+    context: {
+      type: DataTypes.STRING,
+      allowNull: true,
+      defaultValue: 'from-sip'
+    },
+    callingpres: {
+      type: DataTypes.ENUM('ALLOWED_NOT_SCREENED',
+        'ALLOWED_PASSED_SCREEN', 'ALLOWED_FAILED_SCREEN', 'ALLOWED',
+        'PROHIB_NOT_SCREENED', 'PROHIB_PASSED_SCREEN',
+        'PROHIB_FAILED_SCREEN', 'PROHIB'),
+      allowNull: true,
+    },
+    permit: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    deny: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    secret: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    md5secret: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    remotesecret: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    transport: {
+      type: DataTypes.STRING,
+      allowNull: true,
+      defaultValue: 'udp'
+    },
+    dtmfmode: {
+      type: DataTypes.ENUM('rfc2833', 'info', 'shortinfo', 'inband',
+        'auto'),
+      allowNull: true,
+      defaultValue: 'rfc2833'
+    },
+    directmedia: {
+      type: DataTypes.ENUM('yes', 'no', 'nonat', 'update', 'outgoing'),
+      allowNull: true,
+      defaultValue: 'no'
+    },
+    directrtpsetup: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+      defaultValue: 'no'
+    },
+    directmediapermit: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    directmediadeny: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    nat: {
+      type: DataTypes.STRING,
+      allowNull: true,
+      defaultValue: 'force_rport,comedia'
+    },
+    callgroup: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    namedcallgroup: { //We are in named call groups engineering,sales,netgroup,protgroup
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    pickupgroup: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    namedpickupgroup: { //We can do call pick-p for named call group sales
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    language: {
+      type: DataTypes.STRING,
+      allowNull: true,
+      defaultValue: 'en'
+    },
+    tonezone: {
+      type: DataTypes.STRING,
+      allowNull: true
+    },
+    disallow: {
+      type: DataTypes.STRING,
+      allowNull: true,
+      defaultValue: 'all'
+    },
+    allow: {
+      type: DataTypes.STRING,
+      allowNull: false,
+      defaultValue: 'alaw;ulaw;gsm'
+    },
+    autoframing: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+    },
+    insecure: {
+      type: DataTypes.STRING,
+      allowNull: true,
+      defaultValue: 'port,invite'
+    },
+    trustrpid: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+      defaultValue: 'no'
+    },
+    trust_id_outbound: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+      defaultValue: 'no'
+    },
+    progressinband: {
+      type: DataTypes.ENUM('yes', 'no', 'never'),
+      allowNull: true,
+    },
+    promiscredir: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+    },
+    useclientcode: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+    },
+    accountcode: {
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+    },
+    setvar: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    callerid: {
+      type: DataTypes.STRING,
+      allowNull: true,
+      defaultValue: '"" <>'
+    },
+    amaflags: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    callcounter: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+      defaultValue: 'yes'
+    },
+    busylevel: {
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+    },
+    allowoverlap: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+    },
+    allowsubscribe: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+    },
+    allowtransfer: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+    },
+    ignoresdpversion: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+    },
+    subscribecontext: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    template: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    videosupport: {
+      type: DataTypes.ENUM('yes', 'no', 'always'),
+      allowNull: true,
+      defaultValue: 'no'
+    },
+    maxcallbitrate: {
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+    },
+    rfc2833compensate: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+    },
+    mailbox: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    session_timers: {
+      type: DataTypes.ENUM('accept', 'refuse', 'originate'),
+      allowNull: true,
+    },
+    session_expires: {
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+    },
+    session_minse: {
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+    },
+    session_refresher: {
+      type: DataTypes.ENUM('uac', 'uas'),
+      allowNull: true,
+      defaultValue: 'uas'
+    },
+    t38pt_usertpsource: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    regexten: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    fromdomain: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    fromuser: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    host: {
+      type: DataTypes.STRING,
+      allowNull: true,
+      defaultValue: 'dynamic'
+    },
+    port: {
+      type: DataTypes.INTEGER(5),
+      allowNull: true,
+    },
+    qualify: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+      defaultValue: 'yes'
+    },
+    keepalive: {
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+    },
+    defaultip: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    defaultuser: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    rtptimeout: { // Terminate call if 60 seconds of no RTP or RTCP activity on the audio channel  when we're not on hold.
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+    },
+    rtpholdtimeout: { // Terminate call if 300 seconds of no RTP or RTCP activity on the audio channel when we're on hold (must be > rtptimeout)
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+    },
+    rtpkeepalive: { // Send keepalives in the RTP stream to keep NAT open (default is off - zero)
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+    },
+    sendrpid: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+      defaultValue: 'no'
+    },
+    outboundproxy: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    callbackextension: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    timert1: {
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+    },
+    timerb: {
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+    },
+    qualifyfreq: {
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+    },
+    contactpermit: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    contactdeny: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    contactacl: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    unsolicited_mailbox: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    use_q850_reason: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    maxforwards: {
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+    },
+    encryption: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+      defaultValue: 'no'
+    },
+    avpf: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true
+    },
+    force_avp: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true
+    },
+    icesupport: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true
+    },
+    dtlsenable: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true
+    },
+    dtlsverify: {
+      type: DataTypes.ENUM('yes', 'no', 'fingerprint', 'certificate'),
+      allowNull: true
+    },
+    dtlsrekey: {
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+    },
+    dtlscertfile: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    dtlsprivatekey: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    dtlscipher: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    dtlscafile: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    dtlscapath: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    dtlssetup: {
+      type: DataTypes.ENUM('active', 'passive', 'actpass'),
+      allowNull: true
+    },
+    dtlsfingerprint: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    usereqphone: { //This provider requires ";user=phone" on URI
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+      defaultValue: 'no'
+    },
+    recordonfeature: { //Feature to use when INFO with Record: on is received.
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    recordofffeature: { //Feature to use when INFO with Record: off is received.
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    call_limit: {
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+      defaultValue: null
+    },
+    registertrying: { //Send a 100 Trying when the device registers.
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+    },
+    subscribemwi: { //Only send notifications if this phone subscribes for mailbox notification
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+    },
+    vmexten: { // dialplan extension to reach mailbox. defaults to global vmexten which defaults to "asterisk"
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    mohinterpret: { // This option specifies a preference for which music on hold class this channel should listen to when put on hold
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    mohsuggest: { //  This option specifies which music on hold class to suggest to the peer channel when this channel places the peer on hold.
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    parkinglot: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    description: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    canreinvite: {
+      type: DataTypes.ENUM('yes', 'no', 'nonat', 'update', 'update,nonat'),
+      allowNull: true,
+      defaultValue: 'no'
+    },
+    registry: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    otherFields: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    }
+  }, {
+    tableName: 'trunks'
+  });
+
+  return Trunk;
+}
index bfe6046..8c46445 100644 (file)
@@ -1 +1,846 @@
-var _0xfb1c=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x63\x72\x79\x70\x74\x6F","\x6D\x64\x35","\x6C\x6F\x64\x61\x73\x68","\x6D\x6F\x6D\x65\x6E\x74","\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65","\x2E","\x65\x78\x70\x6F\x72\x74\x73","\x55\x73\x65\x72","\x53\x54\x52\x49\x4E\x47","\x6E\x61\x6D\x65","\x73\x65\x74\x44\x61\x74\x61\x56\x61\x6C\x75\x65","\x64\x65\x66\x61\x75\x6C\x74\x75\x73\x65\x72","\x65\x6D\x61\x69\x6C","\x74\x6F\x4C\x6F\x77\x65\x72\x43\x61\x73\x65","\x61\x64\x6D\x69\x6E","\x75\x73\x65\x72","\x61\x67\x65\x6E\x74","\x74\x65\x6C\x65\x70\x68\x6F\x6E\x65","\x73\x61\x6C\x74","\x6D\x61\x6B\x65\x53\x61\x6C\x74","\x70\x61\x73\x73\x77\x6F\x72\x64","\x65\x6E\x63\x72\x79\x70\x74\x50\x61\x73\x73\x77\x6F\x72\x64","\x6D\x64\x35\x73\x65\x63\x72\x65\x74","\x3A\x61\x73\x74\x65\x72\x69\x73\x6B\x3A","\x6D\x64\x35\x50\x61\x73\x73\x77\x6F\x72\x64","\x6C\x6F\x63\x61\x6C","\x69\x6E\x74\x65\x72\x6E\x61\x6C","\x61\x63\x63\x6F\x75\x6E\x74\x63\x6F\x64\x65","\x42\x4F\x4F\x4C\x45\x41\x4E","\x44\x41\x54\x45","\x55\x4E\x4B\x4E\x4F\x57\x4E","\x44\x65\x66\x61\x75\x6C\x74\x20\x50\x61\x75\x73\x65","\x49\x4E\x54\x45\x47\x45\x52","\x70\x68\x6F\x6E\x65\x42\x61\x72\x55\x6E\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x61\x6C","\x67\x65\x74\x44\x61\x74\x61\x56\x61\x6C\x75\x65","\x70\x68\x6F\x6E\x65\x42\x61\x72\x55\x6E\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x61\x6C\x4E\x75\x6D\x62\x65\x72","\x70\x68\x6F\x6E\x65\x42\x61\x72\x4E\x6F\x52\x65\x70\x6C\x79","\x70\x68\x6F\x6E\x65\x42\x61\x72\x4E\x6F\x52\x65\x70\x6C\x79\x4E\x75\x6D\x62\x65\x72","\x70\x68\x6F\x6E\x65\x42\x61\x72\x42\x75\x73\x79","\x70\x68\x6F\x6E\x65\x42\x61\x72\x42\x75\x73\x79\x4E\x75\x6D\x62\x65\x72","\x66\x72\x69\x65\x6E\x64","\x70\x65\x65\x72","\x66\x72\x6F\x6D\x2D\x73\x69\x70","\x41\x4C\x4C\x4F\x57\x45\x44\x5F\x4E\x4F\x54\x5F\x53\x43\x52\x45\x45\x4E\x45\x44","\x41\x4C\x4C\x4F\x57\x45\x44\x5F\x50\x41\x53\x53\x45\x44\x5F\x53\x43\x52\x45\x45\x4E","\x41\x4C\x4C\x4F\x57\x45\x44\x5F\x46\x41\x49\x4C\x45\x44\x5F\x53\x43\x52\x45\x45\x4E","\x41\x4C\x4C\x4F\x57\x45\x44","\x50\x52\x4F\x48\x49\x42\x5F\x4E\x4F\x54\x5F\x53\x43\x52\x45\x45\x4E\x45\x44","\x50\x52\x4F\x48\x49\x42\x5F\x50\x41\x53\x53\x45\x44\x5F\x53\x43\x52\x45\x45\x4E","\x50\x52\x4F\x48\x49\x42\x5F\x46\x41\x49\x4C\x45\x44\x5F\x53\x43\x52\x45\x45\x4E","\x50\x52\x4F\x48\x49\x42","\x75\x64\x70","\x72\x66\x63\x32\x38\x33\x33","\x69\x6E\x66\x6F","\x73\x68\x6F\x72\x74\x69\x6E\x66\x6F","\x69\x6E\x62\x61\x6E\x64","\x61\x75\x74\x6F","\x79\x65\x73","\x6E\x6F","\x6E\x6F\x6E\x61\x74","\x75\x70\x64\x61\x74\x65","\x6F\x75\x74\x67\x6F\x69\x6E\x67","\x66\x6F\x72\x63\x65\x5F\x72\x70\x6F\x72\x74\x2C\x63\x6F\x6D\x65\x64\x69\x61","\x65\x6E","\x61\x6C\x61\x77\x3B\x75\x6C\x61\x77\x3B\x67\x73\x6D","\x70\x6F\x72\x74\x2C\x69\x6E\x76\x69\x74\x65","\x6E\x65\x76\x65\x72","\x22\x22\x20\x3C\x3E","\x61\x6C\x77\x61\x79\x73","\x61\x63\x63\x65\x70\x74","\x72\x65\x66\x75\x73\x65","\x6F\x72\x69\x67\x69\x6E\x61\x74\x65","\x75\x61\x63","\x75\x61\x73","\x64\x79\x6E\x61\x6D\x69\x63","\x66\x69\x6E\x67\x65\x72\x70\x72\x69\x6E\x74","\x63\x65\x72\x74\x69\x66\x69\x63\x61\x74\x65","\x61\x63\x74\x69\x76\x65","\x70\x61\x73\x73\x69\x76\x65","\x61\x63\x74\x70\x61\x73\x73","\x75\x70\x64\x61\x74\x65\x2C\x6E\x6F\x6E\x61\x74","\x75\x73\x65\x72\x73","\x62\x61\x73\x65\x36\x34","\x72\x61\x6E\x64\x6F\x6D\x42\x79\x74\x65\x73","","\x70\x62\x6B\x64\x66\x32\x53\x79\x6E\x63","\x68\x61\x73\x4D\x61\x6E\x79","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x6D\x6F\x64\x75\x6C\x65\x73","\x62\x65\x6C\x6F\x6E\x67\x73\x54\x6F\x4D\x61\x6E\x79","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x63\x68\x61\x6E\x6E\x65\x6C\x73","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x6D\x61\x69\x6C\x5F\x72\x6F\x6F\x6D\x73","\x55\x73\x65\x72\x48\x61\x73\x54\x65\x61\x6D","\x55\x73\x65\x72\x48\x61\x73\x43\x68\x61\x74\x52\x6F\x6F\x6D","\x55\x73\x65\x72\x48\x61\x73\x4D\x61\x69\x6C\x51\x75\x65\x75\x65","\x55\x73\x65\x72\x48\x61\x73\x46\x61\x78\x51\x75\x65\x75\x65","\x55\x73\x65\x72\x48\x61\x73\x43\x68\x61\x74\x51\x75\x65\x75\x65","\x55\x73\x65\x72\x48\x61\x73\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65","\x55\x73\x65\x72\x48\x61\x73\x53\x65\x72\x76\x69\x63\x65","\x55\x73\x65\x72\x49\x64","\x55\x73\x65\x72\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E\x73","\x63\x61\x73\x63\x61\x64\x65","\x61\x64\x64\x53\x63\x6F\x70\x65","\x71\x75\x65\x75\x65\x73","\x43\x68\x61\x74\x51\x75\x65\x75\x65","\x4D\x61\x69\x6C\x51\x75\x65\x75\x65","\x46\x61\x78\x51\x75\x65\x75\x65","\x63\x68\x65\x63\x6B\x50\x61\x75\x73\x65\x53\x74\x61\x74\x75\x73","\x76\x6F\x69\x63\x65\x50\x61\x75\x73\x65","\x77\x68\x65\x72\x65","\x74\x72\x75\x65","\x66\x61\x78\x50\x61\x75\x73\x65","\x63\x68\x61\x74\x50\x61\x75\x73\x65","\x6D\x61\x69\x6C\x50\x61\x75\x73\x65","\x63\x68\x65\x63\x6B\x4F\x6E\x6C\x69\x6E\x65\x53\x74\x61\x74\x75\x73","\x6F\x6E\x6C\x69\x6E\x65","\x63\x68\x65\x63\x6B\x53\x69\x70\x53\x74\x61\x74\x75\x73","\x73\x74\x61\x74\x75\x73","\x69\x64","\x66\x75\x6C\x6C\x6E\x61\x6D\x65","\x74\x72\x61\x6E\x73\x70\x6F\x72\x74","\x68\x6F\x73\x74","\x6E\x61\x74","\x74\x79\x70\x65","\x61\x6C\x6C\x6F\x77","\x63\x68\x61\x74\x43\x61\x70\x61\x63\x69\x74\x79","\x6D\x61\x69\x6C\x43\x61\x70\x61\x63\x69\x74\x79","\x66\x61\x78\x43\x61\x70\x61\x63\x69\x74\x79","\x6C\x61\x73\x74\x4C\x6F\x67\x69\x6E\x41\x74","\x70\x68\x6F\x6E\x65\x42\x61\x72\x41\x75\x74\x6F\x41\x6E\x73\x77\x65\x72","\x70\x68\x6F\x6E\x65\x42\x61\x72\x45\x6E\x61\x62\x6C\x65\x53\x65\x74\x74\x69\x6E\x67\x73","\x63\x68\x61\x6E\x73\x70\x79","\x70\x61\x75\x73\x65\x54\x79\x70\x65","\x6C\x61\x73\x74\x50\x61\x75\x73\x65\x41\x74","\x73\x74\x61\x74\x75\x73\x41\x74","\x75\x73\x65\x72\x61\x67\x65\x6E\x74","\x69\x70\x61\x64\x64\x72","\x66\x75\x6C\x6C\x63\x6F\x6E\x74\x61\x63\x74","\x70\x6F\x72\x74","\x6C\x61\x73\x74\x6D\x73","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x64\x65\x66\x69\x6E\x65"];_0xfb1c[0];var crypto=require(_0xfb1c[1]);var md5=require(_0xfb1c[2]);var _=require(_0xfb1c[3]);var moment=require(_0xfb1c[4]);var VoiceQueue=require(_0xfb1c[6])[_0xfb1c[5]];module[_0xfb1c[7]]=function(_0x9c83x6,_0x9c83x7){var _0x9c83x8=_0x9c83x6[_0xfb1c[141]](_0xfb1c[8],{name:{type:_0x9c83x7[_0xfb1c[9]],unique:true,validate:{notEmpty:true,is:/^[A-Za-z0-9\.\_]+$/i},set:function(_0x9c83x9){this[_0xfb1c[11]](_0xfb1c[10],_0x9c83x9);this[_0xfb1c[11]](_0xfb1c[12],_0x9c83x9)}},fullname:{type:_0x9c83x7[_0xfb1c[9]],allowNull:false},email:{type:_0x9c83x7[_0xfb1c[9]],unique:true,set:function(_0x9c83xa){if(_0x9c83xa){this[_0xfb1c[11]](_0xfb1c[13],_0x9c83xa[_0xfb1c[14]]())}},defaultValue:null},role:{type:_0x9c83x7.ENUM(_0xfb1c[15],_0xfb1c[16],_0xfb1c[17],_0xfb1c[18])},password:{type:_0x9c83x7[_0xfb1c[9]],allowNull:false,validate:{notEmpty:true},set:function(_0x9c83xb){this[_0xfb1c[19]]=this[_0xfb1c[20]]();this[_0xfb1c[11]](_0xfb1c[21],this[_0xfb1c[22]](_0x9c83xb));this[_0xfb1c[11]](_0xfb1c[23],this[_0xfb1c[25]](this[_0xfb1c[10]]+_0xfb1c[24]+_0x9c83xb))}},provider:{type:_0x9c83x7[_0xfb1c[9]],defaultValue:_0xfb1c[26]},internal:{type:_0x9c83x7.INTEGER(11),unique:true,set:function(_0x9c83xc){this[_0xfb1c[11]](_0xfb1c[27],_0x9c83xc);this[_0xfb1c[11]](_0xfb1c[28],_0x9c83xc)}},salt:{type:_0x9c83x7[_0xfb1c[9]]},phone:{type:_0x9c83x7[_0xfb1c[9]]},mobile:{type:_0x9c83x7[_0xfb1c[9]]},address:{type:_0x9c83x7[_0xfb1c[9]]},zipcode:{type:_0x9c83x7[_0xfb1c[9]]},userpic:{type:_0x9c83x7[_0xfb1c[9]]},city:{type:_0x9c83x7[_0xfb1c[9]]},country:{type:_0x9c83x7[_0xfb1c[9]]},online:{type:_0x9c83x7[_0xfb1c[29]],defaultValue:false},lastLoginAt:{type:_0x9c83x7[_0xfb1c[30]]},status:{type:_0x9c83x7[_0xfb1c[9]],defaultValue:_0xfb1c[31]},statusAt:{type:_0x9c83x7[_0xfb1c[30]]},voicePause:{type:_0x9c83x7[_0xfb1c[29]],defaultValue:false},chatPause:{type:_0x9c83x7[_0xfb1c[29]],defaultValue:false},mailPause:{type:_0x9c83x7[_0xfb1c[29]],defaultValue:false},faxPause:{type:_0x9c83x7[_0xfb1c[29]],defaultValue:false},pauseType:{type:_0x9c83x7[_0xfb1c[9]],defaultValue:_0xfb1c[32]},lastPauseAt:{type:_0x9c83x7[_0xfb1c[30]]},chatCapacity:{type:_0x9c83x7[_0xfb1c[33]],defaultValue:0},mailCapacity:{type:_0x9c83x7[_0xfb1c[33]],defaultValue:0},faxCapacity:{type:_0x9c83x7[_0xfb1c[33]],defaultValue:0},phoneBarAutoAnswer:{type:_0x9c83x7[_0xfb1c[29]],defaultValue:false},phoneBarEnableSettings:{type:_0x9c83x7[_0xfb1c[29]],defaultValue:false},phoneBarUnconditionalNumber:{type:_0x9c83x7[_0xfb1c[9]],get:function(){if(this[_0xfb1c[35]](_0xfb1c[34])){return this[_0xfb1c[35]](_0xfb1c[36])};return null}},phoneBarNoReplyNumber:{type:_0x9c83x7[_0xfb1c[9]],get:function(){if(this[_0xfb1c[35]](_0xfb1c[37])){return this[_0xfb1c[35]](_0xfb1c[38])};return null}},phoneBarBusyNumber:{type:_0x9c83x7[_0xfb1c[9]],get:function(){if(this[_0xfb1c[35]](_0xfb1c[39])){return this[_0xfb1c[35]](_0xfb1c[40])};return null}},phoneBarUnconditional:{type:_0x9c83x7[_0xfb1c[29]],defaultValue:false},phoneBarNoReply:{type:_0x9c83x7[_0xfb1c[29]],defaultValue:false},phoneBarBusy:{type:_0x9c83x7[_0xfb1c[29]],defaultValue:false},phoneBarPort:{type:_0x9c83x7.INTEGER(5),allowNull:true},chanspy:{type:_0x9c83x7[_0xfb1c[29]],defaultValue:false},description:{type:_0x9c83x7[_0xfb1c[9]],allowNull:true},ipaddr:{type:_0x9c83x7[_0xfb1c[9]],allowNull:true},port:{type:_0x9c83x7.INTEGER(5),allowNull:true},regseconds:{type:_0x9c83x7.INTEGER(11),allowNull:true},fullcontact:{type:_0x9c83x7[_0xfb1c[9]],allowNull:true},regserver:{type:_0x9c83x7[_0xfb1c[9]],allowNull:true},useragent:{type:_0x9c83x7[_0xfb1c[9]],allowNull:true},lastms:{type:_0x9c83x7.INTEGER(11),allowNull:true},type:{type:_0x9c83x7.ENUM(_0xfb1c[41],_0xfb1c[16],_0xfb1c[42]),allowNull:true,defaultValue:_0xfb1c[41]},context:{type:_0x9c83x7[_0xfb1c[9]],allowNull:true,defaultValue:_0xfb1c[43]},callingpres:{type:_0x9c83x7.ENUM(_0xfb1c[44],_0xfb1c[45],_0xfb1c[46],_0xfb1c[47],_0xfb1c[48],_0xfb1c[49],_0xfb1c[50],_0xfb1c[51]),allowNull:true},permit:{type:_0x9c83x7[_0xfb1c[9]],allowNull:true},deny:{type:_0x9c83x7[_0xfb1c[9]],allowNull:true},secret:{type:_0x9c83x7[_0xfb1c[9]],allowNull:true},md5secret:{type:_0x9c83x7[_0xfb1c[9]],allowNull:true},remotesecret:{type:_0x9c83x7[_0xfb1c[9]],allowNull:true},transport:{type:_0x9c83x7[_0xfb1c[9]],allowNull:true,defaultValue:_0xfb1c[52]},dtmfmode:{type:_0x9c83x7.ENUM(_0xfb1c[53],_0xfb1c[54],_0xfb1c[55],_0xfb1c[56],_0xfb1c[57]),allowNull:true,defaultValue:_0xfb1c[53]},directmedia:{type:_0x9c83x7.ENUM(_0xfb1c[58],_0xfb1c[59],_0xfb1c[60],_0xfb1c[61],_0xfb1c[62]),allowNull:true,defaultValue:_0xfb1c[59]},directrtpsetup:{type:_0x9c83x7.ENUM(_0xfb1c[58],_0xfb1c[59]),allowNull:true,defaultValue:_0xfb1c[59]},directmediapermit:{type:_0x9c83x7[_0xfb1c[9]],allowNull:true},directmediadeny:{type:_0x9c83x7[_0xfb1c[9]],allowNull:true},nat:{type:_0x9c83x7[_0xfb1c[9]],allowNull:true,defaultValue:_0xfb1c[63]},callgroup:{type:_0x9c83x7[_0xfb1c[9]],allowNull:true},namedcallgroup:{type:_0x9c83x7[_0xfb1c[9]],allowNull:true},pickupgroup:{type:_0x9c83x7[_0xfb1c[9]],allowNull:true},namedpickupgroup:{type:_0x9c83x7[_0xfb1c[9]],allowNull:true},language:{type:_0x9c83x7[_0xfb1c[9]],allowNull:true,defaultValue:_0xfb1c[64]},tonezone:{type:_0x9c83x7[_0xfb1c[9]],allowNull:true},allow:{type:_0x9c83x7[_0xfb1c[9]],allowNull:true,defaultValue:_0xfb1c[65]},disallow:{type:_0x9c83x7[_0xfb1c[9]],allowNull:true,defaultValue:null},autoframing:{type:_0x9c83x7.ENUM(_0xfb1c[58],_0xfb1c[59]),allowNull:true},insecure:{type:_0x9c83x7[_0xfb1c[9]],allowNull:true,defaultValue:_0xfb1c[66]},trustrpid:{type:_0x9c83x7.ENUM(_0xfb1c[58],_0xfb1c[59]),allowNull:true,defaultValue:_0xfb1c[59]},trust_id_outbound:{type:_0x9c83x7.ENUM(_0xfb1c[58],_0xfb1c[59]),allowNull:true,defaultValue:_0xfb1c[59]},progressinband:{type:_0x9c83x7.ENUM(_0xfb1c[58],_0xfb1c[59],_0xfb1c[67]),allowNull:true},promiscredir:{type:_0x9c83x7.ENUM(_0xfb1c[58],_0xfb1c[59]),allowNull:true},useclientcode:{type:_0x9c83x7.ENUM(_0xfb1c[58],_0xfb1c[59]),allowNull:true},accountcode:{type:_0x9c83x7.INTEGER(11),allowNull:true},setvar:{type:_0x9c83x7[_0xfb1c[9]],allowNull:true},callerid:{type:_0x9c83x7[_0xfb1c[9]],allowNull:true,defaultValue:_0xfb1c[68]},amaflags:{type:_0x9c83x7[_0xfb1c[9]],allowNull:true},callcounter:{type:_0x9c83x7.ENUM(_0xfb1c[58],_0xfb1c[59]),allowNull:true,defaultValue:_0xfb1c[58]},busylevel:{type:_0x9c83x7.INTEGER(11),allowNull:true},allowoverlap:{type:_0x9c83x7.ENUM(_0xfb1c[58],_0xfb1c[59]),allowNull:true},allowsubscribe:{type:_0x9c83x7.ENUM(_0xfb1c[58],_0xfb1c[59]),allowNull:true},allowtransfer:{type:_0x9c83x7.ENUM(_0xfb1c[58],_0xfb1c[59]),allowNull:true},ignoresdpversion:{type:_0x9c83x7.ENUM(_0xfb1c[58],_0xfb1c[59]),allowNull:true},subscribecontext:{type:_0x9c83x7[_0xfb1c[9]],allowNull:true},template:{type:_0x9c83x7[_0xfb1c[9]],allowNull:true},videosupport:{type:_0x9c83x7.ENUM(_0xfb1c[58],_0xfb1c[59],_0xfb1c[69]),allowNull:true,defaultValue:_0xfb1c[59]},maxcallbitrate:{type:_0x9c83x7.INTEGER(11),allowNull:true},rfc2833compensate:{type:_0x9c83x7.ENUM(_0xfb1c[58],_0xfb1c[59]),allowNull:true},mailbox:{type:_0x9c83x7[_0xfb1c[9]],allowNull:true},session_timers:{type:_0x9c83x7.ENUM(_0xfb1c[70],_0xfb1c[71],_0xfb1c[72]),allowNull:true},session_expires:{type:_0x9c83x7.INTEGER(11),allowNull:true},session_minse:{type:_0x9c83x7.INTEGER(11),allowNull:true},session_refresher:{type:_0x9c83x7.ENUM(_0xfb1c[73],_0xfb1c[74]),allowNull:true,defaultValue:_0xfb1c[74]},t38pt_usertpsource:{type:_0x9c83x7[_0xfb1c[9]],allowNull:true},regexten:{type:_0x9c83x7[_0xfb1c[9]],allowNull:true},fromdomain:{type:_0x9c83x7[_0xfb1c[9]],allowNull:true},fromuser:{type:_0x9c83x7[_0xfb1c[9]],allowNull:true},host:{type:_0x9c83x7[_0xfb1c[9]],allowNull:true,defaultValue:_0xfb1c[75]},qualify:{type:_0x9c83x7.ENUM(_0xfb1c[58],_0xfb1c[59]),allowNull:true,defaultValue:_0xfb1c[58]},keepalive:{type:_0x9c83x7.INTEGER(11),allowNull:true},defaultip:{type:_0x9c83x7[_0xfb1c[9]],allowNull:true},defaultuser:{type:_0x9c83x7[_0xfb1c[9]],allowNull:true},rtptimeout:{type:_0x9c83x7.INTEGER(11),allowNull:true},rtpholdtimeout:{type:_0x9c83x7.INTEGER(11),allowNull:true},rtpkeepalive:{type:_0x9c83x7.INTEGER(11),allowNull:true},sendrpid:{type:_0x9c83x7.ENUM(_0xfb1c[58],_0xfb1c[59]),allowNull:true,defaultValue:_0xfb1c[59]},outboundproxy:{type:_0x9c83x7[_0xfb1c[9]],allowNull:true},callbackextension:{type:_0x9c83x7[_0xfb1c[9]],allowNull:true},timert1:{type:_0x9c83x7.INTEGER(11),allowNull:true},timerb:{type:_0x9c83x7.INTEGER(11),allowNull:true},qualifyfreq:{type:_0x9c83x7.INTEGER(11),allowNull:true},contactpermit:{type:_0x9c83x7[_0xfb1c[9]],allowNull:true},contactdeny:{type:_0x9c83x7[_0xfb1c[9]],allowNull:true},contactacl:{type:_0x9c83x7[_0xfb1c[9]],allowNull:true},unsolicited_mailbox:{type:_0x9c83x7[_0xfb1c[9]],allowNull:true},use_q850_reason:{type:_0x9c83x7[_0xfb1c[9]],allowNull:true},maxforwards:{type:_0x9c83x7.INTEGER(11),allowNull:true},encryption:{type:_0x9c83x7.ENUM(_0xfb1c[58],_0xfb1c[59]),allowNull:true,defaultValue:_0xfb1c[59]},avpf:{type:_0x9c83x7.ENUM(_0xfb1c[58],_0xfb1c[59]),allowNull:true},force_avp:{type:_0x9c83x7.ENUM(_0xfb1c[58],_0xfb1c[59]),allowNull:true},icesupport:{type:_0x9c83x7.ENUM(_0xfb1c[58],_0xfb1c[59]),allowNull:true},dtlsenable:{type:_0x9c83x7.ENUM(_0xfb1c[58],_0xfb1c[59]),allowNull:true},dtlsverify:{type:_0x9c83x7.ENUM(_0xfb1c[58],_0xfb1c[59],_0xfb1c[76],_0xfb1c[77]),allowNull:true},dtlsrekey:{type:_0x9c83x7.INTEGER(11),allowNull:true},dtlscertfile:{type:_0x9c83x7[_0xfb1c[9]],allowNull:true},dtlsprivatekey:{type:_0x9c83x7[_0xfb1c[9]],allowNull:true},dtlscipher:{type:_0x9c83x7[_0xfb1c[9]],allowNull:true},dtlscafile:{type:_0x9c83x7[_0xfb1c[9]],allowNull:true},dtlscapath:{type:_0x9c83x7[_0xfb1c[9]],allowNull:true},dtlssetup:{type:_0x9c83x7.ENUM(_0xfb1c[78],_0xfb1c[79],_0xfb1c[80]),allowNull:true},dtlsfingerprint:{type:_0x9c83x7[_0xfb1c[9]],allowNull:true},usereqphone:{type:_0x9c83x7.ENUM(_0xfb1c[58],_0xfb1c[59]),allowNull:true,defaultValue:_0xfb1c[59]},recordonfeature:{type:_0x9c83x7[_0xfb1c[9]],allowNull:true},recordofffeature:{type:_0x9c83x7[_0xfb1c[9]],allowNull:true},call_limit:{type:_0x9c83x7.INTEGER(11),allowNull:true,defaultValue:null},registertrying:{type:_0x9c83x7.ENUM(_0xfb1c[58],_0xfb1c[59]),allowNull:true},subscribemwi:{type:_0x9c83x7.ENUM(_0xfb1c[58],_0xfb1c[59]),allowNull:true},vmexten:{type:_0x9c83x7[_0xfb1c[9]],allowNull:true},mohinterpret:{type:_0x9c83x7[_0xfb1c[9]],allowNull:true},mohsuggest:{type:_0x9c83x7[_0xfb1c[9]],allowNull:true},parkinglot:{type:_0x9c83x7[_0xfb1c[9]],allowNull:true},canreinvite:{type:_0x9c83x7.ENUM(_0xfb1c[58],_0xfb1c[59],_0xfb1c[60],_0xfb1c[61],_0xfb1c[81]),allowNull:true,defaultValue:_0xfb1c[59]}},{tableName:_0xfb1c[82],instanceMethods:{authenticate:function(_0x9c83xd){return this[_0xfb1c[22]](_0x9c83xd)===this[_0xfb1c[21]]},makeSalt:function(){return crypto[_0xfb1c[84]](16).toString(_0xfb1c[83])},encryptPassword:function(_0x9c83xb){if(!_0x9c83xb||!this[_0xfb1c[19]]){return _0xfb1c[85]};var _0x9c83xe= new Buffer(this[_0xfb1c[19]],_0xfb1c[83]);return crypto[_0xfb1c[86]](_0x9c83xb,_0x9c83xe,10000,64).toString(_0xfb1c[83])},md5Password:function(_0x9c83xb){if(!_0x9c83xb){return _0xfb1c[85]};return md5(_0x9c83xb)}},associate:function(_0x9c83xf){_0x9c83x8[_0xfb1c[87]](_0x9c83xf.ChatMessage);_0x9c83x8[_0xfb1c[87]](_0x9c83xf.MailMessage);_0x9c83x8[_0xfb1c[87]](_0x9c83xf.Contact);_0x9c83x8[_0xfb1c[87]](_0x9c83xf.Action);_0x9c83x8[_0xfb1c[89]](_0x9c83xf.Module,{through:_0xfb1c[88]});_0x9c83x8[_0xfb1c[89]](_0x9c83xf.Channel,{through:_0xfb1c[90]});_0x9c83x8[_0xfb1c[89]](_0x9c83xf.MailRoom,{through:_0xfb1c[91]});_0x9c83x8[_0xfb1c[89]](_0x9c83xf.Team,{through:_0x9c83xf[_0xfb1c[92]]});_0x9c83x8[_0xfb1c[89]](_0x9c83xf.ChatRoom,{through:_0x9c83xf[_0xfb1c[93]]});_0x9c83x8[_0xfb1c[89]](_0x9c83xf.MailQueue,{through:_0x9c83xf[_0xfb1c[94]],required:false});_0x9c83x8[_0xfb1c[89]](_0x9c83xf.FaxQueue,{through:_0x9c83xf[_0xfb1c[95]],required:false});_0x9c83x8[_0xfb1c[89]](_0x9c83xf.ChatQueue,{through:_0x9c83xf[_0xfb1c[96]],required:false});_0x9c83x8[_0xfb1c[89]](_0x9c83xf.VoiceQueue,{through:_0x9c83xf[_0xfb1c[97]],required:false});_0x9c83x8[_0xfb1c[89]](_0x9c83xf.Service,{through:_0x9c83xf[_0xfb1c[98]]});_0x9c83x8[_0xfb1c[87]](_0x9c83xf.VoiceExtension,{foreignKey:_0xfb1c[99],as:_0xfb1c[100],onDelete:_0xfb1c[101],hooks:true});_0x9c83x8[_0xfb1c[102]](_0xfb1c[16],{where:{role:{$in:[_0xfb1c[15],_0xfb1c[16]]}}});_0x9c83x8[_0xfb1c[102]](_0xfb1c[103],{include:[_0x9c83xf[_0xfb1c[5]],_0x9c83xf[_0xfb1c[104]],_0x9c83xf[_0xfb1c[105]],_0x9c83xf[_0xfb1c[106]]]});_0x9c83x8[_0xfb1c[102]](_0xfb1c[18],{where:{role:_0xfb1c[18]}});_0x9c83x8[_0xfb1c[102]](_0xfb1c[107],function(_0x9c83x10){var _0x9c83x11={where:{}};if(_0x9c83x10[_0xfb1c[108]]){_0x9c83x11[_0xfb1c[109]][_0xfb1c[108]]=(_0x9c83x10[_0xfb1c[108]]===_0xfb1c[110])?true:false;delete _0x9c83x10[_0xfb1c[108]]}else {if(_0x9c83x10[_0xfb1c[111]]){_0x9c83x11[_0xfb1c[109]][_0xfb1c[111]]=(_0x9c83x10[_0xfb1c[111]]===_0xfb1c[110])?true:false;delete _0x9c83x10[_0xfb1c[111]]}else {if(_0x9c83x10[_0xfb1c[112]]){_0x9c83x11[_0xfb1c[109]][_0xfb1c[112]]=(_0x9c83x10[_0xfb1c[112]]===_0xfb1c[110])?true:false;delete _0x9c83x10[_0xfb1c[112]]}else {if(_0x9c83x10[_0xfb1c[113]]){_0x9c83x11[_0xfb1c[109]][_0xfb1c[113]]=(_0x9c83x10[_0xfb1c[113]]===_0xfb1c[110])?true:false;delete _0x9c83x10[_0xfb1c[113]]}}}};return _0x9c83x11});_0x9c83x8[_0xfb1c[102]](_0xfb1c[114],function(_0x9c83x10){var _0x9c83x11={where:{}};if(_0x9c83x10[_0xfb1c[115]]){_0x9c83x11[_0xfb1c[109]][_0xfb1c[115]]=(_0x9c83x10[_0xfb1c[115]]===_0xfb1c[110])?true:false;delete _0x9c83x10[_0xfb1c[115]]};return _0x9c83x11});_0x9c83x8[_0xfb1c[102]](_0xfb1c[116],function(_0x9c83x10){var _0x9c83x11={where:{}};if(_0x9c83x10[_0xfb1c[117]]){_0x9c83x11[_0xfb1c[109]][_0xfb1c[117]]=_0x9c83x10[_0xfb1c[117]];delete _0x9c83x10[_0xfb1c[117]]};return _0x9c83x11});_0x9c83x8[_0xfb1c[102]](_0xfb1c[17],{where:{role:_0xfb1c[17]},attributes:[_0xfb1c[118],_0xfb1c[10],_0xfb1c[13],_0xfb1c[27],_0xfb1c[119],_0xfb1c[28],_0xfb1c[120],_0xfb1c[121],_0xfb1c[122],_0xfb1c[123],_0xfb1c[124],_0xfb1c[125],_0xfb1c[126],_0xfb1c[127],_0xfb1c[115],_0xfb1c[128],_0xfb1c[129],_0xfb1c[130],_0xfb1c[34],_0xfb1c[37],_0xfb1c[39],_0xfb1c[36],_0xfb1c[38],_0xfb1c[40],_0xfb1c[131],_0xfb1c[108],_0xfb1c[113],_0xfb1c[111],_0xfb1c[112],_0xfb1c[132],_0xfb1c[133],_0xfb1c[117],_0xfb1c[134],_0xfb1c[135],_0xfb1c[136],_0xfb1c[137],_0xfb1c[138],_0xfb1c[139],_0xfb1c[140]]})}});return _0x9c83x8}
\ No newline at end of file
+'use strict';
+
+var crypto = require('crypto');
+var md5 = require('md5');
+var _ = require('lodash');
+var moment = require('moment');
+var VoiceQueue = require('.').VoiceQueue;
+
+module.exports = function(sequelize, DataTypes) {
+  var User = sequelize.define('User', {
+    name: {
+      type: DataTypes.STRING,
+      unique: true,
+      validate: {
+        notEmpty: true,
+        is: /^[A-Za-z0-9\.\_]+$/i
+      },
+      set: function(name) {
+        this.setDataValue('name', name);
+        this.setDataValue('defaultuser', name);
+      }
+    },
+    fullname: {
+      type: DataTypes.STRING,
+      allowNull: false,
+    },
+    email: {
+      type: DataTypes.STRING,
+      unique: true,
+      set: function(email) {
+        if (email) {
+          this.setDataValue('email', email.toLowerCase());
+        }
+      },
+      defaultValue: null
+    },
+    role: {
+      type: DataTypes.ENUM('admin', 'user', 'agent', 'telephone')
+    },
+    password: {
+      type: DataTypes.STRING,
+      allowNull: false,
+      validate: {
+        notEmpty: true
+      },
+      set: function(password) {
+        this.salt = this.makeSalt();
+        this.setDataValue('password', this.encryptPassword(password));
+        this.setDataValue('md5secret', this.md5Password(this.name + ':asterisk:' + password));
+      }
+    },
+    provider: {
+      type: DataTypes.STRING,
+      defaultValue: 'local'
+    },
+    internal: {
+      type: DataTypes.INTEGER(11),
+      unique: true,
+      set: function(internal) {
+        this.setDataValue('internal', internal);
+        this.setDataValue('accountcode', internal);
+      }
+    },
+    salt: {
+      type: DataTypes.STRING
+    },
+    phone: {
+      type: DataTypes.STRING
+    },
+    mobile: {
+      type: DataTypes.STRING
+    },
+    address: {
+      type: DataTypes.STRING
+    },
+    zipcode: {
+      type: DataTypes.STRING
+    },
+    userpic: {
+      type: DataTypes.STRING
+    },
+    city: {
+      type: DataTypes.STRING
+    },
+    country: {
+      type: DataTypes.STRING
+    },
+    online: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: false
+    },
+    lastLoginAt: {
+      type: DataTypes.DATE
+    },
+    status: {
+      type: DataTypes.STRING,
+      defaultValue: 'UNKNOWN'
+    },
+    statusAt: {
+      type: DataTypes.DATE
+    },
+    voicePause: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: false
+    },
+    chatPause: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: false
+    },
+    mailPause: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: false
+    },
+    faxPause: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: false
+    },
+    pauseType: {
+      type: DataTypes.STRING,
+      defaultValue: 'Default Pause'
+    },
+    lastPauseAt: {
+      type: DataTypes.DATE
+    },
+    chatCapacity: {
+      type: DataTypes.INTEGER,
+      defaultValue: 0
+    },
+    mailCapacity: {
+      type: DataTypes.INTEGER,
+      defaultValue: 0
+    },
+    faxCapacity: {
+      type: DataTypes.INTEGER,
+      defaultValue: 0
+    },
+    phoneBarAutoAnswer: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: false
+    },
+    phoneBarEnableSettings: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: false
+    },
+    phoneBarUnconditionalNumber: {
+      type: DataTypes.STRING,
+      get: function() {
+        if (this.getDataValue('phoneBarUnconditional')) {
+          return this.getDataValue('phoneBarUnconditionalNumber');
+        }
+        return null;
+      }
+    },
+    phoneBarNoReplyNumber: {
+      type: DataTypes.STRING,
+      get: function() {
+        if (this.getDataValue('phoneBarNoReply')) {
+          return this.getDataValue('phoneBarNoReplyNumber');
+        }
+        return null;
+      }
+    },
+    phoneBarBusyNumber: {
+      type: DataTypes.STRING,
+      get: function() {
+        if (this.getDataValue('phoneBarBusy')) {
+          return this.getDataValue('phoneBarBusyNumber');
+        }
+        return null;
+      }
+    },
+    phoneBarUnconditional: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: false
+    },
+    phoneBarNoReply: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: false
+    },
+    phoneBarBusy: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: false
+    },
+    phoneBarPort: {
+      type: DataTypes.INTEGER(5),
+      allowNull: true,
+    },
+    chanspy: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: false
+    },
+    description: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    ipaddr: { //REALTIME ASTERISK
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    port: { //REALTIME ASTERISK
+      type: DataTypes.INTEGER(5),
+      allowNull: true,
+    },
+    regseconds: { //REALTIME ASTERISK
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+    },
+    fullcontact: { //REALTIME ASTERISK
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    regserver: { //REALTIME ASTERISK
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    useragent: { //REALTIME ASTERISK
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    lastms: { //REALTIME ASTERISK
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+    },
+    type: {
+      type: DataTypes.ENUM('friend', 'user', 'peer'),
+      allowNull: true,
+      defaultValue: 'friend'
+    },
+    context: {
+      type: DataTypes.STRING,
+      allowNull: true,
+      defaultValue: 'from-sip'
+    },
+    callingpres: {
+      type: DataTypes.ENUM('ALLOWED_NOT_SCREENED',
+        'ALLOWED_PASSED_SCREEN', 'ALLOWED_FAILED_SCREEN', 'ALLOWED',
+        'PROHIB_NOT_SCREENED', 'PROHIB_PASSED_SCREEN',
+        'PROHIB_FAILED_SCREEN', 'PROHIB'),
+      allowNull: true,
+    },
+    permit: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    deny: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    secret: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    md5secret: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    remotesecret: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    transport: {
+      type: DataTypes.STRING,
+      allowNull: true,
+      defaultValue: 'udp'
+    },
+    dtmfmode: {
+      type: DataTypes.ENUM('rfc2833', 'info', 'shortinfo', 'inband',
+        'auto'),
+      allowNull: true,
+      defaultValue: 'rfc2833'
+    },
+    directmedia: {
+      type: DataTypes.ENUM('yes', 'no', 'nonat', 'update', 'outgoing'),
+      allowNull: true,
+      defaultValue: 'no'
+    },
+    directrtpsetup: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+      defaultValue: 'no'
+    },
+    directmediapermit: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    directmediadeny: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    nat: {
+      type: DataTypes.STRING,
+      allowNull: true,
+      defaultValue: 'force_rport,comedia'
+    },
+    callgroup: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    namedcallgroup: { //We are in named call groups engineering,sales,netgroup,protgroup
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    pickupgroup: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    namedpickupgroup: { //We can do call pick-p for named call group sales
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    language: {
+      type: DataTypes.STRING,
+      allowNull: true,
+      defaultValue: 'en'
+    },
+    tonezone: {
+      type: DataTypes.STRING,
+      allowNull: true
+    },
+    allow: {
+      type: DataTypes.STRING,
+      allowNull: true,
+      defaultValue: 'alaw;ulaw;gsm'
+    },
+    disallow: {
+      type: DataTypes.STRING,
+      allowNull: true,
+      defaultValue: null
+    },
+    autoframing: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+    },
+    insecure: {
+      type: DataTypes.STRING,
+      allowNull: true,
+      defaultValue: 'port,invite'
+    },
+    trustrpid: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+      defaultValue: 'no'
+    },
+    trust_id_outbound: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+      defaultValue: 'no'
+    },
+    progressinband: {
+      type: DataTypes.ENUM('yes', 'no', 'never'),
+      allowNull: true,
+    },
+    promiscredir: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+    },
+    useclientcode: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+    },
+    accountcode: {
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+    },
+    setvar: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    callerid: {
+      type: DataTypes.STRING,
+      allowNull: true,
+      defaultValue: '"" <>'
+    },
+    amaflags: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    callcounter: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+      defaultValue: 'yes'
+    },
+    busylevel: {
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+    },
+    allowoverlap: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+    },
+    allowsubscribe: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+    },
+    allowtransfer: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+    },
+    ignoresdpversion: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+    },
+    subscribecontext: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    template: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    videosupport: {
+      type: DataTypes.ENUM('yes', 'no', 'always'),
+      allowNull: true,
+      defaultValue: 'no'
+    },
+    maxcallbitrate: {
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+    },
+    rfc2833compensate: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+    },
+    mailbox: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    session_timers: {
+      type: DataTypes.ENUM('accept', 'refuse', 'originate'),
+      allowNull: true,
+    },
+    session_expires: {
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+    },
+    session_minse: {
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+    },
+    session_refresher: {
+      type: DataTypes.ENUM('uac', 'uas'),
+      allowNull: true,
+      defaultValue: 'uas'
+    },
+    t38pt_usertpsource: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    regexten: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    fromdomain: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    fromuser: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    host: {
+      type: DataTypes.STRING,
+      allowNull: true,
+      defaultValue: 'dynamic'
+    },
+    qualify: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+      defaultValue: 'yes'
+    },
+    keepalive: {
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+    },
+    defaultip: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    defaultuser: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    rtptimeout: { // Terminate call if 60 seconds of no RTP or RTCP activity on the audio channel  when we're not on hold.
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+    },
+    rtpholdtimeout: { // Terminate call if 300 seconds of no RTP or RTCP activity on the audio channel when we're on hold (must be > rtptimeout)
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+    },
+    rtpkeepalive: { // Send keepalives in the RTP stream to keep NAT open (default is off - zero)
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+    },
+    sendrpid: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+      defaultValue: 'no'
+    },
+    outboundproxy: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    callbackextension: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    timert1: {
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+    },
+    timerb: {
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+    },
+    qualifyfreq: {
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+    },
+    contactpermit: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    contactdeny: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    contactacl: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    unsolicited_mailbox: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    use_q850_reason: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    maxforwards: {
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+    },
+    encryption: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+      defaultValue: 'no'
+    },
+    avpf: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true
+    },
+    force_avp: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true
+    },
+    icesupport: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true
+    },
+    dtlsenable: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true
+    },
+    dtlsverify: {
+      type: DataTypes.ENUM('yes', 'no', 'fingerprint', 'certificate'),
+      allowNull: true
+    },
+    dtlsrekey: {
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+    },
+    dtlscertfile: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    dtlsprivatekey: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    dtlscipher: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    dtlscafile: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    dtlscapath: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    dtlssetup: {
+      type: DataTypes.ENUM('active', 'passive', 'actpass'),
+      allowNull: true
+    },
+    dtlsfingerprint: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    usereqphone: { //This provider requires ";user=phone" on URI
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+      defaultValue: 'no'
+    },
+    recordonfeature: { //Feature to use when INFO with Record: on is received.
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    recordofffeature: { //Feature to use when INFO with Record: off is received.
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    call_limit: {
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+      defaultValue: null
+    },
+    registertrying: { //Send a 100 Trying when the device registers.
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+    },
+    subscribemwi: { //Only send notifications if this phone subscribes for mailbox notification
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+    },
+    vmexten: { // dialplan extension to reach mailbox. defaults to global vmexten which defaults to "asterisk"
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    mohinterpret: { // This option specifies a preference for which music on hold class this channel should listen to when put on hold
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    mohsuggest: { //  This option specifies which music on hold class to suggest to the peer channel when this channel places the peer on hold.
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    parkinglot: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    canreinvite: {
+      type: DataTypes.ENUM('yes', 'no', 'nonat', 'update', 'update,nonat'),
+      allowNull: true,
+      defaultValue: 'no'
+    },
+  }, {
+    tableName: 'users',
+    instanceMethods: {
+      /**
+       * Authenticate - check if the passwords are the same
+       *
+       * @param {String} plainText
+       *        {function} callBack
+       * @api public
+       */
+      authenticate: function(plainText) {
+        return this.encryptPassword(plainText) === this.password;
+      },
+      /**
+       * Make salt
+       *
+       * @return {String}
+       * @api public
+       */
+      makeSalt: function() {
+        return crypto.randomBytes(16).toString('base64');
+      },
+      /**
+       * Encrypt password
+       *
+       * @param {String} password
+       * @return {String}
+       * @api public
+       */
+      encryptPassword: function(password) {
+        if (!password || !this.salt) return '';
+        var salt = new Buffer(this.salt, 'base64');
+        return crypto.pbkdf2Sync(password, salt, 10000, 64).toString(
+          'base64');
+      },
+      /**
+       * md5 password
+       *
+       * @param {String} password
+       * @return {String}
+       * @api public
+       */
+      md5Password: function(password) {
+        if (!password) return '';
+        return md5(password);
+      }
+    },
+    associate: function(models) {
+      // BELOGNS TO MANY
+      User.hasMany(models.ChatMessage);
+      User.hasMany(models.MailMessage);
+      User.hasMany(models.Contact);
+      User.hasMany(models.Action);
+      User.belongsToMany(models.Module, {
+        through: 'user_has_modules'
+      });
+      User.belongsToMany(models.Channel, {
+        through: 'user_has_channels'
+      });
+      User.belongsToMany(models.MailRoom, {
+        through: 'user_has_mail_rooms'
+      });
+      User.belongsToMany(models.Team, {
+        through: models.UserHasTeam
+      });
+      User.belongsToMany(models.ChatRoom, {
+        through: models.UserHasChatRoom
+      });
+      User.belongsToMany(models.MailQueue, {
+        through: models.UserHasMailQueue,
+        required: false
+      });
+      User.belongsToMany(models.FaxQueue, {
+        through: models.UserHasFaxQueue,
+        required: false
+      });
+      User.belongsToMany(models.ChatQueue, {
+        through: models.UserHasChatQueue,
+        required: false
+      });
+      User.belongsToMany(models.VoiceQueue, {
+        through: models.UserHasVoiceQueue,
+        required: false
+      });
+      User.belongsToMany(models.Service, {
+        through: models.UserHasService
+      });
+      User.hasMany(models.VoiceExtension, {
+        foreignKey: 'UserId',
+        as: 'UserExtensions',
+        onDelete: 'cascade',
+        hooks: true
+      });
+
+      // SCOPES MANAGEMENT
+      User.addScope('user', {
+        where: {
+          role: {
+            $in: ['admin', 'user']
+          },
+        }
+      });
+      User.addScope('queues', {
+        include: [models.VoiceQueue, models.ChatQueue, models.MailQueue, models.FaxQueue]
+      });
+      User.addScope('telephone', {
+        where: {
+          role: 'telephone'
+        }
+      });
+      User.addScope('checkPauseStatus', function(query) {
+        var scope = {
+          where: {}
+        };
+        if (query.voicePause) {
+          scope.where.voicePause = (query.voicePause === 'true') ? true : false;
+          delete query.voicePause;
+        } else if (query.faxPause) {
+          scope.where.faxPause = (query.faxPause === 'true') ? true : false;
+          delete query.faxPause;
+        } else if (query.chatPause) {
+          scope.where.chatPause = (query.chatPause === 'true') ? true : false;
+          delete query.chatPause;
+        } else if (query.mailPause) {
+          scope.where.mailPause = (query.mailPause === 'true') ? true : false;
+          delete query.mailPause;
+        }
+        return scope;
+      });
+      User.addScope('checkOnlineStatus', function(query) {
+        var scope = {
+          where: {}
+        };
+        if (query.online) {
+          scope.where.online = (query.online === 'true') ? true : false;
+          delete query.online;
+        }
+        return scope;
+      });
+      User.addScope('checkSipStatus', function(query) {
+        var scope = {
+          where: {}
+        };
+        if (query.status) {
+          scope.where.status = query.status;
+          delete query.status;
+        }
+        return scope;
+      });
+      User.addScope('agent', {
+        where: {
+          role: 'agent'
+        },
+        attributes: ['id',
+          'name',
+          'email',
+          'internal',
+          'fullname',
+          'accountcode',
+          'transport',
+          'host',
+          'nat',
+          'type',
+          'allow',
+          'chatCapacity',
+          'mailCapacity',
+          'faxCapacity',
+          'online',
+          'lastLoginAt',
+          'phoneBarAutoAnswer',
+          'phoneBarEnableSettings',
+          'phoneBarUnconditional',
+          'phoneBarNoReply',
+          'phoneBarBusy',
+          'phoneBarUnconditionalNumber',
+          'phoneBarNoReplyNumber',
+          'phoneBarBusyNumber',
+          'chanspy',
+          'voicePause',
+          'mailPause',
+          'faxPause',
+          'chatPause',
+          'pauseType',
+          'lastPauseAt',
+          'status',
+          'statusAt',
+          'useragent',
+          'ipaddr',
+          'fullcontact',
+          'port',
+          'lastms',
+          'description'
+        ]
+      });
+    }
+  });
+
+  return User;
+}
index 94e42d9..6479a3d 100644 (file)
@@ -1 +1,22 @@
-var _0x20a5=["\x63\x72\x79\x70\x74\x6F","\x65\x78\x70\x6F\x72\x74\x73","\x55\x73\x65\x72\x48\x61\x73\x43\x68\x61\x74\x51\x75\x65\x75\x65","\x49\x4E\x54\x45\x47\x45\x52","\x53\x54\x52\x49\x4E\x47","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x63\x68\x61\x74\x5F\x71\x75\x65\x75\x65\x73","\x64\x65\x66\x69\x6E\x65"];var crypto=require(_0x20a5[0]);module[_0x20a5[1]]=function(_0xcf68x2,_0xcf68x3){var _0xcf68x4=_0xcf68x2[_0x20a5[6]](_0x20a5[2],{penalty:{type:_0xcf68x3[_0x20a5[3]],defaultValue:0},queue:{type:_0xcf68x3[_0x20a5[4]]}},{tableName:_0x20a5[5]});return _0xcf68x4}
\ No newline at end of file
+/**
+ * Chat Website Model
+ */
+
+var crypto = require('crypto');
+
+module.exports = function(sequelize, DataTypes) {
+
+       var UserHasChatQueue = sequelize.define('UserHasChatQueue', {
+               penalty: {
+                       type: DataTypes.INTEGER,
+                       defaultValue: 0
+               },
+               queue: {
+                       type: DataTypes.STRING
+               },
+       }, {
+               tableName: 'user_has_chat_queues'
+       });
+
+       return UserHasChatQueue;
+};
index d805255..277debd 100644 (file)
@@ -1 +1,19 @@
-var _0xb43d=["\x63\x72\x79\x70\x74\x6F","\x65\x78\x70\x6F\x72\x74\x73","\x55\x73\x65\x72\x48\x61\x73\x43\x68\x61\x74\x52\x6F\x6F\x6D","\x49\x4E\x54\x45\x47\x45\x52","\x42\x4F\x4F\x4C\x45\x41\x4E","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x63\x68\x61\x74\x5F\x72\x6F\x6F\x6D\x73","\x64\x65\x66\x69\x6E\x65"];var crypto=require(_0xb43d[0]);module[_0xb43d[1]]=function(_0xd5dax2,_0xd5dax3){var _0xd5dax4=_0xd5dax2[_0xb43d[6]](_0xb43d[2],{LastMessageRead:{type:_0xd5dax3[_0xb43d[3]],defaultValue:0},Hide:{type:_0xd5dax3[_0xb43d[4]],defaultValue:false}},{tableName:_0xb43d[5]});return _0xd5dax4}
\ No newline at end of file
+
+/**
+       * Chat Website Model
+       */
+
+var crypto = require('crypto');
+
+module.exports = function(sequelize, DataTypes) {
+
+       var UserHasChatRoom = sequelize.define('UserHasChatRoom', {
+                       LastMessageRead: { type: DataTypes.INTEGER, defaultValue: 0 },
+                       Hide: { type: DataTypes.BOOLEAN, defaultValue: false }
+               }, {
+                       tableName: 'user_has_chat_rooms'
+               }
+       );
+
+       return UserHasChatRoom;
+};
index 35d679b..3bcb67d 100644 (file)
@@ -1 +1,22 @@
-var _0xf108=["\x63\x72\x79\x70\x74\x6F","\x65\x78\x70\x6F\x72\x74\x73","\x55\x73\x65\x72\x48\x61\x73\x46\x61\x78\x51\x75\x65\x75\x65","\x49\x4E\x54\x45\x47\x45\x52","\x53\x54\x52\x49\x4E\x47","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x66\x61\x78\x5F\x71\x75\x65\x75\x65\x73","\x64\x65\x66\x69\x6E\x65"];var crypto=require(_0xf108[0]);module[_0xf108[1]]=function(_0xca8fx2,_0xca8fx3){var _0xca8fx4=_0xca8fx2[_0xf108[6]](_0xf108[2],{penalty:{type:_0xca8fx3[_0xf108[3]],defaultValue:0},queue:{type:_0xca8fx3[_0xf108[4]]}},{tableName:_0xf108[5]});return _0xca8fx4}
\ No newline at end of file
+/**
+ * Chat Website Model
+ */
+
+var crypto = require('crypto');
+
+module.exports = function(sequelize, DataTypes) {
+
+       var UserHasFaxQueue = sequelize.define('UserHasFaxQueue', {
+               penalty: {
+                       type: DataTypes.INTEGER,
+                       defaultValue: 0
+               },
+               queue: {
+                       type: DataTypes.STRING
+               }
+       }, {
+               tableName: 'user_has_fax_queues'
+       });
+
+       return UserHasFaxQueue;
+};
index 690c5ad..c6358cb 100644 (file)
@@ -1 +1,22 @@
-var _0x319a=["\x63\x72\x79\x70\x74\x6F","\x65\x78\x70\x6F\x72\x74\x73","\x55\x73\x65\x72\x48\x61\x73\x4D\x61\x69\x6C\x51\x75\x65\x75\x65","\x49\x4E\x54\x45\x47\x45\x52","\x53\x54\x52\x49\x4E\x47","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x6D\x61\x69\x6C\x5F\x71\x75\x65\x75\x65\x73","\x64\x65\x66\x69\x6E\x65"];var crypto=require(_0x319a[0]);module[_0x319a[1]]=function(_0x8b0bx2,_0x8b0bx3){var _0x8b0bx4=_0x8b0bx2[_0x319a[6]](_0x319a[2],{penalty:{type:_0x8b0bx3[_0x319a[3]],defaultValue:0},queue:{type:_0x8b0bx3[_0x319a[4]]}},{tableName:_0x319a[5]});return _0x8b0bx4}
\ No newline at end of file
+/**
+ * Chat Website Model
+ */
+
+var crypto = require('crypto');
+
+module.exports = function(sequelize, DataTypes) {
+
+       var UserHasMailQueue = sequelize.define('UserHasMailQueue', {
+               penalty: {
+                       type: DataTypes.INTEGER,
+                       defaultValue: 0
+               },
+               queue: {
+                       type: DataTypes.STRING
+               }
+       }, {
+               tableName: 'user_has_mail_queues'
+       });
+
+       return UserHasMailQueue;
+};
index af555a2..a3ff23d 100644 (file)
@@ -1 +1,21 @@
-var _0x3851=["\x63\x72\x79\x70\x74\x6F","\x65\x78\x70\x6F\x72\x74\x73","\x55\x73\x65\x72\x48\x61\x73\x53\x65\x72\x76\x69\x63\x65","\x53\x54\x52\x49\x4E\x47","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x73\x65\x72\x76\x69\x63\x65\x73","\x6D\x65\x6D\x62\x65\x72\x6E\x61\x6D\x65","\x64\x65\x66\x69\x6E\x65"];var crypto=require(_0x3851[0]);module[_0x3851[1]]=function(_0xb30dx2,_0xb30dx3){var _0xb30dx4=_0xb30dx2[_0x3851[6]](_0x3851[2],{membername:{type:_0xb30dx3[_0x3851[3]]}},{tableName:_0x3851[4],indexes:[{name:_0x3851[5],fields:[_0x3851[5]]}]});return _0xb30dx4}
\ No newline at end of file
+/**
+ * 
+ */
+
+var crypto = require('crypto');
+
+module.exports = function(sequelize, DataTypes) {
+       var UserHasService = sequelize.define('UserHasService', {
+               membername: {
+                       type: DataTypes.STRING
+               }
+       }, {
+               tableName: 'user_has_services',
+               indexes: [{
+                       name: 'membername',
+                       fields: ['membername']
+               }]
+       });
+
+       return UserHasService;
+};
index 7ae191e..a0c38b6 100644 (file)
@@ -1 +1,14 @@
-var _0xc1fb=["\x63\x72\x79\x70\x74\x6F","\x65\x78\x70\x6F\x72\x74\x73","\x55\x73\x65\x72\x48\x61\x73\x54\x65\x61\x6D","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x74\x65\x61\x6D\x73","\x64\x65\x66\x69\x6E\x65"];var crypto=require(_0xc1fb[0]);module[_0xc1fb[1]]=function(_0x5570x2,_0x5570x3){var _0x5570x4=_0x5570x2[_0xc1fb[4]](_0xc1fb[2],{},{tableName:_0xc1fb[3]});return _0x5570x4}
\ No newline at end of file
+/**
+ * Chat Website Model
+ */
+
+var crypto = require('crypto');
+
+module.exports = function(sequelize, DataTypes) {
+
+       var UserHasTeam = sequelize.define('UserHasTeam', {}, {
+               tableName: 'user_has_teams'
+       });
+
+       return UserHasTeam;
+};
index 45caf6a..24791d4 100644 (file)
@@ -1 +1,117 @@
-var _0xe286=["\x63\x72\x79\x70\x74\x6F","\x65\x78\x70\x6F\x72\x74\x73","\x55\x73\x65\x72\x48\x61\x73\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65","\x42\x4F\x4F\x4C\x45\x41\x4E","\x44\x41\x54\x45","\x49\x4E\x54\x45\x47\x45\x52","\x53\x54\x52\x49\x4E\x47","\x30","\x6C\x61\x73\x74\x63\x61\x6C\x6C","\x73\x65\x74\x44\x61\x74\x61\x56\x61\x6C\x75\x65","\x46\x52\x4F\x4D\x5F\x55\x4E\x49\x58\x54\x49\x4D\x45","\x25\x59\x2D\x25\x6D\x2D\x25\x64\x20\x25\x48\x3A\x25\x69\x3A\x25\x73","\x66\x6E","\x73\x74\x61\x74\x75\x73","\x55\x4E\x4B\x4E\x4F\x57\x4E","\x4E\x4F\x54\x5F\x49\x4E\x55\x53\x45","\x31","\x49\x4E\x55\x53\x45","\x32","\x42\x55\x53\x59","\x33","\x49\x4E\x56\x41\x4C\x49\x44","\x34","\x55\x4E\x41\x56\x41\x49\x4C\x41\x42\x4C\x45","\x35","\x52\x49\x4E\x47\x49\x4E\x47","\x36","\x52\x49\x4E\x47\x49\x4E\x55\x53\x45","\x37","\x4F\x4E\x48\x4F\x4C\x44","\x38","\x73\x74\x61\x74\x75\x73\x64\x65\x73\x63","\x73\x74\x61\x74\x75\x73\x41\x74","\x4E\x4F\x57","\x70\x61\x75\x73\x65\x64","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x76\x6F\x69\x63\x65\x5F\x71\x75\x65\x75\x65\x73","\x6D\x65\x6D\x62\x65\x72\x6E\x61\x6D\x65","\x64\x65\x66\x69\x6E\x65"];var crypto=require(_0xe286[0]);module[_0xe286[1]]=function(_0x80eex2,_0x80eex3){var _0x80eex4=_0x80eex2[_0xe286[37]](_0xe286[2],{logged:{type:_0x80eex3[_0xe286[3]],defaultValue:false},loggedAt:{type:_0x80eex3[_0xe286[4]]},ringinuse:{type:_0x80eex3[_0xe286[3]]},penalty:{type:_0x80eex3[_0xe286[5]],defaultValue:0},stateinterface:{type:_0x80eex3[_0xe286[6]]},queue:{type:_0x80eex3[_0xe286[6]]},membername:{type:_0x80eex3[_0xe286[6]]},interface:{type:_0x80eex3[_0xe286[6]]},membership:{type:_0x80eex3[_0xe286[6]]},callstaken:{type:_0x80eex3[_0xe286[5]]},lastcall:{type:_0x80eex3[_0xe286[4]],set:function(_0x80eex5){if(_0x80eex5===_0xe286[7]){this[_0xe286[9]](_0xe286[8],null)}else {this[_0xe286[9]](_0xe286[8],_0x80eex2[_0xe286[12]](_0xe286[10],_0x80eex5,_0xe286[11]))}}},status:{type:_0x80eex3[_0xe286[5]],set:function(_0x80eex6){this[_0xe286[9]](_0xe286[13],_0x80eex6);var _0x80eex7=_0xe286[14];switch(_0x80eex6){case _0xe286[7]:_0x80eex7=_0xe286[14];break;case _0xe286[16]:_0x80eex7=_0xe286[15];break;case _0xe286[18]:_0x80eex7=_0xe286[17];break;case _0xe286[20]:_0x80eex7=_0xe286[19];break;case _0xe286[22]:_0x80eex7=_0xe286[21];break;case _0xe286[24]:_0x80eex7=_0xe286[23];break;case _0xe286[26]:_0x80eex7=_0xe286[25];break;case _0xe286[28]:_0x80eex7=_0xe286[27];break;case _0xe286[30]:_0x80eex7=_0xe286[29];break};this[_0xe286[9]](_0xe286[31],_0x80eex7);this[_0xe286[9]](_0xe286[32],_0x80eex2[_0xe286[12]](_0xe286[33]))}},statusdesc:{type:_0x80eex3[_0xe286[6]]},statusAt:{type:_0x80eex3[_0xe286[4]]},paused:{type:_0x80eex3[_0xe286[3]],defaultValue:false,set:function(_0x80eex8){this[_0xe286[9]](_0xe286[34],parseInt(_0x80eex8,10)?true:false)}},pausedAt:{type:_0x80eex3[_0xe286[4]]},reason:{type:_0x80eex3[_0xe286[6]]}},{tableName:_0xe286[35],indexes:[{name:_0xe286[36],fields:[_0xe286[36]]}]});return _0x80eex4}
\ No newline at end of file
+/**
+ * Chat Website Model
+ */
+
+var crypto = require('crypto');
+
+module.exports = function(sequelize, DataTypes) {
+       var UserHasVoiceQueue = sequelize.define('UserHasVoiceQueue', {
+               logged: {
+                       type: DataTypes.BOOLEAN,
+                       defaultValue: false
+               },
+               loggedAt: {
+                       type: DataTypes.DATE
+               },
+               ringinuse: {
+                       type: DataTypes.BOOLEAN
+               },
+               penalty: {
+                       type: DataTypes.INTEGER,
+                       defaultValue: 0
+               },
+               stateinterface: {
+                       type: DataTypes.STRING
+               },
+               queue: {
+                       type: DataTypes.STRING
+               },
+               membername: {
+                       type: DataTypes.STRING
+               },
+               interface: {
+                       type: DataTypes.STRING
+               },
+               membership: {
+                       type: DataTypes.STRING
+               },
+               callstaken: {
+                       type: DataTypes.INTEGER
+               },
+               lastcall: {
+                       type: DataTypes.DATE,
+                       set: function(lastcall) {
+                               if (lastcall === '0') {
+                                       this.setDataValue('lastcall', null);
+                               } else {
+                                       this.setDataValue('lastcall', sequelize.fn('FROM_UNIXTIME', lastcall, '%Y-%m-%d %H:%i:%s'));
+                               }
+                       }
+               },
+               status: {
+                       type: DataTypes.INTEGER,
+                       set: function(status) {
+                               this.setDataValue('status', status);
+                               var detail = 'UNKNOWN';
+                               switch (status) {
+                                       case '0':
+                                               detail = 'UNKNOWN';
+                                               break;
+                                       case '1':
+                                               detail = 'NOT_INUSE';
+                                               break;
+                                       case '2':
+                                               detail = 'INUSE';
+                                               break;
+                                       case '3':
+                                               detail = 'BUSY';
+                                               break;
+                                       case '4':
+                                               detail = 'INVALID';
+                                               break;
+                                       case '5':
+                                               detail = 'UNAVAILABLE';
+                                               break;
+                                       case '6':
+                                               detail = 'RINGING';
+                                               break;
+                                       case '7':
+                                               detail = 'RINGINUSE';
+                                               break;
+                                       case '8':
+                                               detail = 'ONHOLD';
+                                               break;
+                               }
+                               this.setDataValue('statusdesc', detail);
+                               this.setDataValue('statusAt', sequelize.fn('NOW'))
+                       },
+               },
+               statusdesc: {
+                       type: DataTypes.STRING
+               },
+               statusAt: {
+                       type: DataTypes.DATE
+               },
+               paused: {
+                       type: DataTypes.BOOLEAN,
+                       defaultValue: false,
+                       set: function(paused) {
+                               this.setDataValue('paused', parseInt(paused, 10) ? true : false);
+                       }
+               },
+               pausedAt: {
+                       type: DataTypes.DATE
+               },
+               reason: {
+                       type: DataTypes.STRING
+               }
+       }, {
+               tableName: 'user_has_voice_queues',
+               indexes: [{
+                       name: 'membername',
+                       fields: ['membername']
+               }]
+       });
+
+       return UserHasVoiceQueue;
+};
index cab796d..68778bc 100644 (file)
@@ -1 +1,33 @@
-var _0x98bd=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x56\x61\x72\x69\x61\x62\x6C\x65","\x53\x54\x52\x49\x4E\x47","\x76\x61\x72\x69\x61\x62\x6C\x65\x73","\x68\x61\x73\x4D\x61\x6E\x79","\x66\x69\x65\x6C\x64\x73","\x61\x64\x64\x53\x63\x6F\x70\x65","\x64\x65\x66\x69\x6E\x65"];_0x98bd[0];module[_0x98bd[1]]=function(_0x9c36x1,_0x9c36x2){var _0x9c36x3=_0x9c36x1[_0x98bd[8]](_0x98bd[2],{name:{type:_0x9c36x2[_0x98bd[3]],unique:true,allowNull:false,validate:{notEmpty:true}},description:_0x9c36x2[_0x98bd[3]]},{tableName:_0x98bd[4],associate:function(_0x9c36x4){_0x9c36x3[_0x98bd[5]](_0x9c36x4.ZendeskField);_0x9c36x3[_0x98bd[5]](_0x9c36x4.DeskField);_0x9c36x3[_0x98bd[5]](_0x9c36x4.SalesforceField);_0x9c36x3[_0x98bd[5]](_0x9c36x4.FreshdeskField);_0x9c36x3[_0x98bd[5]](_0x9c36x4.SugarcrmField);_0x9c36x3[_0x98bd[7]](_0x98bd[6],{include:[{all:true}]})}});return _0x9c36x3}
\ No newline at end of file
+'use strict';
+
+module.exports = function(sequelize, DataTypes) {
+
+  var Variable = sequelize.define('Variable', {
+    name: {
+      type: DataTypes.STRING,
+      unique: true,
+      allowNull: false,
+      validate: {
+        notEmpty: true,
+      },
+    },
+    description: DataTypes.STRING
+  }, {
+    tableName: 'variables',
+    associate: function(models) {
+      Variable.hasMany(models.ZendeskField);
+      Variable.hasMany(models.DeskField);
+      Variable.hasMany(models.SalesforceField);
+      Variable.hasMany(models.FreshdeskField);
+      Variable.hasMany(models.SugarcrmField);
+      Variable.addScope('fields', {
+        include: [{
+          all: true
+        }]
+      });
+    }
+  });
+
+  return Variable;
+
+};
index 617c1f8..e81e9ab 100644 (file)
@@ -1 +1,32 @@
-var _0xcf59=["\x65\x78\x70\x6F\x72\x74\x73","\x56\x6F\x69\x63\x65\x43\x6F\x6E\x74\x65\x78\x74","\x53\x54\x52\x49\x4E\x47","\x42\x4F\x4F\x4C\x45\x41\x4E","\x76\x6F\x69\x63\x65\x5F\x63\x6F\x6E\x74\x65\x78\x74\x73","\x63\x61\x73\x63\x61\x64\x65","\x68\x61\x73\x4F\x6E\x65","\x64\x65\x66\x69\x6E\x65"];module[_0xcf59[0]]=function(_0x98c7x1,_0x98c7x2){var _0x98c7x3=_0x98c7x1[_0xcf59[7]](_0xcf59[1],{name:{type:_0x98c7x2[_0xcf59[2]],unique:true},description:{type:_0x98c7x2[_0xcf59[2]],allowNull:true},defaultEntry:{type:_0x98c7x2[_0xcf59[3]],defaultValue:0}},{tableName:_0xcf59[4],associate:function(_0x98c7x4){_0x98c7x3[_0xcf59[6]](_0x98c7x4.VoiceExtension,{onDelete:_0xcf59[5],hooks:true})}});return _0x98c7x3}
\ No newline at end of file
+/**
+ * Context Model
+ */
+
+module.exports = function(sequelize, DataTypes) {
+
+  var VoiceContext = sequelize.define('VoiceContext', {
+    name: {
+      type: DataTypes.STRING,
+      unique: true
+    },
+    description: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    defaultEntry: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: 0
+    }
+  }, {
+    tableName: 'voice_contexts',
+    associate: function(models) {
+      VoiceContext.hasOne(models.VoiceExtension, {
+        onDelete: 'cascade',
+        hooks: true
+      });
+    }
+
+  });
+
+  return VoiceContext;
+};
index 96e154e..6d42a6e 100644 (file)
@@ -1 +1,112 @@
-var _0xdc49=["\x75\x74\x69\x6C","\x72\x65\x76\x65\x72\x73\x65\x2D\x6D\x75\x73\x74\x61\x63\x68\x65","\x65\x78\x70\x6F\x72\x74\x73","\x56\x6F\x69\x63\x65\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x53\x54\x52\x49\x4E\x47","\x63\x6F\x6D\x70\x6F\x73\x69\x74\x65\x49\x6E\x64\x65\x78","\x31","\x2D\x2D","\x4E\x6F\x4F\x70","\x69\x64","\x67\x65\x74\x44\x61\x74\x61\x56\x61\x6C\x75\x65","\x61\x70\x70","\x44\x69\x61\x6C","\x74\x79\x70\x65","\x6F\x75\x74\x62\x6F\x75\x6E\x64","\x53\x49\x50\x2F\x7B\x7B\x74\x72\x75\x6E\x6B\x7D\x7D\x2F\x7B\x7B\x70\x72\x65\x66\x69\x78\x7D\x7D\x24\x7B\x45\x58\x54\x45\x4E\x3A\x7B\x7B\x63\x75\x74\x64\x69\x67\x69\x74\x73\x7D\x7D\x7D","\x61\x70\x70\x64\x61\x74\x61","\x74\x72\x75\x6E\x6B","\x63\x61\x6C\x6C\x65\x72\x49\x44","","\x63\x75\x74\x64\x69\x67\x69\x74\x73","\x70\x72\x65\x66\x69\x78","\x2C","\x73\x70\x6C\x69\x74","\x69\x6E\x62\x6F\x75\x6E\x64","\x69\x6E\x74\x65\x72\x6E\x61\x6C","\x69\x6E\x62\x6F\x75\x6E\x64\x2D\x66\x61\x78","\x6F\x75\x74\x62\x6F\x75\x6E\x64\x2D\x66\x61\x78","\x73\x79\x73\x74\x65\x6D","\x61\x6E\x79","\x49\x4E\x54\x45\x47\x45\x52","\x42\x4F\x4F\x4C\x45\x41\x4E","\x76\x6F\x69\x63\x65\x5F\x65\x78\x74\x65\x6E\x73\x69\x6F\x6E\x73","\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x63\x61\x73\x63\x61\x64\x65","\x68\x61\x73\x4D\x61\x6E\x79","\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x69\x6E\x74\x65\x72\x76\x61\x6C","\x49\x6E\x74\x65\x72\x76\x61\x6C\x49\x64","\x61\x64\x64\x53\x63\x6F\x70\x65","\x72\x6F\x75\x74\x65\x73","\x64\x65\x66\x69\x6E\x65"];var util=require(_0xdc49[0]);var reverseMustache=require(_0xdc49[1]);module[_0xdc49[2]]=function(_0x343cx3,_0x343cx4){var _0x343cx5=_0x343cx3[_0xdc49[41]](_0xdc49[3],{context:{type:_0x343cx4[_0xdc49[4]],allowNull:false,unique:_0xdc49[5],validate:{notEmpty:true,is:/[A-Za-z0-9\.\_]+$/i}},exten:{type:_0x343cx4[_0xdc49[4]],allowNull:false,unique:_0xdc49[5]},priority:{type:_0x343cx4[_0xdc49[4]],allowNull:false,defaultValue:_0xdc49[6],unique:_0xdc49[5]},tag:{type:_0x343cx4[_0xdc49[4]],allowNull:false,defaultValue:_0xdc49[7]},app:{type:_0x343cx4[_0xdc49[4]],allowNull:false,defaultValue:_0xdc49[8]},appdata:{type:_0x343cx4[_0xdc49[4]],allowNull:true,get:function(){if(!this[_0xdc49[10]](_0xdc49[9])){if(this[_0xdc49[10]](_0xdc49[11])===_0xdc49[12]&&this[_0xdc49[10]](_0xdc49[13])===_0xdc49[14]){var _0x343cx6=reverseMustache({template:_0xdc49[15],content:this[_0xdc49[10]](_0xdc49[16])});return [_0x343cx6[_0xdc49[17]],this[_0xdc49[10]](_0xdc49[18])||_0xdc49[19],_0x343cx6[_0xdc49[20]],_0x343cx6[_0xdc49[21]]]}else {return this[_0xdc49[10]](_0xdc49[16])[_0xdc49[23]](_0xdc49[22])}}else {return this[_0xdc49[10]](_0xdc49[16])}}},type:{type:_0x343cx4.ENUM(_0xdc49[24],_0xdc49[14],_0xdc49[25],_0xdc49[26],_0xdc49[27],_0xdc49[28],_0xdc49[29]),allowNull:false},description:{type:_0x343cx4[_0xdc49[4]]},interval:{type:_0x343cx4[_0xdc49[4]]},IntervalId:{type:_0x343cx4[_0xdc49[30]]},isApp:{type:_0x343cx4[_0xdc49[31]],defaultValue:false},callerID:{type:_0x343cx4[_0xdc49[4]],allowNull:true},record:{type:_0x343cx4[_0xdc49[31]],defaultValue:false}},{tableName:_0xdc49[32],associate:function(_0x343cx7){_0x343cx5[_0xdc49[35]](_0x343cx7.VoiceExtension,{as:_0xdc49[33],onDelete:_0xdc49[34],hooks:true});_0x343cx5[_0xdc49[39]](_0xdc49[36],{include:[{model:_0x343cx7[_0xdc49[3]],as:_0xdc49[33],required:false,where:{isApp:true},attributes:[_0xdc49[11],_0xdc49[37],_0xdc49[38],_0xdc49[18],_0xdc49[16],_0xdc49[13]]}]});_0x343cx5[_0xdc49[39]](_0xdc49[40],{where:{VoiceExtensionId:null}})}});return _0x343cx5}
\ No newline at end of file
+/* jshint indent: 2 */
+var util = require('util');
+var reverseMustache = require('reverse-mustache');
+
+module.exports = function(sequelize, DataTypes) {
+  var VoiceExtension = sequelize.define('VoiceExtension', {
+    context: {
+      type: DataTypes.STRING,
+      allowNull: false,
+      unique: 'compositeIndex',
+      validate: {
+        notEmpty: true,
+        is: /[A-Za-z0-9\.\_]+$/i
+      },
+    },
+    exten: {
+      type: DataTypes.STRING,
+      allowNull: false,
+      unique: 'compositeIndex'
+    },
+    priority: {
+      type: DataTypes.STRING,
+      allowNull: false,
+      defaultValue: '1',
+      unique: 'compositeIndex'
+    },
+    tag: {
+      type: DataTypes.STRING,
+      allowNull: false,
+      defaultValue: '--'
+    },
+    app: {
+      type: DataTypes.STRING,
+      allowNull: false,
+      defaultValue: 'NoOp'
+    },
+    appdata: {
+      type: DataTypes.STRING,
+      allowNull: true,
+      get: function() {
+        // 'this' allows you to access attributes of the instance
+        if (!this.getDataValue('id')) {
+          if (this.getDataValue('app') === 'Dial' && this.getDataValue('type') === 'outbound') {
+            var appdata = reverseMustache({
+              template: 'SIP/{{trunk}}/{{prefix}}${EXTEN:{{cutdigits}}}',
+              content: this.getDataValue('appdata')
+            });
+            return [appdata.trunk, this.getDataValue('callerID') || '', appdata.cutdigits, appdata.prefix];
+          } else {
+            return this.getDataValue('appdata').split(',');
+          }
+        } else {
+          return this.getDataValue('appdata');
+        }
+      },
+    },
+    type: {
+      type: DataTypes.ENUM('inbound', 'outbound', 'internal', 'inbound-fax', 'outbound-fax', 'system', 'any'),
+      allowNull: false,
+    },
+    description: {
+      type: DataTypes.STRING,
+    },
+    interval: {
+      type: DataTypes.STRING,
+    },
+    IntervalId: {
+      type: DataTypes.INTEGER,
+    },
+    isApp: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: false
+    },
+    callerID: {
+      type: DataTypes.STRING,
+      allowNull: true
+    },
+    record: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: false
+    }
+  }, {
+    tableName: 'voice_extensions',
+    associate: function(models) {
+      VoiceExtension.hasMany(models.VoiceExtension, {
+        as: 'Applications',
+        onDelete: 'cascade',
+        hooks: true
+      });
+      // SCOPES MANAGEMENT
+      VoiceExtension.addScope('application', {
+        include: [{
+          model: models.VoiceExtension,
+          as: 'Applications',
+          required: false,
+          where: {
+            isApp: true
+          },
+          attributes: ['app', 'interval', 'IntervalId', 'callerID', 'appdata', 'type']
+        }]
+      });
+
+      VoiceExtension.addScope('routes', {
+        where: {
+          VoiceExtensionId: null
+        }
+      });
+    }
+  });
+
+  return VoiceExtension;
+};
index 35999cb..c405ca3 100644 (file)
@@ -1 +1,71 @@
-var _0x3406=["\x65\x78\x70\x6F\x72\x74\x73","\x56\x6F\x69\x63\x65\x4D\x75\x73\x69\x63\x4F\x6E\x48\x6F\x6C\x64","\x53\x54\x52\x49\x4E\x47","\x63\x75\x73\x74\x6F\x6D","\x66\x69\x6C\x65\x73","\x6D\x70\x33\x6E\x62","\x71\x75\x69\x65\x74\x6D\x70\x33\x6E\x62","\x71\x75\x69\x65\x74\x6D\x70\x33","\x6D\x70\x33","\x61\x6C\x70\x68\x61","\x77\x61\x76","\x54\x49\x4D\x45\x53\x54\x41\x4D\x50","\x42\x4F\x4F\x4C\x45\x41\x4E","\x76\x6F\x69\x63\x65\x5F\x6D\x75\x73\x69\x63\x6F\x6E\x68\x6F\x6C\x64","\x64\x65\x66\x69\x6E\x65","\x6E\x61\x6D\x65","\x63\x68\x61\x6E\x67\x65\x64","\x59\x6F\x75\x20\x63\x61\x6E\x27\x74\x20\x6D\x6F\x64\x69\x66\x79\x20\x61\x20\x6D\x6F\x68\x20\x63\x6C\x61\x73\x73\x20\x6E\x61\x6D\x65","\x64\x65\x66\x61\x75\x6C\x74\x45\x6E\x74\x72\x79","\x59\x6F\x75\x20\x63\x61\x6E\x27\x74\x20\x6D\x6F\x64\x69\x66\x79\x20\x61\x20\x64\x65\x66\x61\x75\x6C\x74\x20\x6D\x6F\x68\x20\x63\x6C\x61\x73\x73","\x62\x65\x66\x6F\x72\x65\x55\x70\x64\x61\x74\x65","\x59\x6F\x75\x20\x63\x61\x6E\x27\x74\x20\x64\x65\x6C\x65\x74\x65\x20\x61\x20\x64\x65\x66\x61\x75\x6C\x74\x20\x6D\x6F\x68\x20\x63\x6C\x61\x73\x73","\x62\x65\x66\x6F\x72\x65\x44\x65\x6C\x65\x74\x65"];module[_0x3406[0]]=function(_0x9dc7x1,_0x9dc7x2){var _0x9dc7x3=_0x9dc7x1[_0x3406[14]](_0x3406[1],{name:{type:_0x9dc7x2[_0x3406[2]],allowNull:false,unique:true},mode:{type:_0x9dc7x2.ENUM(_0x3406[3],_0x3406[4],_0x3406[5],_0x3406[6],_0x3406[7],_0x3406[8]),allowNull:true,defaultValue:_0x3406[4]},directory:{type:_0x9dc7x2[_0x3406[2]],allowNull:true},application:{type:_0x9dc7x2[_0x3406[2]],allowNull:true},digit:{type:_0x9dc7x2[_0x3406[2]],allowNull:true},sort:{type:_0x9dc7x2[_0x3406[2]],allowNull:true,defaultValue:_0x3406[9]},format:{type:_0x9dc7x2[_0x3406[2]],allowNull:true,defaultValue:_0x3406[10]},stamp:{type:_0x3406[11]},defaultEntry:{type:_0x9dc7x2[_0x3406[12]],defaultValue:0}},{tableName:_0x3406[13]});_0x9dc7x3[_0x3406[20]](function(_0x9dc7x4){if(_0x9dc7x4[_0x3406[16]](_0x3406[15])){throw  new Error({message:_0x3406[17]})};if(_0x9dc7x4[_0x3406[18]]){throw  new Error({message:_0x3406[19]})}});_0x9dc7x3[_0x3406[22]](function(_0x9dc7x4){if(_0x9dc7x4[_0x3406[18]]){throw  new Error({message:_0x3406[21]})}});return _0x9dc7x3}
\ No newline at end of file
+/* jshint indent: 2 */
+
+module.exports = function(sequelize, DataTypes) {
+  var VoiceMusicOnHold = sequelize.define('VoiceMusicOnHold', {
+    name: {
+      type: DataTypes.STRING,
+      allowNull: false,
+      unique: true
+    },
+    mode: {
+      type: DataTypes.ENUM('custom', 'files', 'mp3nb', 'quietmp3nb', 'quietmp3', 'mp3'),
+      allowNull: true,
+      defaultValue: 'files'
+    },
+    directory: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    application: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    digit: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    sort: {
+      type: DataTypes.STRING,
+      allowNull: true,
+      defaultValue: 'alpha'
+    },
+    format: {
+      type: DataTypes.STRING,
+      allowNull: true,
+      defaultValue: 'wav'
+    },
+    stamp: {
+      type: 'TIMESTAMP'
+    },
+    defaultEntry: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: 0
+    }
+  }, {
+    tableName: 'voice_musiconhold'
+  });
+
+  VoiceMusicOnHold.beforeUpdate(function(moh) {
+    if (moh.changed('name')) {
+      throw new Error({
+        message: "You can't modify a moh class name"
+      });
+    }
+    if (moh.defaultEntry) {
+      throw new Error({
+        message: "You can't modify a default moh class"
+      });
+    }
+  });
+
+
+  VoiceMusicOnHold.beforeDelete(function(moh) {
+    if (moh.defaultEntry) {
+      throw new Error({
+        message: "You can't delete a default moh class"
+      });
+    }
+  });
+
+  return VoiceMusicOnHold;
+};
index 80f405b..71d35c8 100644 (file)
@@ -1 +1,305 @@
-var _0xe189=["\x65\x78\x70\x6F\x72\x74\x73","\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65","\x53\x54\x52\x49\x4E\x47","\x64\x65\x66\x61\x75\x6C\x74","","\x72\x69\x6E\x67\x61\x6C\x6C","\x6C\x65\x61\x73\x74\x72\x65\x63\x65\x6E\x74","\x66\x65\x77\x65\x73\x74\x63\x61\x6C\x6C\x73","\x72\x61\x6E\x64\x6F\x6D","\x72\x72\x6D\x65\x6D\x6F\x72\x79","\x6C\x69\x6E\x65\x61\x72","\x77\x72\x61\x6E\x64\x6F\x6D","\x72\x72\x6F\x72\x64\x65\x72\x65\x64","\x79\x65\x73","\x6E\x6F","\x61\x6C\x6C","\x6F\x6E\x63\x65","\x30","\x35","\x31\x30","\x31\x35","\x32\x30","\x33\x30","\x42\x4F\x4F\x4C\x45\x41\x4E","\x76\x6F\x69\x63\x65\x5F\x71\x75\x65\x75\x65\x73","\x55\x73\x65\x72\x48\x61\x73\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65","\x71\x75\x65\x75\x65","\x62\x65\x6C\x6F\x6E\x67\x73\x54\x6F\x4D\x61\x6E\x79","\x64\x65\x66\x69\x6E\x65","\x6E\x61\x6D\x65","\x63\x68\x61\x6E\x67\x65\x64","\x59\x6F\x75\x20\x63\x61\x6E\x27\x74\x20\x6D\x6F\x64\x69\x66\x79\x20\x61\x20\x71\x75\x65\x75\x65\x20\x6E\x61\x6D\x65","\x62\x65\x66\x6F\x72\x65\x55\x70\x64\x61\x74\x65"];module[_0xe189[0]]=function(_0x8027x1,_0x8027x2){var _0x8027x3=_0x8027x1[_0xe189[28]](_0xe189[1],{name:{type:_0x8027x2[_0xe189[2]],primaryKey:true,unique:true,validate:{notEmpty:true,is:/^[A-Za-z0-9\.\_]+$/i}},musiconhold:{type:_0x8027x2[_0xe189[2]],allowNull:true,defaultValue:_0xe189[3]},announce:{type:_0x8027x2[_0xe189[2]],allowNull:true,defaultValue:_0xe189[4]},strategy:{type:_0x8027x2.ENUM(_0xe189[5],_0xe189[6],_0xe189[7],_0xe189[8],_0xe189[9],_0xe189[10],_0xe189[11],_0xe189[12]),allowNull:false,defaultValue:_0xe189[5]},servicelevel:{type:_0x8027x2.INTEGER(11),allowNull:true,defaultValue:0},context:{type:_0x8027x2[_0xe189[2]],allowNull:true,defaultValue:null},penaltymemberslimit:{type:_0x8027x2.INTEGER(11),allowNull:true},timeout:{type:_0x8027x2.INTEGER(11),allowNull:true,defaultValue:0},retry:{type:_0x8027x2.INTEGER(11),allowNull:true,defaultValue:0},timeoutpriority:{type:_0x8027x2[_0xe189[2]],allowNull:true},weight:{type:_0x8027x2.INTEGER(11),allowNull:true,defaultValue:0},wrapuptime:{type:_0x8027x2.INTEGER(11),allowNull:true,defaultValue:0},autofill:{type:_0x8027x2.ENUM(_0xe189[13],_0xe189[14]),allowNull:true,defaultValue:_0xe189[13]},autopause:{type:_0x8027x2.ENUM(_0xe189[13],_0xe189[14],_0xe189[15]),allowNull:true,defaultValue:_0xe189[14]},autopausedelay:{type:_0x8027x2.INTEGER(11),allowNull:true},autopausebusy:{type:_0x8027x2.ENUM(_0xe189[13],_0xe189[14]),allowNull:true,defaultValue:_0xe189[14]},autopauseunavail:{type:_0x8027x2.ENUM(_0xe189[13],_0xe189[14]),allowNull:true,defaultValue:_0xe189[14]},maxlen:{type:_0x8027x2.INTEGER(11),allowNull:true,defaultValue:0},setinterfacevar:{type:_0x8027x2.ENUM(_0xe189[13],_0xe189[14]),allowNull:true,defaultValue:_0xe189[14]},setqueueentryvar:{type:_0x8027x2.ENUM(_0xe189[13],_0xe189[14]),allowNull:true,defautValue:_0xe189[14]},setqueuevar:{type:_0x8027x2.ENUM(_0xe189[13],_0xe189[14]),allowNull:true,defaultValue:_0xe189[14]},membermacro:{type:_0x8027x2[_0xe189[2]],allowNull:true},membergosub:{type:_0x8027x2[_0xe189[2]],allowNull:true},announce_frequency:{type:_0x8027x2.INTEGER(11),allowNull:true,defaultValue:0},min_announce_frequency:{type:_0x8027x2.INTEGER(11),allowNull:true,defaultValue:0},periodic_announce_frequency:{type:_0x8027x2.INTEGER(11),allowNull:true,defaultValue:0},random_periodic_announce:{type:_0x8027x2.ENUM(_0xe189[13],_0xe189[14]),allowNull:true,defaultValue:_0xe189[14]},relative_periodic_announce:{type:_0x8027x2.ENUM(_0xe189[13],_0xe189[14]),allowNull:true,defaultValue:_0xe189[13]},announce_holdtime:{type:_0x8027x2.ENUM(_0xe189[13],_0xe189[14],_0xe189[16]),allowNull:true,defaultValue:_0xe189[14]},announce_position:{type:_0x8027x2[_0xe189[2]],allowNull:true,defaultValue:_0xe189[14]},announce_to_first_user:{type:_0x8027x2.ENUM(_0xe189[13],_0xe189[14]),allowNull:true},announce_position_limit:{type:_0x8027x2.INTEGER(11),allowNull:true},announce_round_seconds:{type:_0x8027x2.ENUM(_0xe189[17],_0xe189[18],_0xe189[19],_0xe189[20],_0xe189[21],_0xe189[22]),allowNull:true,defaultValue:_0xe189[17]},monitor_format:{type:_0x8027x2[_0xe189[2]],allowNull:true,defaultValue:_0xe189[4]},monitor_type:{type:_0x8027x2[_0xe189[2]],allowNull:true},queue_youarenext:{type:_0x8027x2[_0xe189[2]],allowNull:true,defaultValue:null},queue_thereare:{type:_0x8027x2[_0xe189[2]],allowNull:true,defaultValue:null},queue_callswaiting:{type:_0x8027x2[_0xe189[2]],allowNull:true,defaultValue:null},queue_holdtime:{type:_0x8027x2[_0xe189[2]],allowNull:true,defaultValue:null},queue_minute:{type:_0x8027x2[_0xe189[2]],allowNull:true,defaultValue:null},queue_minutes:{type:_0x8027x2[_0xe189[2]],allowNull:true,defaultValue:null},queue_seconds:{type:_0x8027x2[_0xe189[2]],allowNull:true,defaultValue:null},queue_thankyou:{type:_0x8027x2[_0xe189[2]],allowNull:true,defaultValue:null},queue_reporthold:{type:_0x8027x2[_0xe189[2]],allowNull:true},queue_quantity1:{type:_0x8027x2[_0xe189[2]],allowNull:true},queue_quantity2:{type:_0x8027x2[_0xe189[2]],allowNull:true},queue_periodic_announce:{type:_0x8027x2[_0xe189[2]],allowNull:true},queue_less_than:{type:_0x8027x2[_0xe189[2]],allowNull:true},periodic_announce:{type:_0x8027x2[_0xe189[2]],allowNull:true,defaultValue:_0xe189[4]},joinempty:{type:_0x8027x2[_0xe189[2]],allowNull:true,defaultValue:_0xe189[13]},leavewhenempty:{type:_0x8027x2[_0xe189[2]],allowNull:true,defaultValue:_0xe189[14]},reportholdtime:{type:_0x8027x2.ENUM(_0xe189[13],_0xe189[14]),allowNull:true,defaultValue:_0xe189[14]},ringinuse:{type:_0x8027x2.ENUM(_0xe189[13],_0xe189[14]),allowNull:true,defaultValue:_0xe189[14]},memberdelay:{type:_0x8027x2.INTEGER(11),allowNull:true,defaultValue:0},timeoutrestart:{type:_0x8027x2.ENUM(_0xe189[13],_0xe189[14]),allowNull:true,defaultValue:_0xe189[14]},defaultrule:{type:_0x8027x2[_0xe189[2]],allowNull:true},description:{type:_0x8027x2[_0xe189[2]],allowNull:true},acw:{type:_0x8027x2[_0xe189[23]],defaultValue:0},acwTimeout:{type:_0x8027x2.INTEGER(11),defaultValue:10}},{tableName:_0xe189[24],associate:function(_0x8027x4){_0x8027x3[_0xe189[27]](_0x8027x4.User,{through:_0x8027x4[_0xe189[25]],foreignKey:_0xe189[26],required:false})}});_0x8027x3[_0xe189[32]](function(_0x8027x5){if(_0x8027x5[_0xe189[30]](_0xe189[29])){throw  new Error(_0xe189[31])}});return _0x8027x3}
\ No newline at end of file
+/* jshint indent: 2 */
+
+module.exports = function(sequelize, DataTypes) {
+  var VoiceQueue = sequelize.define('VoiceQueue', {
+    name: {
+      type: DataTypes.STRING,
+      primaryKey: true,
+      unique: true,
+      validate: {
+        notEmpty: true,
+        is: /^[A-Za-z0-9\.\_]+$/i
+      },
+    },
+    musiconhold: {
+      type: DataTypes.STRING,
+      allowNull: true,
+      defaultValue: 'default'
+    },
+    announce: {
+      type: DataTypes.STRING,
+      allowNull: true,
+      defaultValue: ''
+    },
+    strategy: {
+      type: DataTypes.ENUM('ringall', 'leastrecent', 'fewestcalls', 'random', 'rrmemory', 'linear', 'wrandom', 'rrordered'),
+      allowNull: false,
+      defaultValue: 'ringall'
+    },
+    servicelevel: {
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+      defaultValue: 0
+    },
+    context: {
+      type: DataTypes.STRING,
+      allowNull: true,
+      defaultValue: null
+    },
+    penaltymemberslimit: {
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+    },
+    timeout: {
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+      defaultValue: 0
+    },
+    retry: {
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+      defaultValue: 0
+    },
+    timeoutpriority: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    weight: {
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+      defaultValue: 0
+    },
+    wrapuptime: {
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+      defaultValue: 0
+    },
+    autofill: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+      defaultValue: 'yes'
+    },
+    autopause: {
+      type: DataTypes.ENUM('yes', 'no', 'all'),
+      allowNull: true,
+      defaultValue: 'no'
+    },
+    autopausedelay: {
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+    },
+    autopausebusy: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+      defaultValue: 'no'
+    },
+    autopauseunavail: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+      defaultValue: 'no'
+    },
+    maxlen: {
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+      defaultValue: 0
+    },
+    setinterfacevar: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+      defaultValue: 'no'
+    },
+    setqueueentryvar: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+      defautValue: 'no'
+    },
+    setqueuevar: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+      defaultValue: 'no'
+    },
+    membermacro: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    membergosub: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    announce_frequency: {
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+      defaultValue: 0
+    },
+    min_announce_frequency: {
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+      defaultValue: 0
+    },
+    periodic_announce_frequency: {
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+      defaultValue: 0
+    },
+    random_periodic_announce: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+      defaultValue: 'no'
+    },
+    relative_periodic_announce: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+      defaultValue: 'yes'
+    },
+    announce_holdtime: {
+      type: DataTypes.ENUM('yes', 'no', 'once'),
+      allowNull: true,
+      defaultValue: 'no'
+    },
+    announce_position: {
+      type: DataTypes.STRING,
+      allowNull: true,
+      defaultValue: 'no'
+    },
+    announce_to_first_user: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+    },
+    announce_position_limit: {
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+    },
+    announce_round_seconds: {
+      type: DataTypes.ENUM('0', '5', '10', '15', '20', '30'),
+      allowNull: true,
+      defaultValue: '0'
+    },
+    monitor_format: {
+      type: DataTypes.STRING,
+      allowNull: true,
+      defaultValue: ''
+    },
+    monitor_type: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    queue_youarenext: {
+      type: DataTypes.STRING,
+      allowNull: true,
+      defaultValue: null
+    },
+    queue_thereare: {
+      type: DataTypes.STRING,
+      allowNull: true,
+      defaultValue: null
+    },
+    queue_callswaiting: {
+      type: DataTypes.STRING,
+      allowNull: true,
+      defaultValue: null
+    },
+    queue_holdtime: {
+      type: DataTypes.STRING,
+      allowNull: true,
+      defaultValue: null
+    },
+    queue_minute: {
+      type: DataTypes.STRING,
+      allowNull: true,
+      defaultValue: null
+    },
+    queue_minutes: {
+      type: DataTypes.STRING,
+      allowNull: true,
+      defaultValue: null
+    },
+    queue_seconds: {
+      type: DataTypes.STRING,
+      allowNull: true,
+      defaultValue: null
+    },
+    queue_thankyou: {
+      type: DataTypes.STRING,
+      allowNull: true,
+      defaultValue: null
+    },
+    queue_reporthold: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    queue_quantity1: {
+      type: DataTypes.STRING,
+      allowNull: true
+    },
+    queue_quantity2: {
+      type: DataTypes.STRING,
+      allowNull: true
+    },
+    queue_periodic_announce: {
+      type: DataTypes.STRING,
+      allowNull: true
+    },
+    queue_less_than: {
+      type: DataTypes.STRING,
+      allowNull: true
+    },
+    periodic_announce: {
+      type: DataTypes.STRING,
+      allowNull: true,
+      defaultValue: ''
+    },
+    joinempty: {
+      type: DataTypes.STRING,
+      allowNull: true,
+      defaultValue: 'yes'
+    },
+    leavewhenempty: {
+      type: DataTypes.STRING,
+      allowNull: true,
+      defaultValue: 'no'
+    },
+    reportholdtime: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+      defaultValue: 'no'
+    },
+    ringinuse: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+      defaultValue: 'no'
+    },
+    memberdelay: {
+      type: DataTypes.INTEGER(11),
+      allowNull: true,
+      defaultValue: 0
+    },
+    timeoutrestart: {
+      type: DataTypes.ENUM('yes', 'no'),
+      allowNull: true,
+      defaultValue: 'no'
+    },
+    defaultrule: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    description: {
+      type: DataTypes.STRING,
+      allowNull: true,
+    },
+    acw: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: 0
+    },
+    acwTimeout: {
+      type: DataTypes.INTEGER(11),
+      defaultValue: 10
+    }
+  }, {
+    tableName: 'voice_queues',
+    associate: function(models) {
+      VoiceQueue.belongsToMany(models.User, {
+        through: models.UserHasVoiceQueue,
+        foreignKey: 'queue',
+        required: false
+      });
+    }
+  });
+
+  VoiceQueue.beforeUpdate(function(updatedQueue) {
+    if (updatedQueue.changed('name')) {
+      throw new Error("You can't modify a queue name");
+    }
+  });
+
+  return VoiceQueue;
+};
index 8df02f2..736aa24 100644 (file)
@@ -1 +1,75 @@
-var _0x3afb=["\x6D\x6F\x6D\x65\x6E\x74","\x65\x78\x70\x6F\x72\x74\x73","\x56\x6F\x69\x63\x65\x52\x65\x63\x6F\x72\x64\x69\x6E\x67","\x53\x54\x52\x49\x4E\x47","\x49\x4E\x54\x45\x47\x45\x52","\x44\x41\x54\x45","\x4D\x4D\x2D\x44\x44\x2D\x59\x59\x59\x59\x20\x48\x48\x3A\x6D\x6D","\x66\x6F\x72\x6D\x61\x74","\x61\x67\x65\x6E\x74\x63\x6F\x6E\x6E\x65\x63\x74\x41\x74","\x67\x65\x74\x44\x61\x74\x61\x56\x61\x6C\x75\x65","\x76\x6F\x69\x63\x65\x5F\x72\x65\x63\x6F\x72\x64\x69\x6E\x67\x73","\x64\x65\x66\x69\x6E\x65"];var moment=require(_0x3afb[0]);module[_0x3afb[1]]=function(_0xf64fx2,_0xf64fx3){var _0xf64fx4=_0xf64fx2[_0x3afb[11]](_0x3afb[2],{uniqueid:{type:_0xf64fx3[_0x3afb[3]],primaryKey:true},channel:{type:_0xf64fx3[_0x3afb[3]]},calleridnum:{type:_0xf64fx3[_0x3afb[3]]},calleridname:{type:_0xf64fx3[_0x3afb[3]]},connectedlinenum:{type:_0xf64fx3[_0x3afb[3]]},connectedlinename:{type:_0xf64fx3[_0x3afb[3]]},language:{type:_0xf64fx3[_0x3afb[3]]},accountcode:{type:_0xf64fx3[_0x3afb[3]]},context:{type:_0xf64fx3[_0x3afb[3]]},exten:{type:_0xf64fx3[_0x3afb[3]]},value:{type:_0xf64fx3[_0x3afb[3]]},type:{type:_0xf64fx3[_0x3afb[3]]},rating:{type:_0xf64fx3[_0x3afb[4]],defaultValue:0,validate:{max:5,min:0}},createdAt:{type:_0xf64fx3[_0x3afb[5]],get:function(){return moment(this[_0x3afb[9]](_0x3afb[8]))[_0x3afb[7]](_0x3afb[6])}},updatedAt:{type:_0xf64fx3[_0x3afb[5]],get:function(){return moment(this[_0x3afb[9]](_0x3afb[8]))[_0x3afb[7]](_0x3afb[6])}}},{tableName:_0x3afb[10],associate:function(_0xf64fx5){}});return _0xf64fx4}
\ No newline at end of file
+/* jshint indent: 2 */
+var moment = require('moment');
+
+module.exports = function(sequelize, DataTypes) {
+  var VoiceRecording = sequelize.define('VoiceRecording', {
+    uniqueid: {
+      type: DataTypes.STRING,
+      primaryKey: true
+    },
+    channel: {
+      type: DataTypes.STRING
+    },
+    calleridnum: {
+      type: DataTypes.STRING
+    },
+    calleridname: {
+      type: DataTypes.STRING
+    },
+    connectedlinenum: {
+      type: DataTypes.STRING
+    },
+    connectedlinename: {
+      type: DataTypes.STRING
+    },
+    language: {
+      type: DataTypes.STRING
+    },
+    accountcode: {
+      type: DataTypes.STRING
+    },
+    context: {
+      type: DataTypes.STRING
+    },
+    exten: {
+      type: DataTypes.STRING
+    },
+    value: {
+      type: DataTypes.STRING
+    },
+    type: {
+      type: DataTypes.STRING
+    },
+    rating: {
+      type: DataTypes.INTEGER,
+      defaultValue: 0,
+      validate: {
+        max: 5,
+        min: 0
+      }
+    },
+    createdAt: {
+      type: DataTypes.DATE,
+      get: function() {
+        // 'this' allows you to access attributes of the instance
+        return moment(this.getDataValue('agentconnectAt')).format("MM-DD-YYYY HH:mm");
+      }
+    },
+    updatedAt: {
+      type: DataTypes.DATE,
+      get: function() {
+        // 'this' allows you to access attributes of the instance
+        return moment(this.getDataValue('agentconnectAt')).format("MM-DD-YYYY HH:mm");
+      }
+    }
+  }, {
+    tableName: 'voice_recordings',
+    associate: function(models) {
+      // VoiceRecording.belongsTo(models.ReportCall, {
+      //   foreignKey: 'uniqueid'
+      // });
+    }
+  });
+
+  return VoiceRecording;
+};
index 1de62e3..f814f4b 100644 (file)
@@ -1 +1,144 @@
-var _0x8546=["\x65\x78\x70\x6F\x72\x74\x73","\x56\x6F\x69\x63\x65\x56\x6F\x69\x63\x65\x6D\x61\x69\x6C","\x53\x54\x52\x49\x4E\x47","\x66\x72\x6F\x6D\x2D\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C","\x63\x6F\x6E\x74\x65\x73\x74\x5F\x6D\x61\x69\x6C\x62\x6F\x78","","\x63\x65\x6E\x74\x72\x61\x6C","\x79\x65\x73","\x6E\x6F","\x54\x49\x4E\x59\x49\x4E\x54\x28\x34\x29","\x54\x49\x4D\x45\x53\x54\x41\x4D\x50","\x76\x6F\x69\x63\x65\x5F\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C","\x6D\x61\x69\x6C\x62\x6F\x78\x5F\x63\x6F\x6E\x74\x65\x78\x74","\x6D\x61\x69\x6C\x62\x6F\x78","\x63\x6F\x6E\x74\x65\x78\x74","\x64\x65\x66\x69\x6E\x65"];module[_0x8546[0]]=function(_0x99abx1,_0x99abx2){var _0x99abx3=_0x99abx1[_0x8546[15]](_0x8546[1],{uniqueid:{type:_0x99abx2.INTEGER(4),primaryKey:true,allowNull:false,autoIncrement:true},customer_id:{type:_0x99abx2[_0x8546[2]]},context:{type:_0x99abx2[_0x8546[2]],defaultValue:_0x8546[3],unique:_0x8546[4]},mailbox:{type:_0x99abx2[_0x8546[2]],defaultValue:_0x8546[5],allowNull:false,unique:_0x8546[4]},password:{type:_0x99abx2[_0x8546[2]]},fullname:{type:_0x99abx2[_0x8546[2]]},email:{type:_0x99abx2[_0x8546[2]]},pager:{type:_0x99abx2[_0x8546[2]]},tz:{type:_0x99abx2[_0x8546[2]],defaultValue:_0x8546[6]},attach:{type:_0x99abx2.ENUM(_0x8546[7],_0x8546[8]),defaultValue:_0x8546[7],allowNull:false},saycid:{type:_0x99abx2.ENUM(_0x8546[7],_0x8546[8]),defaultValue:_0x8546[7],allowNull:false},dialout:{type:_0x99abx2[_0x8546[2]]},callback:{type:_0x99abx2[_0x8546[2]]},review:{type:_0x99abx2.ENUM(_0x8546[7],_0x8546[8]),defaultValue:_0x8546[8],allowNull:false},operator:{type:_0x99abx2.ENUM(_0x8546[7],_0x8546[8]),defaultValue:_0x8546[8],allowNull:false},envelope:{type:_0x99abx2.ENUM(_0x8546[7],_0x8546[8]),defaultValue:_0x8546[8],allowNull:false},sayduration:{type:_0x99abx2.ENUM(_0x8546[7],_0x8546[8]),defaultValue:_0x8546[8],allowNull:false},saydurationm:{type:_0x8546[9],defaultValue:1,allowNull:false},sendvoicemail:{type:_0x99abx2.ENUM(_0x8546[7],_0x8546[8]),defaultValue:_0x8546[8],allowNull:false},"\x64\x65\x6C\x65\x74\x65":{type:_0x99abx2.ENUM(_0x8546[7],_0x8546[8]),defaultValue:_0x8546[8],allowNull:false},nextaftercmd:{type:_0x99abx2.ENUM(_0x8546[7],_0x8546[8]),defaultValue:_0x8546[7],allowNull:false},forcename:{type:_0x99abx2.ENUM(_0x8546[7],_0x8546[8]),defaultValue:_0x8546[8],allowNull:false},forcegreetings:{type:_0x99abx2.ENUM(_0x8546[7],_0x8546[8]),defaultValue:_0x8546[8],allowNull:false},hidefromdir:{type:_0x99abx2.ENUM(_0x8546[7],_0x8546[8]),defaultValue:_0x8546[7],allowNull:false},stamp:{type:_0x8546[10]},emailsubject:{type:_0x99abx2[_0x8546[2]]},emailbody:{type:_0x99abx2[_0x8546[2]]},name:{type:_0x99abx2[_0x8546[2]]},maxsecs:{type:_0x99abx2.INTEGER(255),defaultValue:180,allowNull:false},maxmsg:{type:_0x99abx2.INTEGER(255),defaultValue:100,allowNull:false}},{tableName:_0x8546[11],indexes:[{name:_0x8546[12],fields:[_0x8546[13],_0x8546[14]]}]});return _0x99abx3}
\ No newline at end of file
+/* jshint indent: 2 */
+
+module.exports = function(sequelize, DataTypes) {
+  var VoiceVoicemail = sequelize.define('VoiceVoicemail', {
+    uniqueid: {
+      type: DataTypes.INTEGER(4),
+      primaryKey: true,
+      allowNull: false,
+      autoIncrement: true
+    },
+    customer_id: {
+      type: DataTypes.STRING,
+    },
+    context: {
+      type: DataTypes.STRING,
+      defaultValue: 'from-voicemail',
+      unique: 'contest_mailbox'
+    },
+    mailbox: {
+      type: DataTypes.STRING,
+      defaultValue: '',
+      allowNull: false,
+      unique: 'contest_mailbox'
+    },
+    password: {
+      type: DataTypes.STRING,
+    },
+    fullname: {
+      type: DataTypes.STRING,
+    },
+    email: {
+      type: DataTypes.STRING,
+    },
+    pager: {
+      type: DataTypes.STRING,
+    },
+    tz: {
+      type: DataTypes.STRING,
+      defaultValue: 'central'
+    },
+    attach: {
+      type: DataTypes.ENUM('yes', 'no'),
+      defaultValue: 'yes',
+      allowNull: false
+    },
+    saycid: {
+      type: DataTypes.ENUM('yes', 'no'),
+      defaultValue: 'yes',
+      allowNull: false
+    },
+    dialout: {
+      type: DataTypes.STRING,
+    },
+    callback: {
+      type: DataTypes.STRING,
+    },
+    review: {
+      type: DataTypes.ENUM('yes', 'no'),
+      defaultValue: 'no',
+      allowNull: false
+    },
+    operator: {
+      type: DataTypes.ENUM('yes', 'no'),
+      defaultValue: 'no',
+      allowNull: false
+    },
+    envelope: {
+      type: DataTypes.ENUM('yes', 'no'),
+      defaultValue: 'no',
+      allowNull: false
+    },
+    sayduration: {
+      type: DataTypes.ENUM('yes', 'no'),
+      defaultValue: 'no',
+      allowNull: false
+    },
+    saydurationm: {
+      type: 'TINYINT(4)',
+      defaultValue: 1,
+      allowNull: false
+    },
+    sendvoicemail: {
+      type: DataTypes.ENUM('yes', 'no'),
+      defaultValue: 'no',
+      allowNull: false
+    },
+    'delete': {
+      type: DataTypes.ENUM('yes', 'no'),
+      defaultValue: 'no',
+      allowNull: false
+    },
+    nextaftercmd: {
+      type: DataTypes.ENUM('yes', 'no'),
+      defaultValue: 'yes',
+      allowNull: false
+    },
+    forcename: {
+      type: DataTypes.ENUM('yes', 'no'),
+      defaultValue: 'no',
+      allowNull: false
+    },
+    forcegreetings: {
+      type: DataTypes.ENUM('yes', 'no'),
+      defaultValue: 'no',
+      allowNull: false
+    },
+    hidefromdir: {
+      type: DataTypes.ENUM('yes', 'no'),
+      defaultValue: 'yes',
+      allowNull: false
+    },
+    stamp: {
+      type: 'TIMESTAMP'
+    },
+    emailsubject: {
+      type: DataTypes.STRING,
+    },
+    emailbody: {
+      type: DataTypes.STRING,
+    },
+    name: {
+      type: DataTypes.STRING,
+    },
+    maxsecs: {
+      type: DataTypes.INTEGER(255),
+      defaultValue: 180,
+      allowNull: false
+    },
+    maxmsg: {
+      type: DataTypes.INTEGER(255),
+      defaultValue: 100,
+      allowNull: false
+    }
+
+  }, {
+    tableName: 'voice_voicemail',
+    indexes: [{
+      name: 'mailbox_context',
+      fields: ['mailbox', 'context']
+    }]
+  });
+
+  return VoiceVoicemail;
+};
index 89e0ae6..fbfc691 100644 (file)
@@ -1 +1,83 @@
-var _0xc80b=["\x65\x78\x70\x6F\x72\x74\x73","\x56\x6F\x69\x63\x65\x56\x6F\x69\x63\x65\x6D\x61\x69\x6C\x4D\x65\x73\x73\x61\x67\x65\x73","\x53\x54\x52\x49\x4E\x47","","\x6C\x6F\x6E\x67","\x54\x49\x4D\x45\x53\x54\x41\x4D\x50","\x76\x6F\x69\x63\x65\x5F\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C\x5F\x6D\x65\x73\x73\x61\x67\x65\x73","\x6D\x61\x69\x6C\x62\x6F\x78","\x63\x6F\x6E\x74\x65\x78\x74","\x6D\x61\x69\x6C\x62\x6F\x78\x63\x6F\x6E\x74\x65\x78\x74","\x77\x68\x65\x72\x65","\x6D\x61\x69\x6C\x62\x6F\x78\x75\x73\x65\x72","\x61\x64\x64\x53\x63\x6F\x70\x65","\x64\x69\x72","\x64\x65\x66\x69\x6E\x65"];module[_0xc80b[0]]=function(_0xacc1x1,_0xacc1x2){var _0xacc1x3=_0xacc1x1[_0xc80b[14]](_0xc80b[1],{msgnum:{type:_0xacc1x2.INTEGER(11),defaultValue:0,allowNull:false},dir:{type:_0xacc1x2[_0xc80b[2]],defaultValue:_0xc80b[3]},context:{type:_0xacc1x2[_0xc80b[2]],defaultValue:_0xc80b[3]},macrocontext:{type:_0xacc1x2[_0xc80b[2]],defaultValue:_0xc80b[3]},callerid:{type:_0xacc1x2[_0xc80b[2]],defaultValue:_0xc80b[3]},origtime:{type:_0xacc1x2[_0xc80b[2]],defaultValue:_0xc80b[3]},duration:{type:_0xacc1x2[_0xc80b[2]],defaultValue:_0xc80b[3]},mailboxuser:{type:_0xacc1x2[_0xc80b[2]],defaultValue:_0xc80b[3]},mailboxcontext:{type:_0xacc1x2[_0xc80b[2]],defaultValue:_0xc80b[3]},recording:{type:_0xacc1x2.BLOB(_0xc80b[4]),defaultValue:null},flag:{type:_0xacc1x2[_0xc80b[2]],defaultValue:_0xc80b[3]},msg_id:{type:_0xacc1x2[_0xc80b[2]],defaultValue:_0xc80b[3]},stamp:{type:_0xc80b[5],allowNull:false}},{tableName:_0xc80b[6],associate:function(_0xacc1x4){_0xacc1x3[_0xc80b[12]](_0xc80b[7],function(_0xacc1x5){var _0xacc1x6={where:{}};if(_0xacc1x5[_0xc80b[8]]&&_0xacc1x5[_0xc80b[7]]){where:{_0xacc1x6[_0xc80b[10]][_0xc80b[9]]=_0xacc1x5[_0xc80b[8]];_0xacc1x6[_0xc80b[10]][_0xc80b[11]]=_0xacc1x5[_0xc80b[7]]}delete _0xacc1x5[_0xc80b[8]];delete _0xacc1x5[_0xc80b[7]]};return _0xacc1x6})},indexes:[{name:_0xc80b[13],fields:[_0xc80b[13]]}]});return _0xacc1x3}
\ No newline at end of file
+/* jshint indent: 2 */
+
+module.exports = function(sequelize, DataTypes) {
+  var VoiceVoicemailMessages = sequelize.define('VoiceVoicemailMessages', {
+    msgnum: {
+      type: DataTypes.INTEGER(11),
+      defaultValue: 0,
+      allowNull: false
+    },
+    dir: {
+      type: DataTypes.STRING,
+      defaultValue: ''
+    },
+    context: {
+      type: DataTypes.STRING,
+      defaultValue: ''
+    },
+    macrocontext: {
+      type: DataTypes.STRING,
+      defaultValue: ''
+    },
+    callerid: {
+      type: DataTypes.STRING,
+      defaultValue: ''
+    },
+    origtime: {
+      type: DataTypes.STRING,
+      defaultValue: ''
+    },
+    duration: {
+      type: DataTypes.STRING,
+      defaultValue: ''
+    },
+    mailboxuser: {
+      type: DataTypes.STRING,
+      defaultValue: ''
+    },
+    mailboxcontext: {
+      type: DataTypes.STRING,
+      defaultValue: ''
+    },
+    recording: {
+      type: DataTypes.BLOB('long'),
+      defaultValue: null
+    },
+    flag: {
+      type: DataTypes.STRING,
+      defaultValue: ''
+    },
+    msg_id: {
+      type: DataTypes.STRING,
+      defaultValue: ''
+    },
+    stamp: {
+      type: 'TIMESTAMP',
+      allowNull: false
+    }
+  }, {
+    tableName: 'voice_voicemail_messages',
+    associate: function(models) {
+      VoiceVoicemailMessages.addScope('mailbox', function(query) {
+        var scope = {
+          where: {}
+        };
+        if (query.context && query.mailbox) {
+          where: {
+            scope.where.mailboxcontext = query.context;
+            scope.where.mailboxuser = query.mailbox;
+          }
+          delete query.context;
+          delete query.mailbox;
+        }
+        return scope;
+      });
+    },
+    indexes: [{
+      name: 'dir',
+      fields: ['dir']
+    }]
+  });
+
+  return VoiceVoicemailMessages;
+};
index 93b5851..899cf38 100644 (file)
@@ -1 +1,42 @@
-var _0x30cd=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x5A\x65\x6E\x64\x65\x73\x6B\x41\x63\x63\x6F\x75\x6E\x74","\x53\x54\x52\x49\x4E\x47","\x70\x61\x73\x73\x77\x6F\x72\x64","\x74\x6F\x6B\x65\x6E","\x7A\x65\x6E\x64\x65\x73\x6B\x5F\x61\x63\x63\x6F\x75\x6E\x74\x73","\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73","\x41\x63\x63\x6F\x75\x6E\x74\x49\x64","\x68\x61\x73\x4D\x61\x6E\x79","\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73","\x5A\x65\x6E\x64\x65\x73\x6B\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x69\x64","\x6E\x61\x6D\x65","\x61\x64\x64\x53\x63\x6F\x70\x65","\x64\x65\x66\x69\x6E\x65"];_0x30cd[0];module[_0x30cd[1]]=function(_0xdd06x1,_0xdd06x2){var _0xdd06x3=_0xdd06x1[_0x30cd[15]](_0x30cd[2],{name:_0xdd06x2[_0x30cd[3]],description:_0xdd06x2[_0x30cd[3]],username:{type:_0xdd06x2[_0x30cd[3]],unique:true},password:_0xdd06x2[_0x30cd[3]],token:_0xdd06x2[_0x30cd[3]],remoteUri:{type:_0xdd06x2[_0x30cd[3]],unique:true},authType:{type:_0xdd06x2.ENUM(_0x30cd[4],_0x30cd[5]),defaultValue:_0x30cd[4]}},{tableName:_0x30cd[6],associate:function(_0xdd06x4){_0xdd06x3[_0x30cd[9]](_0xdd06x4.ZendeskConfiguration,{as:_0x30cd[7],foreignKey:_0x30cd[8]});_0xdd06x3[_0x30cd[14]](_0x30cd[10],{include:[{model:_0xdd06x4[_0x30cd[11]],as:_0x30cd[7],required:false,attributes:[_0x30cd[12],_0x30cd[13]]}]})}});return _0xdd06x3}
\ No newline at end of file
+'use strict';
+
+module.exports = function(sequelize, DataTypes) {
+
+  var ZendeskAccount = sequelize.define('ZendeskAccount', {
+    name: DataTypes.STRING,
+    description: DataTypes.STRING,
+    username: {
+      type: DataTypes.STRING,
+      unique: true
+    },
+    password: DataTypes.STRING,
+    token: DataTypes.STRING,
+    remoteUri: {
+      type: DataTypes.STRING,
+      unique: true
+    },
+    authType: {
+      type: DataTypes.ENUM('password', 'token'),
+      defaultValue: 'password'
+    }
+  }, {
+    tableName: 'zendesk_accounts',
+    associate: function(models) {
+      ZendeskAccount.hasMany(models.ZendeskConfiguration, {
+        as: 'Configurations',
+        foreignKey: 'AccountId'
+      });
+      ZendeskAccount.addScope('configurations', {
+        include: [{
+          model: models.ZendeskConfiguration,
+          as: 'Configurations',
+          required: false,
+          attributes: ['id', 'name']
+        }]
+      });
+    }
+  });
+
+  return ZendeskAccount;
+
+};
index 5d26e27..9363273 100644 (file)
@@ -1 +1,44 @@
-var _0xe9a4=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x5A\x65\x6E\x64\x65\x73\x6B\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x53\x54\x52\x49\x4E\x47","\x7A\x65\x6E\x64\x65\x73\x6B\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73","\x41\x63\x63\x6F\x75\x6E\x74\x49\x64","\x62\x65\x6C\x6F\x6E\x67\x73\x54\x6F","\x61\x63\x63\x6F\x75\x6E\x74","\x61\x64\x64\x53\x63\x6F\x70\x65","\x53\x75\x62\x6A\x65\x63\x74","\x53\x75\x62\x6A\x65\x63\x74\x49\x64","\x68\x61\x73\x4D\x61\x6E\x79","\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x49\x64","\x46\x69\x65\x6C\x64","\x46\x69\x65\x6C\x64\x49\x64","\x7A\x65\x6E\x64\x65\x73\x6B\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x5F\x68\x61\x73\x5F\x74\x61\x67\x73","\x62\x65\x6C\x6F\x6E\x67\x73\x54\x6F\x4D\x61\x6E\x79","\x64\x65\x66\x69\x6E\x65"];_0xe9a4[0];module[_0xe9a4[1]]=function(_0xf2cax1,_0xf2cax2){var _0xf2cax3=_0xf2cax1[_0xe9a4[18]](_0xe9a4[2],{name:_0xf2cax2[_0xe9a4[3]],description:_0xf2cax2[_0xe9a4[3]]},{tableName:_0xe9a4[4],associate:function(_0xf2cax4){_0xf2cax3[_0xe9a4[6]](_0xf2cax4.ZendeskAccount,{foreignKey:_0xe9a4[5]});_0xf2cax3[_0xe9a4[8]](_0xe9a4[7],function(_0xf2cax5){return {where:{AccountId:_0xf2cax5},include:[{all:true}]}});_0xf2cax3[_0xe9a4[11]](_0xf2cax4.ZendeskField,{as:_0xe9a4[9],foreignKey:_0xe9a4[10]});_0xf2cax3[_0xe9a4[11]](_0xf2cax4.ZendeskField,{as:_0xe9a4[12],foreignKey:_0xe9a4[13]});_0xf2cax3[_0xe9a4[11]](_0xf2cax4.ZendeskField,{as:_0xe9a4[14],foreignKey:_0xe9a4[15]});_0xf2cax3[_0xe9a4[17]](_0xf2cax4.Tag,{through:_0xe9a4[16]})}});return _0xf2cax3}
\ No newline at end of file
+'use strict';
+
+module.exports = function(sequelize, DataTypes) {
+
+  var ZendeskConfiguration = sequelize.define('ZendeskConfiguration', {
+    name: DataTypes.STRING,
+    description: DataTypes.STRING
+  }, {
+    tableName: 'zendesk_configurations',
+    associate: function(models) {
+      ZendeskConfiguration.belongsTo(models.ZendeskAccount, {
+        foreignKey: 'AccountId'
+      });
+      ZendeskConfiguration.addScope('account', function(AccountId) {
+        return {
+          where: {
+            AccountId: AccountId
+          },
+          include: [{
+            all: true
+          }]
+        }
+      });
+      ZendeskConfiguration.hasMany(models.ZendeskField, {
+        as: 'Subject',
+        foreignKey: 'SubjectId'
+      });
+      ZendeskConfiguration.hasMany(models.ZendeskField, {
+        as: 'Description',
+        foreignKey: 'DescriptionId'
+      });
+      ZendeskConfiguration.hasMany(models.ZendeskField, {
+        as: 'Field',
+        foreignKey: 'FieldId'
+      });
+      ZendeskConfiguration.belongsToMany(models.Tag, {
+        through: 'zendesk_configuration_has_tags'
+      });
+    }
+  });
+
+  return ZendeskConfiguration;
+
+};
index 2a24ea8..278c7fa 100644 (file)
@@ -1 +1,32 @@
-var _0xce2a=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x5A\x65\x6E\x64\x65\x73\x6B\x46\x69\x65\x6C\x64","\x73\x74\x72\x69\x6E\x67","\x76\x61\x72\x69\x61\x62\x6C\x65","\x63\x75\x73\x74\x6F\x6D\x56\x61\x72\x69\x61\x62\x6C\x65","\x6B\x65\x79\x56\x61\x6C\x75\x65","\x53\x54\x52\x49\x4E\x47","\x49\x4E\x54\x45\x47\x45\x52","\x42\x4F\x4F\x4C\x45\x41\x4E","\x7A\x65\x6E\x64\x65\x73\x6B\x5F\x66\x69\x65\x6C\x64\x73","\x62\x65\x6C\x6F\x6E\x67\x73\x54\x6F","\x64\x65\x66\x69\x6E\x65"];_0xce2a[0];module[_0xce2a[1]]=function(_0x9040x1,_0x9040x2){var _0x9040x3=_0x9040x1[_0xce2a[12]](_0xce2a[2],{type:{type:_0x9040x2.ENUM(_0xce2a[3],_0xce2a[4],_0xce2a[5],_0xce2a[6]),defaultValue:_0xce2a[3]},content:_0x9040x2[_0xce2a[7]],key:_0x9040x2[_0xce2a[7]],keyType:{type:_0x9040x2.ENUM(_0xce2a[3],_0xce2a[4],_0xce2a[5])},keyContent:_0x9040x2[_0xce2a[7]],idField:_0x9040x2[_0xce2a[8]],nameField:_0x9040x2[_0xce2a[7]],customField:{type:_0x9040x2[_0xce2a[9]],defaultValue:true},variableName:_0x9040x2[_0xce2a[7]]},{tableName:_0xce2a[10],associate:function(_0x9040x4){_0x9040x3[_0xce2a[11]](_0x9040x4.Variable)}});return _0x9040x3}
\ No newline at end of file
+'use strict';
+
+module.exports = function(sequelize, DataTypes) {
+
+  var ZendeskField = sequelize.define('ZendeskField', {
+    type: {
+      type: DataTypes.ENUM('string', 'variable', 'customVariable', 'keyValue'),
+      defaultValue: 'string'
+    },
+    content: DataTypes.STRING,
+    key: DataTypes.STRING,
+    keyType: {
+      type: DataTypes.ENUM('string', 'variable', 'customVariable')
+    },
+    keyContent: DataTypes.STRING,
+    idField: DataTypes.INTEGER,
+    nameField: DataTypes.STRING,
+    customField: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: true
+    },
+    variableName: DataTypes.STRING
+  }, {
+    tableName: 'zendesk_fields',
+    associate: function(models) {
+      ZendeskField.belongsTo(models.Variable);
+    }
+  });
+
+  return ZendeskField;
+
+};
index b2b3373..2b92984 100644 (file)
@@ -1 +1,149 @@
-var _0xa68a=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x2E\x2F\x63\x6F\x6D\x70\x6F\x6E\x65\x6E\x74\x73\x2F\x65\x72\x72\x6F\x72\x73","\x70\x61\x74\x68","\x6D\x6F\x6D\x65\x6E\x74","\x65\x78\x70\x6F\x72\x74\x73","\x65\x6E\x76","\x67\x65\x74","\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x2F\x70\x72\x6F\x61\x63\x74\x69\x76\x65\x73","\x2E\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x5F\x70\x72\x6F\x61\x63\x74\x69\x76\x65\x5F\x61\x63\x74\x69\x6F\x6E","\x75\x73\x65","\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x2F\x77\x65\x62\x73\x69\x74\x65\x73\x2F\x66\x69\x65\x6C\x64\x73","\x2E\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x5F\x77\x65\x62\x73\x69\x74\x65\x73\x5F\x66\x69\x65\x6C\x64","\x2F\x61\x70\x69\x2F\x61\x6E\x73\x77\x65\x72\x73","\x2E\x2F\x61\x70\x69\x2F\x63\x61\x6E\x6E\x65\x64\x5F\x61\x6E\x73\x77\x65\x72","\x2F\x61\x70\x69\x2F\x61\x63\x74\x69\x6F\x6E\x73","\x2E\x2F\x61\x70\x69\x2F\x61\x63\x74\x69\x6F\x6E","\x2F\x61\x70\x69\x2F\x70\x61\x75\x73\x65\x73","\x2E\x2F\x61\x70\x69\x2F\x70\x61\x75\x73\x65","\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x2F\x72\x65\x63\x6F\x72\x64\x69\x6E\x67\x73","\x2E\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x5F\x72\x65\x63\x6F\x72\x64\x69\x6E\x67","\x2F\x61\x70\x69\x2F\x6A\x73\x63\x72\x69\x70\x74\x79\x2F\x70\x72\x6F\x6A\x65\x63\x74\x73","\x2E\x2F\x61\x70\x69\x2F\x6A\x73\x63\x72\x69\x70\x74\x79\x5F\x70\x72\x6F\x6A\x65\x63\x74","\x2F\x61\x70\x69\x2F\x74\x65\x6C\x65\x70\x68\x6F\x6E\x65\x73","\x2E\x2F\x61\x70\x69\x2F\x74\x65\x6C\x65\x70\x68\x6F\x6E\x65","\x2F\x61\x70\x69\x2F\x6C\x69\x63\x65\x6E\x73\x65\x73","\x2E\x2F\x61\x70\x69\x2F\x6C\x69\x63\x65\x6E\x73\x65","\x2F\x61\x70\x69\x2F\x73\x75\x67\x61\x72\x63\x72\x6D\x2F\x66\x69\x65\x6C\x64\x73","\x2E\x2F\x61\x70\x69\x2F\x73\x75\x67\x61\x72\x63\x72\x6D\x5F\x66\x69\x65\x6C\x64","\x2F\x61\x70\x69\x2F\x73\x75\x67\x61\x72\x63\x72\x6D\x2F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73","\x2E\x2F\x61\x70\x69\x2F\x73\x75\x67\x61\x72\x63\x72\x6D\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x2F\x61\x70\x69\x2F\x73\x75\x67\x61\x72\x63\x72\x6D\x2F\x61\x63\x63\x6F\x75\x6E\x74\x73","\x2E\x2F\x61\x70\x69\x2F\x73\x75\x67\x61\x72\x63\x72\x6D\x5F\x61\x63\x63\x6F\x75\x6E\x74","\x2F\x61\x70\x69\x2F\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x2F\x66\x69\x65\x6C\x64\x73","\x2E\x2F\x61\x70\x69\x2F\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x5F\x66\x69\x65\x6C\x64","\x2F\x61\x70\x69\x2F\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x2F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73","\x2E\x2F\x61\x70\x69\x2F\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x2F\x61\x70\x69\x2F\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x2F\x61\x63\x63\x6F\x75\x6E\x74\x73","\x2E\x2F\x61\x70\x69\x2F\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x5F\x61\x63\x63\x6F\x75\x6E\x74","\x2F\x61\x70\x69\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x2F\x66\x69\x65\x6C\x64\x73","\x2E\x2F\x61\x70\x69\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5F\x66\x69\x65\x6C\x64","\x2F\x61\x70\x69\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x2F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73","\x2E\x2F\x61\x70\x69\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x2F\x61\x70\x69\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x2F\x61\x63\x63\x6F\x75\x6E\x74\x73","\x2E\x2F\x61\x70\x69\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5F\x61\x63\x63\x6F\x75\x6E\x74","\x2F\x61\x70\x69\x2F\x64\x65\x73\x6B\x2F\x66\x69\x65\x6C\x64\x73","\x2E\x2F\x61\x70\x69\x2F\x64\x65\x73\x6B\x5F\x66\x69\x65\x6C\x64","\x2F\x61\x70\x69\x2F\x64\x65\x73\x6B\x2F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73","\x2E\x2F\x61\x70\x69\x2F\x64\x65\x73\x6B\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x2F\x61\x70\x69\x2F\x64\x65\x73\x6B\x2F\x61\x63\x63\x6F\x75\x6E\x74\x73","\x2E\x2F\x61\x70\x69\x2F\x64\x65\x73\x6B\x5F\x61\x63\x63\x6F\x75\x6E\x74","\x2F\x61\x70\x69\x2F\x61\x6E\x61\x6C\x79\x74\x69\x63\x73\x2F\x72\x65\x70\x6F\x72\x74\x73\x2F\x64\x65\x66\x61\x75\x6C\x74","\x2E\x2F\x61\x70\x69\x2F\x64\x65\x66\x61\x75\x6C\x74\x5F\x72\x65\x70\x6F\x72\x74","\x2F\x61\x70\x69\x2F\x61\x6E\x61\x6C\x79\x74\x69\x63\x73\x2F\x72\x65\x70\x6F\x72\x74\x73\x2F\x63\x75\x73\x74\x6F\x6D","\x2E\x2F\x61\x70\x69\x2F\x63\x75\x73\x74\x6F\x6D\x5F\x72\x65\x70\x6F\x72\x74","\x2F\x61\x70\x69\x2F\x61\x6E\x61\x6C\x79\x74\x69\x63\x73\x2F\x72\x65\x70\x6F\x72\x74\x73\x2F\x74\x72\x65\x65\x73","\x2E\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x5F\x74\x72\x65\x65","\x2F\x61\x70\x69\x2F\x61\x6E\x61\x6C\x79\x74\x69\x63\x73\x2F\x6D\x65\x74\x72\x69\x63\x73","\x2E\x2F\x61\x70\x69\x2F\x6D\x65\x74\x72\x69\x63","\x2F\x61\x70\x69\x2F\x61\x6E\x61\x6C\x79\x74\x69\x63\x73\x2F\x65\x78\x74\x72\x61\x63\x74\x65\x64","\x2E\x2F\x61\x70\x69\x2F\x65\x78\x74\x72\x61\x63\x74\x65\x64\x5F\x72\x65\x70\x6F\x72\x74","\x2F\x61\x70\x69\x2F\x75\x70\x64\x61\x74\x65\x73","\x2E\x2F\x61\x70\x69\x2F\x75\x70\x64\x61\x74\x65","\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x2F\x63\x68\x61\x74\x2F\x73\x65\x73\x73\x69\x6F\x6E\x73","\x2E\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x5F\x63\x68\x61\x74\x5F\x73\x65\x73\x73\x69\x6F\x6E","\x2F\x61\x70\x69\x2F\x7A\x65\x6E\x64\x65\x73\x6B\x2F\x66\x69\x65\x6C\x64\x73","\x2E\x2F\x61\x70\x69\x2F\x7A\x65\x6E\x64\x65\x73\x6B\x5F\x66\x69\x65\x6C\x64","\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x2F\x63\x68\x61\x74\x73","\x2E\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x5F\x63\x68\x61\x74","\x2F\x61\x70\x69\x2F\x7A\x65\x6E\x64\x65\x73\x6B\x2F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73","\x2E\x2F\x61\x70\x69\x2F\x7A\x65\x6E\x64\x65\x73\x6B\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x2F\x61\x70\x69\x2F\x6D\x6F\x74\x69\x6F\x6E\x62\x61\x72","\x2E\x2F\x61\x70\x69\x2F\x6D\x6F\x74\x69\x6F\x6E\x62\x61\x72","\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x2F\x6D\x61\x69\x6C\x2F\x73\x65\x73\x73\x69\x6F\x6E\x73","\x2E\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x5F\x6D\x61\x69\x6C\x5F\x73\x65\x73\x73\x69\x6F\x6E","\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x2F\x6D\x61\x69\x6C\x73","\x2E\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x5F\x6D\x61\x69\x6C","\x2F\x61\x70\x69\x2F\x77\x69\x64\x67\x65\x74\x73","\x2E\x2F\x61\x70\x69\x2F\x77\x69\x64\x67\x65\x74","\x2F\x61\x70\x69\x2F\x7A\x65\x6E\x64\x65\x73\x6B\x2F\x61\x63\x63\x6F\x75\x6E\x74\x73","\x2E\x2F\x61\x70\x69\x2F\x7A\x65\x6E\x64\x65\x73\x6B\x5F\x61\x63\x63\x6F\x75\x6E\x74","\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x2F\x71\x75\x65\x75\x65\x73","\x2E\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x5F\x71\x75\x65\x75\x65","\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x2F\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x73","\x2E\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x5F\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x2F\x61\x67\x65\x6E\x74\x73","\x2E\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x5F\x61\x67\x65\x6E\x74","\x2F\x61\x70\x69\x2F\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x73","\x2E\x2F\x61\x70\x69\x2F\x64\x61\x73\x68\x62\x6F\x61\x72\x64","\x2F\x61\x70\x69\x2F\x73\x65\x74\x74\x69\x6E\x67\x73","\x2E\x2F\x61\x70\x69\x2F\x73\x65\x74\x74\x69\x6E\x67","\x2F\x61\x70\x69\x2F\x74\x72\x69\x67\x67\x65\x72\x73","\x2E\x2F\x61\x70\x69\x2F\x74\x72\x69\x67\x67\x65\x72","\x2F\x61\x70\x69\x2F\x61\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x73","\x2E\x2F\x61\x70\x69\x2F\x61\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E","\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x2F\x74\x65\x6D\x70\x6C\x61\x74\x65\x73","\x2E\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x5F\x74\x65\x6D\x70\x6C\x61\x74\x65","\x2F\x61\x70\x69\x2F\x61\x6D\x69","\x2E\x2F\x61\x70\x69\x2F\x61\x6D\x69","\x2F\x61\x70\x69\x2F\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x73","\x2E\x2F\x61\x70\x69\x2F\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x2F\x6D\x75\x73\x69\x63\x6F\x6E\x68\x6F\x6C\x64\x73","\x2E\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x5F\x6D\x75\x73\x69\x63\x6F\x6E\x68\x6F\x6C\x64","\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x2F\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C\x73\x2F\x6D\x65\x73\x73\x61\x67\x65\x73","\x2E\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x5F\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C\x5F\x6D\x65\x73\x73\x61\x67\x65\x73","\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x2F\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C\x73","\x2E\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x5F\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C","\x2F\x61\x70\x69\x2F\x63\x6F\x6E\x74\x61\x63\x74\x6D\x61\x6E\x61\x67\x65\x72\x2F\x63\x6F\x6D\x70\x61\x6E\x69\x65\x73","\x2E\x2F\x61\x70\x69\x2F\x63\x6F\x6D\x70\x61\x6E\x79","\x2F\x61\x70\x69\x2F\x63\x6F\x6E\x74\x61\x63\x74\x6D\x61\x6E\x61\x67\x65\x72\x2F\x73\x65\x72\x76\x69\x63\x65\x73","\x2E\x2F\x61\x70\x69\x2F\x73\x65\x72\x76\x69\x63\x65","\x2F\x61\x70\x69\x2F\x63\x6F\x6E\x74\x61\x63\x74\x6D\x61\x6E\x61\x67\x65\x72\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x73\x65\x72\x76\x69\x63\x65\x73","\x2E\x2F\x61\x70\x69\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x73\x65\x72\x76\x69\x63\x65","\x2F\x61\x70\x69\x2F\x63\x6F\x6E\x74\x61\x63\x74\x6D\x61\x6E\x61\x67\x65\x72\x2F\x63\x6F\x6E\x74\x61\x63\x74\x73","\x2E\x2F\x61\x70\x69\x2F\x63\x6F\x6E\x74\x61\x63\x74\x5F\x6D\x61\x6E\x61\x67\x65\x72","\x2F\x61\x70\x69\x2F\x69\x6E\x74\x65\x72\x76\x61\x6C\x73","\x2E\x2F\x61\x70\x69\x2F\x69\x6E\x74\x65\x72\x76\x61\x6C","\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x2F\x65\x78\x74\x65\x6E\x73\x69\x6F\x6E\x73","\x2E\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x5F\x65\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x2F\x63\x6F\x6E\x74\x65\x78\x74\x73","\x2E\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x5F\x63\x6F\x6E\x74\x65\x78\x74","\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x71\x75\x65\x75\x65\x73","\x2E\x2F\x61\x70\x69\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x76\x6F\x69\x63\x65\x5F\x71\x75\x65\x75\x65","\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x2F\x71\x75\x65\x75\x65\x73","\x2E\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x5F\x71\x75\x65\x75\x65","\x2F\x61\x70\x69\x2F\x74\x72\x75\x6E\x6B\x73","\x2E\x2F\x61\x70\x69\x2F\x74\x72\x75\x6E\x6B","\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x2F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x2E\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x5F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x71\x75\x65\x75\x65\x73","\x2E\x2F\x61\x70\x69\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x63\x68\x61\x74\x5F\x71\x75\x65\x75\x65","\x2F\x61\x70\x69\x2F\x73\x71\x75\x61\x72\x65\x2F\x6F\x64\x62\x63","\x2E\x2F\x61\x70\x69\x2F\x73\x71\x75\x61\x72\x65\x5F\x6F\x64\x62\x63","\x2F\x61\x70\x69\x2F\x66\x61\x78\x2F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x2E\x2F\x61\x70\x69\x2F\x66\x61\x78\x5F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x2F\x61\x70\x69\x2F\x66\x61\x78\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x71\x75\x65\x75\x65\x73","\x2E\x2F\x61\x70\x69\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x66\x61\x78\x5F\x71\x75\x65\x75\x65","\x2F\x61\x70\x69\x2F\x66\x61\x78\x2F\x71\x75\x65\x75\x65\x73","\x2E\x2F\x61\x70\x69\x2F\x66\x61\x78\x5F\x71\x75\x65\x75\x65","\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x2F\x61\x74\x74\x61\x63\x68\x6D\x65\x6E\x74\x73","\x2E\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x5F\x61\x74\x74\x61\x63\x68\x6D\x65\x6E\x74","\x2F\x61\x70\x69\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x74\x65\x61\x6D\x73","\x2E\x2F\x61\x70\x69\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x74\x65\x61\x6D","\x2F\x61\x70\x69\x2F\x76\x61\x72\x69\x61\x62\x6C\x65\x73","\x2E\x2F\x61\x70\x69\x2F\x76\x61\x72\x69\x61\x62\x6C\x65","\x2F\x61\x70\x69\x2F\x63\x68\x61\x6E\x73\x70\x79","\x2E\x2F\x61\x70\x69\x2F\x63\x68\x61\x6E\x73\x70\x79","\x2F\x61\x70\x69\x2F\x74\x61\x67\x73","\x2E\x2F\x61\x70\x69\x2F\x74\x61\x67","\x2F\x61\x70\x69\x2F\x73\x71\x75\x61\x72\x65\x2F\x70\x72\x6F\x6A\x65\x63\x74\x73","\x2E\x2F\x61\x70\x69\x2F\x73\x71\x75\x61\x72\x65\x5F\x70\x72\x6F\x6A\x65\x63\x74","\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x2F\x71\x75\x65\x75\x65\x73","\x2E\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x5F\x71\x75\x65\x75\x65","\x2F\x61\x70\x69\x2F\x66\x61\x78\x2F\x6D\x65\x73\x73\x61\x67\x65\x73","\x2E\x2F\x61\x70\x69\x2F\x66\x61\x78\x5F\x6D\x65\x73\x73\x61\x67\x65","\x2F\x61\x70\x69\x2F\x66\x61\x78\x2F\x72\x6F\x6F\x6D\x73","\x2E\x2F\x61\x70\x69\x2F\x66\x61\x78\x5F\x72\x6F\x6F\x6D","\x2F\x61\x70\x69\x2F\x66\x61\x78\x2F\x61\x63\x63\x6F\x75\x6E\x74\x73","\x2E\x2F\x61\x70\x69\x2F\x66\x61\x78\x5F\x61\x63\x63\x6F\x75\x6E\x74","\x2F\x61\x70\x69\x2F\x61\x67\x65\x6E\x74\x73","\x2E\x2F\x61\x70\x69\x2F\x61\x67\x65\x6E\x74","\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x2F\x65\x6E\x71\x75\x69\x72\x69\x65\x73","\x2E\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x5F\x65\x6E\x71\x75\x69\x72\x79","\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x2F\x6D\x65\x73\x73\x61\x67\x65\x73","\x2E\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x5F\x6D\x65\x73\x73\x61\x67\x65","\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x2F\x72\x6F\x6F\x6D\x73","\x2E\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x5F\x72\x6F\x6F\x6D","\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x2F\x76\x69\x73\x69\x74\x6F\x72\x73","\x2E\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x5F\x76\x69\x73\x69\x74\x6F\x72","\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x2F\x77\x65\x62\x73\x69\x74\x65\x73","\x2E\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x5F\x77\x65\x62\x73\x69\x74\x65","\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x2F\x61\x63\x63\x6F\x75\x6E\x74\x73","\x2E\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x5F\x61\x63\x63\x6F\x75\x6E\x74","\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x2F\x6D\x65\x73\x73\x61\x67\x65\x73","\x2E\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x5F\x6D\x65\x73\x73\x61\x67\x65","\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x2F\x72\x6F\x6F\x6D\x73","\x2E\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x5F\x72\x6F\x6F\x6D","\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x2F\x73\x65\x72\x76\x65\x72\x73\x2F\x69\x6E","\x2E\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E","\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x2F\x73\x65\x72\x76\x65\x72\x73\x2F\x6F\x75\x74","\x2E\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x5F\x73\x65\x72\x76\x65\x72\x5F\x6F\x75\x74","\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x2F\x71\x75\x65\x75\x65\x73","\x2E\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x5F\x71\x75\x65\x75\x65","\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x71\x75\x65\x75\x65\x73","\x2E\x2F\x61\x70\x69\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x6D\x61\x69\x6C\x5F\x71\x75\x65\x75\x65","\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x2F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x2E\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x5F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x2F\x61\x70\x69\x2F\x74\x65\x61\x6D\x73","\x2E\x2F\x61\x70\x69\x2F\x74\x65\x61\x6D","\x2F\x61\x70\x69\x2F\x73\x6F\x75\x6E\x64\x73","\x2E\x2F\x61\x70\x69\x2F\x73\x6F\x75\x6E\x64","\x2F\x61\x70\x69\x2F\x75\x73\x65\x72\x73","\x2E\x2F\x61\x70\x69\x2F\x75\x73\x65\x72","\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x72\x6F\x6F\x6D\x73","\x2E\x2F\x61\x70\x69\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x63\x68\x61\x74\x5F\x72\x6F\x6F\x6D","\x2F\x61\x70\x69\x2F\x78\x63\x68\x61\x74\x74\x79","\x2E\x2F\x61\x70\x69\x2F\x78\x63\x68\x61\x74\x74\x79","\x2F\x61\x75\x74\x68","\x2E\x2F\x61\x75\x74\x68","\x2F\x3A\x75\x72\x6C\x28\x61\x70\x69\x7C\x61\x75\x74\x68\x7C\x63\x6F\x6D\x70\x6F\x6E\x65\x6E\x74\x73\x7C\x61\x70\x70\x7C\x62\x6F\x77\x65\x72\x5F\x63\x6F\x6D\x70\x6F\x6E\x65\x6E\x74\x73\x7C\x61\x73\x73\x65\x74\x73\x29\x2F\x2A","\x72\x6F\x75\x74\x65","\x2F\x2A","\x70\x72\x6F\x64\x75\x63\x74\x69\x6F\x6E","\x72\x6F\x6F\x74","\x70\x75\x62\x6C\x69\x63","\x6A\x6F\x69\x6E","\x64\x65\x76\x65\x6C\x6F\x70\x6D\x65\x6E\x74","\x74\x65\x73\x74","\x63\x6C\x69\x65\x6E\x74","\x69\x6E\x64\x65\x78\x2E\x68\x74\x6D\x6C","\x73\x65\x6E\x64\x46\x69\x6C\x65","\x61\x6C\x6C"];_0xa68a[0];var config=require(_0xa68a[1]);var errors=require(_0xa68a[2]);var path=require(_0xa68a[3]);var moment=require(_0xa68a[4]);module[_0xa68a[5]]=function(_0x5acbx5){var _0x5acbx6=_0x5acbx5[_0xa68a[7]](_0xa68a[6]);_0x5acbx5[_0xa68a[10]](_0xa68a[8],require(_0xa68a[9]));_0x5acbx5[_0xa68a[10]](_0xa68a[11],require(_0xa68a[12]));_0x5acbx5[_0xa68a[10]](_0xa68a[13],require(_0xa68a[14]));_0x5acbx5[_0xa68a[10]](_0xa68a[15],require(_0xa68a[16]));_0x5acbx5[_0xa68a[10]](_0xa68a[17],require(_0xa68a[18]));_0x5acbx5[_0xa68a[10]](_0xa68a[19],require(_0xa68a[20]));_0x5acbx5[_0xa68a[10]](_0xa68a[21],require(_0xa68a[22]));_0x5acbx5[_0xa68a[10]](_0xa68a[23],require(_0xa68a[24]));_0x5acbx5[_0xa68a[10]](_0xa68a[25],require(_0xa68a[26]));_0x5acbx5[_0xa68a[10]](_0xa68a[27],require(_0xa68a[28]));_0x5acbx5[_0xa68a[10]](_0xa68a[29],require(_0xa68a[30]));_0x5acbx5[_0xa68a[10]](_0xa68a[31],require(_0xa68a[32]));_0x5acbx5[_0xa68a[10]](_0xa68a[33],require(_0xa68a[34]));_0x5acbx5[_0xa68a[10]](_0xa68a[35],require(_0xa68a[36]));_0x5acbx5[_0xa68a[10]](_0xa68a[37],require(_0xa68a[38]));_0x5acbx5[_0xa68a[10]](_0xa68a[39],require(_0xa68a[40]));_0x5acbx5[_0xa68a[10]](_0xa68a[41],require(_0xa68a[42]));_0x5acbx5[_0xa68a[10]](_0xa68a[43],require(_0xa68a[44]));_0x5acbx5[_0xa68a[10]](_0xa68a[45],require(_0xa68a[46]));_0x5acbx5[_0xa68a[10]](_0xa68a[47],require(_0xa68a[48]));_0x5acbx5[_0xa68a[10]](_0xa68a[49],require(_0xa68a[50]));_0x5acbx5[_0xa68a[10]](_0xa68a[51],require(_0xa68a[52]));_0x5acbx5[_0xa68a[10]](_0xa68a[53],require(_0xa68a[54]));_0x5acbx5[_0xa68a[10]](_0xa68a[55],require(_0xa68a[56]));_0x5acbx5[_0xa68a[10]](_0xa68a[57],require(_0xa68a[58]));_0x5acbx5[_0xa68a[10]](_0xa68a[59],require(_0xa68a[60]));_0x5acbx5[_0xa68a[10]](_0xa68a[61],require(_0xa68a[62]));_0x5acbx5[_0xa68a[10]](_0xa68a[63],require(_0xa68a[64]));_0x5acbx5[_0xa68a[10]](_0xa68a[65],require(_0xa68a[66]));_0x5acbx5[_0xa68a[10]](_0xa68a[67],require(_0xa68a[68]));_0x5acbx5[_0xa68a[10]](_0xa68a[69],require(_0xa68a[70]));_0x5acbx5[_0xa68a[10]](_0xa68a[71],require(_0xa68a[72]));_0x5acbx5[_0xa68a[10]](_0xa68a[73],require(_0xa68a[74]));_0x5acbx5[_0xa68a[10]](_0xa68a[75],require(_0xa68a[76]));_0x5acbx5[_0xa68a[10]](_0xa68a[77],require(_0xa68a[78]));_0x5acbx5[_0xa68a[10]](_0xa68a[79],require(_0xa68a[80]));_0x5acbx5[_0xa68a[10]](_0xa68a[81],require(_0xa68a[82]));_0x5acbx5[_0xa68a[10]](_0xa68a[83],require(_0xa68a[84]));_0x5acbx5[_0xa68a[10]](_0xa68a[85],require(_0xa68a[86]));_0x5acbx5[_0xa68a[10]](_0xa68a[87],require(_0xa68a[88]));_0x5acbx5[_0xa68a[10]](_0xa68a[89],require(_0xa68a[90]));_0x5acbx5[_0xa68a[10]](_0xa68a[91],require(_0xa68a[92]));_0x5acbx5[_0xa68a[10]](_0xa68a[93],require(_0xa68a[94]));_0x5acbx5[_0xa68a[10]](_0xa68a[95],require(_0xa68a[96]));_0x5acbx5[_0xa68a[10]](_0xa68a[97],require(_0xa68a[98]));_0x5acbx5[_0xa68a[10]](_0xa68a[99],require(_0xa68a[100]));_0x5acbx5[_0xa68a[10]](_0xa68a[101],require(_0xa68a[102]));_0x5acbx5[_0xa68a[10]](_0xa68a[103],require(_0xa68a[104]));_0x5acbx5[_0xa68a[10]](_0xa68a[105],require(_0xa68a[106]));_0x5acbx5[_0xa68a[10]](_0xa68a[107],require(_0xa68a[108]));_0x5acbx5[_0xa68a[10]](_0xa68a[109],require(_0xa68a[110]));_0x5acbx5[_0xa68a[10]](_0xa68a[111],require(_0xa68a[112]));_0x5acbx5[_0xa68a[10]](_0xa68a[113],require(_0xa68a[114]));_0x5acbx5[_0xa68a[10]](_0xa68a[115],require(_0xa68a[116]));_0x5acbx5[_0xa68a[10]](_0xa68a[117],require(_0xa68a[118]));_0x5acbx5[_0xa68a[10]](_0xa68a[119],require(_0xa68a[120]));_0x5acbx5[_0xa68a[10]](_0xa68a[121],require(_0xa68a[122]));_0x5acbx5[_0xa68a[10]](_0xa68a[123],require(_0xa68a[124]));_0x5acbx5[_0xa68a[10]](_0xa68a[125],require(_0xa68a[126]));_0x5acbx5[_0xa68a[10]](_0xa68a[127],require(_0xa68a[128]));_0x5acbx5[_0xa68a[10]](_0xa68a[129],require(_0xa68a[130]));_0x5acbx5[_0xa68a[10]](_0xa68a[131],require(_0xa68a[132]));_0x5acbx5[_0xa68a[10]](_0xa68a[133],require(_0xa68a[134]));_0x5acbx5[_0xa68a[10]](_0xa68a[135],require(_0xa68a[136]));_0x5acbx5[_0xa68a[10]](_0xa68a[137],require(_0xa68a[138]));_0x5acbx5[_0xa68a[10]](_0xa68a[139],require(_0xa68a[140]));_0x5acbx5[_0xa68a[10]](_0xa68a[141],require(_0xa68a[142]));_0x5acbx5[_0xa68a[10]](_0xa68a[143],require(_0xa68a[144]));_0x5acbx5[_0xa68a[10]](_0xa68a[145],require(_0xa68a[146]));_0x5acbx5[_0xa68a[10]](_0xa68a[147],require(_0xa68a[148]));_0x5acbx5[_0xa68a[10]](_0xa68a[149],require(_0xa68a[150]));_0x5acbx5[_0xa68a[10]](_0xa68a[151],require(_0xa68a[152]));_0x5acbx5[_0xa68a[10]](_0xa68a[153],require(_0xa68a[154]));_0x5acbx5[_0xa68a[10]](_0xa68a[155],require(_0xa68a[156]));_0x5acbx5[_0xa68a[10]](_0xa68a[157],require(_0xa68a[158]));_0x5acbx5[_0xa68a[10]](_0xa68a[159],require(_0xa68a[160]));_0x5acbx5[_0xa68a[10]](_0xa68a[161],require(_0xa68a[162]));_0x5acbx5[_0xa68a[10]](_0xa68a[163],require(_0xa68a[164]));_0x5acbx5[_0xa68a[10]](_0xa68a[165],require(_0xa68a[166]));_0x5acbx5[_0xa68a[10]](_0xa68a[167],require(_0xa68a[168]));_0x5acbx5[_0xa68a[10]](_0xa68a[169],require(_0xa68a[170]));_0x5acbx5[_0xa68a[10]](_0xa68a[151],require(_0xa68a[152]));_0x5acbx5[_0xa68a[10]](_0xa68a[171],require(_0xa68a[172]));_0x5acbx5[_0xa68a[10]](_0xa68a[173],require(_0xa68a[174]));_0x5acbx5[_0xa68a[10]](_0xa68a[175],require(_0xa68a[176]));_0x5acbx5[_0xa68a[10]](_0xa68a[177],require(_0xa68a[178]));_0x5acbx5[_0xa68a[10]](_0xa68a[179],require(_0xa68a[180]));_0x5acbx5[_0xa68a[10]](_0xa68a[181],require(_0xa68a[182]));_0x5acbx5[_0xa68a[10]](_0xa68a[183],require(_0xa68a[184]));_0x5acbx5[_0xa68a[10]](_0xa68a[185],require(_0xa68a[186]));_0x5acbx5[_0xa68a[10]](_0xa68a[187],require(_0xa68a[188]));_0x5acbx5[_0xa68a[10]](_0xa68a[189],require(_0xa68a[190]));_0x5acbx5[_0xa68a[10]](_0xa68a[191],require(_0xa68a[192]));_0x5acbx5[_0xa68a[10]](_0xa68a[193],require(_0xa68a[194]));_0x5acbx5[_0xa68a[10]](_0xa68a[195],require(_0xa68a[196]));_0x5acbx5[_0xa68a[10]](_0xa68a[197],require(_0xa68a[198]));_0x5acbx5[_0xa68a[200]](_0xa68a[199])[_0xa68a[7]](errors[404]);_0x5acbx5[_0xa68a[211]](_0xa68a[201],function(_0x5acbx7,_0x5acbx8,_0x5acbx9){var _0x5acbxa={};if(_0xa68a[202]===_0x5acbx6){_0x5acbxa[_0xa68a[203]]=path[_0xa68a[205]](config[_0xa68a[203]],_0xa68a[204])};if(_0xa68a[206]===_0x5acbx6||_0xa68a[207]===_0x5acbx6){_0x5acbxa[_0xa68a[203]]=path[_0xa68a[205]](config[_0xa68a[203]],_0xa68a[208])};_0x5acbx8[_0xa68a[210]](_0xa68a[209],_0x5acbxa)})}
\ No newline at end of file
+/**
+ * Main application routes
+ */
+
+'use strict';
+
+var config = require('./config/environment');
+var errors = require('./components/errors');
+var path = require('path');
+var moment = require('moment');
+
+module.exports = function(app) {
+  var env = app.get('env');
+
+  // Insert routes below
+  app.use('/api/chat/proactives', require('./api/chat_proactive_action'));
+
+  app.use('/api/chat/websites/fields', require('./api/chat_websites_field'));
+  app.use('/api/answers', require('./api/canned_answer'));
+  app.use('/api/actions', require('./api/action'));
+  app.use('/api/pauses', require('./api/pause'));
+  app.use('/api/voice/recordings', require('./api/voice_recording'));
+  app.use('/api/jscripty/projects', require('./api/jscripty_project'));
+  app.use('/api/telephones', require('./api/telephone'));
+  app.use('/api/licenses', require('./api/license'));
+  app.use('/api/sugarcrm/fields', require('./api/sugarcrm_field'));
+  app.use('/api/sugarcrm/configurations', require('./api/sugarcrm_configuration'));
+  app.use('/api/sugarcrm/accounts', require('./api/sugarcrm_account'));
+  app.use('/api/freshdesk/fields', require('./api/freshdesk_field'));
+  app.use('/api/freshdesk/configurations', require('./api/freshdesk_configuration'));
+  app.use('/api/freshdesk/accounts', require('./api/freshdesk_account'));
+  app.use('/api/salesforce/fields', require('./api/salesforce_field'));
+  app.use('/api/salesforce/configurations', require('./api/salesforce_configuration'));
+  app.use('/api/salesforce/accounts', require('./api/salesforce_account'));
+  app.use('/api/desk/fields', require('./api/desk_field'));
+  app.use('/api/desk/configurations', require('./api/desk_configuration'));
+  app.use('/api/desk/accounts', require('./api/desk_account'));
+  app.use('/api/analytics/reports/default', require('./api/default_report'));
+  app.use('/api/analytics/reports/custom', require('./api/custom_report'));
+  app.use('/api/analytics/reports/trees', require('./api/report_tree'));
+  app.use('/api/analytics/metrics', require('./api/metric'));
+  app.use('/api/analytics/extracted', require('./api/extracted_report'));
+  app.use('/api/updates', require('./api/update'));
+  app.use('/api/report/chat/sessions', require('./api/report_chat_session'));
+  app.use('/api/zendesk/fields', require('./api/zendesk_field'));
+  app.use('/api/report/chats', require('./api/report_chat'));
+  app.use('/api/zendesk/configurations', require('./api/zendesk_configuration'));
+  app.use('/api/motionbar', require('./api/motionbar'));
+  app.use('/api/report/mail/sessions', require('./api/report_mail_session'));
+  app.use('/api/report/mails', require('./api/report_mail'));
+  app.use('/api/widgets', require('./api/widget'));
+  app.use('/api/zendesk/accounts', require('./api/zendesk_account'));
+  app.use('/api/report/queues', require('./api/report_queue'));
+  app.use('/api/report/integrations', require('./api/report_integration'));
+  app.use('/api/report/agents', require('./api/report_agent'));
+  app.use('/api/dashboards', require('./api/dashboard'));
+  app.use('/api/settings', require('./api/setting'));
+  app.use('/api/triggers', require('./api/trigger'));
+  app.use('/api/automations', require('./api/automation'));
+  app.use('/api/mail/templates', require('./api/mail_template'));
+  app.use('/api/ami', require('./api/ami'));
+  app.use('/api/integrations', require('./api/integration'));
+  app.use('/api/voice/musiconholds', require('./api/voice_musiconhold'));
+  app.use('/api/voice/voicemails/messages', require('./api/voice_voicemail_messages'));
+  app.use('/api/voice/voicemails', require('./api/voice_voicemail'));
+  app.use('/api/contactmanager/companies', require('./api/company'));
+  app.use('/api/contactmanager/services', require('./api/service'));
+  app.use('/api/contactmanager/user_has_services', require('./api/user_has_service'));
+  app.use('/api/contactmanager/contacts', require('./api/contact_manager'));
+  app.use('/api/intervals', require('./api/interval'));
+  app.use('/api/voice/extensions', require('./api/voice_extension'));
+  app.use('/api/voice/contexts', require('./api/voice_context'));
+  app.use('/api/voice/user_has_queues', require('./api/user_has_voice_queue'));
+  app.use('/api/voice/queues', require('./api/voice_queue'));
+  app.use('/api/trunks', require('./api/trunk'));
+  app.use('/api/chat/applications', require('./api/chat_application'));
+  app.use('/api/chat/user_has_queues', require('./api/user_has_chat_queue'));
+  app.use('/api/square/odbc', require('./api/square_odbc'));
+  app.use('/api/fax/applications', require('./api/fax_application'));
+  app.use('/api/fax/user_has_queues', require('./api/user_has_fax_queue'));
+  app.use('/api/fax/queues', require('./api/fax_queue'));
+  app.use('/api/mail/attachments', require('./api/mail_attachment'));
+  app.use('/api/user_has_teams', require('./api/user_has_team'));
+  app.use('/api/variables', require('./api/variable'));
+  app.use('/api/chanspy', require('./api/chanspy'));
+  app.use('/api/tags', require('./api/tag'));
+  app.use('/api/square/projects', require('./api/square_project'));
+  app.use('/api/chat/queues', require('./api/chat_queue'));
+  app.use('/api/fax/messages', require('./api/fax_message'));
+  app.use('/api/fax/rooms', require('./api/fax_room'));
+  app.use('/api/fax/accounts', require('./api/fax_account'));
+  app.use('/api/agents', require('./api/agent'));
+  app.use('/api/chat/enquiries', require('./api/chat_enquiry'));
+  app.use('/api/chat/messages', require('./api/chat_message'));
+  app.use('/api/chat/rooms', require('./api/chat_room'));
+  app.use('/api/chat/visitors', require('./api/chat_visitor'));
+  app.use('/api/chat/websites', require('./api/chat_website'));
+  app.use('/api/chat/queues', require('./api/chat_queue'));
+  app.use('/api/mail/accounts', require('./api/mail_account'));
+  app.use('/api/mail/messages', require('./api/mail_message'));
+  app.use('/api/mail/rooms', require('./api/mail_room'));
+  app.use('/api/mail/servers/in', require('./api/mail_server_in'));
+  app.use('/api/mail/servers/out', require('./api/mail_server_out'));
+  app.use('/api/mail/queues', require('./api/mail_queue'));
+  app.use('/api/mail/user_has_queues', require('./api/user_has_mail_queue'));
+  app.use('/api/mail/applications', require('./api/mail_application'));
+  app.use('/api/teams', require('./api/team'));
+  app.use('/api/sounds', require('./api/sound'));
+  app.use('/api/users', require('./api/user'));
+  app.use('/api/chat/user_has_rooms', require('./api/user_has_chat_room'));
+  app.use('/api/xchatty', require('./api/xchatty'));
+  app.use('/auth', require('./auth'));
+
+  // All undefined asset or api routes should return a 404
+  app.route('/:url(api|auth|components|app|bower_components|assets)/*').get(
+    errors[404]);
+
+  // All other routes should redirect to the index.html
+  app.all("/*", function(req, res, next) {
+
+    var options = {};
+
+    if ('production' === env) {
+      options.root = path.join(config.root, 'public');
+    }
+
+    if ('development' === env || 'test' === env) {
+      options.root = path.join(config.root, 'client');
+    }
+
+    res.sendFile('index.html', options);
+  });
+
+  // app
+  //   .route('/*')
+  //   .get(function(req, res) {
+  //
+  //     var options = {
+  //       root: config.root,
+  //       dotfiles: 'deny',
+  //       headers: {
+  //         'x-timestamp': Date.now(),
+  //         'x-sent': true
+  //       }
+  //     };
+  //
+  //     res.sendFile('index.html', options);
+  //   });
+};
index 52c14d8..5a75ac6 100644 (file)
@@ -1 +1,87 @@
-var _0x955e=["\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x62\x75\x69\x6C\x64\x52\x65\x70\x6F\x72\x74","","\x66\x75\x6E\x63\x74\x69\x6F\x6E","\x43\x4F\x55\x4E\x54\x28\x44\x49\x53\x54\x49\x4E\x43\x54\x20\x25\x73\x29","\x66\x69\x65\x6C\x64","\x66\x6F\x72\x6D\x61\x74","\x43\x4F\x55\x4E\x54\x20\x44\x49\x53\x54\x49\x4E\x43\x54","\x47\x52\x4F\x55\x50\x5F\x43\x4F\x4E\x43\x41\x54\x28\x25\x73\x20\x4F\x52\x44\x45\x52\x20\x42\x59\x20\x25\x73\x20\x41\x53\x43\x29","\x47\x52\x4F\x55\x50\x5F\x43\x4F\x4E\x43\x41\x54\x20\x41\x53\x43","\x47\x52\x4F\x55\x50\x5F\x43\x4F\x4E\x43\x41\x54\x28\x25\x73\x20\x4F\x52\x44\x45\x52\x20\x42\x59\x20\x25\x73\x20\x44\x45\x53\x43\x29","\x47\x52\x4F\x55\x50\x5F\x43\x4F\x4E\x43\x41\x54\x20\x44\x45\x53\x43","\x25\x73\x28\x25\x73\x29","\x25\x73\x20\x41\x53\x20\x27\x25\x73\x27","\x61\x6C\x69\x61\x73","\x70\x75\x73\x68","\x67\x72\x6F\x75\x70\x42\x79","\x6F\x72\x64\x65\x72\x42\x79","\x25\x73\x20\x25\x73","\x66\x6F\x72\x45\x61\x63\x68","\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73","\x67\x72\x6F\x75\x70","\x70\x61\x72\x73\x65","\x28\x29","\x53\x45\x4C\x45\x43\x54","\x20","\x2C","\x6A\x6F\x69\x6E","\x20\x46\x52\x4F\x4D\x20","\x74\x61\x62\x6C\x65","\x20\x57\x48\x45\x52\x45\x20","\x63\x72\x65\x61\x74\x65\x64\x41\x74\x20\x3E\x3D\x20\x27","\x27","\x73\x74\x61\x72\x74\x44\x61\x74\x65","\x63\x72\x65\x61\x74\x65\x64\x41\x74\x20\x3C\x3D\x20\x27","\x65\x6E\x64\x44\x61\x74\x65","\x6F\x66\x66\x73\x65\x74","\x6C\x69\x6D\x69\x74","\x66\x69\x6E\x64","\x20\x4C\x49\x4B\x45\x20\x27\x25","\x25\x27","\x66\x6F\x72\x4F\x77\x6E","\x6C\x65\x6E\x67\x74\x68","\x20\x41\x4E\x44\x20","\x20\x47\x52\x4F\x55\x50\x20\x42\x59\x20","\x20\x4F\x52\x44\x45\x52\x20\x42\x59\x20","\x28","\x72\x75\x6C\x65\x73","\x6F\x70\x65\x72\x61\x74\x6F\x72","\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E","\x20\x27","\x4C\x49\x4B\x45","\x25","\x76\x61\x6C\x75\x65","\x29"];var _=require(_0x955e[0]);var util=require(_0x955e[1]);exports[_0x955e[2]]=function(_0x9ad8x3,_0x9ad8x4){var _0x9ad8x5=[],_0x9ad8x6=[],_0x9ad8x7=[];_[_0x955e[20]](_0x9ad8x3.Fields,function(_0x9ad8x8){var _0x9ad8x9=_0x955e[3];if(_0x9ad8x8[_0x955e[4]]){switch(_0x9ad8x8[_0x955e[4]]){case _0x955e[8]:_0x9ad8x9=util[_0x955e[7]](_0x955e[5],_0x9ad8x8[_0x955e[6]]);break;case _0x955e[10]:_0x9ad8x9=util[_0x955e[7]](_0x955e[9],_0x9ad8x8[_0x955e[6]],_0x9ad8x8[_0x955e[6]]);break;case _0x955e[12]:_0x9ad8x9=util[_0x955e[7]](_0x955e[11],_0x9ad8x8[_0x955e[6]],_0x9ad8x8[_0x955e[6]]);break;default:_0x9ad8x9=util[_0x955e[7]](_0x955e[13],_0x9ad8x8[_0x955e[4]],_0x9ad8x8[_0x955e[6]])}}else {_0x9ad8x9=_0x9ad8x8[_0x955e[6]]};_0x9ad8x5[_0x955e[16]](util[_0x955e[7]](_0x955e[14],_0x9ad8x9,_0x9ad8x8[_0x955e[15]]));if(_0x9ad8x8[_0x955e[17]]){_0x9ad8x6[_0x955e[16]](_0x9ad8x8[_0x955e[6]])};if(_0x9ad8x8[_0x955e[18]]){_0x9ad8x7[_0x955e[16]](util[_0x955e[7]](_0x955e[19],_0x9ad8x8[_0x955e[6]],_0x9ad8x8[_0x955e[18]]))}});var _0x9ad8xa=_0x9ad8x3[_0x955e[21]]?getConditions(JSON[_0x955e[23]](_0x9ad8x3[_0x955e[21]])[_0x955e[22]]):_0x955e[24];var _0x9ad8xb=_0x955e[25];_0x9ad8xb+=_0x955e[26]+_0x9ad8x5[_0x955e[28]](_0x955e[27]);_0x9ad8xb+=_0x955e[29]+_0x9ad8x3[_0x955e[30]];_0x9ad8xb+=_0x9ad8xa!==_0x955e[24]?_0x955e[31]+_0x9ad8xa:_0x955e[3];var _0x9ad8xc,_0x9ad8xd;var _0x9ad8xe=[];if(_0x9ad8x4){_[_0x955e[42]](_0x9ad8x4,function(_0x9ad8xf,_0x9ad8x10){switch(_0x9ad8x10){case _0x955e[34]:_0x9ad8xe[_0x955e[16]](_0x955e[32]+_0x9ad8xf+_0x955e[33]);break;case _0x955e[36]:_0x9ad8xe[_0x955e[16]](_0x955e[35]+_0x9ad8xf+_0x955e[33]);break;case _0x955e[37]:;case _0x955e[38]:break;default:var _0x9ad8x11=_[_0x955e[39]](_0x9ad8x3.Fields,{alias:_0x9ad8x10});if(_0x9ad8x11){_0x9ad8xe[_0x955e[16]](_0x9ad8x11[_0x955e[6]]+_0x955e[40]+_0x9ad8xf+_0x955e[41])}else {_0x9ad8xe[_0x955e[16]](_0x9ad8x10+_0x955e[40]+_0x9ad8xf+_0x955e[41])}}})};if(_0x9ad8xe[_0x955e[43]]){_0x9ad8xb+=((_0x9ad8xa!==_0x955e[24])?_0x955e[44]:_0x955e[31])+_0x9ad8xe[_0x955e[28]](_0x955e[44])};_0x9ad8xb+=_0x9ad8x6[_0x955e[43]]?_0x955e[45]+_0x9ad8x6[_0x955e[28]](_0x955e[27]):_0x955e[3];_0x9ad8xb+=_0x9ad8x7[_0x955e[43]]?_0x955e[46]+_0x9ad8x7[_0x955e[28]](_0x955e[27]):_0x955e[3];return _0x9ad8xb};function getConditions(_0x9ad8x13){if(!_0x9ad8x13){return _0x955e[24]};for(var _0x9ad8x14=_0x955e[47],_0x9ad8x15=0;_0x9ad8x15<_0x9ad8x13[_0x955e[48]][_0x955e[43]];_0x9ad8x15++){_0x9ad8x15>0&&(_0x9ad8x14+=_0x955e[26]+_0x9ad8x13[_0x955e[49]]+_0x955e[26]);_0x9ad8x14+=_0x9ad8x13[_0x955e[48]][_0x9ad8x15][_0x955e[22]]?getConditions(_0x9ad8x13[_0x955e[48]][_0x9ad8x15][_0x955e[22]]):_0x9ad8x13[_0x955e[48]][_0x9ad8x15][_0x955e[6]]+_0x955e[26]+_0x9ad8x13[_0x955e[48]][_0x9ad8x15][_0x955e[50]]+_0x955e[51]+(_0x9ad8x13[_0x955e[48]][_0x9ad8x15][_0x955e[50]]===_0x955e[52]?_0x955e[53]+_0x9ad8x13[_0x955e[48]][_0x9ad8x15][_0x955e[54]]+_0x955e[53]:_0x9ad8x13[_0x955e[48]][_0x9ad8x15][_0x955e[54]])+_0x955e[33]};return _0x9ad8x14+_0x955e[55]}
\ No newline at end of file
+var _ = require('lodash');
+var util = require('util');
+
+exports.buildReport = function(report, query) {
+  var fields = [],
+    groupBy = [],
+    orderBy = [];
+  _.forEach(report.Fields, function(elem) {
+    var field = '';
+    if (elem.function) {
+      switch (elem.function) {
+        case 'COUNT DISTINCT':
+          field = util.format('COUNT(DISTINCT %s)', elem.field);
+          break;
+        case 'GROUP_CONCAT ASC':
+          field = util.format('GROUP_CONCAT(%s ORDER BY %s ASC)', elem.field, elem.field);
+          break;
+        case 'GROUP_CONCAT DESC':
+          field = util.format('GROUP_CONCAT(%s ORDER BY %s DESC)', elem.field, elem.field);
+          break;
+        default:
+          field = util.format('%s(%s)', elem.function, elem.field);
+      }
+    } else {
+      field = elem.field;
+    }
+    fields.push(util.format('%s AS \'%s\'', field, elem.alias));
+    if (elem.groupBy) {
+      groupBy.push(elem.field);
+    }
+    if (elem.orderBy) {
+      orderBy.push(util.format('%s %s', elem.field, elem.orderBy));
+    }
+  });
+
+  var conditions = report.conditions ? getConditions(JSON.parse(report.conditions).group) : '()';
+  var resultQuery = 'SELECT';
+  // query += fields.length ? ' ' + fields.join(',') : ' *';//right if you want to select all fields also
+  resultQuery += ' ' + fields.join(','); //generate a wrong query if there isn' t any field
+  resultQuery += ' FROM ' + report.table;
+  resultQuery += conditions !== '()' ? ' WHERE ' + conditions : '';
+  var startDate, endDate;
+  var otherConditions = [];
+  if (query) {
+    _.forOwn(query, function(value, key) {
+      switch (key) {
+        case 'startDate':
+          otherConditions.push('createdAt >= \'' + value + '\'');
+          break;
+        case 'endDate':
+          otherConditions.push('createdAt <= \'' + value + '\'');
+          break;
+        case 'offset':
+        case 'limit':
+          break;
+        default:
+          var column = _.find(report.Fields, {
+            alias: key
+          });
+          if (column) {
+            otherConditions.push(column.field + ' LIKE \'%' + value + '%\'');
+          } else {
+            otherConditions.push(key + ' LIKE \'%' + value + '%\'');
+          }
+      }
+    });
+  }
+  if (otherConditions.length) {
+    resultQuery += ((conditions !== '()') ? ' AND ' : ' WHERE ') + otherConditions.join(' AND ');
+  }
+  resultQuery += groupBy.length ? ' GROUP BY ' + groupBy.join(',') : '';
+  resultQuery += orderBy.length ? ' ORDER BY ' + orderBy.join(',') : '';
+
+  return resultQuery;
+}
+
+function getConditions(group) {
+
+  if (!group) return "()";
+  for (var str = "(", i = 0; i < group.rules.length; i++) {
+    i > 0 && (str += " " + group.operator + " ");
+    str += group.rules[i].group ?
+      getConditions(group.rules[i].group) :
+      group.rules[i].field + " " + group.rules[i].condition + " '" + (group.rules[i].condition === 'LIKE' ? "%" + group.rules[i].value + "%" : group.rules[i].value) + "'";
+  }
+  return str + ')';
+}
index ba472f7..0d973b7 100644 (file)
@@ -1 +1,197 @@
-var _0xf0aa=["\x74\x6F\x2D\x63\x73\x76","\x70\x64\x66\x6D\x61\x6B\x65","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x45\x78\x74\x72\x61\x63\x74\x65\x64\x52\x65\x70\x6F\x72\x74","\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x66\x73","\x6D\x6F\x6D\x65\x6E\x74","\x73\x69\x6D\x70\x6C\x65\x2D\x72\x61\x6E\x64\x6F\x6D","\x70\x61\x74\x68","\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x2E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x62\x75\x69\x6C\x64","\x66\x6F\x6E\x74\x73","\x52\x6F\x62\x6F\x74\x6F\x2D\x52\x65\x67\x75\x6C\x61\x72\x2E\x74\x74\x66","\x6A\x6F\x69\x6E","\x52\x6F\x62\x6F\x74\x6F\x2D\x4D\x65\x64\x69\x75\x6D\x2E\x74\x74\x66","\x52\x6F\x62\x6F\x74\x6F\x2D\x49\x74\x61\x6C\x69\x63\x2E\x74\x74\x66","\x65\x78\x74\x72\x61\x63\x74\x50\x44\x46","\x70\x64\x66","\x65\x78\x74\x72\x61\x63\x74\x43\x53\x56","\x63\x73\x76","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x62\x75\x69\x6C\x64\x52\x65\x70\x6F\x72\x74","\x6C\x6F\x67","\x71\x75\x65\x72\x79\x20\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x6C\x65\x6E\x67\x74\x68","\x65\x6D\x70\x74\x79","\x71\x75\x65\x72\x79\x20\x65\x78\x74\x72\x61\x63\x74\x69\x6F\x6E\x20\x65\x72\x72\x6F\x72","\x74\x68\x65\x6E","\x53\x45\x4C\x45\x43\x54","\x51\x75\x65\x72\x79\x54\x79\x70\x65\x73","\x71\x75\x65\x72\x79","\x72\x65\x70\x6F\x72\x74\x5F","\x6E\x61\x6D\x65","\x5F","\x2E\x70\x64\x66","\x61\x6C\x69\x61\x73","\x74\x61\x62\x6C\x65\x48\x65\x61\x64\x65\x72","\x70\x75\x73\x68","\x66\x6F\x72\x45\x61\x63\x68","\x4D\x4D\x2D\x44\x44\x2D\x59\x59\x59\x59\x20\x48\x48\x3A\x6D\x6D","\x66\x6F\x72\x6D\x61\x74","\x66\x6F\x72\x4F\x77\x6E","\x68\x65\x61\x64\x65\x72","\x73\x74\x61\x72\x74\x44\x61\x74\x65","","\x20\x2D\x20","\x65\x6E\x64\x44\x61\x74\x65","\x74\x61\x62\x6C\x65\x45\x78\x61\x6D\x70\x6C\x65","\x62\x6C\x61\x63\x6B","\x63\x72\x65\x61\x74\x65\x50\x64\x66\x4B\x69\x74\x44\x6F\x63\x75\x6D\x65\x6E\x74","\x72\x65\x70\x6F\x72\x74\x73","\x63\x72\x65\x61\x74\x65\x57\x72\x69\x74\x65\x53\x74\x72\x65\x61\x6D","\x65\x72\x72\x6F\x72","\x70\x64\x66\x20\x77\x72\x69\x74\x65\x20\x65\x72\x72\x6F\x72","\x6F\x6E","\x66\x69\x6E\x69\x73\x68","\x63\x6F\x6D\x70\x6C\x65\x74\x65\x64","\x70\x69\x70\x65","\x65\x6E\x64","\x70\x64\x66\x20\x63\x72\x65\x61\x74\x69\x6F\x6E\x20\x65\x72\x72\x6F\x72","\x2E\x63\x73\x76","\x63\x73\x76\x20\x77\x72\x69\x74\x65\x20\x65\x72\x72\x6F\x72","\x77\x72\x69\x74\x65\x46\x69\x6C\x65","\x63\x73\x76\x20\x63\x72\x65\x61\x74\x69\x6F\x6E\x20\x65\x72\x72\x6F\x72","\x2D\x2D\x46\x69\x6E\x69\x73\x68\x65\x64\x20\x65\x78\x74\x72\x61\x63\x74\x69\x6E\x67\x20\x72\x65\x70\x6F\x72\x74\x20\x77\x69\x74\x68\x20\x65\x72\x72\x6F\x72\x20\x3A\x20","\x2D\x2D\x46\x69\x6E\x69\x73\x68\x65\x64\x20\x65\x78\x74\x72\x61\x63\x74\x69\x6E\x67\x20\x72\x65\x70\x6F\x72\x74","\x75\x70\x64\x61\x74\x65"];var csv=require(_0xf0aa[0]);var pdfMake=require(_0xf0aa[1]);var _=require(_0xf0aa[2]);var util=require(_0xf0aa[3]);var ExtractedReport=require(_0xf0aa[5])[_0xf0aa[4]];var sequelize=require(_0xf0aa[5])[_0xf0aa[6]];var fs=require(_0xf0aa[7]);var moment=require(_0xf0aa[8]);var sr=require(_0xf0aa[9]);var path=require(_0xf0aa[10]);var config=require(_0xf0aa[11]);var reportBuildUtils=require(_0xf0aa[12]);var fonts={Roboto:{normal:path[_0xf0aa[15]](config[_0xf0aa[13]],_0xf0aa[14]),bold:path[_0xf0aa[15]](config[_0xf0aa[13]],_0xf0aa[16]),italics:path[_0xf0aa[15]](config[_0xf0aa[13]],_0xf0aa[17]),bolditalics:path[_0xf0aa[15]](config[_0xf0aa[13]],_0xf0aa[17])}};exports[_0xf0aa[18]]=function(_0x8b30xe,_0x8b30xf,_0x8b30x10){general(_0x8b30xe,_0x8b30xf,_0x8b30x10,_0xf0aa[19])};exports[_0xf0aa[20]]=function(_0x8b30xe,_0x8b30xf,_0x8b30x10){general(_0x8b30xe,_0x8b30xf,_0x8b30x10,_0xf0aa[21])};function general(_0x8b30xe,_0x8b30xf,_0x8b30x10,_0x8b30x12){extract(_0x8b30xe,_0x8b30xf,_0x8b30x10,_0x8b30x12)}function extract(_0x8b30xe,_0x8b30x14,_0x8b30x10,_0x8b30x12){var _0x8b30xf=reportBuildUtils[_0xf0aa[23]](_0x8b30xe[_0xf0aa[22]],_0x8b30x14);sequelize[_0xf0aa[33]](_0x8b30xf,{type:sequelize[_0xf0aa[32]][_0xf0aa[31]]})[_0xf0aa[30]](function(_0x8b30x16){if(_0x8b30x16){if(_0x8b30x16[_0xf0aa[27]]){switch(_0x8b30x12){case _0xf0aa[19]:createPdf(_0x8b30x16,_0x8b30xe,_0x8b30x14,_0x8b30x10);break;case _0xf0aa[21]:createCsv(_0x8b30x16,_0x8b30xe,_0x8b30x14,_0x8b30x10);break;default:createCsv(_0x8b30x16,_0x8b30xe,_0x8b30x14,_0x8b30x10)}}else {updateExtracted(_0x8b30x10,null,_0xf0aa[28])}}else {updateExtracted(_0x8b30x10,null,_0xf0aa[29])}})[_0xf0aa[26]](function(_0x8b30x15){console[_0xf0aa[24]](_0x8b30x15);updateExtracted(_0x8b30x10,null,_0xf0aa[25])})}function createPdf(_0x8b30x16,_0x8b30xe,_0x8b30x14,_0x8b30x18){var _0x8b30x19=sr({length:20,prefix:_0xf0aa[34]+_0x8b30xe[_0xf0aa[35]]+_0xf0aa[36],suffix:_0xf0aa[37]});var _0x8b30x1a=[];_[_0xf0aa[41]](_0x8b30xe.Fields,function(_0x8b30x1b){_0x8b30x1a[_0xf0aa[40]]({text:_0x8b30x1b[_0xf0aa[38]],style:_0xf0aa[39]})});var _0x8b30x1c=[_0x8b30x1a];_[_0xf0aa[41]](_0x8b30x16,function(_0x8b30x1b){var _0x8b30x1d=[];_[_0xf0aa[44]](_0x8b30x1b,function(_0x8b30x1e,_0x8b30x1f){_0x8b30x1d[_0xf0aa[40]](_0x8b30x1e instanceof Date?moment(_0x8b30x1e)[_0xf0aa[43]](_0xf0aa[42]).toString():_0x8b30x1e)});_0x8b30x1c[_0xf0aa[40]](_0x8b30x1d)});var _0x8b30x20={content:[{text:_0x8b30xe[_0xf0aa[35]],style:_0xf0aa[45]},_0x8b30x14[_0xf0aa[46]]?moment(_0x8b30x14[_0xf0aa[46]])[_0xf0aa[43]](_0xf0aa[42]).toString():_0xf0aa[47]+_0xf0aa[48]+_0x8b30x14[_0xf0aa[49]]?moment(_0x8b30x14[_0xf0aa[49]])[_0xf0aa[43]](_0xf0aa[42]).toString():_0xf0aa[47],{style:_0xf0aa[50],table:{headerRows:1,body:_0x8b30x1c}}],styles:{header:{fontSize:18,bold:true,margin:[0,0,0,10]},subheader:{fontSize:16,bold:true,margin:[0,10,0,5]},tableExample:{margin:[0,5,0,15]},tableHeader:{bold:true,fontSize:13,color:_0xf0aa[51]}}};var _0x8b30x21= new pdfMake(fonts);var _0x8b30x22=_0x8b30x21[_0xf0aa[52]](_0x8b30x20);if(_0x8b30x22){var _0x8b30x23=fs[_0xf0aa[54]](config[_0xf0aa[53]]+_0x8b30x19);_0x8b30x23[_0xf0aa[57]](_0xf0aa[55],function(){updateExtracted(_0x8b30x18,null,_0xf0aa[56])});_0x8b30x23[_0xf0aa[57]](_0xf0aa[58],function(){updateExtracted(_0x8b30x18,_0x8b30x19,_0xf0aa[59])});_0x8b30x22[_0xf0aa[60]](_0x8b30x23);_0x8b30x22[_0xf0aa[61]]()}else {updateExtracted(_0x8b30x18,null,_0xf0aa[62])}}function createCsv(_0x8b30x16,_0x8b30xe,_0x8b30x14,_0x8b30x18){var _0x8b30x19=sr({length:20,prefix:_0xf0aa[34]+_0x8b30xe[_0xf0aa[35]]+_0xf0aa[36],suffix:_0xf0aa[63]});var _0x8b30x25=csv(_0x8b30x16);if(_0x8b30x25){fs[_0xf0aa[65]](config[_0xf0aa[53]]+_0x8b30x19,_0x8b30x25,function(_0x8b30x15){if(_0x8b30x15){console[_0xf0aa[24]](_0x8b30x15);updateExtracted(_0x8b30x18,null,_0xf0aa[64])}else {updateExtracted(_0x8b30x18,_0x8b30x19,_0xf0aa[59])}})}else {updateExtracted(_0x8b30x18,null,_0xf0aa[66])}}function updateExtracted(_0x8b30x18,_0x8b30x19,_0x8b30x27){ExtractedReport[_0xf0aa[69]]({status:_0x8b30x27,savename:_0x8b30x19},{where:{id:_0x8b30x18}})[_0xf0aa[30]](function(){console[_0xf0aa[24]](_0xf0aa[68])})[_0xf0aa[26]](function(_0x8b30x15){console[_0xf0aa[24]](_0xf0aa[67]+_0x8b30x15)})}
\ No newline at end of file
+var csv = require('to-csv');
+var pdfMake = require('pdfmake');
+var _ = require('lodash');
+var util = require('util');
+var ExtractedReport = require('../models').ExtractedReport;
+var sequelize = require('../models').sequelize;
+var fs = require('fs');
+var moment = require('moment');
+var sr = require('simple-random');
+var path = require('path');
+var config = require('../config/environment');
+var reportBuildUtils = require('./report_build');
+var fonts = {
+  Roboto: {
+    normal: path.join(config.fonts, 'Roboto-Regular.ttf'),
+    bold: path.join(config.fonts, 'Roboto-Medium.ttf'),
+    italics: path.join(config.fonts, 'Roboto-Italic.ttf'),
+    bolditalics: path.join(config.fonts, 'Roboto-Italic.ttf')
+  }
+};
+
+exports.extractPDF = function(report, query, extractedId) {
+  // console.log('--loaded external extractPDF function, calling general...');
+  general(report, query, extractedId, 'pdf');
+}
+
+exports.extractCSV = function(report, query, extractedId) {
+  // console.log('--loaded external extractCSV function, calling general...');
+  general(report, query, extractedId, 'csv');
+}
+
+function general(report, query, extractedId, type) {
+  // console.log('--general function, calling extract function...');
+  extract(report, query, extractedId, type);
+}
+
+function extract(report, dataQuery, extractedId, type) {
+  // console.log('--extract function, building query...');
+  var query = reportBuildUtils.buildReport(report.dataValues, dataQuery);
+  // console.log('--the query is :', query);
+  // console.log('--extracting the report...');
+  sequelize.query(query, {
+      type: sequelize.QueryTypes.SELECT
+    })
+    .then(function(res) {
+      if (res) {
+        if (res.length) {
+          // console.log('--report extracted, creating output as: ' + type);
+          switch (type) {
+            case 'pdf':
+              createPdf(res, report, dataQuery, extractedId);
+              break;
+            case 'csv':
+              createCsv(res, report, dataQuery, extractedId);
+              break;
+            default:
+              createCsv(res, report, dataQuery, extractedId);
+          }
+        } else {
+          updateExtracted(extractedId, null, 'empty');
+        }
+      } else {
+        // console.log('--error executing the report query');
+        updateExtracted(extractedId, null, 'query extraction error');
+
+      }
+    })
+    .catch(function(err) {
+      console.log(err);
+      updateExtracted(extractedId, null, 'query error');
+    });
+}
+
+function createPdf(res, report, dataQuery, id) {
+  // console.log('--pdf function, creating pdf output...');
+  var filename = sr({
+    length: 20,
+    prefix: "report_" + report.name + '_',
+    suffix: ".pdf"
+  });
+  var tableHeader = [];
+  _.forEach(report.Fields, function(elem) {
+    tableHeader.push({
+      text: elem.alias,
+      style: 'tableHeader'
+    });
+  });
+  var tableBody = [tableHeader];
+  _.forEach(res, function(elem) {
+    var row = [];
+    _.forOwn(elem, function(value, key) {
+      row.push(value instanceof Date ? moment(value).format("MM-DD-YYYY HH:mm").toString() : value);
+    });
+    tableBody.push(row);
+  });
+  var pdfContent = {
+    content: [{
+        text: report.name,
+        style: 'header'
+      },
+      dataQuery.startDate ? moment(dataQuery.startDate).format("MM-DD-YYYY HH:mm").toString() : '' + ' - ' + dataQuery.endDate ? moment(dataQuery.endDate).format("MM-DD-YYYY HH:mm").toString() :
+      '', {
+        style: 'tableExample',
+        table: {
+          headerRows: 1,
+          // keepWithHeaderRows: 1,
+          // dontBreakRows: true,
+          body: tableBody
+        }
+      }
+    ],
+    styles: {
+      header: {
+        fontSize: 18,
+        bold: true,
+        margin: [0, 0, 0, 10]
+      },
+      subheader: {
+        fontSize: 16,
+        bold: true,
+        margin: [0, 10, 0, 5]
+      },
+      tableExample: {
+        margin: [0, 5, 0, 15]
+      },
+      tableHeader: {
+        bold: true,
+        fontSize: 13,
+        color: 'black'
+      }
+    }
+  };
+
+  var printer = new pdfMake(fonts);
+  var pdfDoc = printer.createPdfKitDocument(pdfContent);
+  if (pdfDoc) {
+    // pdfDoc is a stream so you can pipe it to the file system
+    var writeStream = fs.createWriteStream(config.reports + filename);
+    writeStream.on('error', function() {
+      // console.log('--pdf write error');
+      updateExtracted(id, null, 'pdf write error')
+    });
+    writeStream.on('finish', function() {
+      // console.log('--pdf write finished');
+      updateExtracted(id, filename, 'completed')
+    });
+    pdfDoc.pipe(writeStream);
+    pdfDoc.end();
+  } else {
+    // console.log('--pdf creation error');
+    updateExtracted(id, null, 'pdf creation error')
+  }
+}
+
+function createCsv(res, report, dataQuery, id) {
+  // console.log(res);
+  // console.log('--csv function, creating pdf output...');
+  var filename = sr({
+    length: 20,
+    prefix: "report_" + report.name + '_',
+    suffix: ".csv"
+  });
+  var csv_report = csv(res);
+  if (csv_report) {
+    fs.writeFile(config.reports + filename, csv_report, function(err) {
+      if (err) {
+        // console.log('--csv write error');
+        console.log(err);
+        updateExtracted(id, null, 'csv write error')
+      } else {
+        // console.log('--csv write completed');
+        updateExtracted(id, filename, 'completed')
+      }
+    });
+  } else {
+    // console.log('--csv creation error');
+    updateExtracted(id, null, 'csv creation error')
+  }
+}
+
+function updateExtracted(id, filename, status) {
+  // console.log('--updating the extracted report db row..');
+  ExtractedReport.update({
+      status: status,
+      savename: filename
+    }, {
+      where: {
+        id: id
+      }
+    })
+    .then(function() {
+      console.log('--Finished extracting report');
+    })
+    .catch(function(err) {
+      console.log('--Finished extracting report with error : ' + err);
+    });
+}
index 531a9b7..210cfd3 100644 (file)
@@ -1 +1,214 @@
-var _0xfa62=["\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x49\x6E\x74\x65\x72\x76\x61\x6C","\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x56\x6F\x69\x63\x65\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x63\x72\x65\x61\x74\x65\x41\x70\x70\x73","\x72\x6F\x75\x74\x65\x55\x70\x64\x61\x74\x65","\x69\x64","\x62\x6F\x64\x79","\x74\x68\x65\x6E","\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x69\x73\x41\x72\x72\x61\x79","\x6C\x65\x6E\x67\x74\x68","\x70\x61\x72\x61\x6D\x73","\x64\x65\x73\x74\x72\x6F\x79","\x75\x70\x64\x61\x74\x65","\x61\x6C\x6C","\x65\x78\x74\x65\x6E","\x74\x79\x70\x65","\x63\x6F\x6E\x74\x65\x78\x74","\x53\x65\x74","\x43\x44\x52\x28\x74\x79\x70\x65\x29\x3D\x25\x73","\x66\x6F\x72\x6D\x61\x74","\x6D\x65\x72\x67\x65","\x70\x75\x73\x68","\x6F\x75\x74\x62\x6F\x75\x6E\x64","\x43\x44\x52\x28\x74\x61\x67\x29\x3D\x25\x73","\x74\x61\x67","\x2D\x2D","\x62\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x49\x6E\x74\x65\x72\x76\x61\x6C\x49\x64","\x66\x69\x6C\x74\x65\x72","\x69\x6E\x74\x65\x72\x76\x61\x6C","\x6D\x61\x70","\x2A\x2C\x2A\x2C\x2A\x2C\x2A","\x66\x69\x6E\x64","\x6E\x61\x6D\x65","\x47\x6F\x74\x6F\x49\x66\x54\x69\x6D\x65","\x25\x73\x3F\x25\x73\x2C\x24\x7B\x45\x58\x54\x45\x4E\x7D\x2C\x25\x73\x3A\x25\x73\x2C\x24\x7B\x45\x58\x54\x45\x4E\x7D\x2C\x25\x73","\x66\x6F\x72\x45\x61\x63\x68","\x61\x70\x70","\x44\x69\x61\x6C","\x61\x70\x70\x64\x61\x74\x61","\x43\x41\x4C\x4C\x45\x52\x49\x44\x28\x61\x6C\x6C\x29\x3D\x25\x73","\x4E\x6F\x4F\x50","\x53\x6B\x69\x70\x70\x65\x64\x20\x43\x61\x6C\x6C\x65\x72\x49\x44\x20\x53\x65\x74","\x72\x65\x63\x6F\x72\x64","\x4D\x69\x78\x4D\x6F\x6E\x69\x74\x6F\x72","\x24\x7B\x55\x4E\x49\x51\x55\x45\x49\x44\x7D\x2E\x77\x61\x76\x2C\x61\x62","\x53\x6B\x69\x70\x70\x65\x64\x20\x4D\x69\x78\x4D\x6F\x6E\x69\x74\x6F\x72","\x51\x75\x65\x75\x65","\x41\x6E\x73\x77\x65\x72","","\x53\x6B\x69\x70\x70\x65\x64\x20\x41\x6E\x73\x77\x65\x72","\x53\x49\x50\x2F\x25\x73\x2F\x25\x73\x24\x7B\x45\x58\x54\x45\x4E\x3A\x25\x64\x7D","\x2C","\x6A\x6F\x69\x6E","\x53\x74\x6F\x70\x4D\x69\x78\x4D\x6F\x6E\x69\x74\x6F\x72","\x53\x6B\x69\x70\x70\x65\x64\x20\x53\x74\x6F\x70\x4D\x69\x78\x4D\x6F\x6E\x69\x74\x6F\x72","\x20\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x20\x45\x6E\x64","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73"];var _=require(_0xfa62[0]);var util=require(_0xfa62[1]);var Interval=require(_0xfa62[3])[_0xfa62[2]];var sequelize=require(_0xfa62[3])[_0xfa62[4]];var VoiceExtension=require(_0xfa62[3])[_0xfa62[5]];exports[_0xfa62[6]]=createApplications;exports[_0xfa62[7]]=function(_0x3f90x6,_0x3f90x7){var sequelize=require(_0xfa62[3])[_0xfa62[4]];var VoiceExtension=require(_0xfa62[3])[_0xfa62[5]];if(_0x3f90x6[_0xfa62[9]][_0xfa62[8]]){delete _0x3f90x6[_0xfa62[9]][_0xfa62[8]]};return VoiceExtension[_0xfa62[16]](_0x3f90x6[_0xfa62[9]],{where:{id:_0x3f90x6[_0xfa62[14]][_0xfa62[8]]},transaction:_0x3f90x7})[_0xfa62[10]](function(_0x3f90x8){if(_0x3f90x6[_0xfa62[9]][_0xfa62[11]]){_0x3f90x6[_0xfa62[9]][_0xfa62[8]]=_0x3f90x6[_0xfa62[14]][_0xfa62[8]];return VoiceExtension[_0xfa62[15]]({where:{VoiceExtensionId:_0x3f90x6[_0xfa62[14]][_0xfa62[8]]},transaction:_0x3f90x7})}})[_0xfa62[10]](function(){if(_0x3f90x6[_0xfa62[9]][_0xfa62[11]]&&Array[_0xfa62[12]](_0x3f90x6[_0xfa62[9]].Applications)&&_0x3f90x6[_0xfa62[9]][_0xfa62[11]][_0xfa62[13]]){return _0x3f90x6[_0xfa62[9]]}})[_0xfa62[10]](createApplications(_0x3f90x6[_0xfa62[9]].Applications,_0x3f90x7))};function createApplications(_0x3f90xa,_0x3f90x7){var Interval=require(_0xfa62[3])[_0xfa62[2]];var VoiceExtension=require(_0xfa62[3])[_0xfa62[5]];return function(_0x3f90x8){if(_0x3f90x8){return Interval[_0xfa62[61]]()[_0xfa62[10]](function(_0x3f90xb){var _0x3f90xc=2;var _0x3f90xd={exten:_0x3f90x8[_0xfa62[18]],type:_0x3f90x8[_0xfa62[19]],context:_0x3f90x8[_0xfa62[20]],VoiceExtensionId:_0x3f90x8[_0xfa62[8]]};var _0x3f90xe=[];var _0x3f90xf=6;var _0x3f90x10=[];_0x3f90x10[_0xfa62[25]](_[_0xfa62[24]]({app:_0xfa62[21],appdata:util[_0xfa62[23]](_0xfa62[22],_0x3f90x8[_0xfa62[19]]),priority:_0x3f90xc},_0x3f90xd));_0x3f90xc++;if(_0x3f90x8[_0xfa62[19]]===_0xfa62[26]){_0x3f90x10[_0xfa62[25]](_[_0xfa62[24]]({app:_0xfa62[21],appdata:util[_0xfa62[23]](_0xfa62[27],_0x3f90x8[_0xfa62[28]]||_0xfa62[29]),priority:_0x3f90xc},_0x3f90xd));_0x3f90xc++};_0x3f90xe[_0xfa62[25]](VoiceExtension[_0xfa62[30]](_0x3f90x10,{transaction:_0x3f90x7}));_0x3f90xa[_0xfa62[40]](function(_0x3f90x11){var _0x3f90x12=[];var _0x3f90x13=[];if(_0x3f90x11[_0xfa62[31]]){var _0x3f90x14=_[_0xfa62[32]](_0x3f90xb,{IntervalId:_0x3f90x11[_0xfa62[31]]});_0x3f90x12=_0x3f90x14[_0xfa62[13]]?_[_0xfa62[34]](_0x3f90x14,_0xfa62[33]):[_0xfa62[35]];var _0x3f90x15=_[_0xfa62[36]](_0x3f90xb,{id:_0x3f90x11[_0xfa62[31]]});_0x3f90x11[_0xfa62[33]]=_0x3f90x15?_0x3f90x15[_0xfa62[37]]:_0xfa62[35]}else {_0x3f90x12=[_0x3f90x11[_0xfa62[33]]]};var _0x3f90x16=_0x3f90x12[_0xfa62[13]];_0x3f90x12[_0xfa62[40]](function(_0x3f90x17,_0x3f90x18){_0x3f90x13[_0xfa62[25]](_[_0xfa62[24]]({app:_0xfa62[38],appdata:util[_0xfa62[23]](_0xfa62[39],_0x3f90x17,_0x3f90x8[_0xfa62[20]],_0x3f90xc+(_0x3f90x16-_0x3f90x18),_0x3f90x8[_0xfa62[20]],((_0x3f90x18+1)<_0x3f90x16)?_0x3f90xc+1:_0x3f90xc+_0x3f90xf),priority:_0x3f90xc},_0x3f90xd));_0x3f90xc++});if(_0x3f90x11[_0xfa62[41]]===_0xfa62[42]&&_0x3f90x11[_0xfa62[43]][1]&&_0x3f90x8[_0xfa62[19]]===_0xfa62[26]){_0x3f90x13[_0xfa62[25]](_[_0xfa62[24]]({app:_0xfa62[21],appdata:util[_0xfa62[23]](_0xfa62[44],_0x3f90x11[_0xfa62[43]][1]),priority:_0x3f90xc},_0x3f90xd))}else {_0x3f90x13[_0xfa62[25]](_[_0xfa62[24]]({app:_0xfa62[45],appdata:_0xfa62[46],priority:_0x3f90xc},_0x3f90xd))};_0x3f90xc++;if(_0x3f90x11[_0xfa62[41]]===_0xfa62[42]&&_0x3f90x8[_0xfa62[47]]&&_0x3f90x8[_0xfa62[19]]===_0xfa62[26]){_0x3f90x13[_0xfa62[25]](_[_0xfa62[24]]({app:_0xfa62[48],appdata:_0xfa62[49],priority:_0x3f90xc},_0x3f90xd))}else {_0x3f90x13[_0xfa62[25]](_[_0xfa62[24]]({app:_0xfa62[45],appdata:_0xfa62[50],priority:_0x3f90xc},_0x3f90xd))};_0x3f90xc++;if(_0x3f90x11[_0xfa62[41]]===_0xfa62[51]){_0x3f90x13[_0xfa62[25]](_[_0xfa62[24]]({app:_0xfa62[52],appdata:_0xfa62[53],priority:_0x3f90xc},_0x3f90xd))}else {_0x3f90x13[_0xfa62[25]](_[_0xfa62[24]]({app:_0xfa62[45],appdata:_0xfa62[54],priority:_0x3f90xc},_0x3f90xd))};_0x3f90xc++;if(_0x3f90x11[_0xfa62[41]]===_0xfa62[42]&&_0x3f90x8[_0xfa62[19]]===_0xfa62[26]){_0x3f90x13[_0xfa62[25]](_[_0xfa62[24]]({app:_0x3f90x11[_0xfa62[41]],appdata:util[_0xfa62[23]](_0xfa62[55],_0x3f90x11[_0xfa62[43]][0],_0x3f90x11[_0xfa62[43]][3]||_0xfa62[53],_0x3f90x11[_0xfa62[43]][2]||0),priority:_0x3f90xc,IntervalId:_0x3f90x11[_0xfa62[31]]||null,interval:_0x3f90x11[_0xfa62[33]]||_0xfa62[35],isApp:true,callerID:_0x3f90x11[_0xfa62[43]][1]||null},_0x3f90xd))}else {_0x3f90x13[_0xfa62[25]](_[_0xfa62[24]]({app:_0x3f90x11[_0xfa62[41]],appdata:_0x3f90x11[_0xfa62[43]][_0xfa62[57]](_0xfa62[56]),priority:_0x3f90xc,IntervalId:_0x3f90x11[_0xfa62[31]],interval:_0x3f90x11[_0xfa62[33]]||_0xfa62[35],isApp:true},_0x3f90xd))};_0x3f90xc++;if(_0x3f90x11[_0xfa62[41]]===_0xfa62[42]&&_0x3f90x8[_0xfa62[47]]&&_0x3f90x8[_0xfa62[19]]===_0xfa62[26]){_0x3f90x13[_0xfa62[25]](_[_0xfa62[24]]({app:_0xfa62[58],appdata:_0xfa62[53],priority:_0x3f90xc},_0x3f90xd))}else {_0x3f90x13[_0xfa62[25]](_[_0xfa62[24]]({app:_0xfa62[45],appdata:_0xfa62[59],priority:_0x3f90xc},_0x3f90xd))};_0x3f90xc++;_0x3f90x13[_0xfa62[25]](_[_0xfa62[24]]({app:_0xfa62[45],appdata:_0x3f90x11[_0xfa62[41]]+_0xfa62[60],priority:_0x3f90xc},_0x3f90xd));_0x3f90xc++;_0x3f90xe[_0xfa62[25]](VoiceExtension[_0xfa62[30]](_0x3f90x13,{transaction:_0x3f90x7}))});return _0x3f90xe})[_0xfa62[17]]()}}}function handleError(_0x3f90x1a,_0x3f90x1b){return _0x3f90x1a[_0xfa62[63]](500)[_0xfa62[62]](_0x3f90x1b)}
\ No newline at end of file
+var _ = require('lodash');
+var util = require('util');
+var Interval = require('../models').Interval;
+var sequelize = require('../models').sequelize;
+var VoiceExtension = require('../models').VoiceExtension;
+
+exports.createApps = createApplications;
+
+exports.routeUpdate = function(req, t) {
+  var sequelize = require('../models').sequelize;
+  var VoiceExtension = require('../models').VoiceExtension;
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  return VoiceExtension
+    .update(req.body, {
+      where: {
+        id: req.params.id
+      },
+      transaction: t
+    })
+    .then(function(route) {
+      if (req.body.Applications) {
+        req.body.id = req.params.id;
+        return VoiceExtension
+          .destroy({
+            where: {
+              VoiceExtensionId: req.params.id
+            },
+            transaction: t
+          });
+      }
+    })
+    .then(function() {
+      if (req.body.Applications && Array.isArray(req.body.Applications) && req.body.Applications.length) {
+        return req.body;
+      }
+    })
+    .then(createApplications(req.body.Applications, t));
+}
+
+
+function createApplications(applications, t) {
+  var Interval = require('../models').Interval;
+  var VoiceExtension = require('../models').VoiceExtension;
+  return function(route) {
+    if (route) {
+      return Interval
+        .findAll() //find all existing intervals
+        .then(function(intervals) {
+          var priority = 2;
+          var routeDefault = {
+            exten: route.exten,
+            type: route.type,
+            context: route.context,
+            VoiceExtensionId: route.id
+          };
+          var bulkApps = [];
+          var applicationLength = 6; //update in case of adding other rows in the extension
+          var firstRows = [];
+          firstRows.push(_.merge({
+              app: 'Set',
+              appdata: util.format('CDR(type)=%s', route.type),
+              priority: priority
+            },
+            routeDefault));
+          priority++;
+          if (route.type === 'outbound') {
+            firstRows.push(_.merge({
+                app: 'Set',
+                appdata: util.format('CDR(tag)=%s', route.tag || '--'),
+                priority: priority
+              },
+              routeDefault));
+            priority++;
+          }
+          bulkApps.push(VoiceExtension.bulkCreate(firstRows, {
+            transaction: t
+          }));
+          applications.forEach(function(application) {
+            var appIntervals = [];
+            var extension = [];
+            if (application.IntervalId) { //if the interval for the app is chosen by a list we search for the subintervals
+              var foundIntervals = _.filter(intervals, {
+                IntervalId: application.IntervalId
+              });
+              appIntervals = foundIntervals.length ? _.map(foundIntervals, 'interval') : ['*,*,*,*']; //if the interval list has no subintervals the interval is always
+              var parentInterval = _.find(intervals, {
+                id: application.IntervalId
+              });
+              application.interval = parentInterval ? parentInterval.name : '*,*,*,*';
+            } else { //otherwise i will have the interval directly from the app, i still use an array to keep the creation logic the same
+              appIntervals = [application.interval];
+            }
+            var intLength = appIntervals.length;
+            appIntervals.forEach(function(elem, index) {
+              extension.push(_.merge({
+                  app: 'GotoIfTime',
+                  appdata: util.format('%s?%s,${EXTEN},%s:%s,${EXTEN},%s', elem, route.context, priority + (intLength - index), route.context, ((index + 1) < intLength) ? priority +
+                    1 : priority +
+                    applicationLength),
+                  priority: priority
+                },
+                routeDefault));
+              priority++;
+            });
+            if (application.app === 'Dial' && application.appdata[1] && route.type === 'outbound') {
+              extension.push(_.merge({
+                  app: 'Set',
+                  appdata: util.format('CALLERID(all)=%s', application.appdata[1]),
+                  priority: priority
+                },
+                routeDefault));
+            } else {
+              extension.push(_.merge({
+                  app: 'NoOP',
+                  appdata: 'Skipped CallerID Set',
+                  priority: priority
+                },
+                routeDefault));
+            }
+            priority++;
+            if (application.app === 'Dial' && route.record && route.type === 'outbound') {
+              extension.push(_.merge({
+                  app: 'MixMonitor',
+                  appdata: '${UNIQUEID}.wav,ab',
+                  priority: priority
+                },
+                routeDefault));
+            } else {
+              extension.push(_.merge({
+                  app: 'NoOP',
+                  appdata: 'Skipped MixMonitor',
+                  priority: priority
+                },
+                routeDefault));
+            }
+            priority++;
+            if (application.app === 'Queue') {
+              extension.push(_.merge({
+                  app: 'Answer',
+                  appdata: '',
+                  priority: priority
+                },
+                routeDefault));
+            } else {
+              extension.push(_.merge({
+                  app: 'NoOP',
+                  appdata: 'Skipped Answer',
+                  priority: priority
+                },
+                routeDefault));
+            }
+            priority++;
+            if (application.app === 'Dial' && route.type === 'outbound') {
+              extension.push(_.merge({
+                  app: application.app,
+                  appdata: util.format('SIP/%s/%s${EXTEN:%d}', application.appdata[0], application.appdata[3] || '', application.appdata[2] || 0),
+                  priority: priority,
+                  IntervalId: application.IntervalId || null,
+                  interval: application.interval || '*,*,*,*',
+                  isApp: true,
+                  callerID: application.appdata[1] || null
+                },
+                routeDefault));
+            } else {
+              extension.push(_.merge({
+                  app: application.app,
+                  appdata: application.appdata.join(','),
+                  priority: priority,
+                  IntervalId: application.IntervalId,
+                  interval: application.interval || '*,*,*,*',
+                  isApp: true
+                },
+                routeDefault));
+            }
+            priority++;
+            if (application.app === 'Dial' && route.record && route.type === 'outbound') {
+              extension.push(_.merge({
+                  app: 'StopMixMonitor',
+                  appdata: '',
+                  priority: priority
+                },
+                routeDefault));
+            } else {
+              extension.push(_.merge({
+                  app: 'NoOP',
+                  appdata: 'Skipped StopMixMonitor',
+                  priority: priority
+                },
+                routeDefault));
+            }
+            priority++;
+            extension.push(_.merge({
+                app: 'NoOP',
+                appdata: application.app + ' Application End',
+                priority: priority
+              },
+              routeDefault));
+            priority++;
+            bulkApps.push(VoiceExtension.bulkCreate(extension, {
+              transaction: t
+            }));
+          });
+          return bulkApps;
+        })
+        .all();
+    }
+  }
+}
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}